• مقدمه ای بر متلب. V.G. Potemkin. نحوه نوشتن توابع در متلب

    دستورالعمل

    در محیط متلب چندین حالت کار وجود دارد. ساده ترین کار این است که دستورات را مستقیماً در پنجره فرمان وارد کنید ( پنجره فرمان).
    اگر در رابط برنامه قابل مشاهده نیست، باید آن را باز کنید. شما می توانید پنجره فرمان را از طریق منو پیدا کنید دسکتاپ -> پنجره فرمان.
    به عنوان مثال، بیایید دستورات "x = ; y = sqrt(x); plot(y);" را یکی پس از دیگری وارد این پنجره کرده و کلید "Enter" را فشار دهیم ( وارد). برنامه فوراً متغیرهای X را ایجاد می کند، یک متغیر Y ایجاد می کند و مقادیر آن را برای یک تابع معین محاسبه می کند و سپس نمودار آن را می سازد.
    با استفاده از فلش های صفحه کلید "بالا" و "پایین" در پنجره فرمان می توانیم بین تمام دستورات وارد شده جابجا شده و در صورت لزوم بلافاصله آنها را تغییر داده و با فشردن مجدد Enter محیط متلب را برای اجرا ارسال کنیم.
    راحت؟ بی شک. و مهمتر از همه - خیلی سریع. همه این اقدامات چند ثانیه طول می کشد.
    اما اگر به سازماندهی پیچیده تری از تیم ها نیاز دارید چه؟ اگر به اجرای چرخه ای برخی از دستورات نیاز دارید؟ وارد کردن دستورات به صورت دستی در یک زمان و سپس جستجوی طولانی مدت آنها در تاریخ می تواند بسیار خسته کننده باشد.

    برای ساده کردن زندگی یک دانشمند، مهندس یا دانشجو، پنجره ویرایشگر ( ویرایشگر). بیایید پنجره ویرایشگر را از طریق منو باز کنیم دسکتاپ -> ویرایشگر.
    در اینجا می توانید متغیرهای جدید ایجاد کنید، نمودار بسازید، برنامه بنویسید (اسکریپت)، اجزایی برای تبادل با محیط های دیگر ایجاد کنید، برنامه های کاربردی را با رابط کاربری(GUI)، و همچنین موارد موجود را ویرایش کنید. اما ما در این لحظهعلاقه مند به نوشتن برنامه ای حاوی توابع برای استفاده مجدد در آینده است. پس بریم سراغ منو. فایلو انتخاب کنید جدید -> فایل M.

    در قسمت ویرایشگر بنویسید یک برنامه ساده، اما بیایید کمی پیچیده ترش کنیم:

    تابع draw_plot(x)
    y = log(x); % اولین تابع را تنظیم کنید
    طرح فرعی (1، 2، 1)، نمودار (x، y); % ساختن اولین نمودار
    y = مربع (x); % تابع دوم را تنظیم کنید
    طرح فرعی (1، 2، 2)، نمودار (x، y); % نمودار دوم را می سازیم

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

    بیایید به پنجره فرمان برگردیم.
    می توانید تاریخچه دستورات را پاک کنید تا اطلاعات غیر ضروری حواس ما را پرت نکند. برای انجام این کار، بر روی فیلد ورودی دستور کلیک راست کرده و مورد را در منوی زمینه باز شده انتخاب کنید. پنجره فرمان را پاک کنید.
    متغیر X بعد از آزمایش قبلی با ما باقی ماند، آن را تغییر ندادیم یا حذف نکردیم. بنابراین، در پنجره فرمان، بلافاصله می توانید وارد کنید:
    draw_plot(x);
    خواهید دید که متلب تابع ما را از روی فایل خوانده و اجرا می کند و نمودار را رسم می کند.

    2. نحو برای تعریف و فراخوانی توابع M .

    متن یک تابع M باید با آن شروع شود سرتیتر، به دنبال بدن عملکرد.

    هدر "رابط" تابع (روش تعامل شما با آن) را تعریف می کند و ساختار آن به صورت زیر است:

    تابع [ RetVal1, RetVal2, ] = FunctionName(par1, par2,)

    در اینجا، تابعی با نام FunctionName اعلان می شود (با استفاده از تابع "کلمه کلیدی" بدون تغییر) که پارامترهای ورودی par1، par2 و را می گیرد و مقادیر خروجی (بازگشت) RetVal1، RetVal2 را تولید می کند (محاسبه می کند).

    به عبارت دیگر می گویند آرگومان های تابع متغیرهای par1، par2،..، و هستند مقادیر تابع (آنها باید محاسبه شوند) متغیرهای RetVal1، RetVal2، .

    نام تابع مشخص شده در هدر (در مثال داده شده - FunctionName) باید به عنوان نام فایلی باشد که متن تابع در آن نوشته می شود. برای این مثالاین فایل FunctionName.m خواهد بود (پسوند نام همچنان باید از یک حرف m تشکیل شده باشد). عدم تطابق بین نام تابع و نام فایل مجاز نیست!

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

    هم پارامترهای ورودی و هم مقادیر بازگشتی معمولاً می‌توانند آرایه‌هایی (به ویژه اسکالرها) با ابعاد و اندازه‌های مختلف باشند. به عنوان مثال، تابع MatrProc1

    تابع [A, B] = MatrProc1(X1, X2, x)

    A = X1 .* X2 * x;

    B = X1 .* X2 + x;

    طراحی شده برای "دریافت" دو آرایه با اندازه های یکسان (اما دلخواه) و یک اسکالر.

    این آرایه ها در بدنه تابع ابتدا عنصر به عنصر ضرب می شوند و پس از آن نتیجه چنین ضربی نیز در یک اسکالر ضرب می شود. بنابراین، اولین آرایه خروجی تولید می شود. اندازه‌های یکسان آرایه‌های ورودی X1 و X2 امکان‌پذیری عملیات ضرب عنصری آنها را تضمین می‌کند. آرایه خروجی دوم (به نام B) با آرایه اول تفاوت دارد که یک جمع اسکالر است (به جای ضرب).

    زنگ زدنتوسط ما ایجاد شده است کارکرداز پنجره فرمان سیستم متلب (یا از متن یک تابع دیگر) انجام می شود. به روش معمول: نام تابع نوشته می شود که پس از آن در پرانتز و با کاما از هم جدا شده اند ورودی های واقعی ، با مقادیری که محاسبات انجام می شود. پارامترهای واقعی را می توان با اعداد (آرایه های اعداد)، نام متغیرهایی که قبلاً مقادیر خاصی دارند و عبارات ارائه کرد.

    اگر پارامتر واقعی با نام یک متغیر داده شود، محاسبات واقعی با یک کپی از این متغیر (و نه با خودش) انجام می شود. نامیده می شود انتقال پارامترها بر اساس مقدار .

    در زیر یک فراخوانی از پنجره دستور MATLAB به تابع MatrProc1 است که قبلاً برای مثال ایجاد کردیم.

    در اینجا، نام پارامترهای ورودی واقعی (W1 و W2) و متغیرهایی که نتایج محاسبات در آنها نوشته شده است (Res1 و Res2) با نام متغیرهای مشابه در تعریف تابع MatrProc1 مطابقت ندارد. بدیهی است که نیازی به تطبیق نیست، به خصوص که سومین پارامتر واقعی ورودی اصلاً نامی ندارد! برای تأکید بر این تفاوت احتمالی، نام پارامترهای ورودی و مقادیر خروجی در یک تعریف تابع رسمی نامیده می شود.

    در مثال در نظر گرفته شده فراخوانی تابع MatrProc1 از دو ورودی ماتریس های مربع 2 x 2 دو ماتریس خروجی Res1 و Res2 را با ابعاد دقیقاً یکسان تولید می کند:

    Res1 =
    9 6
    6 6

    Res2=
    6 5
    5 5

    با فراخوانی تابع

    MatrProc1 = MatrProc1([ 1 2 3; 4 5 6 ], [ 7 7 7; 2 2 2 ], 1);

    با دو آرایه ورودی به اندازه 2x3، دو ماتریس خروجی به اندازه 2x3 دریافت می کنیم. یعنی همان تابع MatrProc1 می تواند پارامترهای ورودی را پردازش کند اندازه های مختلفو ابعاد! می توانید این تابع را به جای آرایه ها روی اسکالرها اعمال کنید (اینها هنوز آرایه های 1x1 هستند).

    حال این سوال را در نظر بگیرید که آیا می توان از این تابع به عنوان بخشی از عبارات استفاده کرد، همانطور که با توابعی که یک مقدار را برمی گرداند انجام می شود؟ به نظر می رسد که می توان این کار را انجام داد و اولین مقداری که توسط تابع برگردانده می شود به عنوان مقدار تابع مورد استفاده برای محاسبات بیشتر استفاده می شود. پنجره MATLAB زیر این نکته را نشان می دهد:

    هنگامی که با پارامترهای 1،2،1 فراخوانی می شود، تابع MatrProc1 دو مقدار را برمی گرداند: 2 و 3. برای استفاده در عبارت، از اولین آنها استفاده می شود.

    از آنجایی که هر تابعی را می توان با نوشتن یک عبارت دلخواه در پنجره دستور MATLAB فراخوانی کرد، همیشه ممکن است خطای مرتبط با عدم تطابق بین انواع پارامترهای واقعی و رسمی ایجاد شود. MATLAB هیچ بررسی در مورد این موضوع انجام نمی دهد، بلکه به سادگی کنترل را به تابع منتقل می کند. در نتیجه ممکن است موقعیت های اشتباهی رخ دهد. برای جلوگیری از (در صورت امکان) از وقوع چنین موقعیت های اشتباهی، پیشنهاد می شود پارامترهای ورودی در متن توابع M بررسی شود. به عنوان مثال، در تابع MatrProc1، تشخیص موقعیت زمانی که اندازه پارامترهای ورودی اول و دوم متفاوت است، آسان است. نوشتن چنین کدهایی به ساختارهای کنترلی نیاز دارد که ما هنوز آنها را بررسی نکرده ایم. زمان شروع یادگیری آنها فرا رسیده است!

    فایل های M رایج هستند فایل های متنیکه با استفاده از ویرایشگر متن. برای محیط عملیاتی کامپیوتر شخصی MATLAB از یک ویرایشگر/اشکال‌زدای داخلی اختصاصی پشتیبانی می‌کند، اگرچه می‌توان از هر ویرایشگر متن ASCII دیگری استفاده کرد.

    دو راه برای باز کردن ویرایشگر وجود دارد:

    • از منوی File گزینه New و سپس M-File را انتخاب کنید.
    • از دستور ویرایش استفاده کنید

    مثال

    دستور edit poof ویرایشگر را راه اندازی می کند و فایل poof.m را باز می کند. اگر نام فایل حذف شود، ویرایشگر راه اندازی می شود و فایل بدون نام باز می شود.
    اکنون می‌توانیم برای مثال تابع fact در بالا را با تایپ خطوط متن و ذخیره آنها در فایلی به نام fact.m در فهرست فعلی بنویسیم.
    پس از ایجاد چنین فایلی، می توانید دستورات زیر را اجرا کنید:

    • نمایش نام فایل ها در دایرکتوری فعلی:
      چی
    • نمایش متن فایل M fact.m:
      واقعیت را تایپ کنید
    • تابع fact را با پارامترهای داده شده فراخوانی کنید:
      واقعیت (5)
      ans=120

    سناریوهای M

    اسکریپت ها ساده ترین نوع فایل M هستند - هیچ آرگومان ورودی یا خروجی ندارند. آنها برای خودکار کردن محاسبات تکراری استفاده می شوند. اسکریپت ها بر روی داده های فضای کاری کار می کنند و می توانند داده های جدیدی را برای پردازش بیشتر در همان فایل تولید کنند. داده هایی که در یک اسکریپت استفاده می شود پس از پایان اسکریپت در فضای کاری ذخیره می شود و می تواند برای محاسبات بیشتر استفاده شود.

    مثال
    عبارات زیر شعاع بردار rho را برای انواع مختلف محاسبه می کنند توابع مثلثاتیاز زاویه تتا و ساخت دنباله ای از نمودارها در مختصات قطبی.

    با وارد کردن عبارات بالا یک فایل M به نام petals.m ایجاد کنید. این فایل یک اسکریپت است. وارد کردن دستور petals.m در خط فرمان سیستم MATLAB باعث می شود دستورات این اسکریپت اجرا شوند.

    بعد از اینکه اسکریپت اولین نمودار را نشان داد، کلید Return را فشار دهید تا به نمودار بعدی بروید. اسکریپت دارای آرگومان های ورودی و خروجی نیست. خود برنامه petals.m متغیرهایی را ایجاد می کند که در فضای کاری سیستم متلب ذخیره می شوند. وقتی اجرا کامل شد، متغیرهای (i، تتا و rho) در فضای کاری باقی می‌مانند. برای دیدن این لیست از دستور whos استفاده کنید.

    توابع M

    M-function ها فایل های M هستند که به آرگومان های ورودی و خروجی اجازه می دهند. آنها بر روی متغیرهایی در فضای کاری خود، جدا از فضای کاری سیستم متلب عمل می کنند.

    مثال

    تابع متوسط ​​کافی است فایل M ساده، که میانگین عناصر بردار را محاسبه می کند:
    تابع y = میانگین (x)
    % AVERAGE مقدار متوسط ​​عناصر برداری.
    % AVERAGE(X)، که در آن X یک بردار است. میانگین عناصر یک بردار را محاسبه می کند.
    % اگر آرگومان ورودی بردار نباشد، خطا ایجاد می شود.
    = اندازه (x)؛
    اگر (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
    خطا ("آرایه ورودی باید بردار باشد")
    پایان
    y=جمع(x)/طول(x); % محاسبه واقعی

    سعی کنید این دستورات را در یک فایل M به نام average.m وارد کنید. تابع میانگین یک ورودی و یک آرگومان خروجی واحد را می پذیرد. برای فراخوانی تابع میانگین، باید عبارات زیر را وارد کنید:

    z = 1:99;
    میانگین (z)
    ans = 50

    ساختار تابع M.تابع M شامل موارد زیر است:

    • رشته های تعریف تابع؛
    • خط اول کامنت؛
    • نظر واقعی؛
    • بدن عملکرد؛
    • نظرات خط;

    رشته تعریف تابعخط تعریف تابع به MATLAB می گوید که فایل یک تابع M است و همچنین فهرستی از آرگومان های ورودی را تعریف می کند.

    مثال
    خط تعریف میانگین تابع به شکل زیر است:
    تابع y = میانگین (x)
    اینجا:

    1. تابع- کلمه کلیدی، که تابع M را تعریف می کند.
    2. y - آرگومان خروجی؛
    3. میانگین - نام تابع؛
    4. x آرگومان ورودی است.

    هر تابع در سیستم متلب شامل یک رشته تعریف تابع مانند این است.

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

    مثال

    تابع = کره (تتا، فی، رو)

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

    خط اول نظر. برای میانگین تابع، خط اول نظر به این صورت است:

    % AVERAGE مقدار متوسط ​​عناصر برداری

    این اولین خط متنی است که وقتی کاربر دستور help را تایپ می کند ظاهر می شود.<имя_функции>. علاوه بر این، اولین خط نظر با دستور lookfor روی صفحه چاپ می شود. از آنجا که این خط حاوی اطلاعات مهمی در مورد فایل M است، باید با دقت ساخته شود.

    یک نظر. برای فایل های M، می توانید با وارد کردن متن در یک یا چند خط نظر، یک راهنمای ابزار آنلاین ایجاد کنید.

    مثال

    بیایید چندین خط نظر ایجاد کنیم

    % تابع میانگین(x) میانگین عناصر بردار x را محاسبه می کند.
    % اگر آرگومان ورودی بردار نباشد، یک خطا ایجاد می شود.

    سپس وقتی دستور help را وارد کردید<имя_функции>، متلب خطوط نظری را که بین خط تعریف تابع و اولین خط خالی یا ابتدای برنامه قرار می گیرد نمایش می دهد. دستور کمک<имя_функции>نظرات ارسال شده در خارج از این منطقه را نادیده می گیرد.

    مثال

    کمک به گناه
    SIN Sine.
    SIN(X) سینوس عناصر X است
    SIN(X) تابع سینوس عناصر آرایه X را محاسبه می کند.

    MATLAB خطوط فایل Contents.m را در دستور help نمایش می دهد<имя_каталога>.

    اگر دایرکتوری حاوی فایل Contents.m نیست، از دستور help استفاده کنید<имя_каталога>اولین خط نظر را برای هر فایل M در دایرکتوری داده شده چاپ می کند.

    بدن عملکرد. بدنه تابع حاوی کد زبان MATLAB است که محاسبات را انجام می دهد و مقادیری را به آرگومان های خروجی اختصاص می دهد. عبارات در یک بدنه تابع می تواند شامل فراخوانی تابع، ساختارهای کنترل جریان برنامه، I/O تعاملی، محاسبات، تخصیص، نظرات و رشته های خالی باشد.

    مثال

    بدنه تابع میانگین شامل تعدادی دستور برنامه نویسی ساده است:

    همانطور که قبلا ذکر شد، نظرات با (٪) مشخص می شوند. یک خط نظر را می توان در هر جایی از یک فایل M، از جمله در انتهای یک خط، قرار داد.

    مثال

    % مجموع تمام عناصر بردار x را بیابید
    y = sum(x) % sum تابع استفاده شده است
    .

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

    نام توابع M. در سیستم متلب، همان محدودیت هایی برای نام توابع M اعمال می شود که در نام متغیرها وجود دارد - طول آنها نباید از 31 کاراکتر تجاوز کند. به طور دقیق تر، نام می تواند طولانی تر باشد، اما MATLAB فقط 31 کاراکتر اول را در نظر می گیرد. نام تابع M باید با یک حرف شروع شود. کاراکترهای باقیمانده می توانند هر ترکیبی از حروف، اعداد و زیرخط باشند.

    نام فایل حاوی تابع M از نام تابع و پسوند ".m" تشکیل شده است.

    مثال

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

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

    بسیاری از دستورالعمل ها را می توان با افزودن عملوندها تغییر داد:
    بارگذاری August17.dat
    کمک به جادو
    رتبه را تایپ کنید

    روش جایگزیناصلاح کننده های تنظیم - آنها را به عنوان آرگومان های رشته ای برای تابع تعریف کنید:

    load ("August17.dat")
    کمک ("جادو")
    نوع ("رتبه")

    این دوگانگی مفاهیم فرمان و عملکرد در سیستم متلب است. هر دستوری مثل

    استدلال فرمان

    را می توان به عنوان یک تابع نوشت

    فرمان ("استدلال").

    مزیت توضیحات تابعی زمانی نشان داده می شود که رشته آرگومان به صورت قطعات تشکیل شود. مثال زیر نشان می دهد که چگونه می توان دنباله فایل های August1.dat، August2.dat و غیره را پردازش کرد. این از تابع int2str استفاده می کند که یک عدد صحیح را به یک رشته کاراکتر تبدیل می کند، که به تشکیل دنباله ای از نام فایل ها کمک می کند.

    برای d = 1:31
    s = ["آگوست" int2str(d) ".dat"]
    load(s) %Load فایل با نام August"d".dat
    % اظهارات پردازش فایل
    پایان

    غالباً هنگام برنامه نویسی مجبور هستید همان محاسبات را چندین بار تکرار کنید، مثلاً تعیین مدول یک عدد یا محاسبه فاصله اقلیدسی بین نقاط و غیره. برای اجرای چنین محاسبات تکراری، ایجاد توابع و فراخوانی آنها در صورت نیاز منطقی است.

    4.1. ترتیب تعریف و فراخوانی توابع

    فصل اول این آموزش نشان داد که چگونه توابع خود را در برنامه MatLab تعریف کنید. در این بخش به موارد بیشتری می پردازیم توصیف همراه با جزئیاتبرنامه نویسی توابع سفارشی

    سینتکس برای تعریف توابع بومی در MatLab به شرح زیر است:

    تابع [ RetVal1, RetVal2,… ] = FunctionName(arg1, arg2,…)
    <тело функции>

    که در آن RetVal1، RetVal2،... مجموعه مقادیر برگردانده شده توسط تابع (نتایج کار) است. arg1, arg2,... – مجموعه ای از آرگومان های ورودی; بدنه تابع - مجموعه ای از دستورات (برنامه) که هنگام فراخوانی تابع اجرا می شوند.

    مثالی از اجرای یک تابع برای محاسبه فاصله اقلیدسی را در نظر بگیرید:

    طول تابع = euqlid (x1، y1، x2، y2)
    طول = sqrt((x1-x2)^2+(y1-y2)^2);

    بیایید با استفاده از مثال محاسبه عرض و ارتفاع مستطیل با مختصات گوشه سمت چپ بالا (x1,y1) و سمت راست پایین (x2,y2) امکان برگرداندن چندین پارامتر را نشان دهیم:

    تابع = RectangleHW(x1,y1,x2,y2)
    عرض = abs (x1-x2)؛
    ارتفاع = abs (y1-y2);

    این تابع را می توان با مجموعه پارامترهای زیر نیز نوشت:


    عرض = abs(P1(1)-P1(2));
    ارتفاع = abs(P2(1)-P2(2));

    که در آن P1 و P2 بردارهایی (آرایه) با اندازه 2 عنصر هستند و یک نقطه را در فضای دو بعدی توصیف می کنند. در این حالت، هنگام فراخوانی تابع، مقادیر مختصات نقاط را می توان به این ترتیب ارسال کرد:

    RectangleHW(, );

    اگر برنامه نویس هنگام فراخوانی تابع اشتباه کند و اندازه اشتباهی از بردار را پاس کند، مثلاً به این صورت

    RectangleHW(0, );

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

    تابع = RectangleHW (P1, P2)
    اگر طول (P1)< 2 | length(P2) < 2
    پایان

    عرض = abs(P1(1)-P1(2));
    ارتفاع = abs(P2(1)-P2(2));

    هنگامی که این تابع با پارامترهای نادرست اجرا می شود، تابع یک پیغام خطا در پنجره دستور MatLab نمایش می دهد، اما برنامه به کار خود ادامه می دهد.

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

    از متغیرهای nargin و nargout برای بررسی تعداد آرگومان های ارسال شده و تعداد مقادیر بازگشتی مورد انتظار استفاده می شود. در زیر نمونه ای از تابعی است که از اعتبارسنجی تعداد آرگومان های ورودی و خروجی استفاده می کند.

    تابع = RectangleHW (P1, P2)
    اگر نارگین ~= 2
    خطا ("تعداد بد پارامترها");
    پایان
    اگر نارگوت ~= 2
    error("باید 2 مقدار بازگشتی باشد");
    پایان
    اگر طول (P1)< 2 | length(P2) < 2
    خطا ("پارامتر اول یا دوم بد")؛
    پایان

    عرض = abs(P1(1)-P1(2));
    ارتفاع = abs(P2(1)-P2(2));

    در این مورد، بررسی صحت پارامترهای تابع در شرایط زیر کار خواهد کرد:

    RectangleHW(); ٪ تعداد بد پارامترها
    = RectangleHW(, ); % باید 2 بازده باشد
    ٪ ارزش های
    = RectangleHW(0, ); % بد ​​پارامتر 1 یا 2

    سخنرانی 3. برنامه نویسی در محیط متلب.

    1. M-فایل. ................................................ . ................................................ .. ......................................

    1.1. کار در ویرایشگر M-فایل ها ................................................ . ................................................ .. .

    1.2. انواع فایل های M فایل برنامه. ................................................ . ................................................

    1.3. فایل تابع ................................................ . ................................................ .. ............................

    توابع فایل با یک آرگومان ورودی......................................................................................

    توابع فایل با چندین آرگومان ورودی.......................................................................

    توابع فایل با چندین آرگومان خروجی....................................................................

    1.4. تابع های فرعی ................................................ . ................................................ .. ................................

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

    2.1. عملگرهای حلقه.............................................................................................................................

    برای حلقه ................................................ . ................................................ .. ......................................

    حلقه while. ................................................ . ................................................ .. ................................................

    2.2. اپراتورهای شعب...................................................................................................................

    اپراتور مشروطاگر . ................................................ . ................................................ .. ................

    عبارت switch ................................................ . ................................................ .. ................................

    2.3. شکستن، ادامه دادن و برگرداندن بیانیه ها. ................................................ . ................................

    2.4. درباره تکنیک های برنامه نویسی منطقی در متلب........................................................

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

    از یک طرف، MATLAB شامل تعداد زیادی عملگر و توابع داخلی (نزدیک به هزار) است که با موفقیت بسیاری از مشکلات عملی را حل می کند، که برای آنها برنامه های کاملاً پیچیده باید زودتر آماده می شد. به عنوان مثال، اینها توابع معکوس یا جابجایی ماتریس ها، محاسبه مقادیر مشتق یا انتگرال و غیره و غیره هستند. تعداد این توابع با در نظر گرفتن بسته های گسترش سیستم، در حال حاضر به هزاران نفر می رسد و دائماً در حال افزایش است. افزایش می یابد. اما، از سوی دیگر، سیستم متلب از بدو پیدایش خود به عنوان یک سیستم قدرتمند ریاضی گرا ایجاد شده است. محاسبات فنیزبان برنامه نویسی سطح بالا. و بسیاری به درستی این را به عنوان یک مزیت مهم سیستم در نظر گرفتند که نشان دهنده امکان استفاده از آن برای حل پیچیده ترین مسائل ریاضی جدید است.

    سیستم متلب دارای یک زبان ورودی است که یادآور بیسیک (با ترکیبی از فرترن و پاسکال) است. نوشتن برنامه ها در سیستم سنتی است و بنابراین برای اکثر کاربران کامپیوتر آشناست. علاوه بر این، این سیستم امکان ویرایش برنامه ها را با استفاده از هر ویرایشگر متنی آشنا برای کاربر فراهم می کند. همچنین ویرایشگر خود را با دیباگر دارد. زبان سیستم متلب از نظر برنامه نویسی محاسبات ریاضی بسیار غنی تر از هر زبان دیگری است. زبان جهانیبرنامه نویسی سطح بالا تقریباً تمام ابزارهای برنامه نویسی شناخته شده از جمله برنامه نویسی شی گرا و بصری را پیاده سازی می کند. این به برنامه نویسان با تجربه فرصت های زیادی برای ابراز وجود می دهد.

    1. M-فایل.

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

    صرفه جویی در متغیرهای محیط کار یا ژورنال با دفتر خاطرات ناچیز است

    افزایش بهره وری کار راه حل موثرشامل طراحی الگوریتم های خود در قالب برنامه هایی (M-file) است که می توانند از محیط کاری یا از ویرایشگر راه اندازی شوند. ویرایشگر داخلی فایل M در MATLAB نه تنها امکان تایپ متن برنامه و اجرای آن را به طور کامل یا جزئی می دهد، بلکه امکان اشکال زدایی الگوریتم را نیز فراهم می کند. طبقه بندی دقیق فایل های M در زیر آورده شده است.

    1.1. در ویرایشگر M-file کار کنید.

    یک ویرایشگر چند پنجره ای ویژه برای آماده سازی، ویرایش و اشکال زدایی فایل های m استفاده می شود. به عنوان ساخته شده است نرم افزار معمولیپنجره ها. ویرایشگر را می توان با دستور ویرایش از فراخوانی کرد خط فرمانیا دستور منوی اصلی File | جدید | فایل M. پس از آن، می توانید فایل خود را در پنجره ویرایشگر ایجاد کنید، از ابزارهایی برای اشکال زدایی و راه اندازی آن استفاده کنید. قبل از اجرای فایل، باید با استفاده از File | روی دیسک نوشته شود همانطور که در منوی ویرایشگر ذخیره کنید.

    شکل 1 پنجره ویرایشگر/اشکال زدا را نشان می دهد. متن آماده شده فایل (این ساده ترین و اولین برنامه ما در زبان برنامه نویسی متلب است) را می توان روی دیسک نوشت. برای این کار از دستور Save As استفاده کنید که از استاندارد استفاده می کند پنجره ویندوزبرای نوشتن یک فایل با نام داده شده توجه داشته باشید که نام فایل M باید منحصر به فرد باشد و نام فایل مورد نیاز مانند نام متغیرهای محیطی MATLAB است. پس از نوشتن فایل روی دیسک، می توانید دستور Run را از نوار ابزار یا منوی Debug اجرا کنید یا به سادگی فشار دهید. .، به منظور اجرای فایل m.

    در نگاه اول، ممکن است به نظر برسد که ویرایشگر / دیباگر فقط یک پیوند اضافی در زنجیره "user - MATLAB" است. در واقع، متن فایل می تواند وارد پنجره سیستم شود و همان نتیجه را بگیرد. با این حال، در واقعیت، ویرایشگر/اشکال‌زدا این کار را می‌کند نقش مهم. این به شما امکان می دهد یک فایل m (برنامه) بدون "پوسته" های متعددی که کار را همراهی می کند ایجاد کنید. حالت فرمان. متن چنین فایلی تحت بررسی نحوی کامل قرار می گیرد که طی آن بسیاری از خطاهای کاربر شناسایی و حذف می شوند. بنابراین، ویرایشگر کنترل نحوی فایل را فراهم می کند.

    ویرایشگر ابزارهای مهم دیگری برای اشکال زدایی دارد - به شما امکان می دهد علامت های خاصی را در متن فایل تنظیم کنید که به آنها نقاط شکست (نقاط شکست) می گویند. با رسیدن به آنها، محاسبات به حالت تعلیق در می آیند و کاربر می تواند نتایج میانی محاسبات را ارزیابی کند (مثلاً مقادیر متغیرها)، صحت حلقه ها و غیره را بررسی کند. در نهایت، ویرایشگر به شما اجازه می دهد تا بنویسید فایل به قالب متنو زحمات خود را در آن جاودانه کنید سیستم فایلمتلب.

    برای راحتی کار با ویرایشگر/اشکال‌زدا، خطوط برنامه به ترتیب شماره‌گذاری می‌شوند. ویرایشگر چند پنجره ای است. پنجره هر برنامه به صورت تب طراحی شده است. ویرایشگر دیباگر، مشاهده مقادیر متغیرها را آسان می کند. برای انجام این کار، فقط مکان نما ماوس را به سمت نام متغیر ببرید و آن را نگه دارید - یک راهنمای ابزار با نام متغیر و مقدار آن ظاهر می شود.

    یکی از ویژگی های بسیار راحت ویرایشگر M-file این است اجرای برخی از دستوراتبرای این کار از دستور Evaluate Selection from استفاده کنید منوی زمینهیا main menuText یا فقط کلید عملکرد، که به شما امکان می دهد متن برنامه انتخاب شده را اجرا کنید.

    برنج. 1. پنجره ویرایشگر M-file.

    1.2. انواع فایل های M فایل برنامه.

    دو نوع فایل M در MATLAB وجود دارد: Script M-Files که حاوی یک سری دستورات است و تابع M-Files که توابع تعریف شده توسط کاربر را توصیف می کند.

    فایل‌برنامه‌ها ساده‌ترین نوع فایل‌های M هستند. آنها هیچ آرگومان ورودی یا خروجی ندارند و بر روی متغیرهایی کار می کنند که در زمان اجرا وجود دارند یا ممکن است متغیرهای جدیدی ایجاد کنند. فایل برنامه mydemo را با خواندن قسمت قبل نوشتید. تمام متغیرهای اعلام شده در یک فایل-برنامه پس از اجرای آن در محیط کاری در دسترس قرار می گیرند. فایل برنامه mydemo نشان داده شده در فهرست شکل 1 را اجرا کنید. به پنجره Workspace بروید و مطمئن شوید که تمام متغیرهای وارد شده در فایل M در فضای کاری ظاهر می شوند. تمامی متغیرهای ایجاد شده در حین اجرای M-file پس از اتمام آن در محیط کاری باقی می مانند و می توان از آنها در سایر برنامه های فایل و در دستورات اجرا شده از خط فرمان استفاده کرد.

    برنامه فایل به دو صورت راه اندازی می شود.

    1. از ویرایشگر M-file همانطور که در بالا توضیح داده شد.

    2. از خط فرمان یا موارد دیگرفایل برنامه، در حالی که دستور نام فایل M (بدون پسوند) است. استفاده از روش دوم بسیار راحت تر است، به خصوص اگر فایل برنامه ایجاد شده بعداً به طور مکرر مورد استفاده قرار گیرد. M-file ایجاد شده در واقع به دستوری تبدیل می شود که متلب آن را درک می کند.

    تمام پنجره های گرافیکی را ببندید و mydemo را در خط فرمان تایپ کنید، یک پنجره گرافیکی مربوط به دستورات فایل برنامه mydemo.m ظاهر می شود. پس از وارد کردن دستور mydemo، متلب کارهای زیر را انجام می دهد:

    1. بررسی می کند که آیا دستور داده شده یک نام است یا خیرهر یک از متغیرهای تعریف شده

    V محیط کار. اگر متغیری وارد شود، مقدار آن نمایش داده می شود.

    2. اگر ورودی یک متغیر نباشد، متلب دستور ورودی را در میان توابع داخلی جستجو می کند. اگر دستور یک تابع داخلی باشد، اجرا می شود.

    3. اگر ورودی نه یک متغیر و نه یک تابع داخلی باشد، متلب شروع به جستجو می کند M-فایل با نام دستور و پسوند m. جستجو با شروع می شود پوشه کنونی(پوشه کنونی)؛ اگر فایل M در آن یافت نشد، متلب دایرکتوری های تنظیم شده در مسیر جستجو (مسیر) را جستجو می کند. (برای تنظیم دایرکتوری فعلی می توانید از کادر انتخاب به همین نام در نوار ابزار یا دستور cd استفاده کنید. تنظیم مسیرهای جستجو با

    کمک دستورات را تنظیم کنیدمسیر با دستور منوی File یا با دستور addpath).

    اگر هیچ یک از اقدامات فوق موفقیت آمیز نبود، مثلاً اگر اشتباهی رخ داده باشد، پیامی در پنجره فرمان نمایش داده می شود.

    دنباله جستجوی متلب به شما می گوید که نامگذاری صحیح فایل برنامه خود هنگام ذخیره آن در یک فایل M بسیار مهم است. اول اینکه نام آن نباید با نام توابع موجود در متلب مطابقت داشته باشد. با کمک تابع 'exist' می توانید بفهمید که آیا نام قبلاً اشغال شده است یا خیر.

    ثانیاً، نام فایل نباید با یک رقم، کاراکترهای "+" یا "-" شروع شود، کلمه ای با آن کاراکترهایی که می تواند توسط MATLAB به عنوان خطا هنگام وارد کردن عبارت تفسیر شود. به عنوان مثال، اگر فایل M را با فایل برنامه 5prog.m نامگذاری کنید، پس از شروع آن از منوی ویرایشگر یا توسط پیغام خطا دریافت کنید این تعجب آور نیست زیرا متلب از شما انتظار دارد 5 + prog (یا 5، prog) یک عبارت حسابی را با متغیر prog ارزیابی کنید (یا 5 را به عنوان اولین عنصر به بردار ردیف prog اضافه کنید). بنابراین، نام صحیح prog5.m (یا حداقل p5rog.m) خواهد بود، اما فقط با یک حرف شروع می شود.

    لطفاً توجه داشته باشید که اگر دستورات انتخاب شده (همه دستورات را می توان انتخاب کرد) یک فایل M با نام اشتباه با ، پس هیچ خطایی وجود نخواهد داشت. در واقع یک اجرای متوالی دستورات وجود دارد که با فراخوانی آنها از خط فرمان و با کار یک برنامه فایل تفاوتی ندارد.

    اشتباه بسیار رایج دیگری هنگام نامگذاری یک فایل-برنامه وجود دارد که در نگاه اول پیامدهای غیرقابل توضیحی دارد: برنامه فقط یک بار راه اندازی می شود. راه اندازی مجددباعث اجرای برنامه نمی شود. بیایید با استفاده از فایل برنامه در لیست 5.1 که در فایل mydemo.m ذخیره کرده اید، به این وضعیت نگاه کنیم. نام فایل را به x.m تغییر دهید، سپس همه متغیرهای فضای کاری را از پنجره مرورگر متغیرهای فضای کاری یا از خط فرمان حذف کنید:

    >> پاک کردن همه

    فایل برنامه را مثلاً از ویرایشگر با فشار دادن اجرا کنید . یک پنجره گرافیکی با دو نمودار ظاهر می شود و هیچ چیز یک ترفند کثیف را نشان نمی دهد. حالا پنجره گرافیک را ببندید و دوباره برنامه را اجرا کنید. پنجره گرافیکی دیگر ایجاد نمی شود، اما مقادیر آرایه x مطابق با پاراگراف اول الگوریتم جستجوی MATLAB در بالا در پنجره فرمان نمایش داده می شود. هنگام انتخاب نام برنامه فایل باید این شرایط را در نظر گرفت. نه کمتر از سوال مهمبا سومین مورد از الگوریتم جستجوی متلب، دایرکتوری فعلی و مسیرهای جستجو مرتبط است. معمولا، M-فایل های خوددر فهرست کاربران ذخیره می شود. برای اینکه متلب بتواند آنها را پیدا کند، باید مسیرهایی برای نشان دادن محل فایل های M تنظیم شود.

    1.3. فایل تابع

    برنامه های فایل مورد بحث در بالا دنباله ای از دستورات متلب هستند، آنها هیچ آرگومان ورودی یا خروجی ندارند. برای حل مسائل محاسباتی و نوشتن برنامه های کاربردی خوددر متلب، اغلب لازم است توابع فایلی برنامه ریزی شوند که عملیات لازم را روی آرگومان های ورودی انجام دهند و نتیجه را در آرگومان های خروجی برگردانند. تعداد آرگومان‌های ورودی و خروجی به مشکلی که حل می‌شود بستگی دارد - فقط یک آرگومان ورودی و یک خروجی، چندین آرگومان از هر دو، یا فقط آرگومان ورودی وجود دارد.

    این امکان وجود دارد که هیچ آرگومان ورودی و خروجی وجود نداشته باشد. این بخش چند مثال ساده ارائه می دهد تا به شما در درک نحوه کار با توابع فایل کمک کند. فایل های تابع، مانند فایل های برنامه، در ویرایشگر M-file ایجاد می شوند.

    فایل تابع با یک آرگومان ورودی.

    بیایید فرض کنیم که در محاسبات اغلب لازم است از مقدار یک تابع استفاده شود:

    - xx 2

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

    تابع f = myfun(x)

    کلمه تابع در خط اول مشخص می کند که فایل داده شدهحاوی یک فایل تابع خط اول است هدر تابع،که حاوی نام تابع و لیست آرگومان های ورودی و خروجی است. آرگومان های ورودی بعد از نام تابع در پرانتز نوشته می شوند. در مثال ما، تنها یک آرگومان ورودی وجود دارد، x. آرگومان خروجی f در سمت چپ علامت تساوی در هدر تابع مشخص شده است. هنگام انتخاب نام فایل تابع، باید مراقب بود که با نام های اشغال شده در متلب تداخل نداشته باشید. سوال مشابهی را در بالا مورد بحث قرار دادیم: چگونه یک فایل برنامه را در یک فایل با یک نام منحصر به فرد ذخیره کنیم. می توانید از همان رویکرد فراخوانی تابع موجود برای نامگذاری یک فایل تابع استفاده کنید.

    بعد از هدر، بدنه تابع فایل قرار می گیرد - یک یا چند عملگر (ممکن است تعداد کمی وجود داشته باشد) که الگوریتمی را برای به دست آوردن مقدار متغیرهای خروجی از متغیرهای ورودی پیاده سازی می کنند. در مثال ما، الگوریتم ساده است - یک عبارت حسابی برای x داده شده محاسبه می شود و نتیجه به f نوشته می شود.

    اکنون باید فایل را در پوشه کاری یا مکان دیگری که متلب شناخته شده است ذخیره کنید. وقتی از منوی File گزینه Save یا Save as... را انتخاب می کنید، نام فایل پیش فرض با نام تابع myfun یکی است. شما باید فایل تابع را با این نام پیشنهادی ذخیره کنید. اکنون تابع ایجاد شده را می توان به همان روشی مانند sin ، cos و موارد دیگر استفاده کرد ، به عنوان مثال از خط فرمان:

    >> y=myfun(1.3) y=

    هنگام ایجاد تابع فایل myfun، با پایان دادن به دستور انتساب با یک نقطه ویرگول، خروجی مقدار f را در پنجره فرمان حذف کردیم. اگر این کار انجام نشد، با فراخوانی y=myfun(1.3) نمایش داده می شود. به عنوان یک قاعده، بهتر است از خروجی دادن به پنجره فرمان نتایج محاسبات میانی داخل تابع فایل خودداری کنید.

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

    >>x=;

    >> y=myfun(x)

    ??? خطا در استفاده از ==> ^ ماتریس باید مربع باشد.

    خطا در ==> C:\MATLAB6p5\work\myfun.m

    در خط 2 ==> f = exp(-x)*sqrt((x^2 + 1)/(x^4 + 0.1));

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

    تابع f = myfun(x)

    f = exp(-x).*sqrt((x.^2 + 1)./(x.^4 + 0.1));

    حالا آرگومان تابع myfun می تواند یک عدد یا یک بردار یا ماتریسی از مقادیر باشد، به عنوان مثال:

    >>x=;

    >> y=myfun(x)

    متغیر y که نتیجه فراخوانی تابع myfun در آن نوشته می شود، به طور خودکار به بردار اندازه مورد نیاز تبدیل می شود.

    بیایید به مثالی از استفاده از توابع نگاه کنیم. ما تابع myfun را با استفاده از یک برنامه فایل یا از خط فرمان روی یک قطعه رسم می کنیم:

    >> x=0:0.5:4;

    >> y=myfun(x);

    >>طرح (x,y)

    حل مسائل محاسباتی با استفاده از MATLAB مستلزم آن است که بتوانید توابع فایلی را که مطابق با وظیفه هستند برنامه ریزی کنید (به عنوان مثال، قسمت راستسیستم های معادلات دیفرانسیلیا یک انتگرال).

    ما اکنون فقط به یک مثال ساده از اینکه چگونه استفاده از توابع فایل تجسم را ساده می کند نگاه خواهیم کرد. توابع ریاضی. ما به تازگی با طرح نقشه کشیده ایم. توجه داشته باشید که برای محاسبه بردار y لازم نیست myfun را فراخوانی کنید - می توانید بلافاصله یک عبارت برای آن بنویسید و سپس جفت x و y را در نمودار مشخص کنید. تابع فایل myfun که در اختیار داریم به ما امکان می دهد به تابع ویژه fplot مراجعه کنیم، که باید نام تابع فایل خود را (به صورت آپستروف) یا یک اشاره گر به آن (با عملگر @ در جلوی نام تابع) مشخص کنیم. ) و مرزهای قطعه برای رسم (در بردار دو عنصر)

    >>fplot("myfun")

    >> fplot(@myfun، )

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

    فایل تابع با چندین آرگومان ورودی.

    نوشتن توابع فایل با چندین آرگومان ورودی تقریباً مشابه نوشتن یک آرگومان واحد است. همه آرگومان های ورودی در یک لیست جدا شده با کاما قرار می گیرند. مثال زیر حاوی فایل تابعی است که طول بردار شعاع یک نقطه سه بعدی را محاسبه می کند.

    فضاهای x 2 + y 2 + z 2 .

    تابع r = شعاع3(x,y,z) r = sqrt(x.^2 + y.^2 + z.^2);

    >> R = شعاع 3 (1، 1، 1)

    علاوه بر توابع با آرگومان های متعدد، متلب به شما اجازه می دهد تا توابعی ایجاد کنید که چندین مقدار را برمی گرداند، یعنی دارای چندین آرگومان خروجی باشد.

    فایل تابع با آرگومان های خروجی متعدد.

    توابع فایل با آرگومان های خروجی متعدد برای ارزیابی توابعی که چندین مقدار را برمی گرداند مفید هستند (که در ریاضیات توابع برداری نامیده می شود). آرگومان‌های خروجی به فهرست آرگومان‌های خروجی، با کاما از هم جدا می‌شوند و خود فهرست در براکت‌های مربع قرار می‌گیرد. مثال زیر فایل تابع hms را برای تبدیل زمان داده شده بر حسب ثانیه به ساعت، دقیقه و ثانیه ارائه می دهد:

    تابع = hms (sec) ساعت = طبقه (sec/3600);

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

    >> = hms (10000) h =

    اگر هنگام استفاده از این تابع به صراحت پارامترهای خروجی را مشخص نکنید، نتیجه فراخوانی تابع تنها اولین آرگومان خروجی خواهد بود:

    >> hms(10000) ans =

    اگر فهرست آرگومان‌های خروجی خالی باشد، به‌عنوان مثال، هدر به این صورت است: تابع myfun(a, b) یا function = myfun(a, b).

    سپس فایل تابع هیچ مقداری را بر نمی گرداند. چنین توابعی نیز گاهی اوقات مفید هستند.

    توابع متلب یکی دیگر دارند کیفیت مفید- امکان به دست آوردن اطلاعات در مورد آنها با استفاده از دستور help، به عنوان مثال، help fplot . توابع فایل خود را نیز می توان با استفاده از خطوط نظر با این ویژگی وقف کرد. تمام خطوط نظر بعد از هدر و قبل از بدنه تابع یا یک خط خالی در پنجره فرمان با دستور help نمایش داده می شود. به عنوان مثال، برای عملکرد ما، می توانید یک اشاره ایجاد کنید:

    تابع = hms (ثانیه) %hms - تبدیل ثانیه به ساعت، دقیقه و ثانیه

    % تابع hms برای تبدیل ثانیه است

    % در ساعت، دقیقه و ثانیه

    % = hms (ثانیه)

    ساعت = طبقه (ثانیه/3600)؛

    دقیقه = طبقه((ثانیه - ساعت*3600)/60); ثانیه = ثانیه - ساعت * 3600 - دقیقه * 60;

    1.4. تابع های فرعی

    نوع دیگری از توابع را در نظر بگیرید - توابع فرعی. استفاده از تابع های فرعی مبتنی بر جداسازی بخشی از الگوریتم به یک تابع مستقل است که متن آن در همان فایل تابع اصلی قرار دارد. بیایید با یک مثال به این موضوع نگاه کنیم.

    عملکرد ساده

    % تابع اصلی a = 2*pi;

    fl = f(1.1، 2.1) f2 = f(3.1، 4.2)-a f3 = f(-2.8، 0.7)+a

    تابع z = f(x, y)% تابع فرعی

    z = x^3 - 2*y^3 - x*y + 9;

    اولین تابع ساده این است عملکرد اصلیدر simple.m، این دستورات آن هستند که در صورتی اجرا می شوند که کاربر ساده، مثلاً از خط فرمان، آن را فراخوانی کند. هر فراخوانی به تابع فرعی f در تابع اصلی منجر به انتقال به عملگرهای قرار داده شده در تابع فرعی و بازگشت بعدی به تابع اصلی می شود.

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

    یکی از گزینه هااستفاده از متغیرهایی که برای همه توابع یک فایل M مشترک هستند عبارت است از اعلام این متغیرها در ابتدای تابع اصلی و تابع فرعی به عنوان جهانی، با استفاده از global با فهرستی از نام متغیرها با فاصله جدا شده.

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

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

    2.1. عملگرهای حلقه

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

    برای حلقه

    استفاده از for به شرح زیر است:

    برای count = start:step:final

    دستورات متلب

    در اینجا count یک متغیر حلقه است، start مقدار اولیه آن است، نهایی مقدار نهایی است، asste مرحله ای است که با هر بار وارد شدن حلقه تعداد افزایش می یابد. به محض اینکه مقدار شمارش از نهایی بیشتر شود، حلقه به پایان می رسد. متغیر حلقه می تواند نه تنها مقادیر صحیح، بلکه مقادیر واقعی هر علامت را نیز بگیرد. در اینجا مثالی از استفاده از حلقه for آورده شده است. اجازه دهید که لازم باشد نمودارهای یک خانواده از منحنی ها برای x نمایش داده شود، که

    با تابع y (x,a)= e-ax sinx، بسته به پارامتر a، برای مقادیر پارامتر a از 0.1- تا

    0.1 در افزایش 0.02. البته می توانید y(x, a) را به صورت متوالی محاسبه کنید و نمودارهای آن را برای مقادیر مختلف رسم کنید، اما استفاده از حلقه for بسیار راحت تر است. فایل متنی-برنامه:

    شکل % ایجاد پنجره گرافیکی

    x = 0:pi/30:2*pi; % محاسبه بردار مقادیر آرگومان

    % شمارش مقادیر پارامتر در یک حلقهبرای = -0.1:0.02:0.1

    % محاسبه بردار مقادیر تابع برای مقدار فعلی ...

    پارامتر

    y = exp(-a*x).*sin(x); % اضافه کردن نمودار توقف روی تابع

    نمودار (x, y) پایان

    در نتیجه اجرای این فایل برنامه، یک پنجره گرافیکی ظاهر می شود که در شکل. 2 که شامل خانواده منحنی های مورد نیاز است.

    برنج. 2. خانواده منحنی ها.

    حلقه‌های For را می‌توان درون یکدیگر قرار داد، اما متغیرهای حلقه‌های تودرتو باید متفاوت باشند. حلقه های تو در تو برای پر کردن ماتریس ها مناسب هستند. نمونه ای از ایجاد ماتریس هیلبرت:

    a = صفر (n); برای i = 1:n

    برای j = 1:n

    a(i، j) = 1/(i+j-1);

    در پایان این بخش، به یک ویژگی دیگر از حلقه for اشاره می کنیم که به همراه توانایی تنظیم یک شمارنده حلقه واقعی با یک گام ثابت، حلقه for را کاملاً همه کاره می کند. آرایه ای از مقادیر را می توان به عنوان مقادیر یک متغیر حلقه استفاده کرد:

    برای شمارش = A

    دستورات متلب

    اگر A یک بردار ردیف باشد، count به صورت متوالی مقدار عناصر آن را هر بار که وارد حلقه می‌شود، می‌گیرد. در مورد یک آرایه دو بعدی A، در مرحله i-امین حلقه، count شامل ستون A(:,i) است. البته اگر A یک بردار ستونی باشد، حلقه فقط یک بار با تعداد برابر A اجرا می شود.

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

    حلقه while.

    حلقه while برای سازماندهی تکرارهای همان نوع اعمال در مواردی استفاده می شود که تعداد تکرارها از قبل مشخص نیست و با تحقق یک شرط مشخص تعیین می شود. مثال گسترش sin(x) به یک سری را در نظر بگیرید:

    x 2k + 1

    S(x)=∑(-1)

    (2k + 1)!

    k = 0

    البته نمی توان تا بی نهایت جمع کرد، اما می توان با دقت معینی مثلاً 10-10 جمع کرد. بدیهی است که تعداد اصطلاحات مجموعه در این موردناشناخته است، بنابراین استفاده از عملگر for امکان پذیر نیست. راه حل این است که از یک حلقه while استفاده کنید که تا زمانی که شرط حلقه درست باشد اجرا می شود:

    شرط تکرار حلقه while

    دستورات متلب

    که در در این مثال شرط تکرار چرخه این است که مدول عبارت جاری باشد

    x 2 k + 1 (2k + 1) ! بیش از 10-10. متن فایل تابع mysin که مجموع یک سری را بر اساس محاسبه می کند

    رابطه مکرر:

    k − 1

    2k (2k + 1)

    تابع s = mysin(x)

    % محاسبه سینوس با بسط سری

    % استفاده: y = mysin(x)،-pi< х < pi

    % محاسبه اولین جمع برای k = 0 k = 0;

    % محاسبه متغیر کمکی

    در حالی که abs(u) > 1.0e-10 k = k + 1;

    u = -u* x2/(2*k)/(2*k + 1); s = s + u