По сути, у меня есть размер 100x200. сетку и необходимо решить УЧП (теперь два ОДУ) на каждом узле. В лекциях Массачусетского технологического института они фактически объединяют матрицу конечных разностей для пространственной части (поэтому они фактически решают, используя конечную разность), но время решается с использованием Matlab ODE45. Я использую Python, поскольку сейчас он чаще используется.
Итак, у меня параболическая форма и разное значение y в каждой точке. Таким образом, должно быть 100 ОДУ, каждый из которых представляет один y. И у меня есть 2 ОДУ, поэтому форма (2100), но когда я устанавливаю начальное условие, если я настраиваю как массив формы (2100), он должен быть одномерным, но если я его сглаживаю, он говорит, что форма не соответствует. Что мне нужно сделать, чтобы оно совпало?
Код: Выделить всё
import numpy as np
import itertools
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
## General Variables
N=100
r = np.linspace(0, 1, N)
s = np.linspace(-1, 1, N*2)
R, S = np.meshgrid(r, s)
y_max = 1
y_min = -1
y_upper = 0.1*r-0.1*r**2
y_lower = -0.1*r+0.1*r**2
Mach = 2 #given in problem
## Equation to solve def
def SSonicFlowFun(t, P):
phix = P[0]
phiy = P[1]
dpxdt =(y_max/(y_max-y_upper))/(1-Mach**2) *phiy
dpydt = (y_max/(y_max-y_upper))*phix
return np.array([dpxdt, dpydt])
t_span = (0, 1)
Phi0 = np.zeros((2, 100))
print(Phi0.shape)
## Solving ODE
sol= solve_ivp(SSonicFlowFun, t_span, Phi0)
Ваша помощь ценится
Пытался сгладить начальное условие но он говорит, что мне нужна форма (2100), но если я использую форму (2100), он говорит мне, что начальное условие должно быть одномерным.
Если я решаю для одного ОДА (форма 1100) это работает легко...
Подробнее здесь: https://stackoverflow.com/questions/793 ... blem-issue
Мобильная версия