روش رانگ کوتا Rung-Kutta Method

در روش اویلر (خطا از مرتبه 2 O(h2)) با افزایش طول گام و یا افزایش بازه مورد بررسی خطای قابل ملاحظه ای ایجاد می شود. در اینگونه موارد روش رانگ کوتای مرتبه4 به علت مرتبه خطای بالاتر (خطا از مرتبه 4 O(h4)) ) جایگزین بسیار مناسبی برا دستیابی به همگرایی بسیار بالاتر می باشد.

در روش رانگ کوتای مرتبه 4 الگوریتم تکرار بصورت زیر در می­آید :

http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods

http://math.fullerton.edu/mathews/n2003/RungeKuttaMod.html

http://mathworld.wolfram.com/Runge-KuttaMethod.html

تابع f(t,y) همانند روش اویلر با توجه به شکل معادله دیفرانسیل بدست می آید بگونه ای که : f(t,y)=dy/dt

بعنوان مثال معادله دیفرانسیل حرکت آونگ ساده را در نظر بگیرید. این یک معادله درجه دو است که در ابتدا باید آنرا به دو معادله درجه یک تبدیل نماییم ،

از آنجاییکه در روش رانگ کوتا توابع f و g چندین بار تکرار می شوند بهتر است در برنامه با استفاده از @  این دو تابع را ایجاد نماییم.

f=@(alpha) alpha ;

g=@(teta) -w^2*teta ;

با این توضیحات برنامه pendelum1  معادله آونگ ساده را با استفاده از روش رانگ کوتا حل می کند،

% simple pendelum - rung-kutta method

% saeed babanezhad

clc

clear all

%-----------------

g=9.8;

L=1;

N=200;

w=sqrt(g/L);

t=linspace(0,5,N); % time between 0-5s

h=t(2)-t(1);   % time step

f=@(alpha) alpha;

g=@(teta) -w^2*sin(teta);

teta=zeros(1,N);

alpha=zeros(1,N);

teta(1)=10*pi/180;   % initial angle(radian)

alpha(1)=0;          % initial angle speed

for i=1:N-1

k1= f(alpha(i));

kp1= g(teta(i));

k2=f(alpha(i)+h/2*kp1);

kp2=g(teta(i)+h/2*k1);

k3=f(alpha(i)+h/2*kp2);

kp3=g(teta(i)+h/2*k2);

k4=f(alpha(i)+h*kp2);

kp4=g(teta(i)+h*k2);

teta(i+1)=teta(i)+h/6*(k1+2*k2+2*k3+k4);

alpha(i+1)=alpha(i)+h/6*(kp1+2*kp2+2*kp3+kp4);

end

plot(t,teta)

 

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید