تبليغاتX
دیبا الکترونیک

ماتریس ها و اعمال ماتریسی

 

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

 

ارجاع به درایه های منفرد :

 درایه های منفرد ماتریس و بردار را می توان با اندیس های درون پرانتز ارجاع داد.

 مثلا A(2,3) درایه سطر دوم و ستون سوم ماتریسA را نشان می  دهد.

A = [1 2 3; 4 5 6; -18 9]

سپس بردار ستونی X به دو صورت زیر نمایش داده می شود:

X = [3 2 1]'

X = [3; 2; 1]

 

 

با این بردار x(3) مولفه دوم بردار x را نشان می دهد که مقدار آن 1 است. آرایه های با ابعاد بالاتر نیز به طور مشابه اندیس دهی می شوند. ماتریس یا بردار تنها مقادیر صحیح مثبت را به عنوان اندیس می پذیرد.

آرایه دو بعدی را نیز می توان مانند برداری یک بعدی اندیس دهی نمود. اگرA  ماتریسی n*m باشد A(i,j)  مشابه A(i+(j-1)*m) می باشد. این ویژگی کاملا با توابع find استفاده می شود.

(در درس آینده در مورد این تابع توضیحات بیشتری خواهم داد.)

 

عملگرهای ماتریس :

عملکردهای ماتریس زیر در Matlab  قابل استفاده هستند.

جمع کردن                                             +

تفریق کردن                                            -

ضرب کردن                                             *

توان                                                     ^

ترانهاده خروج(مختلط) یا ترانهاده (حقیقی)     ا

ترانهاده (حقیقی یا مختلط)                        ا.

تقسیم چپ                                            \

تقسیم راست                                         /

 

البته این عملکردهای ماتریسی را می توان به اسکالرها (1*1) هم اعمال نمود. در صورتی که ابعاد ماتریس ها برای عملیات ماتریسی مناسب نباشد. پیغام خطایی ظاهر می گردد . مگر برای عملیات اسکالر _ برداری (برای +،- ،/ ،و ضرب) در این حالت ها با هر کدام از این درایه های ماتریس مانند یک اسکالر رفتار می گردد

دستورات زیر را امتحان کنید:A^2 , A*X

 

تقسیم ماتریس :

عملیات تقسیم ماتریس نیاز به توضیح ویژه ای دارد در صورتی که A ماتریسی مربعی و قابل معکوس سازی باشد و b بردار ستونی یا سطری مناسب باشد به ترتیب x=b/a حل x*a=b و x=a/b حل x*b=a می باشد. در صورتی که A مربعی و غیر منفرد باشد، b/a=a/b از لحاظ ریاضی به ترتیب مانند inv(A)*b و b*inv(A) می باشند که inv(A) معکوس A را محاسبه می کند.

عملکردهای تقسیم چپ و راست بسیار دقیق و کارآمد می باشند در تقسیم چپ در صورتی که A مربعی باشد، فاکتور گیری به روش حذف گوس انجام می گردد و این فاکتورها برای حل A*x=b مورد استفاده قرار می گیرند در صورتی که A مربعی نباشد سیستم under-determined یا

 Over-determined به روش حداقل مربعات حل می شود تقسیم راست را می توان بر مبنای تقسیم چپ به صورت b/a = (A'\B') تعریف نمود.

دستورات زیر را امتحان کنید:

A = [1 2 ; 3 4]

B = [4 10]

X = A\b

پاسخ A*X=B بردار ستونی[2 ;1] =x می باشد

ماتریسی =M

 

عملگرهای درایه ای :

جمع و تفریق ماتریسی از ابتدا به صورت درایه ای عمل می کنند ولی دیگر عملکردهای ماتریسی چنین نیستند اگر بخواهیم بقیه عملکردهای m (* ،^ ،/ ،\ ) به صورت درایه ای عمل کنند باید قبل از آن ها نقطه ای قرار گیرد به عنوان مثال

[1 2 3 4].*[1 2 3 4]

یا

[1 2 3 4].^ 2

 

به [1 4 9 16] منجر خواهد شد. در آینده خواهیم گفت که این ویژگی بویژه هنگام استفاده از گرافیک مفید خواهد بود.

 

 

+ نوشته شده توسط مریم در دوشنبه 25 اردیبهشت1385 و ساعت 0:45 |
آرايه هاي ساده

MATLAB آرايه ها را به روش ساده اي ايجاد مي کند. به مثال زير توجه کنيد:

>> a = [1 2 3 4 5]

a =

     1     2     3     4     5

>> a = [1,2,3,4,5]

a =

     1     2     3     4     5

در هر دو قسمت اين مثال ما آرايه اي به نام a ساختيم که شامل اعداد صحيح از 1 تا 5 مي باشد. و يا:

>> a = [pi 2*pi 3*pi 4*pi 5*pi 6*pi 7*pi]

a =

    3.1416    6.2832    9.4248   12.5664   15.7080   18.8496   21.9911

حال شما مي توانيد عملياتي را روي اين آرايه انجام دهيد. مثلاً:

>> b = sin(a) + cos(a)

b =

   -1.0000    1.0000   -1.0000    1.0000   -1.0000    1.0000   -1.0000

ملاحظه مي کنيد که عمليات روي تک تک عناصر اين آرايه انجام مي شوند در نتيجه b هم آرايه اي شبيه به a خواهد بود.

هر کدام از عناصر يک آرايه داراي انديس مربوط به خود مي باشد که بوسيله همين انديس مي توان مستقيماً به آن عنصر دست يافت:

>> a(2)

ans =

    6.2832

>> a(end)

ans =

   21.9911

در قسمت اول اين مثال عددي که در داخل پرانتز قرار گرفته است همان شماره انديس آن عنصر در آرايه است.(از سمت چپ به راست) و در قسمت دوم همانطور که مي بينيد اگر بخواهيم به آخرين عنصر آرايه دست پيدا کنيم کافيست عبارت end را درون پرانتز وارد کنيم. اين روش بدرد زماني مي خورد که تعداد عناصر آرايه را ندانيم.

همچنين مي توانيد به يک بلوک از عناصر آرايه دست يابيد:

>> a(1:3)

ans =

    3.1416    6.2832    9.4248

>> a(4:-1:1)

ans =

   12.5664    9.4248    6.2832    3.1416

>> a(1:2:5)

ans =

    3.1416    9.4248   15.7080

به نمادگزاري ها خوب دقت کنيد: در قسمت اول, عناصر اول تا سوم اين آرايه خواسته شده است. توجه داشته باشيد که مي توانيد بجاي دومين عدد از عبارت end هم استفاده کنيد. مثلاً (2:end) عناصر دوم تا آخر اين آرايه را برمي گرداند.

در قسمت دوم توجه داشته باشيد که علامت (m:k:n) بيانگر اين است که از عنصر mام شروع کن k تا k تا برو جلو تا برسي به عنصر nام. پس در اين قسمت از عنصر چهارم شروع کرديم يکي يکي عقب آمده تا به عنصر اول رسيديم. توجه کنيد که علامت منفي به معناي حرکت رو به عقب مي باشد. (استفاده از k = -1 يک تکنيک است براي برعکس کردن آرايه.) به همين ترتيب در قسمت سوم از عنصر اول شروع کرده 2تا 2تا شروع کرده ايم تا به عنصر پنجم رسيديم. يعني عناصر اول و سوم و پنجم را نمايش داده ايم.

روش ديگري هم براي نمايش عناصر دلخواه در MATLAB داريم:

>> a([1 3 4 5])

ans =

    3.1416    9.4248   12.5664   15.7080

>> a([1:3 end])

ans =

    3.1416    6.2832    9.4248   21.9911

>> a([1 1 1 2])

ans =

    3.1416    3.1416    3.1416    6.2832

به ترتيب قرار گيري کروشه و پرانتز خوب دقت کنيد. در قسمت اول, عناصر اول و سوم و چهارم و پنجم خواسته شده است. در قسمت دوم از تکنيکهاي سابق هم استفاده کرده عناصر اول تا سوم و نيز عنصر آخري هم نمايش داده شده است. و در قسمت سوم به اين نکته تاکيد شده است که مي توانيم يک عنصر را چند بار نمايش دهيم, پس آرايه اي از سه بار تکرار عنصر اول به همراه عنصر دوم ساخته ايم.

حال مي توانيم آرايه a را به روش ساده تري هم درست کنيم:

>> a = (1:1:7)*pi

a =

    3.1416    6.2832    9.4248   12.5664   15.7080   18.8496   21.9911

فکر نمي کنم نياز به توضيح باشد!

روش ديگري هم براي توليد آرايه وجود دارد. در اين روش, عنصر اول, عنصر آخر و تعداد کل عناصر آرايه بايد دانسته شود. شکل کلي اين تابع بصورت زير است:

linspace(m,n,k)

در اين تابع اولين عنصر آرايه برابر m, آخرين عنصر برابر n و کل تعداد عناصر آرايه k تا است. مثلاً:

>> a=linspace(pi,7*pi,7)

a =

    3.1416    6.2832    9.4248   12.5664   15.7080   18.8496   21.9911

نتيجه همان آرايه قبلي است.

جهت آرايه ها:

تمامي آرايه هايي را که تا حالا مشاهده کرديد آرايه هاي سطري بودند. با MATLAB آرايه هاي ستوني را هم به آساني مي توان ساخت.

به مثال زير توجه کنيد:

>> a=[1;2;3;4]

a =

     1

     2

     3

     4

>> 

پس ملاحظه کرديد که با قرار دادن علامت ; بين داده هاي يک آرايه مي توان يک آرايه ستوني ايجاد کرد.

اگر هنگام وارد کردن داده هاي يک آرايه بعد از هر عنصر کليد Enter را بزنيد نيز مي توانيد يک آرايه ستوني توليد کنيد:

>> a=[1

2

3

4]

a =

     1

     2

     3

     4

>> 

راه ديگر توليد آرايه ستوني, توليد آرايه سطري و سپس ترانهاده گرفتن از آن مي باشد:

>> a=[1 2 3 4]

a =

     1     2     3     4

>> b=a.'

b =

     1

     2

     3

     4

>> 

همانطور که مي دانيد عملگر ' ترانهاده يک آرايه را برمي گرداند. سعي کنيد هميشه از علامت نقطه قبل آن استفاده نماييد. اگر از نقطه استفاده نکنيد در صورتيکه در آرايه از عدد مختلط استفاده کرده باشيد در آرايه ترانهاده, آن عدد بصورت مزدوج عدد اصلي خود نمايش داده خواهد شد:

>> a=[1 2 3 4]

a =

     1     2     3     4

>> b=a+a*i

b =

   1.0000 + 1.0000i   2.0000 + 2.0000i   3.0000 + 3.0000i   4.0000 + 4.0000i

>> b'

ans =

   1.0000 - 1.0000i

   2.0000 - 2.0000i

   3.0000 - 3.0000i

   4.0000 - 4.0000i

>> b.'

ans =

   1.0000 + 1.0000i

   2.0000 + 2.0000i

   3.0000 + 3.0000i

   4.0000 + 4.0000i

>> 

آرايه ها مي توانند سطرها و ستونهاي متعددي هم داشته باشند که نتيجه آن ساخته شدن ماتريسها مي باشد. از علامت ; براي جداسازي سطرهاي يک ماتريس مي توانيد استفاده کنيد. توجه داشته باشيد که تعداد عناصر سطرها در يک ماتريس حتماً بايد برابر باشند وگر نه MATLAB پيغام خطاي زير را خواهد داد:

All rows in the bracketed expression must have the same number of columns.

خوب! همانطور که مي دانيد در MATLAB مي توان محاسبات عددي بر روي آرايه ها انجام داد که اين محاسبات بر روي تک تک عناصر آرايه انجام مي شوند:

> a=[1 2 3 4]

a =

     1     2     3     4

>> 2*sin(a)+sqrt(5)/3

ans =

    2.4283    2.5640    1.0276   -0.7682

>> 

و اما محاسبات آرايه اي در آرايه ها:

در دو ماتريس هم اندازه مي توان بر روي عناصر نظير به نظير, عمليات محاسباتي هم انجام داد. به مثالهاي زير توجه کنيد:

>> a=[1 1 3;2 -1 0]

a =

     1     1     3

     2    -1     0

>> b=[-1 2.2 0;2.1 -1.3 0.8]

b =

   -1.0000    2.2000         0

    2.1000   -1.3000    0.8000

>> a.*b

ans =

   -1.0000    2.2000         0

    4.2000    1.3000         0

>> b./a

Warning: Divide by zero.

ans =

   -1.0000    2.2000         0

    1.0500    1.3000       Inf

>> 2./a

Warning: Divide by zero.

ans =

    2.0000    2.0000    0.6667

    1.0000   -2.0000       Inf

>> 2.^a

ans =

    2.0000    2.0000    8.0000

    4.0000    0.5000    1.0000

>> a.^b

ans =

   1.0000             1.0000             1.0000         

   4.2871            -0.5878 + 0.8090i        0         

>> 

در اينجا ابتدا ماتريسهاي a و b را تعريف نموديم سپس عناصر a و b را نظير به نظير در هم ضرب کرديم. در قسمت بعد عناصر b را نظير به نظير بر عناصر a تقسيم کرديم. اخطاري که در اين قسمت توسط MATLAB  به کاربر داده مي شود اين است که يکي از تقسيمها, تقسيم يک عدد است بر صفر که نتيجه آن بصورت Inf نشان داده مي شود. سپس عدد 2 بر هر کدام از عناصر ماتريس a تقسيم شده است. در قسمت بعد عدد 2 را به توان هر کدام از عناصر ماتريس a رسانده شده است و در آخرين قسمت عناصر ماتريس a را بصورت نظير به نظير به توان عناصر ماتريس b رسانديم.

توجه داشته باشيد که براي انجام دادن اينگونه محاسبات بين 2 ماتريس, حتماً بايد اندازه هاي ماتريسها برابر باشند, در غير اينصورت MATLAB پيغام خطاي زير را مي دهد:

Matrix dimensions must agree.

معرفي چند آرايه استاندارد:

2 تابع ones(n,r) و zeros(n,r) وجود دارند که اولي يک ماتريس n*r با عناصر يک و دومي ماتريس n*r با عناصر صفر مي سازد:

>> ones(2,3)

ans =

     1     1     1

     1     1     1

>> zeros(2)

ans =

     0     0

     0     0

>> 

توجه کنيد در قسمت دوم که فقط يک آرگومان به اين تابع نسبت داده شده است MATLAB يک ماتريس n*n را توليد خواهد کرد.

تابع ديگر, تابع eye است که ماتريس هماني توليد مي کند:

>> eye(3)

ans =

     1     0     0

     0     1     0

     0     0     1

>> eye(2,3)

ans =

     1     0     0

     0     1     0

>> eye(5,3)

ans =

     1     0     0

     0     1     0

     0     0     1

     0     0     0

     0     0     0

>> 

توجه کنيد در استفاده از اين تابع اگر ماتريس شما مربعي بود که عناصر قطر اصلي آن برابر يک و ساير عناصر, صفر خواهند بود و اگر مربعي نبود همانطور که در مثالهاي بالا مشاهده مي شود MATLAB تا جايي که راه داشته باشد عناصر قطر اصلي را يک مي گزارد و ساير عناصر ماتريس برابر صفر خواهند بود.

2 تابع مهم ديگر وجود دارند: rand(n,r) و randn(n,r) که اولي ماتريس n*r با عناصر تصادفي بين صفر و يک توليد مي کند و دومي اعدادي تصادفي که از توزيع نرمال استاندارد پيروي مي کنند را توليد مي کند:

>> rand(3)

ans =

    0.9501    0.4860    0.4565

    0.2311    0.8913    0.0185

    0.6068    0.7621    0.8214

>> randn(3,6)

ans =

   -0.4326    0.2877    1.1892    0.1746   -0.5883    0.1139

   -1.6656   -1.1465   -0.0376   -0.1867    2.1832    1.0668

    0.1253    1.1909    0.3273    0.7258   -0.1364    0.0593

>> 

ادامه بحث را در درس بعدي پي مي گيريم

+ نوشته شده توسط مریم در یکشنبه 24 اردیبهشت1385 و ساعت 11:6 |


Powered By
BLOGFA.COM






Powered by WebGozar