2013-10-18 46 views
1

我見過matlab中fsolve的幾個例子,但似乎無法找到任何顯示如何以矩陣形式傳遞參數的例子。FSolve矩陣形式的聯立方程與matlab

這是我的代碼。

[A,b] = equationsToMatrix(eq1,eq2) 

X0 = [0 0] 

fsolve([A,b], X0) 

這裏是輸出

eq1 = - sx - sy/2 == 5 

eq2 = - (3*sx)/2 - (3*sy)/2 == 9 

A = 

[ -1, -1/2] 
[ -3/2, -3/2] 


b = 

5 
9 


X0 = 

0  0 

Error using lsqfcnchk (line 109) 
If FUN is a MATLAB object, it must have an feval method. 

Error in fsolve (line 198) 
    funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag); 

Error in SolveTesting (line 70) 
fsolve([A,b], X0) 

正如你可以看到我已經有了方程系統在解決一個很好的形式,爲什麼不matlab的接受呢?我也不明白x0參數的意義。我提供了一個方程組,所以爲什麼我需要一個起點?

+0

你需要提供一個「球場」的起點,這樣算法不會被遠離答案的巨大錯誤所迷惑。第一個參數應該是一個評估函數(它會返回距離答案的距離)。你不能只傳遞一個矩陣。但是,您可以創建一個匿名函數並將其包含在其中。 – paddy

+0

閱讀http://www.mathworks.com/help/optim/ug/fsolve.html – paddy

+0

不應該x0有4個變量呢?系統中兩個未知數的最小/最大值?我當然引用了幫助文檔,但我不理解它。這些例子都直接提供被評估的方程。由於它們來自其他代碼的結果,我無法對方程進行硬編碼。 –

回答

0

想通了。這是交易。傳遞給fsolve的對象需要是指向函數的指針。該函數需要評估系統中的每個方程,並返回一個包含每個方程的數值結果的矩陣。如果所有方程都返回零,則系統解決。

傳遞給fsolve的函數可以在單獨的腳本中定義,也可以在簡單的情況下在行中創建。

例如定義:

function f = matrixfun(z,A,b) 
    f = double(A) * [z(1);z(2)] + double(b); 
end 

然後調用:

>> fsolve(@matrixfun,guess,[],A,b) 

Equation solved. 

fsolve completed because the vector of function values is near zero 
as measured by the default value of the function tolerance, and 
the problem appears regular as measured by the gradient. 

<stopping criteria details> 


ans = 

4.0000 2.0000 

或者你可以這樣做:

>> fsolve(@(z)double(A)*[z(1);z(2)]+double(b),[-5 -5]) 

Equation solved. 

fsolve completed because the vector of function values is near zero 
as measured by the default value of the function tolerance, and 
the problem appears regular as measured by the gradient. 

<stopping criteria details> 


ans = 

4.0000 2.0000 

**我通過& b。通過雙( ),因爲起初我得到一個錯誤,fsolve希望所有值都是雙打。