MATLAB و آموزش مقدماتی و دستورات پر کاربرد

آموزش MATLAB

این صفحه جهت آموزش MATLAB می باشد که بعضی از دستورات پر کاربرد آن را آموزش می دهد.

پنجره های مهم نرم افزار MATLAB

در شکل زیر پنجره ی اصلی نرم افزار و توضیحات آن را مشاهده می کنید:

MATLAB01

در شکل زیر نحوه ی ساخت یک M-File جدید و برخی گزینه های دیگر را مشاهده می کنید:

MATLAB02

در شکل زیر پنجره ی M-File را که به آن Editor می گویند مشاهده می کنید:

 MATLAB03

حروف از پیش تعیین شده در نرم افزارMATLAB یک سری از حروف می باشند که از پیش تعریف شده می باشند و اگر کاربر آنها را تغییر دهد، ممکن است که ادامه ی برنامه با مشکلاتی روبرو شود. این حروف به شرح زیر می باشند: eps: کوچکترین عدد بزرگتر از صفر iوj: عدد موهومی (رادیکال منفی یک) inf: بی نهایت (مخفف Infinitive) pi: عدد 3.14 NaN: غیر عدد clock وdate: تاریخ و ساعت ans: اگر حاصل محاسبات در هیچ متغیری قرار نگیرد، در این متغیر قرار می گیرد.   نکته:نرم افزارMATLABنسبت به حروف بزرگ و کوچک حساس می باشد. آشنایی با توابع ریاضیاتی مهم sin(x): این تابع سینوس یک زاویه را بر حسب رادیان محاسبه می کند (آرگومان تمامی توابع مثلثاتی رادیان است). برای تبدیل رادیان به درجه باید آن را در عدد 3.14 ضرب نمود و بر 180 تقسیم کرد. cos(x): محاسبه ی کسینوس بر حسب رادیان. tan(x) محاسبه ی تانژانت بر حسب رادیان. asin(x)،acos(x)،atan(x) برای محاسبه ی معکوس توابع مثلثاتی. atan2(y,x): برای محاسبه ی تانژانت اندازه ی عدد موهومی به حقیقی. sec(x)وcsc(x)برای محاسبه ی سکانت و کسکانت. sinh(x)،cosh(x)،asinh(x) و…برای محاسبه ی توابع هیپربولیک) log(x) برای محاسبه ی لگاریتم در مبنایe (لگاریتم طبیعی) یک عدد (ln(x)). log10(x): برای محاسبه ی لگاریتم در مبنای 10. sqrt(x): محاسبه ی رادیکال یک عدد. exp(x): عدد نپر (2.7183) را به توانxمی رساند. abs(x): قدر مطلق اعداد را محاسبه می کند. در اعداد موهومی اندازه ی عدد موهومی را بدست می آورد. angle(x): زاویه ی (فاز) یک عدد موهومی را محاسبه می کند. mod(x,y): باقیمانده ی تقسیمxبرyرا محاسبه می کند. inv(x): معکوس یک ماتریس را محاسبه می کند.   کاراکتر های کنترلی در نرم افزارMATLAB ;: این کاراکتر برای بستن انتهای دستورات برای عدم نمایش آنها در پنجره ی Command Window بکار می رود. :: این کاراکتر برای مشخص کردن حد فاصل یک عدد تا عدد دیگر بکار می رود. مثلا 2:10 عدد 2 ،3، 4، 5، 6، 7، 8، 9 و 10 را تولید می کند و اگر این کاراکتر به صورت 2:0.5:5 تعریف شود، اعداد 2، 2.5، 3، 3.5، 4، 4.5 و 5 تولید می شود. ^: برای به توان رساندن ماتریس ها از این کاراکتر استفاده می شود. []: برای تعریف یک ماتریس (آرایه) از این کاراکتر استفاده می شود. (): برای دسترسی به اعضای یک ماتریس یا فراخوانی توابع از پرانتز استفاده می کنیم. %: اگر این دستور در ابتدای هر خط قرار بگیرد، رنگ آن خط سبز می شود و دیگر جزء برنامه به حساب نمی آید (برای نمایش توضیحات) ‘: برای محاسبه ی ترنهاده ی ماتریس ها بکار می رود (ترانهاده یعنی عوض کردن جای سطر ها و ستون ها). ,: علامت ویرگول برای جداسازی عبارات مختلف بکار می رود. ”: از این کاراکتر برای مشخص کردن رشته ها استفاده می کنیم. .: نقطه برای محاسبات درایه به درایه در ماتریس ها بکار می رود. مثلا اگر یک ماتریس 2 در 3 (2 سطر و 3 ستون) داشته باشیم که نام آنaباشد، و یک ماتریس 1 در 1 (به ماتریس 1 در 1 ماتریس اسکالر هم گفته می شود) به نامbداشته باشیم، در این صورت اگر بخواهیم تک تک درایه های ماتریسaرا به توانbبرسانیم، دستورa^bنادرست است (زیرا ماتریسaباید حتما مربعی باشد تا بتواند به توان برسد (در خودش ضرب شود)) پس از دستورa.^bاستفاده می کنیم. کاراکتر های کنترلی دیگر هم وجود دارند که بعدا شرح داده می شوند. با دستورclcمی توان کل صفحه نمایش را پاک نمود. با دستورclearمی توان کل متغیر ها را پاک نمود و اگر بعد از این دستور نام یک متغیری نوشته شود، فقط آن متغیر را پاک می کند. مثلاclear aمتغیرaرا پاک می کند. با دستورwhoوwhosمی توان متغیر ها را مشاهده نمود و با دستورwhos aمی توان متغیرaرا با جزئیاتش نمایش داد.   توابع گرد کردن اعداد درMATLAB ceil(x): عددxرا به نزدیک ترین عدد صحیح در جهت مثبت بی نهایت گرد می کند. floor(x): عددxرا به نزدیک ترین عدد صحیح در جهت منفی بی نهایت گرد می کند. round(x): عددxرا به نزدیک ترین عدد صحیح گرد می کند. fix(x): عدد x را به نزدیک ترین عدد صحیح در جهت صفر گرد می کند.   تعیین نوع نمایش درMATLAB اگر در پنجره ی Command Window دستور help format را بنویسید، صفحه ای به شکل زیر باز می شود:

FORMAT Set output format.

    FORMAT with no inputs sets the output format to the default appropriate

    for the class of the variable. For float variables, the default is

    FORMAT SHORT.

    FORMAT does not affect how MATLAB computations are done. Computations

    on float variables, namely single or double, are done in appropriate

    floating point precision, no matter how those variables are displayed.

    Computations on integer variables are done natively in integer. Integer

    variables are always displayed to the appropriate number of digits for

    the class, for example, 3 digits to display the INT8 range -128:127.

    FORMAT SHORT and LONG do not affect the display of integer variables.

    FORMAT may be used to switch between different output display formats

    of all float variables as follows:

      FORMAT SHORT     Scaled fixed point format with 5 digits.

      FORMAT LONG      Scaled fixed point format with 15 digits for double

                       and 7 digits for single.

      FORMAT SHORTE    Floating point format with 5 digits.

      FORMAT LONGE     Floating point format with 15 digits for double and

                       7 digits for single.

      FORMAT SHORTG    Best of fixed or floating point format with 5

                       digits.

      FORMAT LONGG     Best of fixed or floating point format with 15

                       digits for double and 7 digits for single.

      FORMAT SHORTENG  Engineering format that has at least 5 digits

                       and a power that is a multiple of three

      FORMAT LONGENG   Engineering format that has exactly 16 significant

                       digits and a power that is a multiple of three.

    FORMAT may be used to switch between different output display formats

    of all numeric variables as follows:

      FORMAT HEX     Hexadecimal format.

      FORMAT +       The symbols +, – and blank are printed

                     for positive, negative and zero elements.

                     Imaginary parts are ignored.

      FORMAT BANK    Fixed format for dollars and cents.

      FORMAT RAT     Approximation by ratio of small integers.  Numbers

                     with a large numerator or large denominator are

                     replaced by *.

    FORMAT may be used to affect the spacing in the display of all

    variables as follows:

      FORMAT COMPACT Suppresses extra line-feeds.

      FORMAT LOOSE   Puts the extra line-feeds back in.

    Example:

       format short, pi, single(pi)

    displays both double and single pi with 5 digits as 3.1416 while

       format long, pi, single(pi)

    displays pi as 3.141592653589793 and single(pi) as 3.1415927.

       format, intmax(‘uint64’), realmax

    shows these values as 18446744073709551615 and 1.7977e+308 while

       format hex, intmax(‘uint64’), realmax

    shows them as ffffffffffffffff and 7fefffffffffffff respectively.

    The HEX display corresponds to the internal representation of the value

    and is not the same as the hexadecimal notation in the C programming

    language.

  در این صفحه می توان نوع نمایش عدد ? را که برابر 3.141592653589793 می باشد را به صورت زیر تعیین کرد: format short: این نوع نمایش حالت پیش فرض MATLAB است و عدد 3.14 به صورت 3.1416 نمایش داده می شود. format long: در این نوع نمایش عدد 3.14 به صورت 15 رقمی مذکور نشان داده می شود. format shorte: اعداد در این صورت به صورت نماد علمی نشان داده می شوند. یعنی عدد p به صورت 3.1416e000 نشان داده می شود که منظور از e000 ده به توان صفر است. format longe در این صورت نیز نمایش 15 رقمی است و یک exxx نیز در انتها نشان داده می شود. (نماد علمی) format hex: اعداد به صورت مبنای 16 نشان داده می شوند و در این قسمت موهومی اعداد حذف می شود. مثلا ? در این نوع نمایش به صورت 400921fb54442d18 نشان داده می شود. format +: در این نوع نمایش فقط علامت اعداد نمایش داده می شود. format rat: اعداد اعشاری را به صورت کسری نشان می دهد. در این صورت 3.14 به صورت 355/113 نمایش داده می شود. فرمت های نمایشی دیگری هم وجود دارد که به دلیل استفاده ی کم شرح داده نمی شوند. در بسیاری از مواقع اعداد اعشاری مورد نیاز نمی باشند و فقط اعداد صحیح استفاده می شوند. در این صورت بهتر است که اعداد به صورت صحیح تعریف شوند تا فضای کمتری را اشغال کنند. در نرم افزار MATLAB اعداد به صورت پیش فرض با فرمت double که برای اعداد اعشاری است و 64 بیتی می باشد (8 بایت را اشغال می کند) تعریف می شوند. در این صورت با نوشتن دستورات realmax و realmin می توان حداکثر و حداقل مقدار متغیر double را که از 30810 تا 308-10 می باشد را می توان مشاهده نمود. یعنی اگر عددی از 308 10 بزرگتر باشد، بی نهایت و از 308-10 کوچکتر باشد، صفر درنظر گرفته می شود. برای تعریف کردن اعداد به صورت صحیح می توان از دستورات int8، int16، int32، int64، uint8، uint16، uint32 و uint64 استفاده نمود. برای مشاهده ی مقادیر حداکثر و حداقل این دستورات از تابع intmax(‘intx’) و intmin(‘intx’) استفاده می شود. مثلا برای مشاهده ی مقادیر حداکثر و حداقل uint8 باید به صورت زیر عمل کنیم:

>> intmax(‘uint8’)

ans =

  255

>> intmin(‘uint8’)

ans =

    0

>> 

یعنی عدد uint8 بین صفر تا 255 می تواند مقدار داشته باشد و اگر داده ای مقدارش منفی باشد یا بیشتر از 255 باشد و در متغیری از نوع uint8 قرار بگیرد، مقدارش تغییر می کند. int8 و uint8، 8 بیتی بوده و 1 بایت حافظه را اشغال می کنند (یک هشتم double فضا را اشغال می کنند). برای تعریف یک ماتریس یا یک عدد از نوع uint8 به صورت زیر عمل می کنیم:

>> a=int16(50)

a =

   50

>> b=uint8([1 2 3;4 5 6;7,8,9])

b =

    1    2    3

    4    5    6

    7    8    9

>> c=uint8(500)

c =

  255

>> whos

  Name      Size            Bytes  Class    Attributes

  a         1×1                 2  int16             

  b         3×3                 9  uint8             

  c         1×1                 1  uint8             

>> 

در مثال فوق a یک ماتریس اسکالر از نوع int16 می باشد، b یک آرایه (ماتریس) 3×3 می باشد که از نوع uint8 است (برای جداسازی درایه های ماتریس می توان  هم از کلید space و هم از کاراکتر ویرگول استفاده نمود). در نهایت ماتریس c یک ماتریس اسکالر از نوع uint8 است و به دلیل اینکه محدوده ی تغییرات uint8 بین 0 تا 255 است و عدد 500 خارج این محدوده است، با قرار دادن عدد 500 در متغیری از نوع uint8 داده ها دچار اختلال می شود. در انتها با نوشتن دستور whos می توان متغیر های تعریف شده را با نوع و تعداد بایت اشغال شده ی حافظه مشاهده نمود. نکته: اعداد می توانند به صورت char، schar، uchar، bitN، ubitN، float32 و float64 نیز تعریف شوند که برای راهنمایی بیشتر در پنجره ی Command Window عبارت help را با نام این متغیر ها بنویسید. توابع نمایش در نرم افزار MATLAB دو تابع به نام های disp و fprintf وجود دارند که برای نمایش بکار می روند. این دو تابع فقط رشته ها را نمایش می دهد (منظور از رشته ها کد های اسکی می باشد). تابع disp و fprintf به صورت زیر عبارت welcome را نشان می دهند:

>> disp(‘welcome’);

welcome

>> fprintf(‘welcome’);

welcome>>

>> n=’welcome’;

>> disp(n);

welcome

>> fprintf(n);

welcome>>

>> c=2;

>> disp(c);

       2      

>> fprintf(c)

??? Error using ==> fprintf

No format string.

>> 

همانطور که در دستورات بالا مشاهده می کنید، در 4 خط بالا هر دو تابع disp و fprintf رشته ی welcome را نشان می دهند. اگر این رشته در خط پنجم در متغیر n نیز قرار بگیرد، مجددا این دو تابع رشته ی n را نمایش می دهند. اما اگر متغیری از نوع عددی تعریف شود، تابع disp آن را نمایش می دهد (خودش عدد را کد اسکی می کند) اما تابع fprintf نمی تاند این کار را انجام دهد. برای اینکه تابع fprintf نیز بتواند اعداد را نمایش دهد، از تابع num2str() استفاده می کنیم. این تابع به صورت زیر است:

>> fprintf(num2str(c));

>>2

اما تابع fprintf یک ویژگی دیگر نیز دارد. در این تابع می توان از کاراکتر هایی با نام precision استفاده نمود. اگر در Command Window عبارت help fprintf نوشته شود، عبارات precision به طور کامل نمایش می یابد. مهم ترین precision ها عبارتند از: \n: مانند زدن کلید Enter عمل می کند و مکان نما به خط بعدی می رود. %d: نمایش اعداد به صور صحیح %e: نمایش اعداد به صورت نمایی %f: نمایش اعداد به صورت اعشاری %g: نمایش به صورت اعشاری یا نمایی در دستورات زیر انواع precision ها را مشاهده می کنید:

>> fprintf(‘welcome\n’);

welcome

>> fprintf(‘pi is: %d’,pi);

pi is: 3.141593e+000>> fprintf(‘pi is: %e\n’,pi);

pi is: 3.141593e+000

>> fprintf(‘pi is: %g\n’,pi);

pi is: 3.14159

>> fprintf(‘pi is: %f\n’,pi);

pi is: 3.141593

>> fprintf(‘pi is: %1.8f\n’,pi);

pi is: 3.14159265

>> fprintf(‘pi is: %1.15f\n’,pi);

pi is: 3.141592653589793

>> 

در دستور fprintf بجای %x که x یکی از Precision های فوق می باشد، مقدار متغیر pi قرار گرفته است. در خط یکی مانده به آخر منظور از %1.15f این است که متغیر pi را با یک رقم صحیح و 15 رقم اعشار نشان دهد.   تابعی دیگری هم برای دریافت عدد از صفحه کلید می باشد که input نام دارد. این تابع در برنامه ی زیر به طور کامل نشان داده شده است:

>> a=input(‘Yek Adad Vared Konid\n’);

Yek Adad Vared Konid

20

>> a

a =

    20 

>> 

دستورات رسم نمودار در نرم افزار MATLAB تابع plot این تابع می تواند حداقل یک نمودار و حداکثر هفت نمودار را رسم نماید اگر در پنجره ی Command Window نرم افزار MATLAB عبارت help plot نوشته شود. عباراتی در این صفحه مشاهده می شود که قسمتی از این عبارات به شکل زیر می باشد:

b     blue             .     point                       –     solid

g     green           o    circle                      :     dotted

r     red               x     x-mark                   -.    dashdot

c     cyan            +     plus                       —    dashed

m     magenta     *     star                       (none)  no line

y     yellow         s     square

k     black           d     diamond

w     white          v     triangle (down)

                            ^     triangle (up)

                           >     triangle (left)

                           <     triangle (right)

                           p     pentagram

                           h     hexagram

در عبارت فوق ستون سمت چپ نشان دهنده ی رنگ نمودار می باشد، ستون وسط نشان دهنده ی علامت گذاری نمودار می باشد و ستون سمت راست نوع نمودار را مشخص می کند موارد فوق در برنامه و شکل زیر مشهود است:

x=0:0.1:360;

تعریف زاویه از صفر تا 360 درجه ی رادیان

x=x.*(pi/180);

تبدیل زاویه از رادیان به درجه

y1=sin(x);

y2=cos(x);

محاسبه ی Sin و Cos متغیر x

plot(x,y1,’r-‘,x,y2,’g-->’);

رسم تابع (sin(xبا رنگ قرمز و پیوسته و رسم تابع (cos(x با رنگ سبز و خط چین همراه با علامت گذار >

xlabel(‘\theta’);

نمایش حرف تتا یونانی برای محور x

ylabel(‘f1(\theta),f2(\theta)’);

نام گذاری محور y

title(‘sin(\theta),cos(\theta)’);

نام گذاری عنوان نمودار

legend(‘sin(\theta)’,’cos(\theta)’);

نمایش Legend (نشان داده شده در شکل فوق)

grid on;

روشن کردن خطوط شطرنجی نمودار

MATLAB04

برای تغییر محور های مختصات تابع Plot از دستور axis([xmin xmax ymin ymax]) استفاده می شود برای مثال در نمودار فوق محور x از صفر تا 7 را نمایش می دهد و نمودار y از 1- تا 1 را نمایش می دهد برای تغییر محور افقی به محدوده ی 2 تا 10 و محور y در محدوده ی 2- تا 2 به صورت زیر عمل می کنیم:

axis([2 10 -2 2])

دستور axis normal محور ها را به حالت عادی بر می گرداند. دستور axis equal محور ها را به صورت هم اندازه نمایش می دهد. دستور axis square محور ها را به صورت مربع در می آورد. دستور axis off کلی ی برچسب ها را مخفی می کند. توابع semilogx، semilogy و loglog دقیقا مانند تابع plot عمل می کنند تا این تفاوت که به ترتیب، محور x، محور y و هر دو محور را به صورت لگاریتمی رسم می کنند.   نکته: تابع plot3 نیز مانند تابع plot می باشد اما نمودار را به صورت سه بعدی رسم می کند.   توابع bar، barh و bar3 این توابع برای رسم نمودار مستطیلی بکار می روند. تابع bar نمودار مستطیلی معمولی رسم می کند (مانند شکل 1) تابع barh نمودار مستطیلی افقی رسم می کند (مانند شکل 2) تابع bar3 نمودار مستطیلی سه بعدی رسم می کند (مانند شکل 3) به عنوان مثال برنامه ی زیر را در نظر بگیرید. این برنامه به صورت همزمان با یک سری از اعداد، سه نمودار مذکور را رسم می نماید.  

x=1:10;

تعریف x از 1 تا 10

figure(1),bar(x);

رسم نمودار bar در شکل اول

figure(2),barh(x);

رسم نمودار barh در شکل دوم

figure(3),bar3(x);

رسم نمودار bar3 در شکل سوم

MATLAB05

شکل 1

MATLAB06

شکل 2

MATLAB07

شکل 3

تابع area این تابع سطح زیر نمودار را پر می کند. به عنوان مثال برنامه ی زیر را در نظر بگیرید.

x=1:0.1:360;

x=x.*(pi/180);

y=sin(x);

area(y);

این تابع خروجی زیر را تولید می کند.

MATLAB08

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

x=1:10;

pie(x);

این برنامه خروجی زیر را تولید می کند.

MATLAB09

  حال اگر بخواهیم بجای درصد اعداد، شماره ی اعداد یا نام دلخواهی را قرار دهیم، به صورت زیر عملی می کنیم: به دلیل اینکه x بین 1 تا 10 است (یعنی 10 مقدار دارد)، بنابراین باید 10 مقدار هم برای هر x نوشت که در این صورت برنامه به فرم زیر تغییر می کند:

x=1:10;

pie(x,{‘1′,’BWM’,’Ford’,’jaguar’,’Neysan’,’Folex’,…

       ‘Peykan’,’Perayd’,’9′,’Porsche’});

در این صورت خروجی برنامه به صورت زیر تغییر می کند:

MATLAB10

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

x=1:10;

z=[0 0 0 0 0 0 1 0 0 0];

pie(x,z,{‘1′,’BWM’,’Ford’,’jaguar’,’Neysan’,’Folex’,…

       ‘Peykan’,’Perayd’,’9′,’Porsche’});

MATLAB11

تابع stem و stem3 این تابع برای رسم نمودار ساقه و برگ بکار می رود. برنامه ی زیر را در نظر بگیرید، خروجی این برنامه به شکل زیر است:

x=1:10;

stem(x);

MATLAB12

تابع stairs این تابع نمودار پله ای رسم می کند.

x=1:0.5:10;

stairs(x);

xlabel(‘step’);

ylabel(‘x’);

MATLAB13

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

x=1:4:360;

x=x.*(pi/180);

y=sin(x);

feather(y);

خروجی زیر تولید شده است.

MATLAB14

تابع hist این تابع یک هیستوگرام رسم می کند. هیستوگرام برای نماش توزیع مقادیر بکار می روند. مثلا اعداد 1 تا 100 را در نظر بگیرید. تابع هیستوگرام به صورت پیش فرض این اعداد را در 10 دسته تقسیم می کند و این دسته ها را با مستطیل نمایش می دهد (یعنی 10 مستطیل). به دلیل اینکه توزیع مقادیر در همه ی این 10 دسته یکسان است 10 مستطیل هم اندازه ایجاد می شود. برای توصیف دقیق تابع هیستوگرام برنامه ی زیر را در نظر بگیرید:

x=1:0.1:360;

x=x.*(pi/180);

y=sin(x);

hist(y,50);

MATLAB15

تابع spy این تابع نمودار یک بعدی نقطه ای رسم می کند.

x=1:10;

spy(x);

MATLAB16

5 thoughts on “MATLAB و آموزش مقدماتی و دستورات پر کاربرد

  1. سجادی says:

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

    • محمد رضا بیگی says:

      منظورتون روشن نیست
      در GUI؟
      در ضمن نظرات جای مناسبی برای پاسخ به سوالات نیست

  2. رضا دیبا says:

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

Comments are closed.