X
تبلیغات
نماشا
رایتل
جمعه 10 خرداد 1392 @ 16:59

حل دستگاه معادلات دیفرانسیل به روش 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 می باشد.

نظرات (20)
علیرضا جلالی
جمعه 10 خرداد 1392 ساعت 19:20
مرسی
امتیاز: 14 1
هماپوراسفندیانی
جمعه 10 خرداد 1392 ساعت 20:21
ممنون اقای وفایی
امتیاز: 11 1
امیر علی نصیری
شنبه 11 خرداد 1392 ساعت 12:17
ممنون
امتیاز: 7 1
کیان
چهارشنبه 6 آذر 1392 ساعت 10:37
مرسی از زحماتتون
امتیاز: 9 1
seyyed mahdi
یکشنبه 10 آذر 1392 ساعت 17:15
با عرض سلام و تشکر میخاستم بدونم آیا میشه با ODE معادلات دیفرانسیل رو با دو متغیر مستقل مثلا زمان(t) و مکان(z) حل کرد واگه نمیشه چه راه حلی هستش
امتیاز: 8 3
محمدرضا
پنج‌شنبه 1 اسفند 1392 ساعت 17:44
>>IC=[0 1 1 0];
|
Error: Unexpected MATLAB operator.

IC k error mide dadash
امتیاز: 0 3
سعید
سه‌شنبه 13 اسفند 1392 ساعت 19:09
واقعا ممنون.
پروژه ارتعاشاتم بسیار شبیه به این معادلات بود تنها ضرایبش فرق میکرد.
خیلی خیلی خوشحال شدم که تونستم با کمک شما حلش کنم.
امتیاز: 3 1
rozetta
پنج‌شنبه 21 فروردین 1393 ساعت 16:21
ممنون
امتیاز: 2 0
غریبه
چهارشنبه 31 اردیبهشت 1393 ساعت 13:39
آقا دمت جیز.خیلی با مرامی.
امتیاز: 0 2
m.r
پنج‌شنبه 1 خرداد 1393 ساعت 17:37
ممنون
تنها پستی بود که درباره دستور ode به درد خورد .
امتیاز: 3 1
امین
چهارشنبه 18 تیر 1393 ساعت 04:58
خدا خیرت بده
امتیاز: 2 0
علیرضا
شنبه 19 مهر 1393 ساعت 18:02
با سلام
در مورد حل دستگاه معادلات دیفرانسیل غیر خطی چطور باید عمل کرد؟
امتیاز: 1 1
Aghil.S
شنبه 17 آبان 1393 ساعت 10:04
با سلام

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

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

خواهشا کمک کنید مقاله من وابسته به حل این معادلست.
امتیاز: 2 0
پاسخ:
نمی دانم!!!
قاسم
pn
شنبه 27 دی 1393 ساعت 21:21
خیلی خوب بود
بهترین مطلبی بود که درمورد ode دیده بودم
امتیاز: 1 1
محمدرضا
سه‌شنبه 2 تیر 1394 ساعت 14:12
سلام
function رو که تعریف میکنم و ران میگیرم خطا میده که not enough input argument...
امتیاز: 3 0
سام
دوشنبه 8 تیر 1394 ساعت 12:01
ممنون
امتیاز: 0 0
غزل
جمعه 20 فروردین 1395 ساعت 10:32
عالی بود مرسی
امتیاز: 0 0
2 بدخبت
دوشنبه 24 خرداد 1395 ساعت 00:13
آقا دستت درد نکنه انصافا، من امروز خسته و گرسنه بودم؛رفیقمم پیله کرده بود باید حل کنی، داشتم میمردم؛ آقا این مطلب رو دیدم، دقیقا مثل این روش رفتم و جواب داد، آقا مرسی، به این دوستم میگم بیاد جبران کنه واست هر جور که خواستی
امتیاز: 0 0
پاسخ:
خدا رو شکر!برقرار باشید
مهدی
پنج‌شنبه 31 تیر 1395 ساعت 16:54
آقا دم شما گرم
به درد خورد...
امتیاز: 0 0
امیرحسین
چهارشنبه 28 مهر 1395 ساعت 00:33
دمتون گرم
امتیاز: 0 1
پاسخ:
دم شما گرم
نام :
ایمیل :
وب/وبلاگ :
ایمیل شما بعد از ثبت نمایش داده نخواهد شد