【问题标题】:Differentiating with MATLAB using jacobian and symbolic function使用雅可比和符号函数与 MATLAB 进行微分
【发布时间】:2017-03-20 10:55:37
【问题描述】:

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

假设我有这个动能方程

变量xphi 是符号函数,当区分它们时会给出diff(x(t),t)diff(phi(t),t)

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

如果将变量作为符号变量给出,我可以这样做,然而,在我的例子中,它们是作为符号函数给出的,例如

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

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

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

关于如何使用符号工具箱轻松推导出这些方程式,无需一行行代码,有什么想法吗?

【问题讨论】:

  • 向我们展示设置符号变量的示例代码以及如何解决这个问题。那么别人向你展示更好的方法会容易得多……

标签: matlab


【解决方案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)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多