حل معادلات دیفرانسیلی سخت و غیرسخت در Matlab
بسته به نوع معادلات که اصطلاحا به آنها سخت (stiff) و غیرسخت (stiffness) گفته میشود، روش حل آنها در MATLAB کمی متفاوت خواهد بود. اصطلاح سخت (stiff) برای آن دسته از معادلاتی بکار میرود که برای مثال در مقابل متغیر مستقلی همچون t. چند متغیر وابسته مانند x. و y. و… وجود دارد، بگونهای که اندازه مشتقات متغیرهای وابسته نسبت به متغیر مستقل بطور قابل ملاحظهای متفاوت است. در غیر اینصورت معادله غیرسخت نامیده میشود.
سرویس آموزش و آزمون برق نیوز: بسته به نوع معادلات که اصطلاحا به آنها سخت (stiff) و غیرسخت (stiffness) گفته میشود، روش حل آنها در MATLAB کمی متفاوت خواهد بود. اصطلاح سخت (stiff) برای آن دسته از معادلاتی بکار میرود که برای مثال در مقابل متغیر مستقلی همچون t. چند متغیر وابسته مانند x. و y. و… وجود دارد، بگونهای که اندازه مشتقات متغیرهای وابسته نسبت به متغیر مستقل بطور قابل ملاحظهای متفاوت است. در غیر اینصورت معادله غیرسخت نامیده میشود. همچنین معادلات سخت شامل آن دسته از معادلات دیفرانسیلی میشوند که حل آنها با روش محاسبات عددی پایدار و همگرا نبوده و تنها راه حل آنها، بسیار کوچک کردن گام (Step) در روش عددی میباشد. اگر در معادله دیفرانسیلی، متغری وجود دارد که باعث تغییرات بسیار زیاد در جواب مساله میشود، این دسته را جز معادلات غیرسخت طبقه بندی میکنند.
مثال) حل معادله زیر با دستور ode۴۵
dy1/dt=5*(1-y1^2)*dy1/dt-y1+f*cos(w*t)]
گام اول: بازنویسی مسئله بشکل مجموعهای از معادلات مرتبه یک. با تغییر متغیر y1 ‘=y2 دو معادله دیفرانسیل مرتبه یک حاصل میشود:
گام دوم: استفاده از ODEهای مرتبه یک، پس از بازنویسی معادلات مطابق گام اول، باید ان معادلات را برای بکارگیری ode۴۵ کد نماییم:
توجه نمایید که تابع باید دارای دو آرگومان باشد؛ یکی مربوط به متغیر مستقل (t) و دیگری مربوط به متغیرهای وابسته (y). حتی اگر هیچکدام در تابعهای مرتبه یک ظاهر نشوند، باید آن را لحاظ نمود:function dydt=vdp1(t,y)
epsilon=5;
w=2.466;
f=5;
dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];
function dydt=vdp1(t,y)
epsilon=5;
w=2.466;
f=5;
dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];
epsilon=5;
w=2.466;
f=5;
dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];
function dydt=vdp1(t,y)
epsilon=5;
w=2.466;
f=5;
dydt=[y(2) ; epsilon*(1-y(1)^2)*y(2)-y(1)+f*cos(w*t)];
گام سوم- استفاده از یک حل کننده (solver) برای مسئله، همانگونه که گفته شد، قصد داریم از دستور ode۴۵ استفاده نماییم. تابع ode۴۵ سه ورودی (آرگومان) دارد. اولین آرگومان تابعی است که آن را در گام دوم ایجاد کرده ایم، دومین آرگومان بازه مربوط به متغیر مستقل است که در مورد این مساله بازه زمانی t. است و نهایتا آرگومان سوم بردار شرایط اولیه است. در این مثال بازه زمانی [ ۰، ۱۰۰]و مقادیر اولیه y(۱) = ۱. ۲ و y (۲) = ۰ را مطابق زیر در ode۴۵ قرار میدهیم:
[t,y]=ode45(@vdp1,[0 100],[1.2 0]);
در این مثال برای پذرفتن vdp۱ بعنوان یک تابع از نماد @ استفاده شده است. خروجی ode۴۵ برداری از زمان t. و ماتریس پاسخ y. میباشد.
گام چهارم- مشاهده خروجی، اینکار را براحتی با استفاده از plot میتوان انجام داد.
خروجی:
گام چهارم- مشاهده خروجی، اینکار را براحتی با استفاده از plot میتوان انجام داد.
plot(y(:,1),y(:,2))
xlabel('y1')
ylabel('y2')
plot(y(:,1),y(:,2))
xlabel('y1')
ylabel('y2')
xlabel('y1')
ylabel('y2')
plot(y(:,1),y(:,2))
xlabel('y1')
ylabel('y2')
خروجی:
از ارسال دیدگاه های نا مرتبط با متن خبر، تکرار نظر دیگران، توهین به سایر کاربران و ارسال متن های طولانی خودداری نمایید.
لطفا نظرات بدون بی احترامی، افترا و توهین به مسئولان، اقلیت ها، قومیت ها و ... باشد و به طور کلی مغایرتی با اصول اخلاقی و قوانین کشور نداشته باشد.
در غیر این صورت، «برق نیوز» مطلب مورد نظر را رد یا بنا به تشخیص خود با ممیزی منتشر خواهد کرد.