آموزش ماتریس ها در نرم افزار متلب

عمليات رياضي مابين چند ماتريس در مطلب ( matlab ) :

        جمع و تفريق و تقسيم ماتريس ها زماني ممكن است كه از لحاظ سطر و ستون هم اندازه باشند به عبارت ديگر هم سايز باشند. در  جمع و تفريق دو ماتريس المانهاي اين ماتريس ها بصورت متناظر با هم وارد عمل مي شوند ، در تقسيم و ضرب ماتريس ها به دو صورت مي توان عمل نمود.  اول اينكه اپراتور ضرب (* ) و يا تقسيم ( / ) به تنهائي مابين ماتريس هاي مورد نظر بكار رود كه اين همان ضرب وتقسيم ماتريس ها مطابق قوانين كلي ضرب و تقسيم ماتريس ها مي باشد ؛ دوم اينكه قبل از اپراتور ضرب و تقسيم علامت دات ( . ) بكار ببريم  در اين صورت المان هاي متناظر به هم در ماتريس ها به هم ضرب و تقسيم مي گردند :

مثال زير را در يك  M-File نوشته و اجرا نمائيد  :

clc;

clear all;

g=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] % g is matrix 3*3

h=[1 7 1 11;2 8 2 7;3 2 3 1;1 4 5 -2]; %creat a new matrix

a=g+h  % add h to g an element-by-element basis

b=a-h

c=2*g+h % multiplies g by 2 and subtracts h from the result

d=g.*h % multiplies element-by-element basis

f=g*h

e=g./h %division element-by-element basis

j=g/h % givision two matrix

بعد از اجرا  نتايج زير در صفحه command    مشاهده مي شود :

 

g =

     1     2     3     4

     5     6     7     8

     9    10    11    12

    13    14    15    16

a =

     2     9     4    15

     7    14     9    15

    12    12    14    13

    14    18    20    14

b =

     1     2     3     4

     5     6     7     8

     9    10    11    12

    13    14    15    16

c =

     3    11     7    19

    12    20    16    23

    21    22    25    25

    27    32    35    30

d =

     1    14     3    44

    10    48    14    56

    27    20    33    12

    13    56    75   -32

 

f =

    18    45    34    20

    46   129    78    88

    74   213   122   156

   102   297   166   224

e =

    1.0000    0.2857    3.0000    0.3636

    2.5000    0.7500    3.5000    1.1429

    3.0000    5.0000    3.6667   12.0000

   13.0000    3.5000    3.0000   -8.0000

j =

    1.1075   -1.1022    0.5323    0.5000

    1.4086   -1.1882    1.8226    0.5000

    1.7097   -1.2742    3.1129    0.5000

    2.0108   -1.3602    4.4032    0.5000

 در عليات ضرب ماتريسها  ، بايستي قوانين  مابين سايز سطر وستون ها  را رعايت کرد (  )

حال ميخواهيم مسئله توان رساني ماتريس ها را در نرم افزار matlab مطرح كنيم ، مي توانيم يك ماتريس را به توان يك ماتريس ديگر هم سايز برسانيم.

عمل فوق با قراردادن علامت دات قبل از علامت توان مي باشد ، به مثال زير توجه كنيد :

clc;

clear all;

g=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];% g is matrix3*3

h=[1 7 1 11;2 8 2 7;3 2 3 1;1 4 5 -2]; %creat a new matrix

r=g.^h

t=g.^(h-1)

بعد از اجرای برنامه در matlab داريم :

r =

  1.0e+006 *

    0.0000    0.0001    0.0000    4.1943

    0.0000    1.6796    0.0000    2.0972

    0.0007    0.0001    0.0013    0.0000

    0.0000    0.0384    0.7594    0.0000

t =

  1.0e+006 *

    0.0000    0.0001    0.0000    1.0486

    0.0000    0.2799    0.0000    0.2621

    0.0001    0.0000    0.0001    0.0000

    0.0000    0.0027    0.0506    0.0000

   ماتريسها ي  هماني ( واحد)  و  صفر در مطلب :

       دو ماتريس در عين حال ساده و بسيار كاربردي در  رياضيات و بخصوص در برنامه نويسي ماتريس ها واحد و ماتريس صفر مي اشند ، ما مي توانيم براي  ايجاد توابع خود از اين ماتريسها كمك گرفته و با ايجاد تغييراتي در آنها به ماتريس مورد نظر خود دست يابيم. براي مثال فرض كنيد كه مسئله اي را حل مي كنيد كه شامل يك ماتريس با سايز 1000 ( 1000 سطر وستون ) مي باشد  كه بسياري از المانهاي آن نيز صفر است. براي ايجاد آن شما مي توانيد با يك دستور ساده كه در زير بيان مي گردد،  ابتدا ماتريس صفر 1000 سطر و ستون را ايجاد نموده و سپس المانها و يا آرايه هاي كه غير صفر مي باشند ، با روشهايی كه بيان خواهد شد جايگزين نمائيد .

براي ايجاد يك ماتريس  صفر m*n   دستور يا تابع آن   (zeros(m,n   و برباي ايجاد ماتريس واحد m*n  تابع يا دستور آن (ones(m,n  مي باشد . اگر تعداد سطر وستونها برابر بود ( m=n ) ميتوان دستور فوق رابصورت زير نيز بيان نمود ( zeros(m و   (ones(m  .  بكارگيري اينگونه ماتريس ها از لحاظ اشغال حجم حافظه بسيار سودمند هستند و به مقدار زياد حافظه كامپيوتر را آزاد ميسازند .

مثال  :

a=zeros(3,2)

a =

     0     0

     0     0

     0     0

 

b=ones(4,3)

b =

     1     1     1

     1     1     1

     1     1     1

     1     1     1

 

c=ones(1,5)

c =

     1     1     1     1     1

 

d=zeros(1,4)

d =

     0     0     0     0

 

e=ones(2)

e =

     1     1

     1     1

 

f=zeros(3)

f =

     0     0     0

     0     0     0

     0     0     0

  آدرس دهي آرايه هاي ماتريس در مطلب ( matlab ) :

       حال يك نحوه ايجاد يك ماتريس در مطلب را فرا گرفتيد مي خواهيم به شما بيان كنيم كه چگونه مقدار يك آرايه با شماره سطر وستون مشخص را بگيريد و يا يك مقدار ديگر بجاي آن جايگزين نمائيد و يا يك قسمت از يك ماتريس  بتوانيد عمليات مختلف بر روي آن قسمت انجام دهيد .

براي بيان آرايه خاص از يك ماتريس كافيست مانند بخش آرايه ها عمل كنيد بدين صورت كه ابتدا نام ماتريس و سپس داخل پارانتز شماره سطر و ستون آرايه يا المان مورد نظر را بنويسيد  براي  بيان تعدا د زيادي از آرايه ها هر كجا كه بتوانيد از دستور كالن نيز استفاده نمائيد ، براي درك بهتر به  مثالهاي زير توجه كنيد :

a=[1 5 4 7;6 5 8 4;2 4 8 9;7 4 1 3]

a =

     1     5     4     7

     6     5     8     4

     2     4     8     9

     7     4     1     3

a(1,1)

ans =

     1

a(2,3)

ans =

     8

a(4,3)

ans =

     1

a(1,:)

ans =

     1     5     4     7

a(:,1)

ans =

     1

     6

     2

     7

a(:,:)

ans =

     1     5     4     7

     6     5     8     4

     2     4     8     9

     7     4     1     3

a(2:4,3)

ans =

     8

     8

     1

a(2,1:3)

ans =

     6     5     8

a(4:-1:2,2)

ans =

     4

     4

     5

a(3,3:-1:1)

ans =

 

     8     4     2

با همين روند مي توانيد ماتريس را به دلخواه خود تغيير دهید ، بدين صورت كه بعد از نام ماتريس شماره سطر وستون آرايه مورد نظر را نوشته و معادل با مقدار دلخواه خود قراد دهيد ، مقدار انتخابي شما در ماتريس اصلي بجاي آرايه اي كه سطر و ستون آنرا مشخص نموده ايد ، جايگزين خواهد شد  :

b=[7 8 9;4 5 6;1 2 3]

b =

     7     8     9

     4     5     6

     1     2     3

 

b(3,3)=0

b =

     7     8     9

     4     5     6

     1     2     0

 

b(2,2)=-5

b =

     7     8     9

     4    -5     6

     1     2     0

 

b(:,3)=-1

b =

     7     8    -1

     4    -5    -1

     1     2    -1

 

b(1:3,1:2)=5

b =

     5     5    -1

     5     5    -1

     5     5    -1

 

b(2,3:-1:1)=-4

b =

     5     5    -1

    -4    -4    -4

     5     5    -1

 

b(2,6)=7

b =

     5     5    -1     0     0     0

    -4    -4    -4     0     0     7

     5     5    -1     0     0     0

همانطور كه در آخرين قسمت مثال فوق مشاهدي مي شود (b(2,6)=7 )  در صورتيكه شماره آرايه مورد نظر خارج از سايز ماتريس اصلي باشد مطلب خود اقدام به ايجاد ماتريس با بيشترين سايز سطر و ستون موجود خواهد نمود و آرايه هاي معلوم را جايگزين  و بجاي مقادير نامعلوم مقدار صفر را قرار ميدهد ، ميبيند كه اين امكان به شما توانائي بالاي خواهد بخشيد .

نكته دوم اينكه ماتريس شما هر لحظه بعد از ايجاد تغييرات به صورت جديد در خواهد آمد و اگر شما در برنامه خود ماتريس اصلي نياز پيدا خواهيد كرد كافيست در ابتداي بعد از ايجاد ماتريس اصلي كپي آنرا با نام ديگر ذخيره نمائيد، ايجاد كپي از يك ماتريس بدين صورت است كه بعد از ايجاد ماتريس در خط بعدي برنامه نام ( كپي ) ديگري را نوشته و مساوي با نام ماتريس ايجادي قرار دهيم( h=a ) و يا بطور كلي از يك ماتريس با عمليات رياضي مختلف ميتوان هر چند ماتريس دلخواه مورد نظر ايجاد نمود  مثلا :

b=[7 8 9;4 5 6;1 2 3]

b =

     7     8     9

     4     5     6

     1     2     3

 

c=b  % copy of matrix b

c =

     7     8     9

     4     5     6

     1     2     3

 

d=2*b

d =

 

    14    16    18

     8    10    12

     2     4     6

 

f=b-1

f =

     6     7     8

     3     4     5

     0     1     2

 

e=b^2-1

e =

    89   113   137

    53    68    83

    17    23    29

 هدف از مثالهاي فوق اينست كه هرجا كه بتوانيد از ماتريسها قبلي با ايجاد تغيراتي يا بدون تغييراتي استفاده نمائيد از روند عملياتي رياضي فوق استفاده نمائيد ، چرا كه ايجاد مستقل هركدام از اين ماتريسها حجم حافظه زيادي را اشغال خواهد نمود و با عث پائين آمدن سرعت اجراي برنامه هاي خواهد گشت .

با كمي تفكر مي توان تنوع بسياري در يك ماتريس ايجاد نموده و ماتريس جديد مورد نظر را ايجاد نمود ، به مثالهاي زير همراه با تغييراتي كه ايجاد مي نمايند توجه فرمائيد :

a=[7 8 9;4 5 6;1 2 3]

a =

     7     8     9

     4     5     6

     1     2     3

b=a(3:-1:1,:)

b =

     1     2     3

     4     5     6

     7     8     9

 

c=[a b(:,[1 3])]

c =

     7     8     9     1     3

     4     5     6     4     6

     1     2     3     7     9

 

d=[1 3]

d =

     1     3

 

f=a(d,d)

f =

     7     9

     1     3

 

g=a(:)

g =

     7

     4

     1

     8

     5

     2

     9

     6

     3

 

j=g.'

j =

    7     4     1     8     5     2     9     6     3

 

k=a

k =

     7     8     9

     4     5     6

     1     2     3

 

k(:,2)=[ ]   % delet all of volumn2 of matrix k

k =

     7     9

     4     6

     1     3

 

m=a(:,[2 2 2 2]) %creat of matrix m wih column2 of matrix a

m =

     8     8     8     8

     5     5     5     5

     2     2     2     2

 

m(1:end,2) % you can used end todefind the end of row or column

ans =

     8

     5

     2

گاهي مواقع ميخواهيد ماتريسي در متلب ايجاد نمائيد كه هم اندازه يك ماتريس خاص يكار رفته در برنامه مطلب باشد  مثلا فرض كنيد ماتريس

  [a=[7 8 9;4 5 6;1 2 3  حال مي خواهيم مثلا ماتريس واحدي ايجاد كنيم كه هم اندازه ماتريس a باشد ( اهميت اين مسئله در برنامه هاي كه ماتريسهاي خروجي عظيمي ايجاد مي كنند مانند ماتريس المان بندي يك تير و ...  بسيار مشهود تر خواهد بود ) ، براي اين كار از دستور  ( نام ماتريس ) size  بهره خواهيم جست ، به مثال زير توجه كنيد :

a=[7 8 9;4 5 6;1 2 3];

size(a) % output of this function no. of row and column

ans =

     3     3

 

d=ones(size(a))

d =

     1     1     1

     1     1     1

     1     1     1

 

f=zeros(2,size(a))

f =

     0     0     0

     0     0     0

 

[x y]=size(a)

x =

     3

y =

     3

 

b=ones(x,y)

b =

     1     1     1

     1     1     1

     1     1     1

 

e=zeros(y,x)

e =

     0     0     0

     0     0     0

     0     0     0

 

به مثالهاي زير  كه بيانگر چند دستور كاربردي در ماتريسها در نرم افزار مطلب مي باشند، توجه فرمائيد :

x=-3:3

x =

    -3    -2    -1     0     1     2     3

 

k=find(abs(x)>1)  % finds those subscripts where abs(x)>1

k =

     1     2     6     7

 

y=x(k)  % creates y using the indexes in k.

y =

    -3    -2     2     3

 

a=[7 8 9;4 5 6;1 2 3];

[i j]=find(a>5)

i =

     1

     1

     1

     2

j =

     1

     2

     3

     3

 

r=a(i,j)

r =

     7     8     9     9

     7     8     9     9

     7     8     9     9

     4     5     6     6

 

b=a.*(-1).^a

b =

    -7     8    -9

     4    -5     6

    -1     2    -3

 

c=1:9

c =

     1     2     3     4     5     6     7     8     9

 

isequal(a,c) %find array of matrixs is equal or no a==c response is 0 or 1

ans =

     0

 

 

isequal(a,a)

ans =

     1

همانطور كه از مثالهاي فوق مشاهده ميگردد  دستور   (isequal(a,bدو ماتريس a,b را با هم مقايسه ميكند در صورتيكه از تمامي جهات يكسان بودند عدد يك را بر ميگرداند كه نماينگر صحيح بودن است و اگرعدد صفر را برگرداند به معني اينكه اشتباه است و يا ايندو يكي نيستند ميباشد .

مواقعي پيش ميايد كه ما ميخواهيم در يك نگاه سريع آرايه هاي دو يا چند ماتريس را  به طور متناظر مقايسه كنيم و بدانيم كه آرايه از ماتريسي مانند a آيا با آرايه متناظر خود در ماتريس b برابر هست يا نه ،  براي اين منظور از دستور (ismember(a,b   استفاده مي نمائيم  براي آرايه هاي يكسان عدد 1 و براي غير يكسانها عدد 0 را برمي گرداند  :

a=[1 2 3;4 5 7;8 9 4];

b=[5 2 5;2 5 3;8 4 4];

c=[9 8 3;6 5 7;3 9 1];

 

ismember(a,b)

ans =

     0     1     1

     1     1     0

     1     0     1

 

ismember(a,c)

ans =

     1     0     1

     0     1     1

     1     1     0

 

ismember(c,b)

ans =

     0     1     1

     0     1     0

     1     0     0

دستور union(a,b)  به معناي اجتماع دو بردار يا وكتور ميباشد (  ) :

a=[1 2 3;4 5 7;8 9 4];

b=[-12 5 2 5];

c=[9 8 3 100];

union(b,c)

ans =

    -12     2     3     5     8     9   100

در بكارگيري اين دستور براي ماتريس  بايستي عبارت rows با columns براي مشخص كردن مقايسه سطري و يا ستوني نوشته شود :

a=[1 2 3 ;4 5 7; 8 9 4];

b=[5 2 5 ;2 5 3 ;8 4 4];

union(a,b,'rows')

 

ans =

 

     1     2     3

     2     5     3

     4     5     7

     5     2     5

     8     4     4

     8     9     4

دستور (intersect(a,b   به معناي اشتراك دو بردار يا وكتور مي باشد ( ) :

a=[1 2 3 4 5 7 8 9 4];

b=[5 2 5 2 5 3 8 4 4];

intersect(a,b)

ans =

      2     3     4     5     8

به نحوه عملكرد اين دستور در مورد ماتريس توجه فرمائيد :

a=[1 2 3 ;4 5 7; 8 9 4];

b=[1 2 3 ;4 5 7 ;8 4 4];

 

intersect(a,b,'rows')

ans =

     1     2     3

     4     5     7

دستور (setdiff(a,b  به معناي آرايه هاي كه در بردار يا وكتور a هست ولي در b نيست :

a=[1 2 3 4 5 7 8 9 4];

b=[5 2 5 2 5 3 8 4 4];

 

setdiff(a,b)

ans =

      1     7     9

در مورد ماتريس :

a=[1 2 3 ;4 5 7; 8 9 4];

b=[5 2 5 ;2 5 3 ;8 4 4];

 

setdiff(a,b,'rows')

ans =

     1     2     3

     4     5     7

     8     9     4

 

a = [-1 0 1 Inf -Inf NaN];

b = [-2 pi 0 Inf];

 

c = setxor(a,b) % exclusive OR of two array,sorted

c =

  -Inf   -2.0000   -1.0000    1.0000    3.1416     NaN

در مورد بكارگيري در ماتريسها داريم :

a=[1 2 3 ;4 5 7; 8 9 4];

b=[5 2 5 ;2 5 3 ;8 4 4];

 

setxor(a,b,'rows') % exclusive OR pf two arrays , sorted.

ans =

     1     2     3

     2     5     3

     4     5     7

     5     2     5

     8     4     4

     8     9     4

 

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

دیدگاه پس از تائید مدیریت منتشر می شود.