Im Grunde habe ich also ein 100x200-Netz und Sie müssen an jedem Knoten eine PDE (jetzt zwei ODE) lösen. In den MIT-Vorlesungen kombinieren sie tatsächlich eine Finite-Differenzen-Matrix für den räumlichen Teil (also lösen sie tatsächlich mit Finite-Differenzen), aber die Zeit wird mit Matlab ODE45 gelöst. Ich verwende Python, da es jetzt am häufigsten verwendet wird.
Ich habe also eine parabolische Form und habe an jedem Punkt einen anderen y-Wert. Es sollten also 100 ODEs vorhanden sein, die jeweils ein Jahr darstellen. Und ich habe 2 ODEs, also eine Form von (2.100), aber wenn ich die Anfangsbedingung einrichte, wenn ich ein Array mit einer Form (2.100) einrichte, muss es eindimensional sein, aber wenn ich es reduziere, heißt es, dass die Form nicht übereinstimmt. Was muss ich tun, damit es passt?
Code: Select all
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)
Ihre Hilfe wird geschätzt
Ich habe versucht, den Ausgangszustand zu reduzieren aber es heißt, ich brauche eine (2.100)-Form, aber wenn ich die (2.100)-Form verwende, sagt es mir, dass die Anfangsbedingung eindimensional sein muss.
Wenn ich nach einem Single auflöse ODE (Form 1.100) es Funktioniert problemlos...