使用雅可比和符号函数区分MATLAB

时间:2017-03-20 10:55:38

标签: matlab

我在MATLAB中遇到了一个有趣的问题,我无法找到一种在包含符号函数的符号方程上运行jacobian的简洁方法。

我们说我有动能方程式

kinetic energy

变量xphi是符号函数,在区分时会提供diff(x(t),t)diff(phi(t),t)

如果我想这样取坐标的偏导数(x_dot和phi_dot)

partial

如果变量是作为符号变量给出的话,我可以这样做,然而,在我的情况下,它们是作为符号函数给出的,例如

diff(x(t),t)
diff(phi(t),t)

我可以使用subs()函数替换符号变量,但这很快就会变得混乱。特别是在下一步:

time

这意味着我必须将所有这些变量重新替换为函数,以便我可以采用时间导数。

关于如何使用符号工具箱轻松导出这些方程而没有行和代码行的任何想法?

1 个答案:

答案 0 :(得分:1)

我担心你唯一能做的就是使用subs,但是你可以把它包装成这样的函数:

function df = my_jacobian(f, x)
    x_ = sym('a', size(x));
    f_ = subs(f, x, x_);
    df_ = jacobian(f_, x_);
    df = subs(df_, x_, x);
end

使用此功能,您可以计算雅各比,类似于以下示例:

syms x(t) y(t)

f = 2*diff(x(t), t) + 5*diff(y(t), t) + diff(x(t), t) * diff(y(t), t);
df = my_jacobian(f, [diff(x(t), t) diff(y(t), t)])