Download as pdf or txt
Download as pdf or txt
You are on page 1of 28

‫الفصل الثالث‬

‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬


‫‪ .1‬استخالص عناصر من شعاع أو مصفوفة _______________________________ ‪94‬‬

‫‪/‬‬
‫‪ .1 .1‬استخدام رقم الترتيب (‪ )Index Number‬الستخالص عناصر شعاع _________________ ‪94‬‬

‫‪ie‬‬
‫‪ .1 .2‬استخدام عامل النقطتين (‪94 _____________________________ )Colon Operator( ):‬‬

‫‪ad‬‬
‫‪ .1 .3‬استخالص عنصر ما من مصفوفة _____________________________________ ‪11‬‬
‫‪ .1 .3 .1‬الترتيب المفرد (‪11 _____________________________:)Single Index Number‬‬

‫‪af‬‬
‫‪ .1 .3 .2‬الترتيب المزدوج____________________________________________ ‪11‬‬

‫‪ls‬‬
‫‪ .2‬استخدام التابع ‪65 _________________________________________ meshgrid‬‬

‫‪r.a‬‬
‫‪ .3‬مصفوفات خاصة ______________________________________________ ‪56‬‬
‫‪/d‬‬
‫‪ .3 .1‬مالحظات هامة على تابع )‪11 _____________________________________ diag(A‬‬
‫‪om‬‬

‫‪ A .3 .1 .1‬عبارة عن مصفوفة ________________________________________ ‪11‬‬


‫‪ A .3 .1 .2‬عبارة عن شعاع __________________________________________ ‪12‬‬
‫‪.c‬‬

‫‪ .9‬العمليات على المصفوفات _________________________________________ ‪53‬‬


‫‪ok‬‬

‫‪ .9 .1‬المنقول (‪13 _____________________________________________)Transpose‬‬


‫‪bo‬‬

‫‪ .9 .2‬الضرب السلمي (‪13 __________________________ )Scalar Product or Dot Product‬‬


‫‪ .9 .3‬ضرب المصفوفات ______________________________________________ ‪16‬‬
‫‪ce‬‬

‫‪ .9 .9‬رفع المصفوفة إلى قوة (‪16 ________________________________ )Matrix Powers‬‬


‫‪ .9 .1‬عكس أو قلب مصفوفة (‪16 ________________________________ )Matrix Inverse‬‬
‫‪.fa‬‬

‫‪ .9 .1‬محدد مصفوفة (‪14 ______________________________________ )Determinant‬‬


‫‪w‬‬

‫‪ .9 .6‬الضرب الشعاعي (‪14 _______________________ )Cross Product or Vector Product‬‬


‫‪w‬‬

‫‪ .6‬حل جملة معادالت خطية (‪06 _____________ )Solution of System of Linear Equations‬‬
‫‪w‬‬

‫‪ .1 .1‬الحل باستخدام قلب المصفوفات (‪61 ___________________________ )Matrix Inverse‬‬


‫‪ .1 .2‬الحل باستخدام التقسيم األيسر للمصفوفات (‪61 _________________ )Matrix Left Division‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪ad‬‬
‫‪af‬‬
‫‪ls‬‬
‫‪r.a‬‬
‫‪/d‬‬
‫‪om‬‬
‫‪.c‬‬
‫‪ok‬‬
‫‪bo‬‬
‫‪ce‬‬
‫‪.fa‬‬
‫‪w‬‬
‫‪w‬‬
‫‪w‬‬

‫‪84‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل ‪.3‬‬


‫‪Manipulating MATLAB Matrices‬‬

‫‪ .1‬استخالص عناصر من شعاع أو مصفوفة‬

‫‪ .1 .1‬استخدام رقم الترتيب (‪ )Index Number‬الستخالص عناصر شعاع‬


‫الستخالص عنصر ما ترتيبه ‪ i‬من شعاع ‪ x‬نستخدم األمر التالي‪ x(i) :‬حيث يدل هذا التعبير على العنصر الذي ترتيبه ‪i‬‬

‫‪/‬‬
‫‪ie‬‬
‫في الشعاع ‪.x‬‬

‫‪ad‬‬
‫;]‪>> A=[4.5 3 5.1‬‬
‫]‪>> B=[2.5 A‬‬

‫‪af‬‬
‫= ‪B‬‬
‫‪2.5000‬‬ ‫‪4.5000‬‬ ‫‪3.0000‬‬ ‫‪5.1000‬‬

‫‪ls‬‬
‫الستبدال العنصر الثاني في المصفوفة ‪ B‬بالعدد ‪ -1.2‬نستخدم األمر‪:‬‬

‫‪r.a‬‬
‫‪>> B(2)=-1.2‬‬
‫= ‪B‬‬
‫‪/d‬‬
‫‪2.5000‬‬ ‫‪-1.2000‬‬ ‫‪3.0000‬‬ ‫‪5.1000‬‬
‫‪om‬‬

‫بالتالي األمر ‪ B(2)=-1.2‬يغير القيمة الثانية في المصفوفة ‪ B‬من ‪ 4.5‬إلى ‪.-1.2‬‬

‫يمكن كذلك إضافة عناصر جديدة إلى المصفوفة ‪ B‬باستخدام رقم الترتيب‪.‬‬
‫‪.c‬‬

‫‪>> B(6)=11‬‬
‫‪ok‬‬

‫= ‪B‬‬
‫‪2.5000‬‬ ‫‪-1.2000‬‬ ‫‪3.0000‬‬ ‫‪5.1000‬‬ ‫‪0‬‬ ‫‪11.0000‬‬
‫‪bo‬‬

‫نالحظ أنه تم إضافة عنصر سادس إلى الشعاع ‪ B‬و تم وضع قيمة ‪ 0‬في العنصر الخامس من الشعاع الجديد ‪ B‬نظراً لعدم‬
‫وجود عنصر خامس في الشعاع ‪ B‬السابق‪.‬‬
‫‪ce‬‬

‫‪ .1 .2‬استخدام عامل النقطتين (‪)Colon Operator( ):‬‬


‫‪.fa‬‬

‫يستخدم عامل النقطتين من أجل‪:‬‬

‫‪ .1‬انشاء مصفوفة سطرية بتباعدات متساوية بين عناصرها مساوية للواحد (تم شرح هذا المفهوم سابقا ً في الفقرة‬
‫‪w‬‬

‫‪ 8.4‬من الفصل األول)‪.‬‬


‫‪w‬‬

‫‪>> c=2:6‬‬
‫= ‪c‬‬
‫‪w‬‬

‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬


‫‪ .2‬انشاء مصفوفة سطرية بتباعدات متساوية بين عناصرها غير الواحد (تم شرح هذا المفهوم سابقا ً في الفقرة ‪8.4‬‬
‫من الفصل األول)‪.‬‬
‫‪>> d=0:2.5:10‬‬
‫= ‪d‬‬
‫‪0‬‬ ‫‪2.5000‬‬ ‫‪5.0000‬‬ ‫‪7.5000‬‬ ‫‪10.0000‬‬
‫‪ .4‬الستخالص سطر كامل أو عمود كامل من مصفوفة ما‪ .‬كمثال‪ ،‬ليكن لدينا المصفوفة ‪ ،E‬حيث‪:‬‬

‫‪84‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫‪>> E=[1 4 7 10 3‬‬


‫‪2 5 8 11 1‬‬
‫;]‪3 6 9 12 2‬‬
‫يمكن استخالص العمود الثالث من المصفوفة ‪ E‬باألمر التالي‪:‬‬
‫)‪>> x=E(:,3‬‬
‫= ‪x‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬

‫‪/‬‬
‫‪ie‬‬
‫والذي يقرأ‪ :‬جميع األسطر في العمود الثالث‪.‬‬

‫‪ad‬‬
‫بشكل مشابه من أجل استخالص السطر الثاني نكتب‪:‬‬

‫‪af‬‬
‫)‪>> y=E(2,:‬‬
‫= ‪y‬‬

‫‪ls‬‬
‫‪2‬‬ ‫‪5‬‬ ‫‪8‬‬ ‫‪11‬‬ ‫‪1‬‬

‫‪r.a‬‬
‫والذي يقرأ‪ :‬السطر الثاني‪ ،‬جميع األعمدة‪.‬‬

‫‪ .8‬يمكن أن يعني عامل النقطتين كذلك "من السطر ‪ i‬إلى السطر ‪ "j‬أو "من العمود ‪ i‬إلى العمود ‪ ."j‬كمثال‪:‬‬
‫‪/d‬‬
‫)‪>> Z=E(2:3,:‬‬
‫‪om‬‬

‫= ‪Z‬‬
‫‪2‬‬ ‫‪5‬‬ ‫‪8‬‬ ‫‪11‬‬ ‫‪1‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪2‬‬
‫‪.c‬‬

‫والذي يقرأ‪ :‬من السطر الثاني إلى الثالث‪ ،‬جميع األعمدة‪.‬‬


‫‪ok‬‬

‫)‪>> R=E(1:2,4:5‬‬
‫= ‪R‬‬
‫‪bo‬‬

‫‪10‬‬ ‫‪3‬‬
‫‪11‬‬ ‫‪1‬‬
‫‪ce‬‬

‫والذي يقرأ‪ :‬من السطر األول إلى الثاني‪ ،‬العمود الرابع إلى الخامس‪.‬‬

‫‪ .0‬لتحويل المصفوفة إلى عمود‪.‬‬


‫‪.fa‬‬

‫)‪>> q=R(:‬‬
‫= ‪q‬‬
‫‪w‬‬

‫‪10‬‬
‫‪w‬‬

‫‪11‬‬
‫‪w‬‬

‫‪3‬‬
‫‪1‬‬
‫مالحظة هامة ‪ :‬الستخالص العناصر الموجودة عند تقاطعات السطر األول و الثالث مع العمود الثاني و الرابع و الخامس‬
‫مثالً من المصفوفة ‪ E‬نكتب‪:‬‬
‫)]‪>> T=E([1 3],[2 4 5‬‬
‫= ‪T‬‬
‫‪4‬‬ ‫‪10‬‬ ‫‪3‬‬

‫‪00‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪6‬‬ ‫‪12‬‬ ‫‪2‬‬

‫‪ .1 .3‬استخالص عنصر ما من مصفوفة‬


‫هنالك طريقتان الستخالص عنصر ما من مصفوفة‪:‬‬

‫‪ .1 .3 .1‬الترتيب المفرد (‪)Single Index Number‬‬


‫بهذه الطريقة ترتب العناصر كما في المثال التالي حيث يشير الرقم الموجود ضمن المستطيل إلى رقم الترتيب المفرد‬
‫للعنصر و يبدأ العد بدءاً من العمود األول و من ثم العمود الثاني و هكذا‪.‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪ 21‬‬ ‫‪44‬‬ ‫‪17 7‬‬ ‫‪62 10 ‬‬

‫‪ad‬‬
‫‪‬‬ ‫‪‬‬
‫‪A 3 2‬‬ ‫‪25‬‬ ‫‪18‬‬ ‫‪8 11 ‬‬
‫‪‬‬ ‫‪‬‬

‫‪af‬‬
‫‪ 93‬‬ ‫‪21 6‬‬ ‫‪59‬‬ ‫‪12 ‬‬
‫‪11 ‬‬
‫‪‬‬ ‫‪‬‬

‫‪ls‬‬
‫‪>> A=[2 4 17 62‬‬

‫‪r.a‬‬
‫‪3 2 1 8‬‬
‫;]‪9 21 5 11‬‬
‫‪/d‬‬
‫)‪>> A(8‬‬
‫= ‪ans‬‬
‫‪om‬‬

‫‪1‬‬

‫‪ .1 .3 .2‬الترتيب المزدوج‬
‫‪.c‬‬

‫يعتمد هذا الترتيب على رقم السطر و العمود حيث نحدد أوالً رقم السطر الذي يوجد فيه العنصر و من ثم رقم العمود‪.‬‬
‫‪ok‬‬

‫)‪>> A(2,3‬‬
‫‪bo‬‬

‫= ‪ans‬‬
‫‪1‬‬
‫مالحظة هامة‪ :‬يمكن استخدام كلمة ‪ end‬لتعريف آخر سطر أو عمود في المصفوفة‪.‬‬
‫‪ce‬‬

‫)‪>> A(end,2‬‬
‫= ‪ans‬‬
‫‪.fa‬‬

‫‪21‬‬
‫الستخالص العنصر األخير في المصفوفة‪ ،‬أي العنصر الذي يوجد عند تقاطع آخر سطر و آخر عمود‪ ،‬نستخدم‪:‬‬
‫‪w‬‬

‫)‪>> A(end‬‬
‫‪w‬‬

‫= ‪ans‬‬
‫‪11‬‬
‫‪w‬‬

‫مسألة‬
‫أنشأ كالً من المصفوفات التالية‪:‬‬

‫‪13 2 6 ‬‬ ‫‪3‬‬


‫‪‬‬ ‫‪‬‬ ‫‪ ‬‬
‫‪A  32 4 81 , b   8  , c  23 6 91 7‬‬
‫‪57 6 9 ‬‬ ‫‪ ‬‬
‫‪12‬‬

‫‪01‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫أنشأ شعاع عمودي يدعى ‪ d‬مؤلف من من العناصر الموجودة ضمن العمود الثالث في المصفوفة ‪.A‬‬ ‫‪)1‬‬
‫أنشأ مصفوفة تدعى ‪ E‬بحيث يكون العمود األول فيها الشعاع ‪ b‬و الثاني الشعاع ‪.d‬‬ ‫‪)2‬‬
‫أنشأ شعاع عمودي يدعى ‪ f‬بحيث تكون أول ثالثة عناصر فيه هي عناصر الشعاع ‪ b‬و آخر ثالثة عناصر فيه‬ ‫‪)4‬‬
‫هي عناصر الشعاع ‪.d‬‬
‫أنشأ مصفوفة تدعى ‪ G‬بأربعة أسطر و ثالثة أعمدة‪ .‬مؤلفة من المصفوفة ‪ A‬و آخر سطر فيها هو أول ثالث‬ ‫‪)8‬‬
‫عناصر في ‪.c‬‬
‫أنشأ شعاع عمودي يدعى ‪ h‬حيث أن أول عنصر فيه هو ‪( A1,3‬أي العنصر الموجود في السطر األول و العمود‬ ‫‪)0‬‬

‫‪/‬‬
‫الثالث من المصفوفة ‪ )A‬و الثاني هو ‪ c1,2‬و الثالث هو ‪.b2,1‬‬

‫‪ie‬‬
‫أنشأ مصفوفة تدعى ‪ K‬مؤلفة من العناصر الموجودة في المصفوفة ‪ A‬عند تقاطعات السطر األول و الثالث مع‬ ‫‪)6‬‬

‫‪ad‬‬
‫العمود الثاني و الثالث‪.‬‬

‫الحل‬

‫‪af‬‬
‫‪clear, clc‬‬

‫‪ls‬‬
‫;]‪A=[13 2 6;32 4 81;57 6 9‬‬
‫;]‪b=[3;8;12‬‬

‫‪r.a‬‬
‫;]‪c=[23 6 91 7‬‬
‫)'‪disp('# 1‬‬
‫‪/d‬‬
‫)‪d=A(:,3‬‬
‫)'‪disp('# 2‬‬
‫‪om‬‬

‫]‪E=[b d‬‬
‫)'‪disp('# 3‬‬
‫]‪f=[b;d‬‬
‫‪.c‬‬

‫)'‪disp('# 4‬‬
‫‪ok‬‬

‫])‪G=[A;c(1:3‬‬
‫)'‪disp('# 5‬‬
‫‪bo‬‬

‫])‪h=[A(1,3);c(2);b(2‬‬
‫)'‪disp('# 6‬‬
‫)]‪K=A([1 3],[2 3‬‬
‫‪ce‬‬

‫النتائج‬
‫‪# 1‬‬
‫‪.fa‬‬

‫= ‪d‬‬
‫‪6‬‬
‫‪w‬‬

‫‪81‬‬
‫‪w‬‬

‫‪9‬‬
‫‪# 2‬‬
‫‪w‬‬

‫= ‪E‬‬
‫‪3‬‬ ‫‪6‬‬
‫‪8‬‬ ‫‪81‬‬
‫‪12‬‬ ‫‪9‬‬
‫‪# 3‬‬
‫= ‪f‬‬
‫‪3‬‬

‫‪02‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪8‬‬
‫‪12‬‬
‫‪6‬‬
‫‪81‬‬
‫‪9‬‬
‫‪# 4‬‬
‫= ‪G‬‬
‫‪13‬‬ ‫‪2‬‬ ‫‪6‬‬
‫‪32‬‬ ‫‪4‬‬ ‫‪81‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪57‬‬ ‫‪6‬‬ ‫‪9‬‬
‫‪23‬‬ ‫‪6‬‬ ‫‪91‬‬

‫‪ad‬‬
‫‪# 5‬‬
‫= ‪h‬‬

‫‪af‬‬
‫‪6‬‬
‫‪6‬‬

‫‪ls‬‬
‫‪8‬‬

‫‪r.a‬‬
‫‪# 6‬‬
‫= ‪K‬‬
‫‪/d‬‬
‫‪2‬‬ ‫‪6‬‬
‫‪6‬‬ ‫‪9‬‬
‫‪om‬‬

‫مسألة‬
‫ليكن لدينا المصفوفة التالية و التي تمثل نتائج الطالب في ثاللثة اختبارات لمادة تطبيقات الحاسوب الهندسية‬
‫‪.c‬‬

‫‪Student No Quiz 1 Quiz 2 Quiz 3‬‬


‫‪ok‬‬

‫‪1‬‬ ‫‪7‬‬ ‫‪5‬‬ ‫‪9‬‬


‫‪bo‬‬

‫‪2‬‬ ‫‪8‬‬ ‫‪4‬‬ ‫‪3‬‬


‫‪3‬‬ ‫‪6‬‬ ‫‪6‬‬ ‫‪9‬‬
‫‪ce‬‬

‫‪4‬‬ ‫‪7‬‬ ‫‪7‬‬ ‫‪9‬‬


‫‪5‬‬ ‫‪8‬‬ ‫‪6‬‬ ‫‪10‬‬
‫‪.fa‬‬

‫‪6‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪8‬‬


‫‪7‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪8‬‬
‫‪w‬‬

‫‪8‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪5‬‬


‫‪w‬‬

‫المطلوب‪:‬‬
‫‪w‬‬

‫‪ )1‬استخلص رقم الطالب و النتائج للطالب رقم ‪ 4‬و ضعها في مصفوفة سطرية باسم ‪.student_4‬‬
‫‪ )2‬استخلص أرقام الطالب و نتائج االختبار رقم ‪ 1‬و ضعها فغي مصفوفة باسم ‪.quiz_1‬‬
‫‪ )4‬استخلص أرقام الطالب و نتائج االختبار رقم ‪ 3‬و ضعها فغي مصفوفة باسم ‪.quiz_3‬‬
‫‪ )8‬أوجد الوسطي و االنحراف المعياري لكل نتائج اختبار على حدى‪.‬‬
‫‪ )0‬بفرض أن عالمة كل اختبار كان من ‪ ،10‬أوجد لكل طالب مجموع نتائجه في االختبارات الثالثة‪.‬‬
‫‪ )6‬أنشأ جدول باسم ‪ ECA_total_scores‬يحتوي فقط رقم كل طالب و مجموع نتائجه‪.‬‬

‫‪04‬‬
MATLAB ‫استخدام المصفوفات بفعالية في‬ :‫الفصل الثالث‬

‫ بحيث تحافظ على نفس‬،‫ ترتيب تنازلي بحسب العالمة اإلجمالية للطالب‬ECA_total_scores ‫) رتب جدول‬7
.‫البيانات ظمن كل سطر‬

‫الحل‬
clear, clc
ECA_scores=[1 7 5 9
2 8 4 3
3 6 6 9
4 7 7 9

/
ie
5 8 6 10
6 5 6 8

ad
7 4 5 8
8 8 3 5];

af
disp('# 1')
student_4=ECA_scores(4,:)

ls
disp('# 2')

r.a
quiz_1=ECA_scores(:,1:2)
disp('# 3')
/d
quiz_3=ECA_scores(:,[1 4])
disp('# 4')
om

mean_quiz=mean(ECA_scores(:,2:4))
std_quiz=std(ECA_scores(:,2:4))
disp('# 5')
.c

total_scores=sum(ECA_scores(:,2:4)')'
ok

disp('# 6')
ECA_total_scores=[ECA_scores(:,1) total_scores]
bo

disp('# 7')
ECA_total_scores_descend=sortrows(ECA_total_scores,-2)
‫النتائج‬
ce

# 1
student_4 =
.fa

4 7 7 9
# 2
w

quiz_1 =
w

1 7
2 8
w

3 6
4 7
5 8
6 5
7 4
8 8
# 3

08
‫ ربيع الصفدي‬.‫ م‬.‫د‬ ‫ للمهندسين‬MATLAB ‫أساسيات البرمجة وفق لغة‬

quiz_3 =
1 9
2 3
3 9
4 9
5 10
6 8
7 8
8 5

/
ie
# 4
mean_quiz =

ad
6.6250 5.2500 7.6250
std_quiz =

af
1.5059 1.2817 2.3867
# 5

ls
total_scores =

r.a
21
15
/d
21
23
om

24
19
17
.c

16
ok

# 6
ECA_total_scores =
1 21
bo

2 15
3 21
ce

4 23
5 24
.fa

6 19
7 17
w

8 16
# 7
w

ECA_total_scores_descend =
w

5 24
4 23
1 21
3 21
6 19
7 17
8 16

00
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫‪2‬‬ ‫‪15‬‬

‫‪ .2‬استخدام التابع ‪meshgrid‬‬


‫يستخدم هذا التابع من أجل حل المسائل التي تحوي متغيريين‪ .‬بفرض أنه لدين الشعاعيين التاليين‬

‫‪x  2 4 6 8 ,‬‬ ‫‪y  1 3 5 7‬‬

‫والمطلوب إنشاء مصفوفة تحوي قيم التابع ‪ f‬حيث ‪ f=x×y‬من أجل جميع التراكيب الممكنة لقيم ‪ x‬مع قيم ‪ .y‬والمطلوب‬

‫‪/‬‬
‫إيجاد جدول على الشكل التالي‪:‬‬

‫‪ie‬‬
‫‪x‬‬

‫‪ad‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬

‫‪af‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪12‬‬ ‫‪18‬‬ ‫‪24‬‬

‫‪ls‬‬
‫‪5 10‬‬ ‫‪20‬‬ ‫‪30‬‬ ‫‪40‬‬

‫‪r.a‬‬
‫‪7 14‬‬ ‫‪28‬‬ ‫‪42‬‬ ‫‪56‬‬
‫‪y‬‬

‫‪/d‬‬
‫جدول ‪ :1.4‬جدول يوضح جميع القيم الممكنة للتابع ‪f‬‬
‫‪om‬‬

‫بحيث يحوي هذا الجدول جميع القيم الممكنة للتابع ‪ ،f‬أي من أجل جميع التراكيب الممكنة لقيم ‪ x‬مع قيم ‪.y‬‬

‫استخدام العمليات النقطية هنا لن ينفع ألنه سيقوم بإيجاد قيم القطر الرئيسي فقط في الجدول السابق‪.‬‬
‫‪.c‬‬

‫‪>> x=2:2:8; y=1:2:7; f=x.*y‬‬


‫= ‪f‬‬
‫‪ok‬‬

‫‪2‬‬ ‫‪12‬‬ ‫‪30‬‬ ‫‪56‬‬


‫‪bo‬‬

‫للتغلب على هذه المشكلة يحوي برنامج ‪ MATLAB‬تابع مدمج يدعى ‪ meshgrid‬و ال يشترط في استخدامه أن تكون‬
‫األشعة ‪ x‬و ‪ y‬بنفس األبعاد‪.‬‬
‫‪ce‬‬

‫يقوم التابع ‪ meshgrid‬بإنشاء نسخ جديدة ثنائية األبعاد (مصفوفات) من ك ٍل من األشعة ‪ x‬و ‪ ،y‬و سنقوم هنا بتسميتهم‬
‫‪ X‬و ‪ ،Y‬و لهذه المصفوفات ‪ X‬و ‪ Y‬نفس األبعاد (أي نفس عدد األسطر و األعمدة)‪.‬‬
‫‪.fa‬‬
‫‪w‬‬
‫‪w‬‬
‫‪w‬‬

‫‪06‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫)‪>> [X,Y]=meshgrid(x,y‬‬
‫= ‪X‬‬ ‫قيم عناصر الشعاع ‪x‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫يكرر السطر ‪ x‬بعدد ‪8‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫عناصر ‪y‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬
‫= ‪Y‬‬

‫‪/‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫‪ie‬‬
‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪3‬‬

‫‪ad‬‬
‫‪y‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪5‬‬
‫‪7‬‬ ‫‪7‬‬ ‫‪7‬‬ ‫‪7‬‬

‫‪af‬‬
‫يكرر العمود ‪ y‬بعدد عناصر ‪x‬‬

‫‪ls‬‬
‫‪r.a‬‬ ‫في الكود السابق‬
‫‪/d‬‬
‫‪ :X‬مصفوفة نحصل عليها بأخذ الشعاع ‪ x‬كسطر و نكرره بعدد عناصر ‪.y‬‬
‫‪om‬‬

‫‪ :Y‬مصفوفة نحصل عليها بأخذ الشعاع ‪ y‬كعمود و نكرره بعدد عناصر ‪.x‬‬

‫اآلن أصبح باإلمكان إيجاد كافة القيم الممكنة للتابع ‪ f‬باستخدام العمليات النقطية‪ ،‬كمايلي‪:‬‬
‫‪.c‬‬

‫‪>> f=X.*Y‬‬
‫‪ok‬‬

‫= ‪f‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬
‫‪bo‬‬

‫‪6‬‬ ‫‪12‬‬ ‫‪18‬‬ ‫‪24‬‬


‫‪10‬‬ ‫‪20‬‬ ‫‪30‬‬ ‫‪40‬‬
‫‪14‬‬ ‫‪28‬‬ ‫‪42‬‬ ‫‪56‬‬
‫‪ce‬‬

‫الحظ أن رقم عمود أي عنصر في المصفوفة الناتجة ‪ f‬يدل على القيمة الموافقة في ‪ x‬و رقم سطر أي عنصر في المصفوفة‬
‫‪.fa‬‬

‫الناتجة ‪ f‬يدل على القيمة الموافقة في ‪ .y‬أي أن قيم المصفوفة ‪ f‬تتغير أفقيا ً مع تغير قيم ‪ x‬بينما تتغير رأسيا ً مع تغير قيم ‪.y‬‬

‫مسألة‬
‫‪w‬‬

‫من المعلوم أن حجم المخروط يعطى بالعالقة‬


‫‪w‬‬
‫‪w‬‬

‫‪h‬‬
‫‪1‬‬
‫‪V   r2 h‬‬
‫‪3‬‬

‫‪2r‬‬

‫‪07‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫المطلوب إيجاد حجم المخروط من أجل أنصاف أقطار قاعدة بدءاً من ‪ 1m‬و حتى ‪ 4m‬و بزيادة ‪ 1m‬كل مرة و ارتفاعات‬
‫بدءاً من ‪ 2m‬و حتى ‪ 6m‬بزيادة ‪ 2m‬كل مرة‪.‬‬

‫رتب النتائج ضمن جدول يحوي جميع قيم ‪ V‬من أجل جميع التراكيب الممكنة لقيم ‪ r‬مع قيم ‪ .h‬بحيث يدل رقم العمود على‬
‫القيمة المقابلة في ‪ r‬و يدل رقم السطر على القيمة المقابلة في ‪.h‬‬

‫الحل‬
‫‪clear, clc, format short g‬‬
‫;‪radii=1:4‬‬

‫‪/‬‬
‫;‪heights=2:2:6‬‬

‫‪ie‬‬
‫;)‪[R,H]=meshgrid(radii,heights‬‬

‫‪ad‬‬
‫;‪V=pi*R.^2.*H/3‬‬
‫)'‪disp('This table gives the volume of cone‬‬

‫‪af‬‬
‫)']‪disp('Note 1: 1st row represents the radius in [m‬‬
‫)']‪disp('Note 2: 1st column represents the height in [m‬‬

‫‪ls‬‬
‫‪table=[0 radii‬‬
‫;]‪heights' V‬‬

‫‪r.a‬‬
‫)‪disp(table‬‬
‫النتائج‬
‫‪/d‬‬
‫‪This table gives the volume of cone‬‬
‫]‪Note 1: 1st row represents the radius in [m‬‬
‫‪om‬‬

‫]‪Note 2: 1st column represents the height in [m‬‬


‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬
‫‪2‬‬ ‫‪2.0944‬‬ ‫‪8.3776‬‬ ‫‪18.85‬‬ ‫‪33.51‬‬
‫‪.c‬‬

‫‪4‬‬ ‫‪4.1888‬‬ ‫‪16.755‬‬ ‫‪37.699‬‬ ‫‪67.021‬‬


‫‪ok‬‬

‫‪6‬‬ ‫‪6.2832‬‬ ‫‪25.133‬‬ ‫‪56.549‬‬ ‫‪100.53‬‬


‫مسألة‬
‫‪bo‬‬

‫من أجل حساب المسافة إلى األفق على سطح األرض أو القمر نعتمد العالقة التالية المشتقة من نظرية فيثاغورث (أنظر‬
‫الشكل المرفق)‪.‬‬
‫‪ce‬‬

‫‪d‬‬
‫‪.fa‬‬

‫‪h‬‬
‫‪R‬‬
‫‪w‬‬

‫‪R‬‬ ‫‪d  h2  2 R h‬‬


‫‪w‬‬
‫‪w‬‬

‫حيث‬
‫‪ :h‬ارتفاع الجبل‪.‬‬
‫‪ :R‬نصف قطر الكوكب قيد الدراسة (‪ R=6378km‬لألرض و ‪ R=1737km‬للقمر)‪.‬‬
‫‪ :d‬المسافة إلى األفق من قمة الجبل‪.‬‬

‫‪04‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫المطلوب إيجاد المسافة إلى األفق من على سطح األرض و القمر من أجل جبال ذات ارتفاعات بدءاً من ‪ 2000m‬و حتى‬
‫‪ 8000m‬بزيادة ‪ 2000m‬كل مرة‪.‬‬

‫مالحظة‪ :‬ارتفاع جبل إيفرس ‪ 8850m‬و جبل الشيخ ‪.2814m‬‬

‫الحل‬
‫‪clear, clc, format bank‬‬
‫;‪radii=[6378 1737]*1000‬‬
‫;‪heights=2000:2000:8000‬‬

‫‪/‬‬
‫;)‪[R,H]=meshgrid(radii,heights‬‬

‫‪ie‬‬
‫;)‪d=sqrt(H.^2+2*R.*H‬‬

‫‪ad‬‬
‫)'‪disp('Distance to the horizon‬‬
‫'(‪disp‬‬ ‫]‪Height [m‬‬ ‫]‪on Earth[km‬‬ ‫)']‪on Moon[km‬‬

‫‪af‬‬
‫;]‪table=[heights' d/1000‬‬
‫)‪disp(table‬‬

‫‪ls‬‬
‫النتائج‬

‫‪r.a‬‬
‫‪Distance to the horizon‬‬
‫]‪Height [m‬‬ ‫]‪on Earth[km‬‬ ‫]‪on Moon[km‬‬
‫‪2000.00‬‬ ‫‪159.74‬‬ ‫‪83.38‬‬
‫‪/d‬‬
‫‪4000.00‬‬ ‫‪225.92‬‬ ‫‪117.95‬‬
‫‪om‬‬

‫‪6000.00‬‬ ‫‪276.72‬‬ ‫‪144.50‬‬


‫‪8000.00‬‬ ‫‪319.55‬‬ ‫‪166.90‬‬
‫مسألة‬
‫‪.c‬‬

‫يعطي الكود السوري العالقة التالية التي تحسب بواسطتها الحمولة الحدية الضاغطة القصوى التي يمكن للعمود القصير ذو‬
‫‪ok‬‬

‫األساور العادية أن يتحملها قبل أن ينهار‬

‫‪0.8 ‬‬
‫‪bo‬‬

‫‪Nu ‬‬ ‫‪0.85 f c Ac  f y As ‬‬


‫‪Ke ‬‬
‫‪ce‬‬

‫حيث‬
‫‪ :Ω‬معامل تخفيض المقاومة‪ ،‬و تؤخذ قيمته مساوية إلى ‪ 0.7‬في حالة الضغط البسيط‪.‬‬
‫‪.fa‬‬

‫‪ :Ke‬عامل التكافؤ و يؤخذ مساوي للواحد في حال األعمدة الوسطية الموجودة في جميع الطوابق عدا الطابق األخير‪.‬‬
‫‪ :f'c‬المقاومة المميزة للبيتون المستخدم‪ ،‬و يؤخذ في هذه المسألة ‪.f'c=18 MPa‬‬
‫‪w‬‬

‫‪ :fy‬إجهاد الخضوع للتسليح الطولي المستخدم‪ ،‬و يؤخذ في هذه المسألة ‪.fy=240 MPa‬‬
‫‪w‬‬

‫‪ :A'c‬مساحة المقطع البيتوني الكلي‪.‬‬


‫‪w‬‬

‫‪ :As‬مساحة مقطع التسليح الطولي‪.‬‬

‫المطلوب إيجاد جدول يبين قيم ‪ Nu‬من أجل ثالثة مقاطع دائرية بأقطار ‪ 25 cm‬و حتى ‪ 35 cm‬بزيادة ‪ 5 cm‬كل مرة‪،‬‬
‫بحيث يسلح كل مقطع من هذه المقاطع بثمانية قضبان محيطية بأقطار متساوية‪ .‬نعتمد فقط خمسة أقطار لقضبان التسليح‪:‬‬
‫‪.25 mm ،22 mm ،20 mm ،18 mm ،16 mm‬‬

‫الحل‬

‫‪04‬‬
MATLAB ‫استخدام المصفوفات بفعالية في‬ :‫الفصل الثالث‬

 dc2
Ac  :‫ عندئ ٍذ‬،‫ هو قطر المقطع البيتوني‬dc ‫بفرض أن‬
4
 d s2
As  8 :‫ عندئ ٍذ‬،‫ هو قطر التسليح المستخدم‬ds ‫و‬
4
MATLAB ‫كود‬
clear, clc, format short g
Omega=0.7; Ke=1; fc=18; fy=240;
dc=250:50:350; % in [mm]

/
ds=[16:2:22 25]; % in [mm]

ie
[Dc,Ds]=meshgrid(dc,ds);

ad
Ac=(pi*Dc.^2)/4;
As=(8*pi*Ds.^2)/4;

af
Nu=0.8*Omega*(0.85*fc*Ac+fy*As)/Ke;
table=[NaN dc/10

ls
ds' Nu/1000];

r.a
disp('Ultimate Compressive Load for Circular Section in [KN]')
disp('Note 1: 1st row is Section Diameter in [cm]')
disp('Note 2: 1st column is Steel Reinforcement Diameter in
/d
[mm]')
disp(table)
om

‫النتائج‬
Ultimate Compressive Load for Circular Section in [KN]
.c

Note 1: 1st row is Section Diameter in [cm]


Note 2: 1st column is Steel Reinforcement Diameter in [mm]
ok

NaN 25 30 35
16 636.76 821.82 1040.5
bo

18 694.19 879.24 1097.9


20 758.36 943.42 1162.1
ce

22 829.3 1014.4 1233.1


25 948.37 1133.4 1352.1
.fa

‫ مصفوفات خاصة‬.3
w

:‫ سنشرح بعض هذه التوابع في الجدول التالي‬.‫ على مجموعة من التوابع التي تولد مصفوفات خاصة‬MATLAB ‫يحتوي‬
w

‫مثال‬ ‫الشرح‬ ‫التابع‬


w

>> D=zeros(3)
D =
0 0 0 .m×m ‫ يقوم بإنشاء مصفوفة صفرية أبعادها‬zeros(m)
0 0 0
0 0 0
>> C=zeros(2,3) m ‫ حيث‬m×n ‫يقوم بإنشاء مصفوفة صفرية أبعادها‬
C = zeros(m,n)
‫ عدد األعمدة‬n ‫عدد األسطر و‬
0 0 0

60
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬


‫)‪>> S=ones(3‬‬
‫= ‪S‬‬ ‫يقوم بإنشاء مصفوفة أبعادها ‪ m×m‬جميع عناصرها‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫)‪ones(m‬‬
‫مساوية للعدد ‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫)‪>> D=ones(2,3‬‬ ‫يقوم بإنشاء مصفوفة أبعادها ‪ m×n‬جميع عناصرها‬
‫= ‪D‬‬ ‫مساوية للعدد ‪ 1‬حيث ‪ m‬عدد األسطر و ‪ n‬عدد‬ ‫)‪ones(m,n‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫األعمدة‬

‫‪/‬‬
‫‪ie‬‬
‫‪>> A=[2 3 4‬‬ ‫‪ A‬عبارة عن مصفوفة‬
‫‪4 5 6‬‬

‫‪ad‬‬
‫;]‪8 9 7‬‬
‫)‪>> diag(A‬‬ ‫عندئ ٍذ يستخلص التابع ‪ diag‬القطر الرئيسي من‬

‫‪af‬‬
‫= ‪ans‬‬
‫‪2‬‬ ‫المصفوفة ‪ A‬و يضعها ضمن شعاع عمودي‪.‬‬

‫‪ls‬‬
‫‪5‬‬
‫)‪diag(A‬‬
‫‪7‬‬

‫‪r.a‬‬
‫;]‪>> a=[4 8 6‬‬ ‫‪ A‬عبارة عن شعاع‬
‫)‪>> W=diag(a‬‬
‫من أجل أي شعاع ‪ A‬ينشأ التابع ‪ diag‬مصفوفة‬
‫‪/d‬‬
‫= ‪W‬‬
‫‪4‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫قطرية مربعة حيث عناصر قطرها الرئيسي هي‬
‫‪om‬‬

‫‪0‬‬ ‫‪8‬‬ ‫‪0‬‬ ‫عناصر الشعاع ‪.A‬‬


‫‪0‬‬ ‫‪0‬‬ ‫‪6‬‬
‫‪>> A=[1 2 3‬‬
‫‪.c‬‬

‫‪11 22 33‬‬
‫;]‪10 20 30‬‬ ‫يقلب مصفوفة بشكل متناظر بالنسبة لمحور رأسي‬
‫‪ok‬‬

‫)‪>> fliplr(A‬‬ ‫(أي يغير مواضع األعمدة بشكل متناظر رأسيا ً من‬ ‫)‪fliplr(A‬‬
‫= ‪ans‬‬
‫اليسار إلى اليمين)‬
‫‪bo‬‬

‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬


‫‪33‬‬ ‫‪22‬‬ ‫‪11‬‬
‫‪30‬‬ ‫‪20‬‬ ‫‪10‬‬
‫‪ce‬‬

‫‪>> A=[1 11 111‬‬


‫‪2 22 222‬‬
‫‪.fa‬‬

‫;]‪3 33 333‬‬ ‫يقلب مصفوفة بشكل متناظر بالنسبة لمحور أفقي‬


‫)‪>> flipud(A‬‬ ‫(أي يغير مواضع األسطر بشكل متناظر أفقيا ً من‬ ‫)‪flipud(A‬‬
‫= ‪ans‬‬
‫‪w‬‬

‫‪3‬‬ ‫‪33‬‬ ‫‪333‬‬ ‫األعلى إلى األسفل)‬


‫‪w‬‬

‫‪2‬‬ ‫‪22‬‬ ‫‪222‬‬


‫‪1‬‬ ‫‪11‬‬ ‫‪111‬‬
‫‪w‬‬

‫جدول ‪ :2.4‬التوابع التي تولد مصفوفات خاصة‬

‫‪ .3 .1‬مالحظات هامة على تابع )‪diag(A‬‬

‫‪ A .3 .1 .1‬عبارة عن مصفوفة‬
‫كما هو معلوم يستخدم تابع )‪ diag(A‬الستخالص القطر الرئيسي من المصفوفة ‪ .A‬يمكن كذلك استخالص أقطار غير‬
‫القطر الرئيسي بتعريف مدخل ثاني ‪ k‬للتابع بحيث يصبح التابع على الشكل )‪ .diag(A,k‬حيث أن القيم الموجبة‬

‫‪61‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫للمتغير ‪ k‬تحدد األقطار في الجهة اليمنى العليا من المصفوفة ‪ A‬و القيم السالبة للمدخل ‪ k‬تحدد األقطار في الجهة اليسرى‬
‫السفلى من المصفوفة ‪ ،A‬كما هو مبين بالشكل أدناه‪.‬‬

‫‪k =1‬‬ ‫‪k =2‬‬

‫‪1 2 3 4‬‬
‫‪5 6 7 8‬‬
‫‪A‬‬ ‫‪‬‬
‫‪ 9 10 11 12 ‬‬
‫‪‬‬ ‫‪‬‬

‫‪/‬‬
‫‪13 14 15 16 ‬‬

‫‪ie‬‬
‫‪ad‬‬
‫‪k =-2‬‬ ‫‪k =-1‬‬
‫شكل ‪ :1.4‬شكل يبين كيفية اختيار المتغير ‪ k‬في التابع ‪diag‬‬

‫‪af‬‬
‫= ‪A‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫‪ls‬‬
‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬

‫‪r.a‬‬
‫‪9‬‬ ‫‪10‬‬ ‫‪11‬‬ ‫‪12‬‬
‫‪13‬‬ ‫‪14‬‬ ‫‪15‬‬ ‫‪16‬‬
‫‪/d‬‬
‫)‪>> diag(A‬‬
‫= ‪ans‬‬
‫‪om‬‬

‫‪1‬‬
‫‪6‬‬
‫‪11‬‬
‫‪.c‬‬

‫‪16‬‬
‫‪ok‬‬

‫)‪>> diag(A,1‬‬
‫= ‪ans‬‬
‫‪2‬‬
‫‪bo‬‬

‫‪7‬‬
‫‪12‬‬
‫‪ce‬‬

‫)‪>> diag(A,-2‬‬
‫= ‪ans‬‬
‫‪.fa‬‬

‫‪9‬‬
‫‪14‬‬
‫‪w‬‬

‫‪ A .3 .1 .2‬عبارة عن شعاع‬
‫‪w‬‬

‫من المعلوم أنه عند استخدام شعاع ‪ a‬كمدخل للتابع )‪ diag(a‬فإن الناتج عبارة عن مصفوفة قطرية عناصر قطرها‬
‫‪w‬‬

‫الرئيسي هي نفسها عناصر الشعاع ‪ .a‬باستخدام مدخل آخر ‪ k‬للتابع بحيث يصبح على الشكل)‪ diag(a,k‬نستطيع‬
‫تحريك القطر ألي مكان في المصفوفة‪.‬‬
‫;]‪>> a=[1 2 3 4‬‬
‫)‪>> diag(a‬‬
‫= ‪ans‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪62‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪0‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪0‬‬


‫‪0‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪4‬‬
‫)‪>> diag(a,-1‬‬
‫= ‪ans‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪0‬‬
‫)‪>> diag(a,-2‬‬

‫‪ad‬‬
‫= ‪ans‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪af‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪ls‬‬
‫‪0‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪r.a‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪/d‬‬
‫‪ .4‬العمليات على المصفوفات‬
‫‪om‬‬

‫‪ .4 .1‬المنقول (‪)Transpose‬‬
‫للحصول على منقول مصفوفة نستخدم الرمز(') بعد كتابة اسم المصفوفة‪.‬‬
‫‪.c‬‬

‫;]‪>> A=[1 2 3‬‬


‫‪ok‬‬

‫'‪>> A‬‬
‫= ‪ans‬‬
‫‪bo‬‬

‫‪1‬‬
‫‪2‬‬
‫‪ce‬‬

‫‪3‬‬
‫‪.fa‬‬

‫‪ .4 .2‬الضرب السلمي (‪)Scalar Product or Dot Product‬‬


‫بفرض أنه لدينا شعاعين ‪ a‬و ‪ b‬بنفس األبعاد‪ .‬يعبر رياضيا ً عن الضرب السلمي للشعاعين ‪ a‬و ‪ b‬كمايلي‪:‬‬
‫‪w‬‬

‫‪n‬‬
‫‪a  b   ai bi‬‬
‫‪w‬‬

‫‪i 1‬‬
‫‪w‬‬

‫بفرض أنه لدينا‪:‬‬


‫;]‪>> a=[1 2 3‬‬
‫;]‪>> b=[4 5 6‬‬
‫يعبر عن الضرب السلمي للشعاعين إما باستخدام )‪:sum(a.*b‬‬
‫)‪>> sum(a.*b‬‬
‫= ‪ans‬‬
‫‪32‬‬

‫‪64‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫أو )‪dot(a,b‬‬
‫)‪>> dot(a,b‬‬
‫= ‪ans‬‬
‫‪32‬‬
‫مسألة‬
‫يحسب مركز ثقل جسم فراغي بتقسيمه إلى أجزاء صغيرة عددها ‪ .n‬فإذا كان وزن كل جزء من هذه األجزاء ‪ wi‬و‬
‫إحداثيات مركز ثقله )‪ ،(xi, yi, zi‬و كان الوزن الكلي للجسم المدروس ‪ W‬فإن إحداثيات مركز ثقله ) ‪ ( x , y , z‬تعطى‬
‫بالعالقات التالية‪:‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪n‬‬ ‫‪n‬‬ ‫‪n‬‬

‫‪ xi wi‬‬ ‫‪ yi wi‬‬ ‫‪z w‬‬

‫‪ad‬‬
‫‪i‬‬ ‫‪i‬‬
‫‪x‬‬ ‫‪i 1‬‬
‫‪,‬‬ ‫‪y‬‬ ‫‪i 1‬‬
‫‪,‬‬ ‫‪z‬‬ ‫‪i 1‬‬

‫‪W‬‬ ‫‪W‬‬ ‫‪W‬‬

‫‪af‬‬
‫‪n‬‬
‫حيث ‪. W   wi‬‬

‫‪ls‬‬
‫‪i 1‬‬

‫‪r.a‬‬
‫المطلوب حساب إحداثيات مركز ثقل جسم فراغي تم تقسيمه إلى أربعة أجزاء حيث أن كتلة و إحداثيات مركز ثقل كل جزء‬
‫معطاة في الجدول التالي‪:‬‬
‫‪/d‬‬
‫]‪zi [m‬‬ ‫]‪yi [m‬‬ ‫]‪xi [m‬‬ ‫الكتلة ]‪[kg‬‬ ‫الجزء‬
‫‪om‬‬

‫‪3.0‬‬ ‫‪2.0‬‬ ‫‪0.1‬‬ ‫‪3.5‬‬ ‫‪1‬‬


‫‪1.0‬‬ ‫‪1.0‬‬ ‫‪1.0‬‬ ‫‪1.5‬‬ ‫‪2‬‬
‫‪.c‬‬

‫‪0.5‬‬ ‫‪0.2‬‬ ‫‪1.5‬‬ ‫‪0.79‬‬ ‫‪3‬‬


‫‪ok‬‬

‫‪4.0‬‬ ‫‪2.0‬‬ ‫‪2.0‬‬ ‫‪1.75‬‬ ‫‪4‬‬


‫‪bo‬‬

‫الحل‬
‫‪clear, clc‬‬
‫‪ce‬‬

‫;]‪mi=[3.5 1.5 0.79 1.75‬‬


‫;]‪xi=[0.1 1.0 1.5 2.0‬‬
‫‪.fa‬‬

‫;]‪yi=[2.0 1.0 0.2 2.0‬‬


‫;]‪zi=[3.0 1.0 0.5 4.0‬‬
‫‪w‬‬

‫;)‪m=sum(mi‬‬
‫‪w‬‬

‫‪xbar=dot(xi,mi)/m‬‬
‫‪ybar=dot(yi,mi)/m‬‬
‫‪w‬‬

‫‪zbar=dot(zi,mi)/m‬‬
‫النتائج‬
‫= ‪xbar‬‬
‫‪0.8667‬‬
‫= ‪ybar‬‬
‫‪1.6125‬‬
‫= ‪zbar‬‬

‫‪68‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪2.5723‬‬
‫مالحظة هام ة بخصوص تابع ‪:input‬‬
‫يسمح تابع ‪ input‬للمستخدم بإدخال قيمة ما و تخصيصها لمتغير ما‪ .‬كمثال‪:‬‬
‫)' ‪>> x=input('Enter a value for x:‬‬
‫عند تنفيذ هذا السطر تظهر على شاشة األوامر العبارة‪:‬‬
‫‪Enter a value for x: 7‬‬
‫فإذا قام المستخدم بإدخال قيمة ما‪ ،‬على سبيل المثال ‪ ،7‬فيقوم البرنامج بتخصيص هذه القيمة للمتغير ‪ x‬وإظهارها على‬
‫شاشة األوامر بسبب عدم وضع فاصلة منقوطة ; في آخر عبارة ‪.input‬‬

‫‪/‬‬
‫‪ie‬‬
‫= ‪x‬‬
‫‪7‬‬

‫‪ad‬‬
‫عند استخدام تابع ‪ input‬من أجل إدخال النصوص يجب اعتماد الصيغة التالية‪:‬‬
‫)'‪>> x=input('Enter your name: ','s‬‬

‫‪af‬‬
‫إضافة '‪ 's‬إلى تابع ‪ input‬يعني أن المتغير الذي سيتم إدخاله هو نص‪ .‬عند تنفيذ األمر السابق تظهر رسالة على‬

‫‪ls‬‬
‫شاشة األوامر‪:‬‬

‫‪r.a‬‬
‫‪Enter your name: ALSAFADIE‬‬
‫فإذا قام المستخدم بإدخال نص ما‪ ،‬على سبيل المثال ‪ ، ALSAFADIE‬فيقوم البرنامج بتخصيص هذا النص للمتغير ‪x‬‬
‫‪/d‬‬
‫وإظهاره على شاشة األوامر بسبب عدم وضع فاصلة منقوطة ; في آخر عبارة ‪.input‬‬
‫‪om‬‬

‫= ‪x‬‬
‫‪ALSAFADIE‬‬
‫‪.c‬‬

‫مثال ‪:1‬‬
‫‪ok‬‬

‫اكتب برنامج إلنشاء شعاع يبدأ بالقيمة ‪ a‬و ينتهي بالقيمة ‪ b‬و مقدار الزيادة ‪ .c‬اطلب من المستخدم إدخال جميع قيم‬
‫البرامترات السابقة‪.‬‬
‫‪bo‬‬

‫‪clear, clc‬‬
‫;)' ‪a=input('Enter the starting value of the vector:‬‬
‫‪ce‬‬

‫;)' ‪b=input('Enter the ending value of the vector:‬‬


‫;)' ‪c=input('Enter the increment value of the vector:‬‬
‫‪.fa‬‬

‫‪vector=a:c:b‬‬
‫النتائج‬
‫‪w‬‬

‫‪Enter the starting value of the vector: 2‬‬


‫‪Enter the ending value of the vector: 11‬‬
‫‪w‬‬

‫‪Enter the increment value of the vector: 3‬‬


‫‪w‬‬

‫= ‪vector‬‬
‫‪2‬‬ ‫‪5‬‬ ‫‪8‬‬ ‫‪11‬‬
‫مثال ‪:2‬‬

‫اكتب برنامج لحساب حجم إسطوانة دائرية قائمة‪ . V   r h :‬اطلب من المستخدم إدخال قيم كالً من ‪ r‬و ‪.h‬‬
‫‪2‬‬

‫‪clear, clc‬‬
‫;)' ‪r=input('Enter the radius of cylinder:‬‬

‫‪60‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫;)' ‪h=input('Enter the height of cylinder:‬‬


‫‪volume=pi*r^2*h‬‬
‫النتائج‬
‫‪Enter the radius of cylinder: 5‬‬
‫‪Enter the height of cylinder: 20‬‬
‫= ‪volume‬‬
‫‪1570.8‬‬

‫مسألة‬

‫‪/‬‬
‫‪ie‬‬
‫من المعلوم في جبر األشعة أنه إذا كان لدينا الشعاعين ‪ A‬و ‪ B‬في الفراغ فيمكن التعبير عنهما كمايلي‪:‬‬

‫‪ad‬‬
‫‪A  Ax i  Ay j  Az k‬‬

‫‪af‬‬
‫‪B  Bx i  By j  Bz k‬‬

‫‪ls‬‬
‫باإلضافة إلى العالقة التي تم شرحها سابقا ً لحساب الضرب السلمي لألشعة‪:‬‬

‫‪A  B  Ax Bx  Ay By  Az Bz‬‬
‫‪r.a‬‬
‫‪/d‬‬
‫يعطى كذلك الضرب السلمي للشعاعين الفراغيين ‪ A‬و ‪ B‬بالعالقة‪:‬‬
‫‪om‬‬

‫‪A  B  A B cos ‬‬


‫‪.c‬‬

‫‪A‬‬ ‫حيث ‪ θ‬الزاوية بين الشعاعين ‪ A‬و ‪ A . B‬و ‪ B‬طويلة كل‬


‫‪ok‬‬

‫من الشعاعين ‪ A‬و ‪ ، B‬بالترتيب و يحسبان كمايلي‪:‬‬


‫‪θ‬‬
‫‪bo‬‬

‫‪B‬‬
‫‪A  Ax2  Ay2  Az2‬‬

‫‪B  Bx2  By2  Bz2‬‬


‫‪ce‬‬
‫‪.fa‬‬

‫المطلوب استخدام الضرب السلمي لألشعة إليجاد الزاوية بين الشعاعيين التاليين‪:‬‬

‫‪A  5i  6 j  3k‬‬
‫‪w‬‬

‫‪B  1i  3 j  2 k‬‬
‫‪w‬‬
‫‪w‬‬

‫الحل‬
‫‪clear, clc‬‬
‫;)' ‪A=input('Enter vector A in matrix notation:‬‬
‫;)' ‪B=input('Enter vector B in matrix notation:‬‬
‫;))‪A_mag=sqrt(sum(A.^2‬‬
‫;))‪B_mag=sqrt(sum(B.^2‬‬
‫;)‪cos_theta=dot(A,B)/(A_mag*B_mag‬‬

‫‪66‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫;)‪theta=acosd(cos_theta‬‬
‫‪fprintf('The angle between the vectors is %6.2f‬‬
‫)‪degrees\n',theta‬‬
‫النتائج‬
‫]‪Enter vector A in matrix notation: [5 6 3‬‬
‫]‪Enter vector B in matrix notation: [1 3 2‬‬
‫‪The angle between the vectors is 22.12 degrees‬‬

‫‪ .4 .3‬ضرب المصفوفات‬

‫‪/‬‬
‫‪ie‬‬
‫من أجل أن يكون ضرب المصفوفات صحيحا ً يجب أن يكون عدد أعمدة المصفوفة األولى مساويا ً لعدد أسطر المصفوفة‬
‫الثانية‪ .‬فعلى سبيل المثال‪ ،‬ليكن لدينا المصفوفتان‪:‬‬

‫‪ad‬‬
‫‪10 20 30 ‬‬

‫‪af‬‬
‫‪1 2 3‬‬
‫‪A‬‬ ‫‪,‬‬ ‫‪B   40 50 60 ‬‬
‫‪4 5 6‬‬

‫‪ls‬‬
‫‪ 70 80 90 ‬‬

‫‪r.a‬‬
‫يمكن إجراء ضرب المصفوفة ‪ A‬بالمصفوفة ‪ B‬نظراً ألن عدد أعمدة ‪ A‬يساوي إلى عدد أسطر ‪ ،B‬و يكتب رياضياً‬
‫كمايلي‪. C  A B :‬‬
‫‪/d‬‬
‫‪23‬‬ ‫‪23 33‬‬
‫‪om‬‬

‫يمكن إجراء العملية السابقة باستخدام ‪ MALAB‬كمايلي‪:‬‬


‫;]‪>> A=[1 2 3;4 5 6‬‬
‫‪.c‬‬

‫;]‪>> B=[10 20 30;40 50 60;70 80 90‬‬


‫‪>> C=A*B‬‬
‫‪ok‬‬

‫= ‪C‬‬
‫‪300‬‬ ‫‪360‬‬ ‫‪420‬‬
‫‪bo‬‬

‫‪660‬‬ ‫‪810‬‬ ‫‪960‬‬


‫مسألة‬
‫‪ce‬‬

‫أعد حل مسألة حساب مركز الثقل باستخدام ضرب المصفوفات و باعتماد المصفوفات التالية‪:‬‬
‫‪.fa‬‬

‫‪ : coor‬مصفوفة إحداثيات مراكز ثقل األجزاء المختلفة و بالترتيب حيث السطر األول في المصفوفة يمثل إحداثيات مركز‬
‫ثقل الجزء األول و السطر الثاني في المصفوفة يمثل إحداثيات مركز ثقل الجزء الثاني و هكذا‪.‬‬
‫‪w‬‬

‫‪ :mi‬كتل األجزاء المختلفة بالترتيب موضوعة في عمود‪.‬‬


‫‪w‬‬
‫‪w‬‬

‫‪ 0.1‬‬ ‫‪2.0 3.0 ‬‬ ‫‪ 3.5 ‬‬


‫‪1.0‬‬ ‫‪1.0 1.0 ‬‬ ‫‪ 1.5 ‬‬
‫‪coor  ‬‬ ‫‪,‬‬ ‫‪mi  ‬‬ ‫‪‬‬
‫‪1.5‬‬ ‫‪0.2 0.5 ‬‬ ‫‪0.79 ‬‬
‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬
‫‪ 2.0‬‬ ‫‪2.0 4.0‬‬ ‫‪1.75 ‬‬
‫الحل‬

‫‪67‬‬
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫‪clear, clc‬‬
‫‪coor=[0.1 2.0 3.0‬‬
‫‪1.0 1.0 1.0‬‬
‫‪1.5 0.2 0.5‬‬
‫;]‪2.0 2.0 4.0‬‬
‫;]‪mi=[3.5;1.5;0.79;1.75‬‬
‫)‪location=coor'*mi/sum(mi‬‬
‫النتائج‬
‫= ‪location‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪0.8667‬‬
‫‪1.6125‬‬

‫‪ad‬‬
‫‪2.5723‬‬

‫‪af‬‬
‫‪ .4 .4‬رفع المصفوفة إلى قوة (‪)Matrix Powers‬‬
‫ال يمكن رفع المصفوفة إلى قوة إال إذا كان مصفوفة مربعة‪ .‬بالتالي من أجل الحصول على ‪ A2‬للمصفوفة التالية‪:‬‬

‫‪ls‬‬
‫‪r.a‬‬
‫‪1 9 8 ‬‬
‫‪A  8 4 7 ‬‬
‫‪/d‬‬
‫‪ 2 5 3 ‬‬
‫‪om‬‬

‫نكتب‪:‬‬
‫;]‪>> A=[1 9 8;8 4 7;2 5 3‬‬
‫‪.c‬‬

‫‪>> B=A^2‬‬
‫= ‪B‬‬
‫‪ok‬‬

‫‪89‬‬ ‫‪85‬‬ ‫‪95‬‬


‫‪54‬‬ ‫‪123‬‬ ‫‪113‬‬
‫‪bo‬‬

‫‪48‬‬ ‫‪53‬‬ ‫‪60‬‬


‫مالحظة هامة‪ :‬يجب االنتباه إلى الفرق بين‪:‬‬
‫‪ce‬‬

‫‪ :C=A^2‬هنا ‪ A‬مصفوفة مربعة و نتيجة هذه العملية نحصل على مصفوفة ‪ C‬هي حاصل ضرب المصفوفة ‪ A‬بنفسها‪.‬‬
‫‪.fa‬‬

‫‪ :C=A.^2‬بهذه العملية نحصل على مصفوفة ‪ C‬كل عنصر فيها هو مربع العنصر المقابل في ‪ .A‬و ال يشترط هنا أن‬
‫تكون المصفوفة ‪ A‬مربعة‪.‬‬
‫‪w‬‬
‫‪w‬‬

‫‪ .4 .5‬عكس أو قلب مصفوفة (‪)Matrix Inverse‬‬


‫‪w‬‬

‫بفرض لدينا المصفوفة ‪ A‬فإن مقلوب هذه المصفوفة يرمز له بالرمز ‪ ،A-1‬و يحقق العالقة التالية‪:‬‬

‫‪A1 Α  Α Α1  I‬‬

‫حيث ‪ I‬هي المصفوفة المحايدة (‪)Identity Matrix‬‬

‫يتم الحصول على مقلوب مصفوفة مربعة ‪ A‬في ‪ MATLAB‬بإحدى الطريقتين‪ A^-1 :‬أو )‪.inv(A‬‬

‫فعلى سبيل المثال للحصول على مقلوب المصفوفة السابقة ‪ A‬يمكن أن نكتب‪:‬‬

‫‪64‬‬
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪>> B=A^-1‬‬
‫= ‪B‬‬
‫‪-0.1608‬‬ ‫‪0.0909‬‬ ‫‪0.2168‬‬
‫‪-0.0699‬‬ ‫‪-0.0909‬‬ ‫‪0.3986‬‬
‫‪0.2238‬‬ ‫‪0.0909‬‬ ‫‪-0.4755‬‬

‫أو‬
‫)‪>> B=inv(A‬‬

‫‪/‬‬
‫‪ie‬‬
‫= ‪B‬‬
‫‪-0.1608‬‬ ‫‪0.0909‬‬ ‫‪0.2168‬‬

‫‪ad‬‬
‫‪-0.0699‬‬ ‫‪-0.0909‬‬ ‫‪0.3986‬‬
‫‪0.2238‬‬ ‫‪0.0909‬‬ ‫‪-0.4755‬‬

‫‪af‬‬
‫‪ .4 .6‬محدد مصفوفة (‪)Determinant‬‬

‫‪ls‬‬
‫من المعلوم أنه إذا كان محدد مصفوفة مساوي للصفر‪ ،‬فالمصفوفة ليس لديها مقلوب و يقال عنها أنها مفردة (‪.)Singular‬‬

‫‪r.a‬‬
‫يتم الحصول على محدد المصفوفة ‪ A‬في ‪ MATLAB‬باستخدام التابع‪ .det(A) :‬فعلى سبيل المثال للحصول على‬
‫مقلوب المصفوفة السابقة ‪ A‬يمكن أن نكتب‪:‬‬
‫‪/d‬‬
‫)‪>> det(A‬‬
‫‪om‬‬

‫= ‪ans‬‬
‫‪143‬‬
‫‪.c‬‬

‫‪ .4 .7‬الضرب الشعاعي (‪)Cross Product or Vector Product‬‬


‫‪ok‬‬

‫بفرض أنه لدينا الشعاعين ‪ A‬و ‪ B‬حيث‪:‬‬


‫‪bo‬‬

‫‪A  Ax i  Ay j  Az k‬‬
‫‪ce‬‬

‫‪B  Bx i  By j  Bz k‬‬
‫‪.fa‬‬

‫يعرف الضرب الشعاعي للشعاعين ‪ A‬و ‪ B‬كمايلي‪:‬‬

‫‪C  A B ‬‬ ‫‪A‬‬ ‫‪Bz  Ay Bz  i ‬‬


‫‪w‬‬

‫‪y‬‬

‫‪ Az Bx  Ax Bz  j ‬‬
‫‪w‬‬

‫‪A‬‬ ‫‪By  Ay Bx  k ‬‬


‫‪w‬‬

‫‪x‬‬

‫يتم الحصول على الضرب الشعاعي ‪ C  A  B‬في ‪ MATLAB‬بالتابع‪ .cross(A,B) :‬فعلى سبيل المثال ليكن‬
‫لدينا شعاعان يقعان ضمن المستوي ‪ xy‬بالتالي للحصول على الضرب الشعاعي لهما يمكن أن نكتب‪:‬‬
‫;]‪>> A=[1 2 0‬‬
‫;]‪>> B=[3 4 0‬‬

‫‪64‬‬
MATLAB ‫استخدام المصفوفات بفعالية في‬ :‫الفصل الثالث‬

>> cross(A,B)
ans =
0 0 -2
.xy ‫الحظ أن النتيجة عبارة عن شعاع متعامد مع المستوي‬

‫مسألة‬
:‫ حيث‬، M  r  F :‫من المعلوم أن عزم قوة حول نقطة يعطى بالعالقة‬

/
. r  rx i  ry j  rz k ،‫ شعاع يحدد موقع القوة بالنسبة للنقطة المدروسة‬: r

ie
ad
. F  Fx i  Fy j  Fz k ،‫ شعاع القوة‬: F

af
:‫ حيث طويلته‬M  M x i  M y j  M z k :‫ كشعاع‬M ‫تعطي العالقة السابقة العزم‬

ls
M  M x2  M y2  M z2

r.a
‫ و شعاع‬F  4 j ‫المطلوب كتابة برنامج لحساب عزم قوة حول نقطة بحيث يطلب من المستخدم إدخال شعاع القوة‬
/d
. r  3i ‫الموقع‬
om

‫الحل‬
clear, clc
.c

F=input('Enter force vector F in matrix notation: ');


r=input('Enter position vector r in matrix notation: ');
ok

M=cross(F,r);
M_mag=sqrt(sum(M.^2));
bo

fprintf('The moment of the force vector about the point is


%5.2f\n',M_mag)
ce

‫النتائج‬
Enter force vector F in matrix notation: [0 4 0]
.fa

Enter position vector r in matrix notation: [3 0 0]


The moment of the force vector about the point is 12.00
w

)Solution of System of Linear Equations( ‫ حل جملة معادالت خطية‬.5


w
w

:‫ليكن لدينا جملة المعادالت الخطية التالية بثالثة مجاهيل‬

3 x  2 y  z  10
x  3 y  2 z  5
x  y  z  1

:‫يمكن إعادة كتابة جملة المعادالت باستخدام المصفوفات التالية‬

70
‫د‪ .‬م‪ .‬ربيع الصفدي‬ ‫أساسيات البرمجة وفق لغة ‪ MATLAB‬للمهندسين‬

‫‪3 2 1‬‬ ‫‪x‬‬ ‫‪10 ‬‬


‫‪ ‬‬ ‫‪ ‬‬
‫‪A   1 3 2  ,‬‬ ‫‪x   y,‬‬ ‫‪b5‬‬
‫‪ 1 1 1‬‬ ‫‪ ‬‬ ‫‪ ‬‬
‫‪z‬‬ ‫‪1‬‬

‫باستخدام ضرب المصفوفات‪ ،‬يمكن عندئ ٍذ كتابة جملة المعادالت كمايلي‪ A x  b :‬و حل الجملة ‪. x  A 1 b :‬‬

‫‪ .5 .1‬الحل باستخدام قلب المصفوفات (‪)Matrix Inverse‬‬

‫‪/‬‬
‫يمكن كتابة الكود على الشكل التالي‪:‬‬

‫‪ie‬‬
‫;]‪>> A=[3 2 -1;-1 3 2;1 -1 -1‬‬

‫‪ad‬‬
‫;]‪>> b=[10; 5; -1‬‬
‫‪>> x=inv(A)*b‬‬

‫‪af‬‬
‫= ‪x‬‬
‫‪-2.0000‬‬

‫‪ls‬‬
‫‪5.0000‬‬

‫‪r.a‬‬
‫‪-6.0000‬‬
‫أو بطريقة أخرى‪:‬‬
‫‪/d‬‬
‫;]‪>> A=[3 2 -1;-1 3 2;1 -1 -1‬‬
‫‪om‬‬

‫;]‪>> b=[10; 5; -1‬‬


‫‪>> x=A^-1*b‬‬
‫= ‪x‬‬
‫‪.c‬‬

‫‪-2.0000‬‬
‫‪ok‬‬

‫‪5.0000‬‬
‫‪-6.0000‬‬
‫‪bo‬‬

‫هذه الطريقة ليس ذات كفاءة عالية و يمكن أن ينتج عنها أخطاء تقريب زائدة‪ .‬لذا ينصح بتجنب استخدام هذه الطريقة‪.‬‬

‫‪ .5 .2‬الحل باستخدام التقسيم األيسر للمصفوفات ( ‪Matrix Left‬‬


‫‪ce‬‬

‫‪)Division‬‬
‫‪.fa‬‬

‫تعتمد هذه الطريقة على حذف غوص (‪ )Gaussian Elimination‬و هي أفضل بكثير من الطريقة السابقة‪ .‬الرمز‬
‫المستخدم في ‪ MATLAB‬لهذه الطريقة هو \ (‪.)backslash‬‬
‫‪w‬‬

‫يمكن كتابة الكود على الشكل التالي‪:‬‬


‫‪w‬‬

‫;]‪>> A=[3 2 -1;-1 3 2;1 -1 -1‬‬


‫‪w‬‬

‫;]‪>> b=[10; 5; -1‬‬


‫‪>> x=A\b‬‬
‫= ‪x‬‬
‫‪-2.0000‬‬
‫‪5.0000‬‬
‫‪-6.0000‬‬
‫مسألة‬

‫‪71‬‬
MATLAB ‫استخدام المصفوفات بفعالية في‬ :‫الفصل الثالث‬

F ‫ليكن لدينا الجائز الشبكي المقرر سكونيا ً و المبين‬


α .ً‫بالشكل جانبا‬
1
:‫بفرض أن المعطيات هي‬
y
F1 F2
Input: F ,  , 1 , 2

X2 2 θ1 θ2 3 :‫و النتائج التي نريد الحصول عليها‬

/
x
F3

ie
Output: F1 , F2 , F3 , X 2 , Y2 , Y3

ad
Y2 Y3

af
‫الحل‬

ls
:‫) إيجاد معادالت التوازن‬1

r.a
F x ,1  0   F1 cos 1  F2 cos  2  F cos   0
F  0   F1 sin 1  F2 sin  2  F sin   0
/d
y ,1

F  0  F1 cos 1  F3  X 2  0
om

x ,2

F y ,2  0  F1 sin 1  Y2  0
.c

F  0   F2 cos  2  F3  0
ok

x ,3

F y ,3  0  F2 sin  2  Y3  0
bo

:‫يمكن كتابة جملة المعادالت السابقة على شكل مصفوفات كمايلي‬


  cos 1 cos  2 0 0 0 0  F cos    F1 
ce

  sin   sin     F 
 F sin  
 1 2 0 0 0 0  2
 cos 1 0  0   F3 
.fa

0 1 1 0
A , b   , x   
 sin 1 0 0 0 1 0  0  X2 
w

 0  cos  2 1 0 0 0  0   Y2 
     
w

 0 sin  2 0 0 0 1   0   Y3 
w

MATLAB ‫كود‬
clear,clc
F=input('Enter the value of F: ');
a=input('Enter the value of alpha in degrees: ');
t1=input('Enter the value of theta_1 in degrees: ');
t2=input('Enter the value of theta_2 in degrees: ');
A=[-cosd(t1) cosd(t2) 0 0 0 0;

72
‫ ربيع الصفدي‬.‫ م‬.‫د‬ ‫ للمهندسين‬MATLAB ‫أساسيات البرمجة وفق لغة‬

-sind(t1) -sind(t2) 0 0 0 0;
cosd(t1) 0 1 1 0 0;
sind(t1) 0 0 0 1 0;
0 -cosd(t2) -1 0 0 0;
0 sind(t2) 0 0 0 1];
b=[F*cosd(a); F*sind(a); 0; 0; 0; 0];
x=A\b;
fprintf(' F1 = %5.2f\n',x(1))
fprintf(' F2 = %5.2f\n',x(2))

/
ie
fprintf(' F3 = %5.2f\n',x(3))
fprintf(' X2 = %5.2f\n',x(4))

ad
fprintf(' Y2 = %5.2f\n',x(5))
fprintf(' Y3 = %5.2f\n',x(6))

af
F  50kN,   90, 1  30, 2  30 ‫ من أجل‬:‫النتائج‬

ls
Enter the value of F: 50

r.a
Enter the value of alpha in degrees: 90
Enter the value of theta_1 in degrees: 30
/d
Enter the value of theta_2 in degrees: 30
F1 = -50.00
om

F2 = -50.00
F3 = 43.30
X2 = 0.00
.c

Y2 = 25.00
ok

Y3 = 25.00
bo
ce
.fa
w
w
w

74
‫استخدام المصفوفات بفعالية في ‪MATLAB‬‬ ‫الفصل الثالث‪:‬‬

‫‪/‬‬
‫‪ie‬‬
‫‪ad‬‬
‫‪af‬‬
‫‪ls‬‬
‫‪r.a‬‬
‫‪/d‬‬
‫‪om‬‬
‫‪.c‬‬
‫‪ok‬‬
‫‪bo‬‬
‫‪ce‬‬
‫‪.fa‬‬
‫‪w‬‬
‫‪w‬‬
‫‪w‬‬

‫‪78‬‬

You might also like