【发布时间】:2020-06-08 05:42:11
【问题描述】:
我应该使用下面给出的有限差分公式编写代码来表示热扩散。
????(????)????????=(????(????−1)[????+1,????] + ????(????−1) [????−1,????] +????(????−1)[????,????+1] + ????(????−1)[????,????−1])/4
该公式应该仅在 1 的时间步长内产生结果。因此,如果给出这样的数组:
100 100 100 100 100
100 0 0 0 100
100 0 0 0 100
100 0 0 0 100
100 100 100 100 100
时间步长 1 的结果数组将是:
100 100 100 100 100
100 50 25 50 100
100 25 0 25 100
100 50 25 50 100
100 100 100 100 100
我知道使用 for 循环的表示形式如下,其中数组至少有 2 行和 2 列作为前提条件:
h = np.copy(u)
for i in range(1,h.shape[0]-1):
for j in range (1, h.shape[1]-1):
num = u[i+1][j] + u[i-1][j] + u[i][j+1] + u[i][j-1]
h[i][j] = num/4
但我无法弄清楚如何对代码进行矢量化以表示散热。我应该使用 numpy 数组和矢量化,并且不允许使用任何类型的循环,我认为我应该依赖切片,但我不知道如何写出来并开始使用。
r, c = h.shape
if(c==2 or r==2):
return h
我确定如果 rows=2 或 columns =2 则数组按原样返回,但如果我错了,请纠正我。任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: python numpy vectorization heat