مشتق گیری همیشه یکی از مهم ترین کارها در ریاضیات و پروژه های مهندسی است. نرم افزار متلب هم به عنوان قدرتمندترین نرم افزار در حوزه ریاضیات، امکانات خوبی برای مشتق گیری در اختیار ما قرار می دهد.
یکی از انواع مشتق گیری، مشتق گیری تحلیلی است. یعنی یک تابع بر حسب یک متغیر داریم. از آن با استفاده از قواعد مشتق گیری، مشتق می گیریم و حاصل را به دست می آوریم. در متلب این کار را باید با استفاده از محاسبات سیمبولیک در متلب انجام بدهیم که در آموزش مشتق توابع سیمبولیک در متلب به آن پرداخته ایم.
اما اینجا قصد داریم مشتق گیری عددی در متلب را بررسی کنیم.
برای مشتق گیری از چندجمله ای ها یک میانبر هم وجود دارد. پیشنهاد می کنم مشتق گرفتن از چندجمله ای در متلب را هم مشاهده کنید.
مشتق گیری عددی دقیقا چیست؟
وقتی به جای یک تابع ، تعدادی از داده ها را داشته باشیم، دیگر نمی توانیم به روش تحلیلی از آنها مشتق بگیریم. مثلا همانطور که می دانید سرعت یک متحرک با مشتق گرفتن از مکان آن در هر لحظه به دست می آید. حالا اگر مکان متغیر را به صورت یک تابع از زمان داشته باشیم، با مشتق گرفتن تحلیلی می توانیم تابع سرعت را محاسبه کنیم و اندازه سرعت را در هر لحظه محاسبه نماییم.
اما اگر تابعی برای مکان نداشته باشیم و صرفا بدانیم متحرک در لحظات مختلف در چه مکان هایی قرار داشته، چگونه می توانیم سرعت را حساب کنیم؟
طبیعی است که نمی توانیم از تعدادی داده گسسته مشتق تحلیلی بگیریم. پس در این حالت باید برویم سراغ مشتق گیری عددی. مشتقی که بتواند نرخ تغییر تعدادی داده گسسته را تعیین کند.
در این حالت مشتق هم به صورت تعدادی از داده های گسسته است که اندازه مشتق را در زمان های مختلف تعیین می کند. با رسم نمودار از این داده ها می توانیم نمودار مشتق را خیلی دقیق به دست بیاوریم.
تصویر زیر به خوبی منظور از مشتق گیری عددی در متلب را نشان می دهد.
مشتق گیری عددی در متلب با دستور diff
حالا اجازه بدهید برویم سراغ این که در متلب چگونه می توانیم از تعدادی داده، به صورت عددی مشتق بگیریم. ابتدا باید با دستور diff در متلب آشنا شویم.
توجه کنید که در این قسمت با کاربرد دستور diff برای مشتق گیری عددی کار داریم. از این دستور برای مشتق گیری تحلیلی هم استفاده می شود که می توانید آن را در آموزش مشتق توابع سیمبولیک در متلب با دستور diff بخوانید.
فرض کنید یک بردار شامل n تا المان داریم. دستور diff اختلاف داده های پشت سر هم را محاسبه می کند و نتیجه را به صورت یک بردار شامل n-1 المان در خروجی اش می آورد. یعنی به شکل زیر:
برای مشتق گیری عددی، می توانیم با استفاده از تابع diff در متلب، صورت مشتق ها در هر بازه را به دست آوریم. برای محاسبه مخرج مشتق ها در هر بازه، می توانیم از یک بردار یا یک عدد ثابت استفاده کنیم.
مثلا فرض کنید داده های ابتدایی در بازه هایی با اندازه 0.1 اندازه گیری شده اند. در این صورت برای به دست آوردن مشتق عددی کافی است که همه المان های به دست آمده از دستور diff را بر 0.1 (طول بازه) تقسیم کنیم. در این حالت اگر از دستور diff در مخرج هم استفاده کنیم، اشکالی ندارد.
اگر طول بازه ها متغیر باشد، باید برای مخرج هم از دستور diff استفاده کنیم. مثال های زیر این موضوع را کاملا روشن می کنند.
مثال: مکان یک متحرک در 2 ثانیه اول حرکت آن، در هر 0.2 ثانیه اندازه گیری شده است. (بردار x ). می خواهیم سرعت را در لحظات مختلف به دست بیاوریم.
چون بازه های زمانی ثابت است، با استفاده از دستور diff ، اختلاف داده های پشت سر هم را محاسبه می کنیم و سپس همه اطلاعات به دست آمده را تقسیم بر بازه زمانی ثابت می کنیم.
راه دیگر هم این است که از دستور diff در مخرج و برای بردار t هم استفاده کنیم.
مثال: حالا می توانیم نمودار داده های بالا را هم رسم کنیم. نمودار مکان بر حسب زمان به سادگی با دستور plot در متلب رسم می شود.
اما برای رسم نمودار مشتق مکان بر حسب زمان یک مشکل داریم. تعداد المان های بردارها زمان (t) و مکان (x) برابر 11 است. در حالیکه تعداد المان های بردار سرعت (d_x) برابر 10 است. (چون همان طور که گفتیم بردار خروجی دستور diff یک المان کمتر از ورودی اش دارد.) پس چگونه این نمودار را رسم کنیم؟ می توانیم به عنوان مثال فقط 10 المان اول بردار t را انتخاب کنیم و نمودار را بر حسب آنها رسم کنیم. یعنی:
می توانید راه های دیگری هم برای رسم این نمودار پیدا کنید، مثلا پیدا کردن میانگین بازه ها و … . در هر صورت باید کاری کنید که 10 المان در بردار زمان موجود باشد. یعنی به تعداد المان های بردار سرعت.
برای مقایسه بهتر، دو نمودار را همزمان رسم می کنیم. نمودار مکان را با رنگ آبی و نمودار زمان را با رنگ قرمز رسم می کنیم.
نمودار زیر به دست می آید.
برای اطلاعات کامل در این رابطه می توانید به آموزش رسم نمودار در متلب مراجعه کنید.
مثال: مثال بالا را در نظر بگیرید. این بار مکان در بازه های زمانی ثابت اندازه گیری نشده است. (بردار t لحظه های اندازه گیری مکان را مشخص می کند. هر المان در بردار x مکان متحرک را در لحظه متناظر در بردار t نشان می دهد.) پس برای محاسبه طول بازه های زمانی هم از دستور diff در متلب استفاده می کنیم.
یعنی به این صورت:
مانند مثال بالا، نمودار مکان و سرعت را هم با استفاده از دستور plot در متلب به صورت همزمان رسم می کنیم.
نکته: در مشتق گیری عددی، هر چه داده ها در لحظات نزدیک تری اندازه گیری شده باشند مشتق هم دقیق تر خواهد بود. مثلا اگر مکان متحرک در هر 0.1 ثانیه اندازه گیری شده باشد، اندازه مشتق بسیار دقیق تر از حالتی است که در هر 1 ثانیه مکان را به دست آورده باشیم.