ترفندهای متلب 2
بهنام خدا، سلام… با آموزش متلب رایگان هوسم در خدمت شما هستیم. در یازدهمین جلسه میخواهیم به نکته ها و ترفندهای متلب 2 بپردازیم. یکی از مهمترین نکاتی که در این جلسه خواهیم گفت، محاسبه اندازه ماتریس در متلب است. دستور size در متلب، دستور numel در متلب و دستور length در متلب از جمله دستوراتی هستند که در این جلسه بررسی شدهاند. با هوسم همراه باشید…
مقدمهای درباره نکته ها و ترفندهای متلب 2
چرا نکته ها و ترفندهای متلب 2 ؟ قبلا هم گفتیم، همه ترفندهای متلب را در یک جلسه نمیتوان گفت. هرچه جلوتر برویم، بازهم هرازگاهی جلساتی با عنوان ترفندهای متلب خواهیم داشت. جلسه نکته ها و ترفندهای متلب 1 را در اینجا میتوانید مشاهده کنید. البته، از منوی سمت چپ هم (لیست جلسات آموزش رایگان متلب) میتوانید جلسه ترفندها را بیابید. فهرست مطالب این جلسه از نکته ها و ترفندهای متلب در ادامه آمده است.
اندازه ماتریس در متلب
دستورهای متعددی در متلب وجود دارند که اندازه یک آرایه (ماتریس یا بردار) را میدهند. در این جلسه میخواهیم دستورهای numel, length و size را بررسی کنیم. در کدنویسیِ پروژههای مختلف با متلب، خیلی زیاد پیش میآید که بخواهیم اندازه یک ماتریس یا بردار را بدانیم. شاید از نظر شما این کار بیمعنی و غیرضروری باشد. چه دلیلی وجود دارد که بخواهیم اندازه آرایهای که خودمان تعریف یا فراخوانی کردیم را بدانیم؟
چرا باید اندازه یک ماتریس را بدانیم؟
در پاسخ به این سوال باید بگوییم که بستگی دارد!
1) گاهی اوقات ممکن است یک عملیاتی انجام دهیم و بخواهیم ببینیم خروجی چه ابعادی دارد. در بعضی از عملیات ریاضی ابعاد خروجی کاملا با ورودیها فرق دارد. کمی فکر کنید، میتوانید یک عملگر ریاضی نام ببرید که در آن ابعاد خروجی متفاوت از ورودیها است؟
سادهترین عملگر ریاضی که این ویژگی را دارد ضرب است. این مسئله را در جلسه قبل کاملا بررسی کردیم. اگر یک ماتریس 2 در 3 در یک ماتریس 3 در 7 ضرب شود ابعاد خروجی چه میشود؟ بله، 2 در 7 میشود. شما به راحتی و بدون اینکه خودتان بررسی کنید میتوانید از متلب بخواهید ابعاد خروجی را بگوید.
2) اندازه آرایه ها در متلب را میتوان به دست آورد و به عنوان ورودی به بعضی از دستورها داد. بسیاری از دستورهای متلب هستند که در ورودی آنها باید ابعاد مدنظرمان برای خروجی را وارد کنیم. جلسه ماتریسهای خاص در متلب را به خاطر دارید؟
ما دستورهایی را بررسی کردیم که ورودی آنها اعدادی بودند که ابعاد خروجی را مشخص میکردند. مثل دستور zeros. ما میتوانیم با متلب اندازه یک بردار مثلا بردار x را بدست بیاوریم و آن را به دستور zeros بدهیم. با این کار، دستور zeros یک ماتریس صفر تولید میکند که هماندازه با x است.
تعریف چند متغیر برای انجام محاسبه اندازه ماتریس در متلب
خب تا اینجا تنها دو دلیلِ نیاز به دستوری برای استخراج اندازه یک آرایه را گفتیم. برویم سراغ دستورها و مثالهایی از هرکدام ببینیم. سه آرایه x، y و z را تعریف میکنیم و تمامی مثالها را با این آرایهها انجام خواهیم داد. سه آرایه را به صورت زیر تعریف میکنیم:
.>> x = randi(20, 4, 3)
x =
17 13 20
19 2 20
3 6 4
19 11 20
>> y = randi(20, 3, 6)
y =
20 3 16 1 14 8
10 9 20 17 16 14
17 19 14 19 15 4
>> z = randi(10, 1, 7)
z =
8 1 3 1 1 9 7
اگر شما این دستورها را در متلب اجرا کنید، اعداد متفاوتی تولید خواهد شد! چون از دستور randi استفاده کردیم که یک ماتریس تصادفی تولید میکند. پس اگر ماتریسهای شما متفاوت شد اصلا مهم نیست.
خب برویم سراغ اولین دستور از جلسه نکته ها و ترفندهای متلب 2 …
دستور size در متلب
دستور size در متلب، اندازه یک آرایه را میدهد. خروجی این دستور، یک بردار است که ابعاد یک آرایه را نشان میدهد. مثلا خروجی دستور size برای یک ماتریس، دو عدد هستند که تعداد سطرها و ستونهای آن ماتریس را نشان میدهند. دستور size و سایر دستورهای مربوط به اندازه بسیار مهم هستند. پس سعی کنید آنها را خوب یاد بگیرید.
ورودی دادن به دستور size در متلب
خب حالا چطور از دستور size استفاده کنیم؟ ورودی دادن به دستور size ساده است. کافی است فقط اسم متغیری که میخواهیم اندازهاش را بدانیم به دستور size بدهیم. مثلا فرض کنید بخواهیم بدانیم اندازه x چه است. برای این کار باید بنویسیم:
>> size(x)
ans =
4 3
مشاهده میکنید که خروجی دو عدد است. عدد اول تعداد سطرها و عدد دوم تعداد ستونها را نشان میدهد. یعنی دستور size میگوید که ماتریس x، یک ماتریس با 4 سطر و 3 ستون است. شما میتوانید خروجی size را در یک متغیر دلخواه ذخیره کنید. مثلا:
>> dims = size(x)
dims =
4 3
مشاهده میکنید که در کد بالا سایز x در متغیر dims ذخیره شد.
ذخیره کردن هر بُعد در یک متغیر جداگانه
متلب یک خصوصیت جالب دارد. در توابعی مثل size که بیش از یک خروجی دارند، هر خروجی را میتوان جداگانه ذخیره کرد. یعنی اینکه در مثال بالا، اگر بخواهیم، میتوانیم تعداد سطرها را در متغیر m و تعداد ستونها را در متغیر n ذخیره کنیم. برای این کار باید بنویسیم:
>> [m, n] = size(x)
m =
4
n =
3
مشاهده میکنید که تعداد سطرها در m و تعداد ستونها در n ذخیره شدند. ما متغیر dims را برداشتیم و به جایش [m, n] گذاشتیم. کروشه یادتان نرود… یک نکته دیگر! اگر نخواهیم مثلا تعداد سطرها ذخیره شوند چه؟ یعنی فقط ستونها را بخواهیم. متلب فکر آنجا را هم کرده! اگر نمیخواهید یکی از خروجیها را ذخیره کنید، کافی است به جایش علامت ~ بگذارید. در مثال بالا اگر نخواهیم تعداد سطرها را ذخیره کنیم کافی است بنویسیم:
>> [~, n] = size(x)
n =
3
همانطور که مشاهده میکنید، فقط تعداد ستونها در متغیر n ذخیره شد!
>> [~, col] = size(z)
col =
7
محاسبه ابعاد x*y با کمک دستور size در متلب
فرض کنید میخواهیم بدانیم نتیجه ضرب x و y چه ابعادی دارد. یک راه این است که این دو متغیر را در هم ضرب کنیم و نتیجهاش را در متغیر دیگری ذخیره کنیم. سپس ابعاد متغیر ذخیره شده را با size بدست بیاوریم. به صورت زیر:
>> mul = x * y
mul =
810 548 812 618 746 398
740 455 624 433 598 260
188 139 224 181 198 124
830 536 804 586 742 386
>> size(mul)
ans =
4 6
اما راه سادهتری وجود دارد. ما میتوانیم بدون محاسبه x*y، مستقیما این عبارت را در ورودی size وارد کنیم:
>> size(x * y)
ans =
4 6
این راه سادهتر از روش قبل است. علاوه براین از تعریف متغیر جدید نیز جلوگیری میشود. مشاهده میکنید که خروجی ضرب دو ماتریس x و y، یک ماتریس 6×4 است. آیا این نتیجه درست است؟ ماتریس x، به ابعاد 3×4 بود و ماتریس y نیز 6×3 بود. قبلا یاد گرفتیم که نتیجه ضرب این دو ماتریس، یک ماتریس به ابعاد 6×4 است. پس همانطور که انتظار هم میرفت، متلب درست گفته است!
تعریف ماتریس صفر با استفاده از دستور size در متلب
خب حالا فرض کنید بخواهیم یک ماتریس صفر تعریف کنیم که دقیقا هماندازه با x باشد. برای این کار کافی است بنویسیم:
>> zeros(size(x))
ans =
0 0 0
0 0 0
0 0 0
0 0 0
مشاهده میکنید که یک ماتریس صفر به ابعاد 3×4 تولید شد. اگر با zeros آشنایی ندارید به جلسه ماتریسهای خاص در متلب مراجعه کنید.
>> ones(size(y))
ans =
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
یکی از مهمترین دستورهای اندازه ماتریس در متلب ( یعنی دستور size در متلب ) را آموختید. اما این بخش تمام نشده، برویم سراغ بقیه دستورهای محاسبه اندازه ماتریس در متلب …
دستور numel در متلب
دستور numel در متلب، تعداد عناصر موجود در یک آرایه را برمیگرداند. یعنی صرف نظر از اینکه آرایه موردنظرمان چند سطر یا ستون دارد، دستور numel در متلب میگوید کلا چند عنصر در آن وجود دارد. عبارت numel مخفف number of elements یعنی تعداد عناصر است. نحوه ورودی دادن به این دستور، مشابه با size است. مثلا برای داشتن تعداد عناصر در متغیر y کافی است بنویسیم:
>> numel(y)
ans =
18
مشاهده میکنید که دستور numel میگوید که ماتریس y، تعداد 18 عنصر در خود دارد. یعنی 6×3…
>> numel(z)
ans =
7
دستور length در متلب
دستور length در متلب برای محاسبه طول بزرگترین بُعد از آرایه مورد استفاده قرار میگیرد. واضح است که در یک بردار سطری یا ستونی، طول بردار با بزرگترین بُعد آن برابر است. فرض کنید بنویسیم:
>> length(x)
ans = 4
مشاهده میکنید که خروجی length(x)، عدد 4 است. آیا بزرگترین بُعد ماتریس x، عدد 4 است؟ بله، چون ماتریس x یک ماتریس 3×4 است.
>> length(y)
ans =
6
>> length(z)
ans =
7
>> numel(z)
ans =
7
خب بخش اندازه ماتریس در متلب تمام شد. سه دستور size در متلب ، دستور length در متلب و دستور numel در متلب را بررسی کردیم. برویم سراغ بخش دوم جلسه نکته ها و ترفندهای متلب 2 …
نوع متغیر در متلب
دادهها در متلب میتوانند نوع یا type متفاوتی داشته باشند. لیستی از تمام typeهای داده موجود در متلب در تصویر زیر آورده شده است. در ستون وسط از تصویر زیر، نشان داده شده است که هر type در چند بایت ذخیره میشود. در ستون سوم بازهی اعدادی که در یک type تعریف میشوند آورده شده است. لازم نیست اعداد را دقیق حفظ کنید. اما تلاش کنید که اسامی و بازهی حدودی هرکدام را به خاطر بسپارید.
تمامی متغیرهایی که در متلب تعریف میشوند به صورت پیشفرض از نوع double هستند. مگر اینکه خودتان نوع آن را تغییر دهید. میتوان با دستورهای خاصی انواع typeها را به هم تبدیل کرد. فعلا تا همین اندازه که با انواع typeها آشنایی داشته باشید کافی است. در آینده پروژههایی را با هم انجام میدهیم که با نوع متغیر در متلب ، typeهای موجود در جدول بالا و موارد استفاده هرکدام بیشتر آشنا خواهید شد.
دستور class در متلب
دستور class در متلب ، نوع متغیر در متلب را مشخص میکند. گفتیم همه متغیرهایی که تعریف میکنیم، به صورت پیشفرض double در نظر گرفته میشوند. بیایید نوع سه متغیر x، y و z را با کمک class ببینیم:
>> class(x)
ans =
'double'
>> class(y)
ans =
'double'
>> class(z)
ans =
'double'
مشاهده میکنید که هر سه متغیری که تعریف کرده بودیم از نوع double هستند.
کامنت در متلب
در این بخش میخواهیم نحوه گذاشتن کامنت در متلب را بررسی کنیم. اما کامنت گذاشتن یعنی چه؟ کامنت گذاشتن در کدنویسی یعنی اینکه توضیحات مختصری برای هر خط از کد خودمان بنویسیم. کامنتها توسط متلب اجرا نمیشوند. در واقع توضیحات راهنما هستند…
فرض کنید پروژه بزرگی را با متلب انجام دادهاید و میخواهید آن را به دوست خود بدهید. دوست شما از کد سر در نمیآورد. یک راه این است که کنار دوستتان بنشینید و خط به خط کد را به او توضیح دهید. اما راه دیگر که بسیار هم رایج است این است که در هنگام کدنویسی برای هر قسمت از کد خود توضیحی بگذارید. لازم نیست در همه خطوط کامنت بگذارید. اما میتوانید کنار خطوطی که عملیات مهمی انجام میشود این کار را انجام دهید.
گذاشتن کامنت در متلب با استفاده از علامت % انجام میشود. بعد از علامت % هرچیزی نوشته شود، به رنگ سبز درمیآید. متلب اصلا کامنت را نمیبیند! یعنی حتی اگر دستورات متلبی را جلوی % بنویسیم، اجرا نخواهند شد. خب برویم سراغ کدنویسی… فرض کنید میخواهیم سه متغیر a, b و c را تعریف کنیم. سپس میانگین آنها را محاسبه کنیم. میخواهیم سعی کنیم با کامنت گذاشتن بخش تعریف متغیر و میانگینگیری را از هم جدا کنیم.
>> a = 0.9; >> b = 0.2; >> c = 0.7; >> %-------------- >> s = a + b + c; % sum of all variables >> avg = sum / 3; % 3 is the number of variables
مشاهده میکنید که ما به راحتی با کامنت گذاشتن توانستیم بخش تعریف متغیر و میانگینگیری را جدا کنیم تا بهتر خوانده شود. همچنین در بعضی خطوط توضیحاتی نوشتیم.
دستور whos در متلب
در جلسه آشنایی با محیط متلب گفتیم که تمامی متغیرهایی که تعریف کردهایم در پنجره workspace وجود دارند. همچنین گفتیم با کلیک برروی هرکدام از متغیرها در workspace، میتوانیم محتویات آن متغیر را ببینیم. در این پنجره نوع و ابعاد هر متغیر نیز مشخص است. دستوری در متلب وجود دارد که تمامی متغیرهای موجود در workspace را به ترتیب حروف الفبا لیست میکند:
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
avg 1x1 8 double
b 1x1 8 double
c 1x1 8 double
dims 1x2 16 double
m 1x1 8 double
mul 4x6 192 double
n 1x1 8 double
s 1x1 8 double
x 4x3 96 double
y 3x6 144 double
z 1x7 56 double
مشاهده میکنید تمامی متغیرهایی که تاکنون تعریف کردیم به ترتیب حروف الفبا لیست شدهاند.
دریافت PDF جلسه ترفندهای متلب 2
برای دریافت pdf این جلسه، لطفا ایمیل خود را در باکس زیر وارد کرده و روی دکمه «دریافت pdf» کلیک کنید.
منابع آموزش متلب
در فهرست زیر، تعدادی از منابع خوب آموزش متلب را معرفی کردهایم. ضرورتی وجود ندارد که اینها را نگاه کنید. چون ما برای آموزش متلب، این منابع را مطالعه و استفاده کردهایم.
در جلسه «ترفندهای متلب 2» تعدادی از ترفندهای کاربردی و در عین حال ساده متلب را ارائه کردیم. دستور size در متلب، دستور numel در متلب و دستور length در متلب از جمله مهمترین دستوراتی هستند که در این جلسه ارائه شدهاند. بعضی جلسات راحت هستند و بعضی جلسات هم سنگین. درهرصورت ما تمام تلاشمان را کردهایم که بهترین سرفصل مطالب برای آموزش متلب رایگان را برای شما آماده کنیم. سوالات و پیشنهادهای خود را لطفا کامنت کنید. با هوسم همراه باشید…
مطالب زیر را حتما مطالعه کنید
تعریف متغیر در متلب
آموزش متلب رایگان
دستور max در متلب
دستور محاسبه انتگرال در متلب
دستور input در متلب
دستور ezplot در متلب
6 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام وقت بخیر،
من میخوام یه متغیری رو ذخیره کنم و برای سطح بعدی مدلم استفاده بشه. چطور میتونم اینکارو انجام بدم؟
سلام وقتتون بخیر ببخشید
وقتی کد ما ران بشه
چجوری میخواهند کامنتو بخونن؟
سلام مهدی عزیز،
کامنتها اجرا نمیشن و متلب به سادگی ازشون عبور میکنه.
کامنتها در واقع این امکان رو فراهم میکنن که برای بخشهای مختلف کدهامون توضیح بنویسیم.
واقعا سایتتون فوق العاده اس . خیلی خوب توضیح دادید
با سلام خدمت مدرس محترم من هنگام کار کردن با نرم افزار متلب با مشکلی به شکل زیر رو به رو شدم:
1. کد ران شده:
NPV = pvvar([0; NCF], rate_Discount);
خطایی که داد:
‘pvvar’ requires Financial Toolbox.
2. کد ران شده:
Rate_inf = datasample(Rate_Inf_Range, 1)
خطایی که داد:
‘datasample’ requires Statistics and Machine Learning Toolbox.
این در صورتیست که datasample چیزی مثل randi و.. است
سلام مژگان عزیز،
به نظر میاد توابعی که ازشون استفاده کردید مربوط به تولباکسهایی هست که روی متلب شما نصب نیست. برای استفاده از این توابع باید تولباکسهای گفته شده رو نصب کنید.