2013-03-17 88 views
2

在Matlab中可以用'n'個變量(等級2或1)求解'n'(無線性)方程組嗎?如何在Matlab中用'n'個變量(二次多項式)求解'n'(非線性)方程組?

你能指點我一個例子嗎?

我試着使用fsolve功能,但下一個錯誤出現:

??? Error using ==> feval Undefined function or method 'ecuaciones' for input arguments of type 'double'.

example with fsolve

編輯:

我叫 'ecuaciones.m' 文件,該文件有下一個內容:

function [f]=ecuaciones(x) 

f(1)=x(1) + x(2) + x(3) + 2*x(4) -1,905; 
f(2)=2*x(3) + 3*x(4) + x(5) + x(6) - 3,922; 
f(3)=x(1) + 2*x(2) + x(4) + x(5) + x(6) - 1,961; 
f(4)=1,961*x(3) + x(3)*x(5) - x(2)*x(3) - 0,02834*(x(5)^2); 
f(5)=9,32845*(x(3)^2) - x(4)*x(6); 
f(6)=61,4723*x(1)*x(6) - x(2)*x(5); 


J = zeros (n,n); 

J = 

[ 1, 1, 1, 2, 0, 0] 
[ 0, 0, 0, 0, 0, 0] 
[ 0, 0, 2, 3, 1, 1] 
[ 1, 2, 0, 1, 1, 1] 
[ 0, -x3, x5 - x2 + 1961/1000, 0, x3 - (1417*x5)/25000, 0] 
[ 0, 0, (2625725246496519*x3)/140737488355328, -x6, 0, -x4] 
[ (8651457105425229*x6)/140737488355328, -x5, 0, 0, -x2, (8651457105425229*x1)/140737488355328]; 

然後,在Matlab控制檯我嘗試:

>> x0=[1,1,1,1,1,1]; 
>> [x,feval,flag]=fsolve('ecuaciones',x0); 
+0

錯誤味精是通知你,有沒有定義'ecuaciones'功能。 – fpe 2013-03-17 13:25:30

+0

我編輯了這個問題。 @Shai:我不知道英文的確切傳譯。當我說'等級'2時,這意味着變量是(例如):x^2 – vicenrele 2013-03-17 13:48:46

+0

二年級是一個二階多項式 – Shai 2013-03-17 13:54:13

回答

2

使用函數處理

>> x = fsolve(@ecuaciones, x0); 

你需要確保ecuaciones.m在MATLAB的路徑。

UPDATE:
更好的收斂,您可能需要計算雅可比也。
在你的情況下,所述雅可比是n通過n矩陣J(l,k)f(l) w.r.t x(k)在點x的偏導數。
您將需要修改ecuaciones.m返回輸出第一是f,第二個是J

function [f J] = ecuaciones(x) 

f(1)=x(1) + x(2) + x(3) + 2*x(4) -1,905; 
f(2)=2*x(3) + 3*x(4) + x(5) + x(6) - 3,922; 
f(3)=x(1) + 2*x(2) + x(4) + x(5) + x(6) - 1,961; 
f(4)=1,961*x(3) + x(3)*x(5) - x(2)*x(3) - 0,02834*(x(5)^2); 
f(5)=9,32845*(x(3)^2) - x(4)*x(6); 
f(6)=61,4723*x(1)*x(6) - x(2)*x(5); 

J = [... 
     1, 1, 1, 2, 0, 0;... 
     0, 0, 0, 0, 0, 0;... 
     0, 0, 2, 3, 1, 1;... 
     1, 2, 0, 1, 1, 1;... 
     0, -x3, x5 - x2 + 1961/1000, 0, x3 - (1417*x5)/25000, 0;... 
     0, 0, (2625725246496519*x3)/140737488355328, -x6, 0, -x4;... 
     (8651457105425229*x6)/140737488355328, -x5, 0, 0, -x2, (8651457105425229*x1)/140737488355328]; 

你可以叫fsolve

>> x = fsolve(@ecuaciones, x0, struct('Jacobian','on')); 
+0

我得到了同樣的錯誤 – vicenrele 2013-03-17 13:53:30

+1

似乎函數'ecuaciones.m'不在你的matlab路徑中。將目錄更改爲與'ecuaciones.m'相同的文件夾,然後重試。 – Shai 2013-03-17 13:55:08

+0

@vicenrele - 看我的更新 – Shai 2013-03-17 14:31:15