gpt4 book ai didi

matlab - 如何在 Matlab 中通过 'symfun' 实现符号函数的导数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:24 24 4
gpt4 key购买 nike

这是我的 Matlab 程序:

syms x(t) t;
f = x^2 + 5;

f 的结果:

f(t) = x(t)^2 + 5

fx 都是Matlab 中的symfun 类。我想要 df/dx 的结果,它等于 2*x(t)。我在 Matlab 中试过这个:

diff(f, x);

并得到以下错误:

Error using mupadmex
Error in MuPAD command: The variable is
invalid. [stdlib::diff]
Error in sym/diff (line 57)
R = mupadmex('symobj::diff', S.s, x.s,
int2str(n));

df/dx在Matlab中如何获取?

最佳答案

在较新版本的 Matlab 中(我使用的是 R2014b),错误消息更加清晰:

Error using sym/diff (line 26) All arguments, except for the first one, must not be symbolic functions.

所以,它看起来像 sym/diff不能对文档中称为抽象或任意的东西求导 symfun ,即没有定义的。文档中没有明确提及此限制,但各种输入模式都暗示了这一点。


解决方法 1:简单的函数,自变量 t 只出现在微分的 symfun 中

我还没有找到任何特别优雅的解决方法。如果 t 只出现在您感兴趣的变量中(这里是 x(t)),而不是单独出现或出现在其他抽象符号函数中,您可以根据时间进行区分t 然后取消多余的条款。例如:

syms t x(t) y(t) z
f1 = x^2+5;
f2 = x^2+z^2+5;
f3 = x^2+y^2+z^2+5+t;
dxdt = diff(x,t);
df1 = diff(f1,t)/dxdt
df2 = diff(f2,t)/dxdt
df3 = diff(f3,t)/dxdt

由于上述原因,前两种情况返回必需的 2*x(t),但第三种情况不返回。您可能需要申请 simplify在某些情况下完全划分 D(x)(t) 项。


解决方法 2:更可靠但更复杂的方法

使用 subs多次,您可以用标准符号变量替换有问题的符号函数,区分并交换回来。例如:

syms t x(t) y(t) z
f3 = x^2+y^2+z^2+5+t;
xx = sym('x');
df3 = subs(diff(subs(f3,x,xx),xx),xx,x)

对于上面的第三种情况,它也返回 2*x(t)。但我认为这是一种丑陋的 hack。

有点荒谬,Matlab 做不到这一点——Mathematica 没有这样的问题。看来 MuPAD 本身就有这个限制。你可以考虑 filing a feature request与 MathWorks。

关于matlab - 如何在 Matlab 中通过 'symfun' 实现符号函数的导数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com