ساخت تابع، با استفاده از 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). بنابراین احتیاجی نیست که نگران نام های به کار رفته در ساختار تابع باشید و از هر نام دلخواهی برای ارجاع به تابع می توانید استفاده کنید.
mjm سلام دوستان
واقعا از شما تشکر می کنم از سایت عالیتون.
چون دوستتون دارم و با سایتتون حال می کنم می خواستم یه پیشنهاد کوچولو بدم،
رنگ بندی سایتتون می تونه خیلی بهتر از این باشه
و همچنین فرم و نحوه قرار گیری اشیا به زیبایی سایت خیلی کمک می کنه.
بازم ممنون
ان شاءالله خدا خیرتون بده و موفق باشید
یا علی
رضا سلام
واقعا سایت خوب، کاربردی و "کار راه بنداز" راه انداختین 
واقعا ممنون
امیدوارم همیشه موفق و سربلند و هم چنان "کار راه بنداز" باشین
سهراب خیلی ممنون بابت این آموزش مفید
ali عالی هستین عزیزان
مازیار سلام
تشکر
عالی بود و کارم راه افتاد
فقط یه پیشنهاد داشتم و اونم اینکه ظاهر سایتتون خیلی کودکانه هستش. شاید اگه یکم بهش برسین و از چند گرافیست و طراح استفاده کنین خیلی خوب باشه.
باز هم تشکر
navid واقعا از سایت خوبتون ممنونم
نوشین سایتتون عالیه.ممنون ام.
شیما سلام
لطفا اگه میشه منو راهنمایی کنید. من میخوام 10 تا نقطه را به صورت تصادفی داخل یه مربع 5*5 قرار بدم و مختصات x و y اونهارو به دست بیارم حالا چجوری باید براش تابع بنویسم و اجراش کنم؟؟
admin سلام.
لطفا سوالات را در مبحث های با موضوع مشابه و یا در انجمن سایت مطرح نمایید.
مختصات x مربع را از 0 تا 5 در نظر می گیریم و مختصات y مربع را نیز از 0 تا در 5 در نظر می گیریم.
اکنون با استفاده از دستور rand (کلید شماره 21) که برای تولید اعداد تصادفی در متلب (MATLAB) به کار می رود، در یک حلقه for (کلید شماره 30)، مختصات x و y هر نقطه را به صورت یک عدد تصادفی بین 0 تا 5 تولید می کنیم و نقطه را بر اساس دو مختصات x و y آن رسم می کنیم (البته اگر ترسیم شکل مد نظرتان بوده).
در واقع، حلقه دارای 10 گام خواهد بود که در هر گام، یک نقطه تصادفی جدید می سازیم.
برای نمایش یک یا چند نقطه در شکل، کلید شماره 151 را بخوانید.
شیما خیلی خیلی ممنون
neg-eng ممنونم ولی من میخوام با استفاده از ساخت تابع این کار را انجام بدم نه حلقه ی for ؟؟؟؟
admin سلام.
برای ساخت تابع، همین مبحث را بخوانید.
infinity90 سلام.
از سایت خوبتون بسیار ممنون. کارمو خیلی راه انداخت واسه همین بر خودم لازم دیدم که ازتون تشکر کنم.
محمدی سلام ممنون میشم کمکم کنید تا این برنامه رو بتونم ران کنم
همش بهم خطا میده لاین 1 و لاین 7
من تازه کارم و این مثالو یکی از استادام نوشته ولی توی متلب نمیتونم رانش کنم
برام خیلی مهمه میشه کمکم کنید.
ممنون
<?php
function [c,b,s] = eqn1(x,t,u,DuDx)
%EQN1: MATLAB function M-file that specifies
%a PDE in time and one space dimension.
c = 1;
b = DuDx;
s=0;
function [pl,ql,pr,qr] = bc1(xl, ul, xr ,ur,t)
%BC1: MATLAB function M-file that specifies boundary conditions
%for a PDE in time and one space dimension.
pl = ul;
ql = 0;
pr = ur-1;
qr=0;
function value = initial1(x)
%INITIAL1: MATLAB function M-file that specifies the initial condition
%for a PDE in time and one space dimension.
value = 2*x/(1+x^2);
%PDE1: MATLAB script M-file that solves and plots
%solutions to the PDE stored in eqn1.m
m = 0;
% NOTE: m=0 specifies no symmetry in the problem. Taking
% m=1 specifies cylindrical symmetry, while m=2 specifies
% spherical symmetry.
%
% Define the solution mesh
x = linspace(0,1,20);
t = linspace(0,2,10);
%Solve the PDE
u = pdepe(m,@eqn1,@initial1,@bc1,x,t);
%Plot solution
surf(x,t,u);
title('Surface plot of solution');
xlabel('Distance x');
ylabel('Time t');
figure
plot(x,u(1,:),'erase','xor')
for k=2:length(t)
set(fig,'xdata',x,'ydata',u(k,:))
pause(.5)
end
sima
مریم
456
ali
یه ایرانی
مهدی
Z
Z