برنامه نویسی به زبان 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