본문 바로가기

물리

최적화 수치해법으로 최속강하선 시현

미분방정식의 해를 함수의 형태로 구하는 것이 해석적 방법이라 하면, 수치적 방법은 해석적 방법으로 해를 구하기 어려운 경우 미분방정식의 근사해를 구하는 방법입니다. 

 

여기서는 구체적인 예로 최속강하곡선 문제를 수치적 방법으로 풀어보고 시현해 보도록 하겠습니다.

본 포스팅의 모든 내용과 결과물은 아래 참고자료1 '공부하는박사곰'님의 블로그를 나름대로 요약정리한 것이고, 결과물을 따라 만든 것임을 밝힙니다! 

A와 B 두점 사이에 최속강하곡선

 

잘 아는 바와 같이 최속강하선은,,, 위 그림에서와 같이 A(0, 1), B(π/2, 0) 사이를 중력의 영향을 받으면서 두 점사이를 가장 빠르게 내려오는 곡선을 찾는 문제이고, 이 곡선의 형태는 y=f(x)로 놓고 소요시간을 T로 하면, 고전역학의 법칙에 따라 표현할 수 있습니다.

T = ∫AB √(1+f'2) / √(1-f) dx

 

수치해법으로 풀기위해, 우리는 원래 연속한 곡선 f(x)를 불연속한 몇 개의 선분의 합으로 근사화해야 합니다.

xn, xn+1 사이의 직선은 f(x) = (fn+1-fn)/(xn+1-xn)·(x - xn) + fn 이 되고, 시간 T는

T = ∑ ∫xnxn+1 √(1+ (fn+1-fn)2/(xn+1-xn)2) / √(1- ( fn+1-fn)/(xn+1-xn)(x-xn) + fn ) dx

 

위 식의 피적분함수의 분자는 x와 무관한 상수로 밖으로 뺄수 있으므로

1/√(ax+b) dx = 2/a · √(ax+b) 임을 이용하여 정리하면,

a = -(fn+1-fn)/(xn+1-xn)   →   a2 = (fn+1-fn)2/(xn+1-xn)2   ,   b =  1 + axn - fn 이고,

T = 2 ∑ √(1+ (fn+1-fn)2/(xn+1-xn)2)· √(ax+b)|xnxn+1

 

그럼, 이제 위 근사식 T를 수학적 최적화 알고리즘을 이용하여 최소화하는 해를 찾아보자!

1. 먼저 경계조건 A(0, 1), B(π/2, 0) 점을 고정하고, x는 그 사이 등간격으로 n=100, 초기함수 f(x)는 A-B 직선으로 시작

2. y=f(x)는 물리적으로 정지된 속도 A에서 시작해 B점으로 이동하여 x축방향으로 단조감소를 가정한다.

3. 파이썬 scipy.optimize.minimize 함수에서 SLSQP 알고리즘을 이용하여 전산해 봅니다.

 

nit( Number of iterations performed by the optimizer ) = 72회 만에 해를 구했습니다.

참고로 실제 중력을 고려한 물리현상을 적용하려면, T/√(2*g) 로 가능합니다.

최속강하곡선 최적화 수치해법

 

저도 잘 안되거나 모르는 부분은 참고자료2(스택오버플로우)에서 많은 도움을 받았습니다.

막막하고 안될 것 같은 부분도 고민하고 노력하다보면 되는 경험이 참으로 신기하고 기쁜 것 같아요!

 

 

<참고자료>

1. https://studyingrabbit.tistory.com/60

2. Stack Overflow - Where Developers Learn, Share, & Build Careers

3. Optimization (scipy.optimize) — SciPy v1.14.0 Manual