اپراتور (Operator) یا عملگر، نمادی است که به کامپایلر میگوید تا اعمال خاص ریاضیاتی یا منطقی را انجام دهد. در این قسمت از دوره آموزشی متلب که توسط تیم محتوایی فنولوژی تهیه شده، در مورد عملگرها در متلب صحبت میکنیم.
انواع عملگرها در متلب
متلب طوری طراحی شده است که در درجه اول روی کل ماتریسها و آرایهها عمل کند. بنابرین عملگرها در مطلب طوری طراحی شدهاند تا روی هر دو دادههای اسکالر و غیراسکالر عمل کنند. متلب انواع مختلفی از عملگرهای ابتدایی را شامل میشود:
- عملگرهای محاسباتی (Arithmetic Operators)
- عملگرهای رابطهای (Relational Operators)
- عملگرهای منطقی (Logical Operators)
- عملگرهای بیت به بیت (Bitwise Operations)
- عملگرهای تنظیم کننده (Set Operations)
عملگرهای محاسباتی (Arithmetic Operators)
از نظر محاسباتی ریاضی انواع عملگرها در متلب کدامند؟ متلب دو نوع مختلف از عملگرهای محاسباتی دارد:
- عملگرهای محاسباتی ماتریس
- عملگرهای محاسباتی آرایهای
عملگرهای محاسباتی ماتریس مشابه عملکردشان در جبرخطی است. عملیاتهای آرایهای، درایه به درایه اعمال میشود، چه در آرایههای تک بعدی و یا چند بعدی. عملگرهای ماتریس و عملگرهای آرایهای از طریق علامت نقطه (.) از هم جدا میشوند. عملگرهای جمع و تفریق در ماتریسها و آرایهها مشابهاند. جدول زیر توضیح مختصری از عملگرها در متلب را ارائه میدهد.
توضیحات عملگر در متلب | عملگر |
جمع: A+B مقادیر ذخیره شده در متغیرهای A و B را جمع میکند. A و B باید هم اندازه باشند، مگر اینکه یکی از آنها اسکالر باشد. A اسکالر میتواند در یک ماتریس با هر اندازهای جمع شود. | + |
تفریق: A-B اعضای B را از اعضای A کم میکند. A و B باید هم اندازه باشند، مگر اینکه یکی از آنها اسکالر باشد. A اسکالر میتواند از یک ماتریس با هر اندازهای کم شود. | – |
ضرب ماتریسها: C = A*B ضرب جبری ماتریسهای A و B است. به طور دقیقتر اگر A و B اسکالر نباشند، تعداد ستونهای A و تعداد سطرهای B باید برابر باشند. اما اگر A اسکالر باشد، میتواند در ماتریسی با هر اندازهای ضرب شود. | * |
ضرب درایه به درایه: A.*B ضرب درایه به درایه A و B است. A و B باید هم اندازه باشند مگر اینکه یکی از آنها اسکالر باشد. | *. |
اسلش(تقسیم از راست): B/A تقریبا مشابه (B*inve(A است. به طور دقیقتر، ‘B/A = (A’\B’). | / |
تقسیم درایه به درایه(از راست): A./B ماتریسی با درایه های A(i,j)/B(i,j) است. A و B باید هم اندازه باشند مگر اینکه یکی از آنها اسکالر باشد. | /. |
بک اسلش یا تقسیم از چپ: اگر A یک ماتریس مربعی باشد، A\B تقریبا مشابه inv(A)*B است، به غیر از اینکه به روش متفاوتی محاسبه میشود. اگر A یک ماتریس n در n باشد و B یک بردار ستونی با n عضو، یا یک ماتریس با چندین ستون از این تعداد، آنگاه X=A\B راه حل معادله AX=B است. اگر ابعاد A اشتباه یا منفرد باشد، پیام هشدار ظاهر میشود. | \ |
تقسیم درایه به درایه از چپ: A.\B یک ماتریس با درایههای B(i,j)/A(i,j) است. A و B باید هم اندازه باشند، مگر اینکه یکی از آنها اسکالر باشد. | \. |
توان ماتریسی: X^p اگر p یک عدد اسکالر باشد در واقع X به توان p است. اگر p یک عدد صحیح باشد، توان با مربع گرفتنهای متوالی محاسبه میشود. اگر عدد صحیح منفی باشد، X ابتدا قرینه میشود. برای سایر مقادیر p، محاسبات شامل مقادیر ویژه و بردارهای ویژه میشود به طوری که اگر [V,D] = eig(X) آنگاه داریم:
X^p = V*D.^p/V |
^ |
توان درایه به درایه: A.^B ماتریسی است که درایههای A(i,j) به توان درایههای B(i,j) رسیده اند. A و B باید هم اندازه باشند، مگر اینکه یکی از آنها اسکالر باشد. | ^. |
ترانهاده ماتریس: ‘A ترانهاده جبری A است. برای ماتریسهای مختلط، این دستور ترانهاده مزدوج مختلط است. | ‘ |
ترانهاده آرایهای: ‘A ترانهاده آرایهای A است. برای ماتریسهای مختلط، این دستور دارای مزدوج نیست. | ‘. |
مثال عملگرها در متلب | عملگرهای محاسباتی
مثالهای زیر در مورد عملگرهای در متلب به صورت ریاضی است. یک اسکریپت در متلب با کد زیر ایجاد کنید:
1 2 3 4 5 6 7 8 9 10 |
a = 10; b = 20; c = a + b d = a - b e = a * b f = a / b g = a \ b x = 7; y = 3; z = x ^ y |
با اجرای فایل به نتایج زیر خواهید رسید:
1 2 3 4 5 6 |
c = 30 d = -10 e = 200 f = 0.50000 g = 2 z = 343 |
توابع عملگرهای ریاضی در متلب
- ceil(A): گرد کردن به بالا
- floor(A): گرد کردن به پایین
- fix(A): گرد کردن به صفر
- round(X): گرد کردن به نزدیکترین عدد صحیح
- rem(X,Y): باقیمانده (ans = X – Y .* fix(X ./ Y))
- mod(X,Y): باقیمانده (ans = X – Y .* floor(X ./ Y))
عملگرهای رابطهای (Relational Operators)
عملگرهای رابط نیزمیتوانند روی هر دو دادههای اسکالر و غیر اسکالر عمل کنند. عملگرهای رابط در آرایهها مقایسههای درایه به درایه بین دو آرایه انجام میدهد و یک آرایه منطقی با همان اندازه با درایه هایی از ۱ یا درست منطقی (True) در رابطههایی که به درستی برقراراند و ۰ یا غلط منطقی (False) جایی که رابطه به درستی برقرار نیست را برمیگرداند. در زیر عملگرهادر متلب که به صورت منطقی عمل میکنند را نشان میبینید:
- > : کوچکتر
- => : کوچکتر و مساوی با
- < : بزرگتر
- =< : بزرگتر یا مساوی با
- == : مساوی
- =~ : نامساوی
مثال عملگرها در متلب | عملگرهای رابطهای
مثال: یک فایل اسکریپت ساخته و کد زیر را در آن بسازید:
1 2 3 4 5 6 7 |
a = 100; b = 200; if (a >= b) max = a else max = b end |
با اجرای فایل، به نتیجه زیر دست مییابید:
1 |
max = 200 |
عملگرهای منطقی (Logical Operators)
عملگرها در متلب از نظر منطقی دو نوع هستند:
- نوع اول Element-wise: این عملگرها روی درایههای متناظر آرایههای منطقی عمل میکنند.
- نوع دوم Short-circuit: این عملگرها روی عبارات اسکالر و منطقی کار میکنند.
عملگرهای منطقی Element-wise درایه به درایه روی آرایههای منطقی عمل میکنند. نمادهای &،| و ~ به ترتیب نماد عملگرهای AND و OR و NOT در آرایههای منطقی هستند. عملگرهای منطقی Short-circuit باعث اتصال کوتاه در اعمال منطقی میشوند. نمادهای && و || به ترتیب عملگرهای منطقی AND و OR هستند.
مثال عملگرها در متلب | عملگرهای منطقی
یک فایل اسکریپت ساخته و کد زیر را در آن بسازید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
a = 5; b = 20; if ( a && b ) disp('Line 1 - Condition is true'); end if ( a || b ) disp('Line 2 - Condition is true'); end % lets change the value of a and b a = ; b = 10; if ( a && b ) disp('Line 3 - Condition is true'); else disp('Line 3 - Condition is not true'); end if (~(a && b)) disp('Line 4 - Condition is true'); end |
با اجرای فایل، به نتایج زیر دست مییابید:
1 2 3 4 |
Line 1 - Condition is true Line 2 - Condition is true Line 3 - Condition is not true Line 4 - Condition is true |
برخی توابع مهم در عملیات منطقی
- all(A): بررسی میکند آیا همه المانهای آرایه غیر صفر یا درست هستند.
- any(A): بررسی میکند آیا یک المانهای آرایه غیر صفر یا درست وجود دارد یا خیر.
- false(m,n): یک ماتریس false و m در n میسازد.
- true(m,n): یک ماتریس true و m در n میسازد.
- logical(A): مقادیر عددی را به مقادیر منطقی تبدیل میکند.
- islogical(A): بررسی میکند که A منطقی باشد.
- ind = find(X): اندیسها و مقادیر ناصفر المانهای X را پیدا میکند.
عملگرهای بیت به بیت (Bitwise Operations)
عملگرهای بیتی روی بیتها کار میکنند و به صورت بیت در بیت عمل میکنند. در جدول زیر عملگرهای &، | و ^ (به ترتیب «و» «یا» «یای انحصاری» را نشان میدهد.
p ^ q | p | q | p & q | q | p |
۰ | ۰ | ۰ | ۰ | ۰ |
۱ | ۱ | ۰ | ۱ | ۰ |
۰ | ۱ | ۱ | ۱ | ۱ |
۱ | ۱ | ۰ | ۰ | ۱ |
مثال عملگرها در متلب | عملگرهای بیت به بیت
مثال اول: فرض کنید اگر A = 60 و B = 13. اکنون در فرم باینری آنها بهصورت زیر خواهند بود.
A = 0011 1100
B = 0000 1101
—————–
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = ۱۱۰۰ ۰۰۱۱
متلب توابع متنوعی برای عملکردهای bit-wise مانند اعمال ‘bitwise and’، ‘bitwise or’ و ‘bitwise not’ را فراهم میکند. جدول زیر تعدادی از عملکردهای bitwise رایج را نشان میدهد:
هدف تابع | تابع |
این دستور AND بیتی بین دو عدد صحیح a و b را نشان میدهد. | bitand(a,b) |
متمم بیتی (Bit-wise) عدد a را نشان میدهد. | bitcmp(a) |
گرفتن بیت یک موقعیت pos در در آرایه صحیح a | bitget(a,pos) |
این دستور OR بیتی (Bit-wise) بین دو عدد صحیح a و b را نشان میدهد. | bitor(a,b) |
گذاشتن بیت در یک موقعیت pos از a | bitset(a,pos) |
a را k بیت به راست شیفت میدهد. (معادل ضرب در ۲ به توان k) | Bitshift(a,k) |
مقایسه بیتی XOR بین دو عدد صحیح a و b | bitxor(a,b) |
تعویض ترتیب بیت | swapbytes |
مثال دوم: یک فایل اسکریپت ساخته و کد زیر را در آن بسازید:
1 2 3 4 5 6 7 |
a = 60; % 60 = 0011 1100 b = 13; % 13 = 0000 1101 c = bitand(a, b) % 12 = 0000 1100 c = bitor(a, b) % 61 = 0011 1101 c = bitxor(a, b) % 49 = 0011 0001 c = bitshift(a, 2) % 240 = 1111 0000 */ c = bitshift(a,-2) % 15 = 0000 1111 */ |
با اجرای فایل، به نتایج زیر دست مییابید:
1 2 3 4 5 |
c = 12 c = 61 c = 49 c = 240 c = 15 |
عملگرهای مجموعهای (Set Operations)
متلب توابع متنوعی را برای اعمال بین مجموعهها مانند اجتماع، اشتراک و بررسی عضویت در مجموعهها، فراهم میکند. در جدول زیر توابع مهم برای عملگرهای مجموعهای در متلب را مشاهده میکنید:
توضیحات تابع | تابع |
اشتراک بین دو آرایه؛ مقادیر مشترک در دو آرایه را برمیگرداند. این مقادیر به صورت مرتبشده برمیگردند. | intersect(A,B) |
هر سطر از A را با هر سطر از B مقایسه می کند و سطر مشترک بین دو ماتریس را برمی گرداند. سطرهای ماتریس برگردانده شده مرتب شدهاند. | intersect(A,B,’rows’) |
یک آرایه هم سایز A برمیگرداند که حاوی ۱ (true) یعنی جایی که درایه A در B یافت شده و غیر از آن ۰ (false) را برمی گرداند. | ismember(A,B) |
هر سطر از A را با هر سطر از B به عنوان یک عضو مستقل مقایسه میکند و یک بردار شامل ۱ (true) جایی که یک سطر ماتریس A با همان سطر در B مشترک است را برمیگرداند و در غیر این صورت ۰ (false) را برمیگرداند. | ismember(A,B,’rows’) |
اگر داریههای ماتریس A به ترتیب مرتب شده باشند، ۱ منطقی (true) و در غیر این صورت ۰ منطقی (false) را برمیگرداند. ورودی A میتواند یک بردار یا آرایهای سلولی از رشتهها بهصورت (N در ۱) یا (۱ در N) باشد. | issorted(A) |
اگر سطرهای ماتریس دو بعدی A به ترتیب مرتب شده باشند ۱ منطقی (true) و در غیر این صورت ۰ منطقی (false) را برمیگرداند. ماتریس A را یک ماتریس مرتب شده در نظر میگیریم اگر که خروجی آن با خروجی تابع sortrows(A) برابر باشد. | issorted(A,’rows’) |
تفاضل دو مجموعه. مقادیر موجود در A که در B نیستند را برمیگرداند. مقادیر موجود در آرایه برگردانده شده مرتب شدهاند. | setdiff(A,B) |
هر سطر از A را با هر سطر از B به عنوان یک عضو مستقل مقایسه می کند و سطرهایی در A که در B نیستند را برمیگرداند. مقادیر موجود در آرایه برگردانده شده مرتب اند. | setdiff(A,B,’rows’) |
عوامل منحصر به فرد هر دو آرایه را برمیگرداند. | setxor |
اجتماع دو مجموعه را برمیگرداند. | union |
مقادیر غیر تکراری هر آرایه را برمیگرداند. | unique |
مثال عملگرها در متلب | عملگرهای مجموعهای
یک فایل اسکریپت ساخته و کد زیر را در آن بسازید:
1 2 3 4 5 |
a = [7 23 14 15 9 12 8 24 35] b = [ 2 5 7 8 14 16 25 35 27] u = union(a, b) i = intersect(a, b) s = setdiff(a, b) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
a = 7 23 14 15 9 12 8 24 35 b = 2 5 7 8 14 16 25 35 27 u = 2 5 7 8 9 12 14 15 16 23 24 25 27 35 i = 7 8 14 35 s = 9 12 15 23 24 |