آموزش متلب (MATLAB)
۵۴۳ آموزش
نمایش دسته بندی ها (۵۴۳ آموزش)

ساخت تابع، با استفاده از m-file ، در متلب (MATLAB)

در متلب با استفاده از دستور inline نیز می توان تابع ساخت، اما ساخت تابع با استفاده از m-file انتخابی حرفه ای تر می باشد. معمولا برنامه نویسان حرفه ای، چارچوب برنامه را در یک فایل اصلی می نویسند و بخش های مختلف برنامه را به صورت تابع هایی می نویسند که یک یا چند ورودی را دریافت کرده و محاسبات لازم را انجام می دهند و سپس یک یا چند خروجی را بر می گردانند. برنامه نویس، عملکرد هر تابع را جداگانه چک می کند و سپس زمانی که از بابت آنها خیالش راحت شد، تمرکز اصلی خود را بر روی فایل اصلی که حاوی چارچوب برنامه می باشد، می گذارد و تنها در فایل اصلی، ارجاعاتی به توابع ساخته شده خواهد داد.

چنانچه شما هم از این شیوه استفاده کنید، پس از مدتی صاحب بانکی از توابع خواهید شد که در نوشتن برنامه های جدید، بسیار به شما کمک می کند.

با مثالی ساده، نحوه ساخت یک تابع با استفاده از m-file را شرح می دهیم :

مثال

می خواهیم تابعی به نام add بسازیم که در ورودی، دو عدد را دریافت کرده و سپس مجموع آن دو عدد را در خروجی برگرداند. ابتدا یک m-file خالی باز می کنیم و کد زیر را در آن می نویسیم :

در کد متلب بالا، کلمه function اعلام می کند که این m-file به صورت یک تابع می باشد. خروجی با نام z و دو ورودی با نام های x و y مشخص شده اند. کلمه ای که بعد از علامت تساوی قرار می گیرد (در اینجا کلمه add)، نام تابع را مشخص می کند و باید در مرحله بعد، m-file را دقیقا با همین نام ذخیره کنیم. بنابراین m-file را با نام add ذخیره می کنیم.

همان طور که مشاهده کردید، خط اول، ساختار تابع را مشخص می کند و در خط های بعدی، تنها کاری که باید انجام دهیم، این است که روابط بین ورودی ها و خروجی را تعریف کنیم که در این مثال، تنها یک جمع ساده می باشد.

پس از ذخیره کردن m-file ، دیگر کاری با آن نداریم. باید دقت کنید که اگر بخواهید این m-file را با گزینه Save and run در بالای پنجره، اجرا کنید، با یک خطا مواجه می شوید، زیرا این m-file یک تابع است و باید ورودی هایی برای آن تعریف کنیم.

اکنون باید تابع ساخته شده را تست کنیم. دستور زیر را در پنجره Command می نویسیم (و یا در یک m-file دیگر) :

نتیجه :

نکته

باید m-file تابع، درون Current folder و یا سایر مسیرهای مشخص شده برای نرم افزار متلب باشد ( کلید شماره 177 ). در غیر این صورت، متلب یک پیام خطا را نمایش می دهد. این پیام خطا، به این دلیل است که متلب نمی تواند m-file با نام add را پیدا کند (فایل add.m را پیدا نمی کند).

نکته

در دستور فوق مشاهده کردیم که نام هایی که برای ورودی و خروجی تابع add استفاده کردیم (A و B و C)، با نام های درون خود کدهای تابع add ، متفاوت است (x و y و z). بنابراین احتیاجی نیست که نگران نام های به کار رفته در ساختار تابع باشید و از هر نام دلخواهی برای ارجاع به تابع می توانید استفاده کنید.

نویسنده علیرضا گلمکانی
شماره کلید 15
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 35 34 1
mjm
۱۳۹۵/۰۶/۰۷
۰۷:۱۰

سلام دوستان
واقعا از شما تشکر می کنم از سایت عالیتون.
چون دوستتون دارم و با سایتتون حال می کنم می خواستم یه پیشنهاد کوچولو بدم،
رنگ بندی سایتتون می تونه خیلی بهتر از این باشه 
و همچنین فرم و نحوه قرار گیری اشیا به زیبایی سایت خیلی کمک می کنه.
بازم ممنون 
ان شاءالله خدا خیرتون بده و موفق باشید
یا علی

رضا
۱۳۹۵/۰۶/۱۹
۰۲:۵۰

سلام
واقعا سایت خوب، کاربردی و "کار راه بنداز" راه انداختین    
واقعا ممنون 
امیدوارم همیشه موفق و سربلند و هم چنان "کار راه بنداز" باشین   

سهراب
۱۳۹۵/۰۶/۲۷
۰۱:۳۴

خیلی ممنون بابت این آموزش مفید

ali
۱۳۹۵/۰۷/۰۵
۱۳:۴۸

عالی هستین عزیزان

مازیار
۱۳۹۵/۰۸/۰۸
۱۳:۳۶

سلام
تشکر
عالی بود و کارم راه افتاد
فقط یه پیشنهاد داشتم و اونم اینکه ظاهر سایتتون خیلی کودکانه هستش. شاید اگه یکم بهش برسین و از چند گرافیست و طراح استفاده کنین خیلی خوب باشه.
باز هم تشکر

navid
۱۳۹۵/۰۸/۲۳
۱۱:۴۵

واقعا از سایت خوبتون ممنونم

نوشین
۱۳۹۵/۰۹/۰۹
۰۴:۰۸

سایتتون عالیه.ممنون ام.

شیما
۱۳۹۵/۱۲/۰۵
۱۱:۲۱

سلام
لطفا اگه میشه منو راهنمایی کنید. من میخوام 10 تا نقطه را به صورت تصادفی داخل یه مربع 5*5 قرار بدم و مختصات x و y اونهارو به دست بیارم حالا چجوری باید براش تابع بنویسم و اجراش کنم؟؟

admin
۱۳۹۵/۱۲/۰۵
۱۱:۴۰

سلام.
لطفا سوالات را در مبحث های با موضوع مشابه و یا در انجمن سایت مطرح نمایید.
مختصات x مربع را از 0 تا 5 در نظر می گیریم و مختصات y مربع را نیز از 0 تا در 5 در نظر می گیریم.
اکنون با استفاده از دستور rand () که برای تولید اعداد تصادفی در متلب (MATLAB) به کار می رود، در یک حلقه for ()، مختصات x و y هر نقطه را به صورت یک عدد تصادفی بین 0 تا 5 تولید می کنیم و نقطه را بر اساس دو مختصات x و y آن رسم می کنیم (البته اگر ترسیم شکل مد نظرتان بوده).
در واقع، حلقه دارای 10 گام خواهد بود که در هر گام، یک نقطه تصادفی جدید می سازیم. 
برای نمایش یک یا چند نقطه در شکل، را بخوانید.

شیما
۱۳۹۵/۱۲/۰۵
۱۲:۲۹

خیلی خیلی ممنون

neg-eng
۱۳۹۵/۱۲/۰۵
۱۳:۱۲

ممنونم ولی من میخوام با استفاده از ساخت تابع این کار را انجام بدم نه حلقه ی for ؟؟؟؟

admin
۱۳۹۵/۱۲/۰۵
۱۳:۴۴

سلام.
برای ساخت تابع، همین مبحث را بخوانید.

infinity90
۱۳۹۶/۰۳/۰۵
۱۷:۴۰

 سلام.
از سایت خوبتون بسیار ممنون. کارمو خیلی راه انداخت واسه همین بر خودم لازم دیدم که ازتون تشکر کنم.

محمدی
۱۳۹۶/۰۳/۲۱
۲۰:۱۴

سلام ممنون میشم کمکم کنید تا این برنامه رو بتونم ران کنم
همش بهم خطا میده لاین 1 و لاین 7
من تازه کارم و این مثالو یکی از استادام نوشته ولی توی متلب نمیتونم رانش کنم
برام خیلی مهمه میشه کمکم کنید.
ممنون

ایران
۱۳۹۶/۰۳/۳۰
۱۰:۴۳

سلام ممنون
ساده و قابل فهم توضیح دادین، خدا خیرتون بده

حسن
۱۳۹۶/۰۴/۰۴
۱۹:۵۸

سلام و درود بر شما، سایتتان عالیه واقعا براتون آرزوی موفقیت و سلامتی دارم. با سپاس

sima
۱۳۹۶/۰۵/۰۷
۱۰:۵۰

با عرض سلام 
من یک function را در متلب مینویسم ولی با ارور  require more input arguments to run  مواجه میشوم. ممنون میشم کمکم کنید.


admin
۱۳۹۶/۰۵/۰۸
۱۰:۳۱

سلام.
باید این کدها را در یک فایل با نام myfun.m ذخیره کنید (که البته در یکی از مسیرهای تعریف شده برای متلب (MATLAB) قرار گرفته باشد).
سپس در یک فایل دیگر، کد زیر را اجرا کنید :


که نتیجه آن به صورت زیر می باشد :


اگر مشکل برطرف نشد، ممکن است قبلا تابعی با نام myfun تعریف شده باشد، بنابراین نام جدیدی را برای تابع انتخاب کنید که امکان تکراری بودن آن، کم باشد.

sh
۱۳۹۶/۰۶/۰۴
۱۳:۴۶

عالی ممنون

زهرا
۱۳۹۶/۰۹/۱۵
۱۳:۰۴

عالی

r
۱۳۹۷/۰۲/۱۹
۰۴:۰۸

سلام. ممنون از سایت خوبتون
چند وقتی هست از اطلاعات این  سایت استفاده میکنم و همیشه به کمکم اومده ، امیدوارم همیشه اینطور باشه

محمد
۱۳۹۷/۰۳/۱۳
۱۵:۱۸

سلام
با تشکر سایت خیلی خوبتون.
چجوری میشه از function بیشتر از دو تا خروجی مختلف (برای مثال یک اسکالر و دو ماتریس با اندازه مختلف) گرفت؟

محمد
۱۳۹۷/۰۶/۱۳
۱۵:۵۰

سلام..ببخشید من مبخاستم برنامه ای بنویسم که با دریافت m و n از ورودی ماتریسی به فرم زیر تولید کنه...اگه راهنماییم کنید ممنون میشم....

   1        1
      1        2   
     1        3  

   2        1
   2        2
   2        3

3        1
3        2
3        3

4        1
4        2
4        3

مریم
۱۳۹۷/۰۷/۲۷
۰۰:۴۷

سلام وقت بخیر ببخشید من یکسری داده ی بارش زمینی و بارش ماهواره به علاوه مختصات جغرافیایی ایستگاه ها را دارم می خواهم مقدار خطای بین داده های بارش زمینی و بارش ماهواره به حداقل برسد و برای انجام کارم می خواهم از الگوریتم های فراکاووشی استفاده کنم اما تابع هدفم را نمی توانم مشخص کنم خواهش میکنم برای مشخص کردن تابع هدفم کمکم کنید خیلی ضروری هست ممنون میشم اگر پاسخ را به ایمیلم بفرستید. با تشکر از سایت خوبتون 

456
۱۳۹۷/۰۷/۲۷
۱۵:۴۹

آقا سلام
ببخشید من خودم و کشتم ولی نمیتونم این مشکل به ظاهر ساده رو حل کنم
یه تابع تعریف کردیم این شکلیه :


function [W,b]= trainheb(S,t)
W=0;
b=0;
for i=1:1:25
    W(i)=W(i)+(S(i).*t(i));
    b=b+t(i);
    disp(W(i))
    disp(b)
end
end


حالا این خطا رو میده :

Error using trainheb (line 5)
Not enough input arguments.

حالا چ کنم ؟؟؟؟!!!! ورودی ها که همینه دیگه

ali
۱۳۹۷/۰۸/۰۸
۲۱:۳۱

سلام من یه برنامه با ramp , ustepمیخام بنویسم و برنامه فانکشن رو هم مینویسم و سیو میکنم ولی باز نمیتونم برنامه اصلی رو اجرا کنم راهنمایی کنید

یه ایرانی
۱۳۹۷/۰۸/۲۴
۱۰:۰۷

فانکشن رو نوشتم!
اما حالا چه طوری ذخیره اش کنم؟
می خوام جای دیگه استفاده کنم، پیغام Undefined میده!!

admin
۱۳۹۷/۰۸/۲۴
۱۲:۵۳

سلام.
باید m-file تابع، درون Current folder و یا سایر مسیرهای مشخص شده برای نرم افزار متلب باشد (). در غیر این صورت، متلب یک پیام خطا را نمایش می دهد. این پیام خطا، به این دلیل است که متلب نمی تواند m-file با نام add را پیدا کند (فایل add.m را پیدا نمی کند).

مهدی
۱۳۹۸/۰۲/۱۸
۱۶:۵۶

سلام من میخوام یه سیگنال مثلا سینوسی رو تو متلب بنویستم و بعد با چند تا شرط زیر اونو محدود کنم.ولی متلب اررو میده و y رو مقداردهی نمیکنه.
if k<0
y=0
end
if k>=0 &K<=1
y=k
end
if k>1
y=1
end

مهدی
۱۳۹۹/۰۲/۱۰
۱۴:۲۴

سلام خسته نباشید
ببخشید یک سوال داشتم،کاربرد توابع  tofloat ,  paddedsize  در فیلترینگ تصویر در حوزه فرکانس چیست؟
با تشکر از شما

امیرعلی
۱۳۹۹/۰۵/۲۰
۱۲:۰۸

سلام دوستان
ممنون از سایت مفیدتون
من یک تابع دو متغیره تعریف کردم که وقتی بهش یکی یکی مقدار میدم درست کار میکنه اما توی رسم کردنش مشکل دارم یعنی وقتی بهش چندین نقطه میدم (با دستور linspace) ارور میده
فکر کنم ارورش به این خاطر هست که به جای x و y تابع دارم بردار میذارم و x و y در واقع باید عدد باشند 
کسی میتونه کمک کنه چجوری این ارور را رفع کنم؟
خیلی ممنون

Z
۱۴۰۰/۰۲/۱۶
۱۹:۴۹

چطور تابعی بنویسیم در متلب ک ورودی های ان پارامتر های فیزیکی و خروجیش ماتریس هموگرافی باشد

هادی
۱۴۰۰/۰۵/۲۳
۱۳:۲۵

سلام و عرض ادب
ضمن تشکر از سایت خوبتون
یک تابع را بصورت m فایل تعریف کردیم .میخواستم ببینم چطور میشه که در خود تابع یک متغییر سیمبولیک تعریف کرد چون بعضی مواقع نیاز هست مقدار تابع بصورت پارامتریک محاسبه شود.از دستور syms در تابع استفاده کرد اما جواب نداد.ممنون از راهنمایی شما

Z
۱۴۰۰/۰۹/۱۲
۱۵:۲۲

سلام میشه در مورد این کد کمکم کنید
تابعی بنویسید که دو ماتریس دوعددصحیح به عنوان ورودی دریافت کند فرض کنید ماتریس‌های ورودیa,bباشندتابع درایه سطرmوستونnدوماتریس راچک میکند اگر باهم برابربوندعددیک واگرنبودند عددصفر را برمیگرداند

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)