Come posso risolvere e tracciare queste ODE non lineari utilizzando NDSOLVE?

Sep 11 2020

Sto cercando di risolvere le seguenti ODE non lineari

Eqn1 = n*(-f''[x])^(n - 1)f'''[x] - mf'[x]^2 + (m*(2*n-1)+1)/(n+1)f[x]f''[x]+ M2^2f'[x] == 0; , 
Eqn2 = n(-theta'[x])^(n - 1)theta''[x] + (m(2 *n - 1) + 1)/(n + 1)f[x]theta'[x] - mf'[x]theta[x] == 0; 

dove m,n, alpha, b and M2sono i parametri, con 5 condizioni al contorno

f[0] == 0, f'[0] == 1 + alpha f''[0], f'[N1] == 0, theta[0] == 1 + b theta'[0], theta[N1] == 0

mi aiuti per favore

Risposte

1 DiSp0sablE_H3r0 Sep 11 2020 at 18:40

Ok, quindi ci sono molte quantità nell'OP che non sono definite e / o discusse ma ho usato alcuni valori inventati per dimostrare la procedura.

Sto cambiando thetain gper mia comodità.

Imposta le equazioni

Eqn1 = n*(-f''[x])^(n - 1) f'''[x] - 
   m f'[x]^2 + (m*(2*n - 1) + 1)/(n + 1) f[x] f''[x] + M2^2 f'[x] == 
  0; Eqn2 = 
 n (-g'[x])^(n - 1) g''[x] + (m (2*n - 1) + 1)/(n + 1) f[x] g'[x] - 
   m f'[x] g[x] == 0;

Impostazione dei valori composti per i parametri

m = 1;
n = 2;
alpha = 1;
b = 1;
M2 = 2;
N1 = 0;

Risolvi Eqn1con il seguente pezzo di codice

sltn = NDSolve[{Eqn1, f[0] == 0, f'[0] == 1 + alpha f''[0], 
    f'[N1] == 0}, f[x], {x, 0, 10}, 
   Method -> {"StiffnessSwitching", "NonstiffTest" -> False, 
     Method -> {"ExplicitRungeKutta", Automatic}}, AccuracyGoal -> 5, 
   PrecisionGoal -> 5, MaxSteps -> Infinity] // Flatten

E puoi effettivamente tracciare la soluzione per esaminarla

Plot[f[x] /. sltn, {x, 0, 10}]

Naturalmente, senza ulteriori chiarimenti, non si possono fare molti progressi, ma si spera che quanto sopra sia un principio guida di base.

Modifica: fammi dimostrare la soluzione per entrambe le funzioni. Lo sto facendo per chiarezza.

Con le inizializzazioni di cui sopra si esegue quanto segue

sltn = NDSolve[{Eqn1, Eqn2, f[0] == 0, f'[0] == 1 + alpha f''[0], 
    f'[N1] == 0, g[N1] == 0, g[0] == 1 + b g'[0]}, {f[x], g[x]}, {x, 
    0, 10}, Method -> {"StiffnessSwitching", "NonstiffTest" -> False, 
     Method -> {"ExplicitRungeKutta", Automatic}}, AccuracyGoal -> 5, 
   PrecisionGoal -> 5, MaxSteps -> Infinity] // Flatten 

E poi puoi tracciare le tue soluzioni

Plot[f[x] /. sltn[[1]], {x, 0, 10}, PlotRange -> {{0, 10}, {-1, 1}}]
Plot[g[x] /. sltn[[2]], {x, 0, 10}, PlotRange -> {{0, 10}, {-10, 1}}]

Se vuoi risolvere valori più generali dei parametri, potresti voler cercare il ParametricNDSolvecomando qui

Spero che questo aiuti un po '.