【问题标题】:Function handle for gradient and hessian problems MATLAB梯度和粗麻布问题的函数句柄 MATLAB
【发布时间】:2014-03-22 15:29:20
【问题描述】:

我在处理渐变和粗麻布的函数句柄时遇到问题。

我有以下代码:

syms x1 x2

x = [x1,x2];

% Define the function phi(x)
phi = @(x1,x2) 10*x1^4 - 20*x1^2*x2 + 10*x2^2 + x1^2 - 2*x1 + 5; 

% Define the gradient of the function phi(x)
gradphi = @(x1,x2) jacobian(phi,x).';

% Define the Hessian of phi(x)    
hessphi = @(x1,x2) jacobian(gradphi,x);

现在当我输入命令终端时:

phi(1,2)

我得到了一些标量值。

但是当我输入时

gradphi(1,2)
hessianphi(1,2)

我想要在这些点评估梯度的对应向量。

对于渐变,我只是得到

EDU>> gradphi(1,2)

ans =

2*x1 - 40*x1*x2 + 40*x1^3 - 2
            - 20*x1^2 + 20*x2

这只是 grad 向量函数。但我想要输入 x1 = 1 和 x2 = 2 的实际数值结果。

EDU>> hessphi(1,2)

返回错误。

我不知道为什么。

【问题讨论】:

  • 对于hessianphi,您会收到错误,因为您将函数定义为hessphi 而不是hessianphi
  • 啊,是的,非常感谢,但我的意思是 hessphi(1,2)。

标签: matlab function gradient handle hessian-matrix


【解决方案1】:

对于数组的乘法和除法,您需要在hessianphigradphi 的定义中使用逐元素运算符.*./.^。否则,Matlab 将尝试做矩阵乘法/除法/幂,这不会顺利。

/aside:搜索错误消息的文本将显示最可能的错误原因。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多