0

我正在使用 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)

有谁知道为什么会发生这种情况或我是否做错了什么?

4

2 回答 2

2

最后一行的结果相对于 是常数ydot,因此整个表达式被视为单个系数(常数)。

您的预期结果是coeffs(radot(1), ydot)什么?

于 2013-07-29T08:55:22.247 回答
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
于 2013-07-29T14:56:52.203 回答