4

Matlabで与えられたポテンシャル関数をプロットすることにより、3体システムの5つのラグランジュ点を見つけようとしています。唯一のことは、私はプログラミングがあまり得意ではないということです。どんな援助でも大歓迎です。私が知りたいのは、このコードで適切な等高線図を作成する方法です。

function Lagrange(a)


x = ( -10000: 1 : 10000);
y = ( -10000: 1 : 10000);
Potential = zeros(length(x));

for i = 1: length(x)
    for j = 1 : length(y)

    Potential(i,j) =  ( 1 - a ) / sqrt( ( x(i) - a )^2 + y(j)^2)  + a / sqrt( ( x(i) + 1    - a )^2 + y(j)^2 ) + ( x(i)^2 + y(j)^2 ) / 2 ;

    end

    j = 1;
end

contour(Potential);

xlabel('X axis'); 
ylabel('Y axis'); 
zlabel('Z axis');
4

2 に答える 2

4

多体問題の設定方法では、距離座標はに正規化されaます。したがって、次のように選択する必要がxありますy

x = linspace(-1.5, 1.5, 1000);
y = linspace(-1.5, 1.5, 1000);

等高線図には、を使用できますmeshgrid。これにより、forループを回避して、プロットを少し簡単にすることができます。

[X, Y] = meshgrid(x, y);

可能性については、2Uをプロットしてみてください。これはヤコビ定数と呼ばれ、もう少し有益です。

U = (1-a)./sqrt(Y.^2 + (X + a).^2) + ...
     a./sqrt(Y.^2 + (X + a - 1).^2) + ...
     0.5*(Y.^2 + X.^2);
Z = 2*U;

最後に、輪郭が必要になります。あなたはあなたのプロットのためにこれらを微調整したいと思うでしょう、しかし私は次のようなものを使いました

c = [2.988:0.05:3.1, 3.2:0.2:5];

地球-月システムのために。ここで、プロットするには、次のように使用contourfします。

figure
contourf(X, Y, Z, c)
colorbar

また、運動方程式を使用してラグランジュ点自体を解析的に解くことができることにも注意してください。等高線は点に収束するだけで、それらに当たることはないため、これらもプロットすることを検討してください。

于 2012-12-18T16:11:43.550 に答える
1

推奨事項

  • for(ループではなく)ベクトル演算を使用してみてください。はるかに高速です。これは、「。」を追加することによって行われます。オペレーターの前で: *になります.*
  • 上で提案されたマトリックスサイズは少し大きいかもしれません、あなたはおそらくメモリを使い果たすでしょう。最初に小さいステップサイズで試してから、解像度を上げてください。
  • Matlabcontour()プロットの「Z」軸は線の色になるため、ラベルを付ける必要はありません。colorbar代わりに試してください。
  • ...複数行の長いステートメントを継続するために使用します。
  • 慣例により、大文字で始まる単語はクラス定義用に予約されています。

提案されたコード

function lagrange(a)
  n = 100000;
  stepsize = 100;
  [x,y] = ndgrid(-n:stepSize:n, -n:stepSize:n)
  potential = ( 1 - a ) ./ sqrt( ( x - a ).^2 + y.^2)  + ...
    a ./ sqrt( ( x + 1 - a ).^2 + y.^2 ) + ( x.^2 + y.^2 ) ./ 2 ;

  contour(x,y,potential)
  xlabel('X axis')
  ylabel('Y axis')
  colorbar
end
于 2012-12-17T22:54:26.070 に答える