Начальное условие Solve_ivp настроено для 2D-проблемы/проблемыPython

Программы на Python
Ответить
Anonymous
 Начальное условие Solve_ivp настроено для 2D-проблемы/проблемы

Сообщение Anonymous »

Итак, я пытаюсь решить проект из курса численных методов Массачусетского технологического института, в основном мне нужно решить теперь несвязанное уравнение для сверхзвукового потока над аэродинамическим профилем, которое имеет просто параболическую форму. Но по какой-то причине я не могу заставить его работать, чувствую себя очень глупо. Вот проект: https://learning-modules.mit.edu/servic ... nload=true< /p>
По сути, у меня есть размер 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)
Я устранил конечную разницу, потому что она меня сбивает с толку, но я все еще не знаю, как ее включить, поэтому попробую это дальше, но посколькуsolve_ivp тоже решает пространство, теоретически он должен дать тот же правильный ответ ? Извините, я просто пытаюсь учиться, и все здесь может иметь, а может и не иметь смысла, поэтому, пожалуйста, поправьте меня.
Ваша помощь ценится
Пытался сгладить начальное условие но он говорит, что мне нужна форма (2100), но если я использую форму (2100), он говорит мне, что начальное условие должно быть одномерным.
Если я решаю для одного ОДА (форма 1100) это работает легко...

Подробнее здесь: https://stackoverflow.com/questions/793 ... blem-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»