دانشنامه تخصصی مهندسی ایران

دانشنامه تخصصی مهندسی ایران

 engpedia   راه اندازی کانال تلگرام ( EngPedia_ir@ )

                همراه با مطالب ویژه سایت بصورت رایگان

  • نسخه ۱۲.۱ نرم افزار Aveva Marine در سایت قرار گرفت. (اینجا)
  • نسخه ۱۰.۵۲ نرم افزار Plus 2D در سایت قرار گرفت. (اینجا)
  • نسخه ۱۱.۰ نرم افزار AGI Systems Tool Kit-STK در سایت قرار گرفت.(اینجا)

همکاران

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

مدیریت بهمن ۸, ۱۳۹۳ 16617 بازدید ۹دیدگاه

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

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

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

 نتیجه:

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

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

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

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

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

 جواب معادله:

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

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

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

 نتیجه:


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

بسته به نوع معادلات که اصطلاحا به آنها سخت (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

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

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

توجه نمایید که تابع باید دارای دو آرگومان باشد؛ یکی مربوط به متغیر مستقل (t) و دیگری مربوط به متغیرهای وابسته (y). حتی اگر هیچکدام در تابع های مرتبه یک ظاهر نشوند، باید آن را لحاظ نمود:

 گام سوم- استفاده از یک حل کننده (solver) برای مسئله، همانگونه که گفته شد، قصد داریم از دستور ode45 استفاده نماییم. تابع ode45 سه ورودی(آرگومان) دارد. اولین آرگومان تابعی است که آن را در گام دوم ایجاد کرده ایم، دومین آرگومان بازه مربوط به متغیر مستقل است که در مورد این مساله بازه زمانی t است و نهایتا آرگومان سوم بردار شرایط اولیه است. در این مثال بازه زمانی [۰ ۱۰۰] و مقادیر اولیه y(1)=1.2 و y(2)=0 را مطابق زیر در ode45 قرار می دهیم:

در این مثال برای پذرفتن vdp1 بعنوان یک تابع از نماد @ استفاده شده است. خروجی ode45 برداری از زمان t و ماتریس پاسخ y می باشد.

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

 خروجی:


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

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


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

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

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

روش اویلر

روش هون

روش تیلور

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

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

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

روش هامینگ

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

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

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

نظرات شما باعث دلگرمی و پیشرفت ما می شود.

telegram: @EngPedia_ir

9 پاسخ به “حل معادلات دیفرانسیل در MATLAB”

  1. رضا گفت:

    خیلی ممنون

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

  2. eli گفت:

    سلام. من این برنامه رو برا ی معادله درجه۲ مینویسم حل میکنه ولی با دستور ezplot نمودارشو رسم نمیکنه. چیکار کنم؟؟

  3. eli گفت:

    در ضمن این دستور همه نوع معادله ی دیفرانسیلو حل میکنه؟ چون ی معادله رو حل کرد ولی ج یکیشو [empty] نشون داد

  4. fateme گفت:

    سلام، میشه معادلات دیفرانسیل مرتبه ۲ که دارای سه متغیر هست و ترم های سینوس کسینوسی هم داره رو با متلب بصورت پارامتری حل کرد؟ یعنی مثلا در نهایت معادلات ریاضی x و y و z رو برحسب t حساب کنه…

  5. سعید شهسواری گفت:

    با سلام
    ازتون ممنونم. به نظرم خوب بود و تشکر میکنم.

  6. ننمن گفت:

    سلام

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

پاسخ دهید

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