آخرين ارسالهاي تالار

موضوع هاي بيشتر »

معادلات دیفرانسیل معمولی – کار با ode مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط saeed   
پنجشنبه, 05 فروردین 1389 ساعت 12:08

توابع ODE در متلب بمنظور حل معادلات دیفرانسیل معمولی با شرایط اولیه تدارک دیده شده اند ویژگی که برای آنها در راهنمای متلب ذکر شده است،

Solve initial value problems for ordinary differential equations

بسته به نوع اصطلاحا سخت (stiff) و غیر سخت (Nonstiff) معادلات و نیز اهمیت دقت، odeهای متفاوتی بکار می روند. اصطلاح سخت (stiff) برای آندسته از معادلاتی بکار می رود که برای مثال در مقابل متغیر مستقلی همچون t چند متغیر وابسته همچون x وy و ... وجود دارد بگونه ای که اندازه مشتقات متغیرهای وابسته نسبت به متغیر مستقل بطور قابل ملاحظه ای متفاوت است در غیر اینصورت معادله غیرسخت (Nonstiff) نامیده می شود. برای توضیحات بیشتر در مورد ode ها باید به راهنمای متلب مراجعه نمایید. متلب  نوع و محل  بکارگیر آنها را در جدول زیر خلاصه کرده است.

When to Use

Order of Accuracy

Problem Type

Solver

Most of the time. This should be the first solver you try.

Medium

Nonstiff

ode45

For problems with crude error tolerances or for solving moderately stiff problems.

Low

Nonstiff

ode23

For problems with stringent error tolerances or for solving computationally intensive problems.

Low to high

Nonstiff

Ode113

If ode45 is slow because the problem is stiff.

Low to medium

Stiff

Ode15s

If using crude error tolerances to solve stiff systems and the mass matrix is constant.

Low

Stiff

Ode23s

For moderately stiff problems if you need a solution without numerical damping

Low

Moderately Stiff

Ode23t

If using crude error tolerances to solve stiff systems.

Low

Stiff

Ode23tb

 

 

می خواهیم در اینجا به ode45 بپردازیم که برای معادلات غیر سخت تدارک دیده شده و اساس آن روش رانگ کوتاست.

برای آموزش نحوه استفاده از ode45 نوسانگر واندرپل تحت نیروی واداشته را در نظر می گیریم که معادله دیفرانسیل آن بصورت زیر نوشته می شود:

 

http://en.wikipedia.org/wiki/Van_der_Pol_oscillator

http://mathworld.wolfram.com/vanderPolEquation.html

 

گام اول- بازنویسی مسئله بشکل مجموعه ای از معادلات مرتبه یک. در مورد نوسانگر واندرپل با تغییر متغیر y1'=y2 دو معادله دیفرانسیل مرتبه یک حاصل می­شود،

 

گام دوم- کد نمودن ODE های مرتبه یک، پس از بازنویسی معادلات مطابق گام اول باید ان معادلات را برای بکارگیری ode45 کد نماییم. تابع باید بشکل زیر باشد،

dydt=odefun(t,y)

دقت کنید که تابع حتما باید دو آرگومان یکی مربوط به متغیر مستقل (در اینجا t) و دیگری مربوط به متغیرهای وابسته (در اینجا y) داشته باشد حتی اگر هیچکدام در تابع های مرتبه یک ظاهر نشوند. کد زیر سیستم واندپل را تحت عنوان تابع vdp1 نشان می­دهد. y(1) و y(2) ورودی های بردار دوعنصری y هستند.

function dydt=vdp1(t,y)

epsilon=5;

w=2.466;

f=5;

dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];

 

گام سوم- استفاده از یک حل کننده (solver) برای مسئله، همانگونه که گفته شد می­خواهیم از ode45 استفاده نماییم. تابع ode45 سه ورودی یا آرگومان دارد. اولین آرگومان تابعی است که آنرا گام دوم خلق کردیم، دومین آرگومان بازه مربوط به متغیر مستقل است که در مورد مسئله ما همان بازه زمانی t است و نهایتا آرگومان سوم بردار شرایط اولیه است.

در این مثال بازه زمانی [0 100] و مقادیر اولیه y(1)=1.2 و y(2)=0 را مطابق زیر در ode45 قرار می دهیم،

[t,y]=ode45(@vdp1,[0 100],[1.2 0]);

در این مثال برای پذرفتن vdp1 بعنوان یک تابع ا @ استفاده شده است. خروجی ode45 برداری از زمان t و ماتریس پاسخ y اس. هر سر y مطابق با زمانیست که توسط سطر متناظر در t معرفی می­شود. نخستین ستون y متناظر با  y(1) و ستون دوم آن متناظر با y(2) است.

گام چهارم- مشاهده خروجی، اینکار را براحتی با استفاده از plot می توان انجام داد.

plot(y(:,1),y(:,2))

xlabel('y1')

ylabel('y2')

با این توضیحات برنامه vdp1 با فرم نهایی و ساده زیر نوسانگر واندپل را در فضای فاز شبیه سازی می­کند.

function vonerpol

% vonderpole oscilator - ode45

% آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید

[t,y]=ode45(@vdp1,[0 100],[1.2 0]);

 

plot(y(:,1),y(:,2))

xlabel('y1')

ylabel('y2')

 

function dydt=vdp1(t,y)

epsilon=5;

w=2.466;

f=5;

dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];

 

 

نظر ها (41)
  • وفا(omid)  - تشكر
    سلام باتشكر از شما لينكتون كردم در ضمن چطور ميشه عضو وب سايت شما شد متوجه نشدم با نظرات وانتقادات سازنده خود مرا براي تكميل وارتقا كيفي وبلاگم ياري كنيد
  • پگاه
    بسیار عالی بود
    نمی دونم چطوری ازتون تشکر کنم :twisted:
  • عباس  - عدم تطابق خروجی با شکل
    سلام
    من همین ترتیب برنامه را در ام فایل نوشته و اجرا کردم ولیکن جوابم تطابق ندارد
    در واقع شبیه هست ولیکن کمی از نمودار را پوشش میدهد و بازه آن نیز تفاوت دارد
    چرا؟
    ممنون میشم راهنمایی کنید
  • saeed
    برنامه بالا را در یک ام-فایل کپی کنید (خودتان ننویسید) و اجرا کنید. من انجام دادم و مشکلی نبود.
  • ناشناس
    سلام اره داکیومنت برام بفرستین . فقط نگفتین با سیمو لینک میتونید همین کارها رو انجام بدید دا نه؟
    karim.ranaeen@gmail.com
  • mohandes  - doroooood!
    mercccccccccccccccc .mamnoon az site khoobetoon :D
  • زهرا  - تشکر
    سلام خسته نبلشید از اطلاعات خوبتون ممنون خیلی عالی بود
  • نفس
    سلام من می خوامf’’’+(1/2)ff’=0 با متلب حل کنم نمی دونم چطوری؟،میشهراهنماییم کنید.
  • ناشناس
    باید این معادله رو با دو تغییر متغیر به سه معادله مرتبه اول تبدیل کنید. پس سه شرط اولیه لازم دارید. بعد هم می تونید مثل روش بالا اونها رو با ode حل کنید.
  • bel
    perfect :D
  • DEW
    TU RUHE MATLAB :cry: :( :x
  • mohade3
    agha dame shoma garm man too fahmidane englisish be moshkel khorde budam .
تنها کاربران عضو شده می توانند نظر ارسال کنند!
آخرین بروز رسانی در جمعه, 10 اردیبهشت 1389 ساعت 07:36
 
logo-samandehi