Я пытаюсь выполнить итеративный расчет в python с использованием метода конечных разностей. Я нашел метод конечных разностей от этого:Poton Iterative Loop Plot values
http://depa.fquim.unam.mx/amyd/archivero/DiferenciasFinitas3_25332.pdf
Значения, что код вычисляет правильны. Проблема в том, что она отображает только конечные значения. Я хочу, чтобы извлечь значения для любой точки в направлении x, чтобы я мог их строить, а также извлекать значения в любой момент времени, например, значения точек на полпути через вычисления. Правильно ли это сделать итеративный расчет? Код показан ниже:
import numpy as np
import scipy as sp
import time
import matplotlib as p
L=0.005
Nx=3
T=5
N1=5
k=0.5
rho=1200
c=1000
a=(k/(rho*c))
x = np.linspace(0, L, Nx+1) # mesh points in space
dx = x[1] - x[0]
t = np.linspace(0, T, N1) # time
dt = t[1] - t[0]
toutside=5
Coefficient = a*dt/dx**2
bi=0.5
ui = sp.zeros(Nx+1)
u = sp.zeros(Nx+1)
for i in range(Nx+1):
ui[i] = 50 # initial values
for n in range(0, N1):
for i in range(0,1):
u[i] = 2*Coefficient*(ui[i+1]+bi*toutside)+(1-2*Coefficient-2*bi*Coefficient)*ui[i]
for i in range(1,Nx):
u[i] = Coefficient*(ui[i+1]+ui[i-1])+(1-2*Coefficient)*ui[i]
for i in range(Nx,Nx+1):
u[i] = 2*Coefficient*(ui[i-1])+(1-2*Coefficient)*ui[i]
ui[:]= u #updates matrix for next loop
print ui
Я изменил мой код на основе danodonovan ответ:
for n in range(0, N1):
for i in range(0,1):
u[i] = 2*Coefficient*(ui[i+1]+bi*toutside)+(1-2*Coefficient-2*bi*Coefficient)*ui[i]
for i in range(1,Nx):
u[i] = Coefficient*(ui[i+1]+ui[i-1])+(1-2*Coefficient)*ui[i]
for i in range(Nx,Nx+1):
u[i] = 2*Coefficient*(ui[i-1])+(1-2*Coefficient)*ui[i]
ui=u
a=list(ui)
print a
Когда я пытаюсь взять весь список из петли, только конечные значения производятся. Как извлечь весь список? Правильно ли это сделать итеративный расчет, используя значения предыдущей строки для вычисления значений новой строки?
Я попробовал вас, но он произвел только последнюю строку итерации. – Jay
Конечно, вы запишете массив на каждом шаге. Добавление '.copy()' делает трюк. Подсказка: вы действительно должны взглянуть на учебник NumPy и научиться работать с целыми массивами. Ваш код может быть значительно улучшен. –
Это работает для вас? –