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

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

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

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

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

 m \frac{d^2}{dt^2} x(t) + k x(t) = F

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

ما برای حل این معادله دیفرانسیل بایستی مقادیر عددی پارامترهای m و k و همچنین تابع نیروی خارجی F(t) را داشته باشیم. همچنین باید مکان اولیه و سرعت اولیه نیز بایستی معلوم و معین باشند. فرض می کنیم که مقدار نیروی خارجی وارد شده بر سیتسم در تمام زمان ها برابر با صفر باشد؛ یعنی F = 0. همچنین فرض می کنیم که مکان اولیه برابر با صفر و سرعت اولیه برابر با یک باشد. به عبارت دیگر سیستم مورد بررسی به صورت زیر توصیف می شود:

 m \frac{d^2}{dt^2} x(t) + k x(t) = 0

 

 x(0)=0

 

 \frac{d}{dt} x(0) = 1

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

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

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

 y = \frac{d}{dt} x

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

 \frac{d}{dt} y = \frac{d^2}{dt^2} x

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

 \frac{d}{dt} x = y

 

 \frac{d}{dt} y = -\frac{k}{m} x

که همان فرم فضای حالت سیستم جرم فنر ساده است. شرایط اولیه این سیتم نیز عبارتند از: x(0)=0 و y(0)=1.

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

 z = [z_1, z_2]^T = [x, y]^T

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

 \frac{d}{dt} z = [z_2, -\frac{k}{m} z_1]^T

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

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

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’);

نمودار خروجی مربوط به مکان متحرک

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

plot(t,z(:,2));
title(‘Velocity vs. Time’);

نمودار خروجی مربوط به سرعت متحرک

مشاهده می شود که سیستم از شرایط اولیه داده شده شروع به حرکت کرده است و با یک رفتار نوسانی نا میرا (به دلیل عدم وجود اصطکاک و دمپر) به کار خود ادامه داده است.

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

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

برچسب ها: , , , , , , , , , , , , ,

اگر این مطلب را پسندیده اید، آن را به اشتراک بگذارید:

فیس بوکتوئیترخوشمزه (دلیشس)دیگفرندفیدگوگلگوگل ریدر (گودر)گوگل بازاستامبلبالاترینکلوبدنبالهیاهو مسنجرارسال در قالب پست الکترونیکی

اگر فایل هایی که از متلب سایت دانلود نموده اید نیاز به پسورد دارند، عبارت matlabsite.com را به عنوان پسورد وارد نمایید.


برای سفارش و خرید محصولات متلب سایت به بخش سفارش و خرید محصول مراجعه نمایید. حتما قبل از ترک این صفحه، اطلاعات محصول مورد نظر (شامل کد محصول، نام محصول، قیمت محصول و …) را یادداشت نمایید.


صرف زمان برای یادگیری اتلاف زمان نیست. سرمایه گذاری زمانی است.


پرسود ترین سرمایه گذاری زمانی خود را با متلب سایت انجام دهید.



شما می توانید برای:

  • اطلاع از آخرین مطالب علمی و تخصصی متلب سایت،
  • آگاهی از آخرین دوره های آموزشی و تخصصی،
  • و مطلع شدن از تخفیف های ویژه دوره ای (تا ۵۰ درصد تخفیف)

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

matlabsite+subscribe@googlegroups.com


همچنین می توانید برای عضویت مستقیم در گروه ای-میلی متلب سایت، بر روی لینک زیر کلیک کنید:


لینک عضویت مستقیم در گروه ای-میلی متلب سایت (کلیک کنید)



  • نوشته شده توسط: smk
  • در تاریخ: ۱۶ اردیبهشت ۱۳۹۰
  • ۱۳ نظر
  • moeen sohrabi گفته است:
    تاریخ: ۶ تیر ۱۳۹۱

    واقعا ممنون از این پست !!! ۲ ساعت دارم تو نت دنبال حل این معادلات می گردم دقیقا چیزی که می خواستم رو پیدا کردم !!!! باز هم ممنون از سایت خوبتون !!!

    moeen sohrabi گفته است:
    تاریخ: ۶ تیر ۱۳۹۱

    میشه یه پست هم راجع به FRF در همین سیتم های جرم و فنر بذارید که چه جوری باید تابعش رو تعریف کرد و رسم کرد.

    سید عباس محمودی گفته است:
    تاریخ: ۸ تیر ۱۳۹۱

    با سلام و خسته نباشید یه سوال داشتم
    آیا امکان پیاده سازی موازی در مطلب هست؟

    مدیر متلب سایت گفته است:
    تاریخ: ۹ تیر ۱۳۹۱

    در پاسخ سید عباس محمودی:
    با سلام،
    امکان برنامه نویسی و پیاده سازی موازی در متلب وجود دارد. برای آشنایی با این بحث، می توانید از مطالب موجود در این پست (+) استفاده نمایید.
    موفق باشید.

    sfs گفته است:
    تاریخ: ۲۷ مرداد ۱۳۹۱

    سلام میشه در مورد حل معادلات یا لاگرانژ هم یه توضیحی بدید؟

    mehrnoosh گفته است:
    تاریخ: ۱ مرداد ۱۳۹۲

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

    (روابط عمومی) گفته است:
    تاریخ: ۳ مرداد ۱۳۹۲

    در پاسخ مهرنوش:

    با سلام،

    به زودی بسته فیلم های آموزشی تئوری موجک در متلب ارائه خواهد شد.

    موفق باشید
    متلب سایت

    حیدر گفته است:
    تاریخ: ۱۷ آبان ۱۳۹۲

    تشکر از مطلب خوبتون.خیلی مفید بود
    بازم تشکررررر

    (روابط عمومی) گفته است:
    تاریخ: ۳ آذر ۱۳۹۲

    در پلسخ به حیدر:
    با سلام.
    از اعتماد شما به مجموعه ی فرادرس (متلب سایت) متشکریم.
    موفق و پیروز باشید.

    ahmadreza گفته است:
    تاریخ: ۱۰ اسفند ۱۳۹۲

    سلام:
    میشه بگین چطوری میشه معادله دیفرانسیل را تو سی شارپ بدون استفاده از متلب و دی ال ال حل کرد؟؟

    ممنون.

    مدیر روابط عمومی گفته است:
    تاریخ: ۱۱ اسفند ۱۳۹۲

    در پاسخ یه ahmadreza:
    با سلام،
    متاسفانه هیئت علمی به سوالات تخصصی دسترسی ندارند.
    ما دوره های اکسالیدا (+) را پیشنهاد می دهیم.
    با مراجعه به این لینک (+) از جزییات دوره برنامه نویسی سی شارپ مطلع شوید.
    موفق و پیروز باشید.

    احمدرضا گفته است:
    تاریخ: ۱۴ اسفند ۱۳۹۲

    چطور معادلات دیفرانیسل که به هم وابسته هستند را حل کنیم ؟؟؟
    مثلا: dy/dt=x^3+5y و
    (dx/dt+x=x+exp(y+30
    ممنون .

    مدیر روابط عمومی گفته است:
    تاریخ: ۱۸ اسفند ۱۳۹۲

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

    ارسال نظر

    نام:
    ایمیل:
    وب سایت:
    متن پیام شما: