编写向量和矩阵目标函数
什么是向量和矩阵目标函数?
有些求解器(如 fsolve
和 lsqcurvefit
)具有向量或矩阵形式的目标函数。这些类型的目标函数和标量目标函数在用法上的主要区别在于其导数的编写方式。向量值或矩阵值函数的一阶偏导数称为雅可比矩阵;标量函数的一阶偏导数称为梯度。
有关复数值目标函数的信息,请参阅Optimization Toolbox 求解器中的复数。
向量函数的雅可比矩阵
如果 x 是自变量组成的向量,F(x) 是向量函数,则雅可比矩阵 J(x) 是
如果 F 有 m 个分量,x 有 k 个分量,则 J 是一个 m×k 矩阵。
例如,如果
,则 J(x) 是
与此示例相关联的函数文件是:
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
要向求解器指示您的目标函数包括雅可比矩阵,请将 SpecifyObjectiveGradient
选项设置为 true
。例如:
options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true);
矩阵函数的雅可比矩阵
要定义矩阵 F(x) 的雅可比矩阵,请将矩阵逐列更改为向量。例如,将矩阵
重写为向量 f
F 的雅可比矩阵可定义为 f 的雅可比矩阵
如果 F 是 m×n 矩阵,并且 x 是包含 k 个元素的向量,则雅可比矩阵是一个 mn×k 矩阵。
例如,如果
则 F 的雅可比矩阵是
具有矩阵值自变量的雅可比矩阵
如果 x 是矩阵,请通过将矩阵 x 逐列更改为向量来定义 F(x) 的雅可比矩阵。例如,如果
则梯度是按照以下向量定义的:
根据
和 f 具有 F 的向量形式,F(X) 的雅可比矩阵定义为 f(x) 的雅可比矩阵:
例如,
如果 F 是 m×n 矩阵,x 是 j×k 矩阵,则雅可比矩阵是 mn×jk 矩阵。