python - Python。递归矩阵乘积,结果为一组向量
问题描述
作为欧拉方法的一个应用,我正在尝试实现一个代码来计算递归矩阵乘积 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 填充。应该如何纠正这个?
解决方案
计算机总是按照您的指示去做。在您的情况下y
,是通过重复 4 个零len(t)
次构造的,给出 12 个零的列表。第一个列表条目被替换为 list y0
。第二个列表条目被替换numpy
为 a 的操作结果numpy.array
。然后循环指令级别的 return 语句中断循环并返回t
andy
数组。y
仍然包含其构造中的 10 个未替换的零。
所以构造
y = np.zeros([len(t), len(y0)])
并修复缩进水平。
推荐阅读
- java - 仅在 IntelliJ 中测试失败,但适用于 Maven 命令行
- reactjs - 这两个 reactjs setState 行为之间的区别
- django - 在返回之前添加到序列化器数据
- python - 完成钱包过程后如何更改模型中的用户
- doctrine-orm - Sonata Media 多张照片下载
- ubuntu - 如何在 wine (Ubuntu) 上制作 Dev-Cpp 编译后自动启动
- python - 在 leetcode 中验证外星人字典,我下面的函数总是返回 false
- javascript - 在 react-awesome-query-builder- selected 字段中使用 Material-UI 配置时未显示
- installation - Conda 信息(和其他操作)不起作用
- python - 即使在 python2 中使用子进程,也无法使用星号 AGI 触发 python 3 代码