2

Matlabで「n」変数(グレード2または1)を使用して「n」(線形なし)方程式のシステムを解くことは可能ですか?

例を挙げていただけますか?

関数を使おうとしましfsolveたが、次のエラーが表示されます:

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

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);
4

1 に答える 1

2

関数ハンドルを使用する

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

ecuaciones.mmatlabのパスにあることを確認する必要があります。

更新:
収束を改善するために、Jacobianも計算することをお勧めします。
あなたの場合、Jacobianはnbyn行列であり、は点でのwrtJ(l,k)の偏導関数です。最初の出力と2番目の出力の2つの出力を返す ように変更する必要がありますf(l)x(k)x
ecuaciones.mfJ

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') );
于 2013-03-17T13:46:37.373 に答える