Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

编写向量和矩阵目标函数

什么是向量和矩阵目标函数?

有些求解器(如 fsolvelsqcurvefit)具有向量或矩阵形式的目标函数。这些类型的目标函数和标量目标函数在用法上的主要区别在于其导数的编写方式。向量值或矩阵值函数的一阶偏导数称为 Jacobian 矩阵;标量函数的一阶偏导数称为梯度。

有关复数值目标函数的信息,请参阅Optimization Toolbox 求解器中的复数

向量函数的 Jacobian 矩阵

如果 x 是自变量组成的向量,F(x) 是向量函数,则 Jacobian 矩阵 J(x) 是

Jij(x)=Fi(x)xj.

如果 F 有 m 个分量,x 有 k 个分量,则 J 是一个 m×k 矩阵。

例如,如果

F(x)=[x12+x2x3sin(x1+2x23x3)],

,则 J(x) 是

J(x)=[2x1x3x2cos(x1+2x23x3)2cos(x1+2x23x3)3cos(x1+2x23x3)].

与此示例相关联的函数文件是:

function [F jacF] = vectorObjective(x)
F = [x(1)^2 + x(2)*x(3);
    sin(x(1) + 2*x(2) - 3*x(3))];
if nargout > 1 % need Jacobian
    jacF = [2*x(1),x(3),x(2);
        cos(x(1)+2*x(2)-3*x(3)),2*cos(x(1)+2*x(2)-3*x(3)), ...
        -3*cos(x(1)+2*x(2)-3*x(3))];
end

要向求解器指示您的目标函数包括 Jacobian 矩阵,请将 SpecifyObjectiveGradient 选项设置为 true。例如:

options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true);

矩阵函数的 Jacobian 矩阵

要定义矩阵 F(x) 的 Jacobian 矩阵,请将矩阵逐列更改为向量。例如,将矩阵

F=[F11F12F21F22F31F32]

重写为向量 f

f=[F11F21F31F12F22F32].

F 的 Jacobian 矩阵可定义为 f 的 Jacobian 矩阵

Jij=fixj.

如果 F 是 m×n 矩阵,并且 x 是包含 k 个元素的向量,则 Jacobian 矩阵是一个 mn×k 矩阵。

例如,如果

F(x)=[x1x2x13+3x225x2x14x2/x14x22x13x24],

则 F 的 Jacobian 矩阵是

J(x)=[x2x14x13502x23x126x2x2/x121/x13x124x23].

具有矩阵值自变量的 Jacobian 矩阵

如果 x 是矩阵,请通过将矩阵 x 逐列更改为向量来定义 F(x) 的 Jacobian 矩阵。例如,如果

X=[x11x12x21x22],

则梯度是按照以下向量定义的:

x=[x11x21x12x22].

根据

F=[F11F12F21F22F31F32],

和 f 具有 F 的向量形式,F(X) 的 Jacobian 矩阵定义为 f(x) 的 Jacobian 矩阵:

Jij=fixj.

例如,

J(3,2)=f(3)x(2)=F31X21, and J(5,4)=f(5)x(4)=F22X22.

如果 F 是 m×n 矩阵,x 是 j×k 矩阵,则 Jacobian 矩阵是 mn×jk 矩阵。

相关主题