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

高斯-赛德尔算法实现程序:迭代结果仅存最后一次的问题求助

高斯-赛德尔迭代结果保存问题修复

问题原因

原代码仅能保存最后一次迭代数据的核心问题:

  • 复用同一个iterasi字典对象,每次循环修改的是同一个字典的内容,而非创建新的迭代记录
  • 使用update方法更新JSON数据时,会直接覆盖JSON对象中同名的键,导致之前的迭代记录丢失

修复方案(推荐:一次性写入)

将所有迭代结果存储为列表中的独立字典元素,最后一次性写入文件,效率更高:

import json

# 初始化存储所有迭代结果的列表
all_iterations = []

for x in range(0, 11):
    # 每次迭代创建新字典,避免数据覆盖
    iterasi = {
        "iterasi": x,
        "x1": 0,
        "x2": 0,
        "x3": 0,
    }
    # 高斯-赛德尔迭代计算
    iterasi["x1"] = 6 - iterasi["x2"] - iterasi["x3"]
    iterasi["x2"] = (2 - iterasi["x1"] + iterasi["x3"]) / 2
    iterasi["x3"] = (10 - 2 * iterasi["x1"] - iterasi["x2"]) / 2
    
    # 将当前迭代结果加入列表
    all_iterations.append(iterasi)

# 一次性写入所有迭代数据到JSON文件
with open("Gauss Siedel.json", "w") as database:
    json.dump(all_iterations, database, indent=4)

可选方案:实时追加写入(适合大迭代次数)

如果需要每次迭代后实时保存数据,避免占用过多内存,可以采用读取-追加-写入的方式:

import json

file_path = "Gauss Siedel.json"

for x in range(0, 11):
    iterasi = {
        "iterasi": x,
        "x1": 0,
        "x2": 0,
        "x3": 0,
    }
    # 高斯-赛德尔迭代计算
    iterasi["x1"] = 6 - iterasi["x2"] - iterasi["x3"]
    iterasi["x2"] = (2 - iterasi["x1"] + iterasi["x3"]) / 2
    iterasi["x3"] = (10 - 2 * iterasi["x1"] - iterasi["x2"]) / 2
    
    try:
        # 读取已有的迭代列表
        with open(file_path, "r") as database:
            all_iterations = json.load(database)
    except FileNotFoundError:
        # 文件不存在时初始化空列表
        all_iterations = []
    
    # 追加当前迭代数据
    all_iterations.append(iterasi)
    
    # 写入更新后的列表
    with open(file_path, "w") as database:
        json.dump(all_iterations, database, indent=4)

内容的提问来源于stack exchange,提问作者Abdurrahman al hakim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:25:29