Autor |
Eingebettetes Runge-Kutta-Verfahren |
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Themenstart: 2021-11-10
|
Hey zusammen, könnte mir jemand bitte diese Aufgabe erstmal mathematisch erklären wie ich das eingebettete Runge-Kutta-Verfahren formen kann damit ich danach den Code schreiben kann?
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbeneuriogjtrrgrtannt.PNG
Danke im Voraus!
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2306
 | Beitrag No.1, eingetragen 2021-11-10
|
Hallo s-amalgh!
Wir kennen leider Deine Aufgabe 15 nicht!
Ich denke gesucht sind Verfahren wie ode23 oder ode45 -
Runge Kutta Fehlberg.
Einen Code aus Octave findest Du hier:
https://www.matheplanet.de/matheplanet/nuke/html/viewtopic.php?rd2&topic=246052&start=0#p1791071
Matlab kennt ode23 und ode45.
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.2, vom Themenstarter, eingetragen 2021-11-10
|
Hey, danke erstmal für deine Antwort!
Das ist Aufgabe 15
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbendfgdsggsrgannt.PNG
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2306
 | Beitrag No.3, eingetragen 2021-11-10
|
Du könntest erst mal ode23 oder ode45 an Deinen Aufgaben testen - da siehst Du erst mal wie es werden soll!
Ein Beispiel dazu:
https://www.matheplanet.de/matheplanet/nuke/html/viewtopic.php?rd2&topic=146185&start=0#p1073255
(mein Beitrag 4 zu einem Anfangswertproblem)
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.4, vom Themenstarter, eingetragen 2021-11-15
|
Ich habe das noch nicht hingekriegt...
Könntest du mir bitte erklären was ich machen soll? welche Formel muss ich schreiben?
Danke im Voraus!
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2306
 | Beitrag No.5, eingetragen 2021-11-16
|
Hallo,
hast Du mal die beiden Beispiele mittels ode23 oder ode45 gelöst?
Viele Grüße
Ronald
Edit:
auf der Seite:
https://en.wikipedia.org/wiki/List_of_Runge–Kutta_methods
findet sich auch Deine Methode:
"Heun's third-order method" ohne die vorletzte Zeile.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.6, vom Themenstarter, eingetragen 2021-11-17
|
ich habe eine mathematische Frage
Ich habe die Anfangswerte : y´ = f(y) und y(x_0) = y_0
Und habe
y´(x_0)*h = f(y_0)*h
y´´(x_0)*h = f(y_0) * f´(y_0) * h
wieso ist y´´(x_0)*h = f(y_0) * f´(y_0) * h ?
Ich meinte mit y´ die erst Ableitung und mit y´´ die zweite Ableitung
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4607
 | Beitrag No.7, eingetragen 2021-11-17
|
\quoteon(2021-11-17 00:33 - s-amalgh in Beitrag No. 6)
wieso ist y´´(x_0)*h = f(y_0) * f´(y_0) * h ?
\quoteoff
Die Kettenregel sagt$$
y''(x) = {\mathrm d\over\mathrm dx}\,y'(x) =
{\mathrm d\over\mathrm dx}\,f\bigl(y(x)\bigr) =
f'\bigl(y(x)\bigr)\cdot y'(x) =
f'\bigl(y(x)\bigr)\cdot f\bigl(y(x)\bigr) \;.$$--zippy
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.8, vom Themenstarter, eingetragen 2021-11-17
|
und von der dritten Ableitung?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4607
 | Beitrag No.9, eingetragen 2021-11-17
|
\quoteon(2021-11-17 00:51 - s-amalgh in Beitrag No. 8)
und von der dritten Ableitung?
\quoteoff
$$
y'''(x) = {\mathrm d\over\mathrm dx}\,y''(x) =
{\mathrm d\over\mathrm dx}\,\bigl[
f'\bigl(y(x)\bigr)\cdot f\bigl(y(x)\bigr)\bigr] =
f''\bigl(y(x)\bigr)\cdot f\bigl(y(x)\bigr)^2 +
f'\bigl(y(x)\bigr)^2\cdot f\bigl(y(x)\bigr)
\;.$$
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.10, vom Themenstarter, eingetragen 2021-11-17
|
Ich habe den Code geschrieben aber fehlen mir noch die zwei Beispiele anzuwenden.
zu Beispiel 1 ich weiß nicht wie ich die Fehler berechne
zu Beispiel 2 habe gar keine Ahnung
Hast du Idee?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.11, vom Themenstarter, eingetragen 2021-11-17
|
Mein Code
\sourceon Matlab
function erk(a,b,h0,y0,rtol,atol,f)
a_= [0, 0, 0; 1/3, 0, 0; 0, 2/3, 0];
b1 = [0, 1/2, 1/2];
b2 = [1/4, 0, 3/4];
c = [0, 1/3, 2/3];
x = [a];
y = [y0];
y_ = [y0];
summe = 0;
delta = 0.9;
sigma = 1/5;
theta = 5;
n = (b-a)/h0;
for i = 1 : n
x(i+1) = x(i) + h0;
k1 = f(x(i),y(i));
k2 = f(x(i) + h0*c(2), y(i) + a_(2,1)*h0*k1);
k3 = f(x(i) + h0*c(3), y(i) + a_(3,2)*h0*k2);
y(i+1) = y(i) + b1(1)*h0*k1 + b1(2)*h0*k2 + b1(3)*h0*k3;
y_(i+1) = y(i) + b2(1)*h0*k1 + b2(2)*h0*k2 + b2(3)*h0*k3;
summe += ((y_(i) - y(i))/(atol + rtol*abs(y(i))))^2;
end
err = sqrt(summe/n);
h_new = delta * h0 * 1/nthroot(err, 3);
if h_new < h0
h0 = h_new;
erk(a,b,h0,y0,rtol,atol,f);
else
if sigma*h0 > h_new
h_new = sigma*h0
elseif h_new > theta*h0
h_new = theta*h0
else
fprintf('%d <= %d <= %d\n',sigma*h0, h_new, theta*h0)
disp("h_new liegt in dem Intervall!\n");
end
end
end
l = [3,4,5,6];
for i = 1 : length(l)
fprintf('Fuer rtol 10^-%d\n',l(i))
erk(-10,20,1,1,10^-l(i),10^-6,@(x,y)(y/(1+x^2)))
end
\sourceoff
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4607
 | Beitrag No.12, eingetragen 2021-11-18
|
\quoteon(2021-11-17 01:07 - s-amalgh in Beitrag No. 10)
Ich habe den Code geschrieben aber fehlen mir noch die zwei Beispiele anzuwenden.
\quoteoff
Dein Code hat noch das grundsätzliche Problem, dass du gar keine Schrittweitensteuerung in eigentlichen Sinne betreibst, sondern über das gesamte Intervall $[a,b]$ mit einer festen Schrittweite arbeitest. Erst danach überlegst du dir, was eine bessere Schrittweite sein könnte.
Mit anderen Worten: Die Überlegungen, die du dir zur Ersetzung von h0 durch h_new machst, musst du in jedem Schritt und nicht nur am Ende anstellen.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.13, vom Themenstarter, eingetragen 2021-11-22
|
Hey @zippy,
Könntest du mir bitte dabei helfen? :)
https://www.matheplanet.com/matheplanet/nuke/html/viewtopic.php?topic=256410&start=0&lps=1862483#v1862483
Danke im Voraus!
|
Profil
|