حل معادلات دیفرانسیل در MATLAB

27938 بازدید

معادلات دیفرانسیل معمولی (ODE) به آن دسته از معادلات دیفرانسیل گفته می‌شود که توابع مجهول در آن‌ها بر حسب تنها یک متغیر مستقل باشد. معادله‌ای که بیشتر از یک متغیر مستقل داشته باشد را معادله دیفرانسیل نسبی یا معادله دیفرانسیل با مشتقات جزئی (PDE) می‌نامند.

دستور dsolve برای حل معادله دیفرانسیلی در متلب، به کار می رود. اگر y تابعی از متغیر x باشد و معادله دیفرانسیلی شامل مشتق مرتبه اول و یا مرتبه های بالاتر از y باشد، می توان از دستور dsolve جهت حل معادلات دیفرانسیلی استفاده نمود. در این دستور از حرف کلیدی D به عنوان نماد مشتق استفاده می شود.

حل معادلات دیفرانسیل در MATLAB

مثال: میخواهیم معادله دیفرانسیلی xy+1=y را حل کنیم:

dsolve('x*Dy+1=y','x')

 نتیجه:

ans =
C2*x + 1

حل معادلات دیفرانسیل مرتبه دوم یا بالاتر با استفاده از دستور dsolve

همان طور که گفته شد، مشتق مرتبه اول را با نماد Dy نشان می دهیم.در دستور dsolve اگر مشتق مرتبه دوم و یا بالاتر باشد، آنگاه باید ابتدا نماد D را نوشته، سپس عدد مربوط به مرتبه مشتق را بنویسیم و در آخر نیز نماد y نوشته شود. مثلا برای تعریف مشتق دوم تابع y باید D2y و برای تعریف ”’y باید نماد D3y را به کار ببریم.

جهت حل معادلات دیفرانسیلی بصورت پارامتریک می توان پارامترها به سادگی در معدله قرار داد. در این روش نیازی به دستور syms نمی باشد. بطور مثال جهت حل معادله ax”+bx’+cx=d می نویسیم:

w=dsolve('a*D2x+b*Dx+c*x=d')

که D2 به معنی مشتق دوم و D به معنی مشتق اول می باشد. جواب معادله فوق در متغیر w ذخیره می شود.

معادله زیر را در نظر بگیرید:

x''+2x'+x=1
w=dsolve('D2x+2*Dx+x=1')

 جواب معادله:

w=C20*exp(-t) + C21*t*exp(-t) + 1

 حل معادلات دیفرانسیلی با شرایط اولیه

برای حل معادله y’= y +sin (t) , y(0) =1 به شکل زیر عمل می کنیم:

w=dsolve('Dy = y + sin(t)' , ' y (0)=1')
w=(3*exp(t))/2 - cos(t)/2 - sin(t)/2

در صورتی که بخواهیم جواب بدست آمده را رسم کنیم باید از دستور ezplot استفاده کنیم

ezplot(w)

 نتیجه:


حل معادلات دیفرانسیلی سخت و غیرسخت

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

کاربرد

دقت

نوع مساله

دستور

اکثر موارد (سعی شود جهت حل معادله ابتدا از این دستور استفاده شود)

متوسط

غیرسخت

ode45

حل مسائل دارای خطای خام (crude error)، حل مسائل تقریبا سخت

پایین

غیرسخت

ode23

حل مساله دارای خطای دقیق، معادلات مربوط به محاسبات عددی زمان بر

پایین تا بالا

غیرسخت

ode113

هنگامی که حل معادله با دستور ode45 بسیار کند پیش رود.

پایین تا متوسط

سخت

ode15s

مسائل دارای خطای خام (crude error) ، هنگامی که ماتریس جرم (mass matrix) ثابت باشد

پایین

سخت

ode23s

حل معادلات بدون میرایی عددی (numerical damping)

پایین

سخت

ode23t

حل مساله با خطای خام و معادله سخت

پایین

سخت

ode23tb

مثال) حل معادله زیر با دستور ode45

گام اول: بازنویسی مسئله بشکل مجموعه ای از معادلات مرتبه یک. با تغییر متغیر y1‘=y2 دو معادله دیفرانسیل مرتبه یک حاصل میشود:

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

توجه نمایید که تابع باید دارای دو آرگومان باشد؛ یکی مربوط به متغیر مستقل (t) و دیگری مربوط به متغیرهای وابسته (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 می باشد.

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

plot(y(:,1),y(:,2))
xlabel('y1')
ylabel('y2')

 خروجی:


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

function vonerpol
[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)];

یکی دیگر از روش های حل معادلات دیفرانسیل، روش رانگ كوتای می باشد که شامل چندین طبقه بندی می شود. پرکاربردترین روش، رانگ كوتاي مرتبه 4 می باشد. د راین روش الگوریتم تکرار مراحل بصورت زیر می باشد:


که تابع f بصورت f(t,y)=dy/dt می باشد.

خطای این روش از مرتبه 4 می باشد.

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

روش اویلر

روش هون

روش تیلور

روش رانگ-کوتا

روش آدامز-بشفورت-مولتون

روش میلن-سیمپسون

روش هامینگ

روش رانگ-کوتا-فلبرگ مرتبه ۵

روش رحمانزاده-کای-وایت

تمام روش‌ها بیان شده راه حل دقیق را ایجاد نمی‌کند و فقط یک تقریب به‌دست می‌آید. چون این روش‌ها دارای محاسبات زیادی هسند، تنها جواب‌هایی در فواصل زمانی مجزا می‌دهند. مشخصا جواب‌ها در زمان ابتدایی شرایط وفاصله زمان‌های مشخص، h، بدست می‌آید. (t0, t1 = t0 + h, t2 = t0 + 2h)

مطالب مرتبط

دیدگاهتان را بنویسید

بخش های مورد نیاز علامت گذاری شده اند

نشانی ایمیل منتشر نخواهد شد

نویسنده : آدرس سایت : ایمیل :
کد روبرو را وارد نمایید
captcha

تعداد 11 دیدگاه برای نوشته " حل معادلات دیفرانسیل در MATLAB" ارسال شده است .

    رضا 1 آبان 1394 در 4:47 ب.ظ
  1. خیلی ممنون

    بسیار عالی
    از نظم و پیوستگی مطالبتون خوشم اومد!

  2. پاسخ
      مدیریت 3 آبان 1394 در 10:36 ق.ظ
    • تشکر

    • پاسخ
        محمد 23 آبان 1394 در 10:31 ق.ظ
      • سلام میشه این مقاله رو برای من بفرستین.
        هر چی میکنم دانلود نمیشه

      • پاسخ
          مدیریت 23 آبان 1394 در 10:18 ب.ظ
        • همین هست
          دانلود ندارد

    eli 8 اسفند 1394 در 3:07 ب.ظ
  3. سلام. من این برنامه رو برا ی معادله درجه2 مینویسم حل میکنه ولی با دستور ezplot نمودارشو رسم نمیکنه. چیکار کنم؟؟

  4. پاسخ
    eli 8 اسفند 1394 در 3:29 ب.ظ
  5. در ضمن این دستور همه نوع معادله ی دیفرانسیلو حل میکنه؟ چون ی معادله رو حل کرد ولی ج یکیشو [empty] نشون داد

  6. پاسخ
    fateme 17 اسفند 1394 در 8:51 ق.ظ
  7. سلام، میشه معادلات دیفرانسیل مرتبه 2 که دارای سه متغیر هست و ترم های سینوس کسینوسی هم داره رو با متلب بصورت پارامتری حل کرد؟ یعنی مثلا در نهایت معادلات ریاضی x و y و z رو برحسب t حساب کنه…

  8. پاسخ
    سعید شهسواری 26 اردیبهشت 1395 در 5:39 ب.ظ
  9. با سلام
    ازتون ممنونم. به نظرم خوب بود و تشکر میکنم.

  10. پاسخ
    ننمن 23 اردیبهشت 1396 در 7:19 ق.ظ
  11. سلام

    متشکرم…توضیحات خوبی داده شد. خداقوت

  12. پاسخ
    احمد رضا 10 دی 1396 در 1:42 ب.ظ
  13. خیلی ممنون از مطالب مفید شما لطفا میشه برای من این معادله تیلور در متلب بنویسید متشکرم
    Y(50.6)=? 3=( Y’50+50XY=55 H=.3 Y(50

  14. پاسخ
    Raha 10 آبان 1397 در 2:12 ب.ظ
  15. سلام خیلی خیلی ممنونم بابت توضیحات خوبتون 👌

  16. پاسخ

0

شبکه های اجتماعی

دانشنامه تخصصی مهندسی ایران را در شبکه های اجتماعی دنبال کنید

0 0

همکاران ما

گروه مپنا
گروه مپنا
دانشگاه تهران
دانشگاه تهران
سایپا
سایپا
ایران خودرو
ایران خودرو
شرکت ملی نفت ایران
شرکت ملی نفت ایران
ذوب‌آهن اصفهان
ذوب‌آهن اصفهان
فولاد خوزستان
فولاد خوزستان
درخواست نرم افزار
در صورتی که نیاز به نرم افزار خاصی دارید، با ما تماس بگیرید.
    همکاران ما در سریع ترین زمان ممکن پاسخگو شما خواهند بود.