PDA

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?

VTEC
05-06-2002, 20:17
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.

shabby
07-06-2002, 20:50
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...

shabby
08-06-2002, 11:16
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> &lt; 0.001
(d.h. die Annaeherung ist auf 3 Dezimalstellen genau)

shabby
10-06-2002, 07:06
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=&lt;STDIN&gt;;$y0=&lt;STDIN&gt;;
print 'Maximalen Grad des Polynoms eingeben(real!)';$maxdegree=&lt;STDIN&gt;;$y[0]=$y0;$degree=1;$temp=1;
while ($degree &lt;= $maxdegree) { @lasty=@y;undef @y;for($i=0;$i&lt;=$degree;$i++) { if($lasty[$i]) {
for($j=0;$j&lt;=$degree;$j++) { if($lasty[$j]) { $y[$i+$j]+= $lasty[$i] * $lasty[$j];
if(($i+$j)&gt;$degree) { $degree = $i+$j;}}}}}
$y[1]--; @lasty=@y;undef @y; for($i=0;$i&lt;=$degree;$i++) { if($lasty[$i]) {
$y[$i+1]=$lasty[$i]/(-($i+1)); } } $degree++; $x0calc=0;
for($i=1;$i&lt;=$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&lt;=$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 = &lt;STDIN&gt;; $yresult = 0; for($i=0;$i&lt;=$degree;$i++) { if($y[$i]) { $yresult += $y[$i] * ($xinput**$i);}}
print("Das Ergebniss: $yresult\n");