روش رانگ کوتا Runge Kutta Method مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط saeed   
پنجشنبه, 27 اسفند 1388 ساعت 04:12

روش رانگ کوتا 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)

 

  • حسين  - تشكر
    خيلي حال كردم
    باورم نميشد توي اينترنت كسي پيدت بشه كه مفتي بياد و كلي مطلب مهم درسي و بهتره بگم علمي رو به آسوني و با بهترين بيان بگه
    آقا سعيد دستتون درد نكنه
    خدا قوت
    :wink:
  • EBI
    دست شما درد نکند و خیلی ممنون
  • mansoor_622000
    aliii bud dastetun dard nakone be dardam khord :idea:
  • محمد
    دستت درد نکنه خیلی خوب و قشنګ توضیح دادی
  • مسعود
    خیلی حال کردم
    اگه میشد کد های دیگه هم مجانی میذاشتید خیلی خوب میشد
  • elyas
    سلام خسته نباشید
    سایت مفیدی دارید
    تو این قسمت فرمولاسیون و کد فکر میکنم دارای اشکاله و اون اینکه در محاسبه رنگ کوتای مرتبه چهار برای محاسبه K4 باید از K3 استفاده بشود نه از K2 .
    با تشکر موفق و موید باشید
  • saeed
    ممنون- کاملا حق با شماست
  • ناشناس
    سلام.در همه مثال های شما چه از روش اویلر و جه رانکوتا مرتبه 4 همه تنها یک dx/dt و یا d2x/dt وجود دارد حال سوالی که پیش میاد اینکه ممکنه ما با معادلاتی سرکار داشته باشیم که با وجود متغیرهایی مثل dx1/dt و همچنین dx2/dt برای مثال مشتق اول تابه 1 dx1/dt هم در مشتق دوم تابع d^2x2/dt وجود داشته باشد که در این صورت نمی شود از روش رانکوتا استفاده کرد آیا تنها روش حل این نوع معادلات استفاده از روش اویلر می باشد؟
  • saeed
    با توجه به مثالی که زدید همچنان به همان راحتی می توانید از روش رانگ کوتا استفاده نمایید اما به هر حال رانگ کوتا تنها روش نیست به فصل 6 کتاب زیر مراجعه نمایید:
    Applied numerical methods using MATLAB
  • امیرعلی
    ممنون ساده و مفیدترین توضیحی بود که توی این همه سایت دیدم
  • mehdi
    سلام
    در این روش از مثلا از x=0 شروع می کنیم و با گام h ادامه می دهیم.
    حالا من می خواهم برعکس عمل کنم یعنی مثلا از x=2 شروع کنم و با گام h به x=0 برسم.
    در این صورت چطوری باید عمل کرد؟
  • saeed
    با فرض اینکه در اینجا x متغیر مستقل است و h طول گام x طبیعتا این طول گام منفی است.
    x=linspace(2,0);
    h=x(2)-x(1);
    بقیه مراحل فرقی نمی کند.
  • Ali
    خسته نباشید به خاطر زحماتتون.
    در رابطه رانکوتای بالا اگه ما سه معادله دیفرانسیل داشتیم و همچنین یک معادله دربرگیرنده متغیرهای معادلات دیگر بود و همچنین یکی از متغیر های ما در معادلات غیرخطی بود چظور می شه همچین معادله ای رو حل کرد.

    اگه پاسخ بدبد ممنون می شم.
  • ناشناس
    اساسا اینگونه است که تمامی معادلات بصورت کوپل شده اند (مثلا همین مثال اونگ) یعنی یک معادلات به یکدیگر ارتباط دارند. اما در مورد غیر خطی بودن در هر صورت باید معادلات بصورت f(t,y)=dy/dt نوشته شوند. برای مثال اگر داشته باشیم dy1/dt)^2-y2=0 ) آنگاه
    dy1/dt=f(t,y1,y2)=f(y2
    f(y2)=sqrt(y2
  • سمیرا
    باسلام و خسته نباشید
    من میخوام معادله kdv رو به روش رانگ کوتا حل کند اما خطا میده
    میتونم از شما راهنمایی بگیرم؟من ایممیلم رو گذاشتم ممنون میشم اگه کمکم کنید
  • n.m
    salam
    momkene az hle moadele daraje2 mesali az harakate zare bardar dar meidane khareji bezanid?
    akhe che tori 6 moadele ro hamzaman benevisim?
    mammnooon
  • ناشناس
    به اندازه یه دنیا کارت درسته سعید جون
  • rzbh  - merci
    agha saeed avalan dastetoon dard nakone.
    ye khahesh daram ,age mishe un massaleye harkate zaare bardar dar mydane electromagnetic ro baraye E sabet va B(Z) ,meydane B vabeste be meh vare z ast, ra toozihh bedid :cry:
  • حسن
    آقا دستت طلا حرف نداری :P
  • ناشناس
    دستتون درد نکنه
    یه سوال داشتم:
    آیا میشه با این روش 7 معادله غیرخطی کوپل رو حل کرد؟ یا شما یه روش یا دستور دیگه ای رو پیشنهاد می کنید؟
    ممنوم میشم راهنماییم کنید.
  • admin
    بله، محدودیتی در تعداد معادلات نیست
    همه مقادیر برداری تعریف می شوند و راه حل مانند حل یک معادله است.
نوشتن نظر
Your Contact Details:
نظر:
[b] [i] [u] [url] [quote] [code] [img]   
:D:):(:0:shock::confused:8):lol::x:P:oops::cry:
:evil::twisted::roll::wink::!::?::idea::arrow:
Security
کد آنتی اسپم نمایش داده شده در عکس را وارد کنید.
آخرین بروز رسانی در جمعه, 03 دی 1389 ساعت 08:51