你这里有些错误。
第一:
z^3
不是权力,而是排他性的或操作性的。在Python中,使用
**
接线员,所以你要写信
z**3
.
第二:您对函数的参数命名错误。而不是:
def function(init, time, k):
你应该拥有
def function(state, time, k):
自从
state
根据函数返回的导数进行演化。它将只在第一个时间步骤中具有初始值。
第三:你的国家解释和国家三角洲是不一致的。你写:
xt = init[0]
yt = init[1]
dxdt = init[2]
dydt = init[3]
但后来
return dxdt, ddxddt, dydt, ddyddt
这意味着,除其他外,
dydt=ddxddt
. 你应该写:
xt, yt, dxdt, dydt = state
[....]
return dxdt, dydt, ddxddt, ddyddt
请注意,您必须确保您的初始条件与您订购状态的方式一致。
正确实现的最低工作示例如下:
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
def function(state, time, k):
xt,yt,dxdt,dydt = state
z = np.sqrt((yt+k)**2+xt**2)
ddxddt = 10*dxdt + xt - ((k+1)*(xt ))/z**3
ddyddt = -10*dydt + yt - ((k+1)*(yt + k))/z**3
return dxdt, dydt, ddxddt, ddyddt
init = [
0.921, #x[0]
0, #y[0]
0, #x'[0]
3.0 #y'[0]
]
k = 1
times = np.linspace(0,1,1000)
values = scipy.integrate.odeint(function, init, times, args=(k,), tfirst=False)
plt.plot(values)
plt.show()
并给出这个输出: