2015-02-08 95 views
1

我是Matlab新手。矢量作爲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 

雅可比基本上differenciates 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

是你應該寫自己的功能?因爲如果你有象徵性的工具箱,你可以使用內置函數'jacobian',它給你一個很好的符號表達式(如果你願意的話,你當然可以把它轉換成數字形式)。 – 2015-02-08 07:36:10

+0

你的意思是說你將H作爲單個值而不是1x4矩陣? – articuno 2015-02-08 07:42:49

+0

@WouterKuijsters謝謝你的建議。我會嘗試。 – navneetr2008 2015-02-08 08:49:16

回答

1

隨着你的功能我得到正確的行爲時,我嘗試:

x1 = ones(3,3,3); 
x2 = ones(3,3,3);  
jacobH(x1(:,1,1), x2(:,1,1)) 

ans = 

    NaN  0 NaN  0 
+0

@joker謝謝你的回覆。但是,當我嘗試在另一個matlab代碼中調用我的函數時,我得到的是單值結果。 – navneetr2008 2015-02-08 08:51:53

+0

輸入是怎樣的?你可以發佈'x1'和'x2'嗎? – 2015-02-08 08:54:35

+0

x1,x2的一組取樣值:x1 = [0,0.5,1,.5; 1,0.5,2,.5]'; x2 = [3,0.7,4,0.7; 3.5,0.7,4.75,0.75]'這裏x1,x2都是4x2x1矩陣。但我得到[0.0031 0 0.0031 0],即在H ie [value1,0,value1,0]而不是[value1,0,value2,0] – navneetr2008 2015-02-08 10:11:53