% Skript zu Aufgabe 32. clear all close all % Anfangsbedingungen t0=0; x0=1; % Analytische Lösung tStar = log(11/10); solX = @(t) (-11/10*exp(-t)+21/10).*(t<=tStar) + (1/10+10/11*exp(t)).*(t>tStar); % Endzeitpunkt T = 0.1; % rechte Seite f = @(t,x) abs(11/10-x)+1; % % Alternatives Problem % x0 = rand(10,1); % T = 1; % f = @(t,x) x; % solX = @(t) x0*exp(t); %Lösung xEnd = solX(T); Tau = 2.^(-(4:1:11)); errEuler = 0*Tau; errRunge2 = 0*Tau; errRunge4 = 0*Tau; fEvalEuler= 0*Tau; fEvalRunge2=0*Tau; fEvalRunge4=0*Tau; for kTau = 1:length(Tau) tau = Tau(kTau); % Expliziter Euler c = 0; b = 1; A = 0; [t,yout] = RungeKutta(f,[0,T],tau,x0,c,b,A); xEuler = yout(:,end); errEuler(kTau) = norm(xEuler-xEnd); fEvalEuler(kTau) = length(t)*1; % Verfahren von Runge c = [0;1/2]; b = [0;1]; A = [0 0 ; 1/2 0]; [t,yout] = RungeKutta(f,[0,T],tau,x0,c,b,A); xRunge2 = yout(:,end); errRunge2(kTau) = norm(xRunge2-xEnd); fEvalRunge2(kTau) = length(t)*2; % Verfahren von Kutta b = [1/6;1/3;1/3;1/6]; A = [0 0 0 0 ; 1/2 0 0 0 ; 0 1/2 0 0; 0 0 1 0]; c = [0;1/2;1/2;1]; [t,yout] = RungeKutta(f,[0,T],tau,x0,c,b,A); xRunge4 = yout(:,end); errRunge4(kTau) = norm(xRunge4-xEnd); fEvalRunge4(kTau) = length(t)*4; end figure; hold on loglog(Tau,errEuler,'r'); loglog(Tau,errRunge2,'b'); loglog(Tau,errRunge4,'g'); legend('Euler','RK 2','RK 4'); grid on hold off set(gca,'XScale','log'); set(gca,'YScale','log'); title('Error vs. Stepsize'); xlabel('Stepsize'); ylabel('Error'); figure; hold on loglog(fEvalEuler,errEuler,'r'); loglog(fEvalRunge2,errRunge2,'b'); loglog(fEvalRunge4,errRunge4,'g'); legend('Euler','RK 2','RK 4'); grid on hold off set(gca,'XScale','log'); set(gca,'YScale','log'); title('Error vs. Evaluation of f'); xlabel('Evaluations of f'); ylabel('Error');