انتگرال در متلب – انتگرال گیری در متلب از صفر تا 100
انتگرال و مشتق از مباحث بسیار پرکاربرد و پایهای برای رشتههای مهندسی و سایر رشتههای مرتبط میباشد. یادگیری انتگرال گیری عددی و تحلیلی در متلب و مشتق گیری در متلب بسیار به ما کمک میکند تا در مسائل مختلفی که با آنها سروکار داریم دیگر نگران محاسبات پیچیده آنها نباشیم. در مقاله « مشتقگیری در متلب » بطور مفصل به روشهای مختلف مشتقگیری در نرمافزار متلب پرداخته شد. در این پست میخواهیم محاسبه انتگرال در متلب را آموزش دهیم.
انتگرال که به تازگی از کتابهای دبیرستان حذف شده است و شما دیگر آن را فقط در دانشگاه خواهید دید از مفاهیم بسیار پرکاربرد برای رشتههای مهندسی، اقتصادی و سایر رشتههای مرتبط میباشد. محاسبه انتگرال روشهای واحدی نداشته و در شماری از موارد محاسبه آنها دشوار میباشد. همچنین در بسیاری از موارد حل انتگرالها بصورت تحلیلی ممکن نبوده و بایستی از روشهای عددی برای حل استفاده کرد. در این مطلب میخواهیم به طور کامل با روشهای انتگرالگیری در متلب آشنا شویم.
شما میتوانید برای مشاهده سایر مقالات آموزشی متلب، به صفحه « آموزش های متلب رایگان » مراجعه کنید. این آموزشها بصورت ساده و روان و در قالب ویدیو برای شما تهیه شده است.
دستور انتگرال تحلیلی
در حل بسیاری از مسائل ممکن است با انتگرالهایی سر و کار داشته باشیم که به صورت تحلیلی حل میشوند اما حل آنها مستلزم وقت زیاد بود و امکان اشتباه در حل زیاد میباشد. انتگرال گیری در متلب بصورت تحلیلی با دستور int انجام میشود. و همچنین میتوان از این دستور برای هر دو نوع انتگرال معین و نامعین استفاده کرد. برای این منظور ابتدا تابع دو متغیره f را بصورت زیر تعریف میکنیم:
برای محاسبه انتگرال نامعین دستور int را تایپ کرده و سپس در داخل پرانتز ابتدا اسم تابع را نوشته و سپس متغیری که میخواهیم نسبت به آن انتگرال بگیریم. برای حل انتگرال نامعین بعد از اسم تابع و متغیری که میخواهیم نسبت به آن انتگرال بگیریم، بازه انتگرال گیری مورد نظر را وارد میکنیم که نحوه استفاده از دستور بصورت زیر است:
1 2 3 4 5 6 |
syms a x; f=exp(a*x)*2*x*sin(3*a*x); Fxi=int(f,x) Fai=int(f,a) Fxd=int(f,x,0,1) Fad=int(f,a,0,1) |
بدیهی است که چون تابع دو متغیره است حاصل انتگرالهای معین نیز بصورت عدد نخواهد بود و برحسب متغیر دیگر خواهد شد.همچنین برای تعریف تابع ابتدا باید متغیرها را تعریف کنیم که برای آن از دستور syms استفاده شده است.
دستور انتگرال چندجملهای
انتگرال گیری در متلب برای توابع چندجملهای (polynomial) علاوه بر دستور int با دستور اختصاصی polyint انجام میشود که دیگر نیازی به تعریف تابع نخواهد بود و فقط کافی است بردار ضرایب چند جملهای را برای آن تعریف کنیم.
برای استفاده از این دستور بردار ضرایب را در ورودی این دستور قرار داده و دستور را اجرا میکنیم. همچنین اگر بخواهیم میتوانیم یک عدد به عنوان ثابت انتگرال (Coefficient of integration) را در نظر بگیریم که این عدد پس از انتگرال گیری از تابع به عنوان عدد ثابت در تابع جدید ظاهر خواهد شد. این عدد را میتوانیم در ورودی دوم دستور polyint به آن بدهیم. در ادامه کد مرتبط با این دستور را مشاهده میکنید:
در این رابطه اگر ثابت انتگرال را در نظر نگیریم، بصورت خودکار صفر در نظر گرفته میشود.
1 2 3 4 5 6 7 |
p=[2 1 0 4 -3]; % p(x)=2x^4+x^3+4x-3 k=5; % Constant of integration L1=polyint(p) L2=polyint(p,k) answer L1=[4 0.25 0 2 -3 0] L2=[4 0.25 0 2 -3 5] |
شما میتوانید انواع مسائل و پروژههای متلب را در صفحه « پروژه آماده متلب » دانلود نمایید. این پروژههای آماده همراه با فایل کامل تئوری مسئله و الگوریتم حل و کدنویسی ارائه شدهاند.
محاسبه انتگرال معین بصورت عددی
چه موقع از انتگرال گیری عددی استفاده میکنیم؟ در بسیاری از مواقع ممکن است حل انتگرال به روش تحلیلی بسیار طولانی و زمانبر باشد و همچنین خیلی از انتگرالهایی که در مسائل مهندسی با آنها سر وکار داریم حل تحلیلی برای آن وجود ندارد، مانند تابع توزیع احتمال نرمال که در مدلسازی بسیاری از پدیدهها کاربرد داشته و برای محاسبه احتمال باید از آن انتگرال گرفته شود ولی انتگرال آن روش حل تحلیلی ندارد و ما ناچاریم که از روشهای عددی برای حل این سری از انتگرالها بهره گیریم.
در این قسمت قصد داریم تا با انواع روشهای حل عددی انتگرال در متلب آشنا شویم:
انتگرال معین در متلب به روش مستطیلی
همانطور که میدانید انتگرال به معنای سطح زیر نمودار میباشد روش مستطیلی سطح زیر نمودار را با مستطیلهایی تخمین میزند. مانند شکل زیر:
همانطور که مشاهده میکنید این روش خطای زیادی دارد اما اگر بتوانیم تعداد مستطیلها را بیشتر کنیم میتوانیم تقریب بهتری داشته باشیم. مانند شکل زیر:
برای انتگرال گیری در متلب به روش مستطیلی دستوری تعریف نشده است اما این کد به راحتی بصورت زیر نوشته میشود:
1 2 3 4 5 6 7 8 |
a=0; b=10; dx=0.1; x=a:dx:b; f=@(x) x.^2+cos(3*x.^2); InR=dx*sum(f(x(2:end))); % Rectangular Method answer: InR=338.9158 |
همانطور که مشاهده میکنید بازه انتگرال بین 0 تا 10 میباشد و عرض هر کدام از مستطیلها 0.1 در نظر گرفته شده و تابع f بصورت(function handle (@x (تابعی از x ) تعریف شده است. در نهایت مجموع عرض هر کدام از مستطیلها ( dx) ضربدر طول آنها (مقدار تابع) بصورت وکتوری محاسبه شده است. چون تعداد مستطیلها یکی کمتر از تعداد xها میباشد، نقاط را از 2 تا آخر تعریف کردهایم.
انتگرال معین در متلب به روش ذوزنقهای – دستور trapz
روش ذوزنقهای روشی دقیقتر از روش مستطیلی است که برای مقدار تابع از میانگین دو گره کناری استفاده میکند و در عمل روشی با خطای کمتر نسبت به روش مستطیلی محسوب میشود که کد و تصویر آن بصورت زیر میباشد:
1 |
InT=0.5*dx*sum(f(x(1:end-1))+f(x(2:end))); % Trapezoidal Method |
البته نیازی به نوشتن کد آن نیست و انتگرال گیری در متلب به روش ذوزنقه با دستور trapz انجام میشود. به این صورت است که اگر فقط تابع به عنوان ورودی به آن داده شود ذوزنقهها با فواصل واحد در نظر گرفته خواهند شد که تقریب مناسبی در خیلی موارد نخواهد بود و تعریف فواصل x و دادن متغیر مستقل (x) به دستور انتگرال با تقریب موردنظر ما محاسبه خواهد شد. برای همان تابع f مقدار انتگرال را به صورت زیر محاسبه میکنیم:
1 2 3 4 5 6 7 8 9 10 |
a=0; b=10; dx=0.1; x=a:dx:b; f=@(x) x.^2+cos(3*x.^2) Int1=trapz(f(x)); % Trapezoidal Method Int2=trapz(x,f(x)); % Trapezoidal Method answer Int1=3339.7 Int2=333.9669 |
همانطور که مشاهده میکنید برای این مثال روش انتگرال ذوزنقه با فواصل واحد تقریب بسیار بدی را از جواب اصلی به ما میدهد.
انتگرال معین در متلب به روش سیمپسون – دستور integral1
روش سیمپسون برای تقریب انتگرال به جای استفاده از مستطیل و ذوزنقه در هر بازه از یک چند جملهای درجه دوم استفاده میکند که عملا یک درجه از روش ذوزنقه و دو درجه از روش مستطیل بالاتر بود و تقریب بسیار خوبی از جواب اصلی در اختیار ما قرار میدهد. اثبات میشود که روش سیمپسون به صورت زیر انتگرال را تقریب میزند:
برای استفاده از این روش در نرمافزار متلب در نسخههای قدیم از دستور quad استفاده میشد که در نسخههای جدید این دستور با دستور integral جایگزین شده است. همچنین دستور quadv برای توابع وکتوری از همین قائده سیمپسون برای محاسبه انتگرال استفاده میکند.
قائده استفاده از دستور integral به این صورت است که در ورودی اول، تابع تعریف شده و در ورودی دوم و سوم بازه انتگرالگیری را وارد میکنیم. برای همان تابع f برنامه بصورت زیر نوشته میشود:
1 2 3 4 5 6 7 8 |
a=0; b=10; dx=0.1; x=a:dx:b; f=@(x) x.^2+cos(3*x.^2) Ins=integral(f,a,b); % Simpson's Method answer: Ins=333.6758 |
خطای مطلق و نسبی در محاسبه انتگرال عددی در متلب:
در محاسبه انتگرال در متلب بصورت عددی همیشه مقداری خطا به دلیل تقریب موردنظر وجود دارد که مقدار همیشه مثبت میباشد. خطای مطلق بصورت قدرمطلق تفاضل جواب دقیق از جواب عددی میباشد و خطای نسبی بصورت خطای مطلق تقسیم بر جواب عددی میباشد. برای بیان حل انتگرال با یک مقدار خطای مطلق و نسبی دلخواه به ترتیب از زیر دستورات AbsTol و RelTol استفاده میکنیم. به عنوان مثال برای تابع زیر مقدار خطا را بصورت زیر تعیین میکنیم:
1 2 3 4 |
g=@(x)x.^5.*exp(-x).*sin(x); q = integral(g,0,Inf,'RelTol',1e-8,'AbsTol',1e-13) answer: q= 14.99999999999836 |
محاسبه انتگرال مختلط با دستور integral
انتگرال مختلط از مباحث مطرح شده در درس ریاضی مهندسی دوره کارشناسی است. انتگرال گیری در متلب برای توابع مختلط با همان دستور integral انجام میشود. برای مثال میخواهیم انتگرال مختلط تابع f(z)=cosz+sinz روی مسیر باز از 0 تا 2i تا 3i+1 تا iرا محاسبه میکنیم:
1 2 3 4 |
h=@(z) cos(z)+sin(z); L=integral(h,0,i,'waypoints',[2i 3i+1]) answer: L= -0.5431 + 1.1752i |
دقت شود که برای انتگرالگیری مختلط حتما باید از زیر دستور waypoints استفاده شود و همچنین ورودی دوم و سوم تابع همچنان مطابق تعریف قبل ابتدا و انتهای بازه انتگرالگیری هستند و تغییرات مسیر بین ابتدا و انتها از طریق اعداد داخل کروشه انجام میشود.
دستور انتگرال دوگانه در متلب – دستور integral2
برای محاسبه انتگرال دوگانه در متلب در ورژنهای قبلی متلب دستور dblquad استفاده میشد که مانند دستور quad در ورژنهای جدید با دستور جدیدی جایگزین شده است. برای حل انتگرالهای دوگانه که نسبت به دو متغیر انتگرال میگیریم از دستور integral2 استفاده میشود. مثلا برای تابع f که وابسته به x و y میباشد در محیط متلب به صورت زیر نوشته میشود:
1 2 3 4 5 6 |
a=0; b=2; % a=Lower limit of x , b=upper limit of x c=1; d=3; % c=Lower limit of y , d=upper limit of y f= @(x,y) x.^2+y.^3+exp(x.*y)+sin(x.*y.^2).*cos(x.^2.*y); I=integral2(f,a,b,c,d); answer: I=125.9204 |
همانطور که مشاهده میکنید ورودی اول دستور همان تابع میباشد، ورودیهای دوم و سوم حدود متغیر x و ورودیهای چهارم و پنجم حدود متغیر y میباشد.
همچنین لازم به ذکر است که متلب به طور پیشفرض از روش tiled (تقسیمبندی های مستطیلی) برای انتگرالهایی استفاده میکنند که حدود انتگرالگیری آنها اعداد محدود (definite) باشد و برای حدود انتگرالهای نامحدود (indefinite) یا محدود از روش iterated (تکرار کردن) استفاده میکنند که میتوان این پیشفرض را با تایپ کردن عبارت Method و بعد از آن عبارت tiled یا iterated تغییر داد. بصورت زیر:
1 |
I2=integral2(f,a,b,c,d,'method','tiled'); |
محاسبه انتگرال سهگانه در متلب – دستور integral3
برای محاسبه انتگرال سهگانه در محیط متلب دستور integral3 قرار داده شده است که نحوه استفاده از آن مشابه دستور integral2 میباشد و مثلا برای تابع (h(x,y,z باید برای هر کدام از متغیرها از آنها رنج انتگرالگیری را مشخص نمود. مانند مثال زیر:
1 2 3 4 5 6 7 8 9 |
a=0; b=1; % a=Lower limit of x , b=upper limit of x c=1; d=3; % c=Lower limit of y , d=upper limit of y e=2; f=3; % e=Lower limit of z , f=upper limit of z h=@(x,y,z)x.^2+y.^3+z.^2+exp(x.*y.*z)+sin(x.*y.*z.^2).*cos(x.^2.*y); I1=integral3(h,a,b,c,d,e,f); I2=integral3(h,a,b,c,d,e,f,'method','iterated'); answer: I1=170.9786 I2=170.9786 |
در اینجا از روش تکرار کردن (iterated) هم استفاده کردیم که با توجه به اینکه حدود انتگرالگیری محدود است، تغییری در جواب مسئله ایجاد نخواهد شد.
انتگرال عددی در متلب برای توابع گسسته – دستور cumsum و cumtrapz
در بسیاری از موارد اطلاعات ما بصورت گسسته است مثلا اطلاعاتی از انجام آزمایشی بر روی چند نمونه سیلندر بتنی داریم که مشخصات نمونه را داریم و هر بار مقاومت نهایی سیلندر را بدست میآوریم.
تابعی که توزیع گسسته یک متغیر تصادفی را بیان کند به آن تابع PMF(Probability Mass Function) میگویند. برای انتگرال توزیعهای گسسته دستورات سادهای داریم که احتمالا آنها را شنیده باشید. دستور sum که برای جمع کردن اعداد استفاده میشود، میتواند برای محاسبه انتگرال در متلب برای توابعی با توزیع گسسته استفاده شود.
دستور cumsum برای محاسبه انتگرال در متلب بصورت تجمعی برای توزیع گسسته استفاده میشود که اگر سطح زیر نمودار توزیع تجمعی یک متغیر تصادفی یک باشد و هر برآمدی متناظر با احتمال آن برآمد باشد، به آن تابع CDF (Cumulative Distribution Function) میگویند. البته دستور cumsum صرفا انتگرال تجمعی را محاسبه میکند و CDF نخواهد بود. اگر فراوانیها بصورت نسبی محاسبه شوند میتوانیم آن را CDF محسوب کنیم.
دستور دیگری که برای محاسبه انتگرال تجمعی استفاده میشود دستور cumtrapz است که انتگرال تجمعی را بصورت ذوزنقهای محاسبه میکند به این صورت که میانگین اعداد را محاسبه میکند و بصورت تجمعی انتگرال را محاسبه میکند.
به عنوان مثال انتگرال گسسته مطلق و گسسته تجمعی برای یک توزیع دلخواه را محاسبه کردیم و نمودار آن را ترسیم میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
A=[ 2 3 4 8 2 10]; % Random Variable subplot(3,1,1); PMF=stem(A,'r','linewidth',2); axis([0 6 0 30]) In=sum(A); title('Distribution of A') II1=cumsum(A); subplot(3,1,2); CDF1=stem(II1,'g','linewidth',2); axis([0 6 0 30]) title('Cumsum(A)') II2=cumtrapz(A); % Cumulative trapezoidal subplot(3,1,3); CDF2=stem(II2,'k','linewidth',2); axis([0 6 0 30]) title('Cumtrapz(A)') |
انتگرال برای توابع گسسته بصورت ذوزنقهای – دستور cumtrapz
این دستور برای محاسبه انتگرال روی محیط گسسته در بخش قبل توضیح داده شده و مثال آن نیز در نمودار بیان شد. اما ا دستور cumtrapz میتواند برای ماتریسها نیز مورد استفاده قرار گیرد، ورودی اول همان ماتریس میباشد و ورودی دوم برای ماتریسهای دوبعدی عدد 1 یا 2 میباشد. عدد 1 به این معنی است که جمع روی ستونها انجام شود و عدد 2 برای جمع روی ردیف ماتریس مورد استفاده قرار میگیرد. مانند مثال زیر :
1 2 3 4 5 6 |
B=[1 2 3;4 5 6; 7 8 9]; CDFC=cumtrapz(B,1); % Cumulative trapezoidal As a Column CDFR=cumtrapz(B,2); % Cumulative trapezoidal As a Row answer: CDFC=[0 0 0 ; 2.5 3.5 4.5; 8 10 12] CDFR=[0 1.5 4 ; 0 4.5 10; 0 7.5 16] |
در این مقاله انواع روشهای انتگرالگیری در نرمافزار متلب بیان شد. چنانچه میخواهید کدهای انتگرالگیری عددی به روشهای مختلف ذوزنقه، سیمپسون، گاوس-لژاندر، رامبرگ و … را دانلود نمایید به صفحه « کد انتگرال عددی در متلب » مراجعه نمایید.
پایان.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
3 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
من در قسمت Function چند تابع تو در تو تعریف کردم به طوری که پاسخ تابع اول را محاسبه و سپس داخل تابع دوم قرار دهد و… این توابع در قسمت Current Folder قابل مشاهده است.
در صورتی که بخوام از تابع آخر نسبت به متغیری که در تابع اول قرار دادم انتگرال بگیرم باید چیکار کنم ؟؟؟
مثلا y1=2x و y2=3x*y1 تعریف کردم و به صورت یک تابع ذخیره کردم.
حال اگر بخواهم نسبت به x انتگرال بگیرم باید چیکار کنم؟
با سلام و احترام
جدا از بحث توابعی که تعریف کردید، در اینجور مواقع بهتره با جایگذاری به تابع دلخواه تون برسید و سپس انتگرال بگیرید. در مثالی هم که فرمودید میشه y2 رو برحسب x بدست آورد (با مقداردهی به y1) بنابراین انتگرالش روی x نباید کار پیچیده ای باشد.
موفق باشید!