1

MATLAB で 2 つの非線形方程式を解きたいので、次のようにしました。

私のスクリプトの一部

c=[A\u;A\v];
% parts of code are omitted.
x0=[1;1];
sol= fsolve(@myfunc,x0);

myfunc機能は次のとおりです

function F = myfunc(x)

  F=[ x(1)*c(1)+x(2)*c(2)+x(1)*x(2)*c(3)+c(4)-ii;

     x(1)*c(5)+x(2)*c(6)+x(1)*x(2)*c(7)+c(8)-jj];

end

私には2つの未知数がx(1)あり、x(2)

私の質問は、呼び出すたびに値(、、)を渡す方法cですか?iijjmyfunc

またはこのエラーを克服する方法Undefined function or method 'c' for input arguments of type 'double'.

ありがとう

4

2 に答える 2

1

編集:以前の回答は偽物であり、まったく貢献していませんでした。したがって、削除されました。これが正しい方法です。

メイン コードで、係数のベクトルc,ii,jjとダミーの関数ハンドルを作成します。f_d

coeffs = [c,ii,jj];
f_d = @(x0) myfunc(x0,coeffs);      % f_d considers x0 as variables
sol = fsolve(f_d,x0);

関数myfuncが 2 つの変数を取り込めるx0ようにします。coeffs

function F = myfunc(x, coeffs)
c = coeffs(1:end-2);
ii = coeffs(end-1);
jj = coeffs(end);

F(1) = x(1)*c(1)+x(2)*c(2)+x(1)*x(2)*c(3)+c(4)-ii;
F(2) = x(1)*c(5)+x(2)*c(6)+x(1)*x(2)*c(7)+c(8)-jj;

x0(1) と x0(2) で解決するはずだと思います。

編集: Eitan_T ありがとうございます。上記の変更が行われました。

于 2012-12-16T22:50:37.120 に答える
1

関数ハンドルが探しているものではない場合、私が好む別のオプションがあります。

私はこの機能を持っているとしましょう:

function y = i_have_a_root( x, a )
    y = a*x^2;
end

次のように呼び出すだけで、 の最初の推定x値と の値を渡すことができます。afsolve

a = 5;
x0 = 0;
root = fsolve('i_have_a_root',x0,[],a);

注:は、おそらく使用したいオプション[]用に予約されています。引数の詳細については、こちらのドキュメントのfsolveへの 2 番目の呼び出しを参照してください。fsolveoptions

于 2012-12-18T06:56:44.023 に答える