前提・実現したいこと
ラプラスの方程式の境界値問題について、反復法に基づく解法プログラムを作成し、3Dグラフを描写したいのですが、以下のエラーが発生してグラフが表示できません。
プログラムはオーム社「Pythonによる数値計算とシミュレーション」に掲載されたものをそのまま利用しています。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "glaplace.py", line 42, in <module> ax.plot_wireframe(X, Y, u) File "/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 1848, in plot_wireframe if Z.ndim != 2: AttributeError: 'list' object has no attribute 'ndim'
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3import numpy as np 4import matplotlib.pyplot as plt 5from mpl_toolkits.mplot3d import Axes3D 6from matplotlib import cm 7import math 8 9LIMIT = 1000 #反復回数の上限 10N = 101 #x軸方向の分割数 11M = 101 #y軸方向の分割数 12 13#下請け関数の定義 14#iteration()関数 15def iteration(u) : 16 17 u_next = [[0 for i in range(N)] for j in range(M)] 18 19 for i in range(1, N-1) : 20 for j in range(1, M-1) : 21 u_next[i][j] = (u[i][j-1] + u[i-1][j] + u[i+1][j] + u[i][j+1]) / 4 22 23 for i in range(1, N-1) : 24 for j in range(1, M-1) : 25 u[i][j] = u_next[i][j] 26#iteration()関数の終わり 27 28#メイン実行部 29u = [[0 for i in range(N)] for j in range(M)] 30for i in range(M) : 31 u[0][i] = math.sin(2 * math.pi * i /(M-1)) 32 33for i in range(LIMIT) : 34 iteration(u) 35 36#グラフ描画 37x = np.arange(0, N) 38y = np.arange(0, M) 39X, Y = np.meshgrid(x, y) 40fig = plt.figure() 41ax = Axes3D(fig) 42ax.plot_wireframe(X, Y, u) 43plt.show() 44
補足情報(FW/ツールのバージョンなど)
Python3.7
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/22 14:30