【发布时间】:2021-12-30 14:00:35
【问题描述】:
我想使用 scipy solve_ivp 函数求解运动一阶 ODE 方程。我可以看到我做错了什么,因为这应该是一个椭圆,但我只绘制了四个点。你能发现错误吗?
import math
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate
gim = 4*(math.pi**2)
x0 = 1 #x-position of the center or h
y0 = 0 #y-position of the center or k
vx0 = 0 #vx position
vy0 = 1.1* 2* math.pi #vy position
initial = [x0, y0, vx0, vy0] #initial state of the system
time = np.arange(0, 1000, 0.01) #period
def motion(t, Z):
dx = Z[2] # vx
dy = Z[3] # vy
dvx = -gim/(x**2+y**2)**(3/2) * x * Z[2]
dvy = -gim/(x**2+y**2)**(3/2) * y * Z[3]
return [dx, dy, dvx, dvy]
sol = scipy.integrate.solve_ivp(motion, t_span=time, y0= initial, method='RK45')
plt.plot(sol.y[0],sol.y[1],"x", label="Scipy RK45 solution")
plt.show()
【问题讨论】:
-
我认为您没有发布您正在使用的确切代码:
x和y未在motion中定义。solve_ivp参数t_span期望时间间隔的终点(即两个数字)。最后,这个模型是什么?让 dvx 依赖于 vx(对于 dvy 也是如此)引入了阻尼,我不认为会产生椭圆;不过方程是非线性的,所以很难说。
标签: numpy scipy ode runge-kutta