1

fsolve非線形方程式系を数値的に解くために、matlab で使用しようとしています。これが私のプログラムのテストサンプルで、k1パラメータRx0開始点です。

function y=f(k1, R, x0)

pair=fsolve(@system,x0);

y=pair(1);

    function r=system(v)

        int1=@(x) exp(k1*x);
        int2=@(x) exp(k1*x^2)/(x^4);


        r(1)=exp(v(1))*quadl(int1,0,v(1));     
        r(2)=exp(k1*v(2))*quadl(int2,v(1),20)*k1*R;

    end

end

奇妙なことに、このプログラムを実行すると、matlab はin.^の代わりに使用するように指示し続けます。その関数ハンドルの は、 で使用されるときにスカラーであると想定されているため、混乱しています。この場合、なぜ使用する必要があるのですか?^int2=@(x) exp(k1*x^2)/(x^4)xquadl.^

また、オンライン ドキュメントで提供されている多くの例も、こちら.^のように明らかにスカラーの力を利用しているにもかかわらず、 を使用していることがわかります。誰でも理由を説明できますか?

前もって感謝します。

4

2 に答える 2

2

関数では、要素ごとの累乗()を使用する必要があるint2行列累乗( )を使用しました。また、要素ごとの除算()を使用する必要がある行列の右除算( )を使用しました。これが必要なのは、(および友人が)効率の理由から、一度にすべての配列の被積分関数を評価するためです。^.^/./quadlint2x

したがって、これを使用します。

function y = f(k1, R, x0)

    pair = fsolve(@system,x0);

    y = pair(1);

    function r = system(v)

        int1 = @(x) exp(k1*x);
        int2 = @(x) exp(k1*x.^2)./(x.^4);

        r(1) = exp(   v(1)) * quadl(int1,0,v(1));     
        r(2) = exp(k1*v(2)) * k1*R*quadl(int2,v(1),20);

    end

end

また、quadgkまたはintegralをご覧ください(新しいMatlabを使用している場合)。

ちなみに、私はあなたの本当の機能を想定していて、int1異なるint2機能ですか?もちろん、これらの関数は解析的に解くのは簡単だからです...

于 2012-10-24T13:27:27.057 に答える
2

内部的に、MATLAB はfunの必要な値について関数を評価しますx。これは複数でxあり、ベクトルです。a統合の限界を説明するためにbのみ使用されます。ドキュメントから

fun は関数ハンドルです。ベクトル x を受け取り、ベクトル y (x の各要素で評価される関数 fun) を返します。極限 a と b は有限でなければなりません。

.^したがって、 vector の個々の要素を操作するには、 を使用する必要がありますx

于 2012-10-24T13:23:53.780 に答える