يساوي7
أهلا وسهلا بك عزيزي الزائر في منتدى يساوي7 للرياضيات
يمكنك التسجيل لدينا من خلال هذه النافذة لتستفيد أكثر من المواضيع المطروحة
وشكرا جزيلا لك

انضم إلى المنتدى ، فالأمر سريع وسهل

يساوي7
أهلا وسهلا بك عزيزي الزائر في منتدى يساوي7 للرياضيات
يمكنك التسجيل لدينا من خلال هذه النافذة لتستفيد أكثر من المواضيع المطروحة
وشكرا جزيلا لك
يساوي7
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

ضرب المصفوفات(1)

اذهب الى الأسفل

ضرب المصفوفات(1) Empty ضرب المصفوفات(1)

مُساهمة من طرف محمد جهاد الجبارين الأحد ديسمبر 01, 2013 9:35 am

ضرب المصفوفات :
تعلمنا سابقا أنه لكي تتم عملية جمع المصفوفات \ المتجهات العددية يشترط برنامج MATLAB تساوي أبعادها أو عدد عناصرها.
أما عند إجراء عملية ضرب مصفوفتين في برنامج MATLAB ولنفترض أن لدينا مصفوفتين A&B , فشرط ضربهما هو أن يكون عدد أعمدة المصفوفة الأولي  A يساوي عدد صفوف المصفوفة الثانية B , كما هو موضح في المعادلة التالية :
ضرب المصفوفات(1) MATLAB27_03_thumb
حيث أن :
M : يمثل عدد صفوف المصفوفة الأولي [A] وn يمثل عدد أعمدتها.
N : يمثل عدد صفوف المصفوفة الثانية  و R يمثل عدد أعمدتها.
وبالفعل فقد تحقق شرط ضرب المصفوفتين A,B حيث أن عدد أعمدة المصفوفة الأولي [A] يساوي عدد صفوف المصفوفة الثانية  يساوي n.
مع ملاحظة أن المصفوفة الناتجة [C] عن عملية الضرب هي مصفوفة عدد صفوفها هو عدد صفوف المصفوفة الأولي [A] وعدد أعمدتها هو عدد أعمدة المصفوفة الثانية .
ولتوضيح كيفية إجراء عملية ضرب مصفوفتين , تابع المثال التالي :
* قم بتعريف المصفوفة A وهي مصفوفة من الدرجة (3*2) كما يلي :
[b]
[ltr]<< % defining anon square matrix [A][/ltr]
[ltr]<< A = [1  3 2 ;4  6 5][/ltr]
[ltr]A =[/ltr]
[ltr]          1     3    2[/ltr]
[ltr]           4    6     5[/ltr]
[/b]
قم بتعريف المصفوفة b وهي مصفوفة من الدرجة (2*3) كما يلي :
[b]
[ltr]<< % defining anon square matrix   [/ltr][b]
[ltr]<< B=[2  1;3  2;7 1][/ltr]
[ltr]B =[/ltr]
[ltr]2       1[/ltr]
[ltr]3         2[/ltr]
[ltr]7          1[/ltr]
[/b][/b]
* نلاحظ من الخطوتين السابقتين أن عدد أعمدة المصفوفة الأولي [A] يساوي عدد صفوف المصفوفة الثانية يساوي n مما يحقق شرط إجراء عملية الضرب للمصفوفتين B,A كما يلي :
[b][b][b]
[ltr]<< % c=a*b[/ltr]
[ltr]C  =[/ltr]
[ltr]         25       9[/ltr]
[ltr]          61       21[/ltr]
[/b][/b][/b]
لنلاحظ أنه قد تم إجراء عملية الضربق وأن المصفوفة [c] الناتجة من عملية الضرب هي مصفوفة عدد صفوفها هو عدد صفوف المصفوفة الأولي [A] وعدد أعمدتها هو عدد أعمدة المصفوفة الثانية .
كيف تتم عملية ضرب مصفوفتين :
تتم عملية ضرب مصفوفتين بضرب عناصر الصف الأول من المصفوفة الأولي [a] في العناصر المناظرة لها في العمود الأول من المصفوفة الثانية  مع الجمع لينتج العنصر الأول (في الصف الأول والعمود الأول ) من المصفوفة [C] (مصفوفة ناتج عملية الضرب) , كما يلي :
[b][b][b][b][b]
[ltr]1*2+3*3+2+_7 = 25[/ltr]
[/b][/b][/b][/b]
وبالمثل يتم الحصول علي العنصر الثاني في الصف الأول والعمود الثاني للمصفوفة c بضرب عناصر الصف الأول من المصفوفة الأولي [a] في العناصر المناظرة لها في العمود الثاني من المصفوفة الثانية  مع الجمع , كما يلي :
[b][b][b][b][b]
[ltr]1*2+3*3+2*7 = 25[/ltr]
[/b][/b][/b][/b]
وبالمثل يتم الحصول علي العنصر الثاني في الصف الأول والعمود الثاني للمصفوفة c بضرب عناصر الصف الأول من المصفوفة الأولي [A] في العناصر المناظرة لها في العمود الثاني من المصفوفة الثانية  مع الجمع , كما يلي :
[b][b][b][b][b]
[ltr]1*+3*2=2*1 = 9[/ltr]
[/b][/b][/b][/b]
ونستمر هكذا حتي يتم الإنتهاء من إجراء عملية ضرب المصفوفتين .
ملحوظة : ذكرنا أن الشرط اللازم توافره لضرب مصفوفتين هو أن يكون عدد أعمدة المصفوفة الأولي يساوي عدد صفوف المصفوفة الثانية وإلا سيقوم البرنامج بعرض رسالة خطأ تفيدك بعدم توافق أبعاد المصفوفتين لإجراء عملية الضرب كما في المثال التالي  :
[b][b][b][b]
[ltr]<< x =[1 3  5;2    4 6][/ltr]
[ltr]x  =[/ltr]
[ltr]1      3    5[/ltr]
[ltr]2      4     6[/ltr]
[ltr]<< Y = [5  3   1;6  4  2][/ltr]
[ltr]Y  =[/ltr]
[ltr]       5        3     1[/ltr]
[ltr]       6        4      2[/ltr]
[ltr]       <<  Z=X*Y[/ltr]
[ltr]??? error    using  ==  <  mtimes[/ltr]
[ltr]Inner  matrix  dimensions  must  agree.[/ltr]
[/b][/b][/b][/b]
ولكن قد يكون هدف المستخدم هو ضرب كل عنصر من عناصر المصفوفة الأولي في العنصر المناظر له في المصفوفة الثانية element by element multiplication , ويتحقق هذا بشرط أن يتساوي أبعاد المصفوفتين المراد ضرب عناصرها المتقابلة , وهذا محقق بطبيعة الحال في هذا المثال , أو أن يكون أحد المصفوفتين  قيمة عددية مفردة Scalar وتتحقق هذه العملية بإضافة علامة النقطة (.)dot قبل علامة عملية الضرب (*) كما في المثال التالي :
[b][b][b][b]
[ltr]<< z=x.*y[/ltr]
[ltr]z =[/ltr]
[ltr]     5          9       5[/ltr]
[ltr]     12        16      12[/ltr]
[/b][/b][/b][/b]
وكما نلاحظ أننا حصلنا علي مصفوفة لها نفس أبعاد المصفوفتين X,Y , حيث تم ضرب كل عنصر من عناصر المصفوفة X في العنصر المناظر له في المصفوفة Y , لتنتج المصفوفةz والتي لها نفس أبعاد المصفوفتين Y,X , وينطبق ذلك أيضا علي عملية القسمة من اليسار إلي اليمين (القسمة اليسارية) أو القسمة العكسية من اليمين إلي اليسار (اليمينية) وعملية رفع المصفوفات إلي قوة.
وبالمثل يمكننا ضرب القيمة العددية المفردة 2 في كل عنصر من عناصر المصفوفة x بحيث تتم عملية الضرب عنصرا بعنصر element by element multiplication كما يلي :
[b][b][b][b]
[ltr]<<  % w = 2. *x  = 2*x[/ltr]
[ltr]<< w=2. *x[/ltr]
[ltr]w  =[/ltr]
[ltr]       2       6      10[/ltr]
[ltr]       4       8       12[/ltr]
[/b][/b][/b][/b]
لنلاحظ بأن البرنامج قام بضرب القيمة العددية المفردة 2 في جميع عناصر المصفوفة X عنصرا بعنصر element by element multication لتنتج المصفوفة   w   التي لها نفس أبعاد المصفوفة X   .
لذا فالعمليات الرياضية بين الأعداد المفردة scalars وبين المصفوفات matrices والمتجهات vectors(كالجمع والطرح والقسمة) تتم بطريقة طبيعية كما لو كانت عمليات رياضية بين أعداد مفردة فقط , حيث يقوم البرنامج ببساطة بتطبيق العملية الحسابية علي كافة عناصر المصفوفة كما في المثال التالي :
[b][b][b][b]
[ltr]<<  x =[1  3  5;2  4  6];[/ltr]
[ltr]<< 3*x\2-1[/ltr]
[ltr]ans  =[/ltr]
[ltr]        0.5000         3.5000        6.5000[/ltr]
[ltr]        2.000           5.0000        8.0000[/ltr]
[/b][/b][/b][/b]
وفيه يتم ضرب كل عنصر من عناصر X في العدد المفرد 3 ثم تقسيم كل من عناصر المصفوفة الناتجة علي العدد المفرد 2 وأخيرا يتم طرح 1 من كل عنصر من نتيجة العملية السابقة.
لاحظ أن العمليات الرياضية بين المصفوفات والأعداد المفردة تتبع نفس ترتيب الأولويات المستخدمة في التعبيرات الرياضية بين الأعداد المفردة , وأنه يمكن استخدام الأقواس عند الرغبة في تغيير ترتيب العمليات كما يلي :
[b][b][b][b]
[ltr]<< 3* (X-1) \2[/ltr]
[ltr]ans  =[/ltr]
[ltr]                0        3.0000          6.0000[/ltr]
[ltr]1.5000                4.5000          7.5000[/ltr]
[/b][/b][/b][/b]
وفيه يتم طرح العدد المفرد 1    من كل عنصر من عناصر المصفوفة X أولا ثم تقسيم كل من عناصر المصفوفة الناتجة علي العدد المفرد 2 وأخيرا يتم ضرب 3 في كل عنصر من نتيجة العملية السابقة.
ضرب المتجهات :
عند الشروع في إجراء عملية الضرب العادية بين متجهين صفيين, سيقوم البرنامج بعرض رسالة خطأ تفيدك بعدم إمكانية ضرب المتجهين لعدم توافق أبعادهما (لأن الشرط السابق ذكره لإجراء عملية الضرب لم ينطبق علي الكتجهين الصفيين) وهو أن يكون عدد أعمدة المصفوفة الأولي يساوي عدد صفوف المصفوفة الثانية , وهذا غير محقق في المثال التالي :
[b][b][b][b]
[ltr]<< % defining a  row  vector  [X][/ltr]
[ltr]<< X = [1  3 5 7 9 ];[/ltr]
[ltr]<<  % defining a row vector  [Y][/ltr]
[ltr]<< Y = [2  4  6  8  10];[/ltr]
[ltr]<<  Z=X*Y[/ltr]
[ltr]??? error using == <  mtimes[/ltr]
[ltr]Inner matrix dimensions must agree.[/ltr]
[/b][/b][/b][/b]
في حين أنه بإمكاننا ضرب كل عنصر من عناصر المتجه X في العنصر المناظر له في المتجه Y , ولكن يجب أن يكون الكتجهان X,Y  المراد ضربهما لهما نفس الأبعاد , وهذا محقق بطبيعة الحال في هذا المثال أو أن يكون أحدهما قيمة عددية مفردة Scalar ولتنفيذ هذه العملية نقوم بإضافة نقطة (.) Dot قبل علامة عملية الضرب (*) كما يلي :
[b][b][b][b]
[ltr]>> % Defining a Row Vector [X][/ltr]
[ltr]>> X= [ 1        3      5      7      9] ;[/ltr]
[ltr]>> % Defining  a Row Vector [Y][/ltr]
[ltr]>> Y= [ 2        4      6      8      10] ;[/ltr]
[ltr]>> Z=X.*Y[/ltr]
[ltr]Z =[/ltr]
[ltr]        2      12    30    56    90[/ltr]
[/b][/b][/b][/b]
وبالفعل نلاحظ أن قيم عناصر المتجه Z هي عبارة عن حاصل ضرب كل عنصر من عناصر المتجه X في نظيره من المتجه Y كما يلي :
[b][b][b][b]
[ltr]Z(1) =X(1)*Y(1)[/ltr]
[ltr]Z(2) =X(2)*Y(2)[/ltr]
[ltr]Z(3) =X(3)*Y(3)[/ltr]
[/b][/b][/b][/b]
وبالمثل يمكننا ضرب القيمة العددية المفردة 3 في جميع عناصر المتجه الصفي X بحيث تتم عملية الضرب عنصرا بعنصر Element By Element Multiplication كما يلي :
[b][b][b][b]
[ltr]>> W=3.*X[/ltr]
[ltr]W =[/ltr]
[ltr]        3      6      15    21    27[/ltr]
[/b][/b][/b][/b]
ملحوظة : يمكنك إجراء عملية الضرب بين متجهين بشرط أن يكون أحدهما متجه صفي Row Vector والأخر عمودي Column Vector وأن يكون لهما نفس عدد العناصر كما يلي :
[b][b][b][b]
[ltr]>> % Defining a Row Vector [X] of 5 elements[/ltr]
[ltr]>> X= [1         3      5      7      9] ;[/ltr]
[ltr]>> % Defining a column vector [Y] of 5 elements[/ltr]
[ltr]>> Y=[2;4;6;8;10] ;[/ltr]
[ltr]>> % Z=X*Y[/ltr]
[ltr]>> Z=X*Y[/ltr]
[ltr]Z =[/ltr]
[ltr]        190[/ltr]
[/b][/b][/b][/b]
محمد جهاد الجبارين
محمد جهاد الجبارين
عضو متقدم
عضو متقدم

عدد المساهمات : 1448
تاريخ التسجيل : 11/11/2013
العمر : 22
الموقع : الدوارة\سعير \ الخليل
العمل/الترفيه العمل/الترفيه : طالب مجتهد
المزاج المزاج : ممتاز

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى