我想为Gauss-Seidel实现做proram,我想把每一次迭代都保存在一个JSON上



我想为Gauss-Seidel实现制作proram。我想在一个JSON上保存每一次迭代。但我遇到了一些麻烦,因为我的代码只将最后一次迭代保存到JSON

import json
iterasi={
"iterasi":None,
"x1":0,
"x2":0,
"x3":0,
}

for x in range (0,11):
iterasi["iterasi"]=x
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("Gauss Siedel.json", "r") as database:
new_data = json.load(database)
except FileNotFoundError:
with open("Gauss Siedel.json", "w") as database:
json.dump(iterasi, database, indent=4)
else:
new_data.update(iterasi)
print(new_data)
with open("Gauss Siedel.json", "w") as database:
json.dump(new_data, database, indent=4)

new_datadictionary,字典可能只有一个关键字iterasi等,因此它会替换以前的值。

您应该将它们保存为list of dictionares

[{"iterasi": val1, "x1": ... }, {"iterasi":, val2, "x1": ...}, ...]. 

并将CCD_ 5新字典添加到该列表中。

或者你应该把它们作为dictionary of lists

{"iterasi": [ val1, val2, ... ], "x1": [...], ...}

并将值附加到这些变量。但这需要更多的代码。


使用list of dictionares的版本

import json
iterasi = {
"iterasi": None,
"x1": 0,
"x2": 0,
"x3": 0,
}
#all_results = []
for x in range(11):
iterasi["iterasi"] = x
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:
print('read')
with open("Gauss Siedel.json", "r") as database:
all_results = json.load(database)
except FileNotFoundError:
print('new list')
all_results = []
finally:
print('append')
all_results.append(iterasi)
print(all_results)
print('write')
with open("Gauss Siedel.json", "w") as database:
json.dump(all_results, database, indent=4)

最新更新