بازدید: ١٨۴

حلقه ها در MATLAB (آموزش MATLAB)

بازگشت به صفحه اصلی آموزش MATLAB

 

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

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

حلقه را می توان مجموعه ای از دستورات دانست که در تعداد دفعات مشخصی تکرار می شوند. روشهای زیادی برای انجام اینکار وجود دارند. یکی از این روشها استفاده از حلقه for  است. استفاده از آن برای زمانی که می خواهید کاری را برای تعداد دفعات مشخصی(مثلا 10بار) تکرار کنید، مناسب است.

ساده ترین شکل اجرای این دستور به صورت زیر است:

 

حلقه ها در متلب

 

همانطور که مشاهده می کنید، حلقه با کلمه  for آغاز می شود و کلمه counter نام متغیر شمارنده است. قسمت دوم آن که Startvalue:increment:endValue می باشد ماتریسی است که با استفاده از عملگر کولون (:) ایجاد شده است. در خاتمه هم کلمه end، پایان حلقه را نشان می دهد. دستوراتی که بین for و end قرار دارند، تکرار می شوند. توجه داشته با نوشتن دستورات در خطوط جداگانه، دیگر لازم نیست که برای جداکردن آنها از یکدیگر از کاما و یا سمی کالن قرار دهید. همچنین حلقه ها می توانند بصورت تودرتو باشند یعنی یک حلقه در درون حلقه دیگر قرار داشته باشد.

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

1,1,2,3,5,8,13,21,34,55,89,144.

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

 

loop Matlab

 

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

به خط fib=ones(fib_max,1) توجه کنید. این خط علاوه بر اینکه دو عدد اول بردار را برابر با یک قرار می دهد، فضایی را در یک بردار از قبل تخصیص می دهد تا تمامی اعداد را در خود نگه دارد. با اینکار مطمئن می شوید که برای حفظ  تمامی اعداد، فضای کافی وجود دارد. حال فرض کنید که خط مربوطه به صورت fib(1,:)=1; و fib(2,:)=1; شود آنگاه برنامه دقیقا همان بردار خروجی را تولید می کند. اگرچه درهرقدم جدید، بردار به اندازه یک عضو پیش می رود و باعث می شود تا MATLAB هربار آن را مجددا تعریف کند. اینکار باعث می شود تا زمان زیادی برای اینکار صرف شود.

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

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

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

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

 

حلقه ها در MATLAB

 

دراینجا متغیر tic تعداد دفعاتی را نشان می دهد که اجرا شده است و متغیر toc مقدار زمانی را محاسبه می کند که از زمان اجرای tic گذشته است شبیه به یک کرونومتر. جدای از آن برداری از 1000 عدد اول فیبوناچی ساخته می شود و به اندازه 1000 بار تکرار می شود. تمامی اینکارها در حدود 3.9 ثانیه طول می کشد. اکنون می خواهیم تابع را تغییر دهیم که در آن متغیر fib از قبل به fib(1,:)=1;fib(2,:)=1; تخصیص داده می شود. تابع را ذخیره کرده و مجددا به اجرا باز می گردیم تا زمان آنرا اندازه گیری کنیم:

 

محاسبه زمان عدد فیبوناچی

 

همانطورکه مشاهده می کنید در این حالت در حدود 14 ثانیه تفاوت زمانی وجود دارد.

 

بازگشت به صفحه اصلی آموزش MATLAB

طراحی سایت و سئو توسط ضابط