1

私はこのシステムを解決しようとしています:

x = a + e(c - e*x/((x^2+y^2)^(3/2)))
y = b + c(d - e*y/((x^2+y^2)^(3/2)))

を使用しfsolveていますが、反復の開始点として何を入れても、開始点が方程式の根であるという答えが得られます。

close all, clear all, clc

a = 1;
b = 2;
c = 3;
d = 4;
e = 5;

fsolve(@u1FsolveFUNC, [1,2])

関数:

function outvar = u1FsolveFUNC(invar)

    global a b c d e

    outvar = [...
        -invar(1) + a + e*(c - e*(invar(1) / ((invar(1)^2 + invar(2)^2)^(3/2)))) ; 
        -invar(2) + b + e*(d - e*(invar(2) / ((invar(1)^2 + invar(2)^2)^(3/2))))]

end

[1,2]as invariables を試してみると、それが方程式の根であることがわかりますが、正しい答え[1,2][12.76,15.52]

アイデア?

4

2 に答える 2

2

このようにスクリプトを書くと

a = 1;
b = 2;
c = 3;
d = 4;
e = 5;

f = @(XY) [...
        -XY(1) + a + e*(c - e*(XY(1) ./ (XY(1).^2 + XY(2).^2).^(3/2))) 
        -XY(2) + b + e*(d - e*(XY(2) ./ (XY(1).^2 + XY(2).^2).^(3/2)))];

fsolve(f, [1,2])

それははるかに明確できれいです。さらに、それは機能します:)

値を割り当てる前にabcdおよびebe を宣言していないため、機能します。global次に、それらを関数にインポートしようとしますが、その時点ではまだ として定義されていないglobalため、MATLAB は一連の を初期化しglobal、初期値を空 ( []) に設定したと見なします。

そして空の方程式の解は初期値です (私はすぐに認めますが、これは少し直感に反しています)。

つまり、この方程式には逆二乗の法則が含まれています...重力?電気力学?

の値によっては、a-e複数の解が存在する可能性があることに注意してください。この図を参照してください。

ここに画像の説明を入力

解は、両方の方程式[X,Y]Zが同時にゼロになる点です。あなたが与える値については、そのような点があります

[X,Y] = [15.958213798693690  13.978039302961506]

しかしまた

[X,Y] = [0.553696225634946   0.789264790080377]

(もっとあるかもしれませんが…)

于 2013-06-10T20:00:25.010 に答える