Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » zweistufiges Heun-Verfahren
Autor
Universität/Hochschule J zweistufiges Heun-Verfahren
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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.

Wechsel in ein anderes Forum:
 Suchen    
 
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]