【问题标题】:How to find the Jacobian of my function in Matlab?如何在 Matlab 中找到我的函数的雅可比行列?
【发布时间】:2016-01-19 03:08:36
【问题描述】:

我在 Matlab 中有以下功能:

f = @(x)[x(1,:)+2*x(2,:)+x(3,:);x(1,:).^3+x(2,:).^2+3*x(3,:)]

如何在 Matlab 中找到该函数的雅可比矩阵?

我尝试过使用函数 jacobian,但我无法让它适用于这个特定的函数。有人可以帮助我正确的论点吗?

【问题讨论】:

  • 我认为您正在寻找 jacobian,它计算指定函数和变量的偏导数:uk.mathworks.com/help/symbolic/jacobian.html?refresh=true
  • 我试过使用这个函数,但我不知道我的函数的第二个参数 v 是什么?我尝试调用:jacobian(f,x),但它不起作用。你能帮我解决吗?
  • v 是向量函数f 导出的变量向量。您无法计算匿名函数的雅可比,您需要使用符号数学工具箱并使用 syms 创建符号变量。查看文档中给出的示例 (doc symbolic/jacobian)。
  • 即使我先写:sym x,然后 jacobian(f,x) 我得到错误:使用 mupadmex 时出错 MuPAD 命令中的错误:输入无效。 '表达式'是预期的。 [第 1 行,第 23 列] sym/jacobian 中的错误(第 34 行) Jsym = mupadmex('symobj::jacobian',F.s,x.s);我做错了什么?
  • 我刚刚告诉过你,你不能像你在问题中尝试的那样计算匿名函数的雅可比。查看文档中的示例!您可能需要执行syms x y zjacobian([x+2*y+z, x^3+y^2+3*z], [x,y,z]) 之类的操作,因为我没有符号数学工具箱,所以无法尝试。

标签: matlab


【解决方案1】:

正如@dasdingonesin 已经写的那样,您需要像这样使用符号工具箱:

syms x y z;
f = [x+2*y+z, x^3+y^2+3*z];
gradf = jacobian(f, [x,y,z])

这会导致:

gradf =

[     1,   2, 1]
[ 3*x^2, 2*y, 3]

顺便说一句:如果您需要在求解器中使用 jacobian,您可以使用 matlabFunction 将该符号函数转换回常规 MATLAB 函数。还有一个很好的关于这个主题的教程available

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2022-11-14
    • 2020-05-01
    相关资源
    最近更新 更多