You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:06:05