رفتن به مطلب

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


afa

ارسال های توصیه شده

یکی از مهم ترین مسائلی که احتمالا شما در ریاضیات کاربردی و علوم مهندسی با آن مواجه شوید، نیاز به حل معادلات دیفرانسیل به صورت عددی است. این کار برای شبیه سازی و تحلیل سیستم های دینامیکی بسیار حیاتی است. بارها از طریق ایمیل ها با نظراتی که به متلب سایت ارسال شده است، در خصوص حل معادلات دیفرانسیل با مرتبه بیشتر از یک سئوالاتی توسط مراجعین محترم مطرح شده است. در این پست قصد داریم تا مطالبی در خصوص چگونگی حل معادلات دیفرانسیل با مرتبه بیش از یک توسط نرم افزار متلب، ارائه نماییم. در ادامه مطلب با ما همراه باشید.

یک معادله ساده

سیستمی که در این مقاله قصد حل معادله دیفرانسیلی مربوط به آن را داریم، سیستم جرم و فنر خطی است که یک سیستم درجه دو خطی و تغییر ناپذیر با زمان است. فرض بر این است که محور حرکت سیستم مورد بررسی افقی است و از این رو نیروی گرانش تاثیری بر روی عملکرد سیستم ندارد. اگر tex_39b54fb569800b4de76f3a22735c0ec5.png جرم و tex_1536fd5a256e8ae0bf1cd5a9c828392e.png نشان دهنده ضریب سختی فنر باشد، معادله حرکت سیستم با توجه به قوانین فیزیکی نیوتون و خواص ذاتی جرم و فنر، به صور زیر خواهد بود:

 

 

tex_1fe24dc69437ce7ac899285f51b69f30.png

که در آن tex_4bdee45bb8394ab19c11eac5997c8153.png نشان دهنده نیروی خارجی وارد شونده به سیستم جرم و فنر است.

ما برای حل این معادله دیفرانسیل بایستی مقادیر عددی پارامترهای tex_39b54fb569800b4de76f3a22735c0ec5.png و tex_1536fd5a256e8ae0bf1cd5a9c828392e.png و همچنین تابع نیروی خارجی tex_d7fb0d066fa0126885f36e495b339e0e.png را داشته باشیم. همچنین باید مکان اولیه و سرعت اولیه نیز بایستی معلوم و معین باشند. فرض می کنیم که مقدار نیروی خارجی وارد شده بر سیتسم در تمام زمان ها برابر با صفر باشد؛ یعنی tex_3d153fa54253ba4e9c6d47d1da6286e8.png. همچنین فرض می کنیم که مکان اولیه برابر با صفر و سرعت اولیه برابر با یک باشد. به عبارت دیگر سیستم مورد بررسی به صورت زیر توصیف می شود:

tex_8b367ef1888783930ce99e0f2dcb90df.png

tex_f315e7899fe865cfa8e5b49bb74442d4.png

tex_dd7f5857f1a53ae1ffc85e6456ae7e7b.png

کاهش درجه معادله دیفرانسیل

برای حل معادله دیفرانسیل درجه دو می بایست ابتدا آن را به دستگاهی از دو معاله درجه یک تبدیل کنیم. در حالت کلی برای حل معادله دیفرانسل درجه tex_23e517569a067209bf264db2132df9e1.png می بایست آن را به صورت دستگاهی از معادلات درجه یک با tex_23e517569a067209bf264db2132df9e1.png معادله تبدیل نمود.

فرض کنیم که متغیر جدیدی به صورت زیر تعریف شده باشد:

tex_d3a9b1d4a3270eaa159d9818d25ddfbc.png

به عبارت دیگر tex_4d04bb96209df4af04d171907b22226b.png نشان دهنده سرعت حرکت جرم است. می توان به راحتی نشان داد که:

tex_22c58c126d55ab22724dbbb6e9e9eab2.png

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

tex_ccb769927495f87ca5774246884152b4.png

tex_a2e2f915831c0f9bd62d7410fc620f89.png

که همان فرم فضای حالت سیستم جرم فنر ساده است. شرایط اولیه این سیتم نیز عبارتند از: tex_acd57b1a95a4e866919dd4d2404768c4.png و tex_59f2d4440ab1167edb28f1acff88c564.png.

برای راحتی کار و همچنین ملموس تر کردن معادلات به دست آمده، متغیر برداری جدیدی را به صورت زیر تعریف می کنیم.

tex_b8dffe2555d263353b6973281d7c916d.png

در این حال معادلات فضای حال به صورت زیر قابل بازنویسی هستند:

tex_12445d4bd33902b83687be17a34498e7.png

پیاده سازی با استفاده از متلب

مقادیر جرم و ضریب فنری را وارد می کنیم:

m = 1;

k = 10;

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

springmass = @(t,z) [z(2); -k/m*z(1)];

و شرایط اولیه را تعریف می کنیم:

z0 = [0; 1];

بازه زمانی شبیه سازی را بین ۰ تا ۱۰ ثانیه در نظر می گیریم و بازه زمانی را به صورت زیر تعریف می کنیم:

tspan = [0 10];

با استفاده از یکی از حل کننده های یا Solver های متلب معادله دیفرانسلی را حل می کنیم. شما می توانید از توابع مختلفی نظیر ode45 و ode23 استفاده نمایید. ما در اینجا از ode23 استفاده کرده ایم.

[t, z] = ode23(springmass,tspan,z0);

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

plot(t,z(:,1));

title('Position vs. Time');

ode_solve_tip_springmass_01.png

و در ادامه سرعت متحرک را ترسیم می نماییم.

plot(t,z(:,2));

title('Velocity vs. Time');

ode_solve_tip_springmass_02.png

مشاهده می شود که سیستم از شرایط اولیه داده شده شروع به حرکت کرده است و

 

 

با یک رفتار نوسانی نا میرا (به دلیل عدم وجود اصطکاک و دمپر) به کار خود ادامه داده است. نحوه شبیه سازی سیستم های مرتبه بالاتر و همچنین سیستم های غیر خطی نیز کم و بیش مشابه با کاری است که در مورد سیستم جرم و فنر انجام دادیم. در واقع مطالبی که در این پست به آن ها اشاره نمودیم، یک الگوی کلی برای حل و شبیه سازی معادلات دیفرانسلی معمولی یا Ordinary Differential Equations و یا به اختصار ODE ها را فراهم می آورند.

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

 

  • Like 6
لینک به دیدگاه
  • 1 سال بعد...

سلام

 

این نرم افزار جهت حل معادلات خطی و غیرخطی نوشته شده است. Solver آن متلب می باشد(برای حل معادله، نیاز به نرم افزار متلب می باشد).

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

 

از مزایای این نرم افزار می توان به موارد زیر اشاره کرد:

- سرعت load شدن برنامه در مقایسه با متلب

- سرعت بالای حل معادله نسبت به حل مستقیم آن با متلب

- حل تمام معادلات (مجموعه اعداد حقیقی، مختلط)

- محیط کاملا User Friendly

- قابلیت ذخیره خروجی

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

پسورد: engpedia.ir

  • Like 2
لینک به دیدگاه
×
×
  • اضافه کردن...