Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Radau-IA-Verfahren
Seite 1   [1 2]   2 Seiten
Autor
Universität/Hochschule J Radau-IA-Verfahren
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Themenstart: 2021-11-05

Hallo zusammen, Ich habe diese Programmierungsaufgabe: https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenatztftfulkhlnnt.PNG Die erste Formel muss ich als Code schreiben https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenalukhghtjfgjhnnt.PNG z_j muss in die Differentialgleichung eingesetzt werden dann habe ich so z_1*(-1/2). Meine Frage ist wie kann ich eine Variable einsetzten? in diesem Fall y durch z_1 oder z_2 ersetzen. Ich kann eine Zahl einsetze aber eine Buchstabe(Variable) nicht Mein bisheriger Code: \sourceon Matlab c = [0,2/3]; a = [1/4,-1/4;1/4,5/12]; b = [1/4,3/4]; s = 2; y0=1; f = @(x,y) (-y/2); h=0.1; x(1) = 0; for i = 1 : s for j = 1 : s z(i) = y0 + h * (sum(a(i,j)*f(x(1)+c(j)*h,z(j)))) end end \sourceoff aber ich habe fehler bei z(j). Ich wäre dankbar, wenn jemand mir helfen würde.


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  Beitrag No.1, eingetragen 2021-11-06

Hallo s-amalgh! Eventuell kannst Du erst mal mit einem noch einfacheren Beispiel anfangen. Z.B. mit dem impliziten Euler-Verfahren. Wenn es läuft, dann das Radau-Verfahren (2 Stufig). So auf den ersten Blick habe ich nicht gesehen, wo der Fehler liegt! 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.2, vom Themenstarter, eingetragen 2021-11-06

Danke erstmal für deine Antwort :) Das hat nicht mit einem bestimmten Verfahren zu tun.. https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenalukhguguguhtjfgjhnnt.PNG Ich muss f(x0 + c_j*h, z_j) in -y/2 einsetzen dann habe ich -z_j/2 (es gibt kein x in -y/2). Ich konnte aber nicht y durch z_j ersetzen Wahrscheinlich durch den Code der ich geschrieben habe kann ich y durch irgendeine Zahl ersetzen und nicht durch eine Buchstabe.. Hast du Idee wie ich das machen kann? Vielen Dank im Voraus!


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  Beitrag No.3, eingetragen 2021-11-06

Hallo, Ich selbst habe bisher fast nie mit impliziten Verfahren für Anfangswertprobleme gearbeitet. Eventuell gibt es hier Code und Beispiele: https://de.mathworks.com/matlabcentral/fileexchange/56162-radau-iia Ich kann auch mal in Büchern schauen, vielleicht finde ich was! 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.4, vom Themenstarter, eingetragen 2021-11-06

Ja das wäre sehr nett von dir wenn du an Bücher für mich gucken würdest :) Ich konnte die Datei nicht aufmachen , könntest du bitte den Code kopieren und hier einfügen?


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  Beitrag No.5, eingetragen 2021-11-06

Hallo, ich selbst bin bei Mathworks nicht angemeldet. Vieleicht schaut jemand vorbei, der schon angemeldet ist. Oder Du meldest Dich selbst an. Viele Grüße Ronald


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.6, eingetragen 2021-11-06

Du missverstehst, was die sum-Funktion leistet. Bei dir ist das Argument dieser Funktion eine Zahl und sum liefert folglich die Summe dieser einen Zahl, also die Zahl selbst. Statt sum zu verwenden solltest du die Summation in deiner Schleife über j selbst ausführen, etwa so: \sourceon matlab for i = 1 : s z(i) = 0 for j = 1 : s z(i) = z(i) + a(i,j) * f(x(1) + c(j) * h, z(j)) end z(i) = y0 + h * z(i) end \sourceoff Die Summe zur Berechnung von y1 kannst du analog ausführen, und zwar auch innerhalb dieser Doppelschleife. --zippy [Die Antwort wurde nach Beitrag No.4 begonnen.]


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.7, eingetragen 2021-11-06

\quoteon(2021-11-06 01:07 - Delastelle in Beitrag No. 5) ich selbst bin bei Mathworks nicht angemeldet. Vieleicht schaut jemand vorbei, der schon angemeldet ist. Oder Du meldest Dich selbst an. \quoteoff Man muss nicht angemeldet sein, um den Code lesen zu können. Einfach im Reiter "Functions" auf "radau" klicken. Ich möchte aber bezweifeln, dass einem eine fertige Funktion, die aus fast 2.000 Zeilen besteht, bei der Lösung dieser simplen Programmieraufgabe weiterhilft.


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2306
  Beitrag No.8, eingetragen 2021-11-06

Hallo, zum Buch Faires / Burden "Numerische Methoden" soll es auch Software geben - damals (1994) eine Diskette. Als Adresse ist www.spektrum-verlag.com angegeben - dies führt aber im Jahr 2021 zu Springer. Ich habe jetzt bei mir auch den Quellcode auf der Festplatte wieder gefunden. Viele Grüße Ronald Edit: @zippy manchmal helfen aber fertige Programme um eigene Fehler zu finden. In der Optimierung / Numerik sind die eigentlichen Routinen oft kurz.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.9, vom Themenstarter, eingetragen 2021-11-06

Danke für deine Antwort Ich habe versucht erstmal das mathematisch zu lösen und ich habe das so raus gekommen: https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_08af1d16-27c7-4ac5-80c3-b3753d31c1f1.jpg Falsche Lösung?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.10, eingetragen 2021-11-06

\quoteon(2021-11-06 01:33 - Delastelle in Beitrag No. 8) @zippy manchmal helfen aber fertige Programme um eigene Fehler zu finden. \quoteoff Was zu programmieren ist, steht doch schon in den zwei Formeln im Startbeitrag. Es geht nur noch darum, diese beiden Formeln in matlab-Code zu übesetzen. \quoteon(2021-11-06 01:33 - Delastelle in Beitrag No. 8) In der Optimierung / Numerik sind die eigentlichen Routinen oft kurz. \quoteoff Wie schon gesagt: 2.000 Zeilen [Die Antwort wurde nach Beitrag No.8 begonnen.]


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.11, eingetragen 2021-11-06

\quoteon(2021-11-06 01:38 - s-amalgh in Beitrag No. 9) Falsche Lösung? \quoteoff EDIT: Nach dem Zitat deines Dozenten könnte tatsächlich gemeint sein, dass man das vorher auf dem Papier ausrechnet, vgl. Beitrag Nr. 18.


   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 2021-11-06

Ich muss lineares Gleichungssystem von z_1 und z_2 haben das steht in der Aufgabe Aber ich glaube dein Code liefert kein lineares Gleichungssystem 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 2021-11-06

Ich habe das ausgeführt \sourceon Matlab function tt c = [0,2/3]; a = [1/4,-1/4;1/4,5/12]; b = [1/4,3/4]; s = 2; y0=1; f = @(x,y) (-y/2); h=0.1; x(1) = 0; for i = 1 : s z(i) = 0 for j = 1 : s z(i) = z(i) + a(i,j) * f(x(1) + c(j) * h, z(j)) end z(i) = y0 + h * z(i) end end \sourceoff und habe das rausgekommen: z = 0 z = 0 error: z(2): out of bound 1 (dimensions ar e 1x1) error: called from tt at line 14 column 12 Das ist die 14.Zeile \sourceon Matlab z(i) = z(i) + a(i,j) * f(x(1) + c(j) * h, z(j)) \sourceoff


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.14, eingetragen 2021-11-06

\quoteon(2021-11-06 01:52 - s-amalgh in Beitrag No. 13) error: z(2): out of bound 1 (dimensions ar e 1x1) \quoteoff z muss vor der Doppelschleife definiert werden, etwa so: \sourceon matlab function tt c = [0,2/3]; a = [1/4,-1/4;1/4,5/12]; b = [1/4,3/4]; s = 2; y0=1; f = @(x,y) (-y/2); h=0.1; x(1) = 0; z = [0, 0] for i = 1 : s for j = 1 : s z(i) = z(i) + a(i,j) * f(x(1) + c(j) * h, z(j)) end z(i) = y0 + h * z(i) end end \sourceoff


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.15, eingetragen 2021-11-06

\quoteon(2021-11-06 01:50 - s-amalgh in Beitrag No. 12) Aber ich glaube dein Code liefert kein lineares Gleichungssystem oder? \quoteoff Nein, ich habe bisher nur das Problem mit der sum-Funktion betrachtet, sonst aber deinen Code beibehalten. Was hier noch nicht passt, ist, dass die Formel (2.16) im Startbeitrag ein Gleichungssystem zwischen den $z_j$ beschreibt, während der Code die bisher nicht berechneten $z_j$ auf der rechten Seite einfach durch $0$ ersetzt. Um hier zu dem in der Aufgabenstellung angesprochenen linearen Gleichungssystem zu kommen, muss man auch ausnutzen, dass $f(x,y)$ in $y$ linear ist.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.16, vom Themenstarter, eingetragen 2021-11-06

Ich verstehe zwei sachen nicht die erst : In der Aufgabestellung steht "sind hier lineare Gleichungssysteme zu lösen" z_i (also z_1 und z_2) stellen ein lineares Gleichungssystem dar und dann muss ich das lösen. Und eigentlich der Dozent hat mir so geschrieben : "schreiben Sie die beiden Gleichungen mit z_1, z_2 explizit auf und setzen Sie alles ein, was aus der Aufgabe bekannt ist. Sie sollten ein lineares Gleichungssystem für z_1, z_2 herausbekommen. Eventuell müssen Sie das z_i noch auf die andere Seite bringen, dann können Sie das LGS lösen." die zweite: In der ersten Schleife hast du entschieden dass z_j (z_1) gleich 0 ist aber das wissen wir nicht. wir verwenden die erste Formel um z_1 und z_2 zu bestimmen [Die Antwort wurde nach Beitrag No.14 begonnen.]


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.17, vom Themenstarter, eingetragen 2021-11-06

Wie kann ich ein lineares Gleichungssystem von z_1 und z_2 stellen? Hast du idee? Ich glaube y sollte einfach durch z_1 und dann z_2 ersetzt und nicht durch 0


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.18, eingetragen 2021-11-06

\quoteon(2021-11-06 02:31 - s-amalgh in Beitrag No. 17) Wie kann ich ein lineares Gleichungssystem von z_1 und z_2 stellen? \quoteoff Die Formel (2.16) ist doch bereits ein lineares Gleichungssystem für die $z_i$. Die Frage ist, wo dieses System zu lösen ist: Im Programm oder vorher auf dem Papier. Das Zitat deines Dozenten in Beitrag Nr. 16 klingt fast so, als sei tatsächlich die Papierlösung gemeint, aber eindeutig ist das nicht.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.19, vom Themenstarter, eingetragen 2021-11-06

Achso ok Aber was ich nicht verstehe ist, wie haben wir in der ersten Runde z_j(also z_1) durch 0 ersetzt und wir wollten z_1 noch bestimmen? Ich meinte die Gleichung war so : z_1 = ........... f(x0 + c_j*h, z_1) wir wollten z_1 noch bestimmen aber du hast z_1 das in der rechten Seite steht der Wert 0 gegeben Könntest du mir bitte erklären wieso ?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.20, eingetragen 2021-11-06

\quoteon(2021-11-06 03:44 - s-amalgh in Beitrag No. 19) aber du hast z_1 das in der rechten Seite steht der Wert 0 gegeben Könntest du mir bitte erklären wieso ? \quoteoff Nur deswegen: \quoteon(2021-11-06 02:21 - zippy in Beitrag No. 15) Nein, ich habe bisher nur das Problem mit der sum-Funktion betrachtet, sonst aber deinen Code beibehalten. \quoteoff Um jetzt das Gleichungssystem zu lösen (und zwar nicht auf dem Papier, sondern im Programm), ist die Formel (2.16) zuerst in die Form $\sum_j m_{ij}\,z_j=b_i$ zu bringen. Wenn die hier auftretende Matrix $m$ und der Vektor $b$ unter gleichem Namen in Matlab angelegt sind, kann man dort einfach $z=m\backslash b$ schreiben.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.21, vom Themenstarter, eingetragen 2021-11-06

aber wir haben schon z_i oder? \sourceon Matlab function tt c = [0,2/3]; a = [1/4,-1/4;1/4,5/12]; b = [1/4,3/4]; s = 2; y0=1; f = @(x,y) (-y/2); h=0.1; x(1) = 0; z = [0, 0]; for i = 1 : s for j = 1 : s z(i) = z(i) + a(i,j) * f(x(1) + c(j) * h, z(j)) end z(i) = y0 + h * z(i) end end \sourceoff Ausgabe: z = 0 0 z = 0 0 z = 1 0 z = 1.0000 -0.1250 z = 1.000000 -0.098958 z = 1.0000 0.9901


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.22, vom Themenstarter, eingetragen 2021-11-06

Und noch eine Frage Meinst du a mit m ? a = [1/4,-1/4;1/4,5/12]; b = [1/4,3/4]; z=a\b, so?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.23, eingetragen 2021-11-06

\quoteon(2021-11-06 04:57 - s-amalgh in Beitrag No. 21) aber wir haben schon z_i oder? \quoteoff Ja, aber das ist keine Lösung des Gleichungssystems. \quoteon(2021-11-06 05:01 - s-amalgh in Beitrag No. 22) Meinst du a mit m ? \quoteoff Nein, die beiden Matrizen unterscheiden sich in einem wesentlichen Punkt: \quoteon(2021-11-06 02:28 - s-amalgh in Beitrag No. 16) Eventuell müssen Sie das z_i noch auf die andere Seite bringen, dann können Sie das LGS lösen." \quoteoff Ich habe mal die Umsetzung der Formel (2.16) skizziert. Das "z_i auf die andere Seite bringen" findet sich in Zeile 20 wieder. Aber Vorsicht, ich habe diesen Code nur runtergeschrieben und nicht getestet. \sourceon matlab \numberson % wir betrachten nur Funktionen f(x, y), die linear in % y sind und setzen f(x, y) = f(x)(1) + f(x)(2) * y f = @(x) [0, -1/2]; step(0, 1, .01, f) function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y0 + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% hier kommt jetzt die Umsetzung %% %% der Formel zur Berechnung von y1 %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% x1 = x0 + h; end \sourceoff


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.24, vom Themenstarter, eingetragen 2021-11-06

so vielleicht ? \sourceon Matlab function tt % wir betrachten nur Funktionen f(x, y), die linear in % y sind und setzen f(x, y) = f(x)(1) + f(x)(2) * y f = @(x) [0, -1/2]; step(0, 1, 0.1, f) function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)) z(i) = z(i) + a(i, j) * u(1) m(i, j) = h * a(i, j) * u(2) end z(i) = y0 + h * z(i) m(i, i) = m(i, i) - 1 end z = -m\z for i = 1 : 2 y1 = b(i) * f(x0 + c(i) * h, z(i)); y1 = y0 + h * y1 end #x1 = x0 + h; end end \sourceoff


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.25, eingetragen 2021-11-06

\quoteon(2021-11-06 16:25 - s-amalgh in Beitrag No. 24) so vielleicht ? \quoteoff Nicht ganz: 1. Du berücksichtigst nicht, dass $f$ so als Matlab-Funktion definiert ist, dass man die lineare Abhängigkeit von $y$ ausnutzen kann. 2. y0 muss genau einmal zu y1 addiert werden. Die Addition darf daher nicht innerhalb der Schleife erfolgen. \sourceon Matlab function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y0 + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z x1 = x0 + h; y1 = 0; for i = 1 : 2 u = f(x0 + h * c(i)); y1 = b(i) * (u(1) + u(2) * z(i)); end y1 = y0 + h * y1 ; end end \sourceoff


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.26, vom Themenstarter, eingetragen 2021-11-06

Achso ok alles klar. Ich versuche jetzt die y2,.......,yn zu bestimmen für h= 0.1, 0.05, 0.01, 0.005, 0.001 Ich melde mich wenn ich das nicht hinkriege :)


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.27, vom Themenstarter, eingetragen 2021-11-06

Mein Code : \sourceon Matlab function tt % wir betrachten nur Funktionen f(x, y), die linear in % y sind und setzen f(x, y) = f(x)(1) + f(x)(2) * y f = @(x) [0, -1/2]; [x,y] = step(0, 1, 1, 0.1, f) function [x,y] = step(a_, b_, y0, h, f) x(1) = a_; a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); n = ( b_ - a_ ) /h ; y(:,1) = y0(:); for k = 1 : n for i = 1 : 2 for j = 1 : 2 u = f(x(k) + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y(:,k) + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z; x(k + 1) = x(k) + h; for i = 1 : 2 u = f(x(k) + h * c(i)); y(:,k+1) = b(i) * (u(1) + u(2) * z(i)); end y(:,k+1) = y(:,k) + h * y(:,k+1); end end end \sourceoff Die Ausgabe : x = Columns 1 through 7: 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11: 0.7000 0.8000 0.9000 1.0000 y = Columns 1 through 7: 1.0000 0.9637 0.9253 0.8880 0.8522 0.8178 0.7848 Columns 8 through 11: 0.7531 0.7228 0.6936 0.6656 Richtig oder?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.28, eingetragen 2021-11-06

\quoteon(2021-11-06 21:01 - s-amalgh in Beitrag No. 27) Columns 8 through 11: 0.7531 0.7228 0.6936 0.6656 Richtig oder? \quoteoff 0.7047 0.6703 0.6376 0.6065 sind die Werte der exakten Lösung, das kommt also so ungefähr hin.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.29, vom Themenstarter, eingetragen 2021-11-06

Dann sollte meine Lösung richtig sein oder


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.30, vom Themenstarter, eingetragen 2021-11-06

Ich muss jetzt die globalen Fehler der Methode bei x = 1 Die Definition davon ist : https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenavgfjdf_bgkjlgflbknnt.PNG was sind y(x_N) und y_N in unserer Aufgabe? Hast du Idee?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.31, eingetragen 2021-11-06

\quoteon(2021-11-06 21:48 - s-amalgh in Beitrag No. 29) Dann sollte meine Lösung richtig sein oder \quoteoff Mir scheinen die Abweichungen zu der exakten Lösung etwas zu groß zu sein.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.32, vom Themenstarter, eingetragen 2021-11-06

\showon Mir scheinen die Abweichungen zu der exakten Lösung etwas zu groß zu sein \showoff wieso ? wo liegt das Fehler?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.33, eingetragen 2021-11-06

\quoteon(2021-11-06 22:55 - s-amalgh in Beitrag No. 32) wieso ? \quoteoff Die Ergebnisse sind ja schlechter als die des Euler-Verfahrens $y_1 = y_0 + h\cdot f(x_0,y_0)$. \quoteon(2021-11-06 22:55 - s-amalgh in Beitrag No. 32) wo liegt das Fehler? \quoteoff In Zeile 21 fehlte ein y1. \sourceon matlab \numberson function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y0 + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z; x1 = x0 + h; y1 = 0; for i = 1 : 2 u = f(x0 + h * c(i)); y1 = y1 + b(i) * (u(1) + u(2) * z(i)); end y1 = y0 + h * y1 ; end \sourceoff Damit liefert \sourceon matlab x = 0; y = 1; for n = 1 : 10 [x, y] = step(x, y, .1, f); end y \sourceoff y = 0.6065


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.34, vom Themenstarter, eingetragen 2021-11-06

Ich habe so rausgekommen: y = Columns 1 through 7: 1.0000 0.9512 0.9001 0.8512 0.8049 0.7611 0.7198 Columns 8 through 11: 0.6806 0.6436 0.6086 0.5755 Richtig jetzt oder? Mein Code: \sourceon Matlab function tt % wir betrachten nur Funktionen f(x, y), die linear in % y sind und setzen f(x, y) = f(x)(1) + f(x)(2) * y f = @(x) [0, -1/2]; [x,y] = step(0, 1, 1, 0.1, f) function [x,y] = step(a_, b_, y0, h, f) x(1) = a_; a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); n = ( b_ - a_ ) /h ; y= zeros(length(y0),n+1); y(:,1) = y0(:); for k = 1 : n for i = 1 : 2 for j = 1 : 2 u = f(x(k) + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y(:,k) + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z; x(k + 1) = x(k) + h; for i = 1 : 2 u = f(x(k) + h * c(i)); y(:,k+1) = y(:,k+1) + b(i) * (u(1) + u(2) * z(i)); end y(:,k+1) = y(:,k) + h * y(:,k+1); end end end \sourceoff


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.35, eingetragen 2021-11-07

\quoteon(2021-11-06 23:29 - s-amalgh in Beitrag No. 34) Columns 1 through 7: 1.0000 0.9512 0.9001 0.8512 0.8049 0.7611 0.7198 Columns 8 through 11: 0.6806 0.6436 0.6086 0.5755 Richtig jetzt oder? \quoteoff Meine Ergebnisse sehen anders aus und sind deutlich näher an der exakten Lösung: \quoteon(2021-11-06 23:29 - s-amalgh in Beitrag No. 34) Mein Code: \quoteoff Warum vermischt du das Aufbauen der Zeitreihen mit der Berechnung des Schritts $y_0\to y_1$? Das macht den Code nur unnötig kompliziert. Dass unsere Ergebnisse für den ersten Schritt (0.9512) noch übereinstimmen und erst danach auseinanderlaufen, ist ein starker Hinweis, dass dieses Vermischen die Ursache deines Fehlers ist.


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.36, vom Themenstarter, eingetragen 2021-11-07

Wie kann ich y0 bis yn berechnen um wie deine Ergebnisse zu bekommen?


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.37, vom Themenstarter, eingetragen 2021-11-07

Ich habe dein Code probiert \sourceon Matlab function tt % wir betrachten nur Funktionen f(x, y), die linear in % y sind und setzen f(x, y) = f(x)(1) + f(x)(2) * y x = 0; y = 1; for n = 1 : 10 [x, y] = step(x, y, .1, f); end y function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y0 + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z: x1 = x0 + h; y1 = 0; for i = 1 : 2 u = f(x0 + h * c(i)); y1 = y1 + b(i) * (u(1) + u(2) * z(i)); end y1 = y0 + h * y1 ; end end \sourceoff aber kommt ein Fehler raus x1 = x0 + h; ^


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4607
  Beitrag No.38, eingetragen 2021-11-07

\quoteon(2021-11-07 00:10 - s-amalgh in Beitrag No. 36) Wie kann ich y0 bis yn berechnen um wie deine Ergebnisse zu bekommen? \quoteoff Ähnlich wie ich das in Beitrag Nr. 33 schon hingeschrieben hatte: \sourceon matlab x(1) = 0; y(1) = 1; for n = 1 : 10 [x(n+1), y(n+1)] = step(x(n), y(n), .1, @(x) [0, -1/2]); end \sourceoff \sourceon matlab \numberson function [x1, y1] = step(x0, y0, h, f) a = [1/4, -1/4; 1/4, 5/12]; b = [1/4, 3/4]; c = [0, 2/3]; z = zeros(2, 1); m = zeros(2); for i = 1 : 2 for j = 1 : 2 u = f(x0 + h * c(j)); z(i) = z(i) + a(i, j) * u(1); m(i, j) = h * a(i, j) * u(2); end z(i) = y0 + h * z(i); m(i, i) = m(i, i) - 1; end z = -m\z; x1 = x0 + h; y1 = 0; for i = 1 : 2 u = f(x0 + h * c(i)); y1 = y1 + b(i) * (u(1) + u(2) * z(i)); end y1 = y0 + h * y1 ; end \sourceoff [Die Antwort wurde nach Beitrag No.36 begonnen.]


   Profil
s-amalgh
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 16.12.2020
Mitteilungen: 374
  Beitrag No.39, vom Themenstarter, eingetragen 2021-11-07

ja ich habe jetzt wie dein Ergebnis rausgekommen y = Columns 1 through 5: 1.0000 0.9512 0.9048 0.8607 0.8187 Columns 6 through 10: 0.7788 0.7408 0.7047 0.6703 0.6376 Column 11: 0.6065


   Profil
-->> Fortsetzung auf der nächsten Seite -->>
Seite 1Gehe zur Seite: 1 | 2  

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]