



آموزش برنامه نویسی متلب
موضوع:توابع در متلب
جلسه: پانزدهم
مدرس : مدرسین جاوا پرو
متلب را ساده،آسان و شیرین بنوشید!!!
این جلسه به بحث مهم توابع می پردازیم. تا این جا از بسیاری از توابع از پیش نوشته شده ی متلب استفاده کرده ایم. برای مثال تابع sin(x)، که جزو کتابخانه توابع ریاضی متلب می باشد و x را به عنوان ورودی می -گیرد که به آن آرگومان ورودی نیز می گویند و مقداری را برمی گرداند که به آن آرگومان خروجی گفته می-شود. برخی توابع نیز می توانند بیش از یک آرگومان ورودی یا خروجی داشته باشند. قبلاً دیده بودیم که به جای استفاده از برخی توابع، خودمان نیز می توانیم با کمک دستورات و توابع دیگر به مطلوب خود دست-یابیم. بنابراین بسیاری از توابع از یک سری توابع و دستورات دیگر در محاسبات خود استفاده می کنند. این امکان وجود دارد که توابع متلب را گسترش داد. و این باعث شده که کتابخانه ها و توابع مختلفی توسط افراد مختلف نوشته شده و در اختیار عموم قرار بگیرد.
پیش از این با فایل های متنی آشنا شده ایم. توابع نیز شباهت زیادی به فایل های متنی دارند ما تفاوت های اساسی نیز باهم داشته که به برخی اشاره می کنیم:
- بر خلاف فایل های متنی، توابع در متلب ابتدا به طور کامل کامپایل شده و سپس اجرا می شوند.
- سرعت اجرای توابع به دلیل گفته شده در مورد قبل بالاتر از فایل های متنی است.
- فضای کاری توابع و متلب متفاوت است، در حالی که فایل های متنی از همان فضای کاری متلب استفاده می کنند. این بدان معناست که چنانچه یک متغیر در فایل متنی تعریف شود، در فضای کاری نیز ایجاد شده و همچنین در فایل های متنی از متغیرهای فضای کاری می توان استفاده نمود. اما در توابع،متغیرها همگی به طور محلی تعریف می شوند. یعنی محدوده تعریف آن ها فقط در داخل فایل توابع می باشد.
- آرگومان های توابع تنها راه ارتباط فضای کاری توابع و متلب می باشد.
برای ایجاد تابع یک فایل متنی ایجاد کنید:
| >>edit myfunction |
نحوه ایجاد یک تابع به شکل زیر می باشد:
| function [argout1 argout 2,…] = function_name(argin1, argin2 ,…) % توضیحات دستورات ... end |
کلمه function در بالا یک کلمه کلیدی است و معرف یک تابع است. نام دلخواه تابع خود را به جای function_name می نویسیم. در مورد نام توابع به نکات زیر دقت شود:
- نام تابع فقط می تواند شامل حروف لاتین، اعداد و "_" باشد. ولی نمی توان با یک عدد شروع شود.
- نام فایلی که در آن تابع نوشته می شود می بایست هم نام با نام تابع باشد.
- نام تابع نمی تواند کلمات کلیدی یا نام توابع دیگر باشد، مثلاً sin. اما از آنجایی که متلب case sensitive است، یعنی به کوچک و بزرگ بودن حروف حساس است، می توان از این قبیل نام گذاری ها انجام داد: Sin(), _sin(), SIN(),… .
اگر تابع ورودی یا خروجی نداشته باشد، به شکل زیر ساده خواهد شد:
| function myfunction end |
اولین خط فایل متنی باید خط اول تعریف تابع باشد. در غیر این صورت متلب به جای نام تابع نام برنامه را به عنوان نام تابع درنظر می گیرد.
- مثال:
تابعی بنویسید که دو عدد را بگیرد و میانگین آن دو را برگرداند.
یک فایل متنی با عنوان average ایجاد کرده و کدهای زیر را درآن می نویسیم:
| function ave = average(x,y) ave = (x + y)/2; end |
برای اجرای برنامه در خط فرمان عبارت زیررا می نویسیم:
| >>a = average(1,2) a = 1.5000 |
- نکات مهم:
چنانچه در اولین خط تعریف تابع توضیحاتی را یادداشت کنید، در هنگام جستجوی دستورات با lookfor، متلب از این خط برای جستجو استفاده می کند. اولین خطوط توضیحات برنامه تا اولین خط غیرتوضیحی در نتیجه دستور help myfuntion ظاهر می شود. مثال:
function ave = average(x,y) |
در پنجره فرمان می نویسیم:
><help average >>lookfor miangin |
در توابعی که قبلاً آموخته ایم برخی توابع با تعداد آرگومان های ورودی یا خروجی متفاوتی به کار می رفتند، مانند:
| diag(A), diag([a1 a2 … an]) |
به ازای ورودی ماتریس یک بردار، و به ازای ورودی بردار یک ماتریس خروجی این دستور بود. برای نوشتن چنین برنامه هایی، دستوات زیر را می توان به کاربرد:
- narargin:
تعداد آرگومان های واردشده هنگام فراخوانی تابع را برمی گرداند. این دستور فقط در داخل تابع استفاده می شود.
| function ave = average(x,y) disp('number of inputs: '); disp(nargin); ave = (x + y)/2; end |
مثال فوق تعداد آرگومان های ورودی تابع را نشان می دهد. اگر تابع فوق را با تعداد آرگومان کمتر یا بیشتر تعریف شده فراخوانی کنیم، با پیغام خطا از سوی متلب مواجه می شویم، اما اگر بخواهیم تابع خود را با تعداد متغیرهای ورودی متغیر تعریف کنیم از varargin استفاده می کنیم که در ادامه توضیح داده-خواهدشد. nargin(‘function_name’) تعداد آرگومان های ورودی تابع را برمی گرداند.
- varargin:
این عبارت در داخل تعریف متغیرهای ورودی تابع به کار می رود، در صورت استفاده، به این معناست که تابع هر تعداد ورودی را می تواند بپذیرد. با فراخوانی تابع، یک آرایه سلول به ابعاد 1*N با نام varargin تشکیل می شود.
نحوه استفاده از آن در مثال زیر توضیح داده می شود.
- مثال:
تابعی بنویسید که تعداد آرگومان های ورودی به آن را برگرداند.
| function number_of_args(varargin) s=['number of inputs: ' num2str(nargin)]; disp(s) end |
در پنجره فرمان دستورهای زیر را برای آزمایش تابع اجرا کنید:
| >>number_of_args number of inputs: 0 >>number_of_args([1 2]) number of inputs: 1 >>number_of_args([1 2],'name') number of inputs: 2 |
می بینیم که به راحتی این امکان وجود دارد هر تعداد ورودی دلخواه با نوع داده متفاوت به عنوان ورودی تابع داده شود.
- نکته : اگر تابعی تعداد ورودی نامشخص داشته باشد، nargin(‘function_name’) -1 را برمی گرداند.
- nargout :
تعداد خروجی های یک تابع را برمی گرداند و فقط در داخل تابع استفاده می شود.
- مثال:
تابعی با دو ورودی عددی بنویسید که اگر با یک آرگومان خروجی فراخوانی شود، قدرمطلق اختلاف آن دو را برگرداند، و چنانچه با دو خروجی فراخوانی شود، مقدار خروجی دوم برابر با تفریق ورودی اول از دوم باشد:
| function [a,b] = Dif(x,y) a = abs(y-x); if varargout == 2 b = y – x; end |
پیروز و موفق باشید
تدریس خصوصی آنلاین و از راه دور متلب(MATLAB) با مدرس های حرفه ای و با تجربه [اینجا کـــــلیک کــــنید]
جلسه پانزدهم | توابع در متلب
فرمت:PDF (لطفا در صورت خرابی لینک دانلود گزارش بدید که لینک اصلاح کنیم)
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 10 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی می باشد
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |


![مشاهده لیست دوره های مرتبط با جاوا و Spring [کلیک کنید]](https://dl.javapro.ir/image/marketing/hamdely_b.png)
![مشاهده جزییات و سرفصل های دوره Spring Batch [اینجا کلیک کنید]](https://dl.javapro.ir/spring_batch/springbatch_pop.png)


![مشاهده سرفصل ها و ثبت نام در دوره Spring Boot جاواپرو [کلیک کنید]](https://dl.javapro.ir/image/marketing/banerday1403springboot.png)
























.png)
-min.png)
-min.png)
-min.png)


-min.png)









-min.png)

.jpg)


