آکادمی سیم پاور

گام هفتم: عملگرها در متلب

گام هفتم: عملگرها در متلب

عملگر نمادی است که به کامپایلر می گوید که عملیات ریاضی و منطقی خاص را اجرا کند.matlab  در درجه اول برای کار روی تمام ماتریس ها و آرایه ها طراحی شده است.بنابراین،عملگرها در matlab روی هردو ،داده عددی و غیر عددی کار می کنند.matlab  اجازه انواع عملیات ابتدایی زیر را می دهد:

  • عملگرهای حسابی
  • عملگرهای رابطه ای
  • عملگرهای منطقی
  • عملگرهای بیتی
  • عملگرهای مجموعه

عملگرهای حسابی

matlab دو نوع عملیات حسابی مجاز دارد:

  • عملیات حسابی ماتریس
  • عملیات حسابی آرایه

عملگرهای محاسباتی ماتریس تعریف شده در جبرخطی یکسان هستند.عملگرهای آرایه ،هر دو آرایه یک بعدی و چندبعدی را عنصر به عنصر اجرا می کنند.عملگرهای ماتریس و عملگرهای آرایه با نماد دوره(.) متفاوت هستند،.اما عملگر جمع و تفریق برای ماتریس و آرایه یکسان است ،این عملگرها برای هر دو مورد یکسان هستند .جدول زیر توصیف مختصری از عملگرها را ارائه داده است:

توصیف عملگر
بعلاوه یا جمع یگانی a+b جمع a  و b.a وb باید اندازه یکسان داشته باشند مگر اینکه یکی عدد باشد. +
تفریق یا تفریق یگانی.a-b ،b را از a کم می کند .a و b باید اندازه یکسان داشته باشند.مگر اینکه یکی عدد باشد . عدد می تواند از یک ماتریس با هر اندازه کم شود.
ضرب ماتریس .c=a*b جبر خطی حاصل از ماتریس a وb  است به صورت دقیق تر،

برای a  و  b غیر عددی ،عددی از ستون a با عددی از ستون b جمع می شود .یک عدد می تواند در ماتریس با هر سایزی ضرب شود.

*
ضرب آرایه.a*b عنصر به عنصر  حاصل از آرایه a و b است.a وb باید اندازه یکسان داشته باشند .مگر اینکه یکی عدد باشد . *.
اسلش یا ماتریس راست ماتریس.b/a تقریبا یسان است با) b*inv(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 کوچک شده یا منحصر به فرد باشد . \
تقسیم چپ آرایه.a.\b ماتریسی با عناصر b(i,j)/a(i,j).aوb باید اندازه یکسان داشته باشند مگر اینکه یکی از آن ها عدد باشد . .\
توان ماتریس .xp ،x به توان p  است ،اگر p عدد است .اگر pرقم است آن توان با تکرار مربع محاسبه شده است .برای دیگر مقادیر از p محاسبه شامل مقادیر ویژه  و بردار ویژه ، مانند اینکه اگرeig(x)=  [v,d] و سپس x ^ p=v*d.^p/v. ^
توان آرایه .ab ماتریسی با عناصر a(i,j) به توان  b(i,j)است .a  و  b  باید اندازه یکسان داشته باشند مگر اینکه یکی از آ نها عدد باشد. .^
ماتریس ترانهاده.a’جبر خطی ترانهاده از aاست.برای مثال ، ماتریس ها ،این ترانهاده مزدوج پیچیده است .
ترانهاده آرایه ..a ترانهاده ی  a  است .برای مثال ماتریس ها ،مزدوج شامل آن نمی شود. .’

 

عملگرهای محاسباتی در متلب-1

مثال

مثال زیر استفاده از عملگرهای محاسباتی روی داده عددی را نشان می دهد. یک فایل اسکریپت  ایجاد کنید و کد زیر را تایپ نمایید :

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

زمانی که شما فایل را اجرا می کنید ،نتیجه زیر تولید می شود:

372

 

توابعی برای عملگرهای محاسباتی

جدا از عملگرهای محاسباتی ذکر شده در بالا،matlab   در ادامه دستورات و توابع مورد استفاده برای اهداف مشابه را فراهم کرده است :

(uplus(a: یگانی جمع ;افزایش توسط مقدار a

(plus(a,b: جمع a+b  را بر می گرداند

(uminus(a: یگانی تفریق ;کاهش توسط مقدار  a

(minus(a,b: تفریق ;a-b را بر می گرداند .

(times(a,b: ضرب آرایهa.*b;را برمیگرداند

(mtimes(a,b: ضرب ماتریس a*b;را برمی گرداند .

(rdivide(a,b: تقسیم آرایه راست a./b; را بر می گرداند.

(ldivide(a,b: تقسیم آرایه چپ a.\b; را بر می گرداند .

(mrdivide(a,b: سیستم حل معادلات خطی xa=b for x

(mldivide(a,b: سیستم معادلات خطی ax= b for x

(power(a,b: توان آرایه a.^b;را بر می گرداند .

(mpower(a,b: توان ماتریس ab; را بر می گرداند.

(cumprod(a: محصول تجمعی ;آرایه ای با اندازه یکسان از اندازه a که محصول تجمعی را در بر دارد بر می گرداند .

اگر aیک بردار است ،(cumprod(a یک بردار که محصول تجمعی از عناصر a است را بر می گرداند .

اگر a یک ماتریس است ،(cumprod (a یک ماتریس که محصول تجمعی برای هر ستون a را در بر دارد برمی گرداند.

اگر a آرایه چند بعدی است ،(cumprod(a در طول اولین بعد غیر یگانه عمل می کند .

(cumprod(a,min: محصول تجمعی با طول بعد dim  را بر می گرداند .

(cumsum(a: جمع تجمعی;آرایه a را که جمع تجمعی را دربردارد بر می گرداند.

اگر a یک بردار است ،(cumsum(a یک بردار که جمع تجمعی عنصر a را در بر دارد بر می گرداند .

اگر a  یک ماتریس است  ،پس (cumsum(a یک ماتریس که جمع تجمعی از عنصر a را دارد برمی گرداند .

اگر a یک ضرب آرایه است ،پس (cumsum(a در طول اولین بعد  غیر یگانی عمل می کند.

(round(x: گرد کردن به نزدیکترین عدد ،گرد کردن عناصر  x به نزدیکترین عدد .عناصر مثبت  با یک بخش اعشاری  به  0.5  نزدیکترین عدد مثبت گرد می کند . عناصر منفی  با یک بخش اعشاری  به  0.5 – نزدیکترین عدد منفی  گرد می کند .

(cumsum(a,dim: جمع تجمعی  از عناصر به طول بعد  dim  را بر می گرداند .

(diff(x: فرعیات تفاوت و تقریب;محاسبه اختلاف  بین عناصر مجاور از x; اگر x یک بردار است در آن صورت (diff(x یک بردار از عناصر کوتاه تر از x   از اختلاف بین عناصر :](n-1)x-(n)x…(2)x-(3)x (1)x-(2)x [

اگر x یک ماتریس است ،در آن صورت (diff(x  اختلاف بین سطرهای ماتریس را بر می گرداند: [x(2:m,:)- x(1:m,:)]

(diff(x,n: انجام بازگشتی  diffn بار ،نتیجه در اختلاف چندین  n است.

(diff(x,n,dim: توابع مختلف چند موردی  محاسبه شده با طول ابعاد بوسیله عدد dim مشخص شده اند. اگر n  برابر یا بیشتر از ابعاد  dim  بود diff آرایه خالی بر می گرداند.

(prod(a: تولید عناصر آرایه ;  حاصلضرب از a عنصر آرایه را برمی گرداند

اگر a یک بردار بود ،(prod(a حاصلضربی از عناصر را باز می گرداند .

اگر a یک ماتریس خالی نبود ،در آن صورت (prod(a با هر ستون از a مانند یک بردار رفتار می کند و یک بردار سطری از حاصلضرب هر ستون باز می گرداند .

اگر a ماتریس خالی 0 در 0، (prod(a یک را بر می گرداند .

اگر a یک آرایه حاصلضرب  است ، در آن صورت (prod(a  در طول اولین ابعاد غیر یگانی عمل می کند و آرایه ای از حاصلضرب را بر می گرداند . اندازه ابعاد را به یک کاهش می دهد  تا هنگامی در حالی که اندازه  ابعاد دیگر یکسان باقی بماند.

تابع prod محاسبه می کند و  تنها b را بر میگرداند اگر ورودی تنها a باشد .برای تمام انواع  داده های منطقی و عددی prodمحاسبه می شود و b را به عنوان double بر می گرداند.

(’sum(…,’native و (’sum(…,dim,’native: جمع را در نوع داده محلی  از a اجرا می کند و پاسخی از نوع داده یکسان باز می گرداند .آن برای معمولی و مضاعف  پیش فرض است.

(mod(x,y: ضریب بعد از تقسیم *y .x-n را بر می گرداند. که (n=floor(x.y است.اگر y   عددی  نیست و خارج قسمت x./y  خطای گرد کردن از نوع عددی است .در آن صورت  n  نیز  عددی است .ورودی x , y باید آرایه ای با اندازه حقیقی باشد  یا عددی حقیقی(y~=0 قرار داده شده است).

لطفا توجه داشته باشید :

(mod(x,0  صفر است

(mod(x,x) صفر است

(mod(x,y)برای x~=y و y~=0  علامت همان  y  رادارد.

 

عملگرهای منطقی در متلب

matlab  دونوع عملگر و توابه منطقی را ارائه می دهد:

  • عملگرهای خلاقی که روی عناصری از آرایه منطقی عمل می کنند.
  • عملگرهای اتصال کوتاه که بر روی عبارات منطقی و داده ها کار می کنند .

عملگرهای منطقی  عناصر  wise  که عنصر به عنصر روی عملگرهای منطقی کار می کنند .نماد های & ,| , ~ عملگرهای آرایه منطقی   or , and,و not  هستند.عملگر های منطقی  اتصال کوتاه اجازه اتصالات کوتاه روی عملگرهای منطقی را  می دهند.نماد های  && ,|| عملگرهای اتصال کوتاه منطقی هستند.

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=0;

         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

هنگامی که شما فایل را اجرا می کنید ،نتیجه زیر تولید می شود :

378

 

توابع برای عملیات منطقی

جدا از عملگرهای منطقی ذکر شده در بالا،matlab   در ادامه دستورات و توابع مورد استفاده برای اهداف مشابه را فراهم کرده است :

(and(a,b:این تابع منطقی از آرایه ها یا ورودی عددی می یابد.اجرای منطقی and ،از آرایه های ورودی a,b وآرایه ای را بازمی گرداند که عناصر آنبا 1منطقی یا صفر منطقی تنظیم شده است.خروجی آرایه 1 است اگر تمام ورودی ها صفر نباشندو عناصر در منطقه یکسانی از آرایه باشند وگرنه عناصر با صفر تنظیم می شوند.

(or(a,b: منطقی از آرایه ها یا ورودی های عددی می یابد.اجرای یک or منطقی از تمام ورودی های از تمام ورود های a,bوغیره. و یک آرایه که تمام عناصر آن با صفر منطقی یا یک منطقی تنظیم شده است را بازمی گرداند.عناصر آرایه خروجی با یک تنظیم می شوند اگر  هر ورودی آرایه یک عنصر غیرصفر در همان محل از آرایه داشته باشد.درغیراینصورت عناصر با 0 تنظیم می شوند.

(xor(a,b: یک تابع انحصاری منطقی ;عملیات or انحصاری روی عناصر متناظر از آرایه  a,b  اجرا می کند.نتیجه عناصرc(i,j,…)منطقا درست است(1) اگر a(i,j,…)و b(i,j,…) ،اما نه هر دو غیرصفر باشند.

(all(a: مشخص می کند اگر همه عناصر از آرایه a غیر صفر و صحیح باشد. اگر a یک بردار است (all(a مقدار منطقی 1(درست) را برمی گرداند ، اگر تمام عناصر غیرصفر باشد مقدار منطقی 0 (نادرست) را برمی گرداند. اگر a یک ماتریس خالی نباشد (all(a با هر ستون از a مانند یک بردار رفتار می کند ،یک سطر برداری از مقادیر منطقی 1 ها و صفرها  باز میگرداند. اگر  a یک ماتریس خالی صفر در صفر باشد،(all(a مقدار منطقی 1 را بازمی گرداند. اگر  a یک آرایه چند بعدی باشد، (all(a در طول اولین بعد غیر یگانی عمل می کند و آرایه ای از ارزش های منطقی برمی گرداند.

عملگرهای بیتی در متلب

عملگرهای  بیتی روی بیت ها کار می کنند و عملیات بیت به بیت را انجام می دهند.جدول صحت زیر برای & ,| ,^  است:

pq p|q p&q q p
0 0 0 0 0
1 1 0 1 0
0 1 1 1 1
1 1 0 0 1

فرض کنیم اگر a=60;b=13 ; ،حالا فرمت باینری آن ها به صورت زیر خواهد بود :

a=00111100

b=00001101

a&b=00001100

a|b=00111101

ab=00110001

~a=11000011

matlab  توابع مختلفی را برای عملگرهای بیتی فراهم کرده است مانند عملگرهای ”  and بیتی ” و”or  بیتی ” و”not بیتی “،عملیات شیفت و غیره.جدول زیر رایج ترین عملگرهای بیتی استفاده شده را نشان می دهد:

اهداف تابع
and  بیت – معقول از عدد صحیح a , b (bitand(a,b
متمم بیت معقول از a (bitcmp(a
گرفتن بیت مخصوص  موقعیت pos ، در آرایه عددی a (bitget(a,pos
 orبیت – معقول  از اعداد صحیح  a ,b (bitor(a,b
مجموعه بیت در موقعیت خاص  pos از a (bitset(a,pos
 یک شیفت به چپ توسط  k بیت را باز ی گرداند، معادل برای ضرب برای 2x.

مقادیر منفی برابر  k  به بیت های سمت راست شیفت پیدا می کند یا بر|k| 2 تقسیم می شود و به  سمت نزدیکترین عدد منفی بی نهایت گرد می کند. و بیت های سر ریز را کوتاه می کند.

 

(bitshift(a,k
xor   بیت – معقول از اعداد صحیح a ,b (bitxor(a,b
پیشنهاد مبادله بایت swapbytes

مثال

یک فایل اسکریپت ایجاد کنید و کد زیر را در آن تایپ نمایید:

a=60;  % 60 = 00111100

b=13;  % 13 = 00001101

c=bitand(a , b)   %  12 = 00001100

c=bitor(a , b)      %  61 =  00111101

c=bitxor(a , b)    %  49 = 00110001

c=bitshift(a , 2)  %  240 = 11110000    */

c= bitshift(a , -2) %   15=0000 1111    */

هنگامی که شما فایل را اجرا می کنید ،نتیجه زیر نمایش داده  می شود :

 379

 

عملیات مجموعه ای در متلب

matlab توابع مختلفی برای عملگرهای مجموعه ای فراهم آورده است ، مانند union ،intersection و تست برای عضو های مجموعه و غیره .

جدول زیر تعدادی از رایج ترین عملگرهای استفاده شده را نشان می دهد :

توصیف تابع
مجموعه ای از تقاطع دوآرایه ؛ مقادیر مشترک دو آرایه a و  b را بر می گرداند.مقادیر مرتب شده رابرمی گرداند. (intersect(a,b
با هر سطرa و هر سطر  b مانند یک کل مجرد رفتار می کند و سطرهای مشترک a و b را برمی گرداند.سطرهای برگردانده شده از ماتریس مرتب هستند. (‘intersect(a,b,’rows
آرایه ای با اندازه یکسان a را باز می گرداند، زمانی 1(درست) را در بر دارد که عناصری از a در b باشند. در غیر اینصورت0(نادرست) را بر می گرداند. (ismember(a,b
با هر سطرa و هر سطر  b مانند یک کل مجرد رفتار می کند و بردار مشترک را برمی گرداند که سطرهایی از ماتریسa که در b هستند.در غیر اینصورت 0(نادرست) را برمی گرداند. (‘is member(a,b,’rows
منطق 1(درست) اگر عناصر a مرتب شده باشند و در غیر اینصورت0(نادرست) را بر میگرداند. ورودی a   می تواند یک بردار یا آرایه ای از رشته ها n  در 1 ,  1در n خانه باشد.a مرتب در نظر گرفته می شود اگر a و خروجی مرتب از(a) برابر باشند. (issorted(a
منطق 1(درست) را برمی گرداند اگر سطر ماتریس دو بعدی a  مرتب شده باشد، و در غیر اینصورت منطق 0(نادرست).ماتریس a  مرتب شده در نظر گرفته می شود اگر خروجی a  و سطر مرتب شده از (a) برابر باشند. (‘issorted(a,’rows
مجموعه متفاوت از دو آرایه:مقادیری از a که در  b نیستند را باز می گرداند.مقادیر برگردانده شده از آرایه مرتب شده هستند. (setdiff(a,b
با هر سطرa و هر سطر  b مانند یک کل مجرد رفتار می کند و سطرهایی از a که در b نیستند را بر می گرداند.سطرهای برگردانده شده ماتریس مرتب شده هستند.گزینه سطرها خانه آرایه ها را پشتیبانی نمی کند. (‘setdiiff(a,b,’rows
مجموعه or انحصاری از دو آرایه setxor
مجموعه اشتراک دو آرایه union
مقادیر منحصر به فرد آرایه unique

مثال

یک فایل اسکریپت ایجاد کنید و کد زیر را وارد نمایید:

a=[723141591282435]

b=[25781416253527]

u = union (a , b)

i= intersect(a , b)

s=setdiff(a , b)

هنگامی که شما فایل را اجرا می کنید ،نتیجه زیر نمایش تولید  می شود :

380

 

خرید کتاب 28 گام موثر در فتح متلب

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *