View Full Version : Beispiel 41
dj_m.o.h.t.
05-06-2002, 18:44
Angabe:
Mit der Methode der sukzessiven Approximation berechne man für y'=x-y^2 und y(0)=1 den Wert y(0.1) auf 3 Dezimalstellen genau.
Lösung:
Für dieses Beispiel habe ich leider keine Lösung. Was heißt eigentlich sukzessive? Approximation ist Annäherung. Wie geht das eigentlich?
Naja sukzessive heißt irgendwas wie "fortlaufend" oder "immer wieder", sowas hatten wir in der HTL schon gehört, aber Verfahren für dieses Beispiel haben wir keines kennengelernt oder? Dieser Begriff ist eher allgemein einzusetzen, bei dem Beispiel müss ma uns wahrscheinlich selber ein Verfahren ausdenken (oder einen Mathematiker fragen :-) ).
[edit] also ich gebs auf, hab bis jetzt Bücher durchgelesen und im Internet geschaut und versucht mit Mathematica was zu machen (*grrrrr* warummußdasnursokompliziertsein) aber komm nicht weiter (vor allem find ich nix über Anfangsprobleme in Mathematica :( )
DSolve[ y'[x] == x - y[x]^2, y, x]
\!\({{y ->
Function[{x}, \(-\(\((\(-BesselJ[\(-\(1\/3\)\),
2\/3\ \[ImaginaryI]\ x\^\(3/2\)]\)\ C[
1] + \[ImaginaryI]\ x\^\(3/2\)\ \((\(-2\)\ \
BesselJ[\(-\(2\/3\)\), 2\/3\ \[ImaginaryI]\ x\^\(3/2\)] -
BesselJ[\(-\(4\/3\)\),
2\/3\ \[ImaginaryI]\ x\^\(3/2\)]\ C[1] +
BesselJ[2\/3, 2\/3\ \[ImaginaryI]\ x\^\(3/2\)]\ C[
1])\))\)/\((2\ x\ \((BesselJ[1\/3,
2\/3\ \[ImaginaryI]\ x\^\(3/2\)] +
BesselJ[\(-\(1\/3\)\),
2\/3\ \[ImaginaryI]\ x\^\(3/2\)]\ C[
1])\))\)\)\)]}}\)
Mehr bring ich nicht zam :(
[edit2]
irgendwie spinnt mein Mathematica, jedenfalls hab ich ne Lösung mit der Anfangsbedingung rausbekommen, die aber so lang ist, daß ich sie Euch ersparen möchte (geht übrigens mit: DSolve [{y'[x] == x - y[x]^2, y[0] == 1}, y[x], x]). Wenn man das "x-" wegläßt kommt y[x]=1/1-x raus und wenns dabei ist, wirds ein Mörder Ausdruck :confused: also ohne Trick wird das Beispiel nicht zu lösen sein.
Zur Feier es Moz-Release einmal ein konstruktiver Beitrag von mir.
Die Angabe aufgeschlüsselt:
Sie y' = F(x,y) = x-y^2
Sei y(x0) = y0 mit x0 = 0 und y0 = 1
Berechnen Sie y(0,1) auf drei Dezimalstellen genau
Die Formel: (rekursiv)
y<SUB>n+1</SUB>(x) = y<SUB>0</SUB> + integral(von x0 bis x) F(t,y<SUB>n</SUB>(t))dt
Weiters Sei y1(x) konstante Funktion mit y1(x) = y0 = 1
Nun berechnet man y2(x) folgendermaßen:
y2(x) = 1 + integral(x,x0) [ t - y1(t)^2 ] dt
= 1+ integral (x,x0) [ t - y0^2] dt
(da ja y1(x) als konstante Funktion definiert ist !)
= 1 + [t^2/2 - y0^2 * t] zwischen (x0,x)
(integriert nach t)
= 1+ ( x^2/2 - y0^2 x ) - ( x0^2/2 - y0^2 x0)
(weil x0 = 0 fällt zweiter teil weg)
y2(x) = x^2/2 - x + 1
y2(0,1) = 0,1^2/2 - 0,1 + 1 = 0.905
ich würde nun meinen der nächste schritt ist
y3(x) = 1 + integral(x,x0) [t - y2(t)^2] dt
= 1+ integral (x,x0) [t- ( t^2/2 - t + 1 )^2] dt
= 1+ integral (x,x0) [-t^4/4 ....... ] dt
= 0.914358 (mathematica ;) )
ich habe allerdings (noch) keine ahnung, wieviele iterationen notwendig sind
hoffe der ansatz stimmt und hilft
mfg
____________________
PliniusSecundus
07-06-2002, 22:44
Der Ansatz scheint mir richtig.
Ein weiterer Wert:
y4(0.1)=0.913767...
ich habe y2 - y7 berechnet (wobei ich letztes weglassen möchte, da es ein polynom 74.grades ist (viel platz ;) )
ich hoffe die pngs sind zu lesen.
Die Lösung lautet: 0.913794
http://stud4.tuwien.ac.at/~e0060387/41_1.png
http://stud4.tuwien.ac.at/~e0060387/41_2.png
lj_scampo
08-06-2002, 11:42
Soviel ich verstanden habe, lautet die Abbruchbedingung:
<FONT FACE=Symbol>|</FONT>y<sub>n</sub>-y<sub>n-1</sub><FONT FACE=Symbol>|</FONT> < 0.001
(d.h. die Annaeherung ist auf 3 Dezimalstellen genau)
hmm, erst sechs in der frua ?
ein perl skript zum berechnen von Polynom-Lösungen für dieses Problem (x0,y0 frei wählbar) und anschließender spezieller Berechnung (in den ersten zehn iterationen auch nicht ungenauer als mathematica).
___________________________________________
und was werden wir nächsten abend machen, pinky ?
#!usr/bin/perl
print "Berechnung spezieller Lösungen für:dy/dx=x+y^2\n"."x0 [return] y0 eingeben(double): \n";
$x0=<STDIN>;$y0=<STDIN>;
print 'Maximalen Grad des Polynoms eingeben(real!)';$maxdegree=<STDIN>;$y[0]=$y0;$degree=1;$temp=1;
while ($degree <= $maxdegree) { @lasty=@y;undef @y;for($i=0;$i<=$degree;$i++) { if($lasty[$i]) {
for($j=0;$j<=$degree;$j++) { if($lasty[$j]) { $y[$i+$j]+= $lasty[$i] * $lasty[$j];
if(($i+$j)>$degree) { $degree = $i+$j;}}}}}
$y[1]--; @lasty=@y;undef @y; for($i=0;$i<=$degree;$i++) { if($lasty[$i]) {
$y[$i+1]=$lasty[$i]/(-($i+1)); } } $degree++; $x0calc=0;
for($i=1;$i<=$degree;$i++) { if($y[$i]) { $x0calc += $y[$i] * ($x0**$i);}}
$y[0]=$y0; $y[0]-=$x0calc;}
print "Das Nährungspolynom lautet: ";for($i=0;$i<=$degree;$i++) { if($y[$i]) {
print $y[$i] . " x^$i(+)"; } }
print "\n Die Rechung ergab ein Polynom $degree ten Grades !\n";
print "wollen Sie einen konkreten y-Wert berechnen ?? Bitte geben Sie das y ein: ";
$xinput = <STDIN>; $yresult = 0; for($i=0;$i<=$degree;$i++) { if($y[$i]) { $yresult += $y[$i] * ($xinput**$i);}}
print("Das Ergebniss: $yresult\n");
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.