حل معادله دیفرانسیل در متلب با ode45 و ode23s و…
به نام خدا و سلام.
به جلسه سی و نهم از سری جلسات آموزش متلب خوش آمدید. آموزش نرم افزار متلب از وبسایت متلبپلاس بصورت تخصصی ارائه میشود. در این جلسه به آموزش حل عددی معادله دیفرانسیل در متلب میپردازیم. حل عددی معادله دیفرانسیل با دستور ode45 در متلب، دستور ode23، دستور ode113، دستور ode15s، دستور ode23s و دستور ode23t. هر یک از این دستورات در نوع خود و برای معادله دیفرانسیل مشخصی کاربرد دارند. البته که بهترین دستور برای حل عددی معادلات دیفرانسیل در متلب، دستور ode45 است.
با متلب پلاس همراه باشید.
مقدمهای بر حل عددی معادله دیفرانسیل در متلب
در جلسه قبل به آموزش حل تحلیلی معادله دیفرانسیل در متلب پرداختیم. در آنجا اشاره شد که معادلات دیفرانسیل در شرایط خاصی دارای پاسخ تحلیلی اند. در واقع، در اکثر مواقع بایستی از حل عددی استفاده کنیم. چرا که پاسخ تحلیلی برای معادله دیفرانسیل وجود ندارد. حل عددی برای انواع معادلات دیفرانسیل وجود دارد. معادله دیفرانسیل غیرخطی، همگن و ناهمگن، مرتبه اول، دوم و مراتب بالاتر. یکی از بهترین روشهای حل عددی معادله دیفرانسیل در متلب، روشهای رانگ کوتا (Runge-Kutta) است. این روش به طور پیشفرض در متلب وجود دارد و با دستورات ode45 و de23 و… شناخته میشود. مثلا دستور ode45 متلب براساس روش رانگ کوتای مرتبه 4 و 5 کار میکند. همچنین دستور ode23 متلب براساس روش رانگ کوتای مرتبه 2 و 3 پیاده سازی شده.
نرم افزار متلب به طور کلی 8 حلگر معادله دیفرانسیل با نامهای زیر ارائه میدهد.
حلگر معادلات غیرسخت (Nonstiff Solvers)
- دستور ode45
- دستور ode23
- دستور ode113
حلگر کاملا ضمنی (Fully Implicit Solvers)
- دستور ode15i
حلگر معادلات سخت (Stiff Solvers)
- دستور ode15s
- دستور ode23s
- دستور ode23t
- دستور ode23tb
همانطور که در لیست بالا مشاهده کردید، متلب حلگرها را به دو دسته سخت و غیرسخت تقسیم بندی کرده. معادلات سخت (یا سفت) معادلاتی اند که اندازه گام حل بایستی بسیار کوچک باشد تا حل بدرستی انجام شود. کوچک بودن بازه ممکن است به اندازهای باشد که حلگر قادر به حل معادله دیفرانسیل نباشد. ازین رو، متلب حلگرهای خاصی را برای این دسته از معادلات معرفی نموده.
اما پیشنهاد اول متلب برای حل عددی معادله دیفرانسیل دستور ode45 است. این دستور به قدری قدرتمند است که هر نوع معادلهای را حل میکند. همچنین، دقت حل این دستور در مقایسه با سایر دستورها، بسیار بیشتر است. در موارد خاص، اگر دستور ode45 توانایی حل نداشته باشد (مثل معادلات stiff) آنگاه از سایر دستورات استفاده میکنیم.
در ادامه آموزش متلب، دستور ode45 به طور کامل معرفی و نحوه کار با آن تشریح میشود.
دستور ode45 در متلب
همانطور که در مقدمه گفتیم، حلگر ode45 متلب، اولین و بهترین انتخاب برای حل انواع معادلات دیفرانسیل است. طرز استفاده از دستور ode45 متلب بصورت زیر است:
[t,y] = ode45(odefun,tspan,y0)
این نوشتار برای همهی دستورات حل عددی معادله دیفرانسیل (مانند ode23, ode113, ode23s, ode15s و …) برقرار است. دقت کنید که دستور ode45 به عنوان ورودی، معادله دیفرانسیل را در فرم تابع میگیرد. یعنی بایستی معادله دیفرانسیل را با استفاده از تابع تعریف کنیم. تعریف تابع میتواند به صورت فانکشنال یا معمولی باشد. (آموزش جامع تعریف تابع در متلب)
توجه کنید که حلگرهای ode در متلب، فقط معادله دیفرانسیل مرتبه اول را حل میکنند. یعنی به عنوان ورودی باید فقط معادله دیفرانسیل مرتبه اول به آنها بدهیم. برای حل معادله دیفرانسیل با مرتبه بالاتر، بایستی یک معادله مرتبه n را به n معادله مرتبه اول تبدیل کنیم. در ادامه انواع معادله دیفرانسیل را بصورت عددی در متلب حل میکنیم.
حل معادله دیفرانسیل مرتبه اول با ode45 متلب
برای شروع یادگیری دستور ode45، اولین مثال را با معادله دیفرانسیل خطی و مرتبه اول آغاز میکنیم. معادله زیر را درنظر بگیرید.
برای حل این معادله دیفرانسیل در بازه صفر تا 2 بصورت زیر عمل میکنیم.
ode45(@(x,y) 4*x, [0 2], 1)
پس از اجرای دستور بالا، نمودار زیر (بطور خودکار) رسم میشود.
حل معادله دیفرانسیل مرتبه دوم با ode45 متلب
همانطور که ذکر شد، دستور ode45 متلب، فقط معادله دیفرانسیل مرتبه اول را حل میکند. برای حل معادله دیفرانسیل مرتبه دوم و بالاتر، باید ابتدا معادله را به مرتبه اول تبدیل کنیم. به این رویکرد، کاهش مرتبه نیز میگویند. به این صورت که یک معادله دیفرانسیل مرتبه n، به n معادله دیفرانسیل مرتبه اول تبدیل میشود. مثلا یک معادله دیفرانسیل مرتبه دو، به 2 معادله دیفرانسیل مرتبه اول تبدیل میشود. برای درک بهتر، معادله دیفرانسیل مرتبه دوم زیر را درنظر بگیرید.
با تغییر متغیر، این معادله به دو معادله مرتبه اول تبدیل شدهاست. حال این دو معادله را درون یک تابع در متلب نوشته و ذخیره میکنیم.
function dydt = odefun1(x,y)
dydt = [y(2); -.3*y(2) - y(1) + sin(x)];
این تابع را با نام odefun1 در متلب ذخیره میکنیم. شرایط اولیه مسئله به صورت y(0)=1 و y'(0)=0 است. حال با دستور ode45 آن را فراخوانی و برای بازه صفر تا 10 حل میکنیم.
[t, y] = ode45(@odefun1,[0 10],[1;0]);
در این سبک نوشتار، y دارای دو ستون است. ستون اول مربوط به y1 (یا همان y اولیه) و ستون دوم مربوط به y2 یا همان ‘y اولیه. در واقع بردار اولیه پاسخ اصلی معادله و بردار دوم مشتق آن است. برای رسم پاسخ به صورت زیر عمل میکنیم.
plot(t,y(:,1),t,y(:,2),'-.','linewidth',1.8)
grid on
title('Solution of Second-Order ODE, with ODE45');
xlabel('x');
ylabel('Solution y');
legend('y_1','y_2')
در رسم نمودار، از دستور plot و دستورات title, legend, xlabel, ylabel استفاده شده. آموزش کامل این دستورات در آموزش رسم نمودار در متلب ارائه شده. (برای مشاهده روی عبارت قرمز رنگ کلیک کنید.)
معادله دیفرانسیل این مثال، یک معادله دیفرانسیل ساده بود که حتی حل تحلیلی نیز داشت. با دستور dsolve هم میتوان آن را حل نمود (آموزش حل تحلیلی معادله دیفرانسیل در متلب در جلسه قبل ارائه شد). اما قدرت حلگرهای عددی مانند ode45 در حل معادله دیفرانسیلهای غیرخطی، مرتبه بالا و… میباشد. در مثال بعد یک معادله دیفرانسیل غیرخطی که حل تحلیلی ندارد را حل میکنیم.
حل معادله دیفرانسیل غیرخطی با ode45 متلب
توانایی و قدرت اصلی حلگر ode45 (و سایر حلگرها) در حل معادله دیفرانسیلهایی است که حل تحلیلی ندارند. معادله دیفرانسیل غیرخطی نمونهای از این معادلات است. در حالت کلی معادله دیفرانسیل غیرخطی حل تحلیلی ندارد. مگر در شرایط خاص و یا با روشهای پرتربیشن (Perturbation Methods). در این شرایط بهترین گزینه برای حل عددی معادله دیفرانسیل، حل با ode45 یا ode23 یا سایر حلگرهای عددی متلب است. معادله دیفرانسیل زیر یک نمونه از معادلات غیرخطی است. با روش ذکر شده برای کاهش مرتبه، آن را به دو معادله مرتبه اول تبدیل میکنیم.
برای حل این معادله دیفرانسیل غیرخطی مرتبه دوم در متلب، ابتدا آن را درون تابع ذخیره میکنیم.
function dydt = odefun2(x,y)
dydt = [y(2); (1 - y(1)^3)*y(2) - tan(y(1)) + 1 + x];
این تابع را با نام odefun2 در دایرکتوری فعلی متلب ذخیره میکنیم. سپس با ode45 آن را فراخوانی میکنیم. شرایط اولیه مسئله صفر و بازه x نیز صفر تا 7 است.
[t, y] = ode45(@odefun2,[0 7],[0;0]);
در این سبک نوشتار، t دارای یک ستون و y دو ستون است. ستون اول y مربوط به y1 (یا همان y اولیه) و ستون دوم مربوط به y2 یا همان ‘y اولیه. در واقع بردار اولیه پاسخ اصلی معادله و بردار دوم مشتق آن است. برای رسم پاسخ به صورت زیر عمل میکنیم.
plot(t,y(:,1),t,y(:,2),'-.','linewidth',1.8)
grid on
title('Solution of Second-Order ODE, with ODE45');
xlabel('x');
ylabel('Solution y');
legend('y_1','y_2')
در مثال بعد یک معادله دیفرانسیل مرتبه سوم را با حلگر عددی ode45 متلب حل میکنیم.
حل معادله دیفرانسیل مرتبه 3 با دستور ode45
در مقدمه گفتیم که اساس حل با ode45 برای حل معادله دیفرانسیل مرتبه اول است. و معادله دیفرانسیل مرتبه n به n معادله دیفرانسیل مرتبه یک تبدیل میشود. پس یک معادله دیفرانسیل مرتبه سوم باید به 3 معادله دیفرانسیل مرتبه اول تبدیل شود. معادله دیفرانسیل زیر را درنظر بگیرید.
روش کاهش مرتبه مشابه با مثالهای قبل انجام شده. حال آن را در متلب پیاده سازی میکنیم. برای این کار، معادله را در یک تابع به صورت زیر مینویسیم.
function dydt = odefun3(x,y)
dydt = [y(2);
y(3);
y(3) - y(2) - x*y(1) + exp(-x)];
این تابع را با نام odefun3 در دایرکتوری متلب ذخیره میکنیم. حال با ode45 آن را در بازه صفر تا 5 با شرایط اولیه y(0)=1, y'(0)=2, y”(0)=0 حل میکنیم.
[t, y] = ode45(@odefun3,[0 5],[1;2;0]);
plot(t,[y(:,1),y(:,2),y(:,3)],'linewidth',1.8)
grid on
title('Solution of Third-Order ODE, with ode45');
xlabel('x');
ylabel('Solution y');
legend('y_1','y_2','y_3','Location','best')
به این ترتیب یک معادله دیفرانسیل مرتبه سوم به صورت عددی حل شد. حل معادله دیفرانسیل مرتبه بالاتر نیز به همین صورت است. در ادامه به حل عددی دستگاه معادله دیفرانسیل در متلب میپردازیم.
حل دستگاه معادلات دیفرانسیل با ode45 در متلب
حل دستگاه معادله دیفرانسیل با دستور ode45 مشابه با معادلات مرتبه بالا است. به این صورت که هر معادله را در یک سطر از یک بردار تعریف میکنیم. سپس آن بردار با ode45 فراخوانی میشود. مثلا دستگاه معادلات دیفرانسیل زیر را درنظر بگیرید.
برای حل این دستگاه معادله دیفرانسیل در متلب، ابتدا تابع زیر را مینویسیم.
function dy = odefun4(~,y)
dy = zeros(3,1);
dy(1) = y(2) - y(3);
dy(2) = 0.45*y(3);
dy(3) = -0.25 * y(1) * y(2);
این تابع را با نام odefun4 ذخیره میکنیم. دقت کنید که چون متغیر مستقل (در این مسئله t) در معادلات نیست، ورودی اول تابع را خالی میگذاریم. اگر متغیر مستقل در معادلات ظاهر شده باشد، آن را در ورودی اول قرار میدهیم (مشابه مثالهای قبل). حال این دستگاه را در بازه صفر تا 10 با شرایط اولیه x(0)=1, y(0)=2, z(0)=0 حل میکنیم.
[t, y] = ode45(@odefun4,[0 10],[1;2;0]);
plot(t,[y(:,1),y(:,2),y(:,3)],'linewidth',1.8)
grid on
title('System of ODE, with ode45');
xlabel('x');
ylabel('Solution y');
legend('x(t)','y(t)','z(t)')
تا اینجا انواع معادله دیفرانسیل را با دستور ode45 در متلب حل کردیم. حال به معرفی سایر حلگرهای نرم افزار متلب میپردازیم.
حل معادله دیفرانسیل در متلب با سایر حلگرهای ode
دستور ode23 در متلب
دستور ode23 مشابه با ode45 برای حل معادلات غیرسخت (Nonstiff) بکار میرود. البته این دستور برای معادلات دیفرانسیل با مرتبه پایین مناسب است. طرز استفاده و نوشتار این دستور کاملا مشابه با ode45 است.
[t,y] = ode23(odefun,tspan,y0)
مثلا معادله دیفرانسیل y’=x با حلگر ode23 به صورت زیر حل میشود.
ode23(@(x,y) x, [0 2], 1)
بهتر است از دستور ode23 فقط برای معادلات مرتبه پایین استفاده شود. (البته که بهترین انتخاب همواره دستور ode45 است)
دستور ode113 در متلب
دستور ode113 مشابه با ode45 برای حل معادلات غیرسخت (Nonstiff) بکار میرود. طرز استفاده و نوشتار این دستور کاملا مشابه با ode45 است.
[t,y] = ode113(odefun,tspan,y0)
دستور ode15s
دستور ode15s برای حل معادله دیفرانسیل سخت (Stiff) در متلب بکار میرود. طرز استفاده از دستور ode15s در متلب به صورت زیر است.
[t,y] = ode15s(odefun,tspan,y0)
برای حل معادله دیفرانسیل سخت بهتر است از این دستور استفاده شود. در مواردی دیده میشود که قدرت این دستور از دستور ode45 بیشتر است. در واقع در معادلات stiff، حلگر ode15s در زمان کوتاهتر نسبت به ode45 پاسخ میدهد. مثلا معادله دیفرانسیل زیر را درنظر بگیرید.
برای حل این معادله دیفرانسیل در متلب، ابتدا تابع زیر را تعریف میکنیم.
function dydt = odefun5(~,y)
dydt = [y(2); 1000*(1-y(1)^2)*y(2)-y(1)];
این تابع را با نام odefun5 در دایرکتوری متلب ذخیره میکنیم. حال با استفاده از حلگر ode15s آن را فراخوانی و حل میکنیم.
tic
[t,y] = ode15s(@odefun5,[0 2000],[2 0]);
plot(t,y(:,1),'o')
grid on
title('Solve Stiff ODE, with ode15s');
xlabel('x');
ylabel('Solution y');
toc
اگر به ابتدای کد عبارت tic و انتهای آن عبارت toc را بنویسیم، مدت زمان صرف شده را میدهد. این زمان برای حلگر ode15s برابر با 0.2 ثانیه است. حال اگر همین مسئله را با حلگر ode45 حل کنیم بیش از 24.5 ثانیه طول میکشد.
tic
[t,y] = ode45(@odefun5,[0 2000],[2 0]);
plot(t,y(:,1),'o')
grid on
title('Solve Stiff ODE, with ode45');
xlabel('x');
ylabel('Solution y');
toc
پاسخ کند حلگر ode45 به این دلیل است که در نقاطی که پاسخ تغییرات خاصی ندارد بازهم متوقف شده. در حالی که حلگر ode15s فقط در نواحیای که تغییرات مهم است ریز شدهاست. این تفاوت را در دو نمودار میتوان به وضوح دید.
دستور ode23s
حلگر ode23s مشابه با دستور ode15s عمل میکند. این حلگر برای حل معادله دیفرانسیل سخت (Stiff) بکار میرود. طرز نوشتار و استفاده از این دستور مشابه با ode15s است.
[t,y] = ode23s(odefun,tspan,y0)
برای حل معادلات Stiff این حلگر مشابه با ode15s عمل کرده و ممکن است دقت آن کمی بالاتر باشد.
دستور de23tb
این دستور مشابه با حلگر ode23s است با این تفاوت که مشتق گیری برگشتی را نیز در محاسبات لحاظ میکند. به همین دلیل ممکن است در برخی موارد، پاسخ بهتری نسبت به ode23s بدهد. طرز استفاده و نوشتار کلی این دستور به صورت زیر است.
[t,y] = ode23tb(odefun,tspan,y0)
حال برای درک بهتر تفاوت بین این دستورات، به مثال زیر دقت کنید. در این مثال معادله دیفرانسیل Stiff را با حلگرهای ode45، ode15s، ode23s و ode23tb حل میکنیم. مدت زمان هر حلگر را نیز در عنوان نمودار آن مینویسیم.
tic
[t1,y1] = ode45(@odefun5,[0 2000],[2 0]);
s1 = toc; tic
[t2,y2] = ode15s(@odefun5,[0 2000],[2 0]);
s2 = toc; tic
[t3,y3] = ode23s(@odefun5,[0 2000],[2 0]);
s3 = toc; tic
[t4,y4] = ode23tb(@odefun5,[0 2000],[2 0]);
s4 = toc; tic
subplot(2,2,1)
plot(t1,y1(:,1),'o','MarkerSize',5)
grid on
title([num2str(s1),' sec. ',' ode45',]);
xlabel('x');
subplot(2,2,2)
plot(t2,y2(:,1),'o','MarkerSize',5)
grid on
title([num2str(s2),' sec. ',' ode15s',]);
xlabel('x');
subplot(2,2,3)
plot(t3,y3(:,1),'o','MarkerSize',5)
grid on
title([num2str(s3),' sec. ',' ode23s',]);
xlabel('x');
subplot(2,2,4)
plot(t4,y4(:,1),'o','MarkerSize',5)
grid on
title([num2str(s4),' sec. ',' ode23tb',]);
xlabel('x');
مشاهده میکنید که حلگر ode45 برای این مسئله اصلا مناسب نیست. حلگرهای Stiff نیز تقریبا مشابه باهم عمل کردهاند.
به این ترتیب برای حل معادلات Stiff از حلگرهای ode23s یا ode15s استفاده میکنیم. برای حل معادله دیفرانسیل NonStiff نیز بهترین حلگر، ode45 است.
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) معادله دیفرانسیل زیر را با دستور ode45 در بازه 0 تا 10 با شرایط صفر حل کنید.
ode: y(3) – y” + y’ =sin(x)
تمرین دوم) دستگاه معادلات دیفرانسیل زیر را به صورت عددی (در بازه صفر تا 5) حل کنید.
Eq1: y’ = z2 – y
Eq2: z’ = 0.5y2 – z
IC’s: y(0) = 1, z(0) = 0
تمرین سوم) معادله دیفرانسیل سخت (Stiff) زیر را با دستور ode15s و دستور ode23s متلب حل کنید. بازه را از صفر تا 250 درنظر گرفته و پاسخ هر دو روش را روی هم رسم کنید.
Stiff ODE: y” – 50(1-y4)*y’ – y
جمعبندی
خب جلسه سی و نهم از سری جلسات آموزش متلب به پایان رسید. این جلسه درباره حل عددی معادله دیفرانسیل در متلب صحبت کردیم. به طور کلی حل عددی معادله دیفرانسیل در متلب به دو بخش تقسیم میشود. معادله دیفرانسیل سخت (Stiff) و غیرسخت (Nonstiff). برای حل معادله دیفرانسیل غیرسخت از حلگر ode45 و برای معادله سخت از حلگر ode15s استفاده شود. علاوه بر این، تمامی حلگرهای نرم افزار متلب مانند ode23، ode45، ode15s، ode113، ode23s و ode23t معرفی شد. بعنوان یک پیشنهاد نیز، توصیه شود که همیشه اولین انتخاب برای حل عددی ode45 باشد. چرا که قدرت و توانایی این دستور نسبت به سایر دستورات بسیار بیشتر است. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
8 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
عالی بود ممنونم
سلام و عرض ادب
خیلی خوشحالیم که ازین آموزش متلب راضی بودین.
موفق باشید!
سلام و وقت بخیر ، ممنون از آموزش خوبتون . یک سوال داشتم
یک معادله دیفرانسیل غیرخطی یک دارم که برخی از متغیرها به متغییر دیگه ای وابسته هست . که شرایط مرزی ها متفاوت است ، من چطور می توانم با روش رانگ کوتا حل کنم ؟
سلام و عرض ادب
ممنون از حسن نظرتون.
برای سوالی که پرسیدین باید عرض کنم که بستگی به معادله دیفرانسیل داره. اگر از نوع PDE هست که ابتدا باید به دو یا چند ODE تبدیل بشه و سپس با روش مناسب (مثلا رانگ کوتا) حل شه. اما اگر از نوع ODE هست بایستی با روشهایی که گفته شده به حل اون بپردازید. سعی کنید متغیرهای مستقل رو در معادله تعریف و مقداردهی کنید.
موفق باشید.
سلام
خسته نباشید
من کد مربوط به حل معادله دیفرانسیل مرتبه دوم با ode45 را در command window اجرا میکنم
(یعنی function dydt = odefun2(x,y)
dydt = [y(2); (1 – y(1)^3)*y(2) – tan(y(1)) + 1 + x];
[t, y] = ode45(@odefun2,[0 7],[0;0]);)
سپس در command window عبارت Error: Function definitions are not permitted in this context. نمایش داده میشه.
حتی وقتی بصورت یک m فایل هم اون رو run میکنم باز هم پیغام
All functions in a script must be closed with an ‘end’.
نشان داده میشه
لطفا راهنمایی کنید چکار کنم؟
سلام و عرض ادب
در این مقاله بطور کامل توضیح داده شده که بایستی تابع رو درون یک m فایل بنویسید و ذخیره کنید. سپس در Command Window اون رو با ode45 یا (سایر توابع) فراخوانی کنید. هر دو روشی که شما رفتید اشتباه هستند. به همین دلیل خطا دریافت میکنید.
موفق باشید.
سلام
من معادله دوم قسمت غیر خطی را کامل کپی کردم و تابع را هم ذخیره کردم ولی متلب ارور میده
تو خود قسمت هلپ متلب هم که مثال زده مثال هاش را که کپی میکنم و تابع را هم به یک اسم دیگه ذخیره کنم ولی وقتی اجرا میکنم باز متلب ارور میده.تابع را هم که ذخیره میکنم اول توی مای کامپیوتر به همون اسمی که نوشتم ذخیره میکنم و بعد به قسمت path متلب اضافش میکنم. لطفا راهنمایی کنید.با تشکر از سایت خوبتون.
سلام و عرض ادب
بایستی تابع رو در محل دایرکتوری متلب ذخیره کنید. دقت کنید که نام فایل با نام تابع یکسان باشه. اگر در این مورد ابهام دارید به آموزش تابع در متلب که در سایت منتشر شده مراجعه کنید.
لینک دسترسی به آموزش تابع در متلب