2015-11-14 62 views
1

我正在創建一個MATLAB代碼來估計使用前向差分的雅可比矩陣。下面是代碼:「下標索引必須是真正的正整數或邏輯」。

%Calculate Jacobian Numerically using forward differences: 
function J=Jacobianest(x,F) % X is a column vector of variables, f is a column function vector 
h=1e-7; 
n=length(x); 
J=zeros(n); 
for i=1:n 
    xp=x; 
    xp(i)=x(i)+h; 
    J(:,i)=1/h*(F(xp)-F(x)); 
end 

當我運行出現以下錯誤:

 
Jacobianest(x,'multivariable_newton_fun') 
Subscript indices must either be real positive integers or logicals. 

Error in Jacobianest (line 9) 
J(:,i)=1/h*(F(xp)-F(x)); 

我看着其他問題的答案,並試圖調試/ dbstop,但我似乎無法找到任何明顯。

我使用i作爲列索引,它應該只有從1n(希望所有整數)的整數值。

+0

錯誤不在賦給'J',而是賦給'F'。我猜'xp'和'x'不是整數。我認爲'F(xp(i))'會解決你的問題。作爲一個額外的建議:[不要使用'i'作爲變量](http://stackoverflow.com/questions/14790740/using-i-and-j-as-variables-in-matlab) – Adriaan

回答

1

您需要傳遞函數而不是字符串。 如何:

Jacobianest(x,@multivariable_newton_fun) 

如果它是一個字符串,即使用單引號,然後F(1)給出名稱的字符串的第一個字母,在這種情況下,「M」。 另外,如果你嘗試F(0)你會得到上述錯誤。

@生成一個函數(想象一個函數句柄或其他語言的函數引用)。然後括號F(xp)被解釋爲函數調用,而不是下標索引。

+0

感謝您的答案,非常有用。我現在整理了它。 –

相關問題