我是Matlab的新手。
我正在进行扩展卡尔曼滤波器模拟,这需要为给定函数计算雅可比行列式(部分差分函数)。我正在使用函数来获得雅可比值:
function [H] = jacobH(x1,x2)
H = [ -(2*x1(1,:,:) - 2*x2(1,:,:))/(8*pi*((x1(1,:,:) - x2(1,:,:))^2 + (x1(3,:,:) - x2(3,:,:))^2)^(3/2)), 0,
-(2*x1(3,:,:) - 2*x2(3,:,:))/(8*pi*((x1(1,:,:) - x2(1,:,:))^2 + (x1(3,:,:) - x2(3,:,:))^2)^(3/2)), 0];
end
Jacobian基本上区分1 /(4 * pi * sqrt((x1-x2)^ 2 +(y1-y2)^ 2))wrt x,y
例如,如果我传递jacobH(x1(:,1,1),x2(:,1,1))那么我应该将H作为1x4矩阵,其中[value1,0,value2,0]。 value1和value2因不同的输入而异。
但我只得到一个价值。我不知道我哪里出错了。
我搜索了类似的问题,但没有一个与我的问题相关。
此外,有更有效的方法吗?
感谢任何帮助!
答案 0 :(得分:1)
使用您的功能,我在尝试时获得了正确的行为:
x1 = ones(3,3,3);
x2 = ones(3,3,3);
jacobH(x1(:,1,1), x2(:,1,1))
ans =
NaN 0 NaN 0