|
POLITECHNIKA WROCŁAWSKA
|
Łukasz Kopeć 177127 |
Wydział: Elektryczny Termin: Wtorek Godz. 1315-1445
|
|
|
|
|
Data ćw: 22.05.2012 |
|
Prowadzący:
Dr inż. Piotr Pierz |
Metody numeryczne |
|||
|
SPRAWOZDANIE TEMAT: Rozwiązywanie równań różniczkowych metodą Runge-Kutty 4-rzędu |
Ocena:
|
Cel ćwiczenia.
Celem ćwiczenia jest rozwiązanie podanego układu równań różniczkowych przy pomocy metody Runge-Kutty 4-rzędu
Warunki początkowe:
Trzy różne kroki całkowania:
h=0.1, h=0.5, h=1.0
Przebieg ćwiczenia
Kod programu:
r_k0.m
% Przykladowy program demonstracji procedury Runge_Kutty 4
% Przyklad dotyczy rozwiazania rownan:
clear all
clc;
% poczatkowa wartosc funkcji
y(1)=1;
y(2)=-2;
neqn=2;
t=0.0;
tfinal=10;
tprint=0.05;
tout=tprint;
h=0.1; % krok calkowania
lp=1;
%% h=0.1
y1(lp)=y(1);
y2(lp)=y(2);
while (t<=tfinal),
y=runkut4(neqn,y,t,h);
t=t+h;
if t>=tout,
lp=lp+1;
y1(lp)=y(1);
y2(lp)=y(2);
tm(lp)=t;
tout=tout+tprint;
end;
end;
;
plot(tm,y1,'r',tm,y2, 'g');
hold on; grid on;
%% h=0.5
clear all
y(1)=1;
y(2)=-2;
neqn=2;
t=0.0;
tfinal=10;
tprint=0.05;
tout=tprint;
h=0.5; % krok calkowania
lp=1;
y1(lp)=y(1);
y2(lp)=y(2);
while (t<=tfinal),
y=runkut4(neqn,y,t,h);
t=t+h;
if t>=tout,
lp=lp+1;
y1(lp)=y(1);
y2(lp)=y(2);
tm(lp)=t;
tout=tout+tprint;
end;
end;
;
plot(tm,y1,'b',tm,y2, 'k'); % funkcja aproksymowana
hold on; grid on; ;
%% h=1
clear all
y(1)=1;
y(2)=-2;
neqn=2;
t=0.0;
tfinal=10;
tprint=0.05;
tout=tprint;
h=1; % krok calkowania
lp=1;
y1(lp)=y(1);
y2(lp)=y(2);
while (t<=tfinal),
y=runkut4(neqn,y,t,h);
t=t+h;
if t>=tout,
lp=lp+1;
y1(lp)=y(1);
y2(lp)=y(2);
tm(lp)=t;
tout=tout+tprint;
end;
end;
;
plot(tm,y1,'cyan',tm,y2, 'k');
title('Porownanie wykresow dla h=0.1, h=0.5 oraz h=1','FontSize',10);
xlabel('Czas [s]','FontSize',10);
ylabel('Wartosc funkcji','FontSize',10);
legend('y1,h=0.1','y2,h=0.1','y1,h=0.5','y2,h=0.5','y1,h=1','y2,h=1',2);
r_kdif.m
function yp=r_kdif(t,y);
% procedura obliczania pochodnych ukladu rownan:
yp(1) = t-y(2);
yp(2) = -1/y(1);
return; %r_kdif
runkut4.m
function y=runkut4(neqn,y,t,h);
% procedura rozwiazywania ukladu neqn rownan rozniczkowych
% metoda Runge-Kutty 4 - rzedu
f1=r_kdif(t,y); % f[1] = k0
ch=h/2;
for k=1:neqn,
f2(k)=y(k)+ch*f1(k);
end;
f2=r_kdif(t+ch,f2); % f(2) = k1
for k=1:neqn,
f3(k)=y(k)+ch*f2(k);
end;
f3=r_kdif(t+ch,f3); % f(3) = k2
for k=1:neqn,
f4(k)=y(k)+h*f3(k);
end;
f4=r_kdif(t+h,f4); % f[4] = k3
for k=1:neqn,
y(k)=y(k)+h*(f1(k)+2.0*(f2(k)+f3(k))+f4(k))/6.0;
end;
return; % runkut4
Wnioski:
Zauważyć można, zwłaszcza dla funkcji y1, że krok całkowania ma wpływ na dokładność wyników - im mniejszy, tym dokładniejszą charakterystykę otrzymujemy, dla dużego kroku charakterystyka robi się liniowa w pewnych zakresach. Dla podanego układu równań różnica w charakterystykach jest niewielka. Porównanie charakterystyk było bardzo nieczytelne, różnicę widać dopiero po przybliżeniu przy górnych zakresach czasu. Funkcje y2 są praktycznie takie same- różnią się bardzo małymi wartościami.