我正在使用MATLAB的符号工具箱,我在解决衍生系数方面遇到了一些问题。也许MATLAB不能做我想要的。无论如何,重现我遇到的问题的代码如下所示:
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)
有谁知道为什么会这样,或者我做错了什么?
答案 0 :(得分:2)
最后一行的结果相对于ydot
是常数,因此整个表达式被视为单个系数(常数)。
coeffs(radot(1), ydot)
的预期结果是什么?
答案 1 :(得分:0)
看起来您可能正在使用coeffs
来表示它不适合的内容。看看帮助。它被设计为给出多项式的系数,而不是微分方程是一个变量或另一个变量的函数。
如果您碰巧尝试使用与xdot
和ydot
相关的衍生产品,则可以执行此操作
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