270 likes | 509 Views
ادامهی کار با ماتریسها در MATLAB. دانشگاه آزاد اسلامی نجف اباد مهر ماه 1388. www.eng2007ali.blogfa.com. مهندس علیرضا ورپشتی – دانشجوی کارشناسی ارشد مهندسی مکانیک ساخت و تولید. مثال. با یک مثال درس این هفته را شروع می کنیم: >> x=0:.5:2*pi; >> y=sin(x) y = Columns 1 through 7
E N D
ادامهی کار با ماتریسهادر MATLAB دانشگاه آزاد اسلامی نجف اباد مهر ماه 1388 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشجوی کارشناسی ارشد مهندسی مکانیک ساخت و تولید مهندس علیرضا ورپشتی
مثال • با یک مثال درس این هفته را شروع می کنیم: >> x=0:.5:2*pi; >> y=sin(x) y = Columns 1 through 7 0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411 Columns 8 through 13 -0.3508 -0.7568 -0.9775 -0.9589 -0.7055 -0.2794 >> z=tanh(x) z = Columns 1 through 7 0 0.4621 0.7616 0.9051 0.9640 0.9866 0.9951 Columns 8 through 13 0.9982 0.9993 0.9998 0.9999 1.0000 1.0000 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
گرد کردن اعداد در MATLAB برای گرد کردن اعداد روش های مختلفی وجود دارد که تمام این روش ها را می توان در MATLAB یافت: • دستور fix برای گرد کردن به طرف صفر بکار می رود. • دستور floor برای گرد کردن به طرف منفی بینهایت بکار می رود. • دستور ceil برای گرد کردن به طرف مثبت بینهایت بکار می رود. • دستور round برای گرد کردن به طرف نزدیکترین عدد صحیح بکار می رود. مثال: >> A=fix(20*rand(3,4)) A = 19 2 15 0 9 8 19 16 16 18 13 18 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
اندازه ی ماتریس ها • در MATLAB دستوراتی وجود دارد که به وسیله ی آنها می توان اطلاعاتی در مورد یک ماتریس از قبیل تعداد سطر، ستون و تعداد کل عناصر آن را بدست آورد: >> A=[1 2 3;4 5 6]; • دستور size: این دستور همانطور که از اسم آن مشخص است اندازه (تعداد سطر و ستون) ماتریس را نشان می دهد. >> size(A) ans = 2 3 در دستوراتی مانند دستور فوق که 2 خروجی یا بیشتر دارند می توان هر خروجی را در یک متغیر ذخیره کرد. برای این کار به صورت زیر عمل می کنیم: >> [s t]=size(A) s = 2 t = 3 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
دستور numel: این دستور تعداد عناصر ماتریس (number of elements) را نشان می دهد: >> numel(A) ans = 6 • دستور diag: این دستور عناصر قطر اصلی ماتریس را به ما نشان می دهد: >> diag(A) ans = 1 5 نکته: دستور diag کاربردهای دیگری نیز دارد. به عنوان مثال اگر به صورت diag(A,n) بکار رود قطر nام ماتریس n را به ما می دهد. اگر A یک بردار و یا یک ماتریس سطری باشد، آنگاه دستور diag(A) ماتریسی ایجاد می کند که قطر اصلی آن بردار A و سایر عناصر آن صفر می باشد. به عنوان مثال: >> C=[3 6 8]; >> diag(C) ans = 3 0 0 0 6 0 0 0 8 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
دستور trace: این دستور مجموع عناصر قطر اصلی را به ما نشان می دهد: >> trace(A) ans = 6 • دستور minfo: این دستور نیز اطلاعاتی در رابطه با ماتریس به ما می دهد: >> minfo(A) 2 rows 3 cols: regular MATLAB matrix www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
ایجاد تغییر در ماتریس ها • MATLAB با اختصاص یک اندیس به هر عضو ماتریس راه های زیادی را برای ایجاد تغییر در درایه های ماتریس ها فراهم کرده است: >> B=[1 2 3;4 5 6;7 8 9]; >> B(3,3)=0 B = 1 2 3 4 5 6 7 8 0 >> B(7)=0 B = 1 2 0 4 5 6 7 8 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
همانطور که در اسلاید قبل دیدید برای دسترسی به عناصر ماتریس ها دو راه وجود دارد؛ راه اول با 2 آرگومان ورودی که سطر و ستون را مشخص می کنند و راه دیگر استفاده از یک آرگومان است که در این صورت اندیس هر درایه به صورت زیر (ماتریس S) تعیین می شود: S = 1 4 7 2 5 8 3 6 9 مثال: >> B(4)=0 B = 1 0 0 4 5 6 7 8 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
با دستور B(:,n)=m می توان تمام درایه های ستون nام ماتریس B را برابر m قرار داد: >> B(:,1)=0 B = 0 0 0 0 5 6 0 8 0 • برای حذف کردن یک سطر یا ستون آن سطر یا ستون را برابر [] (تهی) قرار می دهیم: >> B(1,:)=[] B = 0 5 6 0 8 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
تغييراتی که در ماتريس ها می توان ايجاد کرد تنها به تغيير عناصر آن محدود نمی شود بلكه می توان ابعاد، ترتيب و جای درايه ها را نیز تغيير داد: >> A=[1 2 3;4 5 6;7 8 9]; • با دستور flipud می توان ماتریس را از بالا به پایین چرخاند: >> flipud(A) ans = 7 8 9 4 5 6 1 2 3 • و با دستور fliplr می توان ماتریس را از چپ به راست چرخاند: >> fliplr(A) ans = 3 2 1 6 5 4 9 8 7 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
با دستور rot90 می توان ماتریس را 90 درجه در خلاف حرکت عقربه های ساعت چرخاند: >> rot90(A) ans = 3 6 9 2 5 8 1 4 7 نکته: اگر از این دستور به صورت rot90(A,n) استفاده شود n تعداد چرخش را مشخص می کند. • با دستور tril می توان ماتریس بالا مثلثی و با دستور triu می توان ماتریس پایین مثلثی تولید کرد: >> tril(A) A = 1 0 0 4 5 0 7 8 9 >> triu(A) A = 1 2 3 0 5 6 0 0 9 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
برای الحاق سطری و یا ستونی ماتریس ها می توان به ترتیب از دستورات horzcat و vertcat استفاده کرد: >> B=[9 8 7;6 5 4;3 2 1]; >> C=horzcat(A,B) C = 1 2 3 9 8 7 4 5 6 6 5 4 7 8 9 3 2 1 >> D=vertcat(A,B) D = 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
اگر بخواهیم ابعاد یک ماتریس را تغییر بدهیم می توانیم از دستور reshape استفاده کنیم. البته باید تعداد المنت ها قبل و بعد از تفییر با هم برابر باشند: >> reshape(C,2,9) ans = 1 7 5 3 9 6 8 2 4 4 2 8 6 9 3 5 7 1 • اگر بخواهیم با تکرار یک ماتریس، ماتریسی با ابعاد جدید ایجاد کنیم از دستور repmat استفاده می کنیم؛ بدین ترتیب که با اجرای دستور repmat(A,m,n) برنامه ماتریس A را به عنوان یک المنت در نظر گرفته و mxn بار تکرار می کند: >> repmat(ans(:,1),2,4) ans = 1 1 1 1 4 4 4 4 1 1 1 1 4 4 4 4 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
جستجو در ماتریس ها در MATLAB دستورات زیادی برای جستجو در ماتریس ها، پیدا کردن عناصر خاص و ... وجود دارد. در ادامه به برخی ار آنها اشاره می شود: >> A=[0 1 0;2 0 3;1 3 4]; • دستور nnz برای نشان دادن تعداد درایه های غیر صفر بکار می رود: >> nnz(A) ans = 6 • دستور find برای نشان دادن اندیس مربوط به درایه های غیر صفر بکار می رود: >> find(A) ans = 2 3 4 6 8 9 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
دستور nonzeros برای نشان دادن درایه های غیر صفر بکار می رود: >> nonzeros(A) ans = 2 1 1 3 3 4 • دستور isempty در صورتی که ماتریس ما یک ماتریس تهی باشد مقدار یک و در غیر این صورت مقدار صفر را نشان می دهد: >> isempty(A) ans = 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
>> B=[9 3 0 8]; • دستور ismember(A,B) در صورتی که اعضای ماتریس B(که B می تواند یک عدد هم باشد) در ماتریس نیز A باشند، مقدار یک و در غیر این صورت مقدار صفر را به ما نشان می دهد: >> ismember(B,A) ans = 0 1 1 0 • دستور unique برداری ستونی شامل عناصر غیر تکراری ماتریس مورد نظر را به ترتیب صعودی مرتب می کند و به ما نشان می دهد: >> unique(A) ans = 0 1 2 3 4 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
کاربرد MATLAB در داده های آماری MATLAB دستورات فراوانی برای کار کردن روی داده ها و انجام دادن کارهای آماری دارد. در ادامه به مهمترین آنها اشاره می شود: >> A=fix(20*rand(3,4)) A = 19 9 9 8 4 17 0 12 12 15 16 15 >> B=fix(45*rand(3,4)) B = 41 18 18 15 33 42 40 36 7 41 2 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
یکی از پرکاربردترین دستورات، دو دستور min و max است که به ترتیب مینیمم و ماکزیمم هر ستون را به ما نشان می دهند. >> min(A) ans = 4 9 0 8 >> [s,t]=max(A) s = 19 17 16 15 t = 1 2 3 3 نکته (1): همانطور که در بالا میبینید در صورتی که دو خروجی بخواهیم، خروجی دوم مکان درایه ی مینیمم با ماکزیمم را نشان می دهد. نکته (2): در صورتی که ماتریس یک بردار سطری باشد، پیدا کردن مینیمم و یا ماکزیمم روی سطر انجام می شود. نکته (3): در صورتی که این دستورات به صورت max(A,B) به کار رود؛ که B ماتریسی با ابعاد ماتریس A و یا یک عدد باشد؛ آنگاه MATLAB به ما یک ماتریس با درایه های بزرگتر بین A و B نشان می دهد: >> max(A,B) ans = 41 18 18 15 33 42 40 36 12 41 16 15 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
برای بدست آوردن میانگین هر سطر و یا هر ستون از دستور mean استفاده می شود به این صورت که mean(A,1) به ما میانگین ستون ها و mean(A,2) به ما میانگین سطرها را نشان می دهد: >> mean(A,1) ans = 11.6667 13.6667 8.3333 11.6667 >> mean(A,2) ans = 11.2500 8.2500 14.5000 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
برای بدست آوردن مجموع هر سطر با ستون از sum استفاده می کنیم: >> sum(B,1) ans = 81 101 60 51 >> sum(B,2) ans = 92 151 50 • برای بدست آوردن مجموع هر درایه با درایه های قبل از آن ار دستور cumsum استفاده می کنیم. عملکرد این دستور مشابه سیگما در ریاضی است: >> cumsum(B) ans = 41 18 18 15 74 60 58 51 81 101 60 51 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
برای بدست آوردن حاصلضرب درایه های هر ستون یا سطر در یکدیگر از دستور prod استفاده می کنیم: >> prod(B,1) ans = 9471 30996 1440 0 >> prod(B,2) ans = 199260 1995840 0 • برای بدست آوردن حاصبضرب هر درایه در درایه های ماقبل خود از دستور cumprod استفاده می شود. از این دستور می توان در شبیه سازی فاکتوریل استفاده کرد: >> cumprod(B) ans = 41 18 18 15 1353 756 720 540 9471 30996 1440 0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
یکی از دستوراتی که برای مقایسه دو ماتریس بکار می رود دستور isequal است که در صورتی که دو ماتریس برابر باشند عدد یک و در غیر این صورت عدد صفر را به ما نشان می دهد: >> isequal(A,B) ans = 0 >> C=[1 2 3;4 5 6]; >> D=[1,2,3;4,5,6]; >> isequal(C,D) ans = 1 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
ماتریس به عنوان مجموعه یکی دیگر از کاربردهای گسترده ی ماتریس ها در نظر گرفتن آنها به عنوان یک مجموعه می باشد: >> A=randperm(8) A = 4 3 2 6 8 1 5 7 >> B=2:2:8 B = 2 4 6 8 • برای محاسبه ی اجتماع مجموعه ها از دستور union استفاده می شود: >> union(A,B) ans = 1 2 3 4 5 6 7 8 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
برای محاسبه ی اشتراک مجموعه ها از دستور intersect استفاده می شود: >> intersect(A,B) ans = 2 4 6 8 • برای بدست آوردن اعضایی که فقط در A و یا در B هستند یعنی بدست آوردن اجتماع منهای اشتراک از دستور setxor استفاده می شود: >> setxor(A,B) ans = 1 3 5 7 • برای بدست آوردن اعضایی از A که در B نیستند و یا برعکس از دستور setdiff استفاده می شود: >> setdiff(A,B) ans = 1 3 5 7 >> setdiff(B,A) ans = Empty matrix: 1-by-0 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
معکوس، دترمینان و ترانهاده ییک ماتریس • در زیر به ترتیب معکوس، دترمینان و ترانهاده ی ماتریس A محاسبه شده است: >> A={2 3 -4;0 -4 2;1 -1 5]; >> inv(A) ans = 0.3913 0.2391 0.2174 -0.0435 -0.3043 0.0870 -0.0870 -0.1087 0.1739 >> det(A) ans = -46 >> A’ ans = 2 0 1 3 -4 -1 -4 2 5 www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
www.eng2007ali.blogfa.com مهندس علیرضا ورپشتی – دانشگاه ازاد اسلامی واحد نجف اباد
دستور length را برای چند ماتریس دلخواه اجرا کنید و با توجه به مباحث اندازه ی ماتریس ها، نتیجه گیری کنید که این دستور چه کاری برای شما انجام می دهد. • جدول کسینوس زوایای بین +360 و -360 درجه را تولید و نمایش دهید. • با استفاده از دستوراتی که یاد گرفته اید یک ماتریس تصادفی 6x4 با درایه های صحیح تعریف کنید. خسته نباشید.. www.eng2007ali.blogfa.com