معادله دیفرانسیل

از ویکی‌پدیا، دانشنامهٔ آزاد.

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


معمولاً بسیار سخت است که یک روش حل تحلیلی برای بسیاری از معادلات دیفرانسیل پیدا کنیم. این مساله ممکن است به این خاطر باشد که ، معادلات غیر خطی هستند یا اینکه دارای ضریبی هستند که با زمان تغییر می کند. برای مثال در معادلات دیفرانسیل خطی ضریب‌دار، هرچه مرتبه بیشتر باشد حل آن سخت‌تر می شود. یا بخاطر اینکه ورودی های زیادی دارد در شرایط مختلف مشکل تر است. روش های زیادی وجود دارد که جواب معادلات دیفرانسیل را تقریب می‌زند. این روش ها اسمهای گوناگونی دارند : روش‌های عددی ، انتگرال عددی یا راه حل‌های تقریبی.


تمام روش هایی که در اینجا بیان شده راه حل دقیق را ایجاد نمی کند و فقط یک تقریب به‌دست می‌آید. چون این روش‌ها دارای محاسبات زیادی هسند، تنها جواب‌هایی در فواصل زمانی مجزا می‌دهند. مشخصا جواب ها در زمان ابتدایی شرایط وفاصله زمان های مشخص ، h ، بدست می آید. (i.e., at t=to, to+h, to+2.h, ... , to+k.h ).


متد هایی که در اینجا بیان می شود تقریباً همان روش هایی هستند که برنامه های معروفی مثل Matlab یا Simulink استفاده می کنند. این پیچیدگی ادامه دارد زیرا، این روش ها فقط برای حل معادلات دیفرانسیل مرتبه اول معتبر هستند. به هرحال محدودیت جدی برای معادله مرتبه nام وجود ندارد زیرا می تواند به n تا معادله دیفرانسیل مرتبه اول تبدیل شود. برای بوجود آوردن این متد ها برای حل معادلات مرتبه nام ، مساله را به حالت های جداگانه تقسیم کرده و سپس برای هر مرحله زمانی روش حل را بکار می بریم تا جواب را برای مرحله بعدی بدست آوریم.


[ویرایش] متد اویلر برای معادلات دیفرانسیل مرتبه اول

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


در زمان t0 شروع می کنیم. مقدار y(t0+h) را می توان توسط y(t0) بعلاوه زمان تغییر حالت ضرب در شیب تابع تقریب زد. که مشتق y(t) است.


ما این تقریب را y*(t) می نامیم.


بنابرین اگر بتوانیم مقدار dy/dt را در زمان t0 محاسبه کنیم ، می توانیم مقدار تقریبی y در زمان t0+h را حدس بزنیم. سپس این مقدار جدید y(t0) را استفاده کرده ، دوباره dy/dt را حساب و این کار را تکرار می کنیم. به این روش متد اویلر می گوییند.


این پروسه بصورت گرافیکی نمایش داده شده است :


توسط این پیش زمینه ساده متد اویلر برای معادلات دیفرانسیل مرتبه اول بصورت زیر است :

1) در زمان t0 شروع کنید ، یک مقدار برای h در نظر بگیرید ، سپس شرایط ابتدایی y(t0) را حساب کنید. 2) از طریق y(t0) مشتق y(t) را در زمان t=t0 حسب کنید. آنرا k1 بنامید . این شیب توسط خط قرمز در شکل بالا نشان داده شده است.


3) از این مقدار ، مقدار تقریبی y*(t0+h) را حساب کنید.


4) قرار دهید t0=t0+h ، y(t0)=y*(t0+h) 5) مراحل 2 تا 4 را آنقدر تکرار کنید تا جواب به دست آید.

مثال عددی



جواب : مرحله اول :







مرحله دوم :





نتیجه : جدول زیر نتایج تقریب های اویلر را نشان می دهد :

t=0.000, y(t)=1.0000, y*(t)=1.0000 t=0.100, y(t)=1.0413, y*(t)=1.1000 t=0.200, y(t)=1.0018, y*(t)=1.0811 t=0.300, y(t)=0.9202, y*(t)=0.9997 t=0.400, y(t)=0.8205, y*(t)=0.8901 t=0.500, y(t)=0.7167, y*(t)=0.7726 . . . t=3.900, y(t)=0.0010, y*(t)=0.0006 t=4.000, y(t)=0.0008, y*(t)=0.0004


اگر h به عدد 0.01 کاهش یابد ، درستی مطلب اثبات می شود. ولی پیچیدگی تابع خیلی زیاد می شود. نتایج را در زمانی که h=0.1 در زمان t=0.1 و در زمان t=0.4 را با هم مقایسه کنید :

t=0.000, y(t)=1.0000, y*(t)=1.0000 t=0.010, y(t)=1.0093, y*(t)=1.0100 t=0.020, y(t)=1.0173, y*(t)=1.0186 t=0.030, y(t)=1.0240, y*(t)=1.0259 t=0.040, y(t)=1.0296, y*(t)=1.0320 t=0.050, y(t)=1.0340, y*(t)=1.0370 t=0.060, y(t)=1.0374, y*(t)=1.0408 t=0.070, y(t)=1.0397, y*(t)=1.0436 t=0.080, y(t)=1.0411, y*(t)=1.0454 t=0.090, y(t)=1.0417, y*(t)=1.0462 t=0.100, y(t)=1.0413, y*(t)=1.0462 t=0.110, y(t)=1.0402, y*(t)=1.0454 . . . t=3.890, y(t)=0.0010, y*(t)=0.0010 t=3.900, y(t)=0.0010, y*(t)=0.0010 t=3.910, y(t)=0.0010, y*(t)=0.0010 t=3.920, y(t)=0.0010, y*(t)=0.0009 t=3.930, y(t)=0.0010, y*(t)=0.0009 t=3.940, y(t)=0.0009, y*(t)=0.0009 t=3.950, y(t)=0.0009, y*(t)=0.0009 t=3.960, y(t)=0.0009, y*(t)=0.0009 t=3.970, y(t)=0.0009, y*(t)=0.0008 t=3.980, y(t)=0.0009, y*(t)=0.0008 t=3.990, y(t)=0.0009, y*(t)=0.0008 t=4.000, y(t)=0.0008, y*(t)=0.0008





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


روشی که در بالا بیان شد برای تقریب معادلات دیفرانسیل مرتبه اول کاربرد داشت ، ولی بطور واضح نمی توان این جواب را برای معادلات دیفرانسیل مراتب بالاتر قبول کرد. ترفندی که در اینجا بکار می رود ، تقسیم کردن آن به معادلات دیفرانسیل مراتب پایین تر است. این روش "آنالیز حالت های متغییر" نامیده می شد.

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


ما فرض می کنیم در شرایط اولیه همه صفر هستند. حل این مساله بصورت تجزیه ای بسیار سخت است. کاری که در ابتدا باید انجام دهیم اینست که مساله را از نو طرح کرده و آنرا به معادلات مرتبه اول تبدیل کنیم. دو متغییر جدید تعریف می کنیم ؛ x1(t) و x2(t) . x1(t) = y(t) قرار می دهیم. سپس می توانیم دو معادله مرتبه اول بنویسیم :


این معادلات نیز می توانند به ماتریس معادله درجه اول تبدیل شوند :



حال می توانیم معادلات بالا را از طریق متد اویلر حل کنیم :

1) در زمان t0 شروع می کنیم. یک مقدار برای h انتخاب کرده و یک مقدار اولیه برای شرایط اولیه x1(t0) , x2(t0) , … انتخاب می کنیم.


    2)

    3)
 
     4) t=t0+h  قرار میدهیم. سپس برای هر xi ، xi(t0) = xi*(t0+h)
     5) مراحل 2 تا 5 را تکرار می کنیم تا جواب به دست آید.





متد Runge – kutta مرتبه دوم


بطور واضح بین درستی و پیچیدگی محاسبات و مقدار انتخاب شده h وابستگی زیادی وجود دارد. بطور کلی هرچه مقدار h کوچک‌تر شود ، محاسبات طولانی تر ولی دقیق تر می شود. حال اگر مقدار h خیلی کوچک شود ، برای اینکه نمی توان آنرا به درستی در کامپیوتر نشان داد خطا ایجاد می شود. برای سیستم های مرتبه بالاتر ، تقریب اویلر بسیار سخت است. به همین دلیل، دقت بالاتر و تکنیک های با جزییات بیشتر ساخته شد. ما در مورد متدی بحث می کنیم که توسط دو ریاضیدان به اسمهای Runge و Kutta ساخته شده است.

متد Runge-Kutta مرتبه دوم بسیار ساده تر و قابل فهم تر از روش اویلر است. این متد در شکل زیر نشان داده شده است :



این تکنیک برای مشتق تابع y(t) در t0 از متد اویلر استفاده می کند. از k1 نیز برای بدست آوردن مقدار اولیه y(t0+h) استفاده می کنیم. از y*(t0+h) می توانیم مقدار مشتق y(t) را در t0+h حساب کنیم که آنرا k2 می نامیم. سپس میانگین این دو مشتق را k3 می نامیم.

متد RK2 تقریب را از طریق تخمین زدن بیشتر این تقریب ، از روی فاصله شیب حساب می کند. متد اویلر مشتق را در y(t0) حساب کرده و از آن در تقریب y(t0+h) استفاده می کند.


بصورت الگوریتم می توانیم متد RK2 را استفده کنیم :

1) در زمان t0 شروع به محاسبات می کنیم. 2) در زمان t0 ، مشتق y(t) را حساب کرده و آنرا k1 می نامیم.


3) مقدار ابتدایی y*(t0+h) را حساب کرده و فرمول اویلر را استفاده می کنیم.


4) از y*(t0+h) مشتق y(t) را در t0+h حساب کرده و آنرا k2 می نامیم.


     5) مقدار جدید y*'(t0+h)  را از مینگین k1 وk2 محاسبه میکنیم.

6) قرار دهید y(t0) = y*'(t+0h) و t0 = t0+h 7) مراحل 2 تا 6 را تکرار کنید تا جواب بدست آید.


مثال :


جواب : مرحله اول :







نتیجه : جدول زیر نتیجه تقریب Runge – kutaa مرتبه دوم را نشان می دهد. اگر در الگوریتم فوق بجای h=0.01 انرا h=0.1 قرار دهید ، نتیجه را بهتر مشاهده می کنید.


t=0.000, y(t)=1.0000, y'*(t)=1.0000 t=0.100, y(t)=1.0413, y'*(t)=1.0405 t=0.200, y(t)=1.0018, y'*(t)=1.0011 t=0.300, y(t)=0.9202, y'*(t)=0.9200 t=0.400, y(t)=0.8205, y'*(t)=0.8208 t=0.500, y(t)=0.7167, y'*(t)=0.7176 . . . t=3.900, y(t)=0.0010, y'*(t)=0.0011 t=4.000, y(t)=0.0008, y'*(t)=0.0009