Einführung in Mathematica VIII

Numerische Lösungen von Differenzialgleichungen

© Jürgen Schnack, 2016/04/19

Problem

Differenzialgleichungen (neue Rechtschreibung?) sind ein sehr weites Feld. Viele Probleme sind dieser Art: Bewegungsgleichungen, Feldgleichungen, Schrödingergleichungen, ...
Analytische Lösungen sind rar, aber für einige archetypische Fälle existieren sie.

Mathematica enthält eine schier unglaubliche Anzahl von analytischen Lösungen, die man mit 
DSolve
suchen kann.

Wenn das nicht weiterhilft, dann kann Mathematica mittels
NDSolve 
numerische Lösungen erzeugen.

NDSolve

Beispiel 1

Solve a first-order ordinary differential equation:

nds1=NDSolve[{y'[x]==y[x]Cos[x+y[x]],y[0]==1},y,{x,0,30}]

Use the solution in a plot:

Plot[Evaluate[y[x]/.nds1],{x,0,30},PlotRange->All,
PlotStyle->{{Thickness[0.01],Red}},
AxesLabel->{"x","y"},
BaseStyle->{FontFamily->"Helvetica",FontSize->18}]

Use the function and its derivative in a plot:

ParametricPlot[Evaluate[{y[x],y'[x]}/.nds1],{x,0,20},
PlotStyle->{{Thickness[0.01],Red}},
AxesLabel->{"x","y"},
BaseStyle->{FontFamily->"Helvetica",FontSize->18}]

Find specific values:

{y[10.5],y'[12.5]}/.nds1

Beispiel 2 - Lorenz-Gleichungen

nds2=NDSolve[{x'[t]==-3 (x[t]-y[t]),y'[t]==-x[t] z[t]+26.5 x[t]-y[t],z'[t]==x[t] y[t]-z[t],x[0]==z[0]==0,y[0]==1},{x,y,z},{t,0,200},MaxSteps->∞]

ParametricPlot3D[Evaluate[{x[t],y[t],z[t]}/.nds2],{t,0,200},PlotPoints->1000,ColorFunction->(Hue[#4]&)]

Beispiel 3 - Wärmeleitung

Simple model for soil temperature at depth x with periodic heating at the surface

Rand- und Anfangsbedingungen diskutieren

nds3=NDSolve[{D[u[t,x],t]==D[u[t,x],x,x],u[0,x]==0,u[t,0]==Sin[t],u[t,5]==0},u,{t,0,10},{x,0,5}]

Plot3D[Evaluate[u[t,x]/.nds3],{t,0,10},{x,0,5}, PlotRange->All,Mesh->None]

... und Schluss.