2012-12-17 3 views
4

Matlab에서 주어진 잠재 함수를 플로팅하여 Three-Body 시스템의 5 개 Lagrange 점을 찾으려고합니다. 유일한 것은 프로그래밍이별로 좋지 않다는 것입니다. 어떤 도움이라도 대단히 감사하겠습니다. 내가 알고 싶은 것은이 코드는 나에게 괜찮은 윤곽 플롯 제공하는 방법입니다 :Lagrange 점을 그려야합니다

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을 선택해야합니다 : 당신이 for 루프를 방지하고 플롯 할 수 있습니다 윤곽 플롯, 당신은 meshgrid을 사용할 수 있습니다에 대한

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

을 좀 더 쉽게 :

[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]; 

과 같은 것을 사용했습니다. 윤곽 만에 수렴하기 때문에 당신도이 음모를 꾸미고 고려할 수 있습니다 -

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

는 라그랑주 분석적으로 운동 방정식을 사용하여 자신을 가리키는 당신이 해결할 수 있습니다 : 이제 다음과 같이, 플롯, 단순히 contourf를 사용 점수는 결코 치지 않을 것이다.

+0

+1 감사합니다. – dinkelk

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 
관련 문제