2012-12-17 49 views
4

我想通过在Matlab中绘制给定的潜在函数来找到三体系统的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'); 
+0

是的请忽略'x'和'y'向量的限制。它们是以相对于两个质量半径的无单位比率测量的距离。他们应该从(-1.5,1.5)变化,就像斯蒂克说的那样。非常感谢 –

回答

4

三体设置的方式,距离坐标标准化为a。因此,你应该选择xy更像:

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

对于等高线图,你可以使用meshgrid,它可以让你避免for循环和情节有点简单:

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

对于潜力,试着绘制2U - 这叫做Jacobi constant,并且有点更多信息。

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 

另外请注意,您可以解出拉格朗日点本身分析使用的运动方程 - 你可以考虑太多绘制这些,因为轮廓才会收敛点,但永远不会打他们。

+0

+1的一个很好的答案。 – dinkelk

1

建议

  • 尝试使用向量运算(而不是for环路),他们是要快得多。这是通过添加'。'来完成的。在操作员面前:*变为.*
  • 上面提出的矩阵大小可能有点大,你可能会用完内存。先尝试更小的步长,然后提高分辨率。
  • 您的'Z'轴在Matlab的contour()图中将是线的颜色,所以没有任何标签。改为尝试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