Я решаю какое-то уравнение в частных производных, дискретизирующее время и пространство, чтобы избежать сложности, я избегаю этой вещи и просто считаю, что решаю проблему итеративным образом, используя функцию, которую я назвал «вычислением».Дело в том, что я хочу взять (и сохранить в некоторой матрице, называемой «Cn») некоторые значения, заданные «y» цикла «while», но без принятия всех значений итерации во времени.
Чтобы быть точным: я делаю цикл "в то время как" для эволюции времени, занимая некоторое время крутой DT.Я бегу от t = 1 до t = 100, используя dt = 0.001.Мое решение "у" рассчитывается для каждого крутого раза.Дело в том, что я хочу хранить «y» при некоторых конкретных значениях времени «t», а не при каждом крутом времени цикла, то есть, например, я хочу хранить значения при t = 1.0,2.0,3.0 ,..., 100.0 используя значения, которые я вычисляю внутри цикла while.Но я не хочу хранить значения "y" при t = 1.001,1.002,1.003 и т. Д.
Я покажу вам код, который я сделал
import numpy as np
import math
from matplotlib import pyplot as plt
import matplotlib.animation as animation
# grid in 1D
xmin = 0.0
xmax = 100.0
Nx = 120
dx = (xmax-xmin)/Nx
x = np.linspace(xmin,xmax,Nx)
# timing of the numerical simulation
t_initial = 1.0
t_final = 100.0
t = t_initial
dt = 10**(-2)
#initial profile
y = np.exp(-0.5*x**2)
#number of time points to store the numerical solution
dt_solution = 1.0 #time steep to save the numerical data inside the loop while
Nt = int((t_final-t_initial)/dt_solution)
def computation(t,y):
return np.log(t)+y
Cn = np.zeros((Nt, len(x))) # holds the numerical solution
Cn[0,:] = y #we put the initial y
ite = 0
while t<t_final:
t += dt #WE MAKE THE TIME STEEP
ite +=1
y = computation(t,y)
#Cn[ite,:] = y #I WANT TO SAVE THE VECTOR Y FOR THE TIMES t THAT I AM INTERESTD, NOT THE ONES GIVEN INSIDE THE LOOP WHILE
Кто-то знает, каксделай это?Я думал, может быть, решить эту проблему с помощью двух циклов, но я хотел бы знать, возможно ли использовать более эффективный способ.Спасибо!(Я надеюсь, что мой вопрос ясен, если нет, пожалуйста, скажите мне)