Numpy 数组在 for 循环期间不更新

问题描述 投票:0回答:1
我正在尝试编写一些代码来求解微分方程,这里的情况相当简单,它是著名的谐振子,但是我正在尝试编写一个适用于 n 阶 ODE 的通用代码。

在 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()
    
python numpy differential-equations
1个回答
1
投票
您的数组由所有整数组成。

deriv

 始终返回 
[0,-1]
 并且整个数组舍入为 
[1,0]

所以,就去做吧:

X = np.asarray([[0 for _ in range(dimension)] for _ in t]).astype(float)
或者更好:

X = np.zeros((len(t),dimension))
    
© www.soinside.com 2019 - 2024. All rights reserved.