0

2Dデカルト平面(x,y)の座標系をインデックスa[i,j]の行列に変換する方法は?

有限差分法を使用して 2D 平面で熱伝導をシミュレートする必要があるとします。システムの境界は、左下pos_infの点 と右上の点として与えられますpos_sup

結果は表面マップを形成します。ここで、インデックス a[i,j] はそのポイントの温度の値を格納し、インデックスi, j, asの行列に格納する必要がありますa[i,j]。両方の方向に同じ間隔 h を使用すると、離散化をどのように行う必要があり、Python が従う行の順序付けはそれをどのように妨げますか?

4

1 に答える 1

1

しばらく頭を悩ませていたのですが、ようやく Python が使う行順との違いと、デカルト平面での座標の定義を理解することができました。簡単ですが、初心者や失読症の人にとっては混乱を招く可能性があるため、ここに記載します.

指摘されているように、これはnp.meshgridの動作に非常に似ています。この質問の理由は、デカルト平面を行列形式に変換するという考え方を平易な言葉で説明するためです。

左下に点 pos_inf があり、座標が pos_inf = (x_inf, y_inf) で、右上に点 pos_sup (x_sup, y_sup) がある平面があるとします。 x 方向と y 方向)、各方向の離散化点の数は次のようになります。

points_x = int((x_sup - x_inf) / h)
points_y = int((y_sup - y_inf) / h)

このグリッドの各ポイントに関数の値を格納したいとしましょう。サイズの行列を生成します

a = np.zeros((points_y, points_x))

Python の右端のインデックス、a[i,j] の j は、同じ行の要素を points_x 回通過することに注意してください。一番左のインデックスである i は、列数 points_y を通過します。for ループは次の式で与えられます。

for i in xrange(points_y):
  for j in xrange(points_x):
    a[i,j] = i

このように、x 方向の点はインデックス j に対応し、y 方向の点はインデックス i に対応します。したがって、たとえば、points_x = 5 および points_y = 6 の場合、x_inf=0 から x_sup=5 および y_inf = 0 から y_sup = 6 で始まる、h = 1 で離散化されたデカルト空間は次のようになります。

a = np.zeros((5,6))
for i in xrange(5):
  for j in xrange(6):
    a[i,j] = i

array([[ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 1.,  1.,  1.,  1.,  1.,  1.],
   [ 2.,  2.,  2.,  2.,  2.,  2.],
   [ 3.,  3.,  3.,  3.,  3.,  3.],
   [ 4.,  4.,  4.,  4.,  4.,  4.]])

このグラフは方向を示しています。ここに画像の説明を入力

于 2012-11-03T22:19:09.323 に答える