دانشجویان مهندسی صنایع

Industrial Engineering Students

دانشجویان مهندسی صنایع

Industrial Engineering Students

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

در پست «حل عددی معادله دیفرانسیل در متلب به کمک ode» فراگرفتیم که چگونه می توان یک معادله دیفرانسیل را به کمک ode در متلب به صورت عددی حل نمود. در این پست می خواهیم فرا بگیریم که چگونه می توان یک دستگاه معادله دیفرانسیل را به کمک ode حل نمود.

پس قبل از اینکه این پس رو مطالعه بفرمائید حتما پس مربوط به «حل عددی معادله دیفرانسیل در متلب به کمک ode» را بخوانید.


فرض کنید که دستگاه معادله دیفرانسیل مقابل با شرایط مرزی زیر داده شده است:

y"+z-z'=cos(x)

z"+z'+y'=-sin(x)

 

y(0)=0

y'(0)=1

z(0)=1

z'(0)=0

همانطور که می دانید ode در متلب تنها می تواند معادلات دیفرانسیل مرتبه اول را حل کند. پس اولین کار قبل از رفتن به متلب این است که معادلات یا دستگاه معادلات را به معادلات مرتبه اول تبدیل نمائیم. پس در این مقاله معادله اول تبدیل به دو معادله و معادله دوم نیز تبدیل به دو معادله خواهد شد. این تبدیلات در زیر آمده است:

y=y1

y'1=y2

y'2=cos(x)+z'-z

-----------------------

z=z1

z'1=z2

z'2=-sin(x)-y'-z'

-----------------------

با تلفیق این دو دسته معادلات، دستگاه معادلات جدید به صورت زیر بدست خواهد آمد:

y'1=y2

y'2=cos(x)+z2-z1

z'1=z2

z'2=-sin(x)-y2-z2

شرایط مرزی نیز به صورت زیر تبدیل خواهد شد:

y1(0)=0

y2(0)=1

z1(0)=1

z2(0)=0

حال باید دستگاه معادله 4 گانه تبدیل شده را در یک function در متلب بنویسیم:

function out=fun(x,s)

y1=s(1)

y2=s(2)

z1=s(3)

z2=s(4)

out=[y2;cos(x)+z2-z1;z2;-sin(x)-y2-z2];

 

توجه کنید که متغیرهای ما تبدیل به 4 متغیر y1 و y2 و z1 و z2 شده اند. اما همانطور که می دانید در ode در هنگام نوشتن function شما تنها یک متغیر مستقل (در اینجا x) و یک متغیر وابسته (در اینجا  s) دارید. به همین دلیل s دارای 4 مولفه خواهد بود که در function آمده است. یعنی به طور مثال اگرکه یک دستگاه معادله را شما تغییر دادید به معادلات مرتبه اول و 10 معادله مرتبه اول شد، آنگاه s دارای 10 مولفه خواهد بود.

پس از اینکه نوشتن function تمام شد حالا در m فایل دیگری و یا در command window دستور ode45 را اجرا می کنیم:

>>x_span=[0 2*pi];

>>IC=[0 1 1 0];

>>[X OUT]=ode45(@fun,x_span,IC);

 

با اجرای این دستور معادلات برای x بین صفر تا 2*pi حل می گردد. توجه نمائید که بردار IC بردار شرایط اولیه خواهد بود که به ترتیب معادلاتی که در function نوشته اید باید این شرایط اولیه را بنویسید. خروجی این دستورات بردار X و ماتریس OUT می باشد. همانطور که میبینید ماتریس OUT دارای 4 ستون می باشد. به ترتیبی که معادلات را در function نوشته اید ستون اول y1 و ستون دوم y2 و ستون سوم z1 و ستون چهارم z2 می باشد. با توجه به تبدیلاتی که انجام داده ایم ما به دنبال جواب y و z هستیم که در اینجا می شود y1 و z1. پس اگر که بخواهیم جواب ها را با همدیگر رسم نمائیم کافیست دستورات زیر را اجرا کنیم:

>>plot(x,OUT(:,1),'r',x,OUT(:,3),'b')

>>legend('y','z')

همانطور که از شکلها هم می توان فهمید جواب y همان نمودار قرمز رنگ یعنی sin و جواب z همان نمودار آبی رنگ یعنی cos می باشد.

نظرات 23 + ارسال نظر
علیرضا جلالی جمعه 10 خرداد 1392 ساعت 19:20 http://ferdosi-toosi.blogsky.com/

مرسی

هماپوراسفندیانی جمعه 10 خرداد 1392 ساعت 20:21

ممنون اقای وفایی

امیر علی نصیری شنبه 11 خرداد 1392 ساعت 12:17

ممنون

کیان چهارشنبه 6 آذر 1392 ساعت 10:37

مرسی از زحماتتون

seyyed mahdi یکشنبه 10 آذر 1392 ساعت 17:15

با عرض سلام و تشکر میخاستم بدونم آیا میشه با ODE معادلات دیفرانسیل رو با دو متغیر مستقل مثلا زمان(t) و مکان(z) حل کرد واگه نمیشه چه راه حلی هستش

محمدرضا پنج‌شنبه 1 اسفند 1392 ساعت 17:44

>>IC=[0 1 1 0];
|
Error: Unexpected MATLAB operator.

IC k error mide dadash

سعید سه‌شنبه 13 اسفند 1392 ساعت 19:09

واقعا ممنون.
پروژه ارتعاشاتم بسیار شبیه به این معادلات بود تنها ضرایبش فرق میکرد.
خیلی خیلی خوشحال شدم که تونستم با کمک شما حلش کنم.

rozetta پنج‌شنبه 21 فروردین 1393 ساعت 16:21

ممنون

غریبه چهارشنبه 31 اردیبهشت 1393 ساعت 13:39

آقا دمت جیز.خیلی با مرامی.

m.r پنج‌شنبه 1 خرداد 1393 ساعت 17:37

ممنون
تنها پستی بود که درباره دستور ode به درد خورد .

امین چهارشنبه 18 تیر 1393 ساعت 04:58

خدا خیرت بده

علیرضا شنبه 19 مهر 1393 ساعت 18:02

با سلام
در مورد حل دستگاه معادلات دیفرانسیل غیر خطی چطور باید عمل کرد؟

Aghil.S شنبه 17 آبان 1393 ساعت 10:04

با سلام

با تشکر از زحمات جنابعالی

اگه معادله دیفرانسیل 9 معادله و 9 مجهول ( مرتبه 2 ) باشه از این روش میشه استفاده کرد؟ لازم به ذکره در هر معادله ممکنه بیش از 3 مجهولِ با مشتق دوم وجود داشته باشد ....

خواهشا کمک کنید مقاله من وابسته به حل این معادلست.

نمی دانم!!!
قاسم

pn شنبه 27 دی 1393 ساعت 21:21

خیلی خوب بود
بهترین مطلبی بود که درمورد ode دیده بودم

محمدرضا سه‌شنبه 2 تیر 1394 ساعت 14:12

سلام
function رو که تعریف میکنم و ران میگیرم خطا میده که not enough input argument...

سام دوشنبه 8 تیر 1394 ساعت 12:01

ممنون

غزل جمعه 20 فروردین 1395 ساعت 10:32

عالی بود مرسی

2 بدخبت دوشنبه 24 خرداد 1395 ساعت 00:13

آقا دستت درد نکنه انصافا، من امروز خسته و گرسنه بودم؛رفیقمم پیله کرده بود باید حل کنی، داشتم میمردم؛ آقا این مطلب رو دیدم، دقیقا مثل این روش رفتم و جواب داد، آقا مرسی، به این دوستم میگم بیاد جبران کنه واست هر جور که خواستی

خدا رو شکر!برقرار باشید

مهدی پنج‌شنبه 31 تیر 1395 ساعت 16:54

آقا دم شما گرم
به درد خورد...

امیرحسین چهارشنبه 28 مهر 1395 ساعت 00:33

دمتون گرم

دم شما گرم

reza شنبه 22 آبان 1395 ساعت 11:48

سلام
اگه امکانش هست میشه راهنماییی کنیدمعادله دیفرانسیل غیرخطی دافینگ در متلب چطور حل میشه
معادله دافینگ یک معادله دیفرانسیل مرتبه دو غیر خطی است

میثم شنبه 30 بهمن 1395 ساعت 15:10

سلام خسته نباشدامکانش هست که نتایج حل معادله رو با دستور fprintf هم نشون داد؟
ممنون بابت زحماتتون

sara سه‌شنبه 5 دی 1396 ساعت 18:40

سلام اگه ممکنه مدلسازی بیماری vSD با استفاده از ODE45 را هم توضیح بدید مرسی

ایمیل شما بعد از ثبت نمایش داده نخواهد شد