مشتق در متلب – صفر تا 100 مشتق گیری در متلب
انتگرال و مشتق از مباحث پایه و بسیار مهم در علم ریاضی هستند که کاربرد بسیار زیادی در حل مسائل دارند. با استفاده از نرمافزار متلب قادر خواهیم بود انواع توابع موجود را به راحتی و بدون صرف وقت انتگرالگیری و مشتقگیری نماییم. در این مقاله میخواهیم با مشتق گرفتن در متلب را به طور کامل به شما آموزش دهیم.
مشتق گیری کاربرد بسیار زیادی در رشتههای مختلف دارد از جمله محاسبه شیب خط، محاسبه سرعت و شتاب یک ذره ، محاسبه اکسترمم ها یک تابع و… . در این پست بنا داریم تا با مشتق گیری در متلب در به طور کامل آشنا شویم و دیگر نگرانی از بابت محاسبات بصورت دستی نداشته باشیم.
در ابتدا قصد داریم تا با مشتق توابع تحلیلی در متلب آشنا شویم و سپس بصورت عددی آن را در متلب بیان کنیم.
در این مقاله علاوه بر دستورات مشتق، دیگر دستورات مشتق گیری شامل محاسبه گرادیان، دیورژانس، کرل، لاپلاسین، ژاکوبین، ماتریس هسیان و مشتق تابعی را در متلب برای شما ارائه میکنیم.
به شما توصیه میکنیم برای یادگیری بیشتر این نرمافزار از سایر « آموزش های رایگان متلب » نیز استفاده نمایید.
مشتق گیری در متلب بصورت تحلیلی – دستور diff
در بسیاری از موارد با توابعی سر و کار داریم که ظاهری پیچیده و طولانی دارند و یا دارای چند متغیر هستند که میخواهیم مشتق را نسبت به یک متغیر خاص برای این تابع محاسبه کنیم. در عمل محاسبه آن بصورت دستی برای اینگونه توابع کاری وقت گیر و مشکل است. یا حتی ممکن است بخواهیم چند بار از تابع مشتق بگیریم، این کار در متلب به راحتی انجام میشود. برای مثال تابع دو متغیره زیر را داریم:
برای محاسبه مشتق از توابع از دستور diff به صورت استفاده میکنیم:
در نرمافزار متلب برای تعریف تابع ابتدا باید a و x بصورت متغیر تعریف شوند که برای اینکار از دستور syms استفاده میشود. در زیر کد متلب را برای مثال موردنظر مشاهده میکنیم که نسبت به هر دو متغیر و برای مشتق اول و دوم از تابع نشان داده شده است.
1 2 3 4 5 6 |
syms a x; f=exp(a*x^2)*cos(a^2*x^2)+2*x*sin(3*a*x) fx1=diff(f,x,1) fx2=diff(f,x,2) fa1=diff(f,a,1) fa2=diff(f,a,2) |
دستور مشتق در متلب برای توابع چند جملهای – دستور polyder
اگر بخواهیم از توابع چند جملهای مشتق گیری کنیم، علاوه بر دستور بالا میتوانیم از دستور polyder استفاده کنیم که نحوه تعریف تابع چند جملهای در آن راحتتر بوده و بصورت ضرایب چند جملهای میباشد.
از این دستور میتوان برای مشتق گیری در متلب برای ضرب دو تابع چند جملهای و یا تقسیم آن استفاده کرد. به عنوان مثال میخواهیم توابع چند جملهای زیر را در متلب تعریف کنیم:
برای تعریف تابع (a(x و (b(x در متلب ضرایب این توابع چندجملهای را در برداری بصورت زیر تعریف میکنیم:
همانطور که مشاهده میکنید به عنوان مثال برای تعریف تابع (a(x ضرایب x^4 عدد 1، ضریب x^3 بصورت صفر چون x^3 وجود ندارد، ضریب x^2 عدد 2- ، ضریب x عدد 1 و مقدار 6 برای عدد ثابت تعریف شده است. با تعریف ضرایب عملا تابع تعریف شده است. برای تابع بعدی نیز از همین شیوه برای تعریف آن استفاده میکنیم.
برای محاسبه مشتق هر کدام از توابع دستور polyder را تایپ کرده و در داخل پرانتز آن اسم بردار موردنظر را تایپ میکنیم.
مشتق گرفتن در متلب برای حاصلضرب و تقسیم دو تابع چند جملهای
برای حاصلضرب دو تابع دستور را با دو ورودی اجرا میکنیم که یک ورودی بردار a و ورودی دیگر بردار b را تعریف میکنیم که ترتیب جایگذاری آنها اهمیتی ندارد. برای تقسیم دو تابع همانند ضرب دو تابع دو ورودی برای تابع polyder در نظر گرفته و بردارهای a و b را به آن معرفی میکنیم .
تفاوت اصلی مشتق ضرب و تقسیم در تعریف خروجی تابع است که برای حالت ضرب یا اسمی برای خروجی در نظر نمیگرفتیم و یا یک اسم برای خروجی در نظر میگیریم. برای تعریف مشتق تقسیم دو تابع چند جملهای دو خروجی برای دستور تعریف کرد که خروجی اول صورت کسر تابع مشتق گرفتهشده و خروجی دوم مخرج کسر آن تابع میباشد. برای محاسبه مشتق تقسیم دو تابع در ورودی اول صورت کسر و در ورودی دوم مخرج کسر را قرار میدهیم، به عنوان مثال محاسبه مشتق تابع زیر بصورت زیر در محیط متلب تعریف میشود:
در ادامه مشتقگیری برای توابع گفته شده بصورت زیر در محیط متلب تعریف شدهاند که برای فهم بیشتر توضیحاتی در جلوی آنها نوشته شده است.
1 2 3 4 5 6 |
a=[1 0 -2 1 5]; % (a(x)=x^3-2x^2+x+5=0) b=[4 0 -3 6]; % (b(x)=4x^2-3x+6=0) ka=polyder(a); % ( ka(x)=d/d(x) a(x) ) kb=polyder(b); % ( kb(x)=d/d(x) b(x) ) k=polyder(a,b); % ( k(x)=d/d(x)[a(x)*b(x)] ) [q,d]=polyder(a,b); % ( q(x)/d(x)=d/d(x) [a(x)/b(x)] ) |
ما در گام98 بعنوان فروشگاه تخصصی محصولات آموزشی دیجیتال، مهمترین و پرکاربردترین مسائل درسیِ دانشجویی را در محیط متلب کدنویسی کردهایم. برای مشاهده این پروژههای آماده نرمافزاری به صفحه « پروژه متلب » مراجعه کنید.
محاسبه گرادیان در متلب
گرادیان برای یک تابع دو متغیره بصورت زیر تعریف میشود:
همچنین میتوان این تعریف را برای توابعی با n متغیر نیز بسط داد و تعریف نمود. برای محاسبه گرادیان یک تابع در متلب از دستور gradient استفاده میشود. نحوه استفاده از این دستور به این صورت است که در ورودی اول تابع داده میشود و در ورودی دوم متغیرهایی که باید نسبت به آنها مشتقگیری انجام شود،داده میشوند. مثال زیر را خواهیم داشت:
1 2 3 4 5 6 7 |
syms x y f = -(sin(x) + cos(y))^2 g = gradient(f, [x, y]) = -2*cos(x)*(cos(y) + sin(x)) 2*sin(y)*(cos(y) + sin(x)) |
همچنین اگر بخواهیم گرادیان را مقدار دهی نماییم و آن را ترسیم کنیم؛ میتوانیم با استفاده از دستور subs به متغیرها مقدار داده و سپس از آنها استفاده نماییم. ولی کار با دستور gradient بصورت عددی را همراه با یک مثال در بخش مربوط به مشتق عددی بررسی خواهیم کرد.
محاسبه دیورژانس در متلب
دیورژانس برای توابع برداری V بصورت زیر تعریف میشود:
در واقع مشتق تابع نسبت به متغیرهای مختلف گرفته میشود و سپس با هم جمع میشوند و یک تابع اسکالر بدست میآید. در رابطه بالا xi میتواند هر متغیری باشد. برای محاسبه دیورژانس در متلب از دستور divergence استفاده میشود. برای محاسبه دیورژانس در متلب در ورودی اول تابع برداری داده میشود و در بردار دوم متغیرها داده میشود. با یک مثال نحوه استفاده از این دستور را برای شما بیان میکنیم:
1 2 3 4 |
syms x y z divergence([x*z, 2*y^2*x, 3*z^3+y*x], [x, y, z]) 9*z^2 + z + 4*x*y |
دقت نمایید که حتما خروجی این دستور یک تابع اسکالر میباشد. مشابه با دستور قبل برای مقداردهی و رسم نمودار میتوان از دستور subs استفاده نمود.
محاسبه کرل در متلب
کرل یک تابع برداری مانند V بصورت زیر تعریف میشود:
در واقع همانطور که دیورژانس ضرب داخلی عملگر نابلا در تابع برداری بود، کرل یک تابع برداری حاصلضرب خارجی عملگر نابلا در تابع برداری میباشد. برای محاسبه کرل در متلب از دستور curl استفاده میشود. ورودی اول تابع و ورودی دوم متغیرهای میباشند. با یک مثال نحوه استفاده از این دستور را بیان میکنیم:
1 2 3 4 5 6 7 |
syms x y z curl([x*y*z, y^2*z^2+x, x^3*y^2*x^2], [x, y, z]) = 2*x^5*y - 2*z*y^2 x*y - 5*x^4*y^2 1- x*z |
دقت نمایید که کرل یک تابع برداری برخلاف دیورژانس آن همچنان یک تابع برداری میباشد.
محاسبه لاپلاسین در متلب
لاپلاسین برای یک تابع اسکالر سه متغیره بصورت زیر قابل تعریف است :
در حقیقت لاپلاسین دیورژانس گرادیان یک تابع میباشد. برای محاسبه لاپلاسین در متلب از دستور laplacian استفاده میشود. در ورودی اول این دستور تابع اسکالر تعریف شده و در ورودی بعدی متغیرها داده میشود. در مثال زیر لاپلاسین یک تابع دلخواه دو متغیره را بدست میآوریم:
1 2 3 4 5 6 |
syms x y f = y/x^3 + y^2*x laplacian(f,[x y]) = 2*x + (12*y)/x^5 |
در بخش عددی نحوه محاسبه لاپلاسین بصورت عددی را بیان میکنیم. هرچند که شما میتوانید با استفاده از دستور subs از به همین توابع مقدار داده و از آنها استفاده نمایید.
محاسبه ژاکوبین در متلب :
ماتریس ژاکوبین برای یک تابع چند متغیره بصورت زیر تعریف میشود:
برای محاسبه ماتریس ژاکوبین در متلب دستور jacobian در تعریف شده است. نحوه استفاده از این دستور به این صورت است که در ورودی اول تابع موردنظر به دستور داده شده و سپس متغیرهایی که باید نسبت به آنها مشتق گرفته شود تا ماتریس ژاکوبین تشکیل شود، به دستور داده میشود. این دستور هم برای ژاکوبین توابع برداری و هم برای ژاکوبین توابع اسکالر استفاده میشود. در زیر یک مثال برای توابع اسکالر و یک مثال برای توابع برداری بیان خواهیم کرد تا نحوه استفاده از این دستور را فرا بگیرید.
1- مثالی از توابع برداری :
1 2 3 4 5 6 7 8 |
syms x y z f = [x^2 , x+y*z^2 , y^2+z] jacobian(f,[x,y,z]) = [2*x , 0 , 0] [1 , z^2 , 2*y*z] [0 , 2*y , 1] |
2- مثالی از توابع اسکالر:
1 2 3 4 5 |
syms a b c g = [a^2*c + b + a*b*c] jacobian(g,[x,y,z]) = [ 2*a*c + b*c, a*c + 1, a^2 + b*a] |
این مثالها را برای توابع سه متغیره بیان کردیم اما شما میتوانید برای هر تابع n متغیره از آن به همین شیوه استفاده نمایید.
محاسبه ماتریس هسیان در متلب
ماتریس هسیان برای یک تابع چندمتغیره اسکالر در حالت کلی بصورت زیر تعریف میشود:
این ماتریس کاربردهای بسیار قابل توجهای در رشتههای مختلف دارد. برای محاسبه ماتریس هسیان در متلب از دستور hessian استفاده میشود. نحوه استفاده از این دستور کاملا مشابه با دستورات قبل میباشد و دیگر آن را تکرار نمیکنیم و با یک مثال استفاده از این دستور را برای محاسبه ماتریس هسیان در متلب بیان میکنیم:
1 2 3 4 5 6 7 8 |
syms x y z f = x*y^2 + 2*z*x +x*y*z^2 hessian(f,[x,y,z]) = [ 0, z^2 + 2*y, 2*y*z + 2] [ z^2 + 2*y, 2*x, 2*x*z] [ 2*y*z + 2, 2*x*z, 2*x*y] |
مشتق تابعی در متلب
در بخش آخر مشتقات تحلیلی در متلب یک دستور بسیار کاربردی را برای شما ارائه مینماییم.
در این بخش مشتق به جای اینکه نسبت به یک متغیر گرفته شود، نسبت به یک تابع گرفته میشود. برای این منظور از دستور functionalDerivative در متلب استفاده میشود. همچنین از این دستور میتوان برای حل معادلات پارامتری نیز استفاده نمود. در ادامه با حل 2 مثال استفاده از این دستور بسیار پرکاربرد را برای شما نمایش خواهیم داد.
فرض کنید y خود تابعی از x باشد و تابع f که به هر دو متغیر وابسته است را تعریف میکنیم و مشتق این تابع نسبت به متغیر y گرفته میشود:
1 2 3 4 5 |
syms y(x) f = y*sin(y) + cos(y)*x D = functionalDerivative(f,y) D(x) = sin(y(x)) - x*sin(y(x)) + cos(y(x))*y(x) |
در مثال دوم میخواهیم یک معادله را حل نماییم: مسئله زیر پیدا کردن سریعترین سقوط تحت گرانش میباشد. زمان حرکت جسم در امتداد محنی y(x) تحت نیروی جاذبه بصورت داده شده است:
برای حل این مسئله باید تابع f نسبت به مسیر y مینیم شود. یعنی از این تابع نسبت به y مشتق گرفته و مساوی صفر قرار میدهیم:
1 2 3 4 5 6 7 |
syms g y(x) assume(g,'positive') f = sqrt((1+diff(y)^2)/(2*g*y)) eqn = functionalDerivative(f,y) == 0 eqn = simplify(eqn) eqn(x) = diff(y(x), x)^2 + 2*y(x)*diff(y(x), x, x) == -1 |
توضیحات : حل این معادله منجر به حل یک معادله دیفرانسیل خواهد شد. دستور simplify استفاده شده در بالا در حقیقت معادله را برحسب درجههای عبارت مرتب میکند.
مشتق گیری عددی در متلب – دستور diff
در بسیاری از مواقع ممکن است مقدار تابع را در نقاطی خاص داشته باشیم و بخواهیم ببینیم مشتق تابع به چه شکلی میباشد. در این شرایط از مشتق گیری در متلب بصورت عددی استفاده میکنیم. برای مثال دو بردار را زیر را در نظر بگیرید:
بردار X ،بردار متغیر مستقل و بردار Y ،بردارمتغیر وابسته یا بردار پاسخ میباشد. میخواهیم مقدار مشتق y نسبت به x را بدست آوریم. برای محاسبه مشتق بصورت زیر عمل میکنیم:
برای بقیه مقادیر نیز به همین صورت مشتقگیری عددی محاسبه میشود. در متلب برای محاسبه مشتق عددی از همان diff استفاده میشود. به عنوان مثال تابع زیر در نقاطی تعریف شده است و میخواهیم مشتق عددی مرتبه اول و دوم را برای آن محاسبه کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
x=linspace(10,1000,200); y=x.^3+cos(3*x)-sin(x); subplot(3,1,1) plot(x,y,'linewidth',2) xlabel('x') ylabel('y') title('y') yy=diff(y)./diff(x); % d(y)/d(x) xx=(x(1:end-1)+x(2:end))/2; subplot(3,1,2) plot(xx,yy,'linewidth',2) xlabel('xx') ylabel('yy') title('dy/dx'); yyy=diff(yy)./diff(xx); % d^2(y)/d(x)^2; xxx=(xx(1:end-1)+xx(2:end))/2; subplot(3,1,3) plot(xxx,yyy,'linewidth',2) xlabel('xxx') ylabel('yyy') title('d^2y/dx^2') |
نکاتی که باید توجه داشت این است که چون مشتق بصورت عددی محاسبه میشود در تعریف تابع باید قبل از عملگرهای ضرب، تقسیم و توان از نقطه استفاده کرد که بدین معنی است که عملیات مولفه به مولفه توسط عملگرها انجام شود.
همچنین نمودارهای تابع اصلی و مشتق مرتبه اول و مشتق مرتبه دوم را در زیر مشاهده میکنید:
محاسبه گرادیان (مشتق جزئی) و لاپلاسین تابع در متلب:
گرادیان برای توابع اسکالر بصورت مشتق نسبت به متغیرهای یک تابع تعریف میشود که گرادیان یک تابع بر آن عمود میباشد.
لاپلاسین یک تابع در واقع همان دیورژانس گرادیان یک تابع اسکالر میباشد.
ابتدا به بحث گرادیان یک تابع و سپس به بحث محاسبه لاپلاسین تابع در متلب خواهیم پرداخت.
گرادیان تابع در متلب ( مشتق گرفتن در متلب بصورت جزئی ) – دستور gradient
گردیان یک تابع دو متغیره Z(x,y) بصورت زیر تعریف میشود:
برای محاسبه گرادیان (مشتق جزئی) عددی در محیط متلب از دستور gradient استفاده میشود. اگر تابع یک متغیره باشد، آن را بصورت تک خروجی تعریف میکنیم و اگر چند متغیره باشد، تعداد خروجیهای آن را به تعداد متغیرها تعریف میکنیم که هر کدام از خروجیها مشتق جزئی نسبت به متغیرهای مستقل میباشد. این دستور برای تابع دو متغیره بصورت زیر تعریف میشود:
[dzx dzy]=gradient(Z,dx,dy)
که Z تابع دو متغیره میباشد. dx,dy فاصله بین نقاط در راستای x و y یا همان گام مکانی در این دو راستا میباشد. dzx, dzy مشتق جزئی تابع به ترتیب نسبت به y و x میباشنداگر مقدار گام مکانی را قرار ندهیم این مقدار بصورت پیشفرض یک در نظر گرفته میشود.
لاپلاسین تابع در متلب – دستور del2
لاپلاسین برای تابع دو متغیره Z(x,y) بصورت زیر تعریف میشود:
دستور del2 برای محاسبه لاپلاسین یک تابع استفاده میشود که برای توابع دو متغیره این دستور مقدار1/4* laplacian(Z) را نشان میدهد. به طور کلی برای توابع n متغیره این دستور مقدار 1/2n*laplacian(Z) را نشان خواهد داد. نحوه استفاده از دستور del2 مشابه دستور gradient میباشد با این تفاوت که خروجی ما فقط یک مقدار میباشد. بصورت زیر:
L=del2(Z,dx,dy)
در کد زیر گرادیان (مشتق جزئی) و لاپلاسین برای تابع Z بصورت زیر در متلب نوشته شده است که برای نمایش مشتق جزئی از تابع quiver و برای نمایش لاپلاسین از تابع contour استفاده شده است. فلشها در واقع همان مشتق جزئی هستند که مقدار تغییرات را با اندازه فلش و جهت تغییرات را با توجه به جهت فلش نمایش میدهند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
dx=0.1; dy=0.1; x=0.5:dx:3*pi; y=0.4:dy:2*pi; [X,Y]=meshgrid(x,y); Z=sin(2*X)+cos(3*Y)+log(X.*Y); subplot(2,1,1) contour(X,Y,Z) hold on; [dZX,dZY]=gradient(Z,dx,dy); % Gradient Function quiver(X,Y,dZX,dZY) title('Z with gradient') xlabel('X') ylabel('Y') colorbar L=4×del2(Z,dx,dy); % Laplacian Function subplot(2,1,2) contour(X,Y,L) title('Laplacian Z') colorbar xlabel('X') ylabel('Y') |
همچنین در زیر نمودارهای مربوط به مشتق جزئی و لاپلاسین را مشاهده میکنید.
امیدوارم این مقاله بتواند به شما این توانایی را بدهد که هرگونه مشتق گیری را با متلب به راحتی انجام داده و حتی محاسبه گرادیان و لاپلاسین برای توابع چند متغیره که قطعا بصورت دستی وقتگیر میباشد، را بتوانید به راحتی با متلب انجام داده و در وقت خود صرفهجویی نمایید.
اگر در رسم نمودار با استفاده از متلب دچار مشکل هستید یا میخواهید با دستورات آن به طور کامل آشنا شوید حتما مجموعه مقالات ما در زمینه « رسم نمودار با متلب » را مطالعه نمایید.
پایان.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام از سایت خوبتون بسیار سپاسگزارم
سوال داشتم: چگونه مشتق یک ماتریس را نسبت به یک بردار محاسبه کنم؟
مثلا ماتریس [5z+6x,2z^3+8y;x^2+y^2,x+3z] نسبت به بردار [x y z]
سلام و عرض ادب
دوست عزیز منظورتون رو خیلی دقیق متوجه نشدم. بطور کلی فرقی نداره که بخواهیم از یک تابع اسکالر (که در حقیقت ماتریس یک در یک هست) مشتق بگیریم یا از یک ماتریس (m در n). اما متغیری که مشتق میگیریم باید مشخص باشه. مثلا مشتق نسبت به x هست یا y.
برای اینکه بهتر بتونیم پاسخ سوالتون رو بدیم، توصیه میشه که در گروه تلگرامی پرسش و پاسخ متلب که رایگان هم هست، عضو بشید. سوالتون رو مطرح کنید تا پاسخ داده بشه.
آدرس گروه تلگرام: https://t.me/matlab_discussion
موفق باشید.