본문 바로가기

[硏 Ⅰ] 연구하다 - 교양/수치해석6

벽에 용수철로 연결된 그릇 속, 두개의 용수철로 이어진 물체 이번 상황은 매우 간단합니다. 용수철의 원래 길이는 l로, 그릇의 두께는 없이, 폭은 d로 합니다. 실제로 해의 형태가 매우 좋게 나옵니다. 조금의 시간만 들이면 수치해석적 방법 없이도 해석적인 해를 충분히 구할 수 있습니다. (4계미분방정식 하나로 환원될 수 있기 때문) 하지만 수치해석적으로 구해봅시다. from matplotlib import animation, rc import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint m = 1 k = 1 l = 2 D = 4 def dydt(u,t): x = u[0] y = u[1] dx = u[2] dy = u[3] dydt0 = dx dydt1 = dy dydt.. 2021. 7. 9.
[미완] 평면 위에 미끄러지는 물체에 달린 용수철 진자 문제집에 예뻐보이는 그림을 하나 골라봤습니다. 언제나 그렇듯이 m=k=1로 합니다. g=10, M=2, l=4입니다. 이번에도 처음에 불길한 느낌은 있었다만, 상황의 선택에 거창하게 실패했습니다. 하지만 발빼지 않고 어떻게든 식 3개를 연립해서 각 변수 (x, r, theta)의 이계도함수에 대한 식을 구해보았습니다. 그런데 마지막 식을 다 세우고 코드 창을 열어보는 순간 떠올렸습니다. 아... 퍼텐셜 에너지에 탄성에너지를 빼먹었구나... 그래서 의욕이 훅 떨어져 이번 문제는 그만 풀도록 하겠습니다. 용수철 진자는 다음에 한번 더 도전하도록 하지요. (용수철 진자는 2차원도 꽤 까다롭긴 한데, 차원이 더 올라갈수록 더욱 어려워지는 문제입니다) 한편 위의 3계연립미분방정식을 풀이하면 탄성력이 작용하지 않는.. 2021. 7. 8.
스프링으로 연결되어 서로 평행한 직선 위에서 움직이는 일련의 질점 이번엔 멀쩡한 모델을 골랐기를 바랍니다. (얼핏 보면 되게 예쁘게 생김 구체적인 상황은 다음과 같습니다. 직선은 4개가 있는 것으로 가정합니다. 따라서 질점도 4개입니다. 중력장은 작용하지 않고, 각 직선이 서로 떨어진 거리는 d입니다. 스프링의 원래 길이는 d이며, 스프링 상수는 k입니다. 인접한 질량 m의 질점을 서로 연결합니다. 초기값으로 들어가는 것은 각 질점의 y방향 위치로 합니다. 라그랑지안을 계산했을 때 매우 깔끔한 4가지 형태의 식을 얻습니다. (n개 직선일 상황으로 만들어보기도 쉬울 것 같습니다...만 4개만 하기로 합니다) m=k=d=1을 가정합니다. 초기값은 x, y, z, w로 하며, 그 속도 초기값은 모두 0으로 설정합니다. from matplotlib import animatio.. 2021. 7. 7.
[미완] 천장에 실 두개로 매달린 평행 선형 진자에 매달린 두 개의 진자 막대의 길이 a는 12로, 실의 길이 l은 3으로 합니다. m은 1로, g는 10으로 설정합니다. 막대(선형 진자)의 질량 M은 2로 합니다. 라그랑지안을 풀이한 식은 매우 복잡한 형태입니다. 받는 초기값은 6개입니다. 다만 저기의 시간에 대한 전미분을 풀어쓰는 것은 매우 소모적인 과정으로, 적당한 치환으로 넘기고자 합니다. (코드 짜다가 중도 포기) ... 잘 생각해보니 치환만으로는 해를 구할 수 없을 것 같았습니다. 실제로 이계 도함수들을 연립해서 추출해 구한 다음에 값을 얻어야 하는데 연산량이 너무 소모적입니다. 문제를 잘못 골랐군요. 이 모델은 라그랑지안까지만 제시하기로 하겠습니다. 2021. 7. 6.
두개의 수평 용수철에 매달린 질점의 운동 뉴턴역학으로 하면 머리가 빠지므로 라그랑지안으로 쉽게쉽게 가도록 합니다. 두 용수철이 초기 위치일 때의 길이를 l로 잡고 그 때 질점의 위치는 원점입니다. 중력의 방향은 -y입니다. m=k=g=1, l=4를 기본적으로 가정합니다. 초기 상태에서의 x, x', y, y'이 입력되는 초기값입니다. import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint k = 1 m = 1 g = 1 l = 4 def dydt(u,t): x = u[0] y = u[1] dx = u[2] dy = u[3] dydt0 = dx dydt1 = dy dydt2 = -k/m*( 2*x - l*( (x+l)/((x+l)**2+y*y)**0.. 2021. 7. 6.
python - n체 문제(n-body problem) 이번 학기에 가장 인상적이었던 실습 내용입니다. 실습이라기엔 사실 기말고사 마지막 문제 내용이었습니다... n-body problem, n체 문제, 혹은 다체 문제는 질량을 가진 여러 개체들이 공간 안에서 만유인력을 주고받으며 발생하는 운동 궤적을 알아내는 것입니다. 천체물리학에서 매우 중요한 문제입니다만, 개체가 3개 이상일 때 해석적인 궤적을 얻기는 매우 어렵거나 불가능하므로 일반적으로 수치적인 방법을 이용합니다. 저는 각 질점이 동일한 질량을 가지고 회전운동은 고려하지 않는 상황을 가정하였습니다. import numpy as np import matplotlib.pyplot as plt def accel(x,y,z): r32 = (x*x + y*y + z*z)**1.5 return mi*np.arr.. 2021. 6. 23.