Hallo.
Im Verlaufe meines Mathematica Programms loese ich numerisch ein System von gewoehnlichen Differentialgleichungen.
Die gesuchten Funktionen haben die Namen R[i] und alpha[k,i], wobei k von 1 bis n und i von 0 bis m laufen. Die
unabhaengige Variable heisst t. Sie umfasst das Intervall von 0 bis 10*tq, wobei tq=2/25 ist.
Dazu nun meine Fragen:
1. Nach der Eingabe der beiden Zeilen:
test[i_,t_]:=Evaluate[R[i][t]/.sol]
test[3,tq]
bekomme ich als Ausgabe:
{R[3][2/25]}
Fuege ich stattdessen in der ersten Eigabezeile auf der rechten Seite einen beliebigen (trivialen) Term hinzu,
so dass die Eingabe zum Beispiel lautet:
test[i_,t_]:=Evaluate[R[i][t]/.sol] + 0
test[3,tq]
so bekomme ich als Ausgabe:
{0.00245828}
Wieso liefern die beiden Eingaben unterschiedlich Ausgaben? (Benutze ich die zweite Eingabe, kann ich
uebrigens test[i,t] fuer ein beliebiges i gegen t plotten, was mir im Falle der ersten Eingabe nicht moeglich
ist.)
2. test[i_,t_] ist aufgrund seiner Definition nur fuer Integerzahlen von i sinnvoll. (Und das auch nur fuer
solche, die nicht groesser als m und nicht kleiner als 0 sind.) i ist in meinem Problem aber im Grunde nichts
anderes als eine Diskretisierung einer kontinuierlichen Variablen. Es waere fuer mich daher sinnvoll, einen
3D-Plot fuer test[i,t] zu machen. Das ist mir bislang nicht gelungen. Ich denke, es scheitert daran, dass
test[i,t] nur fuer ganze Zahlen i definiert ist.
Wie kann ich es schaffen, einen 3D-Plot von test[i,t] zu erzeugen?
3. Aus den oben genannten Funktionen alpha[k,i] defniere ich die folgende Funktion w:
w[eta_, i_, t_] := Sum[Evaluate[alpha[k, i][t] /. sol] * (eta^(2*k) - 1), {k, 1, n}]
Ohne Probleme lassen sich die beiden folgenden Plots erstellen:
Plot[w[eta,5,tq],{eta,0,1}];
Plot[w[0,5,t],{t,0,tq}];
Einen 3D-Plot hingegen kann ich nicht erzeugen lassen. Die Eingabe:
Plot3D[w[eta,5,t],{eta,0,1},{t,0,10tq}];
hat bringt die folgenden Meldungen:
Plot3D::plnc : w[eta, 5, t] is neither a machine-size real number
at {eta, t}={0., 0.} nor a list of a real number and a valid color directive.
(Es folgen noch zwei weitere Meldungen derselben Art fuer andere Paare {eta,t}.)
und
SurfaceGraphics::gmat : {<<1>>, <<13>>, {{6.45911*10^-6}},<<13>>, {{-1.52046*10^-20}}} is not a rectangular
array larger than 2 x 2.
Gebe ich stattdessen ein:
Plot3D[Evaluate[w[eta,5,t]],{eta,0,1},{t,0,10tq}]
bekomme ich zwar keine Fehlermeldung mehr, die Meldung:
Plot3D[{(-1 + eta^12)*InterpolatingFunction[][t] +
(-1 + eta^10)*InterpolatingFunction[][t] +
(-1 + eta^8)*InterpolatingFunction[][t] +
(-1 + eta^6)*InterpolatingFunction[][t] +
(-1 + eta^4)*InterpolatingFunction[][t] +
(-1 + eta^2)*InterpolatingFunction[][t]}, {eta, 0, 1}, {t, 0, 10*tq}]
hilft mir aber auch nicht so wahnsinnig viel weiter.
Wie bringe ich Mathematica dazu, mir die Funktion w in der gewuenschten Weise dreidimensional zu plotten?
Hendrik Willig
|