我试图通过在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 :(得分:4)
设置三体问题的方式,距离坐标标准化为a
。因此,您应该选择x
和y
更像:
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
循环),它们要快得多。这是通过添加'。'来完成的。在运营商面前:*
变为.*
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