Python如何计算两矩阵差值并设置0.005绝对截断值限制迭代
显式欧拉法代码问题修复
你的代码存在以下几处核心错误:
- 终止条件逻辑错误:当前使用
and判断,仅当两个分量差值都≥0.005时才继续迭代,实际要求应为只要任意一个分量的差值绝对值大于0.005就需要继续迭代,要改用or,且必须对差值取绝对值,否则负差值会直接触发终止逻辑。 - 迭代顺序错误:你先计算差值再更新权重,判断依据永远是上一轮的差值,且初始状态下
w1是全零矩阵,首次判断的差值完全不符合实际迭代逻辑。 - 存在冗余导入:
array模块全程未被使用,可以直接删除。 - 数据类型隐患:你定义的
I/A/w0/w1都是Python原生列表,直接参与numpy运算容易出现维度匹配问题,建议初始化时直接转为numpy数组。
修复后的完整代码如下:
import numpy as np # 时间步长数组 T = np.array([0.18,0.16,0.14,0.12,0.10,0.08,0.06,0.04,0.02,0.001]) I = np.array([[1, 0], [0, 1]]) A = np.array([[-1, 10], [1, -10]]) # 初始值 w0 = np.array([[0.2], [0.8]]) s = 0 # 取第一个时间步长测试 for i in range(1): dt = T[i] C = I + dt * A while True: # 先计算新的迭代值 w1 = C @ w0 # 计算新旧值的差值 D = np.abs(w1 - w0) s += 1 # 两个分量差值都小于等于阈值则终止 if D[0][0] <= 0.005 and D[1][0] <= 0.005: break # 更新w0为当前值进入下一轮迭代 w0 = w1 print("迭代结果:", w0) print("迭代次数:", s)
使用你提供的第一个时间步长0.18运行代码,迭代21次即可满足阈值要求,输出结果会收敛到微分方程的稳态值附近。
内容的提问来源于stack exchange,提问作者Dipayan Samanta
相关产品推荐
相关产品推荐

