|
Autor |
zweistufiges Heun-Verfahren |
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Themenstart: 2022-01-11
|
Aufgabe:
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbglbkjlfbxenannt.PNG
Ich muss diese Formel für das zweistufige Heun-Verfahren in Matalb implementieren :
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenak_lkre_fennt.PNG
mein Code:
\sourceon matlab
function tt
function y = heun(a, b, h, y0, f)
x = a:h:b;
N = length(x);
n = length(y0);
y = zeros(n,N);
y(:,1) = y0(:);
for i = 1:N-1
fi = f(x(i),y(:,i));
y(:,i+1) = y(:,i) + h/2*(fi + f(x(i+1),y(:,i)+h*fi));
end
end
A = [904,3669,3595; -539,-2183,-2138; 71,284,277];
f = @(x,y) [A*y];
y0 = [1 0 0];
a = 0;
b = 5;
h = [0.1,0.01,0.001];
for k = 1:length(h)
figure(k)
hk = h(k);
x = a:hk:b;
y = heun(a,b,hk,y0,f)
plot(x,y(1,:),'-', ...
x,y(2,:),'--', ...
x,y(3,:),':','LineWidth',2);
set(gca,'FontSize',18);
legend('y(1,:)','y(2,:)','y(3,:)');
end
end
\sourceoff
Ich bekomme aber in der Ausgabe NaN
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unklsvjldskvjbenannt.PNG
Wieso kommt so raus? und wie kann ich das Problem lösen?
Danke im Voraus für die Antwort!
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 810
 | Beitrag No.1, eingetragen 2022-01-11
|
Hast Du dieses Verhalten auch für $h=0.001$?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.2, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 16:41 - majoka in Beitrag No. 1)
Hast Du dieses Verhalten auch für $h=0.001$?
\quoteoff
Danke für deine Antwort
ja habe auch für h = 0.001 gemacht und hat funktioniert
nur für h = 0.1 und 0.01 gibt NaN aus
Weißt du warum? und wie ich das vermeiden kann?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.3, eingetragen 2022-01-11
|
Die Matrix $A$ hat einen Eigenwert in der Größenordnung $-1000$. Wenn man nun mit einer zu großen Schrittweite wie $h=1/10$ oder $h=1/100$ rechnet, wird $1-1000\cdot h<0$, und die Lösung geht nicht gegen $0$, sondern explodiert. Und irgendwann überschreitet die explodierende Lösung den Bereich von $10^{308}$, den MATLAB noch darstellen kann, und man erhält NaN.
--zippy
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.4, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 19:27 - zippy in Beitrag No. 3)
Die Matrix $A$ hat einen Eigenwert in der Größenordnung $-1000$. Wenn man nun mit einer zu großen Schrittweite wie $h=1/10$ oder $h=1/100$ rechnet, wird $1-1000\cdot h<0$, und die Lösung geht nicht gegen $0$, sondern explodiert. Und irgendwann überschreitet die explodierende Lösung den Bereich von $10^{308}$, den MATLAB noch darstellen kann, und man erhält NaN.
--zippy
\quoteoff
Und wie kann ich das Problem vermeiden? Ich glaube nicht dass die Lösung NaN als Hausaufgabe richtig sein soll
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.5, eingetragen 2022-01-11
|
\quoteon(2022-01-11 19:37 - s-amalgh in Beitrag No. 4)
Ich glaube nicht dass die Lösung NaN als Hausaufgabe richtig sein soll
\quoteoff
Wenn dein Programm keinen Fehler enthält, könnte die Erkenntnis "Heun mit zu großer Schrittweite funktioniert in diesem Fall nicht" durchaus zum Sinn der Aufgabe gehören.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.6, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 19:43 - zippy in Beitrag No. 5)
\quoteon(2022-01-11 19:37 - s-amalgh in Beitrag No. 4)
Ich glaube nicht dass die Lösung NaN als Hausaufgabe richtig sein soll
\quoteoff
Wenn dein Programm keinen Fehler enthält, könnte die Erkenntnis "Heun mit zu großer Schrittweise funktioniert in diesem Fall nicht" durchaus zum Sinn der Aufgabe gehören.
\quoteoff
Meinst du könnte sein dass mein Code irgendein Fehler hat?
Ich konnte die Lösung auch nicht grafisch darstellen wegen NaN deswegen glaube ich dass NaN falsch ist und ich Zahlen bekommen soll
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2259
 | Beitrag No.7, eingetragen 2022-01-11
|
Hallo s-amalgh!
Etwas aus Wikipedia zur Information.
https://de.wikipedia.org/wiki/Steifes_Anfangswertproblem
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.8, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 20:06 - Delastelle in Beitrag No. 7)
Hallo s-amalgh!
Etwas aus Wikipedia zur Information.
https://de.wikipedia.org/wiki/Steifes_Anfangswertproblem
Viele Grüße
Ronald
\quoteoff
wie ich verstanden habe muss ist lambda mit A*y multiplizieren?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.9, eingetragen 2022-01-11
|
\quoteon(2022-01-11 19:48 - s-amalgh in Beitrag No. 6)
Ich konnte die Lösung auch nicht grafisch darstellen wegen NaN
\quoteoff
NaN tritt ja nicht von Anfang an auf. Daher kannst du den Anfang der Lösung durchaus darstellen du kannst sehen, dass sie explodiert.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.10, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 20:54 - zippy in Beitrag No. 9)
\quoteon(2022-01-11 19:48 - s-amalgh in Beitrag No. 6)
Ich konnte die Lösung auch nicht grafisch darstellen wegen NaN
\quoteoff
NaN tritt ja nicht von Anfang an auf. Daher kannst du den Anfang der Lösung durchaus darstellen du kannst sehen, dass sie explodiert.
\quoteoff
der Professor hat gesagt das NaN nicht herauskommen sollte das heißt ich habe irgendein Fehler in meinem Code.
Weißt du welche?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.11, eingetragen 2022-01-11
|
\quoteon(2022-01-11 20:56 - s-amalgh in Beitrag No. 10)
das heißt ich habe irgendein Fehler in meinem Code.
Weißt du welche?
\quoteoff
Ich sehe keinen. Aber du kannst ja einfach mal die ersten beiden Schritte einmal von deinem Programm rechnen lassen und einmal auf dem Papier selbst rechnen. Dann siehst du ja, ob dein Programm in Ordnung ist.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.12, vom Themenstarter, eingetragen 2022-01-11
|
\quoteon(2022-01-11 21:19 - zippy in Beitrag No. 11)
\quoteon(2022-01-11 20:56 - s-amalgh in Beitrag No. 10)
das heißt ich habe irgendein Fehler in meinem Code.
Weißt du welche?
\quoteoff
Ich sehe keinen. Aber du kannst ja einfach mal die ersten beiden Schritte einmal von deinem Programm rechnen lassen und einmal auf dem Papier selbst rechnen. Dann siehst du ja, ob dein Programm in Ordnung ist.
\quoteoff
Noch eine Frage.
Ich versuche jetzt das Radau-IA-Verfahren zu implementieren statt Heun-Verfahren
In der Aufgabe steht dass ich Programmierungsaufgabe 3 benutzen kann uns sie lautet :
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbelkxlkcnannt.PNG
und der Code dazu ist :
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenand_lk_lfknt.PNG
Meine Frage ist jetzt wenn ich jetzt dieser Code für meine Aufgabe benutzen will, dann muss ich Matrix A = [904,3669,3595; -539,-2183,-2138; 71,284,277] statt K = -1/2 also K = A oder?
und y0 = [1 0 0] statt y0 = 1 oder?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.13, vom Themenstarter, eingetragen 2022-01-11
|
Ich meinte wie kann ich den Code hier
https://www.matheplanet.com/matheplanet/nuke/html/viewtopic.php?topic=256108&start=0
für ein System gewöhnlicher Differentialgleichungen, ich konnte nicht..
|
Profil
|
rlk
Senior  Dabei seit: 16.03.2007 Mitteilungen: 11576
Wohnort: Wien
 | Beitrag No.14, eingetragen 2022-01-14
|
Hallo s-amalgh,
\quoteon(2022-01-11 22:14 - s-amalgh in Beitrag No. 12)
Meine Frage ist jetzt wenn ich jetzt dieser Code für meine Aufgabe benutzen will, dann muss ich Matrix A = [904,3669,3595; -539,-2183,-2138; 71,284,277] statt K = -1/2 also K = A oder?
und y0 = [1 0 0] statt y0 = 1 oder?
\quoteoff
ja, das sollte funktionieren. Die Berechnung des globalen Fehlers musst Du aber an Deine Differentialgleichung anpassen.
Was konntest Du nicht?
Servus,
Roland
|
Profil
|
s-amalgh hat die Antworten auf ihre/seine Frage gesehen. s-amalgh hat selbst das Ok-Häkchen gesetzt. | s-amalgh wird per Mail über neue Antworten informiert. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|