wxl789 发表于 2008-10-8 16:38

在matlab中如何对一个表达式求导?

例如:
t=0:100;
Js=-inv(A+B)*C(A,B,C是矩阵且是角度(u(i))的函数,角度是时间t的函数);

现在要求Js的导数,该怎么求呢??

我觉得在matlab中,求逆就是一个非常复杂的事情,如果再对逆求导,就更复杂了,求高手赐教解决办法。(直接解也行,绕过去也行,只要能把这个问题解决了。)

不胜感谢!!!

sigma665 发表于 2008-10-8 17:55

Js对谁的求导?

wxl789 发表于 2008-10-8 18:20

回复 沙发 sigma665 的帖子

应该是在每个时间点对 t求导

wxl789 发表于 2008-10-8 23:16

或者是这样一个问题:如何对一个矩阵的逆 求导??这里矩阵的逆相当复杂,郁闷了好久了。。。

请教!!

sigma665 发表于 2008-10-9 08:40

回复 地板 wxl789 的帖子

用数值求导啊
再复杂,算出来的是一组数
然后再中心差分求导

wxl789 发表于 2008-10-9 09:11

回复 5楼 sigma665 的帖子

小西请说的具体点啊。。

用m文件编写程序该怎么实现呢?
直接用diff指令会报错的啊。

谢谢!

wxl789 发表于 2008-10-9 16:49

再补充一点,这个应该是符号求导,不是数值求导。。。
直接用 diff 出来之后少掉了一维。
应该把t和u(i)声明为syms之后求导,这就和前边的数值运算相矛盾了,请教各位有遇到类似问题的吗??

急盼赐教。。
谢谢!!!

sigma665 发表于 2008-10-9 20:27

回复 7楼 wxl789 的帖子

矩阵求导没试过,不知道行不行
一维的数组可以

科技在线 发表于 2008-10-10 02:15

syms x
>> f = sin(x)/sqrt(5-4*cos(x))

f =

sin(x)/(5-4*cos(x))^(1/2)


>> f=-asin(f)

f =

-asin(sin(x)/(5-4*cos(x))^(1/2))


>> diff(f)

ans =

-(cos(x)/(5-4*cos(x))^(1/2)-2*sin(x)^2/(5-4*cos(x))^(3/2))/(1-sin(x)^2/(5-4*cos(x)))^(1/2)


>> simplify(ans)

ans =

-(-5*cos(x)+2*cos(x)^2+2)/(-5+4*cos(x))/(5-4*cos(x))^(1/2)/(-(cos(x)-2)^2/(-5+4*cos(x)))^(1/2)


>> simple(ans)

.........................................
........................................

ans =

(2*cos(x)-1)/(-5+4*cos(x))


>> pretty(ans)

                                 2 cos(x) - 1
                                 -------------
                                 -5 + 4 cos(x)

sigma665 发表于 2008-10-10 08:15

回复 9楼 科技在线 的帖子

我看他的表达式会很复杂,符号求估计会很慢

wxl789 发表于 2008-10-10 10:22

回复 9楼 科技在线 的帖子

非常感谢。。。

正如小西所说的,我的表达式很复杂,而且,还是未知的。
如例中的 Js是角度的函数,角度的具体表达式在 Js表达式求出后才能给出。。。

请问这个该怎么办呢???

happy 发表于 2008-10-11 06:39

建议符号运算改用maple或者Mathematica来做吧

wxl789 发表于 2008-10-11 18:43

回复 12楼 happy 的帖子

感谢教授。。

前边的公式就是用maple求的表达式,但运算这个的时候直接死掉,没反应了。。。

所以想想是否可用matlab直接用数值方法算。。。

到现在还么有解决。

现在的思路就是把 t 和 角度(u(i)) 看做符号求导,但具体的表达式又没有。。。
该怎么解决呢???

希望有遇到相似问题的前辈提供思路。。。
谢谢!!!

无水1324 发表于 2008-10-12 20:35

回复 13楼 wxl789 的帖子

我觉得加入太复杂,用maple或者其他的软件计算出来都比较麻烦(书写上比较麻烦)。所以还是考虑一下手动解析上有没有可能,因为我曾经也有你这样的想法,但是最后还是考虑手动了

wxl789 发表于 2008-10-12 21:25

回复 14楼 无水1324 的帖子

谢谢无水。。

我觉得现在可以暂时放弃了。。
改用其他方法做。。

解析方法在混沌中应用的好像不多。
在推导公式过程中,我已经尝试着故意避开这个,但还是没有绕掉。。。:@(

你说的手动是什么意思呢?如果是让软件算就很复杂,手动算不是更烦吗?
页: [1] 2
查看完整版本: 在matlab中如何对一个表达式求导?