برنامه نویسی به زبان Matlab

Download Report

Transcript برنامه نویسی به زبان Matlab

‫برنامه نویس ی به زبان ‪Matlab‬‬
‫‪1‬‬
‫فهرست مراجع‬
‫‪2‬‬
‫آشنایی با ‪Matlab‬‬
‫• با توجه به پیشرفت روز افزون علم در رشتههای مختلف مهندس ی و محاسباتی‪ ،‬نیاز به تسلط بر یک زبان‬
‫برنامهنویس ی برای موفقیت در انجام کارهای پژوهش ی غیر قابل انکار است‪ .‬بدیهی است که استفاده از‬
‫زبانهای سطح بال برای اهداف کاربردی و مهندس ی‪ ،‬سرعت تولید علم را افزایش میدهد و از سوی دیگر‬
‫یادگیری این زبانها نیز سادهتر است‪.‬‬
‫• در چند سال اخیر استفاده از زبان سطح بال و قدرتمند ‪ Matlab‬در بین پژوهشگران رایج شده و کاربرد آن‬
‫روز به روز در حال افزایش است‪.‬‬
‫• استفاده از تکنیکهای آرایهای حجم برنامهها را در مقایسه با زبانهای دیگر کاهش میدهد‪.‬‬
‫• وجود دستورات و توابع پیشرفته و به روز در این زبان‪ ،‬بسیاری از خواستههای کاربردی مانند رسمهای‬
‫گرافیکی‪ ،‬ساخت تصاویر متحرک‪ ،‬محاسبات پیچیده ریاض ی‪ ،‬حل عددی معادلت دیفرانسیل و ‪ . . .‬را برای‬
‫کاربر آسان نموده است‪.‬‬
‫• آشنایی دانشپژوهان رشتههای فنی و مهندس ی با این زبان سرعت پیشرفت کارهای تحقیقاتی و پژوهش ی را بال‬
‫میبرد‪.‬‬
‫‪3‬‬
‫آشنایی با ‪Matlab‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫متلب (‪ )MATLAB‬نام یکی از نرمافزارهای رایانهای برای انجام محاسبات ریاض ی است‪.‬‬
‫تمام دادهها در ‪ Matlab‬به شکل یک ماتریس ذخیره میشوند‪.‬‬
‫حتی یک تصویر به شکل یک ماتریس سه بعدی ذخیره میگردد که ُبعد اول و دوم آن برای‬
‫تعیین مختصات نقاط و ُبعد سوم آن برای تعیین رنگ نقاط استفاده میشود‪.‬‬
‫فایلهای صوتی نیز در ‪ Matlab‬به شکل ماتریسهای تک ستون (بردارهای ستونی) ذخیره‬
‫میشوند‪.‬‬
‫‪ ‬واژه ‪ Matlab‬هم به معنی محیط محاسبات رقمی و هم به معنی خود زبان برنامهنویس ی‬
‫مربوطه است که از ترکیب دو واژه ‪ MATrix‬و ‪ LABoratory‬ایجاد شدهاست‪ .‬این نام‬
‫حاکی از رویکرد ماتریس محور برنامه است‪ ،‬که در آن حتی اعداد منفرد هم به عنوان ماتریس‬
‫در نظر گرفته میشوند‪.‬‬
‫‪ ‬عالوه بر توابع فراوانی که خود ‪ Matlab‬دارد‪ ،‬برنامهنویس نیز میتواند توابع جدید‬
‫تعریف کند‪.‬‬
‫‪4‬‬
‫آشنایی با ‪Matlab‬‬
‫‪ ‬استفاده از توابع ‪ Matlab‬برای نمایش دادهها بسیار راحت و لذت بخش است‪ .‬برای مثال با‬
‫چند خط زیر میتوان یک شکل موج سینوس ی با فرکانس ‪ ۱۰‬هرتز را تولید کرده و کشید‪:‬‬
‫‪x=0:0.01:10‬‬
‫( ‪y=sin(2*pi*10*x‬‬
‫(‪plot(x,y‬‬
‫‪ ‬ساخت رابطهای گرافیکی یا ‪ Graphical User Interfaces‬مانند دیالوگهایی که در‬
‫محیطهای ویژوال مانند بیسیک و ‪ C‬وجود دارند‪ ،‬در ‪ Matlab‬امکانپذیر است‪ .‬این‬
‫قابلیت‪ ،‬ارتباط بهتری را میان برنامههای کاربردی نوشتهشده با ‪ Matlab‬و کاربران برقرار‬
‫میکند‪.‬‬
‫‪ Matlab ‬که از محصولت شرکت (‪ )The MathWorks‬است‪ ،‬برای گروههای مختلف‬
‫مهندسان رشتههای مختلف از جمله مهندس ی برق‪ ،‬مهندس ي پزشكي‪ ،‬مکانیک‪ ،‬رایانه و‪ ...‬کاربرد‬
‫بسیاری دارد‪.‬‬
‫‪5‬‬
‫قدرت ‪Matlab‬‬
‫‪ ‬هسته ‪ Matlab‬برای سرعت و کارایی بال به زبان ‪ c‬نوشته شدهاست ولی رابط‬
‫گرافیکی آن به زبان جاوا )‪ (java‬پیادهسازی گشته است‪.‬‬
‫‪ ‬برنامههای ‪ Matlab‬اکثرا متنباز هستند و در واقع ‪( Matlab‬مانند بیسیک)‬
‫مفسر است نه کامپایلر‪ .‬قدرت ‪ Matlab‬از انعطافپذیری آن و راحت بودن کار‬
‫با آن ناش ی میشود‪.‬‬
‫‪ ‬همچنین شرکت سازنده و گروههای مختلف‪ ،‬از جمله دانشگاههای سرتاسر‬
‫جهان و برخی شرکتهای مهندس ی هر ساله جعبهابزارهای خاص‪-‬کاربردی به آن‬
‫میافزایند که باعث افزایش کارآیی و محبوبیت آن شدهاست‪.‬‬
‫‪6‬‬
‫قدرت ‪Matlab‬‬
‫‪ ‬فهرستی از این جعبهابزارها در زیر آمدهاست‪:‬‬
‫‪ ‬جعبهابزار مخابرات ‪ ،Matlab‬توابع و ابزارهای محاسبات مهندس ی مخابرات‬
‫‪ ‬جعبهابزار کنترل ‪ ،Matlab‬توابع و ابزارهای محاسبات مهندس ی کنترل‬
‫‪ ‬جعبهابزار فازی ‪ ،Matlab‬توابع و ابزارهای محاسبات فازی‬
‫‪ ‬جعبهابزار محاسبات ‪ ،Matlab‬توابع و ابزارهای محاسبات عددی‬
‫‪ ‬جعبهابزار سیمولینک ‪ ،Matlab‬جعبهابزاری برای شبیهسازی سیستمها به صورت مجرد‬
‫‪ ‬جعبهابزار تخمین ‪ ،Matlab‬توابع و ابزارهای محاسبات بحث تخمین سیستم در مهندس ی کنترل‬
‫‪ ‬جعبهابزار آمار ‪ ،Matlab‬توابع و ابزارهای محاسبات آمار‬
‫‪ ‬جعبهابزار جمعآوری داده ‪ ،Matlab‬توابع و ابزارهای جمعآوری داده‬
‫‪ ‬جعبهابزار شبکه عصبی ‪ ،Matlab‬توابع و ابزارهای محاسبات شبکه عصبی‬
‫‪ ‬جعبهابزار پردازش تصویر ‪ ،Matlab‬توابع و ابزارهای محاسبات پردازش تصویر‬
‫‪ ‬جعبهابزار پردازش صوت ‪ ،Matlab‬توابع و ابزارهای محاسبات پردازش صوت‬
‫‪ ‬جعبهابزار کارگاه بالدرنگ ‪ ،Matlab‬توابع و ابزارهای محاسبات سیستمهای بالدرنگ‬
‫‪7‬‬
‫نصب ‪Matlab‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫با گذاشتن ‪ cd‬نصب ‪ Matlab‬بطور خودکار شروع میشود‪.‬‬
‫ممکن است لزم باشد ابتدا نرم افزار ‪ java virtual machine‬نصب شود و‬
‫پس از راهاندازی مجدد نصب متلب آغاز شود‪.‬‬
‫پس از اجرای نصب‪ ،‬کامپیوتر برای ادامه به یک کد ‪ PLP‬نیاز خواهد داشت‬
‫که معمول در ‪ cd‬وجود دارد‪.‬‬
‫پس از تعیین مسیر و نوع نصب یکی از گزینههای زیر را باید انتخاب کنید‪:‬‬
‫ فقط برنامه )‪(product only‬‬‫ فقط ‪)help only( help‬‬‫‪ -‬هم برنامه و هم ‪)documentation and product( help‬‬
‫‪8‬‬
‫پنجرههای ‪Matlab‬‬
‫‪9‬‬
‫پنجرههای ‪Matlab‬‬
‫‪10‬‬
‫پنجرههای ‪Matlab‬‬
‫‪11‬‬
‫پنجرههای ‪Matlab‬‬
‫‪12‬‬
‫پنجره های ‪Matlab‬‬
‫‪13‬‬
‫پنجرههای ‪Matlab‬‬
‫‪14‬‬
‫پنجرههای ‪Matlab‬‬
‫‪15‬‬
‫پنجرههای ‪Matlab‬‬
‫‪16‬‬
‫پنجرههای ‪Matlab‬‬
‫‪17‬‬
‫پنجرههای ‪Matlab‬‬
‫‪18‬‬
‫پنجرههای ‪Matlab‬‬
‫‪19‬‬
‫پنجرههای ‪Matlab‬‬
‫‪20‬‬
‫پنجرههای ‪Matlab‬‬
‫‪21‬‬
‫کار با ماتریسها‬
‫‪22‬‬
‫کار با ماتریسها‬
‫‪23‬‬
‫کار با ماتریسها‬
‫‪24‬‬
‫کار با ماتریسها‬
‫‪25‬‬
‫کار با ماتریسها‬
‫‪26‬‬
‫کار با ماتریسها‬
‫‪27‬‬
‫کار با ماتریسها‬
‫‪28‬‬
‫کار با ماتریسها‬
‫‪29‬‬
‫کار با ماتریسها‬
‫‪30‬‬
‫کار با ماتریسها‬
‫‪31‬‬
‫کار با ماتریسها‬
‫‪32‬‬
‫کار با ماتریسها‬
‫‪33‬‬
‫کار با ماتریسها‬
‫‪34‬‬
‫کار با ماتریسها‬
‫‪35‬‬
‫کار با ماتریسها‬
‫‪36‬‬
‫کار با ماتریسها‬
‫‪37‬‬
‫کار با ماتریسها‬
‫‪38‬‬
‫کار با ماتریسها‬
‫‪39‬‬
‫کار با ماتریسها‬
‫‪40‬‬
‫کار با ماتریسها‬
‫‪41‬‬
‫کار با ماتریسها‬
‫‪42‬‬
‫کار با ماتریسها‬
‫‪43‬‬
‫متغییرها و عملیات روی آنها‬
‫‪ ‬زمانی که عبارات محاسباتی به تنهایی در خط فرمان وارد و اجرا شوند‪ ،‬نتیجه حاصله در یک متغییر پیش‬
‫فرض بنام ‪ ans‬ذخیره و نمایش داده میشود‪.‬‬
‫‪ ‬نام این متغییر را شما میتوانید تعیین کنید‪:‬‬
‫‪a=2‬‬
‫‪b= 2*3 + 5^2‬‬
‫=‪>> b‬‬
‫‪31‬‬
‫‪ ‬نام متغییر میتواند حد اکثر ‪ 31‬کاراکتر داشته باشد‪.‬‬
‫‪ ‬کاراکتر اول همواره باید یک حرف باشد و کاراکترهای بعدی میتوانند حروف‪ ،‬اعداد یا زیر خط (_) باشند‪.‬‬
‫‪ Matlab ‬نسبت به کوچک و بزرگ بودن حروف حساس است‪.‬‬
‫‪ ‬قرار دادن ; در انتهای یک دستور‪ ،‬موجب میشود که نتیجه اجرای دستور نمایش داده نشود‪.‬‬
‫‪ ‬نام متغییرها را از کلمات کلیدی نمیتوان انتخاب نمود‪.‬‬
‫‪44‬‬
‫متغییرها و عملیات روی آنها‬
‫‪ ‬برخي از کلمات کلیدی عبارتند از‪:‬‬
‫‪break‬‬
‫‪persistent‬‬
‫‪case‬‬
‫‪switch‬‬
‫‪while‬‬
‫‪function‬‬
‫‪If‬‬
‫‪end‬‬
‫‪for‬‬
‫‪otherwise‬‬
‫‪catch‬‬
‫‪break‬‬
‫‪global‬‬
‫‪return‬‬
‫‪elseif‬‬
‫‪else‬‬
‫‪try‬‬
‫‪ ‬با استفاده از تابع ‪ clear‬میتوان متغییرها را از فضای کاری پاک کرد‪.‬‬
‫‪ ‬دو تابع ‪who‬و ‪ whose‬برای شناسایی متغییرهایی که در حافظه وجود دارند میتوان استفاده کرد‪.‬‬
‫‪ ‬اعداد مختلط را به همان ترتیبی که در کاغذ مینویسیم در خط فرمان تایپ میکنیم‪.‬‬
‫‪<< S1= 1 +2i‬‬
‫‪>> S2=3 – 1.5j‬‬
‫‪>> S1+S2‬‬
‫‪ ‬اندازه اعداد مختلط با تابع ‪ abs‬و زاویه آنها برحسب راديان توسط تابع ‪ angle‬قابل تعیین است‪.‬‬
‫)‪>> abs (s1‬‬
‫)‪>> angle (s1‬‬
‫‪‬‬
‫‪45‬‬
‫چند تابع مهم‬
‫‪ pi ‬یک تابع ویژه است که عدد پی را ایجاد میکند‪.‬‬
‫‪ ‬توابع ‪ real , imag‬به ترتیب بخشهای موهومی و حقیقی یک عدد مختلط را‬
‫بر میگردانند‪.‬‬
‫)‪>> Real (1+2i‬‬
‫)‪>> imag (3-1.5j‬‬
‫)‪ sqrt(x‬‬
‫‪ eps‬و ‪ inf , NaN , realmin , realmax‬‬
‫‪ Format‬‬
‫‪46‬‬
format ‫تابع‬
47
format ‫تابع‬
48
format ‫تابع‬
49
‫عملگرها‬
‫\ ‪[] , () ; : + - * /‬‬
‫^ ‪.* , `, a.*a ,‬‬
‫`‪./ ,.\ ,.^,.‬‬
‫‪imag‬‬
‫‪50‬‬
‫آرایه های عددی‬
‫ایجاد آرایه‪:‬‬
‫‪ ‬وارد کردن اعضای آرایه‬
‫‪ ‬استفاده از توابع سازنده آرایه‬
‫اندیس آرایه ها‬
‫‪ ‬اندیس سطر و ستون ()‬
‫‪ ‬اندیس تکی (خطی)‬
‫ایجاد بردارهای بزرگ‬
‫‪Xs:step:Xend ‬‬
‫‪Linspace(x1,x2,n) , logspace(x1,x2,n) ‬‬
‫مزدوج توابع مختلط و عملگر `‪.‬‬
‫‪51‬‬
‫توابع ایجاد آرایه های ویژه‬
 ones(3,2) , ones(3)
 zeros(3,2) , zero(3)
eg: k=pi ; A=ones(2,3)*k
 eye(n) , eye(n,m)
 s=[1 2 3 4] ; a=diag(s) ;ss=diag(a)
 magic (n)
 rand(n,m) , randn(n,m)
 Randperm(n)
52
‫کار با ‪ m‬فایلها‬
‫‪53‬‬
‫ایجاد فایل‬
‫‪54‬‬
‫ فایلها‬m ‫کار با‬
‫ ذخیره فایل‬
Set path
Run ,f5
‫اجرا در پنجره فرمان‬
)save name var_name( ‫ذخیره کردن متغییرها‬
)load name ( ‫بازیابی متغییرها‬
) file  save workspace as….name) workspace ‫ذخیره‬
)load name( workspace ‫بازیابی‬
)\n , ‘s'( Input() , disp()
55








‫کار با ‪ m‬فایلها‬
‫‪ ‬نوشتن توابع (‪)function‬‬
‫)‪Function output=function_name (input‬‬
‫‪ ‬مثال ‪ :‬تابع ضرب دو عدد‬
‫‪‬‬
‫‪‬‬
‫‪o‬‬
‫‪o‬‬
‫‪o‬‬
‫‪o‬‬
‫‪ %‬و توابع ‪H‬‬
‫تبدیل اسکریپت به تابع‬
‫ حذف همه ورودی ها (‪)input ,….‬‬‫ حذف خروجی ها و هرگونه چاپ و عالئم و نوشته ها (…‪)disp, plot,‬‬‫ گذاشتن ; در انتهای هر خط‬‫‪ -‬ذخیره فایل با نام تابع‬
‫‪56‬‬
‫کنترل جریان در برنامه نویس ی‬
‫‪ ‬توابع شرطی‬
‫‪ if ……end‬این تابع در صورت صادق بودن شرط وارد شده‪ ،‬دستورات معیین شده‬
‫را یکبار اجرا می کند‪.‬‬
‫مثال ‪:1‬‬
‫;)'‪a=input('please enter a number :‬‬
‫‪if a>5‬‬
‫;‪b=a^2‬‬
‫;)‪disp('a^2 = ');disp(b‬‬
‫‪End‬‬
‫اپراتورها‬
‫‪(&&, ||, ~) :‬‬
‫‪== , ~= , >= , >, < ,<= , logical operators‬‬
‫…… ‪if‬‬
‫‪elseif ........‬‬
‫‪else‬‬
‫‪end‬‬
‫‪57‬‬
‫توابع شرطی‬
:2 ‫مثال‬
a=input('please enter a number : a = ');
if a>=5
b=a^2;
disp('a^2 = ');
disp(b);
else
disp('too little');
End
:3 ‫مثال‬
a=input('please enter a number : a = ');
if a>=5 && a<=100
b=a^2;
disp('a^2 = ');
disp(b);
elseif a==0
disp('wrong number');
else
disp('invalid number');
end
58
‫توابع شرطی‬
‫ دستورات‬،‫ این تابع تا زمانی که شرط تعیین شده برقرار است‬: while……end
‫تعیین شده را اجرا می نماید‬
while expression
statements
End
‫این تابع تصمیم گیری در مورد چند موضوع را برعهده دارد‬: switch....case…end
SWITCH switch_expr
CASE test1,
(commands1)
CASE {test2_1, test2_2, test2_3,...}
(commands1)
...
OTHERWISE,
(commands)
END
59
‫توابع شرطی‬
:1 ‫مثال‬
eps = 1;
while (1+eps) > 1
eps = eps/2;
end
eps = eps*2
:2 ‫مثال‬
s=0
n=0
while s<1000
n=n+1;
s=s+n^2;
end
out=[n-1 s-n^2]
% .....sum((1:13).^2) ,n=13
60
‫توابع شرطی‬
:3 ‫مثال‬
number = input ('please input the number :','s')
switch lower(number)
case 'one'
disp('number is 1')
case 'two'
disp('number is 2')
case 'three'
disp('number is 3')
case 'zero'
break;
otherwise
disp('Unknown number')
end
61
‫توابع چرخهای‬
‫‪ : For…end‬بوسیله این دستور میتوان قسمتی از برنامه را به تعداد معلوم تکرار کرد‬
‫‪ :While…..end‬تکرار تا صادق بودن شرط‬
‫‪return , continue , break‬‬
‫مثال ‪:1‬‬
‫;)'‪N = input('input a number : \n‬‬
‫‪for R = 1:N‬‬
‫‪for C = 1:N‬‬
‫;)‪A(R,C) = 1/(R+C-1‬‬
‫‪end‬‬
‫‪end‬‬
‫;)‪disp(A‬‬
‫‪62‬‬
‫توابع چرخهای‬
:2 ‫مثال‬
k= input('enter a number: ');
for m = 1:k
for n = 1:k
if m == n
a(m,n) = 2;
elseif abs(m-n) == 2
a(m,n) = 1;
else
a(m,n) = 0;
end
end
end
disp(a);
63
‫رسم نمودارها‬
‫‪ Matlab‬توابع ترسیم متعددی را ارایه کرده است که به کمک آنها میتوان انواع‬
‫نمودارها را به سادگی ایجاد کرد‪.‬‬
‫عملکرد‬
‫نام تابع‬
‫‪ plot‬رسم خطی‬
‫‪ plotyy‬رسم خطی با دو محور عمودی مستقل‬
‫‪ semilogx‬رسم خطی با محور افقی لگاریتمی‬
‫‪ semilogy‬رسم خطی با محور عمودی لگاریتمی‬
‫‪ loglog‬رسم خطی با محور های لگاریتمی‬
‫‪ polar‬رسم خطی در مختصات قطبی‬
‫‪64‬‬
‫رسم نمودارها‬
‫ تعداد نقاط بیشتر باعث هموار شدن نمودارها میشود‬‫ با اجرای تابع ‪ plot‬میتوان دو یا چند نمودار را نیز در یک چارچوب مختصات رسم کرد‪.‬‬‫)‪>> Plot(x,sin(x),x,cos(x),….‬‬
‫ تابع ‪ plot‬نقاط را بترتیبی که در بردارها قرار دارند‪ ،‬به هم وصل میکند‪.‬‬‫)]‪>> Plot([0 5 6 -1 0],[-1 0 3 2 -1‬‬
‫ با فرمان ‪ grid on‬میتوان خطوط شبکه را فعال نمود‪.‬‬‫))‪>> plot (x,x.*sin(x‬‬
‫‪>> grid on‬‬
‫ تابع ‪ semilogx‬برای رسم دادهها در یک محور مختصات با محور افقی لگاریتمی به کار میرود‪.‬‬‫;)‪>> x=linspace (1,100,8‬‬
‫;‪>> y=x/2‬‬
‫)'‪>> semilogx (x,y,'-o‬‬
‫‪65‬‬
‫چند مثال‬
.‫ برنامهای بنویسید که عددی را از بخواند و دایرهای با شعاع آن عدد رسم کند‬
r=input('please input the radius : \n');
if r==0
break;
end
angle=linspace(0,2*pi,360);
x=r*sin(angle);
y=r*cos(angle);
plot(x,y)
xlabel('x')
ylabel('y')
title('circle')
axis('equal')
grid on
66
‫رسم نمودارها‬
‫ تابع ‪ semilogy‬دادهها را در محورهایی با محور عمودی لگاریتمی رسم میکند‪.‬‬‫;)‪>> x = linspace (1,5‬‬
‫;)‪>> y = 2*exp(x‬‬
‫‪>> semilogy (x,y) , grid on‬‬
‫ تابع ‪ loglog‬دادهها را در محورهای افقی و عمودی لگاریتمی رسم میکند‪.‬‬‫;)‪>> logspace (0,4‬‬
‫;)‪>> exp (-0.3*x‬‬
‫‪>> loglog (x,y) , grid on‬‬
‫ تابع ‪ plotyy‬برای رسم دو نمودار با مقادیر ‪ y‬متفاوت در یک محور مختصات بکار میرود‪.‬‬‫;)‪>> x = linspace (0,2*pi‬‬
‫‪>> plot (x , sin(x) ,x, exp(x)) , grid on‬‬
‫>>‬
‫‪>> plotyy (x , sin(x) ,x, exp(x)) , grid on‬‬
‫‪67‬‬
‫رسم نمودارها‬
‫ تابع ‪ polar‬برای رسم دادههای مربوط به مختصات قطبی ()‪ ) r = f(Ø‬مورد استفاده قرار میگیرد‪.‬‬‫ورودیهای این تابع به ترتیب بردار ‪ Ø‬بر حسب رادیان و بردار ‪ r‬میباشند‪.‬‬
‫; ) ‪>> theta = linspace(0,2*pi‬‬
‫; ) ‪>> r = 2 * cos (2 * theta‬‬
‫)‪>> polar (theta , r‬‬
‫‪68‬‬
‫ویرایش نمودارها‬
‫‪-‬‬
‫در فراخوانی توابع ترسیم میتوان نوع و رنگ خط و نمادهای مربوط به آنها را با یک رشته کاراکتری‬
‫مشخص نمود‪ .‬در جدول زیر حروف و عالیم نشان داده شده است‪.‬‬
‫رنگ‬
‫نوع خط‬
‫نماد‬
‫‪b‬‬
‫آبی‬
‫‪o‬‬
‫دایره‬
‫‪-‬‬
‫توپر‬
‫‪r‬‬
‫قرمز‬
‫‪s‬‬
‫مربع‬
‫‪--‬‬
‫خط چین‬
‫‪g‬‬
‫سبز‬
‫‪d‬‬
‫لوزی‬
‫‪:‬‬
‫نقطه چین‬
‫‪w‬‬
‫سفید‬
‫‪+‬‬
‫عالمت جمع‬
‫‪-.‬‬
‫خط نقطه‬
‫‪k‬‬
‫سیاه‬
‫*‬
‫ستاره‬
‫‪c‬‬
‫فیروزه ای‬
‫‪x‬‬
‫عالمت ضرب‬
‫‪m‬‬
‫ارغوانی‬
‫‪v‬‬
‫مثلث رو به پایین‬
‫‪y‬‬
‫زرد‬
‫^‬
‫مثلث رو به باال‬
‫>‬
‫مثلث رو به چپ‬
‫<‬
‫مثلث رو به راست‬
‫‪p‬‬
‫ستاره پنج پر‬
‫‪h‬‬
‫ستاره شش پر‬
‫‪.‬‬
‫نقطه‬
‫‪69‬‬
‫تعیین نوع و رنگ خطوط و نمادها‬
‫مثال ‪:1‬‬
‫;)‪>> x=linspace (0,2*pi,31‬‬
‫;)‪>> y = sin(x‬‬
‫)’‪>> plot (x,y, ‘-*r’, x ,cos(x) ,’ob--‬‬
‫مثال ‪:2‬‬
‫)’‪>> plot (x , sin(x) , ‘dk‬‬
‫برای تعیین ضخامت خطوط نمودارها و نمایش نمادها با اندازه‪ ،‬رنگ لبه و رنگ سطح دلخواه میتوان آنها‬
‫را پس از آرگومانهای ورودی در توابع ترسیم مشخص نمود‪.‬‬
‫)‪>> plot(‘x ,y ,’string’, property1 ,value1,…..‬‬
‫‪70‬‬
‫تعیین نوع و رنگ خطوط و نمادها‬
‫‪ ‬جدول زیرنام خاصیتها و نوع مقادیری را که میپذیرد را نشان میدهد‪.‬‬
‫نام خاصیت‬
‫وظیفه‬
‫نوع مقدار‬
‫’‪‘Linwidth‬‬
‫تعیین ضخامت خط‬
‫عدد مثبت‬
‫’‪‘MarkerEdgColor‬‬
‫تعیین رنگ لبه نمادها‬
‫کاراکتر مشخصه‬
‫’‪‘MarkerSize‬‬
‫تعیین اندازه نماها‬
‫عدد مثبت‬
‫’‪‘MarkerFaceColor‬‬
‫تعیین رنگ داخل نمادهای توخالی‬
‫کاراکتر مشخصه‬
‫مثال ‪: 1‬‬
‫;‪x = -pi:pi/10:pi‬‬
‫;))‪y = tan(sin(x)) - sin(tan(x‬‬
‫‪plot(x,y,'--rs','LineWidth',2,...‬‬
‫‪'MarkerEdgeColor','k',...‬‬
‫‪'MarkerFaceColor','g',...‬‬
‫)‪'MarkerSize',10‬‬
‫‪71‬‬
‫ویرایش نمودارها‬
:2 ‫مثال‬
>> x = linspace(0,2*pi,31)
>> plot(x,sin(x),’-bs’, 'LineWidth',2)
:3 ‫مثال‬
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'XTick',-pi:pi/2:pi)
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
72
‫رسم نمودارها‬
‫‪ hold ‬با استفاده از این تابع میتوان رسم های جدید را در کنار رسمهای قبلی ایجاد‬
‫نمود‪.‬‬
‫)‪>> x= linspace(0,2*pi,31‬‬
‫)’‪>> plot (x,sin(x) ,’-bs‬‬
‫‪>> hold on‬‬
‫)’‪>> plot(x ,cos (x), ‘:ro‬‬
‫‪>> hold off‬‬
‫‪ ‬توابع ترسیم روی دادههای مختلط‬
‫• اگر بردارها یا ماتریسها دارای عضوهای مختلط باشند‪ ،‬بخش موهومی در نظر گرفته نمیشود‪.‬‬
‫;‪>> cx = (0:pi/4:pi)' + rand(5,1)*I‬‬
‫;)‪>> cy = sin(cx‬‬
‫‪>> plot(cx, cy, ‘--^) ,grid on‬‬
‫‪73‬‬
‫رسم نمودارها‬
‫‪ ‬تنها زمانی که تابع ترسیم با یک بردار یا ماتریس ورودی دارای عضوهای مختلط فراخوانی شود‪ ،‬بخش‬
‫موهومی عضوها بر حسب بخش حقیقی آنها رسم میشود‪.‬‬
‫;’)‪>> t = linspace (0,2*pi,9‬‬
‫;)‪>> y = cos(t) + i*sin(2*t‬‬
‫)’‪>> plot (y ,’b-o‬‬
‫‪ ‬برای ایجاد برچسب محورها‪ ،‬عنوان و فهرست نمودارها از توابع ‪,xlabel, title , legend , ylabel‬‬
‫استفاده می کنیم‪.‬‬
‫;’)‪>> t = linspace (0,5‬‬
‫;‪>> h = 30*t – 0.5*9.81*t.^2‬‬
‫‪>> plot (t ,h ,’b-o’) ,grid on‬‬
‫)’)‪>> xlabel (‘time (s‬‬
‫)’)‪>> ylabel (‘height (m‬‬
‫)’ ‪>> title (‘ h(t) = v0t - ½ g t^2 , v0 = 30 m/s‬‬
‫‪74‬‬
‫رسم نمودارها‬
:1 ‫مثال‬
 x=0:pi/100:2*pi;
 y1 = sin(x);
 y2 = sin(x - 0.25);
 y3 = sin(x - 0.5);
 plot(x,y1,x,y2,x,y3)
 legend('sin(x)' , 'sin(x-0.25)' ,'sin(x-0.5)')
: 2 ‫مثال‬
 plot (x,y1, 'c--*', x ,y2,'r-d', x,y3, 'k-.p')
75
‫رسم نمودارها‬
‫‪76‬‬
‫تنظیم محورهای مختصات‬
‫برای تنظیم دلخواه محورهای مختصات از تابع ‪ axis‬استفاده میشود‪ .‬مثال زیر محدوده نمایش محورهای‬
‫افقی و عمودی را تعیین میکند‪.‬‬
‫;‪ x = 0:.025:pi/2‬‬
‫)'‪ plot(x,tan(x),'-ro‬‬
‫)]‪ axis([0 pi/2 0 5‬‬
‫‪77‬‬
‫تنظیم محورهای مختصات‬
:1 ‫مثال‬
 axis auto
 xlim ([0 2*pi])
 title(‘ xlim( [0 2*pi] ) ')
: 2 ‫مثال‬
 x=0:pi/100:2*pi;
 y = sin(x);
 plot(x,y)
 axis tight
 axis equal
 axis auto
 axis square
 axis normal
 axis normal tight off
 axis on
78
‫توابع ترسیم ویژه‬
‫‪ ‬عالوه بر توابع ترسیم ذکر شده‪ ،‬متلب توابع متعددی را برای رسم های ویژه ارایه کرده‬
‫است‪.‬تعدادی از این توابع عبارتند از‪:‬‬
‫‪area , bar , barh ,bar3 ,bar3h ,pie ,stemscatter ,…………..‬‬
‫مثال ‪: 1‬‬
‫;]‪ Y = [1, 5, 3;3, 2, 7; 1, 5, 3; 2, 6, 1‬‬
‫)‪ area(Y‬‬
‫‪ grid on‬‬
‫‪ colormap summer‬‬
‫)'‪ set (gca,'Layer','top‬‬
‫'‪ title 'Stacked Area Plot‬‬
‫‪79‬‬
‫توابع ترسیم ویژه‬
‫‪80‬‬
‫توابع ترسیم ویژه‬
:2 ‫مثال‬
 t=linspace(0,2*pi,31);
 subplot(2, 1,1)
 area(t,sin(t),'facecolor','g'),axis tight
 subplot(2,1,2)
 area(t',cos(t),'linewidth',2), axis tight
81
‫توابع ترسیم ویژه‬
‫مثال ‪ :3‬بوسیله تابع )‪ subplot(m,n,p‬میتوان صفحه ترسیم را به چندین قسمت‪ ،‬تقسیم کرد‪m (.‬سطر‬
‫و ‪ n‬ستون و قسمت ‪)p‬‬
‫;]‪p = [5.2 3.6 1 9‬‬
‫)‪subplot(2,2,1), pie(p‬‬
‫))‪subplot(2,2,2), pie(p,p==max(p‬‬
‫)‪subplot(2,2,3), pie3(p‬‬
‫)]‪subplot(2,2,4), pie3(p,[1 0 0 0‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪82‬‬
‫توابع ترسیم ویژه‬
‫ مثال‬
x=linspace(0,2*pi,41);
y=sin(x).^2.*exp(-0.2*x);
plot(x,y), hold on
stem(x,y,’.’)
83
‫توابع ترسیم ویژه‬
>> x=linspace(0,2*pi,9);
>> subplot(2,2,1)
>> bar(x,x.^2+1)
>> subplot(2,2,2)
>> barh(x,x.^2+1)
>> subplot(2,2,3)
>> bar3(x,x.^2+1)
>> subplot(2,2,4)
>> bar3h(x,x.^2+1)
84
‫ترسیم های سه بعدی و سطوح‬
‫‪-‬‬
‫‪ Matlab‬چند تابع مفید را به منظور رسم نقاط‪ ،‬خطوط و منحنی ها در فضای سه بعدی ارایه کرده‬
‫است‪ .‬جدول زیر این توابع را نشان میدهد‪.‬‬
‫نام تابع‬
‫‪plot3‬‬
‫عملکرد‬
‫رسم خطی سه بعدی‬
‫‪ezplot3‬‬
‫رسم خطی سه بعدی آسان‬
‫‪comet3‬‬
‫رسم خطی پویای سه بعدی‬
‫‪stem3‬‬
‫رسم نمودار میله ای گسسته فضایی‬
‫‪scatter3‬‬
‫رسم نقاط پراکنده فضایی‬
‫‪85‬‬
‫ترسیم های سه بعدی و سطوح‬
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square
86
‫ترسیم های سه بعدی و سطوح‬
:‫ فراخوانی میشود‬plot ‫ مشابه‬plot3 ‫تابع‬
-
plot3(X1,Y1,Z1,...)
 plot3(X1,Y1,Z1,LineSpec,...)

.‫ میتوانند بردار یا ماتریس باشند‬x,y,z ‫ متغییرهای‬close all,clc ,clear
t = linspace(0,2*pi,41);
x = -3*sin(t).*exp(-0.05*t);
y = 3*cos(t).*exp(-0.05*t);
z = 0.5*t;
plot3(x,y,z,'linewidth',2)
hold on
stem3(x,y,z,'*r')
% ‫از این تابع برای تجسم بهتر منحنی سه بعدی استفاده شده است‬
hold off
grid on
axis equal
xlabel('x')
ylabel('y')
zlabel('z')
87
‫ترسیم های سه بعدی و سطوح‬
‫‪88‬‬
‫ترسیم های سه بعدی و سطوح‬
‫ تابع ‪ ezplot3‬برای رسم منحنی های فضایی که روابط مربوط به آنها بصورت تابع ‪ m‬فایل یا رشته‬‫کاراکتری بیان میشوند‪ ،‬مناسب است‪.‬‬
‫‪close‬‬
‫;')‪xstr = '-3*sin(u)*exp(-0.1*u‬‬
‫;')‪ystr = '2*cos(u)*exp(-0.1*u‬‬
‫'‪zstr = '0.3*u‬‬
‫)]‪ezplot3(xstr,ystr,zstr,[0 4*pi‬‬
‫‪axis equal‬‬
‫)'‪xlabel('x'),ylabel('y') ,zlabel('z‬‬
‫‪89‬‬
‫ترسیم های سه بعدی و سطوح‬
.‫ میتوان رسم منحنی های فضایی را بصورت پویانمایی مشاهده کرد‬comet3 ‫ با استفاده از تابع‬ comet3(z)
 comet3(x,y,z)
 comet3(x,y,z,p)
 comet3(axes_handle,...)
:1 ‫مثال‬
 t = -10*pi:pi/250:10*pi;
 comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);
:2 ‫مثال‬
 close
 ti = linspace(0,6*pi,5000);
 xi = -3*sin(ti).*exp(-0.05*ti);
 yi = 3*cos(ti).*exp(-0.05*ti);
 zi = 0.3*ti;
 comet3(xi,yi,zi)
90
‫ترسیم های سه بعدی و سطوح‬
‫ ‪ Matlab‬با اضافه کردن محور ‪ z‬به نمودارهای دو بعدی‪ ،‬آنها را به نمودار سه بعدی تبدیل می کند‪.‬‬‫اما برای رسم نمودارهایی که خود دارای متغییر سوم هستند با ید از توابع ‪ mesh , surf‬استفاده‬
‫کرد‪.‬‬
‫;)‪ [x,y] = meshgrid (-8:0.5:8‬‬
‫;‪ r = sqrt (x.^2 + y.^2) + eps‬‬
‫;‪ z = sin(r)./r‬‬
‫)‪ mesh(x,y,z‬‬
‫)‘‪ xlabel('x'),ylabel('y‬‬
‫)'‪ zlabel('z'),title('mesh‬‬
‫بصورت پیش فرض رنگ خطوط شبکه براساس مقدار‬
‫متوسط تابع در دو سر آنها تعیین می شود‪.‬‬
‫)‪ surf(x,y,z‬‬
‫‪91‬‬
‫ترسیم های سه بعدی و سطوح‬
‫ تابع ‪ meshgrid‬برای ایجاد سطوح یک شبکه بکار میرود‪ .‬برای ساختن سطح باید شبکه ای کامل و‬‫همگن ساخته شود‪ .‬منظور از شبکه خطوط عمود بر هم است که محل تقاطع مکان نقاط سطح را‬
‫نشان میدهد‪.‬‬
‫)‪[x,y] = meshgrid (x‬‬
‫)‪[x,y,z] = meshgrid(x,y,z‬‬
‫ ‪ Peaks‬یک سطح پیش فرض در ‪ matlab‬است و بصورت زیر میتوان به آن دست یافت‪.‬‬‫که ‪ n‬دقت ترسیم را نشان میدهد‬
‫)‪[x,y,z] = peaks(n‬‬
‫مثال ‪:1‬‬
‫;)‪[x,y] = meshgrid(-3:0.1:3‬‬
‫;‪z = x.^2 + y.^2‬‬
‫)‪mesh(x,y,z‬‬
‫)‪colormap(jet‬‬
‫)'‪xlabel('x'),ylabel('y‬‬
‫)'‪zlabel('z'), title('mesh plot for z = x^2 + y^2‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪92‬‬
‫ترسیم های سه بعدی و سطوح‬
‫‪93‬‬
‫ترسیم های سه بعدی و سطوح‬
‫;)‪ [x,y,z] = peaks(40‬‬
‫)‪ colormap(hot‬‬
‫)‪ surf(x,y,z‬‬
‫)'‪ xlabel('x'),ylabel('y‬‬
‫)'‪ zlabel('z'), title ('surf‬‬
‫ تابع ‪ surf‬بصورت پیش فرض از‬‫مود ‪ RGB‬استفاده می کند‪ .‬رنگ قرمز‬
‫برای سطوح باالیی استفاده میشود‪.‬‬
‫ تابع ‪ colorbar‬نوار رنگی‬‫راهنما برای تشخیص ارتفاع سطوح را‬
‫نشان میدهد‬
‫‪94‬‬
‫ترسیم های سه بعدی و سطوح‬
[x,y,z] = peaks(50);
surf(x,y,z)
colorbar
xlabel('x'),ylabel('y')
zlabel('z'), title ('surf')
95
‫ترسیم های سه بعدی و سطوح‬
‫ تابع ‪:contour‬‬‫کانتورها ( منحنی میزان ) خطوط یا منحنی هایی هستند که مقدار تابع )‪ z=f(x,y‬روی آنها ثابت است‪.‬برای‬
‫نمایش متغیرهایی مانند دما یا فشار در یک میدان معمول از کانتورها استفاده می شود‪.‬‬
‫مثال ‪:‬‬
‫;)‪[x,y] = meshgrid(-3:0.1:3‬‬
‫;‪z = x.^2 + y.^2‬‬
‫)‪contour(x,y,z,15‬‬
‫‪colorbar‬‬
‫)' ‪title('contour ploting for z=x2+y2‬‬
‫‪96‬‬
‫ترسیم های سه بعدی و سطوح‬
‫;)‪[X,Y,Z] = peaks(30‬‬
‫)‪surfc(X,Y,Z‬‬
‫‪colormap hsv‬‬
‫)]‪axis([-3 3 -3 3 -10 5‬‬
‫‪-‬‬
‫در رسم های سطحی‪ ،‬فضای بین ‪ 4‬نقطه تشکیل‬
‫دهندۀ هریک از سلولهای شبکه با رنگ پر میشود‪.‬‬
‫ کانتورها خطوط یا منحنی هایی هستند که مقدار‬‫تابع )‪ z=f(x,y‬روی آنها ثابت است‪.‬‬
‫ ‪ Surfc‬سطح را با منحنی میزان (کانتور) رسم‬‫میکند‪..‬‬
‫ مثال فوق را با ‪ meshc‬تکرار کنید‪.‬‬‫‪ -‬تابع ‪ surfl‬سطح را با نور و رنگ نمایش میدهد‪.‬‬
‫‪97‬‬
‫ترسیم های سه بعدی و سطوح‬
‫;)‪[x,y] = meshgrid(-3:1/8:3‬‬
‫;)‪z = peaks(x,y‬‬
‫;)‪surfl(x,y,z‬‬
‫‪shading interp‬‬
‫;)‪colormap(winter‬‬
‫)]‪axis([-3 3 -3 3 -8 8‬‬
‫ ‪ Shading interp‬عالوه بر حذف‬‫خطوط شبکه باعث هموار شدن سطح رویه‬
‫میشود‪.‬‬
‫ ‪ Shading flat‬باعث حذف خطوط‬‫شبکه میشود‪.‬‬
‫ ‪ Shading faceted‬نمایش را به‬‫حالت پیش فرض برمی گرداند‪.‬‬
‫ برای مشاهده بهتر تاثیر نورپردازی‪ ،‬از دستور‬‫‪ shading interp‬و طرح‬
‫مناسب رنگ استفاده شود‪.‬‬
‫‪98‬‬
‫ترسیم های سه بعدی و سطوح‬
:1 ‫مثال‬
[x,y] = meshgrid(-pi:0.1*pi:pi);
z = x.*cos(y)/2;
surf(x,y,z), axis equal ,title('surf')
xlabel('x'),ylabel('y'),zlabel('z')
:2 ‫مثال‬
[x,y] = meshgrid(-pi:0.1*pi:pi);
z = x.*cos(y)/2;
subplot(1,2,1)
surf(x,y,z), axis equal ,title('surf1')
shading flat
subplot(1,2,2)
surf(x,y,z), axis equal ,title('surf2')
shading interp
99
‫ترسیم های سه بعدی و سطوح‬
:3 ‫مثال‬
[x,y]=meshgrid(-10:0.1:10);
r = sqrt(x.^2 + y.^2)+eps;
z = 4*sin(r)./r;
surfl(x,y,z), axis equal
shading interp
colormap copper
xlabel('x'),ylabel('y')
zlabel('z'), title ('surfl')
100
‫ترسیم های سه بعدی و سطوح‬
:4 ‫مثال‬
[x,y] = meshgrid(-3:1/8:3);
z = peaks(x,y);
surfl(x,y,z);
shading interp
colormap(gray);
axis([-3
101
3
-3
3
-8
8])
‫ترسیم های سه بعدی و سطوح‬
:5 ‫مثال‬
view([10 10])
grid on
hold on
surfl(peaks)
shading interp
colormap copper
hold off
‫ میتوان زاویه دید‬view ‫با استفاده از تابع‬
.‫شکلهای سه بعدی را تغییر داد‬
View(az,el)
defaut :Az=-37.5
102
, el=30o
‫ترسیم های سه بعدی و سطوح‬
view ‫ تابع‬:6 ‫مثال‬
[x,y,z] = peaks(30);
subplot(2,2,1)
mesh(x,y,z,'edgecolor','k')
axis tight, xlabel('x'),ylabel('y'),zlabel('z')
title(‘Default')
subplot(2,2,2)
mesh(x,y,z,'edgecolor','k')
axis tight, xlabel('x'),ylabel('y'),zlabel('z')
view(20,60)
title('view(20,60)')
subplot(2,2,3)
mesh(x,y,z)
axis tight, xlabel('x'),ylabel('y'),zlabel('z')
view(210,20)
title('view(210,20)')
subplot(2,2,4)
mesh(x,y,z)
axis tight, xlabel('x'),ylabel('y'),zlabel('z')
view(0,90)
title('view(0,90)')
103
‫ترسیم های سه بعدی و سطوح‬
.‫ مکان دوربین را برای نمایش ترسیمات سه بعدی تعیین می کند‬: View
[x,y,z]= peaks(30);
mesh(x,y,z)
view([4,4,4])
view(az,el)
view([x,y,z])
view(2)
view(3)
az = 180;
el = 90;
View (az, el);
104
az = 0, el = 90
az = –37.5, el = 30
‫ترسیم های سه بعدی و سطوح‬
:‫توابع ترسیم زیر را امتحان کنید‬
 ezplot('x','sin(x)')
 ezplot3('cos(x)','sin(x)’,’sqrt(x)’)
 ezmesh(‘(x^2+y^2)’)
 ezsurf('(x^2+y^2)‘)
105
‫چند تابع مهم برای رسم نمودارها‬
cylinder ‫ تابع‬-
-
[X,Y,Z] = cylinder
[X,Y,Z] = cylinder(r)
[X,Y,Z] = cylinder(r,n)
cylinder(axes_handle,...)
cylinder(...)
:1 ‫مثال‬
cylinder
axis square
h = findobj('Type','surface');
set(h,'CData',rand(size(get(h,'CData'))))
:2 ‫مثال‬
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(2+cos(t));
surf(X,Y,Z)
axis square
106
‫چند تابع مهم برای رسم نمودارها‬
sphere
‫ تابع‬-
sphere
sphere(n)
[X,Y,Z] = sphere(n)
ribbon ‫ تابع‬ribbon(Y)
ribbon(X,Y)
ribbon(X,Y,width)
ribbon(axes_handle,...)
h = ribbon(...)
rotate rotate(h,direction,alpha)
rotate(...,origin)
Movie getframe 107
‫چند تابع مهم برای رسم نمودارها‬
:1 ‫مثال‬
h = surf(peaks(20));
rotate(h,[1 0 0],180)
:2 ‫مثال‬
h = surf(peaks(20));
zdir = [0 0 1];
center = [10 10 0];
rotate(h,zdir,45,center)
: 3 ‫مثال‬
108
[x,y] = meshgrid(-3:.5:3,-3:.1:3);
z = peaks(x,y);
ribbon(y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
colormap hsv
‫چند تابع مهم برای رسم نمودارها‬
:3 ‫مثال‬
Z = peaks; surf(Z);
axis tight
% Record the movie
for j = 1:20
surf(sin(2*pi*j/20)*Z,Z)
F(j) = getframe;
end
% Play the movie ten times
movie(F,10)
109
‫چند تابع مهم برای رسم نمودارها‬
:danc_ribbon ‫تابع‬
function danc_ribbon
j=1;
for i=1:20
[x,y]=meshgrid(-3:0.5:3,-3:0.1:3);
z=peaks(x,y);
ribbon(y,z)
light('Position',[i-10,i,i+10],'Style','infinite');
axis off;
F(j)=getframe;
rotate(ribbon(y,z),[1,0,0],180);
light('Position',[i+10,i,i-10],'Style','infinite');
axis off;
F(j+1)=getframe;
j=j+2;
end;
movie(F,10);
110
‫چند تابع مهم برای رسم نمودارها‬
:sphere_light_rotate ‫تابع‬
function sphere_light_rotate()
[x,y,z]=sphere(50);
for i=1:250
h=surf(x,y,z);
axis off
rotate(h,[1,0,0],i+45);
light('Position',[i100,i,i+100],'color',[0.025*i,0.036*i,0.012*i]);
F(i)=getframe;
end;
movie(F,20)
111
‫چند تابع مهم‬
‫ بعض ی اوقات لزم است که مقادیر را بر اساس مقادیر خاص ی گرد کنیم‪ .‬در متلب جعبه ابزار نسبتا کاملی برای این‬‫کار وجود دارد‪ .‬این توابع عبارتند از‪:‬‬
‫عملکرد تابع‬
‫عدد را بسمت صفر گرد می کند‬
‫تابع‬
‫‪fix‬‬
‫عدد را بسمت منفی بینهایت گرد می کند‬
‫‪floor‬‬
‫عدد را بسمت مثبت بینهایت گرد می کند‬
‫‪ceil‬‬
‫عدد را بسمت نزدیکترین همسایگی گرد می کند‬
‫‪round‬‬
‫باقیمانده پس از تقسیم از بال‬
‫‪mod‬‬
‫باقیمانده پس از تقسیم از پایین‬
‫‪rem‬‬
‫‪112‬‬
‫چند تابع مهم‬
‫‪ -‬توابع عددی‬
‫عملکرد تابع‬
‫اعداد اول تا ‪n‬‬
‫تابع‬
‫)‪primes(n‬‬
‫تجزیه ‪ n‬به اعداد اول‬
‫)‪factor(n‬‬
‫فاکتوریل ‪n‬‬
‫)‪factorial(n‬‬
‫بزرگترین مقسوم علیه مشترک ‪A , B‬‬
‫)‪gcd(A,B‬‬
‫‪A,B‬‬
‫)‪lcm(A,B‬‬
‫کوچکترین مضرب مشترک‬
‫ توابع نمایی‬‫عملکرد تابع‬
‫ریشه دوم ‪n‬‬
‫ریشه دوم ماتریس ‪a‬‬
‫ریشه ‪n‬ام عدد ‪m‬‬
‫تابع‬
‫)‪Sqrt(n‬‬
‫)‪Sqrtm(a‬‬
‫)‪Nthroot(m,n‬‬
‫‪M‬را بتوان ‪ n‬میرساند‬
‫)‪Power(m,n‬‬
‫‪ 2‬را بتوان ‪ n‬میرساند‬
‫)‪Pow2(n‬‬
‫تابع نمایی ‪x‬‬
‫لگاریتم‬
‫لگاریتم ماتریس ‪a‬‬
‫)‪Exp(x‬‬
‫‪Log ,log2,log10‬‬
‫)‪logm(a‬‬
‫‪113‬‬
‫ حد و انتگرال‬،‫مشتق‬
‫ فرم کلی دستور‬
SYMS Short-cut for constructing symbolic objects.
SYMS arg1 arg2 ...
is short-hand notation for
arg1 = sym('arg1');
arg2 = sym('arg2'); ...
<<syms x
<<f=
‫تابع مورد نظر‬
<<diff (f,‫متغییر مشتق‬،‫)مرتبه مشتق‬
114
‫مشتق‪ ،‬حد و انتگرال‬
‫مثال ‪ :1‬مشتق‬
‫‪syms x‬‬
‫)‪f = sin(x‬‬
‫)‪diff(f,x‬‬
‫محاسبه حد‬
‫‪syms x‬‬
‫تابع مورد نظر = ‪f‬‬
‫= )‪limit(f,x,a‬‬
‫‪115‬‬
‫مشتق‪ ،‬حد و انتگرال‬
‫مثال ‪:2‬‬
‫‪syms x‬‬
‫‪f = (1+1/x)^x‬‬
‫)‪limit(f,x,inf‬‬
‫محاسبه انتگرال‬
‫‪syms x‬‬
‫تابع مورد نظر =‪f‬‬
‫= )‪int (f,x‬‬
‫= )‪Int(f,x,a,b‬‬
‫‪116‬‬
‫ حد و انتگرال‬،‫مشتق‬
:3 ‫مثال‬
syms x
f = sin (x)*x
int (f,x)
‫تبدیل لپالس و معکوس آن‬
:4 ‫مثال‬
F(t) = sin(t)
Syms t
F= sin (t)
Laplace(f)
117
‫چند جمله ای ها‬
‫چند جمله ای ‪ p(x) = x3 -2x -5‬را در نظر بگیرید‪ .‬برای ایجاد این چند جمله ای کافیست ضرایب آنرا بصورت مرتب بر حسب توان‬
‫های بزرگ به کوچک و از چپ به راست در یک بردار سطری وارد نمود‪:‬‬
‫‪p(x) =1x3 -0x2 -2x -5‬‬
‫]‪ P = [1 0 -2 -5‬‬
‫متغیر ‪ p‬در حقیقت یک بردار سطری معمولی است و آنچه باعث می شود به عنوان چند جمله ای شناخته شود‪ ،‬توابعی هستند که روی‬
‫این متغیر کار می کنند‪.‬‬
‫)‪ r = roots(p‬‬
‫= ‪r‬‬
‫‪2.0946‬‬
‫‪-1.0473 + 1.1359i‬‬
‫‪-1.0473 - 1.1359i‬‬
‫تابع ‪ roots‬همه ریشه های حقیقی و مختلط چند جمله ای را در یک ماتریس ستونی بر می گرداند‪.‬‬
‫تابع ‪ poly‬که آرگومان ورودی آن یک بردار ستونی است‪ ،‬ضرایب چند جمله ای را برمی گرداند‪.‬‬
‫‪-5.0000‬‬
‫‪-2.0000‬‬
‫)‪>> pp = poly(r‬‬
‫= ‪pp‬‬
‫‪1.0000‬‬
‫‪-0.0000‬‬
‫‪118‬‬
‫چند جمله ای ها‬
‫‪ ‬هرگاه آرگومان ورودی تابع‬
‫گردد‪.‬‬
‫‪ ‬ولی زمانی که تابع‬
‫ایجاد می نماید‪.‬‬
‫مثال ‪:‬‬
‫‪ poly‬یک بردار ستونی باشد‪ ،‬چند جمله ای متناظر با ریشه های موجود در آن بردار ستونی محاسبه می‬
‫‪ poly‬یک ماتریس را بعنوان آرگومان ورودی می پذیرد‪ ،‬ضرایب چند جمله ای مشخصه مربوط به آن ماتریس را‬
‫;]‪ A = [1.2 3 -0.9;5 1.75 6 ;9 0 1‬‬
‫)‪ s = poly(A‬‬
‫= ‪s‬‬
‫‪1.0000‬‬
‫‪-3.9500‬‬
‫‪-1.8500 -163.2750‬‬
‫‪ ‬چند جمله ای ‪ S‬معادل با |‪ S(λ)= |A - λI‬خواهد بود‪ .‬متغیر ‪ s‬ضرایب چند جمله ای ‪ S‬را در بر دارد‪ .‬در حقیقت‪،‬‬
‫معادله مشخصه مربوط به ماتریس ‪ A‬بصورت زیر است‪:‬‬
‫‪3.95 λ2 – 1.85 λ – 163.2750‬‬
‫)‪(s‬‬
‫‪+ 4.4321i‬‬
‫‪- 4.4321i‬‬
‫– ‪S(λ)= λ3‬‬
‫‪B = roots‬‬
‫= ‪b‬‬
‫‪7.2826‬‬
‫‪-1.6663‬‬
‫‪-1.6663‬‬
‫‪119‬‬
‫چند جمله ای ها‬
‫‪ ‬تابع ‪ polyval‬حاصل چند جمله ای را به ازای یک یا چند مقدار خاص ‪ x‬محاسبه مینماید‪.‬‬
‫]‪ P = [1 0 -2 -5‬‬
‫)‪ Pm = polyval (P, 5‬‬
‫‪Pm = (5)3 -2(5) -5 = 110‬‬
‫‪ ‬تابع ‪ polyvalm‬چند جمله ای ماتریس ی را ارزیابی می کند‪ .‬آرگومان ورودی این تابع بایستی یک ماتریس‬
‫مربعی باشد تا توان برای آن تعریف شود‪.‬‬
‫‪P(x)= x3 -2x -5‬‬
‫‪‬‬
‫]‪P = [1 0 -2 -5‬‬
‫‪‬‬
‫;]‪X = [2 4 5;-1 0 3; 7 1 5‬‬
‫‪‬‬
‫)‪Y = polyvalm (P,X‬‬
‫‪‬‬
‫= ‪y‬‬
‫‪439‬‬
‫‪179‬‬
‫‪377‬‬
‫‪136‬‬
‫‪81‬‬
‫‪111‬‬
‫‪639‬‬
‫‪253‬‬
‫‪490‬‬
‫‪120‬‬
‫چند جمله ای ها‬
‫‪ ‬تابع ‪ conv‬ضرب بین دو چند جمله ای را انجام میدهد و خروجی را بصورت یک بردار سطری شامل ضرایب چند‬
‫جمله ای حاصلضرب بر میگرداند‪.‬‬
‫;]‪ a = [1 2 3‬‬
‫;]‪ b = [4 5 6‬‬
‫)‪ c = conv(a,b‬‬
‫= ‪c‬‬
‫‪4‬‬
‫‪13‬‬
‫‪28‬‬
‫‪27‬‬
‫‪18‬‬
‫‪C = (x2+2x+3)(4x2+5x+6)=4x4+13x3+28x2+27x+18‬‬
‫‪ ‬تابع ‪ deconv‬دو چند جمله ای را بر هم تقسیم می کند‬
‫)‪ [q,r] = deconv (c,a‬‬
‫= ‪q‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫= ‪r‬‬
‫‪0‬‬
‫‪0‬‬
‫‪121‬‬
‫چند جمله ای ها‬
‫ میتوان از یک چند جمله ای مشتق گرفت‬polyder ‫ با تابع‬
 polyder(p)
ans =
3
0
-2
(x3-2x-5)=3x2-2
 a = [1 3 5];
 b = [2 4 6];
 c = polyder(a,b)
c =
8
30
56
38
 [q,d] = polyder(a,b)
q =
-2
d =
4
122
-8
-2
16
40
48
36
‫چند جمله ای ها‬
‫ انتگرال چند جمله ای ها‬
 polyint(a)
ans =
0.3333 1.5000 5.0000
0
 polyint(a,4)
ans =
0.3333 1.5000 5.0000 4.0000
‫ بسط کسرهای جزیی‬
 b = [-4 8]; a = [1 6 8];
 [r,p,k] = residue(b,a)
r=
-12
8
123
p=
-4
-2
k=
[]
‫چند جمله ای ها‬
‫‪ ‬از تابع ‪ polyfit‬میتوان برای تقریب زدن مجموعه ای از نقاط در صفحه ‪ x ,y‬با یک منحنی چند جمله ای از درجه‬
‫‪ n‬استفاده نمود‪.‬‬
‫)‪ P = polyfit (x,y,n‬‬
‫; ]‪ X = [1 2 3 4 5‬‬
‫]‪ Y = [5.5 43.1 128 290.7 498.4‬‬
‫=‪P‬‬
‫)‪ P = Polyfit (X,Y,3‬‬
‫‪-0.1917 31.5821 -60.3262 35.3400‬‬
‫‪124‬‬
‫چند تمرین مهم‬
‫( رسم کره‬1
r=input('please input radius :')
% -pi <= theta <= pi is a row vector.
% -pi/2 <= phi <= pi/2 is a column vector.
theta = -pi:pi/10:pi;
phi = (-pi/2:pi/20:pi/2)';
x = r*cos(phi)*cos(theta);
y = r*cos(phi)*sin(theta);
z = r*sin(phi)*ones(1,21);
surf(x,y,z)
axis equal
.‫ تابعی بنویسید که عددی را از ورودی دریافت کند و کره ای با آن شعاع رسم نماید‬: ‫تمرین‬
125
‫مرتب سازی یک ماتریس سطری‬
function out=sort1(in)
l=length(in);
for i=1:l
[n,c] = min (in)
out(i)=n;
in(:,c)=[];
end
126
‫مرتب سازی یک ماتریس دو بعدی‬
127
function out=sortm(in)
[r,c]=size(in); k=1;
while k <= r*c
for i=1:r
for j=1:c
m(k)=in(i,j); k=k+1;
end
end
end
out1=sort1(m); n=1;
while n<= r*c
for i=1:r
for j=1:c
s(i,j)=out1(n);
n=n+1;
end
end
end
out=s;
‫دترمینان‬
function [out] = determinant(in)
[rows,cols] = size(in);
if (rows == 1) && (cols == 1)
out = in;
else
det = 0;
for i=1:rows
temp_mat = in;
%remove first row
temp_mat(1,:) = [];
% remove i-th column
temp_mat(:,i) = [];
det = det + (-1)^(i-1) * in(1, i) * determinant(temp_mat);
end
out = det;
end
128
2*2 ‫وارون یک ماتریس‬
clc ; clear all
disp (' this program is for calculating the invert matrix of a 2*2d matrix ');
[r c]=size(a);
if r==2 && c==2
det1=a(1,1)*a(2,2) - a(1,2)*a(2,1);
b(1,1) = a(2,2);
b(1,2) =-a(1,2);
b(2,1) =-a(2,1);
b(2,2) =a(1,1);
varon=(1/det1)*b;
%disp('a^-1=');
disp(varon);
else
disp('error! check the entered matrix.');
end
129
3*3 ‫وارون یک ماتریس‬
function out = varonm(in)
d=det(in);
if d~= 0
for i=1:3
for j=1:3
temp=in;
temp(i,:)=[];
temp(:,j)=[];
out1(i,j)=(-1)^(i+j)*det(temp);
end
end
out=out1'/d;
else
return;
end
130