Matlab نرم افزاری است که براساس مجموعه ای اصول عملیاتی که بر ماتریس ها عمل می کند بنا نهاده شده است.Matlab بر گرفته از آزمایشگاه ماتریس است .زبانی بسیار قدرتمند جهت پردازش داده ها است که امروزه بسیاریاز رشته های مهندسی را کنترل کرده و کار مهندسان را تا نوشتن چند برنامه ساده آسان نموده است.محاسباتی که تصور حل کردن آنها با استفاده از روشهای سنتی لرزه بر اندام هر مهندسی می اندازدتوسط Matlab کاملا انعطاف پذیر ، و آسان حل می شوند.
از دیگر خصوصیات Matlab اینست که می تواند تابع ها و روتین های نوشته شده در زبانهای دیگر مثل C++ و Java را قبول و به کمک آنها مسائل را حل کند.این خصوصیت قدرت پردازش و طرفداران آن را نیز چند برابر کرده است.
امروزه شرکت ها و گروههای نرم افزاری زیادی سعی دارند تا برنامه های اضافی را برای رشته های بخصوصی مانندمهندسی کنترل ، مهندسی قدرت ،...
به محیط مطلب اضافه کنند این برنامه ها اصطلاحا Toolbox یا جعبه ابزار نامیده می شوند .
در این سری مقالات سعی می کنیم تا به صورت خودآموز مطالب راارائه دهیم و بیشتر مطالبی را ارائه دهیم که برای یک دانشجوی مهندسی برق دارای کاربرد باشد.و بتواند به فهم مساله علاوه بر حل آن بیفزاید در این صورت است که لذت حل مساله دو چندان می شود
MATLAB چیست؟
رایانه شما را به یک آزمایشگاه تبدیل می کند .
مخفف کلمات MATRIX LABORATORY است یعنی آزمایشگاه ماتریس ها.
تمام مساءل را با علایم آشنای ریاضی بیان می کند
قابلیت ها:
1)ریاضیات و محاسبات
2)ایجاد الگوریتم
3)مدل سازی
4)تجزیه تحلیل اطلاعات
5)شناسایی و تصویر سازی
6)رسم فنی و مهندسی
7)GUI ----------->graphical user interface
MATLABایجاد ماتریس در
در این درس شما دوستان را با ایجاد ماتریس در مطلب آشنا می کنیم.
: MATLABایجاد یک ماتریس در
فقط کافیست عناصر ماتریس را داخل کروشه گذاشتهMATLABبرای ایجاد یک ماتریس در
و برای ایجاد ستون در ماتریس درایه ها را با سمیکالن از هم جدا می کنیم:
>> A=[1 2 3]
A =
1 2 3
>> B=[5 12 14;12 9 65;171 65 36]
B =
5 12 14
12 9 65
171 65 36
برای ایجاد ترانهاده ماتریس بایستی از کوتیشن استفاده کنید:
به مثال زیر توجه کنید:
>> A=[4 5 6]
A =
4 5 6
>> A'
ans =
4
5
6
جمع ماتریس ها:
جمع دو ماتریس با درایه های برابر به راحتی با علامت جمع قابل استفاده است :
>> A=[1 2 3];
>> B=[4 5 6];
>> C=A+B
C =
5 7 9
ضرب ماتریس ها:
ضرب در ماتریس ها به راحتی جمع آنهاست ولی حتما از ضرب پذیری آنها اطمینان داشته باشید:
>> A=[1 2 3];
>> B=[5;6;3];
>> C=A*B
C =
26
نکته مهم :اگر قرار باشد تک تک عناصر دو ماتریس را در هم ضرب یا بر هم تقسیم کنیم از یک علامت نقطه قبل از عملگر بهره می بریم
نکته مهم :اگر قرار باشد تک تک عناصر دو ماتریس را در هم ضرب یا بر هم تقسیم کنیم از یک علامت نقطه قبل از عملگر بهره می بریم: >> A=[1 2 3;4 5 6;7 8 9]; >> B=[3 2 1;6 5 4;9 8 7]; >> C=A.*B C = 3 4 3 24 25 24 63 64 63 آشنا می کنم:MATLABدر ادمه شما را با چند ماتریس پیش ساخته در ماتریس صفر: می توان ماتریس با تمام درایه های صفر ایجاد کرد.zeros(n)با استفاده از تابع به مثال توجه کنید : >> A=zeros(3) A = 0 0 0 0 0 0 0 0 0 >> B=zeros(2,3) B = 0 0 0 0 0 0 ماتریس همانی: ماتریس همانی ایجاد کنید:eye(n)با استفاده از تابع >> A=eye(3) A = 1 0 0 0 1 0 0 0 1 >> A=eye(2,3) A = 1 0 0 0 1 0 ما تریس یک: ماتریس با تمام اعضای یک ایجاد کنید:ones(n)با استفاده از تابع >> A=ones(3) A = 1 1 1 1 1 1 1 1 1 >> B=ones(2,3) B = 1 1 1 1 1 1 برای دسترسی به یک عضو ماتریس می توان با اندیس به آن دسترسی داشت: >> A=[1 2 3;4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B=A(2,3) B = 6 >> C=A(1,1) C = 1 می توان هر عضو ماتریس را به راحتی تغییر داد برای مثال در ماتریس بالا سطر دوم و ستون اول را به 10 تغییر می دهیم.
>> A(2,1)=10 A = 1 2 3 10 5 6 7 8 9 ایجاد بردار: با علامت کولن می توان به راحتی بردار ایجاد کرد: بردار=ابتدای بردار:گام حرکت:انتهای بردار >> i=1:2:10 i = 1 3 5 7 9 اگر گام حرکت را مشخص نکنید به صورت پیش فرض مقدار یک را خواهد داشت: >> j=-3:3 j = -3 -2 -1 0 1 2 3 در اینجا نیز ترانهاده را می توان به راحتی ایجاد کرد: >> u=(1:3)' u = 1 2 3 انتخاب سطر ها و ستون ها: از دو نقطه به راحتی می توان برای انتخاب سطر یا ستون بهره برد: انتخاب ستون: >> s=[10 15 26;54 36 65;98 32 98] s = 10 15 26 54 36 65 98 32 98 >> s(:,1) ans = 10 54 98 انتخاب سطر: >> s(1,:) ans = 10 15 26 انتخاب سطر و ستون خاص: >> s(1:2,2:3) ans = 15 26 36 65 :sumتا بع این تابع جمع ستون ها را می دهد: داریم:sبرای ماتریس >> sum(s) ans = 162 83 189 :repmatتابع برای تولید یک ماتریس که کلیه سطر ها و ستون های آن تکراری است بکار می رود: سطر ها را دو بار و ستون ها را سه بار تکرار می کنیم: >> B=[1 2 3 4] B = 1 2 3 4 >> BB=repmat(B,3,2) BB = 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 حذف عناصر از ماتریس فرض کنید می خواهیم یک عضو از یک بردار و یا ماتریس را حذف کنیم:در این صورت از علامت کروشه باز و بسته استفاده می کنیم.
مثال: >> a=1:2:10 a = 1 3 5 7 9 >> a(3)=[] a = 1 3 7 9 باید توجه داشته باشید که در صورتی که که یک عنصر را حذف می کنید آن ماتریس قابل ایجاد باشد و گرنه با خطا مواجه خواهید شد.
>> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 7 8 9 >> a(2,2)=[] ???
Indexed empty matrix assignment is not allowed.
تغییر شکل ماتریس ها: :reshapeدستور می توان ماتریس دیگری ایجاد کنیم که تعداد سطر و ستون آن را مشخص کرده ایم:reshapeبا دستور >> a=[1 2 3;4 5 6;7 8 9;10 11 12] a = 1 2 3 4 5 6 7 8 9 10 11 12 >> b=reshape(a,2,6) b = 1 7 2 8 3 9 4 10 5 11 6 12 >> b=reshape(a,1,12) b = 1 4 7 10 2 5 8 11 3 6 9 12 و یا داریم >> w=1:6; >> z=reshape(w,2,3) z = 1 3 5 2 4 6 ماتریس های خاص: :magic(n)تابع n(n^2+1)ی ایجاد می کند بطوری که مجموع سطر ها و ستون های ماتریس مساوی و برابر n ماتریس مرتبه است: >> magic(3) ans = 8 1 6 3 5 7 4 9 2 :pascal(n)تابع جدول پاسکال راتولید می کند: >> pascal(4) ans = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 :hilb(n)تابع را ایجاد می کند:nماتریس هیلبرت مرتبه >> hilb(4) ans = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 ماتریس بالا و پایین مثلثی: :trilتابع با استفاده از تابع بالا می توان ماتریس پایین مثلثی ایجاد کرد: >> a=[1 2 3;4 5 6;7 8 9;10 11 12] a = 1 2 3 4 5 6 7 8 9 10 11 12 >> tril(a) ans = 1 0 0 4 5 0 7 8 9 10 11 12 :triuتا بع با استفاده از تابع بالا می توان ماتریس بالا مثلثی ایجاد کرد: >> triu(a) ans = 1 2 3 0 5 6 0 0 9 0 0 0 :rand(n)تابع برای ایجاد مقادیر تصادفی بین صفر و یک بکار می رود: >> rand(3) ans = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 >> rand(2,3) ans = 0.4447 0.7919 0.7382 0.6154 0.9218 0.1763 MATLABاعداد مختلط در اعداد مختلط رادر matlab به راحتی می توان ایجاد کرد.برای این کار کافیست ازj وi استفاده کرد به مثال زیر توجه کنید: >> a=1+2j a = 1.0000 + 2.0000i >> b=2-3i b = 2.0000 - 3.0000i می بینید که به به راحتی می توان عدد مختلط ساخت توجه کنید که1+j2 درست نیست مگر اینکه از علامت * استفاده کنیم.
>> 1+i2 ???
Undefined function or variable 'i2'.
>> 1+i*2 ans = 1+ 2.0000i چند تابع برای کار با اعداد مختلط: :absتابع این تابع برای بدست آوردن اندازه در اعداد مختلط بکار می رود: >> a=1+2j a = 1.0000 + 2.0000i >> abs(a) ans = 2.2361 :angleتابع اندازه عدد مختلط را بر حسب رادیان می دهد: >> a=1+2j; >> angle(a) ans = 1.1071 :conjتابع مزدوج مختلط را محاسبه می کند: >> conj(a) ans = 1.0000 - 2.0000i :imagتابع قسمت موهومی عدد مختلط را می دهد: 1.0000 - 2.0000i >> imag(a) ans = 2 :realتابع قسمت حقیقی عدد مختلط را می دهد: >> real(a) ans = 1 :isrealتابع اگر متغیر حقیقی باشد عدد یک و اگر موهومی باشد صفر را بر می گرداند: >> a=1+2j; >> b=6; >> isreal(a) ans = 0 >> isreal(b) ans = 1 :complexتابع یک عدد مختلط ایجاد می کند: >> complex(5,10) ans = 5.0000 +10.0000i عدد اول در پرانتز قسمت حقیقی و عدد دوم قسمت موهومی است.
matlabچند جمله ایها در ایجاد چند جمله ای : فرض کنید می خواهیم چند جمله ای زیر را در مطلب ایجاد کنیم: x4-12x3+25x+116 برای شناساندن این چند جمله ای به مطلب کافیست یک بردار از ضرایب این چند جمله ای در مطلب تشکیل دهیم .
p=[1 -12 0 25 116]; بهره ببرید:rootاگر بخواهید ریشه های این چند جمله ای را در مطلب بدست آورید کافیست از دستور :rootدستور در زیر با استفاده ازاین دستور ریشه های چند جملهای را بدست آورده ایم: >> r=roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i همانطور که می بینید دو تا از ریشه ها مختلط هستند.
فرض کنید می خواهیم چند جمله ای های زیر را ضرب کنیم: x3+2x2+3x+4 x3+4x2+9x+16 :convدستور این دستوررا برای ضرب چند جمله ای ها استفاده می کنیم: نتایج را در زیر مشاهده می کنیم: >> a=[1 2 3 4]; >> b=[1 4 9 16]; >> c=conv(a,b) c = 1 6 20 50 75 84 64 :deconvدستور از این دستور برای تقسیم چند جمله ای ها استفاده می کنیم: را بر هم تقسیم می کنیمb وa >> [q,r]=deconv(a,b) q = 1 r = 0 -2 -6 -12 به ترتیب خارج قسمت و باقیمانده هستند.r و qدر بالا نکته:استفاده از عدد صفر را هرگز از یاد نبرید اگر ضریبی از یک توان خاص وجود نداشت باید حتما از عدد صفر استفاده کنید.
: polyderدستور از این دستور برای مشتق گیری از چند جمله ایها استفاده می کنیم: ضرایب یک چند جمله ایست: با استفاده از این دستور به راحتی مشتق گیری می کنیم:aفرض کنید >> a=[1 5 18 24 39 7]; >> s=polyder(a) s = 5 20 54 48 39 :polyintدستور از این دستور برای انتگرالگیری در چند جمله ایها استفاده می کنیم: انتگرال چند جمله ای بالا را محاسبه می کنیم: .
>> a=[1 5 18 24 39 7]; >> i=polyint(a) i = Columns 1 through 5 0.1667 1.0000 4.5000 8.0000 19.5000 Columns 6 through 7 7.0000 0 matlabآرایه های اسپارس در دارند؟matlab آیا می دانید آرایه اسپارس چیست ؟و چه فایده ای در آرایه های اسپارس در حقیقت آرایه هایی هستند که باعث کاهش دادن حجم آرایه ها با عدم در نظر گرفتن مقادیر با مقدار صفر بوجود می آیند .
به مثال زیر توجه کنید : به وجود می آید .حال فرض کنید ماتریس زیر را ایجاد کرده ایم:eye همانطور که در مبحث ماتریس ها گفتیم یک ماتریس همانی با دستور >> a=eye(10) a = 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 آرایه matlabهمانطور که می بینیم این ماتریس از 90 عنصر صفر تشکیل شده است و فقط 10 عنصر غیر صفر دارد .در اینجا های اسپارس را تعریف می کند .ماتریس بالا را به صورت اسپارس تعریف می کنیم : :sparseدستور با استفاده از این دستور یک آرایه اسپارس را بوجود می آوریم: >> b=sparse(a) b= (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 (6,6) 1 (7,7) 1 (8,8) 1 (9,9) 1 (10,10) 1 همانطور که می بینیم مطلب یک آرایه اسپارس به وجود آورد به این صورت که از از آرایه های صفر صرف نظر کرد .و سطر و ستون و مقدار آن را ذکر کرد.اما فکر می کنید بیان کردن به این شکل چه فایده و تفاوتی دارد ؟یکی از فواید به این صورت کم کردن مقدارحافظه و این امر را مشاهد می کنیم.whosفضای مورد نیاز است با دستور >> whos Name Size Bytes Class a 10x10 800 double array ans 10x10 164 double array (sparse) b 10x10 164 double array (sparse) Grand total is 120 elements using 1128 bytes که اسپارس بود 164 بایت حافظه اشغال شد.
b که غیر اسپارس بود 800 بایت فضا اشغال شد در صورتی که در آرایه a در آرایه در زیر به چند تابع اسپارس اشره می کنیم : :speyeدستور در بالا:b این دستور آرایه اسپارس همانی ایجاد می کند یعنی یه چیزی مثل ماتریس >> a=speye(4) a = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 :fullدستور این دستور یک ماتریس اسپارس را به فرم غیر اسپارس در می آورد: >> b=full(a) b = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 :findدستور مختصات و مقادیر عناصر غیر صفر ماتریس را پیدا می کند.
>> a=eye(10); >> find(a) ans = 1 12 23 34 45 56 67 78 89 100 >> a=speye(4) a = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 >> find(a) ans = 1 6 11 16 :nnzدستور تعداد عناصر غیر صفر ماتریس را می دهد: >> a=speye(4); >> nnz(a) ans = 4 :nonzeros دستور یک بردار ستونی شامل عناصر غیر صفر می دهد.
>> a=speye(4); >> a(2,1)=5; >> b=nonzeros(a) b = 1 5 1 1 1 :sponesدستور عناصر غیر صفر ماتریس اسپارس را با یک جایگزین می کند.
>> a=speye(4); >> a(2,1)=5; >> a(2,2)=14; >> a a = (1,1) 1 (2,1) 5 (2,2) 14 (3,3) 1 (4,4) 1 >> d=spones(a) d = (1,1) 1 (2,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 :spyدستور شکل پراکندگی ماتریس اسپارس را به صورت یک نمودار به تصویر می کشد.
برلی ماتریس بالا داریم.
spy(d)