مشتق در متلب
به نام خدا و سلام.
به جلسه سی و دوم از سری جلسات آموزش متلب خوش آمدید. آموزش متلب از وبسایت متلبپلاس به صورت رایگان ارائه میشود. در این جلسه به آموزش مشتق در متلب میپردازیم. مشتق یکی از مباحث پرکاربرد ریاضی است که یادگیری آن در متلب ضروری است. نحوه مشتق گیری در متلب، مشتق تحلیلی و مشتق عددی در متلب و … از مباحث این جلسه هستند.
با متلب پلاس همراه باشید.
مشتق از مباحث پایه و بسیار پرکاربرد در ریاضیات و مهندسی است. یادگیری مشتق در متلب به ما کمک میکند تا در مسائل ریاضی نگران محاسبات پیچیده مشتق نباشیم. علاوه بر آن، ممکن است در دروس مختلف به مشتقی برخورد کنیم که حل آن دشوار باشد. در این مواقع، متلب به عنوان یک ماشین حساب قدرتمند به کمک ما میآید.
مشتق در متلب با دستور diff محاسبه میشود. این دستور در مجموعه تولباکس سیمبولیک متلب قرار دارد. به عبارت دیگر، برای استفاده از diff باید متغیر سیمبولیک (نمادین) تعریف نمود. دستور diff(F,var,n) مشتق مرتبه n تابع F را برحسب متغیر var محاسبه میکند. اگر F تابعی از یک متغیر باشد و مشتق مرتبه اول را بخواهیم، نوشتن var و n الزامی نیست. در شکل زیر دستور diff شرح داده شده.
حال به سراغ اولین مثال از مشتق گیری در آموزش برنامه نویسی متلب میرویم. در این مثال تابع سینوس 4x را در نظر میگیریم. قبل از مشتق گیری باید متغیر سیمبولیک (نمادین) x را در متلب تعریف کنیم.
syms x
f = sin(4*x);
diff(f)
پس از اجرای دستور بالا خواهیم داشت:
ans =
4*cos(4*x)
به همین راحتی مشق یک تابع در متلب با دستور diff محاسبه شد. برای اینکه مقدار مشتق یک تابع در نقطهی مشخص را محاسبه کنیم، میتوان از دستور subs استفاده کرد. به این صورت که ابتدا مشتق را محاسبه کرده و سپس مقدار را در آن جایگذاری کنیم. در مثال زیر، مشتق تابع سینوس را در نقطه 3 محاسبه میکنیم.
syms x
f = sin(x);
fp = diff(f)
fp =
cos(x)
حال مقدار 3 را در مشتق جایگذاری میکنیم.
subs(fp,x,3)
ans =
cos(3)
البته روش دیگری نیز برای محاسبه مشتق یک تابع در نقطه مشخص وجود دارد. به این صورت که در تعریف تابع، آن را تابعی از متغیر بیان کنیم. سپس مقدار را به متغیر اختصاص دهیم. به مثال زیر دقت کنید.
syms x
f(x) = sin(x);
df = diff(f)
df(x) =
cos(x)
df(3)
ans =
cos(3)
نتیجه در هر دو حالت یکسان است.
در مثالهای بعد مشتق مرتبهی بالاتر را با دستور diff محاسبه میکنیم.
مشتق مرتبه دو، سه و بالاتر در متلب
همان طور که گفتیم دستور diff مرتبه مشتق را نیز به عنوان ورودی میگیرد. اگر مرتبه را وارد نکنیم، پیشفرض آن عدد یک است. یعنی مشتق مرتبه اول. برای مثال، میخواهیم مشتق مرتبه دو تابع کسینوس را محاسبه کنیم.
syms x
f = cos(x);
diff(f,2)
ans =
-cos(x)
به همین راحتی مشتق مرتبه دوم کسینوس محاسبه شد. حال مشتق مرتبه 4 تابع زیر را در متلب محاسبه میکنیم.
syms x
f = (1-x^2)*sin(1 + x);
diff(f,4)
ans =
12*sin(x + 1) + 8*x*cos(x + 1) - sin(x + 1)*(x^2 - 1)
در مثالهایی که تا الان حل شد، تابع یک متغیره (تنها متغیر x) بود. حال به سراغ مشتق گیری از توابع چند متغیره در متلب میرویم.
مشتق گیری از توابع چند متغیره (مشتق نسبی در متلب)
اولین قدم برای مشتق گیری از توابع چند متغیره، تعریف متغیرهای تابع به صورت نمادین است. پس از آن تابع را تعریف کرده و مشتق گیری میکنیم. در این حالت چون تابع دارای چند متغیر است، حتما باید متغیر موردنظر برای مشتق تعریف شود. تابع زیر را درنظر بگیرید.
این تابع را در متلب تعریف کرده و یکبار نسبت به x و یکبار نسبت به y از آن مشتق گیری میکنیم.
syms x y
f = x*sin(y) + y*sin(x);
diff(f,y)
ans =
sin(x) + x*cos(y)
syms x y
f = x*sin(y) + y*sin(x);
diff(f,x)
ans =
sin(y) + y*cos(x)
مشتق گیری نسبی برای مراتب بالاتر نیز به همین صورت است. در این موارد باید مرتبه مشتق را هم درون دستور diff بنویسیم. مثلا مشتق مرتبه 3 تابع بالا نسبت به y به صورت زیر محاسبه میشود.
syms x y
f = x*sin(y) + y*sin(x);
diff(f,y,3)
ans =
-x*cos(y)
امکان مشتق گیری از یک تابع نسبت به چند متغیر در متلب وجود دارد. فرض کنید میخواهیم ابتدا نسبت به y و سپس نسبت به x مشتق بگیریم. در این حالت دستور diff(f,y,x) را اجرا میکنیم. به مثال زیر دقت کنید.
syms x y
f = x*sin(y) + y*sin(x);
diff(f,y,x)
ans =
cos(x) + cos(y)
این محاسبه را میتوان به صورت تودرتو هم با دستور diff(diff(f,y),x) نوشت. نتیجه در هر دو حالت یکسان است.
مشتق گیری عددی در متلب
در مثالهای قبل دیدیم که اگر تابعی داشته باشیم با دستور diff مشتق آن محاسبه میشود. اما گاهی نتایج یا دادههای عددی در اختیار داریم که میخواهیم مشتق آن را محاسبه کنیم. مثلا از یک تست آزمایشگاهی، موقعیت یک متحرک را در زمانهای مشخص داریم. میخواهیم سرعت این متحرک را با مشتق گیری از دادههای آن محاسبه کنیم.
روش مشتق گیری عددی در متلب از دادهها، با دستور diff است. اگر x برداری باشد که قصد مشتق گیری از آن را داریم، diff(x) مشتق درایههای آن را محاسبه میکند. اگر دادههای y را برحسب x داشته باشیم، diff(y)./diff(x) مشتق عددی بردار y نسبت به بردار x است. مشتق گیری عددی با diff براساس مفهوم سادهای است که در دبیرستان نیز داشتیم. رابطه ریاضی مشتق گیری عددی در شکل زیر آمدهاست.
پس از مشق گیری عددی، بردار جدیدِ حاصل یک عضو کمتر از بردار اولیه خواهد داشت. برای درک بهتر، به مثال زیر دقت کنید.
یک بردار x از صفر تا 2پی درنظر میگیریم. بردار y برابر با سینوس این مقادیر (بردار x) است. میدانیم که مشتق بردار y بایستی کسینوس باشد (مشتق سینوس برابر با کسینوس است). پس به صورت عددی مشتق بردار y را محاسبه میکنیم و با نمودار تابع کسینوس مقایسه میکنیم.
x = 0:0.05:2*pi;
y = sin(x);
dy = diff(y)./diff(x);
plot(x(2:end),dy,'--','LineWidth',1.5)
hold on
plot(x,cos(x),'LineWidth',1.5)
legend('numerical diff: dy/dx','cos(x)')
پس از اجرای کد بالا داریم:
تطابق دو نمودار در شکل فوق، کاملا واضح است. یعنی مشتق گیری عددی به درستی انجام شده. برای رسم نمودار از دستور plot استفاده شده که توضیح کامل آن در آموزش رسم نمودار در متلب آمدهاست. دقت داریم که بردار dy یک عضو کمتر از x و y دارد. به همین دلیل برای رسم، x(2:end) را درنظر گرفتهایم.
به این ترتیب مشتق عددی در متلب با دستور diff و روش ذکر شده محاسبه میشود.
مشتق چند جملهای در متلب با polyder
بدلیل کاربرد زیاد چند جملهایها، در متلب دستوراتی داریم که علیات ریاضی را روی آنها انجام میدهد. در محاسبه انتگرال در متلب دیدیم که دستور مشخصی برای انتگرال گیری از چند جملهای وجود دارد. در بحث مشتق گیری نیز به همین صورت است. دستور polyder (خلاصه شده Polynomial differentiation) برای محاسبه مشتق چند جملهای بکار میرود. ورودی به این دستور یک بردار است که این بردار ضرایب چند جملهای میباشد.
مثلا مشتق چند جملهای 3x4 + 4x3 + x2 – 5x + 4 در متلب به صورت زیر محاسبه میشود.
p = [3 4 1 -5 4];
polyder(p)
ans =
12 12 2 -5
محاسبه مشتق این چند جملهای با دستور diff (به صورت نمادین) نیز به شکل زیر است.
syms x
diff(3*x^4+4*x^3+x^2-5*x+4)
ans =
12*x^3 + 12*x^2 + 2*x - 5
گرچه نتیجه هر دو حالت یکسان است اما دستور polyder سریعتر و راحتتر مشتق چند جملهای محاسبه میکند.
مشتق تابعی (فانکشنال) در متلب
در مشتق تابعی به جای اینکه نسبت به یک متغیر مشتق گرفته شود، نسبت به یک تابع گرفته میشود. برای مشتق تابعی در متلب از دستور functionalDerivative استفاده میشود. نوشتار و طرز استفاده از این دستور مشابه با دستور diff در متلب است. برای درک بهتر به مثال زیر دقت کنید.
در این مثال مشتق تابع f را نسبت به y محاسبه میکنیم. توجه داریم که y در واقع تابعی از x است.
syms y(x)
f = y*sin(y);
functionalDerivative(f,y)
ans(x) =
sin(y(x)) + cos(y(x))*y(x)
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) مشتق عبارت sin(x)/x را با دستور diff در متلب محاسبه کنید.
تمرین دوم) مشتق مرتبه 3 عبارت cos(x+y)/(1+x) را نسبت به x محاسبه کنید.
تمرین سوم) مشتق چند جملهای 4x5 + 2x3 + 8x2 – 5 را با دستور polyder و diff متلب محاسبه کنید.
جمعبندی
خب جلسه سی و دوم از سری جلسات آموزش متلب به پایان رسید. این جلسه به طور کامل درباره محاسبه مشتق در متلب صحبت کردیم. مشتق گیری تحلیلی و عددی اهمیت زیادی در محاسبات مهندسی دارد. روشهای مختلف و متنوعی برای مشتق گیری تحلیلی، عددی، نسبی، چند متغیره و… در متلب ارائه شد. تسلط به مشتق گیری در متلب کمک زیادی در محاسبات ریاضی نیز به شما میکند. چرا که با قدرت متلب میتوان مشتق هر عبارتی را محاسبه نمود. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
2 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام ببخشید میشه راهنمایی کنید که چه طوری میشه منحنی مشتق اول و دوم یک تابع رو تو متلب رسم کرد؟
سلام اگر تابع موردنظر رو بصورت فرمول (سیمبولیک) دارید، ابتدا مشتق اول و دومش رو با دستور diff محاسبه کنید. سپس با مقداردهی به اونها (با دستور subs یا eval)، میتونید رسم کنیدشون. رسم نمودار در متلب در جلسه 21 توضیح داده شده.
اما اگر تابع موردنظر تون رو بصورت عددی دارید، میتونید با استفاده از رابطه diff(y)./diff(x) ازش نسبت به x مشتق بگیرید. همین کار رو برای بردار حاصل انجام بدید، میشه مشتق عددی دوم در متلب. در نهایت هم میتونید با plot رسم کنید.