2013-07-29 63 views
0

我正在使用MATLAB的符號工具箱,我有一些問題拉出衍生物的係數。也許MATLAB不能做我正在尋找的東西。無論如何,再現我有問題的代碼如下所示:MATLAB符號coeffs問題

clear ; close all; clc; 
syms a b t 
x = sym('x(t)'); 
y = sym('y(t)'); 
syms a b; 

ra = a*cos(x); 
radot = diff(ra, t); 
xdot = diff(x,t); 
ydot = diff(y,t); 

% This one works as expected 
works = coeffs(radot(1), xdot) 
% This doesn't work as expected 
fails = coeffs(radot(1), ydot) 

評論在上面的代碼段突出什麼可行,什麼沒有按預期工作。具體來說,輸出是:

radot = 
-a*sin(x(t))*diff(x(t), t) 
works = 
-a*sin(x(t)) 
fails = 
-a*sin(x(t))*diff(x(t), t) 

有誰知道爲什麼會發生這種情況,或者我是否做錯了什麼?

回答

2

最後一行的結果相對於ydot是恆定的,因此整個表達式被視爲單個係數(常數)。

您對coeffs(radot(1), ydot)的預期結果是什麼?

0

它看起來像你可能會使用coeffs的東西,它不是爲了。看看幫助。它旨在給出多項式的係數,而不是微分方程是一個變量或另一個變量的函數。

如果你碰巧試圖採取相對於xdotydot衍生,你可以做到這一點

syms z; % Subsitution variable for diff(x(t), t) and diff(y(t), t) 
diff(subs(radot(1),xdot,z),z) 
diff(subs(radot(1),ydot,z),z) 

返回

ans = 

-a*sin(x(t)) 


ans = 

0