حل معادله دیفرانسیل با ode45 در متلب + آموزش ویدئویی
- Mojtaba
- 23 فروردین 1399
- 19:16
- آموزش متلب
در این مقاله قصد آموزش حل عددی معادله دیفرانسیل با ode45 متلب را داریم. در ابتدا با نحوه کار با این دستور آشنا میشویم. سپس چند مثال از معادله دیفرانسیل خطی و غیرخطی با مرتبه اول و دوم و دستگاه معادلات دیفرانسیل حل میکنیم. کلیه مثالها با دستور ode45 متلب حل میشوند. آموزش ویدئویی استفاده ازین دستور نیز ارائه شده است.
مقدمهای درباره معادلات دیفرانسیل
معادله دیفرانسیل معادلهای است که در آن رابطهای بین مشتقات تابع داده شدهاست. یعنی برخلاف معادلات جبری که پاسخ یک یا چند عدد میباشد، در معادلات دیفرانسیل، پاسخ تابع است. بهپاسخ معادله دیفرانسیل، پاسخ عمومی میگوییم. چراکه برحسب ثوابت بیان شده و دستهای از توابع را بیان میکند. معادله دیفرانسیل میتواند همگن و غیرهمگن، خطی و غیرخطی، مرتبه اول، دوم و …. باشد. برای حل معادله دیفرانسیل، شناخت آن اهمیت زیادی دارد. مثلا معادلات همگن، فقط یک جواب همگن و درنهایت عمومی دارند. درحالی که معادلات غیرهمگن، یک جواب همگن و یک غیرهمگن دارند. جواب عمومی این معادلات مجموع دو جواب همگن و غیرهمگن است. اما توجه داشتهباشید که برای حل معادلات دیفرانسیل با دستور ode45 که حل عددی است. هیچ تفاوتی نمیکند که معادله دیفرانسیل ما از چه نوع و چه مرتبهای باشد. این دستور بهقدری قدرتمند و کاربردی است که از پس حل هر معادلهای بر میآید.
هنگامی که یک معادله دیفرانسیل حل میشود، ثابتهایی بوجود میآید. این ثوابت هنگام انتگرالگیری ایجاد میشوند. مثلا پاسخ معادله دیفرانسیل مرتبه اول، یک ثابت و مرتبه دوم، 2 ثابت دارد. لازم بهذکر است که مرتبه معادله دیفرانسیل، بزرگترین مرتبه مشتق ظاهر شده در معادله میباشد. برای یافتن این ضرایب ثابت، به شرایط مرزی یا اولیه احتیاج داریم. مثلا اگر یک گوی را یکبار با سرعت 2 متر بر ثانیه بهبالا و بار دیگر با سرعت 4 پرتاب کنیم، قطعا نتیجه متفاوتی داریم. بنابراین با اعمال شرایط اولیه یا مرزی، حل دقیق معادله دیفرانسیل بدست میآید.
پکیج کد متلب حل معادلات دیفرانسیل
26 کد متلب برای حل معادلات دیفرانسیل مختلف رو همین الان دانلود کن!
حل عددی معادله دیفرانسیل
معادلات دیفرانسیل مشابه با معادلات جبری، در برخی موارد روش حل تحلیلی ندارند. یعنی نمیتوان تابعی برای پاسخ پیدا کرد بلکه میتوان مقادیر پاسخ را با حل عددی بدست آورد. بهاین نحوه حل معادلات، حل عددی میگویند. حلهای عددی کاربرد بسیار زیادی در مسائل مهندسی دارند. روشهایی که برای حلهای عددی وجود دارد نیز بسیار زیاد است. یک روش حل عددی معادلات دیفرانسیل، روش رانگ- کوتا (و یا رانج- کوتا) میباشد. روش رانگ- کوتا شامل مرتبه دو و مرتبه 4 است. حل عددی رانگ- کوتای مرتبه 4 که به مراتب نسبت به رانگ- کوتای مرتبه 2 دقیق تر است، همان ode45 متلب میباشد. (دستور ode23s برای حل رانگ-کوتای مرتبه دوم میباشد.)
دستور ode45 در متلب
نرم افزار متلب حلگر (solver)های مختلفی برای حل معادلات دیفرانسیل ارائه میکند. این حلگرها اغلب سینتکس یکسانی دارند (منظور از سینتکس نحوه نوشتن در متلب است). مثلا حلگر ode23s فقط قادر به حل معادلات با ماتریس جرم ثابت است. حلگر ode15s و ode23t معادلات دیفرانسیل با ماتریس جرم سینگولار را حل میکنند. اما حلگر ode45 تطبیق پذیر با همه معادلات دیفرانسیل و اولین انتخاب برای حل میباشد. این حلگر علاوهبر تطبیق پذیری، دقت بالایی برای پاسخ به معادلات غیرخطی ارائهمیکند. دستور ode45 بصورت زیر در متلب تعریف میشود.
[t,y]=ode45(odefun,tspan,y0)
در این دستور odefun معادله دیفرانسیل مرتبه اول، tspan=[t0 tf] بازهی زمانی موردنظر و y0 شرایط اولیه (یا مرزی) مسئله میباشند. خروجی نیز بهنحوی است که برای هر t یک y متناظر تولید میکند. یعنی مقدار تابع در هر ورودی را بهما میدهد. با رسم خروجی رفتار پاسخ معادله دیفرانسیل مشخص میشود. توجه داریم که پاسخ معادله دیفرانسیل برخلاف معادلات جبری یک تابع است. و خروجی این دستور نیز تابع را بصورت دادههای عددی به ما میدهد.
پروژه متلب
برای مشاهده آرشیو کامل پروژههای آماده متلب کلیک کنید!
مثال 1) حل معادله دیفرانسیل مرتبه اول خطی با دستور ode45 در متلب
برای شروع یک معادله دیفرانسل ساده درنظر میگیریم. معادله y’=2t که یک معادله دیفرانسیل مرتبه اول میباشد. این معادله را با شرایط اولیه صفر (y(0)=0) در بازه [0,5] حل کنید. برای حل بصورت زیر عمل میکنیم.
tspan=[0 5];
y0 = 0;
[t,y] = ode45(@(t,y) 2*t, tspan, y0);
plot(t,y,'-o')
توجه دارید که عبارت @(t,y) در ابتدای هر دستور، بیانگر این است که تابعی از t و y داریم. بنابراین برای تعریف y’=2t که y تابعی از زمان است، مشابه با دستور فوق عمل کردهایم. پاسخ به شکل زیر می باشد.
مثال 2) حل معادله دیفرانسیل مرتبه دوم غیرخطی (معادله وَن دِر پُل)
همانطور که ذکرشد این دستور برای معادله دیفرانسیل مرتبه اول بصورت پیشفرض در نرم افزار متلب تعریف شده. برای معادلات دیفرانسیل با مراتب بالاتر بایستی تغییر متغیر داده و مسئله را حل کنیم. در این تغییر متغیر در واقع مرتبه معادله دیفرانسیل کاهش مییابد. پس با یک روش مرتبه معادله دیفرانسیل را از 2 به 1 کاهش میدهیم. در واقع یک معادله دیفرانسیل مرتبه دوم، به 2 معادله دیفرانسیل مرتبه اول تبدیل میشود. روش کاهش مرتبه معادله دیفرانسیل در مطلب رسم صفحه فاز با متلب آموزش داده شدهاست. برای این حالت، معادله نوسانگر معروف وَن دِر پُل (Van der Pol) را درنظر میگیریم. فرم معادله و روش کاهش مرتبه در شکل زیر آمدهاست.
برخلاف حالت قبل که در ورودی ode45 تابع را نوشتیم، در این حالت باید یک function تعریف کنیم. این function دو معادله سادهشده مرتبه اول را درون خود دارد. پس بصورت زیر عمل میکنیم:
function dydt=vdp1(t,y)
% VDP1 Evaluate the van der Pol ODEs for mu=1
dydt=[y(2);(1-y(1)^2)*y(2)-y(1)];
این تابع (function) را با نام vdp1 ذخیره میکنیم تا برای حل فراخوانی شود. برای حل معادله دیفراسیل وَن دِر پُل، زمان [0 20] و شرایط اولیه [2;0] را درنظر میگیریم. توجهداریم که چون معادله مرتبه دوم است، به دو شرط اولیه برای حل نیاز داریم. با توجه به شکل فوق، y1 همان مجهول موردنظر ما و y2 مشتق آن میباشد. پس در شرط اولیه [2;0] مکان اولیه برابر 2 و سرعت اولیه برابر صفر میباشد. درنهایت برای حل از کد زیر استفادهمیکنیم، میتوانید کد را به راحتی کپی کنید.
[t,y] = ode45(@vdp1,[0 20],[2; 0]);
plot(t,y(:,1),'-o',t,y(:,2),'-o')
title('Solution of van der Pol Equation (\mu = 1) with ODE45');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')
مثال 3) حل معادله دیفرانسیل غیرهمگن و مرتبه دوم
معادلات دیفرانسیلی که تابعی برحسب متغیر مستقل دارند، غیرهمگن نامیدهمیشوند. معادله زیر نمونهای از یک معادله دیفرانسیل غیرهمگن میباشد. وجود تابع سینوس دلیل غیرهمگن بودن است. مجدداً بدلیل اینکه معادله مرتبه دوم است، کاهش مرتبه را انجام داده و داریم:
بایستی تابع را ذخیره و در دستور ode45 فراخوانی کنیم. پس تابع زیر را تعریف و با نام fun ذخیره میکنیم.
function Example=fun(x,y)
Example=[y(2);-2*y(2)-y(1)+sin(x)];
با استفاده از دستور ode45 به صورت زیر، پاسخ معادله بدست میآید.
[t,y] = ode45(@fun,[0 20],[1; 0]);
plot(t,y(:,1),t,y(:,2))
title('Solution of example of non-homogeneous ODE with ODE45');
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2')
مثال 4) حل دستگاه معادلات دیفرانسیل غیرخطی
در این مثال یک دستگاه از معادلات دیفرانسیل غیرخطی را برای شما ارائه میکنیم. معادلات بصورت زیر هستند.
تابع زیر را در ادیتور متلب کپی کرده و با نام ex4 ذخیره نمائید.
function dy = ex4(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
برای حل نیز مشابه با مثالهای قبل، داریم.
[T,Y] = ode45(@ex4,[0 12],[0 1 1]);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
جمع بندی
در این مطلب با حل چند مثال مختلف از معادله دیفرانسیل با ode45 متلب سعی به آموزش حل عددی با ode45 متلب شد. اصول ارائه شده برای حل هر معادلهای برقرار بوده و میتوانید آن را اجرا کنید. برای مشاهده آموزشهای رایگان بیشتر به برنامه متلب مراجعه کنید.
با اعلام نظرات و پیشنهادهای خود، به ما برای ساخت آموزشهای بعد کمک کنید.
منبع: MathWorks
این مقاله آموزشی به کوشش تیم تولید محتوای علمی گام98 در راستای ارتقای دانش و استفاده از آن نوشته شده است. درصورتی مفید بودن این مطلب آن را برای دوستان خود به اشتراک بذارید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.