중력에 대한 ODE를 Numerical analysis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| t = 0 g = 9.81 c = 12.5 m = 68.1 delta = 2.4 vel = 0
def velocity(t): value = vel + (g - c * vel / m) * delta return value
print(t, vel)
for a in range(1, 100): vel = velocity(t) t = t + delta print(t, vel)
|
1 2 3 4 5 6 7 8 9 10 11
| 0 0 2.4 23.544 4.8 36.71619383259912 7.199999999999999 44.085659104581886 9.6 48.208663904325554 12.0 50.51536703017333 14.4 51.80590137811459 #중간생략 왼쪽이 시간, 오른쪽이 Velocity 232.80000000000038 53.44487999999999 235.2000000000004 53.44487999999999 237.6000000000004 53.44487999999999
|
시간이 언더플로우
되는것 같다
Graph
를 그리는 법을 찾아보자!
Mantissa Issue
위에 언더플로우
라고 생각했던건 실수를 표시할때 컴퓨터에 생기는 문제였다. 정수와 상대적으로 표시할 부분이 작아지므로 차이가 난다. 또한 유효숫자
를 표시하는 법을 만들어야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| t = 0 g = 9.81 c = 12.5 m = 68.1 delta = 0.24e1 vel = 0
def velocity(t): value = vel + (g - c * vel / m) * delta return value
print(t, vel)
for a in range(1, 100): vel = velocity(t) t = t + delta T = round(t, 1) VEL = round(vel, 1) print(T, VEL)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 0 0 2.4 23.5 4.8 36.7 7.2 44.1 9.6 48.2 12.0 50.5 14.4 51.8 16.8 52.5 19.2 52.9 21.6 53.2 #중간생략 왼쪽이 시간, 오른쪽이 Velocity 220.8 53.4 223.2 53.4 225.6 53.4 228.0 53.4 230.4 53.4 232.8 53.4 235.2 53.4 237.6 53.4
|
Graph plot
참고 : 그래프 그리기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import plotly
from plotly.graph_objs import Scatter, Layout
t = 0 g = 9.81 c = 12.5 m = 68.1 delta = 0.24e1 vel = 0 Ti = [0] Ve = [0]
def velocity(t): value = vel + (g - c * vel / m) * delta return value
for a in range(0, 20): vel = velocity(t) t = t + delta T = round(t, 1) VEL = round(vel, 1) Ti = Ti + [T] Ve = Ve + [VEL]
print(Ti) print(Ve)
plotly.offline.plot({ "data": [Scatter(x=Ti, y=Ve)], "layout": Layout(title="ODE 풀이") })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import plotly
from plotly.graph_objs import Scatter, Layout
t = 0 g = 9.81 c = 12.5 m = 68.1 delta = input("시간의 변화량 delta를 입력하세요 : ") delta = float(delta) vel = 0 Ti = [0] Ve = [0]
if delta == 0.6: R = 80 elif delta == 1.2: R = 40 elif delta == 2.4: R = 20
def velocity(t): value = vel + (g - c * vel / m) * delta return value
for a in range(0, R): vel = velocity(t) t = t + delta T = round(t, 1) VEL = round(vel, 1) Ti = Ti + [T] Ve = Ve + [VEL]
print(Ti) print(Ve)
plotly.offline.plot({ "data": [Scatter(x=Ti, y=Ve)], "layout": Layout(title="ODE 풀이") })
|