متلب
صفحات وبلاگ
نویسنده: پ متلب - چهارشنبه ۱٦ فروردین ،۱۳٩۱

رابط متلب

Desktop

به طور پیش فرض رابط متلب دارای 4 قسمت است. Command window در سمت راست و current directory و workspace در سمت چپ بالا که با تب از هم جدا شده اند. در سمت چپ پایین command history قرار دارد. همچنین در سمت چپ پایین دکمه start قرار دارد که مانند محیط ویندوز از طریق آن می توانید به shortcut های متلب دسترسی داشته باشید. از طریق مسیر desktop > desktop layout می توانید شکل های مختلف چینش پنجره ها را امتحان کنید. همچنین می توانید به طور دستی پنجره ها را مرتب کنید.
Command window جایی است که در آن دستورات را تایپ می کنید تا متلب بتواند نتایج را محاسبه , ارزیابی و یا به صورت نمودار رسم کند.
دستوراتی که در command window اجرا می کنیم در command history بایگانی می شود. از مزایای این بخش می توان به دو مورد اشاره کرد. 1- یک دید کلی از دستوراتی که قبلا اجرا کرده اید بدست می آورید. 2- زمان اجرای دستورات را نیز ذخیره می کند.
می توانید در آن روی هر دستور کلیک راست کرده , گزینه کپی را انتخاب , در command window قرار داده و اجرا کنید. یا با دبل کلیک روی دستور آن را اجرا کنید. به طور نمونه برای اجرای دستوری به ماتریسی نیاز دارید که از طریق محاسبات قبلی بدست آمده و اکنون از حافظه پاک شده است. می توانید آن دستور را سریعا از طریق command history اجرا کنید تا داده مورد نیاز در workspace ذخیره شود. البته نباید فراموش کرد که هنگام اتمام کار متغییر ها باید ذخیره شوند.
در مورد workspace در فصل 2 توضیحاتی داده شد که توصیه می شود آنرا مرور کنید. تنها نکته ای که گفته نشد این است که می توانید با دبل کلیک کردن بر روی متغیر های تعریف شده , تک تک مولفه های آنها را ویرایش کنید. همچنین اگر بر روی متغیر ها کلیک راست کنید می توانید هر متغیر را به شکل های مختلف رسم کنید. از این طریق می توانید با توابع گرافیکی بیشتری آشنا شوید. سرگرمی جالبی است البته در مورد این توابع در فصل های بعد به طور کامل بحث می شود.
فایل های جدیدی که در متلب ساخته می شوند در current directory ذخیره می شوند.
ممکن است بخواهیم آدرس curret drectoy را تغییر دهیم یا فایلی را از آدرسی دیگر اجرا کنیم. برای ایجاد یک current directry جدید چند روش وجود دارد. می توانید از تطریق پنجره current directory مانند پنجره های محیط ویندوز عمل کنید. می توانید در قسمت toolbar در قسمت curret directory روی دکمه "..." کلیک کنید و آدرس دهید. همچنین می توانید دستور مربوطه را در command window تایپ کنید که ضرورتی به گفتن دستور نیست. Current directory جایی است که می توانید فایل ها را هم اجرا و هم تغییر دهید. ولی فرضا اگر بخواهیم فایلی را فقط اجرا کنیم باید آدرس آن را add کنیم.
برای add کردن یک directory ازدستور زیر استفاده کنید.من در درایو c پوشه ای با نام matlab درست کردم و آدرس آن را add کردم.

کد:
>> addpath C:\matlab


فقط نباید در اسامی پوشه های تو در تو فاصله وجود داشته باشد.
می توانید با اجرای دستور editpath , مسیر هایی که متلب سرچ می کند بیابیم. در پنجره باز شده می توانیم پنجره های دلخواه خود را ذخیره یا بعضی از مسیر ها را حذف کنیم. فقط نباید مسیرهای پیشفرض متلب را حذف کنیم. زیرا باعث ایجاد مشکل در اجرای توابع پیش فرض خواهد شد. البته یکی از راه های افزایش سرعت متلب حذف کردن toolbox هایی است که نیاز ندارید.

بکارگیری command window

در فصل های 1 و 2 درباره چگونگی وارد کردن دستورات در command window متلب شرح دادیم.اگر بخواهیم پاسخ عبارت ریاضی sin(0.1)/0.1 و sin(0.01)/0.01 و sin(0.001)/0.001 را بدست آوریم دستورات زیر را تایپ کنید.

کد:
>> x = [0.1, 0.01, 0.001];
>> y = sin(x)./x


که بعد از اتمام محاسبات خواهید دید که دقت نتایج مورد انتظار شما نیست. نتیجه بالا تا پنج رقم اعشار را نشان می دهد نه پانزده رقم. برای مشاهده نتایج با 15 رقم اعشار ابتدای دستورات بالا باید تایپ کنیم format long. اگر دستورتان دارای خطا بود به جای تایپ دوباره دستور می توانید از command history دستور را دوباره وارد کنید و تغییرات لازم را انجام دهید. همچنین برای سرعت بیشتر , کلید های up و down دستورات اجرا شده قبلی را نشان می دهند که می توانید آنها را اصلاح کنید.

M-file

برای مسائل پیچیده ابزار های command window و command history ناکافی هستند. راه حل بهتر آن است که یک M-file ایجاد کنیم. دو نوع M-file وجود دارد. Script M-file و function M-file که در ادامه به نحوه استفاده از هر دو نوع M-file توضیح خواهیم داد.
M-file ها فایل های text معمولی حاوی دستورات متلب هستند.می توانید با استفاده از نرم افزار های کار با متن مانند word و wordpad و notepad و ... M-file ها را ایجاد و یا ویرایش کنید. همین طور می توانید از ادیتور خود متلب برای این کار استفاده کنید که امکانات بیشتری در اختیارتان قرار می دهد.برای ایجاد یک M-file می توانید در command window تایپ کنید edit یا این که از طریق file < new < M-file آنرا ایجاد کنید.

Script M-file

اکنون نحوه ایجاد یک script M-file برای حل مسئله ریاضی ای که قبلا توضیح داده شد را نشان می دهیم.
ابتدا دستور زیر را در M-file تایپ کنید و آن را با نام task1.m در current directory خود ذخیره کنید.

کد:
format long
x = [0.1, 0.01, 0.001];
y = sin(x)./x


برای اجرای این فایل باید در command window تایپ کنید task1. اگر با استفاده از نرم افزاری غیر از متلب M-file را ایجاد کردید یادتان باشد که فرمت فایل را m. قرار دهید. اگر M-file را در پنجره ای غیر از command window ذخیره کردید و در هنگام اجرا اخطار گرفتید به توضیحات مربوط به current directory در صفحات قبل مراجعه کنید. در ورژن های جدید متلب از همان پنجره ادیتور می توانید دستورات را اجرا کنید. در پنجره toolbars یک دکمه سبز رنگ مثلثی وجود دارد که در صورت کلیک کردن بر روی آن ابتدا برای save کردن آدرس می خواهد و سپس آن را اجرا می کند. در نتیجه خروجی در command window چاپ می شود. حالا می توانید M-file خود را ویرایش کنید. برای مثال اگر بخواهید y را به ازای x=0.0001 بدست آورید تغییرات زیر نیاز است.

کد:
format long
x = [0.1, 0.01, 0.001, 0.0001];
y = sin(x)./x


سپس با نوشتن task1 دوباره آن را اجرا کنید. به این نکته توجه کنید که task1 دقیقا مانند یک دستور است و از این پس متلب اعداد را به صورت format long نشان خواهد داد. که برای تغییر آن باید دوباره تایپ کنید format short تا به حالت اول برگردد.

Echo کردن دستورات

همانطور که می بینید , دستورات M-file در command window چاپ نمی شود. برای چاپ شدن دستورات و خروجی به طور همزمان از echo استفاده کنید

کد:
echo on
format long
x = [0.1, 0.01, 0.001];
y = sin(x)./x
echo off


اضافه کردن comment

در متلب می توانیم توضیحاتی را بین دستورات قرار دهیم. این دستورات می توانند محاسبات را توضیح دهند و حتی نتیجه را تفسیر کنند. هر خطی در script M-file که با علامت " % " شروع شود یک comment است و متلب با آن به عنوان دستور رفتار نمی کند. در زیر فایل task1.m را با اضافه کردن comment ویرایش کرده ایم.

کد:
echo on
% Turn on 15 digit display
format long
x = [0.1, 0.01, 0.001];
y = sin(x)./x
% These values illustrate the fact that the limit of
% sin(x)/x as x approaches 0 is 1.
echo off


زمانی که می خواهید به script M-file یک comment اضافه کنید به یاد داشته باشید که در ابتدای سطر علامت % را قرار دهید. اگر دستورات را echo کنید در command window توضیحات نیز ظاهر می شوند.

ساختار script M-file

برای آنکه نتایج script M-file ها قابل باز تولید باشد و نتایج همه جا یکسان باشد و متغیر های تعریف شده قبلی روی نتیجه تاثیر نگذارند و پنجره های گرافیکی قبلی در نتیجه فعلی تاثیر نگذارند نکات زیر را در نظر بگیرید.
می توانید در ابتدای script تایپ کنید clear all تا مطمئن شوید که متغیر های تعریف شده قبلی روی نتایج بی تاثیرند. همچنین می توانیم دستور close all را در ابتدای script M-file هایی قرار دهیم که نمودار تولید می کنند. این دستور تمام پنجره های گرافیکی قبلی را می بندد. در زیر مثالمان را با توضیحات کامل و واضح ویرایش کرده ایم.

کد:
% Remove old variable definitions
clear all
% Remove old graphics windows
close all
% Display the command lines in the command window
echo on
% Turn on 15 digit display
format long
% Define the vector of values of the independent variable
x = [0.1, 0.01, 0.001];
% Compute the desired values
y = sin(x)./x
% These values illustrate the fact that the limit of
% sin(x)/x as x approaches 0 is equal to 1.
echo off


گاهی اوقات چه در command window و چه در M-file دستور به حدی طولانی است که در یک سطر جا نمی شود. در اینجا می توانیم در انتهای خط با یک فاصله از دستورات خط تایپ کنیم "..." و در ادامه Enter بزنیم. حال می توانید ادامه خط را در خط پایین بنویسید. با این کار در خط بعدی علامت << نمی آید.

Function M-file

گاهی اوقات نیاز داریم که فرایندی را برای تعداد زیادی ورودی به یک پارامتر یا متغیر تکرار کنیم. همان طور که در فصل دو گفتیم , می توانیم به یک تابع پیش فرض متلب چندین ورودی دهیم و خروجی بگیریم. همچنین گفته شد که می توان با استفاده از دستور inline تابع مورد نظر خود را ساخت. استفاده از M-file در بسیاری از مواقع برای ساخت توابع راحت تر از استفاده از inline است. اجازه بدهید که به مثال بالا برگردیم. در تابعی که در زیر می سازیم sin(x)/x را با چند مقدار از (x=10^ (-b برای مقادیر مختلف ماتریس b محاسبه می کنیم. دستورات زیر را در M-file با نام sinelimit در current directory خود save کنید که این مسئله را حل می کند. توجه کنید که نام آن را فقط باید sinelimit بگذارید

کد:
function y = sinelimit(c)
% SINELIMIT computes sin(x)/x for x = 10^(-b),
% where b = 1, ..., c.
format long
b = 1:c;
x = 10.^(-b);
y = (sin(x)./x)';


function M-file مانند یک script M-file یک فایل متنی ساده است. اولین خط این فایل حاوی عبارت تابع است که فایل را به عنوان function M-file مشخص می کند. خط اول نام function و آرگومان های ورودی و خروجی را مشخص می کند. در این مثال نام تابع sinelimit است. به این نکته بسیار توجه کنید که نام function باید با نام M-file یکی باشد. وگرنه جواب نمی دهد. تابع sinelimit یک ورودی به نام c دارد. b یک ماتریس سطری از 1 تا c است. وقتی c را مشخص می کنیم ماتریس b محاسبه می شود و مولفه های این ماتریس نقش x را در sin(x)/x بازی می کنند و خروجی را نظیر به نظیر مولفه های ماتریس b بیرون می دهد. علامت پریم بردار خروجی را ستونی می کند.
همان طور که قبلا اشاره شد , قرار گرفتن سمی کالن در انتهای دستور موجب عدم نمایش آن در command window می شود. ولی به دلیل M-file بودن آن , اجرایش به طور خودکار مقدار متغیر خروجی را نشان می دهد. نکته عجیب این است که در صورت نگذاشتن سمی کالن خروجی دو بار چاپ می شود.
همچنین به این نکته توجه کنید که متغیر های بکار برده شده در function مثل x و b و y در sinelimit متغیر های محلی هستند.یعنی با این که این متغیر ها در M-file تعریف می شوند, هیچ ربطی به متغیر های همنام خود در workspace متلب ندارد. و متلب مقادیر آنها را بعد از محاسبه نگه نمی دارد. در فصل 4 توضیحات مفصل تری در این رابطه داده می شود.
در زیر مثالی از نحوه استفاده از تابع sinelimit آورده شده است.

کد:
>> sinelimit(5)


Loop یا حلقه

یک حلقه یا یک loop مشخص می کند که دستور یا مجموعه ای از دستورات باید چندین بار تکرار شوند. در اینجا مثال ساده ای از محاسبه و نمایش عدد !10 ( 1×2×3×4×5×6×7×8×9×10 ) آورده شده است.

کد:
f = 1;
for n = 2:10
f = f*n;
end
f


یک loop با عبارت for آغاز و با عبارت end پایان می یابد. عملیات بین این دو عبارت 9 بار تکرار می شود. قرار دادن سمی کالن در بخش میانی برای جلوگیری از چاپ f در عملیات میان حلقه ای است. اگر سمی کالن نگذاریم به ترتیب مقادیر !2 و !3 و ... چاپ می شود. اگر این دستورات را در command window تایپ کنید بعد از عبارت for در خط بعد علامت << را نخواهیم دید. اما بعد از گذاشتن end دوباره << ظاهر می شود. اگر این دستور را در یک script M-file می نویسید و می خواهید آن را echo کنید باید echo off را قبل از end قرار دهید. در غیر این صورت دستورات بین for و end به تعداد مولفه های بردار n چاپ می شود.

ارائه نتایج

گاهی اوقات ممکن است بخواهید نتایج script M-file را به دیگران نشان دهید. بدین منظور می توانید از یک M-book استفاده کنید که در فصل 6 توضیح داده شده است.یا می توانید نتایج خود را در نرم افزار های دیگری مانند word اجرا کنید و یا این که نتایج را به فرمت html تبدیل کنید که در فصل 10 بحث شده است.
اگر تعداد نتایج خروجی زیاد باشد می توانید در M-file خود بعد از هر خروجی دستور pause را وارد کنید.pause باید بعد از توضیحات مهم , نمودار ها و نقاط بحرانی script که نتایج عددی می دهد بکار برده شود. در این صورت بیننده نتایج این امکان را می یابد که نتایج را ببیند و بفهمد. وقتی که متلب به دستور pause می رسد محاسبه را متوقف می کند و منتظر زدن کلید می ماند. کلید را کمی نگه دارید!

فایلهای diary ( یاد آور)

در اینجا راه سریعی را برای ذخیره ی متن M-file در یک فایل text نشاان می دهیم تا در آینده بتوانید دستورات را بفهمید.

کد:
delete task1.txt
diary task1.txt
% Display the command lines in the command window
echo on
% Remove old variable definitions
clear all
% Remove old graphics windows
close all
% Turn on 15 digit display
format long
% Define the vector of values of the independent variable
x = [0.1, 0.01, 0.001];
% Compute the desired values
y = sin(x)./x
% These values illustrate the fact that the limit of
% sin(x)/x as x approaches 0 is equal to 1.
echo off
diary off


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

رسم نمودار

همان طور که در فصل 1 و 2 ذکر شد نمودار ها در پنجره های مجزایی نمایش داده می شوند.
در زیرمثالی از رسم نمودار ارائه می دهیم.
در این مثال می خواهیم نمودار توابع (sin(x و (sin(2x و (sin(3x را در یک صفحه رسم کنیم. در زیر برای حل این مسئله یک script M-file ارائه شده است.

کد:
echo on
% Define the x values.
x = 2*pi*(0:0.01:1);
% Remove old graphics, and get ready for several new ones.
close all; axes; hold on
% Run a loop to plot three sine curves.
for c = 1:3
plot(x, sin(c*x))
echo off
end
echo on
hold off
% Put a title on the figure.
title('Several Sine Curves')
pause



[تصویر: 5.jpg]



بیایید دستورات بالا را بررسی کنیم. ابتدا مقادیر محور x را تعریف کردیم. دستور close all همه پنجره های گرافیکی باز شده از قبل را می بندد. دستور axes یک پنجره گرافیکی تازه و خالی ایجاد می کند. و دستور hold on به متلب اجازه می دهد که چندمنحنی را روی یک صفحه رسم کند. خطوط بین for و end یک حلقه for می سازد. دستور plot مهمترین قسمت این حلقه است که منحنی های سینوسی را رسم می کند. اگر دقت کنید یک بار در ابتدا echo on گذاشتیم و سپس قبل از end دستور echo off را وارد کردیم. دلیل این کار این بود که حلقه for فقط یک بار در command window چاپ شود. سپس بعد از اتمام حلقه دوباره echo on کردیم. دستور hold off به متلب فرمان می دهد که دستورات گرافیکی بعدی را در صفحه جدیدی رسم کند. در انتها بعد از گذاشتن عنوان برای نمودار , دستور pause را وارد می کنیم تا این که بیننده بتواند قبل از نمایش تصویر , دستورات را ببیند و بفهمد.

چاپ کردن دستورات به صورت ریاضی

اگر یک فرمول ریاضی پیچیده را به صورت دستور بنویسیم , به زحمت می توان از روی آن فهمید که فرمول واقعا چه کار می کند. برای چاپ فرمول به صورت ریاضی در command window از تابع pretty استفاده می کنیم. به مثال زیر توجه کنید.

کد:
syms Rrp Xlrp Xm s Rth Xth Vth
Isabs=(((((Rrp./s).^2)+((Xlrp+Xm)^2)).^(0.5))./(((Rth+(Rrp./s).^2)+((Xth+Xlrp)^2)).^(0.5)))*(Vth/Xm)
pretty(Isabs)


که در نتیجه این فرمول را به صورت زیر در command window چاپ می کند.

[تصویر: 6.jpg]


دستور input

اگردر دستورات متلب بخواهیم این امکان را فراهم کنیم که کاربر بتواند به ازای ورودی های مختلف خروجی دریافت کند از دستور زیر استفاده می کنیم

کد:
var = input('Input var here: ')


سپس متلب در command window چاپ می کند :

کد:
Input var here:
http://www.iranled.com/
نویسندگان وبلاگ:
کدهای اضافی کاربر :