【发布时间】:2021-07-04 12:27:13
【问题描述】:
作为欧拉方法的一个应用,我正在尝试实现一个代码来计算递归矩阵乘积 Yn = Yn-1 + A(Yn-1),其中 Y 是一个向量,A 是一个矩阵,使得产品已定义。这是我当前的代码
def f(A, y):
return A.dot(y)
def euler(f, t0, y0, T, dt):
t = np.arange(t0, T + dt, dt)
y = [0,0,0,0]*len(t)
y[0] = y0
for i in range(1, len(t)):
y[i] = y[i - 1] + f(A, y[i - 1])*dt
return t, y
# Define problem specific values
A = np.array([[0, 0, 1, 0],
[0, 0, 0, 1],
[-2, -3, 0, 0],
[-3, -2, 0, 0]])
y1_0 = 1
y2_0 = 2
y3_0 = 0
y4_0 = 0
y0 = [y1_0, y2_0, y3_0, y4_0]
t,y = euler(f,0,y0,2,1)
print(t,y)
例如,t0 = 0, T = 2 范围内的点的结果应该是向量 Y1 和 Y2。相反,我有
[0 1 2] [[1, 2, 0, 0], array([ 1, 2, -8, -7]), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
这里出了点问题。虽然 Y1 = [1, 2, -8, -7 ] 确实出现了,但所有这些不必要的东西都出现了。 Y2 根本不打印。我怀疑这是由于我如何定义变量 y。对于 t 范围内的每个点,我需要一个由 4 个零组成的向量——然后我认为它由函数 euler 填充。应该如何纠正?
【问题讨论】:
标签: python matrix differential-equations