在matlab中如何对一个表达式求导?
例如:t=0:100;
Js=-inv(A+B)*C(A,B,C是矩阵且是角度(u(i))的函数,角度是时间t的函数);
现在要求Js的导数,该怎么求呢??
我觉得在matlab中,求逆就是一个非常复杂的事情,如果再对逆求导,就更复杂了,求高手赐教解决办法。(直接解也行,绕过去也行,只要能把这个问题解决了。)
不胜感谢!!! Js对谁的求导?
回复 沙发 sigma665 的帖子
应该是在每个时间点对 t求导 或者是这样一个问题:如何对一个矩阵的逆 求导??这里矩阵的逆相当复杂,郁闷了好久了。。。请教!!
回复 地板 wxl789 的帖子
用数值求导啊再复杂,算出来的是一组数
然后再中心差分求导
回复 5楼 sigma665 的帖子
小西请说的具体点啊。。用m文件编写程序该怎么实现呢?
直接用diff指令会报错的啊。
谢谢! 再补充一点,这个应该是符号求导,不是数值求导。。。
直接用 diff 出来之后少掉了一维。
应该把t和u(i)声明为syms之后求导,这就和前边的数值运算相矛盾了,请教各位有遇到类似问题的吗??
急盼赐教。。
谢谢!!!
回复 7楼 wxl789 的帖子
矩阵求导没试过,不知道行不行一维的数组可以 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)
回复 9楼 科技在线 的帖子
我看他的表达式会很复杂,符号求估计会很慢回复 9楼 科技在线 的帖子
非常感谢。。。正如小西所说的,我的表达式很复杂,而且,还是未知的。
如例中的 Js是角度的函数,角度的具体表达式在 Js表达式求出后才能给出。。。
请问这个该怎么办呢??? 建议符号运算改用maple或者Mathematica来做吧
回复 12楼 happy 的帖子
感谢教授。。前边的公式就是用maple求的表达式,但运算这个的时候直接死掉,没反应了。。。
所以想想是否可用matlab直接用数值方法算。。。
到现在还么有解决。
现在的思路就是把 t 和 角度(u(i)) 看做符号求导,但具体的表达式又没有。。。
该怎么解决呢???
希望有遇到相似问题的前辈提供思路。。。
谢谢!!!
回复 13楼 wxl789 的帖子
我觉得加入太复杂,用maple或者其他的软件计算出来都比较麻烦(书写上比较麻烦)。所以还是考虑一下手动解析上有没有可能,因为我曾经也有你这样的想法,但是最后还是考虑手动了回复 14楼 无水1324 的帖子
谢谢无水。。我觉得现在可以暂时放弃了。。
改用其他方法做。。
解析方法在混沌中应用的好像不多。
在推导公式过程中,我已经尝试着故意避开这个,但还是没有绕掉。。。:@(
你说的手动是什么意思呢?如果是让软件算就很复杂,手动算不是更烦吗?
页:
[1]
2