评估雅可比矩阵的维数错误

时间:2014-01-11 11:56:55

标签: matlab function

我正在尝试在Matlab中实现Levenberg-Marquardt算法。作为其中的一个步骤,我需要在给定点(x0,y0,z0)计算函数的雅可比行列式。

我评估雅可比行列的功能如下:

function [J]=GetJacobian(func,x)
% computes the Jacobian of a function
n=length(x);
fx=feval(func,x);
eps=1.e-8;
xperturb=x;
for i=1:n
xperturb(i)=xperturb(i)+eps;
J(:,i)=(feval(func,xperturb)-fx)/eps;
xperturb(i)=x(i);
end;

我想要最小化的3D功能如下:

function [ y ] = QuadraticF( x )
% evaluates simple quadratic function at given X
% X is a 3x1 vector of coordinates
A = ...
[ 1 1 1
  1 2 1
  1 1 3];
b = [ 1; 5; 1 ];
c = 1;
y = 0.5 .* x' * A * x - b' * x + c;
end

这是具有任意参数的简单二次函数。

当我尝试使用此命令在(0,0,0)处评估雅可比时:

GetJacobian(@QuadraticF, [ 0;0;0 ])

我得到了这个答案:

ans =
   -1.0000   -5.0000   -1.0000

如果我的函数有3个参数,那么Jacobian不应该由3x3矩阵给出吗?我的语法(编码)或概念性问题是什么?

1 个答案:

答案 0 :(得分:1)

你的问题是概念性的。 QuadraticF函数需要三个实数并产生一个实数。 一个函数wrt的衍生物。三个输入变量构成雅可比行列式。为了使雅可比矩阵成为3x3矩阵,你需要一个返回三个数字的映射(f1,f2,f3)(R ^ 3中的一个3元组/一个向量)

我建议你阅读一下多元微积分(http://en.wikipedia.org/wiki/Multivariable_calculus)。拿起一本介绍性的教科书。对于物理学家或工程师来说,如果你发现成熟的数学文本太难了,那也许就是一个。