在 for 循环期间,X 中的值没有更新,我检查等式右侧的成员应该更改它。 X 的初始值,即 X[0] 是 [1, 0],X[k+1] 的右侧是 [1, -0.1],但是当我打印 X[k+1] 的值时,它是仍然是 [0, 0],应该被替换的值。
from matplotlib import pyplot as plt
import numpy as np
def deriv(X_k, omega):
functions = [lambda _: X_k[1], lambda _: -omega**2*X_k[0]]
X_dot_k = np.array([f(1) for f in functions])
return X_dot_k
step = 0.1 # Time step
omega = 1 # Angular velocity
dimension = 2 # Important when there is n equations.
t0, tf, x0, v0 = 0, 10, 1, 0
t = np.linspace(t0, tf, int((tf-t0)/step) + 1)
X = np.asarray([[0 for _ in range(dimension)] for _ in t])
X[0] = [x0, v0] # Inital conditions.
for k in range(len(t)-1):
X[k+1] = X[k] + deriv(X[k], omega)*step
plt.plot(t, X[:, 0], label="position")
plt.xlabel("time (s)")
plt.ylabel("position (AU)")
plt.title("Position in function of time.")
plt.show()
deriv
始终返回
[0,-1]
并且整个数组舍入为
[1,0]
。所以,就去做吧:
X = np.asarray([[0 for _ in range(dimension)] for _ in t]).astype(float)
或者更好:
X = np.zeros((len(t),dimension))