[آموزش] مباحث عمومی در متلب

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب این تاپیک:

  1. مشاهده صفحات اینترنتی با متلب
  2. تعیین مقدار زمان اجرای محاسبات در متلب
  3. تولید اعداد تصادفی در متلب
  4. نمایش تاریخ و ساعت در متلب
  5. Save و load کردن متغیرها در متلب
  6. ساخت حلقه در متلب با for
  7. اجرای دستورات شرطی با دستور if در متلب
  8. تشخیص کلمات کلیدی در متلب با دستور iskeyword
  9. چیدمان اعداد صحیح 1 تا n به صورت تصادفی در یک بردار با دستور randperm در متلب
  10. دادن مقدار به متغیرها از طریق کیبورد با دستور input در متلب
  11. تولید صدای ((بیپ)) به عنوان هشدار برای بروز خطا ، با دستور beep در متلب
  12. ساخت فایل exe در متلب
  13. مخفی سازی کدهای برنامه نوشته شده ، با دستور pcode در متلب
  14. چک کردن نامساوی بودن دو متغیر با دستور ne در متلب
  15. ساخت آرایه ها برای توابع چند بعدی با دستور ndgrid در متلب
  16. وارد کردن اطلاعات از Excel به درون متلب
  17. یافتن زمان اجرای توابع مختلف در برنامه اجرا شده، با دستور profile در متلب
  18. تبدیل NaN های یک ماتریس به صفر، در متلب
  19. پردازش موازی (Parallel Computing) در متلب
  20. نمایش یک پیام، همانند پیام های خطای متلب، با دستور error در متلب
  21. اجرای دستوراتی دیگر، در صورت بروز خطا در دستورات فعلی، با دستورات try و catch در متلب
  22. تشخیص آرایه های عددی (numeric arrays)، با دستور isnumeric در متلب
  23. نمایش گرافیکی تعدادی انتخاب به کاربر (برای انتخاب یکی) در یک پنجره، با دستور menu در متلب
  24. خارج شدن از حلقه (for و while) با دستور break
  25. تابع دلتای دیراک (تابع ضربه - Dirac delta) در متلب
  26. نمایش اطلاعات برنامه متلب (MATLAB) و Toolbox های نصب بر روی آن، با دستور ver در متلب
  27. ساخت ProgressBar برای نمایش میزان پیشرفت اجرای برنامه، در متلب
  28. محاسبه کانولوشن (Convolution)، با دستور conv ، در متلب


منبع: kelidestan.com
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده صفحات اینترنتی با متلب

مشاهده صفحات اینترنتی با متلب

نرم افزار متلب دارای یک مرورگر اینترنت می باشد که با آن می توانید سایت های اینترنتی را مشاهده کنید. برای آنکه مرورگر اینترنت متلب باز شود، تنها کافی است که دستور مثال زیر را اجرا کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]web[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]مرورگر اینترنت متلب باز می شود و شما چنانچه به اینترنت متصل باشید، می توانید در اینترنت به گشت و گذار بپردازید و احتیاجی به نصب یک مرورگر اینترنت دیگر ندارید.چنانچه بخواهید مرورگر اینترنت متلب باز شده و صفحه خاصی از اینترنت را نمایش بدهد، باید آدرس آن صفحه اینترنتی را پس از web بنویسید. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]web[/COLOR] http://www.www.www.iran-eng.ir[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]نرم افزار متلب، مرورگر اینترنت خود را باز کرده و محتویات آدرس http://www.www.www.iran-eng.ir را نمایش می دهد (به شرط متصل بودن به اینترنت).
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تعیین مقدار زمان اجرای محاسبات در متلب

تعیین مقدار زمان اجرای محاسبات در متلب

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

معمولا در پروژه های پیچیده، زمان اجرای برنامه، بسیار طولانی می شود. در چنین مواقعی، برنامه نویس ممکن است که کنجکاو باشد که یکی از موارد زیر را بداند :

1- کدام بخش برنامه است که بیشترین زمان را به خود اختصاص داده است. با دانستن این موضوع، برنامه نویس سعی می کند که کدهای آن بخش از برنامه را بهینه سازی کند تا در زمان صرفه جویی شود.

2- ممکن است بخواهیم بدانیم که زمان اجرای برنامه چقدر است، اما نمی خواهیم که مجبور باشیم همین طور بنشینیم و ببینیم چه زمانی برنامه پایان می یابد. مثلا شب قبل از خواب، برنامه را اجرا می کنید و صبح که بیدار شوید، می توانید در پنجره Command ، میزان زمان اجرای برنامه را ببینید.

3- در بسیاری از برنامه ها، حلقه های for هستند که زمان زیادی می گیرند. فرض کنید حلقه ای داریم که پارامتر آن از 1 تا 1000 می باشد. با قرار دادن دستور در ابتدا و انتهای حلقه (ابتدا و انتهای درون حلقه) می توانیم زمان یک بار اجرا را محاسبه کنیم و سپس آن را ضرب در 1000 کنیم، چنانچه زمان بیش از حد زیاد باشد، می توانیم همین حالا آن را متوقف کنیم (با گرفتن کلید Ctrl و فشار دادن کلید C از کیبورد)، به جای آن که پس از اجرای نیمی از برنامه، به این نتیجه برسیم.

نحوه استفاده از دستورهای tic و toc را در مثال زیر شرح داده ایم :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]tic[/COLOR]
A=[COLOR=#0000FF]ones[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]100[/COLOR],[COLOR=#3333FF]100[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]toc[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.000064[/COLOR] seconds.[/FONT]
[/FONT][/COLOR]
دستور (100,100)A=ones ، ماتریسی با 100 ردیف و 100 ستون می سازد که همه مقادیر آن برابر 1 می باشد. همان طور که مشاهده می کنید، ساخت این ماتریس، 0.000064 ثانیه طول کشیده است. زیاد به این عدد کوچک خیره نشوید، زیرا ممکن است روزی آرزویتان این باشد که برنامه ای که دارید، در کمتر از 1 روز اجرا شود، اکنون که این مطالب را برای شما می نویسم درگیر برنامه ای هستم که تخمین زده ام اجرای آن 8 روز طول می کشد و باید به هر نحو ممکن این مقدار را به 1 روز برسانم.

[h=4]نکته :[/h]چنانچه بخواهید زمان اجرای کل برنامه را متوجه شوید، تنها کافی است که دستور tic در اولین خط از برنامه و دستور toc در آخرین خط از برنامه قرار گیرد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تولید اعداد تصادفی در متلب

تولید اعداد تصادفی در متلب

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


دستور rand :

این دستور قادر است اعداد تصادفی در بازه (0,1) بسازد. به مثال زیر توجه کنید :

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]rand[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]2[/COLOR],[COLOR=#3333FF]3[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
    [COLOR=#3333FF]0.2785[/COLOR]    [COLOR=#3333FF]0.9575[/COLOR]    [COLOR=#3333FF]0.1576[/COLOR]
    [COLOR=#3333FF]0.5469[/COLOR]    [COLOR=#3333FF]0.9649[/COLOR]    [COLOR=#3333FF]0.9706[/COLOR][/FONT]
[/FONT][/COLOR]
دستور (2,3)rand ، ماتریسی با 2 ردیف و 3 ستون می سازد که عناصر آن به صورت اعداد تصادفی در بازه (0,1) انتخاب شده اند.

اگر درون پرانتز دستور rand ، تنها یک عدد بنویسیم، مثلا (2)rand ، آنگاه دستور rand ، تعداد ردیف و تعداد ستون ها را برابر آن عدد می گیرد. به مثال زیر توجه کنید :

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]rand[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
    [COLOR=#3333FF]0.9572[/COLOR]    [COLOR=#3333FF]0.8003[/COLOR]
    [COLOR=#3333FF]0.4854[/COLOR]    [COLOR=#3333FF]0.1419[/COLOR][/FONT]
[/FONT][/COLOR]
مشاهده می کنید که ماتریس، دارای 2 ردیف و 2 ستون می باشد.

ایجاد اعداد تصادفی در بازه ای غیر از (0,1) با دستور rand :

برای آنکه اعداد تصادفی، در بازه ای غیر از بازه (0,1) باشند، تنها کافی است که از یک فرمول ساده استفاده کنیم. اگر اعداد تصادفی در بازه (0,1) را داشته باشیم، آنگاه با فرمول به کار رفته در مثال زیر، می توانیم اعداد تصادفی در بازه (a,b) بسازیم :

مثال :

فرض کنید بخواهیم ماتریسی حاوی اعداد تصادفی در بازه (8,12) بسازیم، می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]a=[COLOR=#3333FF]8[/COLOR];
b=[COLOR=#3333FF]12[/COLOR];
A=a+[COLOR=#008800]([/COLOR]b-a[COLOR=#008800])[/COLOR]*[COLOR=#0000FF]rand[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]2[/COLOR],[COLOR=#3333FF]3[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
    [COLOR=#3333FF]9.6870[/COLOR]   [COLOR=#3333FF]11.1688[/COLOR]   [COLOR=#3333FF]10.6230[/COLOR]
   [COLOR=#3333FF]11.6629[/COLOR]   [COLOR=#3333FF]11.8380[/COLOR]    [COLOR=#3333FF]8.1428[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش تاریخ و ساعت در متلب

نمایش تاریخ و ساعت در متلب

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

[h=2]دستور clock :[/h]دستور clock ، مقدار سال، ماه، روز، ساعت، دقیقه و ثانیه را برای لحظه فعلی، به صورت یک بردار نشان می دهد. ترتیب این مقادیر، در بردار خروجی، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#008800][[/COLOR]year  month  day  hour  minute  seconds[COLOR=#008800]][/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]clock[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
  1.0e+003 *
 
    [COLOR=#3333FF]2.0120[/COLOR]    [COLOR=#3333FF]0.0050[/COLOR]    [COLOR=#3333FF]0.0270[/COLOR]    [COLOR=#3333FF]0.0090[/COLOR]    [COLOR=#3333FF]0.0170[/COLOR]    [COLOR=#3333FF]0.0264[/COLOR][/FONT]
[/FONT][/COLOR]
در نتایج فوق، همان طور که می بینید، قبل از خط نمایش مقادیر عناصر بردار، عبارت 1.0e+003 * نوشته شده است که معنای آن این است که مقادیری که نمایش داده شده اند، بر 1000 تقسیم شده اند تا نمایش آنها راحت تر باشد، بنابراین مثلا برای دانستن مقدار سال باید عدد 2.012 را در 1000 ضرب کنیم که نتیجه می شود سال 2012 .

[h=2]دستور date :[/h]این دستور، تاریخ امروز را به صورت یک رشته نمایش می دهد. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]date[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ans[/COLOR] =
 
[COLOR=#3333FF]27[/COLOR]-May-[COLOR=#3333FF]2012[/COLOR][/FONT]
[/FONT][/COLOR]
[h=2]دستور today :[/h]این دستور، تعداد روزهای گذشته از تقویم میلادی تا به امروز را به صورت یک عدد، محاسبه می کند.

[h=4]مثال :[/h]می خواهیم بدانیم که امروز چندمین روز از تقویم میلادی می باشد. می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]today[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ans[/COLOR] =
 
      [COLOR=#3333FF]735016[/COLOR][/FONT]
[/FONT][/COLOR]
در واقع عدد فوق، تعداد تمامی روزهایی می باشد که از تقویم میلادی گذشته است. مثلا امروز تاریخ 2012/05/27 میلادی می باشد، بنابراین عدد فوق باید به طور تقریبی برابر حاصل اجرای دستور زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#008800]([/COLOR][COLOR=#3333FF]2011[/COLOR]*[COLOR=#3333FF]365[/COLOR][COLOR=#008800])[/COLOR]+[COLOR=#008800]([/COLOR][COLOR=#3333FF]5[/COLOR]*[COLOR=#3333FF]30[/COLOR][COLOR=#008800])[/COLOR]+[COLOR=#3333FF]27[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ans[/COLOR] =
 
      [COLOR=#3333FF]734192[/COLOR][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، عبارت بالا تنها یک تقریب است که عملکرد دستور today را متوجه شوید، اما دستور today ، عددی را که بر می گرداند، کاملا دقیق است.

[h=2]دستور datenum :[/h]قبلا شرح دادیم که دستور today ، عدد مربوط به تعداد روزهای گذشته از تقویم میلادی تا به امروز را حساب می کند. اما ممکن است بخواهیم، تعداد روزها را برای یک تاریخ مشخص که در ذهن داریم، محاسبه کنیم. برای این منظور می توانیم از دستور datenum استفاده کنیم. این دستور، مخفف date number می باشد. در دستور datenum ، تاریخ مد نظرمان را به شکل های مختلفی، می توانیم مشخص کنیم که عبارتند از :

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

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]datenum[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]2012[/COLOR], 05, [COLOR=#3333FF]27[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، ابتدا باید سال، بعد ماه و در آخر، روز را برای دستور datenum مشخص کنیم.

[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
      [COLOR=#3333FF]735016[/COLOR][/FONT]
[/FONT][/COLOR]
شکل دوم : به صورت کاملا عددی ( مثل : 27.05.2012 )

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]datenum[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'27.05.2012'[/COLOR], [COLOR=#A020F0]'dd.mm.yyyy'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
      [COLOR=#3333FF]735016[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که با عبارت 'dd.mm.yyyy' در واقع ترتیب به کار رفته برای روز، ماه و سال را مشخص کرده ایم. d حرف اول کلمه day و m حرف اول کلمه month و y حرف اول کلمه year می باشد.

شکل سوم : ماه به صورت نام ( مثل : 27-May-2012 )

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]datenum[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'27-May-2012'[/COLOR], [COLOR=#A020F0]'dd-mmm-yy'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
      [COLOR=#3333FF]735016[/COLOR][/FONT]
[COLOR=#3333FF]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
Save و load کردن متغیرها در متلب

Save و load کردن متغیرها در متلب

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

[h=2]Save و Load کردن متغیرها در متلب از طریق منوی file :[/h]پس از آن که متغیرها در متلب تعریف شدند، در پنجره اصلی نرم افزار متلب، از منوی File ، گزینه Save Workspace As را انتخاب کنید و برای فایل، نامی انتخاب کرده و آن را در مسیر دلخواه خود ذخیره کنید. فایلی با پسوند .matذخیره خواهد شد که حاوی اطلاعات و مقادیر متغیرها می باشد.

برای آن که متغیرهای ذخیره شده را Load کنید، تنها کافی است که در پنجره اصلی متلب، از منوی File ، گزینه Open را انتخاب کرده و سپس فایل ذخیره شده را انتخاب کنید و یا می توانید از منوی File گزینه Import Data را انتخاب نموده و سپس فایل ذخیره شده را انتخاب کنید.

تفاوت گزینه Import Data با Open ، در این است که اگر از گزینه Open استفاده کنید، تمامی متغیرهای موجود در آن فایل، در متلب تعریف می شوند، اما اگر از گزینه Import Data استفاده کنید، متلب پنجره ای شبیه به شکل زیر باز می کند و لیستی از تمامی متغیرهای موجود در فایل را نشان می دهد و شما می توانید انتخاب کنید که کدام متغیرها در متلب تعریف شوند و کدام متغیرها تعریف نشوند.matlab21.jpg
[h=2]Save و Load کردن متغیرها در متلب از طریق دستور save و دستور load :[/h]در برخی مواقع، نیاز داریم که متغیرها، در وسط یک برنامه save شوند و یا این که در نیمه های اجرای برنامه، تعدادی متغیر که قبلا ذخیره شده اند را Load کنیم. برای اینگونه موارد، نرم افزار متلب، دو دستور save و load را در نظر گرفته است.

[h=2]دستور save برای Save کردن متغیرها در متلب :[/h]ساده ترین شیوه استفاده از دستور save ، به صورت زیر می باشد :

save('نام فایلی که ذخیره می شود')

در این حالت، تمامی متغیرهای تعریف شده در متلب، در فایلی با نام مشخص شده، در محل فولدری که پنجره Current Folder نمایش می دهد، save خواهند شد. احتیاجی نیست که پسوند .mat را برای نام فایل بنویسید. باید نام فایل را حتما در بین دو علامت ' قرار دهید، در غیر این صورت، با پیام خطا مواجه می شوید. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
A=[COLOR=#3333FF]2[/COLOR];
B=[COLOR=#3333FF]3[/COLOR];
C=[COLOR=#3333FF]4[/COLOR];
[COLOR=#0000FF]save[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'ABC'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]فایلی با نام ABC.mat ، در فولدری که پنجره Current Folder نمایش می دهد، save خواهد شد. برای چک کردن اطلاعات این فایل، ابتدا دستور clear را اجرا کنید تا تمامی متغیرهای تعریف شده در متلب، پاک شوند. مشاهده خواهید کرد که پنجره Workspace ، خالی می شود. سپس از منوی File ، گزینه Open را انتخاب کرده و فایل ABC.mat را باز کنید. نتیجه این است که در پنجره Workspace ، سه متغیر A ، B و C ، نمایش داده خواهند شد.

چنانچه بخواهیم از بین متغیرهای تعریف شده در متلب، تنها یک یا چند متغیر خاص را در فایلی save کنیم، باید نام آن متغیرها را در دستور save ، ذکر کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]این بار تنها متغیرهای A و B را ذخیره می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
A=[COLOR=#3333FF]2[/COLOR];
B=[COLOR=#3333FF]3[/COLOR];
C=[COLOR=#3333FF]4[/COLOR];
[COLOR=#0000FF]save[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'ABC'[/COLOR],[COLOR=#A020F0]'A'[/COLOR],[COLOR=#A020F0]'B'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]ابتدا دستور clear را اجرا کنید و سپس فایل ABC.mat را باز کنید. با نگاه کردن به پنجره Workspace ، متوجه خواهید شد که تنها متغیرهای A و B تعریف شده اند.

[h=4]نکته :[/h]چنانچه بخواهیم فایل حاوی متغیرها در فولدری غیر از آدرس Current Folder ذخیره شود، آنگاه باید آدرس کامل آن فولدر را قبل از نام فایل بنویسیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
A=[COLOR=#3333FF]2[/COLOR];
B=[COLOR=#3333FF]3[/COLOR];
C=[COLOR=#3333FF]4[/COLOR];
[COLOR=#0000FF]save[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'C:\Project\ABC'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]فایل ABC.mat که حاوی اطلاعات سه متغیر A ، B و C می باشد، در فولدر به آدرس C:\Project ذخیره می شود.چنانچه این فولدر وجود نداشته باشد، متلب پیام خطایی را نمایش خواهد داد.

[h=2]دستور load برای Load کردن متغیرها در متلب :[/h]با دستور load ، می توانیم متغیرهای save شده در یک فایل را در متلب تعریف کنیم (وارد کنیم). به مثال زیر توجه کنید :

[h=4]مثال :[/h]فرض کنید قبلا متغیرهای A ، B و C را در فایل ABC.mat ذخیره کرده باشیم، با دستور زیر می توانیم این متغیرها را دوباره در متلب تعریف (وارد) کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]load[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'ABC'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]سه متغیر A ، B و C را می توانید در پنجره Workspace مشاهده کنید.

[h=4]نکته :[/h]در مواردی ممکن است که یک فایل حاوی اطلاعات مربوط به تعداد زیادی متغیر باشد، اما ما تنها به یک یا چند متغیر از میان آنها نیاز داشته باشیم، در این صورت باید نام متغیرهایی که می خواهیم در متلب وارد کنیم را در دستور load بنویسیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]load[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'ABC'[/COLOR],[COLOR=#A020F0]'A'[/COLOR],[COLOR=#A020F0]'B'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]تنها متغیرهای A و B را در پنجره Workspace مشاهده خواهید کرد و متغیر C در متلب تعریف نخواهد شد.

[h=4]نکته :[/h]ممکن است فایل حاوی متغیرها در فولدری غیر از فولدر آدرس Current Folder وجود داشته باشد، در اینگونه موارد باید آدرس فولدر حاوی فایل را قبل از نام فایل بنویسیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]فرض کنید فایل ABC.mat حاوی اطلاعات متغیرهای A ، B و C ، در فولدر به آدرس C:\Project وجود داشته باشید، در این صورت می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]load[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'C:\Project\ABC'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]متغیرهای A ، B و C در پنجره Workspace نمایش داده خواهند شد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت حلقه در متلب با for

ساخت حلقه در متلب با for

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

[h=4]مثال :[/h]فرض کنید بخواهیم حاصل 10*9*8*7*6*5*4*3*2*1=!10 را با نرم افزار متلب محاسبه کنیم، برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]k=[COLOR=#3333FF]1[/COLOR];
[COLOR=#0000FF]for[/COLOR] m=[COLOR=#3333FF]2[/COLOR]:[COLOR=#3333FF]10[/COLOR]
    k=k*m;
[COLOR=#0000FF]end[/COLOR]
k[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]k =
 
     [COLOR=#3333FF]3628800[/COLOR][/FONT]
[/FONT][/COLOR]
در کدهای فوق، مشخص کرده ایم که مقدار m از 2 تا 10 باید باشد و در هر بار اجرای دستورات حلقه، m برابر مقدار یکی از اعداد این بازه خواهد بود (2 و 3 و ... و 9 و 10). ابتدا مقدار k را، قبل از شروع حلقه، برابر 1 تعریف کرده ایم. سپس حلقه for شروع می شود. ابتدا مقدار m برابر 2 ، که اولین عدد است، قرار داده می شود، k در m=2 ضرب می شود و چون دستورات حلقه تمام شده است، مقدار بعدی m=3 در نظر گرفته می شود و این بار مقدار جدید k در m=3 ضرب می شود و همین طور این روند ادامه می یابد تا زمانی که m=10 نیز در مقدار جدید k ضرب شود و چون دیگر مقدار جدیدی برای m وجود ندارد، حلقه پایان می یابد و در آخر مقدار k نمایش داده می شود.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای دستورات شرطی با دستور if در متلب

اجرای دستورات شرطی با دستور if در متلب

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

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#3333FF]5[/COLOR]
[COLOR=#0000FF]if[/COLOR] A>=[COLOR=#3333FF]0[/COLOR]
    B=A
[COLOR=#0000FF]end[/COLOR]
[COLOR=#0000FF]if[/COLOR] A<=[COLOR=#3333FF]0[/COLOR]
    B=-A
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]5[/COLOR]
 
 
B =
 
     [COLOR=#3333FF]5[/COLOR][/FONT]
[/FONT][/COLOR]
همان طور که مشاهده می کنید، از دو دستور if استفاده کرده ایم. هدف این است که مقدار B برابر قدرمطلق A باشد، بنابراین اگر A مساوی یا بزرگتر از صفر باشد، باید B را برابر A قرار دهیم و اگر A مساوی یا کوچکتر از صفر باشد، باید B را برابر A– قرار دهیم.

دقت کنید که در پایان دستور if ، حتما باید end نوشته شود تا نرم افزار متلب بداند که دستور if پایان یافته است.

[h=2]دستور if به همراه else :[/h]همان طور که گفتیم، زمانی که از دستور if در متلب استفاده می کنیم، متلب شرط یا شرط هایی را چک می کند و در صورت برآورده شدن آنها، دستورات را اجرا می کند. اما شاید بخواهیم به متلب اعلام کنیم که اگر شرط یا شرط ها برآورده نشدند، آنگاه چه دستوراتی را اجرا کند. در اینگونه موارد، دستور if را با else به کار می بریم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]در مثال قبلی، از دو دستور if استفاده کردیم، اما این بار همان مثال را تنها با یک دستور if می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#3333FF]5[/COLOR]
[COLOR=#0000FF]if[/COLOR] A>=[COLOR=#3333FF]0[/COLOR]
    B=A
[COLOR=#0000FF]else[/COLOR]
    B=-A
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]5[/COLOR]
 
 
B =
 
     [COLOR=#3333FF]5[/COLOR][/FONT]
[/FONT][/COLOR]
هدف این بوده است که B برابر قدرمطلق A باشد، ابتدا متلب چک می کند که A مساوی یا بزرگتر از صفر هست یا نه، اگر باشد، آنگاه B را برابر A قرار می دهد و چون شرط برآورده شده است، دستورات نوشته شده برای else را نادیده می گیرد. اما اگر A مساوی یا بزرگتر از صفر نباشد، آنگاه متلب، تنها دستورات مربوط به else را اجرا می کند.

[h=2]دستور if به همراه elseif :[/h]گاهی نیاز داریم که چندین شرط به صورت پی در پی چک شوند، اگر اولین شرط صحیح بود، دستورات مربوط به آن اجرا شوند و دستورات مربوط به سایر شرط ها نادیده گرفته شوند، اما اگر شرط اول برآورده نشده بود، شرط دوم چک شود و در صورت برآورده شدن شرط دوم، دستورات مربوط به آن اجرا شود و دستورات مربوط به شرط های باقیمانده نادیده گرفته شود، در صورت برآورده نشدن شرط دوم، آنگاه شرط سوم چک شود و همین طور تا آخر. در اینگونه موارد باید از دستور if به همراه elseif استفاده کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]همان مثال قبل را این بار با استفاده از elseif می نویسیم. تنها تفاوت این است که حالت خاص A=0 را جداگانه بررسی کرده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#3333FF]5[/COLOR]
[COLOR=#0000FF]if[/COLOR] A>[COLOR=#3333FF]0[/COLOR]
    B=A
[COLOR=#0000FF]elseif[/COLOR] A==[COLOR=#3333FF]0[/COLOR]
    B=[COLOR=#3333FF]0[/COLOR]
[COLOR=#0000FF]else[/COLOR]
    B=-A
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]5[/COLOR]
 
 
B =
 
     [COLOR=#3333FF]5[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که برای چک کردن شرط تساوی، حتما باید از دو علامت تساوی به صورت == استفاده شود، زیرا علامت = در متلب، برای نسبت دادن مقدار به متغیرها در نظر گرفته شده است و بنابراین برای چک کردن شرط تساوی، مجبوریم از علامت == استفاده کنیم.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تشخیص کلمات کلیدی در متلب با دستور iskeyword

تشخیص کلمات کلیدی در متلب با دستور iskeyword

زمانی که می خواهیم نامی را برای یک متغیر انتخاب کنیم، باید دقت کنیم که آن نام، قبلا توسط خود نرم افزار متلب تعریف نشده باشد. به کلماتی که توسط خود نرم افزار متلب تعریف شده اند، کلمات کلیدی (keyword) می گوییم. کلمات کلیدی، در نرم افزار متلب، به رنگ آبی نمایش داده می شوند. به عنوان مثال، نمی توانیم برای یک متغیر ، نام for را انتخاب کنیم، زیرا این کلمه قبلا در متلب، به عنوان یک دستور، تعریف شده است.

بنابراین در صورتی که نام for را انتخاب کنیم، نرم افزار متلب یک پیام خطا (error) را نمایش خواهد داد. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]for[/COLOR]=[COLOR=#3333FF]2[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]??? [COLOR=#0000FF]for[/COLOR]=[COLOR=#3333FF]2[/COLOR]
       |
[COLOR=#0000FF]Error[/COLOR]: The expression to the left of the equals [COLOR=#0000FF]sign[/COLOR] [COLOR=#0000FF]is[/COLOR] not a valid target [COLOR=#0000FF]for[/COLOR] an assignment.[/FONT]
[/FONT][/COLOR]
در متلب، دستور iskeyword ، برای تشخیص کلمات کلیدی به کار می رود، یعنی این که اگر بخواهید بدانید که یک کلمه، قبلا در متلب تعریف شده است یا نه، باید از دستور iskeyword استفاده کنید. اگر دستور iskeyword ، عدد 1 را برگرداند، یعنی آن کلمه، یک کلمه کلیدی است و قبلا در متلب تعریف شده است و اگر دستور iskeyword ، عدد 0 را برگرداند، یعنی آن کلمه در متلب تعریف نشده است و می توانیم از آن برای نام یک متغیر استفاده کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=iskeyword[COLOR=#008800]([/COLOR][COLOR=#A020F0]'for'[/COLOR][COLOR=#008800])[/COLOR]
B=iskeyword[COLOR=#008800]([/COLOR][COLOR=#A020F0]'small'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]1[/COLOR]
 
 
B =
 
     [COLOR=#3333FF]0[/COLOR][/FONT]
[COLOR=#3333FF]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چیدمان اعداد صحیح 1 تا n به صورت تصادفی در یک بردار با دستور randperm در متلب

چیدمان اعداد صحیح 1 تا n به صورت تصادفی در یک بردار با دستور randperm در متلب

چنانچه از دستور randperm به صورت randperm(n) استفاده کنیم، آنگاه این دستور در خروجی، یک بردار را برمی گرداند که در آن بردار، اعداد صحیح 1 تا n به صورت تصادفی قرار گرفته اند. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]randperm[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]9[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]6[/COLOR]     [COLOR=#3333FF]3[/COLOR]     [COLOR=#3333FF]7[/COLOR]     [COLOR=#3333FF]8[/COLOR]     [COLOR=#3333FF]5[/COLOR]     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]2[/COLOR]     [COLOR=#3333FF]4[/COLOR]     [COLOR=#3333FF]9[/COLOR][/FONT]
[COLOR=#3333FF]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
دادن مقدار به متغیرها از طریق کیبورد با دستور input در متلب

دادن مقدار به متغیرها از طریق کیبورد با دستور input در متلب

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

[h=2]به کار بردن دستور input برای متغیرهای عددی :[/h]نرم افزار متلب باید بداند که مقداری که توسط کاربر برای دستور input وارد خواهد شد، یک عدد است یا اینکه یک رشته (آرایه ای از کاراکترها) می باشد. به همین دلیل، دستور input به دو شیوه به کار می رود. اگر متغیر قرار است که یک عدد باشد، باید از دستور input به صورت معمولی استفاده کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]input[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'please enter your number :   '[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]در پنجره Command ، عبارت : please enter your number نمایش داده خواهد شد. حال تنها کافی است که مثلا عدد 2 را وارد کنیم و سپس کلید enter از کیبورد را فشار دهیم. آنگاه نتیجه زیر نمایش داده خواهد شد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]2[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین عدد 2 را که وارد کرده ایم، به عنوان مقدار متغیر A در نظر گرفته شده است.

[h=2]به کار بردن دستور input برای متغیرهای رشته ای :[/h]همان طور که گفتیم، اگر دستور input را بخواهیم برای یک متغیر عددی به کار ببریم، از شکل معمولی آن استفاده می کنیم، اما چنانچه متغیر، یک متغیر رشته ای باشد، آنگاه باید عبارت 's' را درون پرانتز دستور input بنویسیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]همان مثال قبل را این بار برای یک متغیر رشته ای به کار می بریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]input[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'please enter your number :   '[/COLOR],[COLOR=#A020F0]'s'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]در پنجره Command ، عبارت : please enter your number نمایش داده خواهد شد. حال تنها کافی است که مثلا کلمه cat را وارد کنیم و سپس کلید enter از کیبورد را فشار دهیم. آنگاه نتیجه زیر نمایش داده خواهد شد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
[COLOR=#0000FF]cat[/COLOR][/FONT]
[/FONT][/COLOR]
مشاهده می کنید که متغیر A ، یک متغیر رشته ای می باشد.

[h=2]به کار بردن دستور input برای متغیرهای عددی و رشته ای به صورت هم زمان :[/h]ممکن است بخواهیم که انتخاب اینکه مقدار متغیر مورد نظر یک عدد باشد یا یک رشته باشد را به عهده خود کاربر بگذاریم تا از این نظر، کاربر آزادی انتخاب داشته باشد. برای این منظور می توان از یک نکته کوچک استفاده کرد و آن این است که از دستور input ، به همان شکل معمولیش استفاده کنیم، اگر کاربر قصد وارد کردن یک عدد را داشت، باید عدد را وارد کند، اما اگر قصد وارد کردن یک رشته را داشته باشد، باید رشته مورد نظر خود را بین دو علامت ' قرار دهد. دستور input تشخیص خواهد داد که منظور کاربر، وارد کردن یک رشته بوده است و بنابراین دو علامت ' را جزء رشته در نظر نخواهد گرفت و کاراکترهای بین آن دو علامت را به عنوان یک رشته، به متغیر اختصاص خواهد داد. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A=[COLOR=#0000FF]input[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'please enter your number for A :   '[/COLOR][COLOR=#008800])[/COLOR]
B=[COLOR=#0000FF]input[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'please enter your string for B :   '[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]در پنجره Command ، ابتدا عبارت زیر نمایش داده می شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]please enter your number [COLOR=#0000FF]for[/COLOR] A :[/FONT]
[/FONT][/COLOR]
فرض کنید مقدار عددی 2 را وارد کرده و کلید enter از کیبورد را فشار دهیم. تا اینجا، در پنجره Command ، عبارات زیر نمایش داده شده است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]please enter your number [COLOR=#0000FF]for[/COLOR] A :   [COLOR=#3333FF]2[/COLOR]
 
A =
 
     [COLOR=#3333FF]2[/COLOR]
 
please enter your string [COLOR=#0000FF]for[/COLOR] B :[/FONT]
[/FONT][/COLOR]
حال برای متغیر B ، عبارت 'cat' را وارد کرده و کلید enter از کیبورد را فشار می دهیم. کل عبارات نمایش داده شده به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]please enter your number [COLOR=#0000FF]for[/COLOR] A :   [COLOR=#3333FF]2[/COLOR]
 
A =
 
     [COLOR=#3333FF]2[/COLOR]
 
please enter your string [COLOR=#0000FF]for[/COLOR] B :   [COLOR=#A020F0]'cat'[/COLOR]
 
B =
 
[COLOR=#0000FF]cat[/COLOR][/FONT]
[/FONT][/COLOR]
مشاهده می کنید که متغیر B به صورت رشته cat (شامل سه کاراکتر) تعریف شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تولید صدای ((بیپ)) به عنوان هشدار برای بروز خطا ، با دستور beep در متلب

تولید صدای ((بیپ)) به عنوان هشدار برای بروز خطا ، با دستور beep در متلب

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

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]beep[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]صدای ((بیپ)) شنیده خواهد شد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت فایل exe در متلب

ساخت فایل exe در متلب

فرض کنید که یک برنامه کاربردی ساخته اید و اکنون قصد دارید که آن را در اختیار اشخاص دیگری قرار دهید تا از آن استفاده نمایند، ولی خوب مسلما هر کسی بر روی کامپیوتر خود نرم افزار متلب را به صورت نصب شده ندارد و متلب هم نرم افزار کم حجمی نیست که فرد سریع آن را از اینترنت بگیرد و نصب کند. در اینگونه مواقع، ساخت یک فایل exe از برنامه، بسیار مفید خواهد بود تا هر کس تنها با کلیک بر روی آن، قادر به اجرای آن برنامه کاربردی باشد.البته باید تذکر بدهم که قبل از اجرای فایل بر روی یک کامپیوتر دیگر که متلب بر روی آن نصب نیست، یک پیش نیاز باید بر روی آن کامپیوتر نصب شود. این پیش نیاز، MCR می باشد و در خود فولدری که متلب در آن نصب شده است، می توانید آن را بیابید تا بعدا بر روی کامپیوتر مقصد، آن را نصب کنید. به عنوان مثال، بر روی کامپیوتر من، متلب در فولدر C:\Program Files\MATLAB نصب شده است و فایل با نام MCRInstaller که برای نصب MCR به کار می رود، در آدرس زیر قرار گرفته است :

C:\Program Files\MATLAB\R2011a\toolbox\compiler\deploy\win64\

این فایل حدود 200 مگابایت حجم دارد که باید آن را بر روی کامپیوتر مقصد اجرا کنیم تا فایل exe که می سازیم، بر روی آن کامپیوتر قابل اجرا باشد.
علاوه بر پیش نیاز فوق، متلب شما نیز نباید خیلی قدیمی باشد و در کل به شما توصیه می کنم که از جدیدترین شماره نرم افزار متلب استفاده کنید.اکنون شرح می دهیم که چگونه یک فایل exe ، از یک برنامه، که در یک m-file آن را نوشته ایم، بسازیم. ابتدا کد زیر را، در یک m-file با نام program.m ، می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]x=[COLOR=#3333FF]0[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]10[/COLOR];
y=x.^[COLOR=#3333FF]2[/COLOR];
[COLOR=#0000FF]plot[/COLOR][COLOR=#008800]([/COLOR]x,y[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه اجرای این m-file ، نمایش شکل زیر می باشد :

matlab132.jpg
حال برای تبدیل برنامه فوق به یک فایل exe ، از دو روش مختلف می توانیم استفاده کنیم که در ادامه آنها را شرح داده ایم :

روش اول: ساخت فایل exe با دستور deploytool در متلب

ابتدا در پنجره Command ، دستور deploytool را اجرا می کنیم، یعنی می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]deploytool[/FONT]
[/FONT][/COLOR]
سپس پنجره ای به شکل زیر باز شود :matlab133.gif

دقت کنید که منوی با نام New انتخاب شده است و همچنین در جلوی عنوان Type ، گزینه Windows Standalone Application انتخاب شده باشد. علاوه براین، نام دلخواه و مکان دلخواهی را برای فایل انتخاب می کنیم (من نام program.prj را انتخاب می کنم). سپس بر روی دکمه ok کلیک می کنیم. درون پنجره اصلی نرم افزار متلب، پنجره ای به شکل زیر باز می شود :

matlab134.jpg

نام این پنجره، Windows Standalone Application می باشد. بر روی گزینه Add main file ، در این پنجره، کلیک می کنیم و سپس program.m را انتخاب می کنیم که همان m-file ای هست که می خواهیم توسط فایل exe ، برنامه نوشته شده در آن اجرا شود. پس از انتخاب، کمی صبر کنید تا متلب، فایل را بررسی کند (بستگی به پیچیدگی و حجم برنامه دارد). سپس در بالای پنجره Windows Standalone Application ، یک دکمه به نام Build وجود دارد، بر روی آن کلیک می کنیم. در این زمان، متلب ساخت فایل exe را شروع می کند که معمولا چند دقیقه طول می کشد و پنجره زیر نمایش داده می شود :


matlab135.gif

پس از پایان پردازش ها، بر روی دکمه close که نمایش داده می شود، کلیک کنید. متلب در محلی که قبلا تعیین کرده ایم، یک فولدر با نام program می سازد که درون آن، دو فولدر با نام های distrib و src وجود دارد که فایل exe مورد نظر ما، درون فولدر distrib قرار گرفته است. درون فولدر distrib ، یک فایل exe با نام program و به شکل نماد مشهور نرم افزار متلب وجود دارد که با کلیک کردن بر روی آن، دستورات، اجرا شده و سپس تصویر زیر نمایش داده می شود :
matlab132.jpg

روش دوم : ساخت فایل exe با دستور mcc در متلب

برای ساخت فایل exe ، با استفاده از دستور mcc ، ابتدا آدرس Current Folder را به آدرس فولدر حاوی برنامه program.m ، تغییر بدهید. سپس دستور زیر را در پنجره Command اجرا کنید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]mcc -m program.m[/FONT]
[/FONT][/COLOR]
باید چند دقیقه صبر کنید تا پردازش های متلب، برای ساخت فایل exe ، تمام شود. سپس فایل program.exe در همان فولدر حاوی برنامه program.m ساخته خواهد شد. با کلیک بر روی فایل exe ، یک پنجره محیط dos باز شده و پس از مدتی پردازش، شکل زیر نمایش داده می شود :

matlab132.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مخفی سازی کدهای برنامه نوشته شده ، با دستور pcode در متلب

مخفی سازی کدهای برنامه نوشته شده ، با دستور pcode در متلب

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

[h=4]مثال :[/h]کدهای زیر را در یک m-file می نویسم و آن را در محلی دلخواه، save می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
t=-[COLOR=#0000FF]pi[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#0000FF]pi[/COLOR];
x=[COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR]t[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]plot[/COLOR][COLOR=#008800]([/COLOR]t,x[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]axis[/COLOR][COLOR=#008800]([/COLOR][COLOR=#008800][[/COLOR]-[COLOR=#0000FF]pi[/COLOR] [COLOR=#0000FF]pi[/COLOR] -[COLOR=#3333FF]1.5[/COLOR] [COLOR=#3333FF]1.5[/COLOR][COLOR=#008800]][/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]matlab136.jpg
نام m-file را به دلخواه، برابر program انتخاب می کنیم. حال m-file را می بندیم و چک می کنیم که آدرسی که در پنجره Current Folder نوشته شده است، حتما آدرس فولدر حاوی m-file باشد. سپس کد زیر را در Command نوشته و اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]pcode program[/FONT]
[/FONT][/COLOR]
با اجرای کد بالا، یک فایل با نام program.m ساخته می شود. این فایل، توسط متلب، قابل باز شدن نیست و کدهای آن را نمی توان دید، اما می توانید آن را با متلب اجرا کنید، به این صورت که در پنجره Command ، اسم program را نوشته و سپس کلید enter را فشار می دهیم تا برنامه درون فایل program.p اجرا شود . دقت کنید که قبل از آن، فایل program.m را بردارید تا مطمئن شوید که فایل program.p اجرا شده است. نتیجه اجرای برنامه، شکل زیر خواهد بود :

matlab136.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چک کردن نامساوی بودن دو متغیر با دستور ne در متلب

چک کردن نامساوی بودن دو متغیر با دستور ne در متلب

با استفاده از دستور ne در متلب، می توانیم چک کنیم که آیا دو متغیر، نامساوی می باشند یا خیر. در متلب، علامت های =~ به عنوان نامساوی به کار می روند و عبارت A~=B ، یک عبارت شرطی است که اگر A با B نامساوی باشد، آنگاه متلب، عدد 1 را برمی گرداند و اگر A و B با هم مساوی باشند، متلب، عدد 0 را بر می گرداند. بنابراین دستور ne در متلب، اگر به صورت ne(A,B) به کار رود، همانند عبارت شرطی A~=B عمل می کند و اگر A با B نامساوی باشد، آنگاه عدد 1 را برمی گرداند و اگر A و B با هم مساوی باشند، متلب عدد 0 را بر می گرداند. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
A=[COLOR=#3333FF]35[/COLOR];
B=[COLOR=#3333FF]40[/COLOR];
C=A~=B
D=ne[COLOR=#008800]([/COLOR]A,B[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]C =
 
     [COLOR=#3333FF]1[/COLOR]
 
 
D =
 
     [COLOR=#3333FF]1[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
A=[COLOR=#3333FF]9[/COLOR];
B=[COLOR=#3333FF]9[/COLOR];
C=A~=B
D=ne[COLOR=#008800]([/COLOR]A,B[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]C =
 
     [COLOR=#3333FF]0[/COLOR]
 
 
D =
 
     [COLOR=#3333FF]0[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]دستور ne ، همچنین می تواند دو بردار را نیز در ورودی دریافت کرده و سپس نتیجه مقایسه را به صورت یک بردار، در خروجی برگرداند. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
A=[COLOR=#008800][[/COLOR][COLOR=#3333FF]1[/COLOR] [COLOR=#3333FF]4[/COLOR] [COLOR=#3333FF]8[/COLOR] [COLOR=#3333FF]14[/COLOR][COLOR=#008800]][/COLOR];
B=[COLOR=#008800][[/COLOR][COLOR=#3333FF]2[/COLOR] [COLOR=#3333FF]4[/COLOR] [COLOR=#3333FF]9[/COLOR] [COLOR=#3333FF]14[/COLOR][COLOR=#008800]][/COLOR];
C=A~=B
D=ne[COLOR=#008800]([/COLOR]A,B[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]C =
 
     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR]     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR]
 
 
D =
 
     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR]     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت آرایه ها برای توابع چند بعدی با دستور ndgrid در متلب

ساخت آرایه ها برای توابع چند بعدی با دستور ndgrid در متلب

با استفاده از دستور ndgrid در متلب، می توانیم آرایه هایی را برای توابع چند بعدی بسازیم. توضیحات کامل تر را با یک مثال شرح می دهیم :

[h=4]مثال :[/h]فرض کنید می خواهیم تابع دو بعدی z را به صورت یک ماتریس دو بعدی، بر حسب مقادیر مختلف x و y ، به صورت زیر بسازیم و سپس آن را رسم کنیم :
Untitled.jpg
بازه تعریف شده برای x را به صورت (-5,5) و بازه تعریف شده برای y را به صورت (-4,4) در نظر می گیریم. همچنین، فاصله نمونه های گسسته از این بازه ها را برابر 0.1 قرار می دهیم. برای آنکه سودمندی استفاده از دستور ndgrid را نشان بدهیم، ابتدا روش های دیگر را برای ساخت z به کار می بریم و سپس از دستور ndgrid استفاده می کنیم تا متوجه شوید که استفاده از دستور ndgrid ، ساده ترین راه است. ابتدا با روش سخت تر، این کار را انجام می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
x=-[COLOR=#3333FF]5[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]5[/COLOR];
y=-[COLOR=#3333FF]4[/COLOR]:[COLOR=#3333FF]1.0[/COLOR]:[COLOR=#3333FF]4[/COLOR];
L_x=[COLOR=#0000FF]length[/COLOR][COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR];
L_y=[COLOR=#0000FF]length[/COLOR][COLOR=#008800]([/COLOR]y[COLOR=#008800])[/COLOR];
z=[COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR]L_x,L_y[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:L_x
    [COLOR=#0000FF]for[/COLOR] mm=[COLOR=#3333FF]1[/COLOR]:L_y
        z[COLOR=#008800]([/COLOR]nn,mm[COLOR=#008800])[/COLOR]=[COLOR=#0000FF]sqrt[/COLOR][COLOR=#008800]([/COLOR]x[COLOR=#008800]([/COLOR]nn[COLOR=#008800])[/COLOR]^[COLOR=#3333FF]2[/COLOR]+y[COLOR=#008800]([/COLOR]mm[COLOR=#008800])[/COLOR]^[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR];
    [COLOR=#0000FF]end[/COLOR]
[COLOR=#0000FF]end[/COLOR]
[COLOR=#0000FF]mesh[/COLOR][COLOR=#008800]([/COLOR]z[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]xlabel[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'x'[/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]ylabel[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'y'[/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]zlabel[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'z'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
دستور length ، برای تعیین طول یک بردار است و دستور zeros ، برای ساخت یک ماتریس با عناصر برابر صفر، به کار می رود. دستور mesh نیز برای رسم یک ماتریس دو بعدی، به صورت سیمی (mesh)، به کار می رود. دستورات xlabel و ylabel و zlabel ، برای تعیین عنوان برای محورهای مختصات می باشند.

[h=4]نتیجه :[/h]matlab159.jpg
این بار ساخت z را با دستور ndgrid انجام می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
[COLOR=#008800][[/COLOR]x,y[COLOR=#008800]][/COLOR]=[COLOR=#0000FF]ndgrid[/COLOR][COLOR=#008800]([/COLOR]-[COLOR=#3333FF]5[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]5[/COLOR],-[COLOR=#3333FF]4[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]4[/COLOR][COLOR=#008800])[/COLOR]
z=[COLOR=#0000FF]sqrt[/COLOR][COLOR=#008800]([/COLOR]x.^[COLOR=#3333FF]2[/COLOR]+y.^[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]mesh[/COLOR][COLOR=#008800]([/COLOR]z[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که علامت نقطه (.) برای آن است که هر عنصر از x و y ، به توان 2 برسد، نه اینکه کل بردار x یا بردار y ، به توان 2 برسد.

[h=4]نتیجه :[/h]matlab159.jpg
مشاهده می کنید که استفاده از دستور ndgrid ، حجم کدها را بسیار کم می کند و مناسبترین روش می باشد.

[h=4]نکته :[/h]اگر ماتریس مورد نظرمان، بیش از 2 بعد داشته باشد، که دیگر استفاده از دستور ndgrid واجب است و روش های دیگر واقعا سخت می باشند.

[h=4]نکته :[/h]شاید به نظرتان برسد که بدون دستور ndgrid و همچنین بدون حلقه های for و تنها با استفاده از علامت نقطه (.) می توانیم ساخت z را به صورت زیر انجام دهیم، اما این کار ایجاد خطا می کند :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
x=-[COLOR=#3333FF]5[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]5[/COLOR];
y=-[COLOR=#3333FF]4[/COLOR]:[COLOR=#3333FF]1.0[/COLOR]:[COLOR=#3333FF]4[/COLOR];
z=[COLOR=#0000FF]sqrt[/COLOR][COLOR=#008800]([/COLOR]x.^[COLOR=#3333FF]2[/COLOR]+y.^[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]mesh[/COLOR][COLOR=#008800]([/COLOR]z[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]??? [COLOR=#0000FF]Error[/COLOR] using ==> plus
Matrix dimensions must agree.
 
[COLOR=#0000FF]Error[/COLOR] in ==> Untitled33 at [COLOR=#3333FF]7[/COLOR]
z=[COLOR=#0000FF]sqrt[/COLOR][COLOR=#008800]([/COLOR]x.^[COLOR=#3333FF]2[/COLOR]+y.^[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
مشاهده می کنید که یک پیام خطا نمایش داده شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
وارد کردن اطلاعات از Excel به درون متلب

وارد کردن اطلاعات از Excel به درون متلب

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

matlab175.gif

سپس این اطلاعات را به صورت یک فایل، با نام numbers.xlsx ، ذخیره می کنیم. اکنون درون نرم افزار متلب، از منوی File ، گزینه Open را انتخاب می کنیم. پنجره ای به شکل زیر باز می شود :

matlab176.jpg

در این پنجره، باید ابتدا باید گزینه روبروی عبارت Files of type را به All Files تغییر بدهیم و سپس به آدرس حاوی فایل numbers.xlsx رفته و آن را انتخاب کنیم و بر روی گزینه Open کلیک کنیم. در این مرحله، پنجره ای به شکل زیر نمایش داده می شود :


matlab177.jpg

بر روی گزینه Next ، کلیک می کنیم تا پنجره زیر نمایش داده شود :


matlab178.jpg



اگر بر روی دکمه Finish کلیک کنیم، متلب اطلاعات را به صورت یک ماتریس در Workspace ذخیره خواهد کرد و مثلا در شکل فوق، اسم پیش فرض data را برای این ماتریس انتخاب کرده است. اگر اسم دیگری مد نظرتان است، باید با موس، بر روی کلمه data کلیک کنید و آن را تغییر دهید. ما اسم A را انتخاب کرده و سپس بر روی گزینه Finish کلیک می کنیم. مشاهده خواهید کرد که ماتریس A به Workspace افزوده می شود. کد زیر را اجرا می کنیم تا مقادیر ماتریس A را مشاهده کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A[/FONT]
[/FONT][/COLOR]
نتیجه :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =
 
     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]2[/COLOR]
     [COLOR=#3333FF]3[/COLOR]     [COLOR=#3333FF]4[/COLOR][/FONT]
[/FONT][/COLOR]
مقادیر برابر همان مقادیر وارد شده در نرم افزار Excel می باشد.
 

P O U R I A

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

یافتن زمان اجرای توابع مختلف در برنامه اجرا شده، با دستور profile در متلب

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

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

برای آشنایی با نحوه استفاده از دستور profile در متلب، به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]profile[/COLOR] on

x=[COLOR=#3333FF]0[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]2[/COLOR]*[COLOR=#0000FF]pi[/COLOR];
y=[COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]plot[/COLOR][COLOR=#008800]([/COLOR]x,y[COLOR=#008800])[/COLOR]

[COLOR=#0000FF]profile[/COLOR] viewer[/FONT]
[/FONT][/COLOR]
سه خط اول برنامه، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در نرم افزار متلب است. با دستور profile on ، تعیین کرده ایم که زمان اجرای توابع مختلف محاسبه گردد. این دستور را باید قبل از اجرای توابع مورد نظرمان بنویسیم.

دستور profile viewer ، باعث می شود که مرورگر اینترنت برنامه متلب، باز شود و در آن لیستی از توابع و زمان اجرای آنها نمایش داده شود :matlab-210.jpg
با کلیک بر روی نام هر تابع، جزئیات بیشتری نمایش داده می شود و حتی می توانید ببینید که کدام خط از کدهای تابع، دارای بیشترین زمان اجرا بوده است.

[h=4]مثال :[/h]این بار همان مثال را به گونه ای می نویسیم که اطلاعات مربوط به زمان اجرای توابع، به صورت فایل های HTML قابل مشاهده در مرورگر اینترنت، نمایش داده شود و سپس صفحه اصلی این اطلاعات نیز توسط مرورگر اینترنت ویندوز باز شده و نمایش داده شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]profile[/COLOR] on

x=[COLOR=#3333FF]0[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]2[/COLOR]*[COLOR=#0000FF]pi[/COLOR];
y=[COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]plot[/COLOR][COLOR=#008800]([/COLOR]x,y[COLOR=#008800])[/COLOR]

p=[COLOR=#0000FF]profile[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'info'[/COLOR][COLOR=#008800])[/COLOR];
profsave[COLOR=#008800]([/COLOR]p,[COLOR=#A020F0]'profile_results'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[COLOR=#008800]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تبدیل NaN های یک ماتریس به صفر، در متلب

تبدیل NaN های یک ماتریس به صفر، در متلب

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

برای آشنایی با نحوه تبدیل NaN های یک ماتریس، به مقدار صفر، به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

A=[COLOR=#008800][[/COLOR][COLOR=#0000FF]NaN[/COLOR] [COLOR=#3333FF]2[/COLOR];[COLOR=#3333FF]3[/COLOR] [COLOR=#0000FF]NaN[/COLOR][COLOR=#008800]][/COLOR]
A[COLOR=#008800]([/COLOR]isnan[COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR][COLOR=#008800])[/COLOR]=[COLOR=#3333FF]0[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا ماتریس A را شامل دو NaN تعریف کرده ایم. سپس با دستور isnan ، موقعیت عناصری از ماتریس A را که به صورت NaN می باشند، تشخیص داده و آنها را برایر صفر قرار داده ایم.

[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =

   [COLOR=#0000FF]NaN[/COLOR]     [COLOR=#3333FF]2[/COLOR]
     [COLOR=#3333FF]3[/COLOR]   [COLOR=#0000FF]NaN[/COLOR]


A =

     [COLOR=#3333FF]0[/COLOR]     [COLOR=#3333FF]2[/COLOR]
     [COLOR=#3333FF]3[/COLOR]     [COLOR=#3333FF]0[/COLOR][/FONT]
[/FONT][/COLOR]
مشاهده می کنید که NaN ها تبدیل به صفر شده اند.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
پردازش موازی (Parallel Computing) در متلب

پردازش موازی (Parallel Computing) در متلب

نرم افزار متلب، این امکان را به وجود آورده است که در کامپیوترهای دارای پردازنده (CPU) چند هسته ای، از پردازش موازی (Parallel Computing) استفاده نماییم. در این مبحث آموزشی، قصد داریم که نحوه نوشتن کدهای متلب، برای پردازش موازی کدها را شرح بدهیم.

اگر بخواهیم کدهای متلب مورد نظرمان، به صورت موازی پردازش شوند (Parallel Computing)، باید شکل کلی کدها به صورت زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'open'[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#228B22]% your code[/COLOR]
matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'close'[/COLOR][COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
که در آن، به جای عبارت % your code ، باید کدهای متلب مورد نظر خود را بنویسید. به عدد 2 که درون پرانتز اولین دستور matlabpool نوشته شده است، دقت کنید. این عدد، تعداد هسته هایی (cores) را مشخص کرده است که قصد دارید توسط آنها، کدها به صورت موازی پردازش شوند. بنابراین مثلا اگر کامپیوتر شما دارای پردازنده (CPU) چهار هسته ای است، شما باید، حداکثر، عدد 4 را به جای آن بنویسید.

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

به مثال زیر توجه کنید :

[h=4]مثال :[/h]در ابتدا کدی را به صورت معمولی (بدون پردازش موازی) می نویسیم و سپس همان را با پردازش موازی اجرا می کنیم و همچنین زمان اجرای دستورات را هم با دو دستور tic و toc محاسبه می کنیم تا ببینیم که پردازش موازی، تا چه حد در سریعتر اجرا شدن کدهای برنامه، تاثیر دارد.

برنامه ای شامل دو حلقه for متوالی می نویسیم، البته به صورت معمولی و بدون استفاده از پردازش موازی :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]tic[/COLOR]
x=[COLOR=#3333FF]0[/COLOR];
[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    x=nn^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
x

y=[COLOR=#3333FF]0[/COLOR];
[COLOR=#0000FF]for[/COLOR] mm=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    y=mm^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
y
[COLOR=#0000FF]toc[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]x =

  1.0000e+015


y =

  1.0000e+015

Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.005328[/COLOR] seconds.[/FONT]
[/FONT][/COLOR]
مشاهده می کنید که زمان پردازش دو حلقه for ، برابر 0.005328 ثانیه بوده است.

حالا این بار، از پردازش موازی استفاده می کنیم تا ببینیم تا چه حد، زمان پردازش کدها کاهش می یابد (البته شروع و پایان خود پردازش موازی، چند ثانیه ای طول می کشد، ولی این میزان، برای برنامه های بزرگ که مد نظر اکثر کاربران است، بسیار ناچیز می باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]


matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'open'[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% start of Parallel Computing[/COLOR]
[COLOR=#0000FF]tic[/COLOR]

x=[COLOR=#3333FF]0[/COLOR];
[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    x=nn^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
x

y=[COLOR=#3333FF]0[/COLOR];
[COLOR=#0000FF]for[/COLOR] mm=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    y=mm^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
y

[COLOR=#0000FF]toc[/COLOR]
matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'close'[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% end of Parallel Computing[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Starting matlabpool using the [COLOR=#A020F0]'local'[/COLOR] configuration [COLOR=#008800]...[/COLOR] connected to [COLOR=#3333FF]2[/COLOR] labs.

x =

  1.0000e+015


y =

  1.0000e+015

Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.002837[/COLOR] seconds.
Sending a stop signal to [COLOR=#0000FF]all[/COLOR] the labs [COLOR=#008800]...[/COLOR] stopped.[/FONT]
[/FONT][/COLOR]
این بار، زمان پردازش دو حلقه for ، برابر با 0.002837 ثانیه شده است که از عدد قبلی (پردازش معمولی، پردازش سری)، کمتر است (تقریبا نصف).

[h=4]نکته :[/h]دقت کنید که در مثال بالا، تنها دو حلقه for ، به طور موازی با هم اجرا می شوند، اما کدهای درون هر حلقه for ، به طور موازی اجرا نخواهند شد (منظور این است که مثلا اگر حلقه for دارای پارامتری از 1 تا 1000 است، این 1000 بار اجرا شدن حلقه، به صورت موازی نخواهد بود، بلکه به صورت پشت سرهم و سری است).

اما شاید بخواهیم که دستورات درون حلقه for نیز به صورت موازی اجرا گردند، برای این منظور، دستور parfor در متلب در نظر گرفته شده است. دقت کنید که برای استفاده از این دستور، باید هر گام (مرحله) از اجرای حلقه، از دیگر گام ها (مراحل)، مستقل باشد. مثلا اگر در همان مثال قبل، دستورات for را به parfor تبدیل کنیم، جوابی غیر منتظره خواهیم گرفت، زیرا در هر گام (مرحله)، مقدار جدیدی برای متغیر x یا y در نظر گرفته می شود، بنابراین یک متغیر، در گام های مختلف اجرای حلقه، مقادیر متفاوت خواهد داشت، بنابراین گام ها از هم مستقل نیستند. پس نباید برای آن، پردازش موازی به کار ببریم.

برای درک بهتر این موضوع، به مثال زیر توجه کنید :

[h=4]مثال :[/h]در همان مثال قبل، به جای دستور for ، از دستور parfor استفاده می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'open'[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% start of Parallel Computing[/COLOR]
[COLOR=#0000FF]tic[/COLOR]

x=[COLOR=#3333FF]0[/COLOR];
parfor nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    x=nn^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
x

y=[COLOR=#3333FF]0[/COLOR];
parfor mm=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]1000[/COLOR]
    y=mm^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
y

[COLOR=#0000FF]toc[/COLOR]
matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'close'[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% end of Parallel Computing[/COLOR]
 [/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Starting matlabpool using the [COLOR=#A020F0]'local'[/COLOR] configuration [COLOR=#008800]...[/COLOR] connected to [COLOR=#3333FF]2[/COLOR] labs.

x =

     [COLOR=#3333FF]0[/COLOR]


y =

     [COLOR=#3333FF]0[/COLOR]

Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.594762[/COLOR] seconds.
Sending a stop signal to [COLOR=#0000FF]all[/COLOR] the labs [COLOR=#008800]...[/COLOR] stopped.[/FONT]
[/FONT][/COLOR]
مطمئنا انتظار چنین پاسخی را نداشتید. این پاسخ به این دلیل است که گام های اجرای حلقه، از یکدیگر مستقل نمی باشند.

اکنون، مثالی را برای parfor می نویسیم که گام های حلقه، از هم مستقل باشند (تعداد گام ها را کمتر کردیم تا نتیجه راحتتر قابل نمایش باشد) :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'open'[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% start of Parallel Computing[/COLOR]
[COLOR=#0000FF]tic[/COLOR]

x=[COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]10[/COLOR][COLOR=#008800])[/COLOR];
parfor nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10[/COLOR]
    x[COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],nn[COLOR=#008800])[/COLOR]=nn^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
x

y=[COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]10[/COLOR][COLOR=#008800])[/COLOR];
parfor mm=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10[/COLOR]
    y[COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],mm[COLOR=#008800])[/COLOR]=mm^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR]
y

[COLOR=#0000FF]toc[/COLOR]
matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'close'[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% end of Parallel Computing[/COLOR]
 [/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Starting matlabpool using the [COLOR=#A020F0]'local'[/COLOR] configuration [COLOR=#008800]...[/COLOR] connected to [COLOR=#3333FF]2[/COLOR] labs.

x =

  Columns [COLOR=#3333FF]1[/COLOR] through [COLOR=#3333FF]7[/COLOR]

           [COLOR=#3333FF]1[/COLOR]          [COLOR=#3333FF]32[/COLOR]         [COLOR=#3333FF]243[/COLOR]        [COLOR=#3333FF]1024[/COLOR]        [COLOR=#3333FF]3125[/COLOR]        [COLOR=#3333FF]7776[/COLOR]       [COLOR=#3333FF]16807[/COLOR]

  Columns [COLOR=#3333FF]8[/COLOR] through [COLOR=#3333FF]10[/COLOR]

       [COLOR=#3333FF]32768[/COLOR]       [COLOR=#3333FF]59049[/COLOR]      [COLOR=#3333FF]100000[/COLOR]


y =

  Columns [COLOR=#3333FF]1[/COLOR] through [COLOR=#3333FF]7[/COLOR]

           [COLOR=#3333FF]1[/COLOR]          [COLOR=#3333FF]32[/COLOR]         [COLOR=#3333FF]243[/COLOR]        [COLOR=#3333FF]1024[/COLOR]        [COLOR=#3333FF]3125[/COLOR]        [COLOR=#3333FF]7776[/COLOR]       [COLOR=#3333FF]16807[/COLOR]

  Columns [COLOR=#3333FF]8[/COLOR] through [COLOR=#3333FF]10[/COLOR]

       [COLOR=#3333FF]32768[/COLOR]       [COLOR=#3333FF]59049[/COLOR]      [COLOR=#3333FF]100000[/COLOR]

Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.676398[/COLOR] seconds.
Sending a stop signal to [COLOR=#0000FF]all[/COLOR] the labs [COLOR=#008800]...[/COLOR] stopped.[/FONT]
[/FONT][/COLOR]
همین نتیجه را انتظار داشتیم. در این مثال، x و y ، هر کدام دارای 10 عنصر هستند، بنابراین، مثلا اگر دستورات حلقه x ، به صورت موازی اجرا گردند، 10 گام آن، در هم تداخل ندارند، زیرا هر بار، یک عنصر متفاوت از x ، مقداردهی می شود (هیچ دو گامی نیست که در آنها، یک عنصر مشترک، مقداردهی شود).

[h=4]نکته :[/h]یک سوال مهم، این است که آیا اگر یک تابع را به صورت m-file تعریف کنیم و سپس در یک برنامه متلب، دو بار به آن ارجاع دهیم و برنامه به صورت موازی اجرا شود، آیا عملکرد برنامه صحیح خواهد بود ؟

حال پاسخ این سوال را، با یک مثال، برای شما روشن خواهم کرد :

ابتدا یک تابع با نام my_function می سازیم (تابع به صورت m-file)، که کدهای آن به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]function[/COLOR] [COLOR=#008800][[/COLOR]x[COLOR=#008800]][/COLOR] = my_function[COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR]
parfor nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10[/COLOR]
    x[COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],nn[COLOR=#008800])[/COLOR]=nn^[COLOR=#3333FF]5[/COLOR];
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
این کدها را درون یک m-file نوشته ایم و سپس آن را با نام my_function ذخیره نموده ایم. همچنین فایل این تابع و فایل برنامه ای که خواهیم نوشت، باید هر دو درون یک فولدر قرار داشته باشند (یا مسیر هر دو فایل را به مسیر های نرم افزار متلب اضافه کنیم).

سپس یک برنامه متلب می نویسم که در آن، دو بار به تابع my_function ، ارجاع داده شده است :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'open'[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% start of Parallel Computing[/COLOR]
[COLOR=#0000FF]tic[/COLOR]

x=[COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]10[/COLOR][COLOR=#008800])[/COLOR];
x=my_function[COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR]

y=[COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]10[/COLOR][COLOR=#008800])[/COLOR];
y=my_function[COLOR=#008800]([/COLOR]y[COLOR=#008800])[/COLOR]

[COLOR=#0000FF]toc[/COLOR]
matlabpool[COLOR=#008800]([/COLOR][COLOR=#A020F0]'close'[/COLOR][COLOR=#008800])[/COLOR]; [COLOR=#228B22]% end of Parallel Computing[/COLOR]
 [/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Starting matlabpool using the [COLOR=#A020F0]'local'[/COLOR] configuration [COLOR=#008800]...[/COLOR] connected to [COLOR=#3333FF]2[/COLOR] labs.

x =

  Columns [COLOR=#3333FF]1[/COLOR] through [COLOR=#3333FF]7[/COLOR]

           [COLOR=#3333FF]1[/COLOR]          [COLOR=#3333FF]32[/COLOR]         [COLOR=#3333FF]243[/COLOR]        [COLOR=#3333FF]1024[/COLOR]        [COLOR=#3333FF]3125[/COLOR]        [COLOR=#3333FF]7776[/COLOR]       [COLOR=#3333FF]16807[/COLOR]

  Columns [COLOR=#3333FF]8[/COLOR] through [COLOR=#3333FF]10[/COLOR]

       [COLOR=#3333FF]32768[/COLOR]       [COLOR=#3333FF]59049[/COLOR]      [COLOR=#3333FF]100000[/COLOR]


y =

  Columns [COLOR=#3333FF]1[/COLOR] through [COLOR=#3333FF]7[/COLOR]

           [COLOR=#3333FF]1[/COLOR]          [COLOR=#3333FF]32[/COLOR]         [COLOR=#3333FF]243[/COLOR]        [COLOR=#3333FF]1024[/COLOR]        [COLOR=#3333FF]3125[/COLOR]        [COLOR=#3333FF]7776[/COLOR]       [COLOR=#3333FF]16807[/COLOR]

  Columns [COLOR=#3333FF]8[/COLOR] through [COLOR=#3333FF]10[/COLOR]

       [COLOR=#3333FF]32768[/COLOR]       [COLOR=#3333FF]59049[/COLOR]      [COLOR=#3333FF]100000[/COLOR]

Elapsed time [COLOR=#0000FF]is[/COLOR] [COLOR=#3333FF]0.524047[/COLOR] seconds.
Sending a stop signal to [COLOR=#0000FF]all[/COLOR] the labs [COLOR=#008800]...[/COLOR] stopped.[/FONT]
[/FONT][/COLOR]
مشاهده می کنید که نتایج صحیح است (البته این پاسخ کلی برای پرسش مورد نظر ما است، اما امکان دارد که کاربر به گونه ای کدهای تابع را بنویسد که تداخل به وجود بیاید، مفهوم تداخل را قبلا برایتان شرح دادم، بنابراین همیشه چک کنید که آیا مراحل عملیات های مختلف، با هم تداخل دارند یا خیر).

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

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

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش یک پیام، همانند پیام های خطای متلب، با دستور error در متلب

نمایش یک پیام، همانند پیام های خطای متلب، با دستور error در متلب

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

به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

x = [COLOR=#3333FF]2[/COLOR];
[COLOR=#0000FF]if[/COLOR][COLOR=#008800]([/COLOR]x == [COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]
    [COLOR=#0000FF]error[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'please choose another number for x'[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]??? [COLOR=#0000FF]Error[/COLOR] using ==> program at [COLOR=#3333FF]7[/COLOR]
please choose another number [COLOR=#0000FF]for[/COLOR] x[/FONT]
[/FONT][/COLOR]
 

P O U R I A

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

اجرای دستوراتی دیگر، در صورت بروز خطا در دستورات فعلی، با دستورات try و catch در متلب

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

به مثال زیر توجه کنید :

[h=4]مثال :[/h]ابتدا کد زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

x=[COLOR=#3333FF]1[/COLOR];
[COLOR=#0000FF]try[/COLOR]
    y=x*[COLOR=#3333FF]2[/COLOR]
[COLOR=#0000FF]catch[/COLOR]
    y=[COLOR=#3333FF]0[/COLOR]
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]چون در اجرای دستور پس از try ، خطایی پیش نمی آید، بنابراین مقدار y برابر 2 خواهد بود (دستور پس از catch ، اجرا نخواهد شد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]y =

     [COLOR=#3333FF]2[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون دستور مربوط به تعریف x را عمدا از میان کدها بر می داریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]try[/COLOR]
    y=x*[COLOR=#3333FF]2[/COLOR]
[COLOR=#0000FF]catch[/COLOR]
    y=[COLOR=#3333FF]0[/COLOR]
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]در دستور پس از try ، چون متغیر x تعریف نشده، بنابراین در حالت معمولی، باید یک پیام خطا نمایش داده شود، اما چون از ترکیب try و catch استفاده کرده ایم، بنابراین هیچ پیامی نمایش داده نمی شود و دستور بعد از catch ، اجرا خواهد شد. بنابراین مقدار متغیر y برابر 0 خواهد بود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]y =

     [COLOR=#3333FF]0[/COLOR][/FONT]
[COLOR=#3333FF]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تشخیص آرایه های عددی (numeric arrays)، با دستور isnumeric در متلب

تشخیص آرایه های عددی (numeric arrays)، با دستور isnumeric در متلب

دستور isnumeric در متلب، برای تشخیص آرایه های عددی (numeric arrays) به کار می رود. دستور isnumeric ، برای آرایه های عددی، مقدار 1 را برمی گرداند و در سایر موارد، مقدار 0 را برمی گرداند.

به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

A=isnumeric[COLOR=#008800]([/COLOR][COLOR=#3333FF]340[/COLOR][COLOR=#008800])[/COLOR]
B=isnumeric[COLOR=#008800]([/COLOR][COLOR=#A020F0]'ali'[/COLOR][COLOR=#008800])[/COLOR]

syms x
C=isnumeric[COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A =

     [COLOR=#3333FF]1[/COLOR]


B =

     [COLOR=#3333FF]0[/COLOR]


C =

     [COLOR=#3333FF]0[/COLOR][/FONT]
[/FONT][/COLOR]
مشاهده می کنید که دستور isnumeric ، تنها زمانی مقدار 1 را برمی گرداند که در ورودی خود، یک عدد (یک آرایه عددی) را دریافت کرده باشد.

[h=4]مثال :[/h]مثالی از help نرم افزار متلب :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]1[/COLOR][COLOR=#008800]}[/COLOR] = [COLOR=#0000FF]pi[/COLOR];                 [COLOR=#228B22]% double[/COLOR]
C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]2[/COLOR][COLOR=#008800]}[/COLOR] = [COLOR=#A020F0]'John Doe'[/COLOR];         [COLOR=#228B22]% char array[/COLOR]
C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]3[/COLOR][COLOR=#008800]}[/COLOR] = [COLOR=#3333FF]2[/COLOR] + [COLOR=#3333FF]4i[/COLOR];             [COLOR=#228B22]% complex double[/COLOR]
C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]4[/COLOR][COLOR=#008800]}[/COLOR] = ispc;               [COLOR=#228B22]% logical[/COLOR]
C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],[COLOR=#3333FF]5[/COLOR][COLOR=#008800]}[/COLOR] = [COLOR=#0000FF]magic[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]3[/COLOR][COLOR=#008800])[/COLOR]            [COLOR=#228B22]% double array[/COLOR]

[COLOR=#0000FF]for[/COLOR] k = [COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]5[/COLOR]
    x[COLOR=#008800]([/COLOR]k[COLOR=#008800])[/COLOR] = isnumeric[COLOR=#008800]([/COLOR]C[COLOR=#008800]{[/COLOR][COLOR=#3333FF]1[/COLOR],k[COLOR=#008800]}[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]end[/COLOR]
x[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]C = 

    [COLOR=#008800][[/COLOR][COLOR=#3333FF]3.1416[/COLOR][COLOR=#008800]][/COLOR]    [COLOR=#A020F0]'John Doe'[/COLOR]    [COLOR=#008800][[/COLOR][COLOR=#3333FF]2.0000[/COLOR] + [COLOR=#3333FF]4.0000i[/COLOR][COLOR=#008800]][/COLOR]    [COLOR=#008800][[/COLOR][COLOR=#3333FF]1[/COLOR][COLOR=#008800]][/COLOR]    [COLOR=#008800][[/COLOR]3x3 [COLOR=#0000FF]double[/COLOR][COLOR=#008800]][/COLOR]


x =

     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR]     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]0[/COLOR]     [COLOR=#3333FF]1[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش گرافیکی تعدادی انتخاب به کاربر (برای انتخاب یکی) در یک پنجره، با دستور menu در متلب

نمایش گرافیکی تعدادی انتخاب به کاربر (برای انتخاب یکی) در یک پنجره، با دستور menu در متلب

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

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

به مثال زیر توجه کنید :

مثال :

نام 3 شهر را به کاربر نمایش می دهیم تا یکی را انتخاب کند و سپس نام شهر انتخاب شده توسط کاربر را در خروجی نمایش می دهیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

city = [COLOR=#008800]{[/COLOR][COLOR=#008800][[/COLOR][COLOR=#A020F0]'Shiraz'[/COLOR][COLOR=#008800]][/COLOR],[COLOR=#008800][[/COLOR][COLOR=#A020F0]'Tehran'[/COLOR][COLOR=#008800]][/COLOR],[COLOR=#008800][[/COLOR][COLOR=#A020F0]'Esfehan'[/COLOR][COLOR=#008800]][/COLOR][COLOR=#008800]}[/COLOR];
choice = [COLOR=#0000FF]menu[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'Choose a city :'[/COLOR],[COLOR=#A020F0]'Shiraz'[/COLOR],[COLOR=#A020F0]'Tehran'[/COLOR],[COLOR=#A020F0]'Esfehan'[/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'your choice is : '[/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR]city[COLOR=#008800]{[/COLOR]choice[COLOR=#008800]}[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا کلمات مربوط به گزینه های قابل انتخاب را در یک آرایه سلولی (cell array) با نام city تعریف کرده ایم، زیرا دستور menu تنها یک عدد به ما می دهد بنابراین ما عدد را توسط دستور menu گرفته و آنگاه بر اساس آن عدد، عبارت متناظر با انتخاب کاربر را از آرایه سلولی city فراخوانی می کنیم تا بعدا با دستور disp ، گزینه انتخاب شده را در خروجی نمایش بدهیم.

نتیجه :

با اجرای کد متلب، پنجره ای به شکل زیر، نمایش داده می شود :matlab-257.png
فرض کنید گزینه Shiraz را با موس انتخاب کنیم. آنگاه خروجی برنامه به صورت زیر خواهد بود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]choice =

     [COLOR=#3333FF]1[/COLOR]

your choice [COLOR=#0000FF]is[/COLOR] : 
Shiraz[/FONT]
[/FONT][/COLOR]
مثال :

قصد داریم که یک شکل را در متلب رسم کنیم، اما قبل از رسم شکل، از کاربر می پرسیم که شکل با چه رنگی رسم شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

choice = [COLOR=#0000FF]menu[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'Choose a color'[/COLOR],[COLOR=#A020F0]'Red'[/COLOR],[COLOR=#A020F0]'Blue'[/COLOR],[COLOR=#A020F0]'Green'[/COLOR][COLOR=#008800])[/COLOR]
t = [COLOR=#3333FF]0[/COLOR]:[COLOR=#3333FF]0.1[/COLOR]:[COLOR=#3333FF]60[/COLOR];
s = [COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR]t[COLOR=#008800])[/COLOR];
color = [COLOR=#008800][[/COLOR][COLOR=#A020F0]'r'[/COLOR],[COLOR=#A020F0]'b'[/COLOR],[COLOR=#A020F0]'g'[/COLOR][COLOR=#008800]][/COLOR];
[COLOR=#0000FF]plot[/COLOR][COLOR=#008800]([/COLOR]t,s,color[COLOR=#008800]([/COLOR]choice[COLOR=#008800])[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه :

با اجرای کد متلب، پنجره ای به شکل زیر، نمایش داده می شود :

matlab-258.png

فرض کنید گزینه Green را با موس انتخاب کنیم. آنگاه خروجی برنامه به صورت زیر خواهد بود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]choice =

     [COLOR=#3333FF]3[/COLOR][/FONT]
[/FONT][/COLOR]
و شکل با رنگ سبز (Green) رسم می شود :

matlab-259.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
خارج شدن از حلقه (for و while) با دستور break

خارج شدن از حلقه (for و while) با دستور break

زمانی که یک حلقه می سازیم (با دستور for یا while)، تعداد گام های حلقه مشخص است و به همان تعداد، دستورات حلقه اجرا می شوند. اما گاهی نیاز داریم که با به وجود آمدن یک شرایط خاص، تعیین کنیم که گام های باقیمانده حلقه، اجرا نشوند. برای این منظور، دستور break به کار می رود، یعنی وقتی متلب به دستور break در حلقه برسد، از حلقه خارج می شود و دیگر هیچ کدی از حلقه اجرا نخواهد شد.

اکنون می خوایم نحوه استفاده از دستور break در حلقه را شرح بدهیم. ابتدا فرض کنید که یک حلقه را با دستور for و به صورت معمولی بسازیم (این حلقه، تنها مقدار پارامتر حلقه را در خروجی چاپ می کند) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]7[/COLOR]
    [COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR]nn[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]     [COLOR=#3333FF]1[/COLOR]

     [COLOR=#3333FF]2[/COLOR]

     [COLOR=#3333FF]3[/COLOR]

     [COLOR=#3333FF]4[/COLOR]

     [COLOR=#3333FF]5[/COLOR]

     [COLOR=#3333FF]6[/COLOR]

     [COLOR=#3333FF]7[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون می خواهیم تعیین کنیم که گام سوم به بعد از حلقه، اجرا نشود. بنابراین با دستور if چک می کنیم که هرگاه مقدار پارامتر حلقه (nn) برابر 3 بود، آنگاه دستور break اجرا شود تا از حلقه خارج شویم و دیگر هیچ کدی از حلقه اجرا نگردد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]7[/COLOR]
    [COLOR=#0000FF]if[/COLOR][COLOR=#008800]([/COLOR]nn==[COLOR=#3333FF]3[/COLOR][COLOR=#008800])[/COLOR]
        [COLOR=#0000FF]break[/COLOR];
    [COLOR=#0000FF]end[/COLOR]
    [COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR]nn[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]     [COLOR=#3333FF]1[/COLOR]

     [COLOR=#3333FF]2[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]ممکن است این سوال پیش بیاید که اگر دو حلقه تو در تو داشته باشیم و آنگاه درون حلقه داخلی تر، دستور break اجرا شود، آیا تنها از حلقه داخلی تر خارج می شویم و یا اینکه از هر دو حلقه خارج خواهیم شد. پاسخ این است که تنها از حلقه داخلی تر خارج خواهیم شد. این پاسخ را با مثال زیر اثبات می کنیم :

[h=4]مثال :[/h]دو حلقه تو در تو می سازیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]for[/COLOR] nn=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]7[/COLOR]
    [COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR]nn[COLOR=#008800])[/COLOR]
    [COLOR=#0000FF]for[/COLOR] mm=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]2[/COLOR]
        [COLOR=#0000FF]if[/COLOR][COLOR=#008800]([/COLOR]mm==[COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR]
            [COLOR=#0000FF]break[/COLOR];
        [COLOR=#0000FF]end[/COLOR]
        [COLOR=#0000FF]disp[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'second loop'[/COLOR][COLOR=#008800])[/COLOR];
    [COLOR=#0000FF]end[/COLOR]
[COLOR=#0000FF]end[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]     [COLOR=#3333FF]1[/COLOR]

second loop
     [COLOR=#3333FF]2[/COLOR]

second loop
     [COLOR=#3333FF]3[/COLOR]

second loop
     [COLOR=#3333FF]4[/COLOR]

second loop
     [COLOR=#3333FF]5[/COLOR]

second loop
     [COLOR=#3333FF]6[/COLOR]

second loop
     [COLOR=#3333FF]7[/COLOR]

second loop[/FONT]
[/FONT][/COLOR]
مشاهده می کنید که هر بار اجرای دستور break ، تنها باعث شده است که از حلقه داخلی تر (با پارامتر mm) خارج شویم، ولی حلقه خارجی تر (با پارامتر nn) همچنان اجرا شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تابع دلتای دیراک (تابع ضربه - Dirac delta) در متلب

تابع دلتای دیراک (تابع ضربه - Dirac delta) در متلب

با دستور dirac در متلب، می توانیم تابع دلتای دیراک (تابع ضربه - Dirac delta) را شبیه سازی کنیم. تابع دلتای دیراک، دارای خاصیت زیر است :matlab-271.png
در فرمول بالا، تابع را بر حسب x فرض کرده ایم.

به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

syms x a
a = [COLOR=#3333FF]2[/COLOR];
int[COLOR=#008800]([/COLOR]dirac[COLOR=#008800]([/COLOR]x-a[COLOR=#008800])[/COLOR]*[COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR]x[COLOR=#008800])[/COLOR],-[COLOR=#0000FF]inf[/COLOR], [COLOR=#0000FF]inf[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
سه خط اول کدها، برای عدم تداخل کدهای فعلی با کدهای قبلی اجرا شده در متلب می باشد. دستور syms برای تعریف متغیرها به صورت سمبلیک می باشد. دستور int در متلب، برای انتگرال گیری به کار می رود.

[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ans[/COLOR] =
 
[COLOR=#0000FF]sin[/COLOR][COLOR=#008800]([/COLOR][COLOR=#3333FF]2[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[COLOR=#008800]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش اطلاعات برنامه متلب (MATLAB) و Toolbox های نصب بر روی آن، با دستور ver در متلب

نمایش اطلاعات برنامه متلب (MATLAB) و Toolbox های نصب بر روی آن، با دستور ver در متلب

با استفاده از دستور ver در متلب، اطلاعاتی در مورد نرم افزار متلب که در حال استفاده از آن هستیم و همچنین اطلاعاتی در مورد Toolbox های نصب بر روی آن، نمایش داده می شود (نام Toolbox ها ، Version آنها و ...).

[h=4]مثال :[/h]دستور ver را اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ver[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]-------------------------------------------------------------------------------------
MATLAB [COLOR=#0000FF]Version[/COLOR] 7.12.0.635 [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB License Number: [COLOR=#3333FF]161052[/COLOR]
Operating System: Microsoft Windows [COLOR=#3333FF]7[/COLOR] [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.1[/COLOR] [COLOR=#008800]([/COLOR]Build [COLOR=#3333FF]7600[/COLOR][COLOR=#008800])[/COLOR]
Java VM [COLOR=#0000FF]Version[/COLOR]: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot[COLOR=#008800]([/COLOR]TM[COLOR=#008800])[/COLOR] [COLOR=#3333FF]64[/COLOR]-Bit Server VM mixed mode
-------------------------------------------------------------------------------------
MATLAB                                                [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]7.12[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink                                              [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]7.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Aerospace Blockset                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Aerospace Toolbox                                     [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Bioinformatics Toolbox                                [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Communications System Toolbox                         [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]Computer[/COLOR] Vision System Toolbox                        [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Control System Toolbox                                [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]9.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Curve Fitting Toolbox                                 [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
DO Qualification Kit                                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.4[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
DSP System Toolbox                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]8.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Data Acquisition Toolbox                              [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.18[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Database Toolbox                                      [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.9[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Datafeed Toolbox                                      [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
EDA Simulator Link                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Econometrics Toolbox                                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Embedded Coder                                        [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]Filter[/COLOR] Design HDL Coder                               [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.8[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Financial Derivatives Toolbox                         [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Financial Toolbox                                     [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Fixed-Income Toolbox                                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Fixed-Point Toolbox                                   [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Fuzzy Logic Toolbox                                   [COLOR=#0000FF]Version[/COLOR] 2.2.13     [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]Global[/COLOR] Optimization Toolbox                           [COLOR=#0000FF]Version[/COLOR] 3.1.1      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
IEC Certification Kit                                 [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.4[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]Image[/COLOR] Acquisition Toolbox                             [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]Image[/COLOR] Processing Toolbox                              [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]7.2[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Instrument Control Toolbox                            [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.12[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Builder EX                                     [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Builder JA                                     [COLOR=#0000FF]Version[/COLOR] 2.2.2      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Builder NE                                     [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Coder                                          [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Compiler                                       [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.15[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Distributed Computing Server                   [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB Report Generator                               [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.10[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Mapping Toolbox                                       [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Model Predictive Control Toolbox                      [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Neural Network Toolbox                                [COLOR=#0000FF]Version[/COLOR] 7.0.1      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Optimization Toolbox                                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Parallel Computing Toolbox                            [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Partial Differential Equation Toolbox                 [COLOR=#0000FF]Version[/COLOR] 1.0.18     [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Phased Array System Toolbox                           [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
RF Toolbox                                            [COLOR=#0000FF]Version[/COLOR] 2.8.1      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Robust Control Toolbox                                [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.6[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Signal Processing Toolbox                             [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.15[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimBiology                                            [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.4[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimDriveline                                          [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimElectronics                                        [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.6[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimEvents                                             [COLOR=#0000FF]Version[/COLOR] 3.1.2      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimHydraulics                                         [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.9[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimMechanics                                          [COLOR=#0000FF]Version[/COLOR] 3.2.2      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimPowerSystems                                       [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.4[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SimRF                                                 [COLOR=#0000FF]Version[/COLOR] 3.0.2      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simscape                                              [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.5[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink 3D Animation                                 [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Coder                                        [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]8.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Control Design                               [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.3[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Design Optimization                          [COLOR=#0000FF]Version[/COLOR] 1.2.1      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Design Verifier                              [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Fixed Point                                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.5[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink HDL Coder                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]2.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink PLC Coder                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]1.2[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Report Generator                             [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.10[/COLOR]       [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Simulink Verification and Validation                  [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]3.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Spreadsheet Link EX                                   [COLOR=#0000FF]Version[/COLOR] 3.1.3      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Stateflow                                             [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]7.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Statistics Toolbox                                    [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]7.5[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Symbolic Math Toolbox                                 [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.6[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
System Identification Toolbox                         [COLOR=#0000FF]Version[/COLOR] 7.4.2      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
SystemTest                                            [COLOR=#0000FF]Version[/COLOR] 2.6.1      [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
Wavelet Toolbox                                       [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]4.7[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
xPC Target                                            [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
xPC Target Embedded Option                            [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]5.0[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نکته :[/h]اگر بخواهیم تنها اطلاعات مربوط به یک Toolbox متلب را مشاهده کنیم، باید نام فولدر حاوی آن محصول (فولدری که در آن، m-file مربوط به آن محصول وجود دارد) را به صورت زیر، درون پرانتز دستور ver ذکر نماییم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ver[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'product'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
به مثال زیر توجه کنید :

[h=4]مثال :[/h]فولدر حاوی Toolbox با نام Control System ، دارای نام control می باشد، بنابراین برای دیدن اطلاعات مربوط به آن، دستور زیر را اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ver[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'control'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]-------------------------------------------------------------------------------------
MATLAB [COLOR=#0000FF]Version[/COLOR] 7.12.0.635 [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR]
MATLAB License Number: [COLOR=#3333FF]161052[/COLOR]
Operating System: Microsoft Windows [COLOR=#3333FF]7[/COLOR] [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]6.1[/COLOR] [COLOR=#008800]([/COLOR]Build [COLOR=#3333FF]7600[/COLOR][COLOR=#008800])[/COLOR]
Java VM [COLOR=#0000FF]Version[/COLOR]: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot[COLOR=#008800]([/COLOR]TM[COLOR=#008800])[/COLOR] [COLOR=#3333FF]64[/COLOR]-Bit Server VM mixed mode
-------------------------------------------------------------------------------------
Control System Toolbox                                [COLOR=#0000FF]Version[/COLOR] [COLOR=#3333FF]9.1[/COLOR]        [COLOR=#008800]([/COLOR]R2011a[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ساخت ProgressBar برای نمایش میزان پیشرفت اجرای برنامه، در متلب

ساخت ProgressBar برای نمایش میزان پیشرفت اجرای برنامه، در متلب

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

به مثال زیر توجه کنید :

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
d = com.mathworks.mlwidgets.[COLOR=#0000FF]dialog[/COLOR].ProgressBarDialog.createProgressBar[COLOR=#008800]([/COLOR][COLOR=#A020F0]'run program ...'[/COLOR], [COLOR=#008800][[/COLOR][COLOR=#008800]][/COLOR][COLOR=#008800])[/COLOR];
d.setValue[COLOR=#008800]([/COLOR][COLOR=#3333FF]0.25[/COLOR][COLOR=#008800])[/COLOR];                        
d.setProgressStatusLabel[COLOR=#008800]([/COLOR][COLOR=#A020F0]'running ...'[/COLOR][COLOR=#008800])[/COLOR];  
d.setSpinnerVisible[COLOR=#008800]([/COLOR]true[COLOR=#008800])[/COLOR];               
d.setCircularProgressBar[COLOR=#008800]([/COLOR]false[COLOR=#008800])[/COLOR];         
d.setCancelButtonVisible[COLOR=#008800]([/COLOR]true[COLOR=#008800])[/COLOR];          
d.setVisible[COLOR=#008800]([/COLOR]true[COLOR=#008800])[/COLOR];                      
 
[COLOR=#0000FF]for[/COLOR] n=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10000000[/COLOR]
    x=n^[COLOR=#3333FF]10[/COLOR];
[COLOR=#0000FF]end[/COLOR]
d.setValue[COLOR=#008800]([/COLOR][COLOR=#3333FF]0.5[/COLOR][COLOR=#008800])[/COLOR];
 
[COLOR=#0000FF]for[/COLOR] n=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10000000[/COLOR]
    x=n^[COLOR=#3333FF]10[/COLOR];
[COLOR=#0000FF]end[/COLOR]
d.setValue[COLOR=#008800]([/COLOR][COLOR=#3333FF]0.75[/COLOR][COLOR=#008800])[/COLOR];
 
[COLOR=#0000FF]for[/COLOR] n=[COLOR=#3333FF]1[/COLOR]:[COLOR=#3333FF]10000000[/COLOR]
    x=n^[COLOR=#3333FF]10[/COLOR];
[COLOR=#0000FF]end[/COLOR]
d.setVisible[COLOR=#008800]([/COLOR]false[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
سه خط اول کدها، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب می باشد. d را به صورت یک شیء (object) از یک کلاس (class) مربوط به ساخت ProgressBar ، ساخته ایم (اگر معنی این جمله را نمی دانید، مفاهیم برنامه نویسی شیء گرا را مطالعه کنید). بنابراین، شیء d ، به ما یک ProgressBar می دهد که می توانیم ویژگی های مورد نظرمان را به آن اعمال کنیم، مقدار پیشرفت آن در زمان های مختلف در طول اجرای برنامه را تعیین کرده و همچنین بگوییم که چه زمانی نمایش داده شود و چه زمانی ناپدید شود.

دقت شود که کدهایی که در حلقه for نوشته ایم (که چند بار در طول برنامه تکرار شده اند)، تنها برای این است که اجرای کدها، کمی طولانی شود تا بتوانیم پیشرفت مقدار ProgressBar را به راحتی ببینیم (برنامه خیلی سریع اجرا نشود)، پس ماهیت آنها اهمیتی برای ما ندارد.

ابتدا با setValue ، مقدار 0.25 را برای ProgressBar در نظر گرفته ایم. یعنی در ProgressBar ، مقدار 25 درصد پیشرفت نمایش داده می شود. با استفاده از setValue ، پس از پایان هر بخش مهم از اجرای کدها، مقدار درصد پیشرفت ProgressBar را تغییر می دهیم تا کاربر، متوجه پیشرفت اجرای برنامه بشود. روش setVisible برای تعیین نمایش یا عدم نمایش ProgressBar می باشد. در ابتدای برنامه، به آن، مقدار true می دهیم تا ProgressBar نمایش داده شود و در انتهای برنامه که دیگر همه برنامه اجرا شده است، به آن مقدار false را می دهیم تا ProgressBar نمایش داده نشود (ناپدید شود).

در صورت دلخواه، با روش setProgressStatusLabel ، می توانید در مراحل مختلف اجرای برنامه، متن نمایش داده شده در ProgressBar را نیز تغییر بدهید.

نتیجه :

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

لینک مفید در این زمینه:
http://undocumentedmatlab.com/blog/animated-busy-spinning-icon
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
محاسبه کانولوشن (Convolution)، با دستور conv ، در متلب

محاسبه کانولوشن (Convolution)، با دستور conv ، در متلب

دستور conv در متلب، برای محاسبه کانولوشن (Convolution) به کار می رود.

دستور زیر را در نظر بگیرید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]w = [COLOR=#0000FF]conv[/COLOR][COLOR=#008800]([/COLOR]u,v[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
دستور فوق بر اساس فرمول زیر محاسبه می شود :Untitled.jpg
[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

u = [COLOR=#008800][[/COLOR][COLOR=#3333FF]7[/COLOR] [COLOR=#3333FF]1[/COLOR] [COLOR=#3333FF]5[/COLOR] [COLOR=#3333FF]4[/COLOR] [COLOR=#3333FF]8[/COLOR] [COLOR=#3333FF]9[/COLOR][COLOR=#008800]][/COLOR]
v = [COLOR=#008800][[/COLOR][COLOR=#3333FF]2[/COLOR] [COLOR=#3333FF]7[/COLOR] [COLOR=#3333FF]3[/COLOR] [COLOR=#3333FF]9[/COLOR] [COLOR=#3333FF]5[/COLOR] [COLOR=#3333FF]6[/COLOR][COLOR=#008800]][/COLOR]
w = [COLOR=#0000FF]conv[/COLOR][COLOR=#008800]([/COLOR]u,v[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]u =

     [COLOR=#3333FF]7[/COLOR]     [COLOR=#3333FF]1[/COLOR]     [COLOR=#3333FF]5[/COLOR]     [COLOR=#3333FF]4[/COLOR]     [COLOR=#3333FF]8[/COLOR]     [COLOR=#3333FF]9[/COLOR]


v =

     [COLOR=#3333FF]2[/COLOR]     [COLOR=#3333FF]7[/COLOR]     [COLOR=#3333FF]3[/COLOR]     [COLOR=#3333FF]9[/COLOR]     [COLOR=#3333FF]5[/COLOR]     [COLOR=#3333FF]6[/COLOR]


w =

    [COLOR=#3333FF]14[/COLOR]    [COLOR=#3333FF]51[/COLOR]    [COLOR=#3333FF]38[/COLOR]   [COLOR=#3333FF]109[/COLOR]   [COLOR=#3333FF]103[/COLOR]   [COLOR=#3333FF]178[/COLOR]   [COLOR=#3333FF]154[/COLOR]   [COLOR=#3333FF]149[/COLOR]   [COLOR=#3333FF]145[/COLOR]    [COLOR=#3333FF]93[/COLOR]    [COLOR=#3333FF]54[/COLOR][/FONT]
[COLOR=#3333FF]
[/COLOR]
[/FONT][/COLOR]
 
بالا