Metody jednokrokowe rozwiązywania równań różniczkowych, aaa, studia 22.10.2014, całe sttudia, III semestr, metody numeryczne lab, metody numeryczne


Politechnika Lubelska

w Lublinie

Laboratorium Metod Numerycznych

Ćwiczenie nr 9

Imię i Nazwisko:

Jakub Machometa

Semestr: III

Grupa: 3.3

Rok akademicki:

2009/2010

Temat:

Metody jednokrokowe rozwiązywania równań różniczkowych.

Data wyk.:

16.12.2009r.

Ocena:

Cel ćwiczenia:

Celem ćwiczenia jest zapoznanie z podstawowymi algorytmami rozwiązywania równań różniczkowych metodami Eulera i Rrungego-Kutty RK4

Schemat układu:

0x01 graphic

Wartości przyjęte do wykonania skryptu:

podaj wartosc napiecia: 5

podaj pojemnosc kondensatora: 0.0004

podaj indukcyjnosc cewki: 0.02

podaj poczatkoe napiecie na kondensatorze uc(0): 1.65

podaj poczatkowy prad w obwodzie i(0): 0.3

Skrypt SciLab:

clear;

clc;

lines(0);

E=input("podaj wartosc napiecia: ");

C=input("podaj pojemnosc kondensatora: ");

L=input("podaj indukcyjnosc cewki: ");

Rk=(2*sqrt(L/C));

uc0=input("podaj poczatkoe napiecie na kondensatorze uc(0): ");

il0=input("podaj poczatkowy prad w obwodzie i(0): ");

wybmet=input(" Wybierz metode..

1 - METODA KLASYCZNA 2 - METODA EULERA I RUNGEGO-KUTTY RK4..

3 - ROZWIAZANIE METODA RK4")

select wybmet;

case 1 then

function uc=udokladnie(t)

uc=E+A1*exp(s1*t)+A2*exp(s2*t)

endfunction

function il=idokladnie(t)

il=C*(A1*s1*exp(s1*t)+A2*s2*exp(s2*t))

endfunction

R=Rk*5;

a=R/(2*L);

wn=1/(sqrt(L*C));

s1=-a-sqrt(a*a-wn*wn);

s2=-a+sqrt(a*a-wn*wn);

A1=(il0-uc0*s2+E*s2)/(s1-s2);

A2=(il0-uc0*s1+E*s1)/(s2-s1);

t=linspace(0,-(5/s1)-5/s2,200);

xset("window",0);

plot2d(t, udokladnie(t),3);

plot2d(t, idokladnie(t),4);

xtitle('przebiegi dla przypadku aperiodycznego','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

function w=uakdokladnie(t)

w=E+(A1+(A2*t)).*(exp(-a*t))

endfunction

function z=iakdokladnie(t)

z=-C*(A2-a*A1+A2*t).*exp(-a*t)

endfunction

R=Rk;

a=R/(2*L);

wn=1/(sqrt(L*C));

s=-a;

A1=uc0-E;

A2=il0+a*(uc0-E);

t=linspace(0,6/a,200);

xset("window",1)

plot2d(t, uakdokladnie(t),3);

plot2d(t, iakdokladnie(t),4);

xtitle('przebiegi dla przypadku aperiodycznego krytycznego','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

R=Rk/5;

a=R/(2*L);

wn=1/(sqrt(L*C));

s1=-a-sqrt(a*a-wn*wn);

s2=-a+sqrt(a*a-wn*wn);

A1=(il0-uc0*s2+E*s2)/(s1-s2);

A2=(il0-uc0*s1+E*s1)/(s2-s1);

t=linspace(0,5/a,200);

xset("window",2)

plot2d(t, udokladnie(t),3);

plot2d(t, idokladnie(t),4);

xtitle('przebiegi dla przypadku oscylacyjnego','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=6)

case 2 then

function w=f1(t,y1,y2)

w=y2;

endfunction

function w=f2(t,y1,y2)

w=-y1/(L*C)-(R*y2)/L+E/(L*C);

endfunction

function [t,y1,y2]=Euler(t0,tk,h,uc0,il0)

N=(tk-t0)/h;

t(1)=t0;

y1(1)=uc0;

y2(1)=il0;

for n=1:N

t(n+1)=t(n)+h;

y1(n+1)=y1(n)+h*f1(t(n),y1(n),y2(n));

y2(n+1)=y2(n)+h*f2(t(n),y1(n),y2(n));

end

endfunction

R=Rk;

tau=(2*L)/R;

[eu_t, eu_y1, eu_y2]=Euler(0, 6*tau, tau/2, uc0, il0);

uC=eu_y1;

i=eu_y2*C;

xset("window",0)

plot2d(eu_t, [uC,i],[3,4] );

xtitle('Metoda Eulera przypadek aperiodyczny krytyczny','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

R=Rk*5;

tau=(2*L)/R;

[rk4_t, rk4_y1, rk4_y2]=Euler(0, 6*tau, tau/2, uc0, il0);

uC=eu_y1;

i=eu_y2*C;

xset("window",1)

plot2d(eu_t, [uC,i],[3,4] );

xtitle('Metoda Eulera przypadek aperiodyczny','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

R=Rk/5;

tau=(2*L)/R;

[rk4_t, rk4_y1, rk4_y2]=Euler(0, 6*tau, tau/2, uc0, il0);

uC=eu_y1;

i=eu_y2*C;

xset("window",2)

plot2d(eu_t, [uC,i],[3,4] );

xtitle('Metoda Eulera przypadek oscylacyjny','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=4)

case 3 then

function w=f1(t,y1,y2)

w=y2;

endfunction

function w=f2(t,y1,y2)

w=-y1/(L*C)-(R*y2)/L+E/(L*C);

endfunction

function [t,y1,y2]=RK4(t0, tk, h, uc0, il0)

N=(tk-t0)/h;

t(1)=t0;

y1(1)=uc0;

y2(1)=il0;

for n=1:N

t(n+1)=t(n)+h;

k11=f1(t(n), y1(n), y2(n));

k21=f2(t(n), y1(n), y2(n));

k12=f1(t(n)+ h/2, y1(n)+h/2*k11, y2(n)+h/2*k21);

k22=f2(t(n)+ h/2, y1(n)+h/2*k11, y2(n)+h/2*k21);

k13=f1(t(n)+ h/2, y1(n)+h/2*k12, y2(n)+h/2*k22);

k23=f2(t(n)+ h/2, y1(n)+h/2*k12, y2(n)+h/2*k22);

k14=f1(t(n)+ h, y1(n)+h*k13, y2(n)+h*k23);

k24=f2(t(n)+ h, y1(n)+h*k13, y2(n)+h*k23);

y1(n+1)=y1(n)+h/6*(k11+2*k12+2*k13+k14);

y2(n+1)=y2(n)+h/6*(k21+2*k22+2*k23+k24);

end

endfunction

R=Rk;

tau=(2*L)/R;

[rk4_t, rk4_y1, rk4_y2]=RK4(0, 6*tau, tau/2, uc0, il0);

uC=rk4_y1;

i=rk4_y2*C;

xset("window",0)

plot2d(rk4_t, [uC,i],[3,4] );

xtitle('Metoda RK4 przypadek aperiodyczny krytyczny','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

R=Rk*5;

tau=(2*L)/R;

[rk4_t, rk4_y1, rk4_y2]=RK4(0, 6*tau, tau/2, uc0, il0);

uC=rk4_y1;

i=rk4_y2*C;

xset("window",1)

plot2d(rk4_t, [uC,i],[3,4] );

xtitle('Metoda RK4 przypadek aperiodyczny ','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=2)

R=Rk/5;

tau=(2*L)/R;

[rk4_t, rk4_y1, rk4_y2]=RK4(0, 6*tau, tau/2, uc0, il0);

uC=rk4_y1;

i=rk4_y2*C;

xset("window",2)

plot2d(rk4_t, [uC,i],[3,4] );

xtitle('Metoda RK4 przypadek oscylacyjny','t','uC i',boxed=1)

legends(['uC','i'],[3,4],opt=4)

end;

Wykresy wykreślone przez SciLab:

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

WNIOSKI:

Metoda Eulera jest mniej dokładniejsza od metody Rungego-Kutty rzędu 4, przy niskiej liczbie kroków. Gdy liczba kroków zostanie zwiększona, na wykresach nie widać dużych rozbieżności miedzy obiema metodami.



Wyszukiwarka