Я пытаюсь избежать использования циклов для выполнения моих вычислений. Но я не знаю, как это сделать. У меня есть матрица w
с формой (40,100)
. Каждая строка удерживает позицию до волны в t
раз. Например, первая строка w[0]
является начальным условием (также w[1]
по причинам, которые я покажу).Оптимизация вложенного цикла
Для вычисления следующих элементов строки, которые я использую, для каждого t
и x
на диапазон формы:
w[t+1,x] = a * w[t,x] + b * (w[t,x-1] + w[t,x+1]) - w[t-1,x]
Где a
и b
некоторые константы на основе решения уравнения (это на самом деле не имеет значения), a = 2(1-r)
, b=r
, r=(c*(dt/dx))**2
. Где c
- это скорость волны, а dt
, dx
относятся к приращению на x
и t
направлении.
Есть ли способ, чтобы избежать цикла, как:
for t in range(1,nt-1):
for x in range(1,nx-1):
w[t+1,x] = a * w[t,x] + b * (w[t,x-1] + w[t,x+1]) - w[t-1,x]
nt
и nx
являются формой w
матрицы.
Я рекомендую вам взглянуть на [это учебник] (https: // GitHub.com/barbagroup/CFDPython) для реализации дифференциальных уравнений с частными производными (в данном случае Navier-Stokes) в Python. –
Большое спасибо @RolandSmith. – Lin