绘制拉格朗日点

时间:2012-12-17 22:39:42

标签: matlab physics

我试图通过在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');

2 个答案:

答案 0 :(得分:4)

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

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

对于等高线图,您可以使用meshgrid,这样可以避免循环和绘图更容易:

[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

另请注意,您可以使用运动方程式解析拉格朗日点本身 - 您也可以考虑绘制这些点,因为轮廓只会聚合在点上,但永远不会碰到它们。

答案 1 :(得分:1)

<强>推荐

  • 尝试使用向量操作(而不是for循环),它们要快得多。这是通过添加'。'来完成的。在运营商面前:*变为.*
  • 上面建议的矩阵大小可能有点大,您可能会耗尽内存。首先尝试使用较小的步长,然后提高分辨率。
  • Matlab contour()图中的'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
相关问题