آموزش برنامه نویسی متلب
موضوع:آرایه ها در برنامه نویسی متلب
جلسه: ششم
مدرس : مدرسین جاواپرو
متلب را ساده،آسان و شیرین بنوشید!!!
در جلسه اول گفتیم که MATLAB به معنای آزمایشگاه ماتریس است و همه چیز را میتوان به گونه ای ماتریس درنظرگرفت. با توجه به مطالب گفته شده در جلسه قبل میتوان گفت که همه چیز یعنی متغیرها. در این جلسه به موضوع آرایه ها و ماتریس ها میپردازیم.
یک آرایه را میتوان یک ماتریس سطری یا ستونی تعریف کرد. بنابراین ابتدا برای راحتی با آرایه ها شروع به کار میکنیم.
یک آرایه سطری را به شکل زیر تعریف میکنیم:
>>a = [1 2 3] a = 1 2 3 آرایه ستونی: >>a = [1;2;3] a = 1 2 3 |
عملیات ریاضی و منطقی را برای دو آرایه نیز میتوان به کار برد. در این حالت این عملیات به طور نظیربه نظیر بین درایه های دو آرایه اعمال میشود. به مثال های زیر توجه کنید:
>>a = [1 2 3]; b = [-1 0 2]; >>a + b ans = 0 2 5 >>a - b ans = 2 2 1 >>a*b Error using * Inner matrix dimensions must agree. |
از آنجایی که آرایه ها نیز نوعی ماتریس هستند و ضرب ماتریس ها فقط به شرط برابر بودن تعداد ستون های ماتریس دوم و سطرهای ماتریس اول تعریف میشوند، با به کارگیری دستور فوق با پیغام خطا مواجه میشویم. چنانچه قصد ضرب یا تقسیم درایه به درایه داشته باشیم، بدین شکل عمل میکنیم:
>>a.*b ans = -1 0 6 >>a./b ans = -1.0000 Inf 1.5000 |
دقت کنیم که در این حالت طول آرایه ها باید برابر باشند، مثلا نمیتوان یک آرایه سطری را با یک آرایه ستونی جمع نمود:
>>[1 2 3] + [1;2;3] Error using + Matrix dimensions must agree |
برای تعریف آرایه ها با طول بیشتر میتوان از “:” استفاده کرد:
start:step:end که در این جا start مقدار ابتدایی و step گام افزایش و end مقدار پایانی است: >>a = 0:1:8 a = 0 1 2 3 4 5 6 7 8 |
چنانچه گام افزایشی ما یک باشد، به طور ساده تر داریم:
>>a = 1:8 a = 1 2 3 4 5 6 7 8 |
دستور linspace برای ایجاد یک دنباله حسابی، با n جمله a تا b به کارمی رود:
linspace(a,b,n) |
مثال:
>>linspace(1,8,8) ans = 1 2 3 4 5 6 7 8 >>linspace(1,10,5) ans = 1.0000 3.2500 5.5000 7.7500 10.0000 |
تفاوت دستور linspace با عملگر “:” این است که در linspace مقدار پایانی یا b الزاماً در آخرین درایه آرایه قرار داده میشود ولی چنانچه step در عملگر “:” به گونه ای انتخاب شود که مقدار end در محدوده تعریف دنباله نباشد بزرگترین جمله دنباله که کوچکتر از end است آخرین درایه خواهدبود. برای روشن شدن موضوع به مثال زیر توجه نمایید:
>>1:2:10 ans = 1 3 5 7 9 >>linspace(1,10,5) ans = 1.0000 3.2500 5.5000 7.7500 10.0000 |
هر دو دنباله فوق دارای پنج جمله با مقدار ابتدایی 1، بوده و نقطه انتهایی 10 در نظرگرفته شده است. با این تفاوت که دنباله اول به 9 ختم شده، زیرا بزرگترین جمله دنباله است که از 10 کوچکتر بوده است.
دستور logspace از 10^a تا 10^b، n جمله تولید میکند.
Logspace(a,b,n) |
کاربرد آن در تولید نمودارهای لگاریتمی و محاسبات لگاریتمی است:
>>logspace(0,3,4) ans = 1 10 100 1000 |
- آرایه زیر را درنظر بگیرید:
>>a = 1:5 a = 1 2 3 4 5 |
می توان درایه های دلخواه آرایه را به اصطلاح استخراج نمود:
>>a(2) ans = 2 |
می بینیم که کافیست اندیس درایه مورد نظر را در پرانتزی جلوی نام آرایه وارد کرد. اندیس درایه اول همواره یک بوده ولی چنانچه بخواهیم به درایه اخر دسترسی داشته باشیم و ندانیم طول آرایه چقدر است(یا برای راحتی کار) میتوان از عبارت end استفاده کرد:
>>a(end) ans = 5 |
برای استخراج چندین درایه آرایه نیز میتوان از ":" استفاده کرد:
>>a(1:3) ans = 1 2 3 >>a(3:end) ans = 3 4 5 |
درواقع باید اندیس درایه های موردنظر را در یک آرایه وارد نمود. برای مثال فرض کنید میخواهیم همه درایه ها به غیراز درایه وسط را در یک آرایه دیگر ذخیره کنیم:
>>b = a([1 2 4 5]) b = 1 2 4 5 |
تمرین:با کمک دستور ":" و آرایه α،آرایه ای ایجاد کنید که درایه های a را از آخر به اول برگرداند.
جواب:
>>b = a(5:-1:1) b = 5 4 3 2 1 |
تمرین: با کمک دستورات فوق دستوری بنویسید که درایه های فرد آرایه a را استخراج کند.
جواب:
>>a(1:2:5) ans = 1 3 5 |
تمرین: آرایه زیر را درنظر بگیرید:
a = [1 3 -1 4 8 0 0 -5 7 9 4 5 7 1 3 6]; |
دستوری بنویسید که به جز چهار درایه اول و آخرِ آرایه فوق بقیه درایه ها را استخراج کند.
جواب:
>>a(5:end-4) ans = 8 0 0 -5 7 9 4 5 |
عملگر "’" یک آرایه سطری را به ستونی و برعکس تبدیل میکند:
>>a' ans = 1 2 3 4 5 >>ans' ans = 1 2 3 4 5 |
از دستورات گفته شده میتوان برای جایگزینی برخی درایه ها با مقادیر دلخواه نیز استفاده کرد. برای مثال فرض کنید درایه های زوج آرایه فوق را میخواهیم برابر صفر قرار دهیم:
>>a(2:2:end) = 0 a = 1 0 3 0 5 |
یا اینکه بخشی از آرایه را به شکل زیر حذف نمود:
>>a(2:2:end) = [] a = 1 3 5 |
برای اینکه بهتر با [] آشنا شویم، به دستورات زیر توجه کنید:
>>[] ans 0x0 0 double |
نکته: اگر اندیس ورودی آرایه از طول آرایه بیشتر باشد، با پیغام خطا روبه رو میشویم:
>>a(4) index exceeds matrix dimensions. |
دستورات دیگری نیز برای استخراج بخش دلخواهی از آرایه، وجود دارد که امکانات بیشتری را در اختیار ما قرار میدهد. دستور find شماره اندیس مربوطه که در شرط خاصی صدق میکند را برمی گرداند. برای مثال آرایه زیر را در نظر بگیرید:
>>a = 9 8 -3 4 -6 -9 5 1 0 9 3 3 8 7 2 |
اگر بخواهیم درایه های منفی را از آرایه فوق استخراج کرده و در آرایه دیگری ذخیره کنیم، ابتدا از دستور find جهت استخراج اندیس درایه های منفی استفاده میکنیم:
>>b = find(a < 0) b = 3 5 6 |
نتایج به دست آمده را با آرایه a مقایسه کنید، میبینید که اندیس درایه های موردنظر به دست آمده اند. حال برای آن که این درایه ها را در یک آرایه دیگر ذخیره کنیم، بدین گونه عمل میکنیم:
>>a_negative = a(b) a_negative = -3 -6 -9 |
اکنون که درایه های منفی استخراج شده اند میخواهیم، این درایه ها از آرایه a حذف شوند:
>>a( find(a < 0) ) = [] a = Columns 1 through 9 9 8 4 5 1 0 9 3 3 Columns 10 through 12 8 7 2 |
در جلسه بعد به معرفی ماتریس ها و کاربرد دستورات این جلسه در ماتریس ها و ادامه دستورات آن می-پردازیم.
پیروز و موفق باشید
تدریس خصوصی آنلاین و از راه دور متلب(MATLAB) با مدرس های حرفه ای و با تجربه
جلسه ششم | آرایه ها در برنامه نویسی متلب
فرمت:PDF (لطفا در صورت خرابی لینک دانلود گزارش بدید که لینک اصلاح کنیم)
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |