ایجاد توابع در متلب

Download Report

Transcript ایجاد توابع در متلب

‫فصل هفتم‪:‬‬
‫ایجاد توابع در متلب‬
‫‪Functions‬‬
‫کالس آموزش ی‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪-1-7‬مزاياي استفاده از توابع به جاي فايلهاي اسکريپت‬
‫‪ .1‬سرعت باالتر‬
‫‪ .2‬صرفه‌جويي در حافظه کامپيوتر‬
‫‪ .3‬توسعه توانايي‌هاي متلب‬
‫در حاليکه‬
‫توابع بر خالف فايلهاي اسکريپت در هنگام اجرا يکبار کامپايل شده و اجرا مي‌شوند‪‌ .‬‬
‫فايلهاي اسکريپت سطر به سطر کامپايل و اجرا مي‌گردند‪ .‬اين امر باعث افزايش سرعت‬
‫اجراي توابع در مقايسه با فايلهاي اسکريپت مي‌شود‪.‬‬
‫متغيرهاي تعريف شده در توابع پس از پايان اجراي آن از حافظه پاک مي‌شوند و بطور کلي‬
‫فضاي کاري توابع مستقل از فضاي کاري متلب است‪ .‬خصوصا در مواقعي که برنامه با‬
‫ماتريسهاي بزرگ(مانند تصاوير) کار مي‌کند بهتر است از توابع استفاده شود‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪-1-7‬مزاياي استفاده از توابع به جاي فايلهاي اسکريپت‪-‬ادامه‪-‬‬
‫اکثر دستورات اصلي متلب و جعبه‌ابزارهاي آن با استفاده از توابع نوشته شده است‪ .‬به بيان‬
‫ديگر به راحتي مي‌توان قابليتهايي که در حال حاضر در متلب وجود ندارد را با نوشتن يک‬
‫مجموعه از توابع به آن افزود‪ .‬همين امر باعث شده است که در دهه گذشته قابليتهاي‬
‫متلب در رشته‌هاي مختلف علمي و فني با سرعت چشمگيري توسعه يابد‪.‬‬
‫نکته ‪ :‬بهتر است در هنگام نوشتن يک برنامه آنرا بصورت اسکريپت بنويسيم تا اشکالزدايي آن‬
‫آسانتر باشد اما پس از کامل شده برنامه آنرا به فانکشن تبديل کنيم تا سرعت و کيفيت‬
‫آن افزايش يابد‪.‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -2-7‬تفاوتهاي توابع و فايلهاي متني‬
‫‪ .1‬فايلهاي متني سطر به سطر ترجمه و اجرا مي‌شوند اما توابع يکبار بطور کامل ترجمه‬
‫و سپس اجرا مي‌گردند‪.‬‬
‫‪ .2‬محيط کاري فايلهاي متني همان محيط کاري متلب است اما محيط کاري هر تابعي‬
‫مختص خود اوست يعني اگر متغيري در يک تابع تعريف شود تنها در آن تابع قابل‬
‫دسترس ي است و برعکس متغيرهاي تعريف شده در محيط کاري متلب در داخل توابع‬
‫تعريف شده نيستند‪ (.‬مگر اينکه بصورت عمومي تعريف شده باشند)‬
‫‪ .3‬توابع تنها از طريق آرگومانهايشان با محيط خارج در ارتباطند‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -3-7‬نحوه ايجاد توابع‬
‫تنها تفاوت ظاهري يک تابع و يک فايل متني آن است که سطر اول يک تابع با کلمه کليدي‬
‫‪ function‬شروع مي‌شود که شکل کلي آن بصورت زير است‪:‬‬
‫= ] … ‪function [argout1 , argout2,‬‬
‫)…‪funcname(argin1,argin2,‬‬
‫معرفي فانکشن در يک سطر‪%‬‬
‫راهنماي استفاده‪%‬‬
‫از اين فانکشن‪%‬‬
‫نويسنده فانکشن ‪ ،‬نسخه و سال ساخت ‪%‬‬
‫بدنه تابع‬
‫‪...‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -3-7‬نحوه ايجاد توابع‪-‬ادامه‪-‬‬
‫نکات‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫تابع ممکن است هيچ آرگومان ورودي يا خروجي نداشته باشد‪.‬‬
‫اولين سطر بعد از اعالن تابع‪ ،‬يک جمله توضيحي است که در هنگام استفاده از دستور‬
‫‪ lookfor‬در متلب مورد جستجو قرار مي‌گيرد‬
‫تمامي سطرهاي توضيحي تا نخستين سطر غير توضيحي در هنگام استفاده از دست ‌ور ‪help‬‬
‫نمايش داده ميشود‪.‬‬
‫نکته ‪:‬بهتر است هنگام نوشتن يک تابع حتما يکي دو سطر در مورد نحوه استفاده از آن و عملکرد آن‬
‫توضيح داده شود تا کاربر بتواند با استفاده از دستور ‪ help‬متلب با روش استفاده از آن‬
‫تابع و قابليتهاي آن آشنا شود‪.‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -4-7‬فرمانهاي ‪ return‬و ‪error‬‬
‫با استفاده از اين دو دستور مي‌توان اجراي يک تابع را پيش از رسيدن به انتهاي آن متوقف کرد‪ .‬تفاوت‬
‫دستور ‪ error‬با دستور ‪ return‬آن است که دستور ‪ error‬مي تواند يک پيغام خطا‬
‫نيز بمنظور آگاهسازي کاربر نمايش دهد‪.‬‬
‫مثال‪:‬‬
‫;)‘ =‪s= input( ‘Please enter a scalar value‬‬
‫‪if length (s) > 1‬‬
‫;)’!‪error(‘Error! Your input isn’’t a scalar‬‬
‫‪end‬‬
‫;)‪a= linspace( 0 , abs(s) , 100‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -5-7‬تعيين تعداد آرگومانهاي بکار رفته در حين اجرا‬
‫در متلب مي‌توان توابع را با تعداد آرگومان کمتر از تعداد آرگومان موجود در تعريف تابع نيز‬
‫فراخواني کرد‪ .‬مثال تابع ‪ size‬در متلب با دو آرگومان نوشته شده است اما با يک‬
‫آرگومان نيز قابل اجراست که البته مقدار بازگشتي به تعداد آرگومانهاي مورد استفاده‬
‫بستگي خواهد داشت‪.‬‬
‫در صورتيکه بخواهيم از تعداد آرگومانها در حين اجرا مطلع شويم بايد از توابع ‪ nargin‬و‬
‫‪ nargout‬به ترتيب براي تعداد آرگومانهاي ورودي و تعداد آرگومانهاي خروجي استفاده‬
‫کنيم‪.‬‬
‫همچنين توابع ‪ nargchk‬و ‪ nargoutchk‬تعداد آرگومانهای ورودی و خروجی را چک‬
‫می‌کنند و درصورتیکه با تعداد درخواست شده برابر نباشند پیام خطای مناسب ‌را نشان‬
‫می‌دهند‪.‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫‪ -6-7‬نکاتي در مورد توابع‬
‫‪ ‬در يک فايل مي‌توان بيش از يک تابع تعريف کرد‪ .‬در اينصورت تمامي‬
‫اين توابع مي‌توانند يکديگر را فراخواني کنند اما تنها نخستين تابع از‬
‫خارج از اين فايل قابل فراخواني است‪.‬‬
‫‪ ‬نام فايل با نام نخستين تابع آن بايد يکسان باشد‪ .‬در غير اينصورت‬
‫بمنظور اجراي تابع بايد از نام فايل به جاي نام تابع استفاده گردد که‬
‫البته کار درستي نيست‪.‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫مثال ‪ -۱-۷‬تابعی بنویسید که یک بردار(آرایه سطری یا ستونی) را از کاربر بگيرد ‌و مراحل زیر‬
‫را انجام دهد‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تعداد آرگومان ورودی و خروجی که توسط کاربر وارد شده است را چک کند و در صورتیکه تعداد‬
‫آرگومان ورودی بیشتر یا کمتر از یک و تعداد آرگومان خروجی بیشتر از یک باشد‪ ،‬پیام خطا نمایش‬
‫داده از تابع خارج شود‪.‬‬
‫در‬
‫ابعاد آرگومان ورودی را چک کند و درصورتیکه آرایه‌ای غير سطری یا غير ستونی باشد(یعنی ‌‬
‫صورتیکه به جای بردار‪ ،‬ماتریس باشد)‪ ،‬با پیام خطا از تابع خارج شود‪.‬‬
‫عبارت زیر را بر روی مقادیر ورودی اعمال نموده به عنوان خروجی بازگرداند‪.‬‬
‫‪y=2exp(4x2)+3sin(2πx)+10‬‬
‫تعداد آرگومان خروجی را چک کند و در صورتیکه برابر با صفر باشد‪ ،‬نمودار تغیيرات ‪ y‬در‬
‫مقابل ‪ x‬را رسم کند‪(.‬راهنمایی‪ :‬برای رسم نمودار از تابع )‪ plot(x,y‬استفاده کنید‪.‬‬
‫فصل هفتم‪ :‬ایجاد توابع در متلب‬
‫تکلیف ‪-1-7‬تابعی بنویسید که یک عبارت ریاض ی دلخواه را از کار ‌بر (به‬
‫ی) به عنوان آرگومان اول و یک آرایه را به‬
‫صورت یک رشته کاراکتر ‌‬
‫عنوان آرگومان دوم بگيرد و ‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫چک کند که تعداد آرگومان ورودی دقیقا دو عدد باشد(با استفاده از تابع ‪)nargchk‬‬
‫چک کند که تعداد آرگومان خروجی دقیقا یک عدد باشد‪(.‬با استفاده از تابع‬
‫‪)nargoutchk‬‬
‫چک کند که آرگومان اول حتما یک رشته کاراکتری باشد و آرگومان دوم حتما یک متغير عددی‪( .‬از‬
‫توابع ‪ isstr‬و ‪ isnumeric‬استفاده کنید)‬
‫با استفاده از تابع ‪ eval‬عبارات ریاض ی وارد شده توسط کاربر را بر روی تمامی عناصر آرایه‬
‫ورودی اعمال نموده‪ ،‬باز گرداند‪.‬‬