我正在编写代码来求解二维热方程。我在 x 维度上有nx 个点,在 y 维度上有ny个点。(nx 和 ny 是用户输入)。解决方案以形状数组 (nx*ny,) 的形式出现。但很自然地,我想将解决方案绘制为二维数组。所以我尝试将结果的值分配给另一个二维数组,如下所示:
# A is a (nx*ny, nx*ny) sparse square matrix of csc format. b is a (nx*ny,) NumPy array.
y = sp.linalg.bicgstab(A, b) # shape of y is (nx*ny,)
solution = np.zeros((nx, ny))
for i in range(0, ny):
for j in range(0, nx):
solution[i, j] = y[i + nx * j]
但这会引发错误:
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:/Users/USER/Desktop/Numerical Practice/FDM-2D Heat Equation-No Source.py", line 86, in <module>
main()
File "C:/Users/USER/Desktop/Numerical Practice/FDM-2D Heat Equation-No Source.py", line 77, in main
solution[i, j] = y[i + nx * j]
ValueError: setting an array element with a sequence.
Process finished with exit code 1
我哪里出错了,我该怎么做才能解决这个问题?我已经通过直接打印检查了初始结果(y)。y 正确输出。解决方案完成后出现错误。
PS 如果我使用函数sp.linalg.spsolve而不是sp.linalg.bicgstab,它工作正常。但我正在探索稀疏迭代求解器,所以我希望使用sp.linalg.bicgstab.
红颜莎娜
明月笑刀无情
相关分类