Я должен написать код для представления рассеивания тепла с использованием формулы конечных разностей, приведенной ниже.
????(????)????????=(????(????−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 и векторизацию, и мне не разрешено использовать циклы for любого рода, и я думаю, что должен полагаться на нарезку, но я не могу понять, как это записать и начал с.
r, c = h.shape
if(c==2 or r==2):
return h
Я уверен, что если строки = 2 или столбцы = 2, то массив возвращается как есть, но поправьте меня, если я ошибаюсь. Любая помощь будет принята с благодарностью. Благодарю вас!