در این نوشتار حل معادلهدرجه2 در متلب را آموزش میدهیم و با ارائه مثال و نمونه کد در این زمینه در متلب سعی خواهیم داشت درک این آموزش را سادهتر و ملموستر کنیم. اگر حل معادلهدرجه2 در متلب برای شما نیز دشوار است خواندن این مطلب و این آموزش را از دست ندهید.
معادله دیفرانسیل درجه 2
همان طور که در مطالب قبلی توضیح دادیم منظور از درجه یک معادله دیفرانسیل بالاترین درجه مشتق در معادله است. بدین ترتیب منظور از معادله درجه 2 معادلهای است که بالاترین درجه مشتق در آن دو باشد. شکل کلی یک معادله دیفرانسیل درجه 2 را به صورت زیر میتوان معرفی کرد:
در تعریف بالا اگر $$f(x)$$ برابر با صفر باشد یک معادله همگن داریم و اگر غیر صفر باشد معادله غیرهمگن است. برای حل یک معادله دیفرانسیل درجه 2 اگر P و Q ثابت باشند، با توجه به مقدار $$P^2-4Q$$ سه حالت مختلف وجود دارد:
اگر $$P^2-4Q$$ مثبت باشد، 2 ریشه حقیقی به صورت $$r_1$$ و $$r_2$$ وجود دارد و جواب به صورت زیر است:
$$y=Ae^{r_1x}+Be^{r_2x}$$
اگر $$P^2-4Q$$ صفر باشد، 1 ریشه حقیقی به صورت $$r$$ وجود دارد و جواب به صورت زیر است:
$$y=Ae^{rx}+Bxe^{rx}$$
اگر $$P^2-4Q$$ منفی باشد، 2 ریشه مختلط به صورت $$r_1=v+wi$$ و $$r_2=v-wi$$ وجود دارد و جواب به صورت زیر است:
$$y=e^{vw}(Ccos(wx)+iDsin(wx))$$
با این مقدمه به آموزش حل معادله درجه 2 در متلب میپردازیم.
تعریف تابع در متلب
توابع را در متلب در .m فایل میسازیم. جزئیات تعریف تابع در متلب را در مطلب حل دستگاه معادلات دیفرانسیل غیر خطی در متلب توضیح دادیم در این قسمت تعریف یک تابع در متلب را با روشهای مختلف بررسی میکنیم.
برای آشنایی بیشتر با برنامهنویسی در متلب، میتوانید فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی را مشاهده کنید که توسط فرادرس ارائه شده، لینک این آموزش در ادامه آورده شده است.
برای دیدن فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی + اینجا کلیک کنید.
تعریف تابع در متلب با یک خروجی
میخواهیم تابعی به نام average.m تعریف کنیم که به عنوان ورودی یک بردار قبول میکند. توسط تابع average میانگین بردار محاسبه شده و در خروجی میانگین چاپ میشود. برای این کار تابع را در فایل اسکریپت به صورت زیر تعریف میکنیم:
function ave = average(x)
ave = sum(x(:))/numel(x);
end
این فایل را در سیستم خود با نام خود تابع یعنی average.m ذخیره کرده و در صفحه Command بازه متغیر را معرفی میکنیم و با فراخوانی نام تابع میانگین بردار در خروجی نمایش داده میشود:
z = 1:99;
ave = average(z)
دقت کنید که اگر در خروجی با پیغام خطای زیر رو به رو شدید:
Undefined function or variable ‘average’
باید از طریق نواری که در تصویر (1) نشان داده شده است فولدر متلب را به مکانی که در آن تابع را ذخیره کردهاید تغییر دهید.
تصویر 1: حل معادله درجه 2 در متلب و تغییر پوشه
تعریف تابع در متلب با چند خروجی
در این قسمت میخواهیم تابعی با نام stat تعریف کنیم که یک بردار x را به عنوان ورودی دریافت کند و خروجی m و s را که برابر با میانگین بردار x و مجموع انحراف از میانگین هر یک از دادههای x است را در خروجی چاپ کند. بدین ترتیب برای تعریف این تابع به صورت زیر عمل میکنیم:
function [m,s] = stat(x)
n = length(x);
m = sum(x)/n;
s = sqrt(sum((x-m).^2/n));
end
حال مقادیر بردار x را تحت عنوان values به صورت زیر تعریف کرده و تابع stat را فراخوانی میکنیم.
در نهایت خروجیها یعنی میانگین و انحراف از میانگین values چاپ میشوند.
تعریف تابع در فایل اسکریپت متلب
در یک فایل اسکریپت متلب میخواهیم تابعی با نام integrationScript.m را تعریف کنیم که مقدار تابع را در $$2pi/3$$ مشخص کند و سطح زیر نمودار را در بازه $$0$$ تا $$pi$$ محاسبه کند. در فایل اسکریپت نیز به همان ترتیب توضیح داده شده عمل میکنیم و داریم:
% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)
% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)
function y = myIntegrand(x)
y = sin(x).^3;
end
در این حالت با اجرای فایل اسکریپت برای تابع $$sin^{3}(x)$$ مقدار تابع در $$2pi/3$$ و سطح زیر تابع بین $$0$$ تا $$pi$$ در خروجی چاپ میشود.
در این مثال دقت کنید که نام فایل همانند مثالهای قبلی نام تابع نیست و اگر فایل را به نام تابع ذخیره کنید با پیغام خطا رو به رو میشوید.
تعریف چند تابع در یک اسکریپت فایل متلب
در این حالت دو تابع را در یک اسکریپت تعریف میکنیم که در تابع اول تابع دوم را فراخوانی کرده و داریم:
function [m,s] = stat2(x)
n = length(x);
m = avg(x,n);
s = sqrt(sum((x-m).^2/n));
end
function m = avg(x,n)
m = sum(x)/n;
end
با تعریف برداری مانند values و فراخوانی تابع stat2 خروجیها در صفحه Command نمایش داده میشوند.
تعریف یک تابع با محدود کردن نوع آرگومان در متلب
میخواهیم برای مثالهای بالا روی ورودیهای تابع محدودیت اعمال کنیم. برای مثال برای محاسبه میانگین و انحراف از میانگین بردار x میخواهیم این محدودیت را اعمال کنیم که مقادیر عددی باشند و بینهایت نباشند. بدین منظور به صورت زیر عمل میکنیم:
function [m,s] = stat3(x)
arguments
x (1,:) {mustBeNumeric, mustBeFinite}
end
n = length(x);
m = avg(x,n);
s = sqrt(sum((x-m).^2/n));
end
function m = avg(x,n)
m = sum(x)/n;
end
حالا با تعریف ورودیها به صورت زیر:
values = [12.7, 45.4, 98.9, NaN, 53.1];
و با فراخوانی تابع stat3 برای مقادیر بردار values این پیغام را مشاهده خواهید کرد:
Invalid input argument at position 1. Value must be finite.
حل پارامتری معادله درجه 2 در متلب با دستور dsolve
بعد از توضیح در مورد معادله درجه 2 و روشهای متفاوت تعریف یک تابع در متلب در این قسمت حل یک معادله درجه 2 در متلب را به صورت پارامتری بررسی میکنیم. بدین منظور تابعی را در نظر بگیرید که دارای شرایط اولیه تعریف شده به صورت زیر است:
در این روش از دستور dsolve برای حل معادله درجه 2 در متلب استفاده کردیم، همچنین شرایط اولیه را نیز تحت عنوان conds در دستور dsolve وارد کردیم. در خط آخر اگر دستور simplify را وارد نکنید، جواب به صورت زیر نمایش داده میشود:
با وارد کردن دستور simplify جواب به صورت ساده شده و به صورت زیر در خروجی نمایش داده میشود:
ySol(x) =
1 - (8*sin(x/2)^4)/3
حل عددی معادله درجه 2 در متلب با دستور ode45
در این بخش میخواهیم یک معادله درجه 2 در متلب را با استفاده از دستور ode45 حل کنیم. برای این منظور تابعی را مانند زیر در نظر میگیریم:
$$y^{primeprime}=2y+8x(9-x)$$
که شرایط اولیه برای تابع به صورت زیر تعریف شده است:
$$begin{cases}y(0)=0\y^{prime}(0)=9end{cases}$$
برای حل از روش تغییر متغیر استفاده میکنیم تا معادله به یک معادله درجه اول تبدیل شود و داریم:
[x,y] = ode45(@fun,[0 -28],[0 9]);
plot(x,y);grid on
function dy = fun(x,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 2*y(1)+8*x*(9-x);
end
با اجرای این کد تغییرات $$y$$ و $$y^{prime}$$ در بازه $$-28$$ تا $$0$$ در نمودار نشان داده میشوند و همچنین تغییرات دو تابع نیز به عنوان خروجی نمایش داده میشوند. نمودار حاصل از اجرای کد به صورت زیر است:
تصویر 2: حل معادله درجه 2 در متلب با استفاده از روش ode45
مثالهای حل معادله درجه 2در متلب
در این بخش مثالهای دیگری از حل معادله درجه 2در متلب را به روش عددی و پارامتری بررسی میکنیم. به عنوان مثال اول معادله زیر را با شرایط اولیه مشخص شده در نظر بگیرید:
$$2x^{2}frac{d^2y}{dx^2}+3xfrac{dy}{dx}-y=0$$
میخواهیم این معادله را از طریق dsolve و بدون شرایط اولیه حل کنیم. کد متلب برای این مثال به صورت زیر خواهد بود:
با اجرای برنامه جواب به صورت کلی زیر به دست میآید:
$$frac{C_1}{3x}+C_2x^{frac{1}{2}}$$
که $$C_1$$ و $$C_2$$ ضرایب ثابتی هستند که با توجه به شرایط اولیه مسئله مقدار آنها مشخص میشود. به عنوان آخرین مثال میخواهیم معادله زیر را به صورت عددی در متلب حل کنیم:
$$frac{d^2y}{dt^2}=(1-y^2)frac{dy}{dt}-y$$
برای حل این معادله از تغییر متغیر استفاده میکنیم تا درجه معادله را به مرتبه 1 تنزل دهیم. بدین منظور داریم:
تصویر 3: مقادیر y بر حسب x برای حل معادله درجه 2در متلب با روش ode45
معرفی فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی
مجموعه فرادرس در تولید و تهیه محتوای آموزشی خود اقدام به تهیه فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی کرده است. این مجموعه آموزشی از هشت درس تشکیل شده و برای دانشجویان رشته علوم پایه و فنی مهندسی مفید است. پیشنیاز این درس آموزش برنامه نویسی متلب (MATLAB) است.
درس اول این مجموعه به حل معادلات جبری و ریشهیابی در متلب اختصاص دارد. درس دوم شامل اعداد تصادفی، محاسبات و تحلیل آماری در متلب است. درس سوم به انتگرال گیری و مشتق گیری عددی در متلب میپردازد و درس چهارم به محاسبات نمادین در متلب اختصاص دارد. در درس پنجم در مورد جبرخطی در متلب خواهید آموخت و در درس ششم درون یابی، تقریب تابع و برازش منحنی و سطح در متلب بررسی میشود. در نهایت در درس هفتم بهینه سازی کلاسیک در متلب آموزش داده میشود و درس هشتم به حل انواع مختلف معادلات دیفرانسیل (Differential Equations) در متلب اختصاص دارد.
برای دیدن فیلم آموزش برنامه نویسی متلب برای علوم و مهندسی + اینجا کلیک کنید.
جمعبندی
این مطلب به حل معادله درجه 2 در متلب اختصاص داشت، بدین منظور در ابتدا نشان دادیم چگونه میتوان در متلب معادلات را به روشهای مختلف تعریف کرد. سپس به حل معادلات درجه 2 در متلب پرداختیم. این حل را از دو روش dsolve و ode45 انجام دادیم. میتوان دید که در روش dsolve جواب به صورت پارامتری به دست میآید و در دستور ode45 جواب به صورت عددی و در بازه مشخص خواسته شده محاسبه میشود.
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند: