عملگرهای مقایسه در متلب
در این جلسه از آموزش رایگان متلب هوسم به بررسی عملگرهای مقایسه در متلب خواهیم پرداخت.همچنین عملگرهای منطقی در متلب و نحوه اندیس دهی منطقی در متلب را نیز بررسی خواهیم کرد. همانطور که از اسمشان پیداست، عملگرهای مقایسه در متلب برای مقایسه اعداد، بردارها، ماتریسها و … استفاده میشوند. در متلب از >، <، =>، <= و == میتوان برای مقایسه دو عدد یا آرایه با هم استفاده کرد.
معرفی عملگرهای مقایسه در متلب
عملگرهای مقایسه در متلب عبارات >، <، =>، <= و == هستند. نتیجه مقایسه برای این عملگرها در متلب، 1 یا 0 است. این صفر و یک با دیگر صفر و یکهایی که تاکنون دیدیم متفاوت هستند. این صفر و یک از نوع (type) منطقی یا logical هستند. در این نوع از دادهها فقط 2 عدد وجود دارد! صفر و یک. یک یعنی بله (یا درست) و صفر یعنی خیر (یا نادرست).
در عملگرهای منطقی در متلب، اگر نتیجه یک باشد یعنی دو عدد یا آرایهای که مقایسه کردیم برابر هستند. اما اگر نتیجه صفر باشد یعنی دو عدد یا آرایه برابر نیستند. هرکدام از عملگرهایی که گفتیم، یک نوع مقایسه را انجام میدهند. اگر بخواهیم ببینیم بین دو عدد کدام کوچکتر یا بزرگتر است از دو عملگر > یا < استفاده میکنیم. یا شاید بخواهیم ببینیم مثلا عدد a بزرگترمساوی با b است یا کوچکترمساوی با آن. در این صورت میتوان از عملگر =< یا => استفاده کرد. از عملگرهای == و =~ به ترتیب برای بررسی تساوی و عدم تساوی در متلب استفاده میشود.
در بخشهای بعد، نحوه استفاده از این عملگرها را با هم بررسی خواهیم کرد. در هر بخش مثالهای حل شده آورده شده است. علاوه بر مثال، تمرینهای متعددی نیز برای شما در نظر گرفته شده است. این تمرینها تسلط شما بر موضوع را افزایش خواهند داد. پس حتما مثالها و تمرینها را خودتان حل کنید. شما میتوانید سوالها و نظر خودتان در مورد آموزشها را در پایین صفحه کامنت کنید. تیم هوسم تمام تلاش خود را میکند که در اسرع وقت پاسخگوی سوالهایتان باشد. خب برویم سراغ عملگر اول.
علامت بزرگتر و کوچکتر در متلب
از عملگرهای مقایسه در متلب میتوان به علامت بزرگتر و کوچکتر اشاره کرد. با استفاده از علامت کوچکتر و بزرگتر در متلب میتوانیم اعداد را با هم مقایسه کنیم. علامت کوچکتر و بزرگتر در متلب > و < هستند. اما از این علائم چگونه میتوانیم استفاده کنیم؟ مثلا فرض کنید سوال برایمان پیش آمده که آیا 20 بزرگتر از 30 است؟!! برای پاسخ به این سوال کافی است در متلب بنویسیم:
>> 20 > 30
ans = logical 0
یا به شکل دیگر میتوانیم اینگونه بنویسیم:
>> 30 < 20
ans = logical 0
هر دو کد بالا بررسی میکند که آیا 20 بزرگتر از 30 هست یا نه. در هردو مورد هم جواب متلب یکسان است، صفر، یعنی خیر! با استفاده از علائم بزرگتر و کوچکتر میتوانیم متغیرها را هم مقایسه کنیم. بهعنوان مثال، در کد زیر متغیری به نام test تعریف میکنیم که مقدارش 4 هست. حالا میخواهیم بدانیم که این متغیر بزرگتر از π هست یا خیر.
>> test = 4; >> test > pi
ans =
logical
1
نتیجه برابر با 0 است که انتظارمان هم همین بود!
جواب خیر است.
>> x = 13.5; >> y = 18.9; >> x > y
ans = logical 0
تصور کنید میخواهید درایههای یک بردار یا ماتریس را با یک عدد دلخواه مقایسه کنید. نکته مثبت اینجاست که نیازی نیست تکتک درایههای بردار را با آن عدد مقایسه کنید. متلب در اینجا هم کار شما را ساده کرده است. با استفاده از عملگرهای مقایسه در متلب میتوانید یک بردار یا ماتریس را با یک مقدار اسکالر مقایسه کنید خب اگر اینطور هست، خروجی چه خواهد بود؟ در این صورت خروجی بردار یا ماتریسی است دقیقا هماندازه با بردار یا ماتریس مرجع. مقادیر بردار یا ماتریسِ خروجی یا صفر هستند یا یک. مثلا فرض کنید برداری به نام odd_nums داریم و میخواهیم ببینیم که کدامیک از اعداد آن از عدد 6 بزرگتر هستند. در این صورت کافی است بنویسیم:
>> odd_nums = 1:2:20
odd_nums = 1 3 5 7 9 11 13 15 17 19
>> odd_nums > 6
ans = 1×10 logical array 0 0 0 1 1 1 1 1 1 1
مشاهده میکنید که متلب میگوید فقط 3 عدد اول از odd_nums از 6 کوچکتر هستند و بقیه بزرگتر از 6 هستند. چک کنید ببینید که متلب درست میگوید؟
>> u_50 = randi(100, 4, 5); >> u_50 < 50
ans = 4×5 logical array 0 0 1 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1
چون randi یک ماتریس با اعداد تصادفی تولید میکند، احتمالا جواب نهایی شما متفاوت است. پس اگر جواب نهایی شما فرق داشت نگران نباشید!
با استفاده از دو عملگر > و < میتوانیم دو بردار یا ماتریس هماندازه را نیز با هم مقایسه کنیم. در این صورت درایههای دو ماتریس یا بردار نظیربهنظیر با هم مقایسه خواهند شد. خروجی در این حالت نیز یک ماتریس یا بردار است که المانهای آن صفر یا یک هستند. خب بیایید دو بردار تصادفی به نامهای a و b تعریف کرده و سپس آنها را با هم مقایسه کنیم. مثلا فرض کنید بخواهیم ببینیم آیا درایههای a از b بزرگتر هستند یا خیر. در این صورت کافی است بنویسیم:
>> a = randi(20, 2, 3)
a = 17 3 13 19 19 2
>> b = randi(20, 2, 3)
b = 6 20 4 11 20 20
>> a > b
ans = 2×3 logical array 1 0 1 1 0 0
مشاهده میکنید که خروجی، ماتریسی هماندازه با a و b است. همچنین درایههای ماتریس خروجی یا یک هستند یا صفر.
>> x = randi(5, 1, 9)
x = 3 4 4 4 2 4 4 1 1
>> y = randi (5, 1, 9)
y = 3 5 2 3 2 4 2 3 4
>> x > y
ans = 1×9 logical array 0 0 1 1 0 0 1 0 0
علامت بزرگترمساوی و کوچکترمساوی در متلب
در بخش قبلی با علامت بزرگتر و کوچکتر در متلب آشنا شدیم. در این بخش میخواهیم به بررسی دو علامت بزرگترمساوی یا کوچکترمساوی در متلب بپردازیم. اما این دو علامت چه تفاوتی با علایم بزرگتر و کوچکتر دارند. از اسمشان پیداست درست است؟ بزرگترمساوی یعنی اگر عدد اول بزرگتر یا مساوی با عدد دوم باشد، خروجی یک است. کوچکترمساوی یعنی اگر عدد اول کوچکتر یا مساوی با عدد دوم باشد، خروجی یک است. برویم سراغ کدنویسی. ابتدا یک مثالی میزنیم که تفاوت علامت بزرگتر و بزرگترمساوی برایتان روشن شود. فرض کنید میخواهیم دو عدد 30 و 60/2 را با هم مقایسه کنیم! (مثلا ما نمیدانیم نتیجه چیست 😉) برای مقایسه یک بار از بزرگتر و یک بار از بزرگترمساوی استفاده میکنیم:
>> (60/2) > 30
ans = logical 0
>> (60/2) >= 30
ans = logical 1
مشاهده میکنید که نتیجه برای علامت بزرگتر، صفر است. یعنی (60/2) بزرگتر از 30 نیست. خب درست است دیگر! اما نتیجه برای علامت بزرگترمساوی، یک است. که باز هم واضح است. اگرچه (60/2) بزرگتر از 30 نیست، اما مساوی که هست! برای کوچکترمساوی هم همین توضیحات صادق است:
>> (60/2) < 30
ans = logical 0
>> (60/2) <= 30
ans = logical 1
مشاهده میکنید که نتیجه برای علامت کوچکتر هم صفر است. اما نتیجه برای علامت کوچکترمساوی، همانطور که انتظار داشتیم یک است.
نکته مهم به شکل نوشتن دو علامت کوچکترمساوی و بزرگتر مساوی دقت کنید! علامت مساوی همیشه بعد از دو علامت > و < قرار میگیرد. اگر اول مساوی را بنویسید با خطا مواجه خواهید شد!
>> (60/2) =< 30
(60/2) =< 30 ↑ Error: Incorrect use of '=' operator. To assign a value to a variable, use '='. To compare values for equality, use '=='.
>> (60/2) => 30
(60/2) => 30 ↑ Error: Incorrect use of '=' operator. To assign a value to a variable, use '='. To compare values for equality, use '=='.
به همین ترتیب میتوانید علائم بزرگترمساوی یا کوچکترمساوی را برای بردارها و ماتریسها استفاده کنیم:
>> c = [5 3 5 1 3 5 4]; >> d = [5 4 1 5 5 4 4] >> c >= d
ans = 1×7 logical array 1 0 1 0 0 1 1
بد نیست این نتیجه را با نتیجه c > d مقایسه کنیم:
>> c > d
ans = 1×7 logical array 0 0 1 0 0 1 0
بررسی تساوی در متلب
برای بررسی تساوی دو عبارت در متلب از علامت == استفاده میشود. علامت == با = کاملا متفاوت است. پس دقت کنید که این دو را اشتباه نکنید! قبلا گفتیم که علامت = مربوط به تخصیص است. یعنی با آن میتوانیم یک عدد، بردار، ماتریس و … را به یک متغیر اختصاص دهیم. اما علامت == برای بررسی تساوی دو متغیر استفاده میشود. خروجی این علامت نیز صفر یا یک است. که صفر یعنی دو عدد مقایسه شده با هم برابر نیستند و یک یعنی دو عدد برابرند. یک بار دیگر بیایید (60/2) را با 30 این بار با علامت == مقایسه کنیم:
>> (60/2) == 30
ans = logical 1
مشاهده میکنید که جواب یک است. یعنی دو عدد برابر هستند. به همین ترتیب میتوانید از علامت == برای بررسی تساوی عناصر بردارها، ماتریسها و … استفاده کنید. خب بیایید تساوی عناصر c و d را با کمک == بررسی کنیم:
>> c == d
ans = 1×7 logical array 1 0 0 0 0 0 1
خب میبینیم که فقط اولین عنصر و آخرین عنصر از c و d با هم برابر هستند.
بررسی عدم تساوی در متلب
عدم تساوی در متلب را میتوانیم با علامت =~ بررسی کنیم. علامت ~ به معنای NOT است. NOT یک عملگر منطقی است که نتیجهی یک عملیات منطقی را برعکس میکند! اگر با عملگرهای منطقی آشنایی ندارید اصلا نگران نباشید. در بخش بعد عملگرهای منطقی بررسی خواهند شد. بیایید یک مثال با هم بررسی کنیم. فرض کنید بخواهیم این بار عدم تساوی را برای c و d مقایسه کنیم:
>> c ~= d
ans = 1×7 logical array 0 1 1 1 1 1 0
نتیجه میگوید که عناصر دوم تا ششم برابر نیستند. نگاهی به مثالی که در بخش قبل حل کردیم بیندازید. میبینید که نتیجهای که از == و =~ بدست آوردیم کاملا عکس هم هستند.
عملگرهای منطقی در متلب
در بخشهای قبل با عملگرهای مقایسه در متلب آشنا شدیم. در این بخش با عملگرهای منطقی آشنا خواهیم شد. گفتیم که یک متغیر منطقی، مقدارش یا یک است یا صفر. عملگرهای منطقی روی متغیرهای منطقی اعمال میشوند و عملیات خاصی را انجام میدهند. در ادامه با چهار عملگر منطقی رایج یعنی or ،and ،not و xor آشنا خواهیم شد.
دستور not در متلب
عبارت not یک عملگر منطقی است که هرچیزی جلوی خودش ببیند، برعکس میکند! یعنی اگر نتیجه عبارتی که جلوی not است، صفر باشد آن را یک میکند و برعکس. در واقع not، نقیض یک عبارت را میدهد. در متلب دستور not یا علامت ~ کار not را برایمان انجام میدهند. علامت ~ را زیر کلید esc در کیبوردتان میتوانید پیدا کنید. در جدول زیر نحوه عملکرد not را میبینیم:
برای پیدا کردن not یک عبارت منطقی کافی است بنویسیم:
>> not(0)
ans = logical 1
>> ~0
ans = logical 1
مشاهده میکنید که در این مثال با دستور not و علامت ~، not عدد 0 را محاسبه کردیم.
>> not(24*5-20 == 36/3 + 11*8)
ans = logical 0
دستور and در متلب
دستور and در متلب ترکیب عطفی دو عبارت منطقی را میدهد. ترکیب عطفی در متلب با دستور and یا علامت & قابل دسترسی است. اما ترکیب عطفی به چه معناست؟ ترکیب عطفی میگوید که حتی اگر یکی از عبارات منطقی ما صفر بود، نتیجه صفر است. ترکیب عطفی بهنوعی به دومینو شباهت دارد. حتی اگر یک اشتباه در گذاشتن قطعات داشته باشیم، نتیجه فروپاشی کل قطعات است. یعنی نتیجه صفر است! در جدول زیر نحوه عملکرد and برای دو عبارت p و q آورده شده است:
به عنوان مثال اگر بخواهیم and را برای دو عدد منطقی 0 و 1 در متلب محاسبه کنیم باید بنویسیم:
>> and(0, 1)
ans = logical 0
یا میتوانیم بنویسیم:
>> 0 & 1
ans = logical 0
>> and(24==5-20, 36/3 < 11*8)
ans = logical 0
>> 24==5-20 & 36/3 < 11*8
ans = logical 0
دستور or در متلب
دستور or در متلب ترکیب فصلی دو عبارت منطقی را میدهد. ترکیب فصلی در متلب با عبارت or یا علامت | قابل دسترسی است. ترکیب فصلی، یک ترکیب مهربان است! زیاد سخت نمیگیرد. نتیجه یک ترکیب فصلی زمانی صفر است که تمام عبارات شرکت کننده در این ترکیب صفر باشند. در غیر این صورت نتیجه یک است. در جدول زیر نحوه عملکرد or برای دو عبارت p و q آورده شده است:
برای محاسبه or برای دو عدد منطقی 0 و 1 کافی است در متلب بنویسیم:
>> or(0, 1)
ans = logical 1
یا میتوانیم بنویسیم:
>> 0 | 1
ans = logical 1
>> or(24==5-20, 36/3 < 11*8)
ans = logical 1
>> 24==5-20 | 36/3 < 11*8
ans = logical 1
دستور xor در متلب
دستور xor در متلب ترکیب فصلی ضمنی دو عبارت منطقی را میدهد. با دستور xor در متلب میتوانیم ترکیب فصلی ضمنی عبارات منطقی را بهدست بیاوریم. در ترکیب فصلی ضمنی نتیجه زمانی یک است که عبارات منطقی ما متفاوت باشند. یعنی یکی یک باشد و دیگری صفر. در غیر این صورت خروجی صفر خواهد بود! در جدول زیر نحوه عملکرد xor برای دو عبارت p و q آورده شده است:
>> xor(24==5-20, 36/3 < 11*8)
ans = logical 1
برای محاسبه xor برای دو عدد منطقی 0 و 1 کافی است در متلب بنویسیم:
>> or(0, 1)
ans = logical 1
اندیس دهی منطقی در متلب
در بخشهای قبلی با عملگرهای مقایسه در متلب آشنا شدیم. سپس به بررسی عملگرهای منطقی در متلب پرداختیم. دیدیم که خروجی در عملگرهای مقایسه ای و منطقی یک بردار 0 و 1 بود. اما ممکن است شما بخواهید خودِ اعداد را ببینید نه برداری از صفر و یکها. شما میتوانید از یک آرایه منطقی بهعنوان اندیس یک بردار یا ماتریس استفاده کنید. در این حالت متلب درایههایی را که در آن اندیسها 1 هستند استخراج می کند.
احتمالا این توضیحات مقداری برایتان مبهم باشد. برویم یک مثال حل کنیم تا برایتان جا بیفتد. مثال زیر تمام عناصر x که بزرگتر از 6 هستند را استخراج میکند. در واقع طبق کد زیر، ما بردار 0 و 1 را به عنوان اندیس به بردار x دادهایم.
>> x(x > 3)
ans = 4 4 4 4 4
یک بار دیگر x را نمایش میدهیم تا بتوانیم مقایسه کنیم:
>> x
x = 3 4 4 4 2 4 4 1 1
مشاهده میکنید که در بردار x، تنها 5 تا عدد 4 وجود دارند که از 3 بزرگتر هستند. با اجرای دستور x(x > 3)، متلب این پنج عدد را در یک بردار گذاشته و به ما داده است. اما چگونه این اتفاق افتاد. اصلا عبارت x(x > 3) دیگر به چه زبانی نوشته شده!! در عبارت x(x > 3)، ما ابتدا با استفاده از عبارت x > 3 از متلب خواستیم که بگوید کدامیک از المانهای x بزرگتر از 3 است. خروجی چه میشود؟ برداری از صفر و یکها که نشان میدهند عبارت x>3 برای کدام المانها درست است. سپس این بردار صفر و یک را به عنوان اندیس به x دادیم! وقتی یک بردار از صفر و یکهای منطقی را در متلب به عنوان اندیس استفاده کنیم چه میشود؟ متلب فقط آن المانهایی را برمیدارد که 1 باشند. همین اتفاق دقیقا برای عبارت x(x > 3) افتاده است!
>> v = x(x <= 3)
v =
3 2 1 1
مقداردهی بردارها در متلب
ممکن است بخواهید تمامی درایههای یک بردار را که از یک عدد اسکالر بزرگتر، کوچکتر، مساوی، نامساوی، کوچکترمساوی یا بزرگتر مساوی هستند، با یک عدد ثابت جایگزین کنید. برای جایگزینی مقادیر در یک بردار میتوانید از اندیس دهی منطقی در متلب استفاده کنید. بهعنوان مثال، فرض کنید بخواهیم تمام مقادیر موجود در بردار x که برابر با 3 هستند را با مقدار 1 جایگزین کنیم. برای این کار باید بنویسیم:
>> x(x == 3) = 1
x = 1 4 4 4 2 4 4 1 1
یعنی ما ابتدا با استقاده از اندیس دهی منطقی در متلب و همچنین عملگرهای مقایسه در متلب ، المانهای مساوی با 3 را استخراج کردیم. سپس با استفاده از تخصیص (=)، آنها را برابر با عدد دلخواهمان یعنی 1 قرار دادیم.
>> x(x <= 2) = 0
x = 0 4 4 4 0 4 4 0 0
ترکیب عملگرهای مقایسه در متلب و عملگرهای منطقی در متلب
با ترکیب عملگرهای مقایسه در متلب و عملگرهای منطقی در متلب شما میتوانید بازههای دلخواه خودتان را انتخاب کنید. فرض کنید از شما خواسته شده در یک بردار یا ماتریس اعدادی که بین 3 تا 7 هستند را پیدا کنید. چطور میتوان با متلب به این سوال جواب داد؟ کمی در مورد عنوان سوال فکرکنید. بین 3 و 7 یعنی بزرگتر از 3 و کوچکتر از 7، درست است؟ خب همین شکلی که گفتیم در متلب مینویسیم:
>> (x < 7) & (x > 3)
ans = 1×9 logical array 0 1 1 1 0 1 1 0 0
>> (y < 2) | (y > 4)
ans =
1×9 logical array
0 1 0 0 0 0 0 0 0
دریافت PDF جلسه عملگرهای مقایسه در متلب
برای دریافت pdf این جلسه، لطفا ایمیل خود را در باکس زیر وارد کرده و روی دکمه «دریافت pdf» کلیک کنید.
منابع آموزش متلب
در فهرست زیر، تعدادی از منابع خوب آموزش متلب را معرفی کردهایم. ضرورتی وجود ندارد که اینها را نگاه کنید. چون ما برای آموزش متلب، این منابع را مطالعه و استفاده کردهایم.
در این جلسه با عملگرهای مقایسه در متلب آشنا شدیم. سپس به بررسی عملگرهای منطقی در متلب پرداختیم. در آخر هم نحوه اندیس دهی منطقی در متلب را بررسی کردیم. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد. سوالات خود را پایین 👇 برایمان کامنت کنید. حتما سوالات شما پاسخ داده خواهد شد.
مطالب زیر را حتما مطالعه کنید
تعریف متغیر در متلب
آموزش متلب رایگان
دستور max در متلب
دستور محاسبه انتگرال در متلب
دستور input در متلب
دستور ezplot در متلب
11 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام خسته نباشید
اگه بخواین برنامه از ما یک ماتریس ۴×۴ با درایه های غیر تکراری بگیره چطوری میتونیم بنویسیم برنامه رو؟!🙏🏼
سلام ساینا عزیز،
لینک زیر میتونه براتون مفید باشه:
https://www.mathworks.com/matlabcentral/answers/516812-how-do-i-create-a-user-generated-matrix-in-matlab
سلام یک سوال داشتم مثلا در متلب [3 3 3 3;3 3 3 3;3 3 3 3;3 3 3 3]=B ماتریس داریم چجوری اینو باید با دستور ها بنویسیم
سلام مهدی عزیز،
کافیه از دستور ones استفاده کنید و بعد بردار ساخته شده رو در عدد 3 ضرب کنید.
سلام بر شما، لطفا توضیح دهید با کدام دستورها در متلب 2014 می توان شکل های دو بعدی و سه بعدی باکیفیت کشید و در آن ها نقاط و خطوط و محل اتصالشان را مشخص کرد؟
سلام،
برای رسم نمودار دوبعدی دستور plot و برای رسم نمودارهای سهبعدی دستورهای plot3، surf و mesh استفاده میشه. هرکدوم از این دستورها رو تو قسمت help متلبتون سرچ کنید، اگر نباشه یعنی ساپورت نمیکنه.
در مورد رسم نقاط و محل اتصالشون هم دستور plot و plot3 میتونن استفاده بشن. برای رسم نقاط فقط از مارکر استفاده کنید و برای رسم خط هم کافیه مختصات دو نقطه رو بدید. این پستها رو مطالعه کنید لطفا:
جلسه 14: رسم نمودار در متلب
رسم نمودار سه بعدی در متلب
سلام .لطفا برنامه ضرب اعداد اول یک عدد رو توضیح بدین ممنون
سلام،
اعداد اول یک عدد یعنی چی؟ اعداد اولی که در بازه 1 تا عدد موردنظر هستند؟
سلام ممنون باعث اموزش عالی
تمرین 10 بین دو عبارت و اومده
ولی در جواب شما or استفاده کردین
با سلام .ازآموزش عالی تون لذت بردم.یک سوال داشتم کلید کیبورد ترکیب فصلی orچیه.همون علامت عادکردن؟
سلام،
باعث خوشحالیه🙏
علامت |، shift + backslash