高斯-赛德尔算法实现程序:迭代结果仅存最后一次的问题求助
高斯-赛德尔迭代结果保存问题修复
问题原因
原代码仅能保存最后一次迭代数据的核心问题:
- 复用同一个
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
相关产品推荐
相关产品推荐

