Sprawozdanie
Metody numeryczne
Temat: numeryczne rozwiązywanie zagadnień początkowych równań i układów równań różniczkowych zwyczajnych.
Sprawozdanie wykonali:
Bartłomiej Łaszek 152133
Adam Tondel 153019
Celem naszego ćwiczenia było sprawdzenie naszej wiedzy na temat rozwiązywania równań różniczkowych zwyczajnych, właściwości związanych z długością kroku, oraz liczbą iteracji.
Obiektem naszych rozważań było narysowanie charakterystyk dla kondensatora i połączonego do niego opornika w szereg. Układ taki nosi nazwę układu inercyjnego pierwszego rzędu. Zadanie jakie mieliśmy do wykonania polegało na sporządzeniu wykresów dla ładowania kondensatora bez warunków początkowych dla małego kroku oraz dla kroku zbliżonego do stałej czasowej jak również dla kroku równego stałej czasowej.
Mały krok:
m-plik wygląda następująco:
uwe = 10;
i=1
u(i)=0
h=0.01;
uc=0
r=1;
c=1;
%uc(i)=h*(uwe-uc/r*c)+uc(i);
for i=1:1:1000
uc(i+1)=h*(uwe-uc(i)/r*c)+uc(i);
end
plot(uc)
Wynik jego działania przedstawia się następująco:
Widać, że dla małego kroku potrzebna jest bardzo duża ilość iteracji ze względu na bardzo powolny wzrost wartości funkcji w początkowej części. Krok jaki zastosowaliśmy to 0.01 stałej czasowej. Stała czasowa w naszym przypadku jest równa iloczynowi wartości rezystancji oraz pojemności i wynosi 1s.
Krok wynoszący 0.6 stałej czasowej:
m-plik wygląda następująco:
uwe = 10;
i=1
u(i)=0
h=0.6;
uc=0
r=1;
c=1;
%uc(i)=h*(uwe-uc/r*c)+uc(i);
for i=1:1:10
uc(i+1)=h*(uwe-uc(i)/r*c)+uc(i);
end
plot(uc)
W przypadku zastosowania kroku 0.6 stałej czasowej nie widać jeszcze złego wpływu na wartości wykresu. Widać jednak, że wykres nie jest już tak dokładny jak poprzednim razem, widać wyraźnie załamywanie się linii ale jednak można uznać, że wykres dobrze odwzorowuje wartość prawdziwą – brak jest tzw. przeregulowania oraz wykres zatrzymuje się na wartości zadanej napięcia czyli na 10V.
Krok równy stałej czasowej:
m-plik poniżej:
uwe = 10;
i=1
u(i)=0
h=1;
uc=0
r=1;
c=1;
%uc(i)=h*(uwe-uc/r*c)+uc(i);
for i=1:1:5
uc(i+1)=h*(uwe-uc(i)/r*c)+uc(i);
end
plot(uc)
Teraz widać, że wartość ustalona osiągana jest od razu po pierwszej iteracji. Dzieje się tak dlatego, że funkcja jaką przybliżamy nasz element inercyjny jest funkcja liniową. Nasz algorytm popełnia błąd, ponieważ nachylenie tej prostej zależy od punktu i oraz i+1. W tym przypadku punkt i+1 jest równy wartości ustalonej, tak więc prosta od razu trafia na wartośc ustaloną (po pierwszej iteracji) w związku z tym dalsze iteracje nie mają już miejsca.
Teraz naszym zadaniem jest wykorzystanie wbudowanych funkcji matlaba takich jak:
ode23, ode45, ode113, ode15s oraz ode23s.
poniżej przedstawione są funkcje z matlaba oraz powstałe wykresy:
function duc = ukladRC (t,uc)
u = 10;
r = 1;
c = 1;
duc = (u-uc)/(r*c)
[t, uc] = ode45('ukladRC',[0 10],0);
plot(t,uc,'g')
figure
[t, uc] = ode23('ukladRC',[0 10],0);
plot(t,uc,'b')
figure
[t, uc] = ode113('ukladRC',[0 10],0);
plot(t,uc,'y')
figure
[t, uc] = ode15s('ukladRC',[0 10],0);
plot(t,uc,'r')
figure
[t, uc] = ode23s('ukladRC',[0 10],0);
plot(t,uc,'black')
Jak widać praktycznie wszystkie charakterystyki otrzymane z wbudowanych funkcji matlaba są praktycznie identyczne. Na podstawie wykresu nie można powiedzieć która z funkcji jest dokładniejsza czy lepsza. Wszystkie zdają się być idealne, jednak są pomiędzy nimi pewne różnice, których nie jesteśmy w stanie zauważyć na podstawie wykresu. Wykorzystaliśmy następujące funkcje matlaba: ode23 która jest jednokrokową metodą Rungego-Kutty 2 i 3 rzędu, ode45 która przedstawia metodę Rungego-Kutty 4 i 5 rzędu, ode113 - początkowe dla równań różniczkowych zwyczajnych metodą Adams-Bashforth-Moulton, ode15s - metoda oparta na formule numerycznego różniczkowania oraz ode23s - metodę, która jest oparta na zmodyfikowanej formule Rosenbrocka 2 rzędu. Nie jestem jednak w stanie powiedzieć która z powyższych jest najlepsza. Wszystkie 5 metod dają dobre wyniki jeżeli mamy rozpatrywać je na podstawie wykresu.