ساخت تابع، با استفاده از 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). بنابراین احتیاجی نیست که نگران نام های به کار رفته در ساختار تابع باشید و از هر نام دلخواهی برای ارجاع به تابع می توانید استفاده کنید.
سلام دوستان
واقعا از شما تشکر می کنم از سایت عالیتون.
چون دوستتون دارم و با سایتتون حال می کنم می خواستم یه پیشنهاد کوچولو بدم،
رنگ بندی سایتتون می تونه خیلی بهتر از این باشه
و همچنین فرم و نحوه قرار گیری اشیا به زیبایی سایت خیلی کمک می کنه.
بازم ممنون
ان شاءالله خدا خیرتون بده و موفق باشید
یا علی
سلام
واقعا سایت خوب، کاربردی و "کار راه بنداز" راه انداختین
واقعا ممنون
امیدوارم همیشه موفق و سربلند و هم چنان "کار راه بنداز" باشین
خیلی ممنون بابت این آموزش مفید
عالی هستین عزیزان
سلام
تشکر
عالی بود و کارم راه افتاد
فقط یه پیشنهاد داشتم و اونم اینکه ظاهر سایتتون خیلی کودکانه هستش. شاید اگه یکم بهش برسین و از چند گرافیست و طراح استفاده کنین خیلی خوب باشه.
باز هم تشکر
واقعا از سایت خوبتون ممنونم
سایتتون عالیه.ممنون ام.
سلام
لطفا اگه میشه منو راهنمایی کنید. من میخوام 10 تا نقطه را به صورت تصادفی داخل یه مربع 5*5 قرار بدم و مختصات x و y اونهارو به دست بیارم حالا چجوری باید براش تابع بنویسم و اجراش کنم؟؟
سلام.
لطفا سوالات را در مبحث های با موضوع مشابه و یا در انجمن سایت مطرح نمایید.
مختصات x مربع را از 0 تا 5 در نظر می گیریم و مختصات y مربع را نیز از 0 تا در 5 در نظر می گیریم.
اکنون با استفاده از دستور rand () که برای تولید اعداد تصادفی در متلب (MATLAB) به کار می رود، در یک حلقه for ()، مختصات x و y هر نقطه را به صورت یک عدد تصادفی بین 0 تا 5 تولید می کنیم و نقطه را بر اساس دو مختصات x و y آن رسم می کنیم (البته اگر ترسیم شکل مد نظرتان بوده).
در واقع، حلقه دارای 10 گام خواهد بود که در هر گام، یک نقطه تصادفی جدید می سازیم.
برای نمایش یک یا چند نقطه در شکل، را بخوانید.
خیلی خیلی ممنون
ممنونم ولی من میخوام با استفاده از ساخت تابع این کار را انجام بدم نه حلقه ی for ؟؟؟؟
سلام.
برای ساخت تابع، همین مبحث را بخوانید.
سلام.
از سایت خوبتون بسیار ممنون. کارمو خیلی راه انداخت واسه همین بر خودم لازم دیدم که ازتون تشکر کنم.
سلام ممنون میشم کمکم کنید تا این برنامه رو بتونم ران کنم
همش بهم خطا میده لاین 1 و لاین 7
من تازه کارم و این مثالو یکی از استادام نوشته ولی توی متلب نمیتونم رانش کنم
برام خیلی مهمه میشه کمکم کنید.
ممنون
سلام ممنون
ساده و قابل فهم توضیح دادین، خدا خیرتون بده
سلام و درود بر شما، سایتتان عالیه واقعا براتون آرزوی موفقیت و سلامتی دارم. با سپاس
با عرض سلام
من یک function را در متلب مینویسم ولی با ارور require more input arguments to run مواجه میشوم. ممنون میشم کمکم کنید.
سلام.
باید این کدها را در یک فایل با نام myfun.m ذخیره کنید (که البته در یکی از مسیرهای تعریف شده برای متلب (MATLAB) قرار گرفته باشد).
سپس در یک فایل دیگر، کد زیر را اجرا کنید :
که نتیجه آن به صورت زیر می باشد :
اگر مشکل برطرف نشد، ممکن است قبلا تابعی با نام myfun تعریف شده باشد، بنابراین نام جدیدی را برای تابع انتخاب کنید که امکان تکراری بودن آن، کم باشد.
عالی ممنون
عالی
سلام. ممنون از سایت خوبتون
چند وقتی هست از اطلاعات این سایت استفاده میکنم و همیشه به کمکم اومده ، امیدوارم همیشه اینطور باشه
سلام
با تشکر سایت خیلی خوبتون.
چجوری میشه از function بیشتر از دو تا خروجی مختلف (برای مثال یک اسکالر و دو ماتریس با اندازه مختلف) گرفت؟
سلام..ببخشید من مبخاستم برنامه ای بنویسم که با دریافت m و n از ورودی ماتریسی به فرم زیر تولید کنه...اگه راهنماییم کنید ممنون میشم....
سلام وقت بخیر ببخشید من یکسری داده ی بارش زمینی و بارش ماهواره به علاوه مختصات جغرافیایی ایستگاه ها را دارم می خواهم مقدار خطای بین داده های بارش زمینی و بارش ماهواره به حداقل برسد و برای انجام کارم می خواهم از الگوریتم های فراکاووشی استفاده کنم اما تابع هدفم را نمی توانم مشخص کنم خواهش میکنم برای مشخص کردن تابع هدفم کمکم کنید خیلی ضروری هست ممنون میشم اگر پاسخ را به ایمیلم بفرستید. با تشکر از سایت خوبتون
آقا سلام
ببخشید من خودم و کشتم ولی نمیتونم این مشکل به ظاهر ساده رو حل کنم
یه تابع تعریف کردیم این شکلیه :
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.
حالا چ کنم ؟؟؟؟!!!! ورودی ها که همینه دیگه
سلام من یه برنامه با ramp , ustepمیخام بنویسم و برنامه فانکشن رو هم مینویسم و سیو میکنم ولی باز نمیتونم برنامه اصلی رو اجرا کنم راهنمایی کنید
فانکشن رو نوشتم!
اما حالا چه طوری ذخیره اش کنم؟
می خوام جای دیگه استفاده کنم، پیغام Undefined میده!!
سلام.
باید 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 در واقع باید عدد باشند
کسی میتونه کمک کنه چجوری این ارور را رفع کنم؟
خیلی ممنون
چطور تابعی بنویسیم در متلب ک ورودی های ان پارامتر های فیزیکی و خروجیش ماتریس هموگرافی باشد
سلام و عرض ادب
ضمن تشکر از سایت خوبتون
یک تابع را بصورت m فایل تعریف کردیم .میخواستم ببینم چطور میشه که در خود تابع یک متغییر سیمبولیک تعریف کرد چون بعضی مواقع نیاز هست مقدار تابع بصورت پارامتریک محاسبه شود.از دستور syms در تابع استفاده کرد اما جواب نداد.ممنون از راهنمایی شما
سلام میشه در مورد این کد کمکم کنید
تابعی بنویسید که دو ماتریس دوعددصحیح به عنوان ورودی دریافت کند فرض کنید ماتریسهای ورودیa,bباشندتابع درایه سطرmوستونnدوماتریس راچک میکند اگر باهم برابربوندعددیک واگرنبودند عددصفر را برمیگرداند