Matlab

  • Uploaded by: mohammed ali
  • 0
  • 0
  • January 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Matlab as PDF for free.

More details

  • Words: 15,431
  • Pages: 149
Loading documents preview...
By : ‘’ eng : Adnan Shahin ’’

You can Program Easily in Matlab Now !

‫بسم هللا الرحمن الرحيم‬ ‫المقدمة‬ ‫نظراً لألهمٌة الكبٌرة للبٌئة البرمجٌة ماتالب واستخدامها فً مجال حل التطبٌقات‬ ‫الرٌاضٌة ونمذجة ومحاكاة التطبٌقات الكهربائٌة فً قسم الطاقة الكهربائٌة أضع‬ ‫بٌن أٌدٌكم هذا الكتاب والذي ٌحتوي على المواضٌع األساسٌة فً البرمجة‬ ‫باستخدام البٌئة البرمجٌة الماتالب وٌشمل هذا الكتاب المواضٌع التالٌة ‪:‬‬ ‫‪ .1‬المصفوفات‬ ‫‪ .2‬البرمجة غٌر المرئٌة‬ ‫‪ .3‬الرسم ثنائً البعد ‪2D‬‬ ‫‪ .4‬التوابع الرٌاضٌة الخاصة فً الماتالب‬ ‫‪ .5‬برامج هندسٌة‬ ‫‪ .6‬تنفٌذ وبرمجة واجهات المستخدم الرسومٌة باستخدام الماتالب‬ ‫وقد عملت جاهدأ على وضع العدد الكافً من األمثلة العملٌة لفهم كافة المواضٌع‬ ‫بإذن هللا ‪.‬‬ ‫وفً حال وجود أي استفسار عن أي موضوع ٌتعلق بالماتالب ٌمكنكم مراسلتً‬ ‫‪E-mail : [email protected]‬‬ ‫‪Facebook Account : Adnan Shahin‬‬ ‫‪Facebook Page : Matlab For Electrical Engineering‬‬ ‫‪My Blogger : Matlab For Electrical Engineering‬‬ ‫‪Mobile Number : +963 95 6738266‬‬ ‫وهللا الموفق‬ ‫عدنان شاهٌن‬

‫التعامل مع المصفوفات‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫تتكون المصفوفة من عدد من الصفوف وعدد من األعمدة حٌث ٌرمز بمتحول ما لكل منهما وتستخدم‬ ‫المصفوفات فً كثٌر من التطبٌقات الهندسٌة لحل المشاكل المعقدة ‪ ,‬وعناصر المصفوفة ممكن أن‬ ‫تكون قٌم حقٌقٌة أو عقدٌة ‪ ,‬وٌرمز عادة للمصفوفة‬ ‫)‪Matricname(m,n‬‬ ‫حٌث ‪:‬‬

‫‪ m‬عدد األسطر‬

‫‪ n‬عدد األعمدة‬

‫ثانٌا ً ‪ :‬العملٌات األساسٌة على المصفوفات ‪...‬‬ ‫ إنشاء مصفوفة (‪ )4,4‬باسم ‪A‬‬‫]‪A = [3 4 4 3 ; 4 5 6 7 ; 5 6 7 4 ; 4 5 6 7‬‬ ‫إدخال السطر السابق فً سطر األوامر فً ماتالب ٌشكل لدي مصفوفة مربعة بالقٌاس سابق‬ ‫الذكر حٌث نالحظ أنه عندما نرٌد االنتقال من سطر لسطر إلدخال عناصر مصفوفة نضع‬ ‫فاصلة منقوطة وذلك كما هو موضح ‪ ,‬وٌكون شكل المصفوفة ‪...‬‬

‫ استدعاء عنصر من مصفوفة عن طرٌق رقم السطر ورقم العمود‪.‬‬‫مثالً الستدعاء العنصر الثانً من السطر الثالث نكتب ‪:‬‬ ‫)‪A(3,2‬‬ ‫‪ans = 6‬‬

‫‪1‬‬

‫ استدعاء عنصر من المصفوفة عن طرٌق ترتٌبه‪.‬‬‫)‪A(8‬‬ ‫‪ans = 5‬‬ ‫)‪A(1‬‬ ‫‪ans = 7‬‬ ‫حٌث ٌتم العد حسب الترتٌب من أعلى العمود إلى اسفله وبالترتٌب‪.‬‬ ‫ استدعاء سطر من مصفوفة‪.‬‬‫‪ans = 5 6 7 4‬‬

‫)‪A(3,:‬‬

‫ استدعاء عمود من مصفوفة‪.‬‬‫)‪A(:,4‬‬

‫ استدعاء السطر الثانً الذي ٌحوي العناصر الثالثة األخٌرة منه (دون العنصر األول)‪.‬‬‫)‪A(2,2:4‬‬ ‫‪ans = 5 6 7‬‬ ‫ استدعاء العنصر األول واألخٌر من السطر الثالث‪.‬‬‫)‪A(3,1:3:4‬‬ ‫‪ans = 5 4‬‬ ‫ إضافة عمود فً نهاٌة المصفوفة‪.‬‬‫]‪A(:,5) = [3 5 0 0‬‬

‫فتصبح المصفوفة كما هو مبٌن‬

‫ إضافة عمود جدٌد للمصفوفة الجدٌدة بحٌث ٌكون العنصر األخٌر من السطر الثالث مساوي‪9‬‬‫‪ A(3,6) = 9‬فتصبح المصفوفة كما هو مبٌن‬

‫‪2‬‬

‫ حذف العمود الثانً من المصفوفة الجدٌدة‪.‬‬‫] [ = )‪ A(:,2‬فتصبح المصفوفة كما هو مبٌن‬

‫ استبدال عنصر من المصفوفة بعنصر جدٌد‪.‬‬‫‪ A(3,4) = 11‬فتصبح المصفوفة كما هو مبٌن‬

‫ استدعاء آخر سطر من المصفوفة‪.‬‬‫)‪A(end,:‬‬

‫مالحظة ‪:‬‬ ‫‪ – 1‬تشكٌل مصفوفة واحدٌة‬

‫)‪ones(m,n‬‬

‫‪ – 2‬تشكٌل مصفوفة صفرٌة‬

‫)‪zeros(m,n‬‬

‫‪ - 3‬تشكٌل مصفوفة محاٌدة‬

‫)‪eye(m,n‬‬

‫‪3‬‬

‫ثالثا ً ‪ :‬العملٌات الرٌاضٌة على المصفوفات‪.‬‬ ‫بفرض لدٌنا المصفوفات ‪ A,B‬ونرٌد إجراء عملٌات الجمع والطرح والضرب والقسمة ‪...‬إلخ علٌها‬ ‫فتكون كالتالً ‪:‬‬ ‫‪-1‬‬ ‫‪-2‬‬ ‫‪-3‬‬ ‫‪-4‬‬ ‫‪-5‬‬ ‫‪-6‬‬ ‫‪-7‬‬

‫‪A+B‬‬ ‫الجمع‬ ‫‪A-B‬‬ ‫الطرح‬ ‫الضرب ‪A.*B‬‬ ‫‪A./B‬‬ ‫القسمة‬ ‫الرفع لقوى ‪A.^B‬‬ ‫الضرب برقم ‪3‬‬ ‫جمع مصفوفة لرقم ‪2‬‬ ‫المصفوفة)‬

‫‪3*A‬‬ ‫‪( A+2‬حٌث ٌتم جمع العدد ‪ 2‬لجمٌع عناصر‬

‫رابعا ً ‪ :‬عملٌات أخرى على المصفوفات‪.‬‬ ‫لتكن المصفوفة ‪: D‬‬ ‫ إٌجاد منقول مصفوفة (استبدال األعمدة مع األسطر)‪...‬‬‫فتكون المصفوفة الناتجة ‪T‬‬ ‫’‪T = D‬‬

‫‪ -‬إٌجاد مقلوب مصفوفة ‪...‬‬

‫)‪ S = inv(D‬فتكون المصفوفة الناتجة ‪S‬‬

‫‪ -‬إٌجاد رتبة مصفوفة ‪...‬‬

‫)‪V = rank(D‬‬ ‫‪ans = 2‬‬

‫‪4‬‬

‫خامسا ً ‪ :‬عملٌات متقدمة على المصفوفات‪.‬‬ ‫استعمال مؤشر المصفوفة مع إحداثٌات من عناصر المصفوفة ‪...‬‬ ‫لتكن المصفوفة ‪C‬‬

‫ استدعاء مصفوفة جزبٌة من المصفوفة ‪( C‬كما هو مبٌن بالشكل)‪...‬‬‫)‪c(1:2,3:4‬‬

‫= ‪ans‬‬

‫= ‪ans‬‬

‫)‪c(3:-1:1,:‬‬

‫‪ -‬استبدال ترتٌب أعمدة (أو أسطر) المصفوفة مع قٌم عناصرها ‪...‬‬

‫= ‪ans‬‬

‫)]‪c(:,[3,4,3,4‬‬

‫= ‪ans‬‬

‫)‪c([3,1,3,2],:‬‬

‫‪5‬‬

‫التعامل مع المصفوفة وتغٌٌر شكلها وتعٌٌن حجمها ‪...‬‬ ‫لتكن المصفوفة ‪k‬‬ ‫ ’)‪k(:‬‬‫= ‪ans‬‬ ‫ إعادة تشكٌل المصفوفة بحٌث عدد األسطر (‪ )m‬وعدد األعمدة (‪. )n‬‬‫)‪reshape (matrix name ,m,n‬‬ ‫مثال ‪:‬‬ ‫)‪reshape(k,4,3‬‬

‫= ‪ans‬‬

‫)‪reshape(k,2,6‬‬

‫= ‪ans‬‬

‫ تدوٌر مصفوفة ‪...‬‬‫)‪rot90(matrix name‬‬ ‫مثال ‪:‬‬ ‫)‪rot90(k‬‬

‫= ‪ans‬‬

‫ تعٌٌن حجم مصفوفة ‪...‬‬‫)‪size (matrix name‬‬ ‫)‪length(matrix name‬‬ ‫مثال ‪:‬‬ ‫‪ans = 3 4‬‬

‫)‪size(k‬‬

‫‪6‬‬

‫)‪length(k‬‬

‫‪ans = 4‬‬

‫أنواع من ضرب المصفوفات ‪...‬‬ ‫لتكن المصفوفتان ‪ a‬السطرٌة و‪ b‬العمودٌة‬ ‫ الجداء الداخلً أو ‪Dotproduct‬‬‫‪a*b‬‬ ‫‪ans = 14‬‬ ‫حٌث تم ضرب العمود األول مع السطر األول والعمود الثانً مع السطر الثانً وهكذا ‪...‬‬ ‫ الجداء الخارجً أو ‪outproduct‬‬‫‪b*a‬‬

‫= ‪ans‬‬

‫حٌث تم ضرب عناصر كل سطر من ‪ b‬مع سطر ‪... a‬‬ ‫مالحظة ‪:‬‬ ‫لجعل العملٌة عملٌة ترتٌبٌة أي معاملة كل عنصر بالعنصر المناظر له فقط ‪ٌ ,‬جب وضع نقطة قبل‬ ‫رمز العملٌة المراد إجراؤها سواء كانت قسمة أو ضرب أو رفع لقوة ‪...‬‬

‫لتكن المصفوفتان ‪:‬‬

‫=‪a‬‬

‫=‪b‬‬

‫ الجداء‬‫‪a.*b‬‬

‫= ‪ans‬‬ ‫ القسمة‬‫= ‪ans‬‬

‫‪a./b‬‬

‫‪7‬‬

‫ الرفع لقوة‬‫‪a.^b‬‬

‫= ‪ans‬‬

‫مالحظات ‪:‬‬ ‫ إنشاء مصفوفة متزاٌدة خطٌا ً معلوم عدد عناصرها ‪...‬‬‫)‪linspace(a,b,c‬‬ ‫حٌث ‪:‬‬

‫‪ a‬القٌمة البدابٌة‬

‫‪ c‬عدد عناصر المصفوفة‬

‫‪ b‬القٌمة النهابٌة‬

‫ إنشاء مصفوفة متزاٌدة لوغارٌتمٌا ً معلوم عدد عناصرها ‪...‬‬‫)‪logspace(a,b,c‬‬ ‫حٌث ‪:‬‬

‫‪ a‬القٌمة البدابٌة‬

‫‪ b‬القٌمة النهابٌة‬

‫ إنشاء مصفوفة سحرٌة ‪...‬‬‫)‪magic(d‬‬

‫‪ c‬عدد عناصر المصفوفة‬ ‫حٌث ‪ d‬أبعاد المصفوفة‬

‫مثال‪:‬‬ ‫=‪v‬‬

‫)‪v = magic(3‬‬

‫وللتحقق من هذه المصفوفة نتأكد من ‪:‬‬ ‫‪ – 1‬مجموع عناصر كل عمود ‪:‬‬ ‫= ‪ans‬‬

‫)‪sum(v‬‬

‫‪ – 2‬مجموع عناصر كل سطر ‪:‬‬

‫‪8‬‬

‫= ‪ans‬‬

‫)‪sum(v,2‬‬

‫‪ – 3‬مجموع عناصر القطر الربٌسً ‪:‬‬ ‫= ‪ans‬‬

‫)‪diag(v‬‬

‫هذه هً عناصر القطر للمصفوفة السابقة وإلٌجاد مجموعها ‪ans = 15 :‬‬

‫)‪sum(ans‬‬

‫ تحدثنا فً الدرس السابق عن طرٌقة استدعاء عنصر من مصفوفة عن طرٌق ترتٌبه‬‫حٌث أن ترتٌب عناصر المصفوفة ٌكون كالتالً ‪:‬‬

‫‪9‬‬

‫البرمجة غٌر المرئٌة‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫سنتعرض فً هذا الدرس لدراسة عبارات التحكم بمسار البرنامج فً الماتالب والتً تشبه لحد كبٌر‬ ‫عبارات التحكم فً لغات البرمجة األخرى ‪ ,‬وسندرس ‪:‬‬ ‫‬‫‬‫‬‫‬‫‬‫‬‫‪-‬‬

‫االختبار الشرطً ‪. if‬‬ ‫االختبار ‪. switch‬‬ ‫حلقة ‪. while‬‬ ‫حلقة ‪. For‬‬ ‫عبارة اإلٌقاف ‪. Break‬‬ ‫متابعة الحلقة ‪. Continue‬‬ ‫العبارة ‪. try‬‬

‫ثانٌا ً ‪ :‬الحلقات ‪...‬‬ ‫‪ .1‬أمر التحكم (االختبار) الشرطً ‪ : If‬الشكل العام‬ ‫‪if logical expression‬‬ ‫‪statements‬‬ ‫‪elseif logical expression‬‬ ‫‪statements‬‬ ‫‪else‬‬ ‫‪statements‬‬ ‫‪end‬‬ ‫عبارة ‪ else‬ال تحتوي على شرط منطقً ولكن ٌجري تنفٌذ العبارات المرتبطة بعبارة ‪ else‬إذا‬ ‫كانت نتٌجة الشرط المنطقً فً عبارة ‪( if‬أو ‪ )elseif‬خطأ أو مساوي للصفر‪.‬‬ ‫عبارة ‪ elseif‬تحتوي على شرط منطقً ٌتم تنفٌذه إذا كان الشرط المنطقً عبارة ‪ if‬خطأ أو تساوي‬ ‫الصفر وٌتم تنفٌذ جمٌع العبارات المرتبطة بها إذا كانت نتٌجة الشرط المنطقً فً عبارة ‪elseif‬‬ ‫تساوي الواحد (ال تساوي الصفر)‪.‬‬

‫‪10‬‬

‫‪ .2‬االختبار ‪ : switch‬الشكل العام‬ ‫‪Switch expression‬‬ ‫‪case value1‬‬ ‫‪statements‬‬ ‫‪case value2‬‬ ‫‪statements‬‬ ‫‪otherwise‬‬ ‫‪statements‬‬ ‫‪end‬‬ ‫تنفذ عبارة ‪ switch‬مجموعة من العبارات عن قٌم معٌنة للمتحول المراد اختباره ‪.‬‬ ‫تتألف العبارة من كلمة ‪ switch‬متبوعة بالعالقة المراد اختبارها ‪ ,‬وتنفذ العالقة وتقارن النتٌجة مع‬ ‫القٌم التً تتبع عبارة ‪ case‬وعند حدوث أول تطابق بٌن نتٌجة العالقة وبٌن القٌمة الموجودة على‬ ‫ٌمٌن عبارة ‪ٌ case‬تم تنفٌذ التً تطابقت القٌمة الموجودة على ٌمٌنها مع نتٌجة العالقة ‪ ,‬حٌث أن‬ ‫الماتالب ال ٌتابع المقارنة بعد حدوث اول تطابق‪.‬‬ ‫فً حال لم ٌحدث تطابق مع القٌم الموجودة على ٌمٌن عبارة ‪ case‬ونتٌجة العالقة المراد اختٌارها‬ ‫ٌتم تنفٌذ العبارات التً تلً ‪ otherwise‬وعبارة ‪ otherwise‬اختٌارٌة ‪ ,‬وٌجب إنهاء عبارة‬ ‫‪ switch‬ب ‪.end‬‬

‫‪ .3‬حلقة ‪ : while‬الشكل العام‬ ‫‪while expression‬‬ ‫‪statements‬‬ ‫‪end‬‬ ‫تنفذ حلقة ‪ while‬عبارة أو مجموعة من العبارات بشكل متكرر طالما أن قٌمة عبارة التحكم تساوي‬ ‫الواحد (أي عبارة التحكم أو الشرط محقق) و إذا كانت عبارة التحكم مصفوفة فٌجب أن تحقق جمٌع‬ ‫عناصر المصفوفة الشرط لٌستمر الحساب‪.‬‬

‫‪11‬‬

‫‪ .4‬حلقة ‪ : For‬الشكل العام‬ ‫‪for variable = expression‬‬ ‫‪statements‬‬ ‫‪end‬‬ ‫تقوم حلقة ‪ for‬بتكرار عبارات معٌنة لعدد محدد من المرات ‪.‬‬

‫‪ .5‬عبارة اإلٌقاف ‪: break‬‬ ‫تقوم هذه العبارة بإٌقاف تنفٌذ حلقة ‪ For‬أو حلقة ‪ while‬عند وضعها ضمن الحلقة ‪ ...‬وتتوضح هذه‬ ‫العبارة أكثر باألمثلة‪.‬‬

‫‪ .6‬عبارة المتابعة ‪: Continue‬‬ ‫تقوم هذه العبارة بوقف التكرار الحالً للحلقة وٌبدأ فً التكرار التالً له بمعنى أن الحلقة تستمر‬ ‫بالعمل لكن عند تعرضها لهذه التعلٌمة ستقوم بتجاهل التعلٌمات التً تحتها وتعود لمتابعة الحلقة ‪...‬‬ ‫وتتوضح هذه العبارة اكثر باألمثلة‪.‬‬

‫‪ .7‬العبارة ‪ : try‬الشكل العام‬ ‫‪try statement, … , statement, catch statement, … , statement, end‬‬ ‫ٌتم بشكل طبٌعً تنفٌذ العبارات بٌن ‪ try‬و ‪ catch‬ولكن عند حدوث أي خطأ فً تنفٌذ أي عبارة‬ ‫من العبارات عند ذلك ٌتم االنتقال إلى تنفٌذ العبارات الواقعة بٌن ‪ catch‬و ‪ end‬وعند حصول‬ ‫خطأ أٌضا ً من أحد العبارات ٌوقف الماتالب تنفٌذ األوامر وٌضع عبارة الخطأ فً متحول اسمه‬ ‫‪.lasterr‬‬ ‫مالحظات ‪:‬‬ ‫‪ - 1‬العبارة ‪ return‬تنهً تسلسل تنفٌذ األوامر فً اإلجراء وتحول القٌادة إلى البرنامج الربٌسً‬ ‫وبشكل عام عندما تنتهً أوامر اإلجراء فإن القٌادة بشكل آلً تنتقل إلى البرنامج الربٌسً ولكن‬ ‫ٌمكن وضع هذه التعلٌمة فً أي مكان من اإلجراء إلعادة القٌادة قسرٌا ً إلى البرنامج الربٌسً‪.‬‬

‫‪12‬‬

‫‪ – 2‬إظهار رسالة الخطأ على الشاشة ٌتم بواسطة تابع الخطأ بالشكل ‪:‬‬ ‫)’‪error(‘error_message‬‬ ‫حٌث عند استدعاء رسالة الخطأ من قبل البرنامج فإن البرنامج ٌظهر العبارة الموضحة بٌن‬ ‫إشارات التنصٌص‪.‬‬ ‫‪ٌ – 3‬مكن إدخال المعلومات إلى البرنامج أثناء تنفٌذ ملف ‪ m‬وذلك باستخدام التابع ‪input‬‬ ‫بالشكل ‪:‬‬ ‫)’‪n = input(‘Prompt_string‬‬ ‫حٌث ٌظهر على الشاشة سلسلة الحروف بٌن إشارتً التنصٌص‪.‬‬ ‫‪ٌ – 4‬مكن التوقف أثناء تنفٌذ البرنامج لمراجعة نتابج الحسابات أو لفحص المخططات ولتحقٌق‬ ‫ذلك نستعمل األوامر‬ ‫‪ Pause‬بدون مضمون هذا ٌسبب توقف البرنامج حتى ٌضغط المستخدم أي زر من لوحة‬ ‫المفاتٌح‪.‬‬ ‫)‪ Pause(n‬هذا ٌسبب توقف البرنامج لمدة ‪ n‬ثانٌة ‪.‬‬ ‫ثالثا ً ‪ :‬مالحظات ‪...‬‬ ‫عند كتابة أي برنامج ٌمكن أن تكون طرٌقة البرمجة بطرٌقتٌن وهما إما أن ٌكتب البرنامج بشكل‬ ‫مباشر وهذه الطرٌقة تسمى (‪ )script‬أو أن ننشا تابع ونضع ضمنه التعلٌمات البرمجٌة الالزمة‬ ‫لتنفٌذ البرنامج وهذه الطرٌقة (‪ )function‬وهنا عدة فروق بٌن هاتٌن الطرٌقتٌن نذكر منها ‪:‬‬ ‫‪-1‬‬ ‫‪-2‬‬ ‫‪-3‬‬ ‫‪-4‬‬

‫ال ‪ٌ function‬بدأ بكلمة ‪ function‬بٌنما ال‪ٌ script‬بدأ بالبرنامج مباشرة‪.‬‬ ‫الشكل االفتراضً للكتابة بعد كلمة ‪ function‬هو أن تضع وسطاء الخرج ومن ثم اسم‬ ‫ال‪ function‬وبعدها وسطاء الدخل بٌنما ال‪ scripts‬ال ٌحتاج إلى كل هذا‪.‬‬ ‫ٌمكنك التابع (‪ )function‬عند تنفٌذه من تغٌٌر وسطاء الدخل بٌنما ال ٌكون هذا ممكن فً‬ ‫ال‪.scripts‬‬ ‫المتغٌرات التً تحسب فً داخل ال‪ function‬ال تحفظ فً ال‪ workspace‬بٌنما فً‬ ‫ال‪ scripts‬تحفظ فً ال‪( workspace‬أي فً لوحة الدخل والخرج الربٌسٌة لبرنامج‬ ‫الماتالب)‪.‬‬

‫‪13‬‬

‫كما أننا عندما نرٌد البدء بكتابة البرنامج البد فً أن نقوم بفتح ملف من نوع ‪ M-file‬من أجل أن‬ ‫نكتب البرنامج فٌه بدالً من الكتابة فً ال‪ workspace‬لبرنامج الماتالب وهناك عدة طرق للوصول‬ ‫إلى محرر ال‪ M-file‬وهً إما من اعلى الشاشة نختار ‪ file  new  M-file‬أو أن تكتب ‪edit‬‬ ‫فً ال‪ workspace‬أو أن نضغط على الملف النصً الظاهر فً الصفحة الربٌسٌة للماتالب ‪ ,‬وعند‬ ‫اإلنتهاء من كتابة البرنامج فً هذا الملف بقوم بحفظه ومن ثم نقوم بتشغٌله من الزر المبٌن باللون‬ ‫األخضر اعلى الصفحة ومقاطع الفٌدٌو توضح ذلك أكثر‪.‬‬

‫‪14‬‬

‫رابعأ ً ‪ :‬أمثلة عملٌة ‪...‬‬

‫‪ ‬المثال األول‬ ‫‪clear‬‬ ‫‪n=5‬‬ ‫‪m=6‬‬ ‫‪for i=1:n‬‬ ‫‪for j=1:m‬‬ ‫;‪i‬‬ ‫;‪j‬‬ ‫‪c(i,j)=i^j‬‬ ‫‪end‬‬ ‫‪end‬‬

‫تم وضع ‪ clear‬فً بداٌة البرنامج لحذف جمٌع المتغٌرات الموجودة فً ال‪ workspace‬وفً‬ ‫هذا البرنامج تكمن وظٌفة وضع حلقتً ‪ for‬متداخلتٌن فً تولٌد مصفوفة ثنابٌة البعد حٌث تكمن‬ ‫وظٌفة حلقة ‪ for‬األولى فً تولٌد أسطر المصفوفة أما حلقة ‪ for‬الثانٌة فهً لتولٌد أعمدة المصفوفة‬ ‫‪ ,‬حٌث هذا البرنامج ٌقوم بحساب قٌمة العنصر من المصفوفة بحٌث ٌساوي رقم السطر الموجود به‬ ‫مرفوعا ً باألس إلى رقم العمود الموجود به هذا العنصر ‪ ,‬فلو كان السطر رقمه ‪ 3‬والعمود رقمه ‪4‬‬ ‫فنالحظ أن قٌمة العنصر ستكون ‪ 88 :‬والمصفوفة الناتجة تكون ‪:‬‬

‫‪ ‬المثال الثانً‬ ‫‪clear‬‬ ‫;‪n=-6‬‬ ‫‪if n<0‬‬ ‫)'‪disp('input must be positive‬‬ ‫‪elseif rem(n,2)==0‬‬ ‫)'‪disp('input is even‬‬ ‫‪else‬‬ ‫)'‪disp('input is odd‬‬ ‫‪end‬‬

‫هذا البرنامج ٌسمح بإدخال رقم ‪ n‬له قٌمة موجبة حصراً لٌمٌز هذا العدد إن كان فردٌا ً أم زوجٌا ً وفً‬ ‫حال إدخال رقم سالب فإنه ٌعطً العبارة ‪ input must be positive‬وٌكون خرج هذا البرنامج‬ ‫فً ال ‪.workspace‬‬

‫‪15‬‬

‫اعتمدنا فً هذا البرنامج على التابع )‪ rem(n,2‬حٌث ٌقوم هذا التابع بتقسٌم العدد ‪ n‬على ‪ 2‬ففً‬ ‫حال وجود باقً للقسمة فال ٌتحقق شرط المساواة ‪.‬‬

‫‪ ‬المثال الثالث‬ ‫‪clear‬‬ ‫‪x=8‬‬ ‫'‪units = 'mm‬‬ ‫‪switch units‬‬ ‫}'‪case {'inch' 'in‬‬ ‫‪x = x*2.54‬‬ ‫}'‪case {'feet' 'ft‬‬ ‫‪x=x*12/2.54‬‬ ‫}'‪case {'millimeter' 'mm‬‬ ‫‪x=x*0.1‬‬ ‫}'‪case {'centimeter' 'cm‬‬ ‫‪x=x‬‬ ‫‪otherwise‬‬ ‫)]'هذه الواحدة غٌر معروفة'[(‪disp‬‬ ‫‪x=nan‬‬ ‫‪end‬‬

‫ٌقوم هذا البرنامج بتحوٌل الرقم من الذي نكتبه من الواحدة المعطاة (المحددة فً السطر الثانً‬ ‫للبرنامج) إلى ‪ , cm‬حٌث نالحظ فً المثال الموضح بالبرنامج ٌكون خرج البرنامج ‪.x=0.8‬‬

‫‪ ‬المثال الرابع‬ ‫‪for i=1:1000‬‬ ‫;)'>=='(‪elem = input‬‬ ‫)‪if isempty(elem‬‬ ‫‪break‬‬ ‫‪end‬‬ ‫‪x(i)=elem‬‬ ‫‪end‬‬ ‫‪x‬‬

‫إن التعلٌمة ‪ input‬تقوم بطباعة مابٌن إشارتً التنصٌص وتوقف عمل البرنامج حتى ٌدخل المستخدم‬ ‫قٌمة ما وٌضغط على الزر ‪ , Enter‬حٌث هذا البرنامج ٌطلب إدخال قٌم شعاع قٌمة قٌمة حتى‬ ‫ٌدخل المستخدم قٌمة فارغة لتقوم ‪ break‬بإنهاء البرنامج‪.‬‬

‫‪ ‬المثال الخامس‬ ‫)‪function vals1(a,b,c‬‬

‫‪16‬‬

‫‪delta = b^2-4*a*c‬‬ ‫‪if delta>0‬‬ ‫)‪x1=(-b+sqrt(delta))/(2*a‬‬ ‫)‪x2=(-b-sqrt(delta))/(2*a‬‬ ‫‪elseif delta<0‬‬ ‫)'‪disp('the roots are complex‬‬ ‫‪else‬‬ ‫))‪x1_2=(-b/(2*a‬‬ ‫‪end‬‬

‫برنامج حل معادلة من الدرجة الثانٌة بشرط أن تكون حلول هذه المعادلة ال تحوي أي عدد عقدي ‪,‬‬ ‫نالحظ أننا انشأنا تابع لحل المعادلة‪.‬‬ ‫إن اسم التابع ‪ vals1‬هو اختٌاري للمستخدم وٌمكن له تغٌٌره كما ٌشاء ولكن ٌجب مالحظة انه عند‬ ‫حفظ البرنامج ٌجب حفظه بنفس اسم التابع ومابٌن قوسٌن هً الدخل أي القٌم التً سٌقوم المستخدم‬ ‫بإدخالها ‪ ,‬وإلستدعاء هذا التابع نكتب فً ال‪workspace‬‬ ‫)‪vals1(4,6,2‬‬ ‫فٌعطً‬ ‫‪Delta = 4‬‬ ‫‪x1=-0.5‬‬ ‫‪x2=-1‬‬ ‫أو بطرٌقة ثانٌة نكتب ‪:‬‬ ‫‪a=6 b=8 c=3‬‬ ‫)‪vals1(a,b,c‬‬ ‫‪delta = -8‬‬ ‫‪the roots are complex‬‬

‫‪ ‬المثال السادس‬ ‫)‪function max1(a,b,c‬‬ ‫‪if a>b‬‬ ‫;‪max=a‬‬ ‫‪if c>max‬‬ ‫;‪max=c‬‬ ‫‪end‬‬ ‫‪else‬‬ ‫;‪max=b‬‬ ‫‪if c>max‬‬ ‫;‪max=c‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫‪max‬‬

‫‪17‬‬

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

‫‪ ‬المثال السابع‬ ‫)‪function c=factor1(n‬‬ ‫‪v=1‬‬ ‫‪for i=1:n‬‬ ‫;‪v=v*i‬‬ ‫‪end‬‬ ‫‪v‬‬

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

‫‪ ‬المثال الثامن‬ ‫)‪function g=sort1(a‬‬ ‫;)‪s=length(a‬‬ ‫‪for i=1:s-1‬‬ ‫‪for j=i+1:s‬‬ ‫)‪if a(i)
‫ٌقوم هذا البرنامج بترتٌب عناصر مصفوفة (شعاعٌة) أي مكونة من سطر واحد ترتٌبا ً تنازلٌا ً ‪ ,‬حٌث‬ ‫ٌقارن هذاالتابع قٌمة كل عنصر من المصفوفة مع قٌمةالعنصر التالً وبنا ًء على هذا الترتٌب ٌقوم‬ ‫بترتٌب عناصر من المصفوفة من جدٌد‪.‬‬

‫‪ ‬المثال التاسع‬ ‫)‪function prod22(num‬‬ ‫)‪if length(num)~=1|~isnumeric(num‬‬ ‫)'‪disp('please enter one number‬‬ ‫‪else‬‬ ‫‪for i=1:10‬‬ ‫)])‪disp([num2str(num) 'x' num2str(i) '=' num2str(num*i‬‬

‫‪18‬‬

‫‪end‬‬ ‫‪end‬‬

‫ٌقوم هذا البرنامج بإظهار جدول الضرب ألي رقم ٌحدده المستخدم ‪ ,‬حٌث فً السطر الثانً من‬ ‫البرنامج ٌقوم البرنامج بفحص القٌمة المدخلة وٌتأكد أن ال تكون ال محرف وال أكثر من رقم ‪ ,‬حٌث‬ ‫نقوم بتحوٌل األرقام إلى محارف بالتعلٌمة ‪ num2str‬أي ‪ number to string‬وبعد القٌام‬ ‫بالعملٌة المطلوبة بعٌد هذه القٌمة الرقمٌة لمحارف بتعلٌمة معاكسة للسابقة ‪.num2str‬‬

‫‪ ‬المثال العاشر‬ ‫)‪function calcul2(a,b,operate‬‬ ‫'‪if operate=='+' | operate=='*' | operate=='-' | operarte=='/‬‬ ‫)])‪eval([num2str(a) operate num2str(b‬‬ ‫‪else‬‬ ‫)'}‪disp('enter one of this operation{+,-,*,/‬‬ ‫‪end‬‬

‫برنامج آلة حاسبة بسٌطة حٌث ٌقوم المستخدم بإدخال الرقم األول والثانً ومن ثم العملٌة المطلوبة‬ ‫فٌعطً البرنامج ناتج العملٌة بٌن الرقمٌن ‪ ,‬وفً حال ادخل المستخدم عملٌة غٌر معروفة ٌعطً‬ ‫البرنامج العبارة‬ ‫}‪'enter one of this operation{+,-,*,/‬‬ ‫فً هذا البرنامج نالحظ أننا استخدمنا التابع ‪ eval‬وتكمن وظٌفة هذا التابع فً الماتالب فً تنفٌذ‬ ‫العبارات المحرفٌة التً لها معنى فً الماتالب ‪ ,‬فلو كتبنا فً السطر الثالث للبرنامج العبارة ‪:‬‬ ‫)])‪z=([num2str(a) operate num2str(b‬‬ ‫بدالً من العبارة السابقة أي دون استخدام التابع ‪ eval‬نالحظ أن البرنامج سٌكون خرجه (‪" )a+b‬فً‬ ‫حال الجمع ومهما كانت قٌم ‪ a‬و ‪"b‬‬

‫‪ ‬المثال الحادي عشر‬ ‫)‪function game4(c‬‬ ‫;)‪n=randperm(c‬‬ ‫‪for i=1:inf‬‬ ‫)'‪f=input('enter the number please:‬‬ ‫)‪if fn(4‬‬ ‫)'‪disp('the number is smaller than your number‬‬ ‫‪else‬‬ ‫)'‪disp('that is right‬‬ ‫)'!!!‪disp('congratulaion‬‬ ‫)]'‪disp(['there are ' num2str(i) 'attempts‬‬ ‫‪break‬‬

‫‪19‬‬

‫‪end‬‬ ‫‪end‬‬

‫هذا البرنامج عبارة عن لعبة مسلٌة ٌقوم فٌها البرنامج بتخزٌن رقم وٌطلب من الالعب إدخال قٌمة‬ ‫للرقم الموجود فً ذاكرة البرنامج لٌخبره إن كان الرقم أصغر أو أكبر أو ٌساوي الرقم المخزن فً‬ ‫الذاكرة ‪ ,‬وبعد إدخال الرقم الصحٌح ٌعطً البرنامج عدد المحاوالت التً قام بها الالعب حتى‬ ‫توصل للرقم الصحٌح‪.‬‬ ‫تعلٌمة ‪ randperm‬تقوم بتولٌد أرقام وبترتٌب عشوابً والرقم األعظمً لهذه األرقام ٌحدد من قبل‬ ‫المستخدم وٌرمز له فً برنامجنا هذا ‪.c‬‬

‫‪20‬‬

‫الرسم ثنائً البعد ‪2D‬‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫سنتعرض فً هذه الجلسة لدراسة أهم األوامر التً تتعلق بالرسم ثنابً البعد فً الماتالب وطرق‬ ‫المعالجة والتنسٌق للرسوم البٌانٌة‪.‬‬ ‫ثانٌا ً ‪ :‬الخصائص الرئٌسٌة للرسم البٌانً ثنائً البعد فً الماتالب ‪...‬‬ ‫‪ .1‬تعلٌمة الرسم األساسٌة ‪:‬‬ ‫)‪plot(Y‬‬ ‫)‪plot(X1,Y1,….‬‬ ‫)‪plot(X1,Y1,LineSpec,….‬‬ ‫)…‪plot(…,’PropertyName’,PropertyName,‬‬ ‫)…‪plot(axes_handle,‬‬ ‫)…(‪h = plot‬‬ ‫)…‪hlines = plot(‘v6’,‬‬ ‫ومن الخصابص اإلضافٌة لهذه التعلٌمة أٌضا ً ‪:‬‬ ‫تحدٌد عرض الخط (سماكة) ‪LineWidth :‬‬ ‫تحدٌد لون حواف العالمات الممٌزة ‪MarkerEdgeColor :‬‬ ‫تحدٌد لون العالمات الممٌزة ‪MarkerFaceColor :‬‬ ‫تحدٌد قٌاس العالمة الممٌزة ‪MarkerSize :‬‬

‫‪‬‬ ‫‪‬‬ ‫‪‬‬ ‫‪‬‬

‫مثال ‪:‬‬

‫مالحظة ‪ :‬جمٌع التعلٌمات السابقة (داخل جسم ‪ )plot‬تكتب فً سطر واحد‪.‬‬

‫‪21‬‬

‫مالحظة ‪ :‬إعطاء قٌم متقاربة للمتغٌر ‪ٌ x‬جعل دقة الرسم أعلى ‪.‬‬ ‫الجداول التالٌة توضح الرموز الدالة على األلوان والرموز الدالة على خطوط الرسم والرموز الدالة‬ ‫على نماذج العالم والمستخدمة فً تعلٌمة الرسم جسم التابع ‪ plot‬والتً سنراها فً أمثلة الحقة‪.‬‬ ‫اللون‬ ‫أخضر مزرق‬ ‫ارجوانً‬ ‫أصفر‬ ‫أسود‬ ‫أزرق‬ ‫أحمر‬ ‫أخضر‬

‫الرمز‬ ‫"–"‬ ‫" ‪" --‬‬

‫‪Cyan‬‬ ‫‪Magenta‬‬ ‫‪Yellow‬‬ ‫‪Black‬‬ ‫‪Blue‬‬ ‫‪Red‬‬ ‫‪Green‬‬

‫الرمز‬ ‫‪c‬‬ ‫‪m‬‬ ‫‪y‬‬ ‫‪k‬‬ ‫‪b‬‬ ‫‪r‬‬ ‫‪G‬‬

‫نموذج خط الرسم‬ ‫‪--------------------------‬‬

‫‪22‬‬

‫‪None‬‬ ‫"‪":‬‬ ‫"‪".-‬‬

‫بدون خط رسم‬ ‫‪..............................‬‬ ‫‪-.-.-.-.-.-.-.-.-.-‬‬

‫الرمز‬ ‫‪+‬‬ ‫‪O‬‬ ‫*‬ ‫‪.‬‬ ‫>‬ ‫<‬ ‫^‬

‫الداللة‬ ‫إشارة جمع‬ ‫دابرة‬ ‫نجمة‬ ‫نقطة‬ ‫مثلث رأسه للٌمٌن‬ ‫مثلث رأسه للٌسار‬ ‫مثلث رأسه لألعلى‬

‫وهناك أٌضا ً نماذج أخرى ٌمكن اإلطالع علٌها من خالل أمر المساعدة إذا دعت الحاجة لها‪.‬‬ ‫‪ .2‬رسم منحنٌٌن على شكل واحد ‪:‬‬ ‫مثال (‪: )1‬‬ ‫;‪x = 0:0.05*pi:2*pi‬‬ ‫)‪y = sin(x‬‬ ‫)‪z = cos(x‬‬ ‫)‪plot(x,y,x,z‬‬

‫وبذلك نستطٌع أن رسم عدد كبٌر من المنحنٌات على نفس الشكل‪.‬‬

‫‪ .3‬تسمٌة الشكل والمحاور ‪:‬‬ ‫لو أضفنا األسطر التالٌة على البرنامج السابق ٌصبح الرسم ‪...‬‬ ‫)'‪title('Function sin and cos‬‬ ‫)'‪xlabel('x‬‬

‫‪23‬‬

‫)'‪ylabel('y‬‬

‫مثال (‪: )2‬‬ ‫)‪z = cos(x‬‬ ‫)‪plot(z‬‬

‫ٌأخذ التابع أول قٌمة من التابع ‪ y‬وٌأخذ ‪ x‬رقم العنصر أي كأنك كتبت ‪plot(1:length(z),z) :‬‬ ‫أما لو كانت ‪ z‬عقدٌة فإنه ٌرسم القسم العقدي بالنسبة للقسم الحقٌقً‪.‬‬

‫‪ .4‬تلوٌن األشكال ‪:‬‬

‫‪24‬‬

‫الجدول الموضح فً األعلى ٌوضح رموز األلوان التً نرٌد الرسم فٌها‪.‬‬

‫‪ .5‬إنشاء شبكة ‪:‬‬ ‫إن األمر ‪ٌ grid on‬عطٌك شبكة حسب تقسٌمات المحاور وإلزالة الشبكة مرة أخرى نكتب‬ ‫‪. grid off‬‬

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

‫)’‪text(5,0.1,’sin‬‬

‫‪ .7‬أبعاد المحاور ‪:‬‬ ‫إن البرنامج بشكل تلقابً ٌحدد لك أبعاد المحاور ولكن لو أردت تحدٌد هذه الحدود فإلٌك التعلٌمة‬ ‫)]‪ axis([-15 15 -17 17‬إن أول رقمٌن ٌحددان مجال المحور ‪ x‬وثانً رقمٌن ٌحددان‬ ‫التالٌة ‪:‬‬ ‫مجال المحور ‪.y‬‬

‫‪ .8‬تسمٌة كل منحنً حسب لونه ‪:‬‬ ‫إذا كان لدٌنا شكل ٌحوي عدة توابع متداخلة وأردنا تعرٌف كل تابع حسب لونه أو غٌره فٌمكن‬ ‫استعمال التعلٌمة التالٌة ‪:‬‬ ‫)’‪legend(‘sin(x)’,’cos(x)’,’sin(x)./x‬‬ ‫هذا األمر سٌأخذ لون الشكل األول وٌضع بجانبه أول عبارة تضعها فً أمر ‪ legend‬والثانً مع‬ ‫الثانً وهكذا ‪...‬‬

‫‪25‬‬

‫ثالثا ً ‪ :‬أمثلة عامة ‪...‬‬ ‫ المثال األول ‪:‬‬‫برنامج لرسم تغٌرات كثٌر الحدود ‪+ 1‬‬

‫‪+‬‬

‫‪+‬‬

‫= )‪ f(t‬مع تغٌرات ‪.t‬‬ ‫;‪t=-5:0.5:5‬‬ ‫;‪ft=t.^3+t.^2+t+1‬‬ ‫;)'‪plot(t,ft,'-*k‬‬ ‫‪grid on‬‬ ‫;)'‪title('ft=t.^3+t.^2+t+1‬‬ ‫;)'‪xlabel('time sec‬‬ ‫;)')‪ylabel('f(t‬‬

‫ المثال الثانً ‪:‬‬‫برنامج لرسم تغٌرات التابع البسٌط )‪ y = A sin(wt‬مع تغٌرات الزمن‪.‬‬ ‫;‪t=0:0.001:0.1‬‬ ‫;‪A=220‬‬ ‫;‪f=50‬‬ ‫;‪w=2*pi*f‬‬ ‫;)‪y=A*sin(w*t‬‬ ‫)'‪plot(t,y,'k-‬‬ ‫;)'‪title('Voltage curve‬‬

‫‪26‬‬

‫;)']‪xlabel('time [sec‬‬ ‫;)']‪ylabel('Amplitude [V‬‬ ‫;‪grid on‬‬ ‫‪pause‬‬ ‫)'‪plot(y,t,'k-‬‬ ‫;)'‪title('Voltage curve‬‬ ‫;)']‪xlabel('Amplitude [V‬‬ ‫;)']‪ylabel('time [sec‬‬ ‫;‪grid on‬‬

‫سبق وشرحنا عم التابع ‪ pause‬فً درس سابق ‪ ,‬حٌث هذا التابع ٌقوم بإٌقاف البرنامج حتى ٌضغط‬ ‫المستخدم أي زر لٌتمم عمل البرنامج حتى نهاٌته ‪ ,‬فً مثالنا هذا ٌقوم البرنامج بعملٌة الرسم وفق‬ ‫العالقة )‘‪ plot(t,y,’k-‬وعندما ٌضغط المستخدم أي زر من لوحة المفاتٌح فإن البرنامج سوف‬ ‫ٌحذف الرسم لٌرسم وفقا ً للعالقة )‘‪.plot(y,t,’k-‬‬

‫‪27‬‬

‫سأكتفً بهذا القدر بالنسبة للرسم ثنابً البعد فً الماتالب وسأدع األمور األخرى لك كً تتعلمها‬ ‫لوحدك وذلك باالستعانة ببٌبة ال‪ help‬المتوفرة فً الماتالب والتً تعد طرٌقة ممتازة للبحث تعلم‬

‫‪28‬‬

‫الماتالب ‪ ,‬علما ً ان برنامج الماتالب ٌوفر إمكانٌة الرسم الثنابً البعد بالصٌغة القطبٌة وبالصٌغة‬ ‫العقدٌة وٌوفر إمكانٌة الرسم على شكل أعمدة من أجل التطبٌقات اإلحصابٌة أو من أجل إظهار قٌم‬ ‫التوافقٌات فً التوترات والتٌارات فً التطبٌقات الهندسٌة ‪ ,‬كما ٌمكننا البرنامج من الرسم على لوحة‬ ‫بأبعاد الرسم اللوغارٌتمٌة‪.‬‬

‫‪29‬‬

‫التوابع الرٌاضٌة الخاصة فً الماتالب‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫ٌتم التعامل مع كثٌرات الحدود فً الماتالب من خالل توابع خاصة أعدت لحل كثٌرات الحدود ضمن‬ ‫هذا البرنامج ‪ ,‬حٌث ٌتم تحوٌل كثٌر الحدود إلى شعاع سطري ‪ ,‬وتمثل األعداد ضمن هذا النسق‬ ‫معامالت كثٌر الحدود ‪ ,‬وترتب ضمن النسق بشكل تنازلً ٌوافق قوى المتحول فً كثٌر الحدود بدءاً‬ ‫من القوة (‪ )n‬وحتى القوة (‪ )0‬بما فً ذلك المعامالت المعدومة للمتحول ‪ ,‬حٌث (‪ )n‬أعلى رتبة‬ ‫للمتحول فً كثٌر الحدود وذلك للتوافق ما األسلوب الذي ٌتعامل معه برنامج الماتالب فً حل‬ ‫كثٌرات الحدود‪.‬‬ ‫مثال بسٌط ‪:‬‬ ‫‪f(t) = 7 +6 +3 + +5‬‬ ‫ٌتم تمثٌل كثٌر الحدود هذا بالمصفوفة ‪:‬‬

‫ثانٌا ً ‪:‬العملٌات الحسابٌة على كثٌر الحدود ‪...‬‬ ‫‪ ‬إٌجاد جذور كثٌر حدود ‪:‬‬ ‫إن التابع ‪ roots‬هو التابع الخاص فً الماتالب الذي ٌمكن عن طرٌقه إٌجاد جذور كثٌر حدود ‪,‬‬ ‫حٌث ٌعطً هذا التابع جذور كثٌر الحدود على شكل شعاع عمود وعناصر هذا الشعاع هً جذور‬ ‫كثٌر الحدود‪.‬‬ ‫‪ ‬مثال (‪: )1‬‬ ‫;‪%f(t) = 7*t^4+6*t^3+3*t^2+t^1+5‬‬ ‫;]‪A = [7 6 3 1 5‬‬ ‫)‪A_roots = roots(A‬‬

‫‪30‬‬

‫‪ ‬مثال (‪: )2‬‬ ‫‪%f(t) = 7t^3+5t^2-3t^1+10‬‬ ‫;]‪A = [7 5 -3 10‬‬ ‫)‪A_roots = roots(A‬‬

‫‪ ‬إٌجاد كثٌر حدود انطالقا ً من جذوره ‪:‬‬ ‫باستخدام التابع الخاص ‪ٌ poly‬مكن إٌجاد كثٌر حدود إنطالقا ً من جذوره ‪ ,‬أي أن وظٌفة هذا التابع‬ ‫معاكسة تماما ً للتابع سابق الذكر‪.‬‬ ‫‪ ‬مثال (‪: )1‬‬ ‫;]‪A = [1 3 4 5 6‬‬ ‫)‪roots(A‬‬

‫)‪poly(ans‬‬

‫‪ ‬مثال (‪: )2‬‬ ‫;]‪A = [3 5 6 7 8 9‬‬ ‫)‪roots(A‬‬

‫‪31‬‬

‫)‪poly(ans‬‬

‫نالحظ من المثال الثانً أن هناك كثٌر حدود غٌر كثٌر الحدود الذي ادخلناه أوالً له نفس الجذور ‪,‬‬ ‫وبالتالً لٌس بالضرورة الحصول على التابع المدخل مسبقا ً عند استدعاء (إعادة تولٌد) كثٌر الحدود‬ ‫الجدٌد من التابع (‪ , )poly‬كمال هو جدٌر بالذكر أنه هذا تابع فٌه نسبة خطأ ال تتجاوز‬ ‫(‪ )1/1000000‬قد تظهر فً بعض الحاالت‪.‬‬

‫‪ ‬حساب قٌمة كثٌر حدود عند قٌمة معٌنة ‪:‬‬ ‫تتم هذه العملٌة فً الماتالب باستخدام التابع الخاص )‪ polyval(p,x‬حٌث ٌعبر ‪ p‬النسق‬ ‫(المصفوفة) الممثل لكثٌر الحدود ‪ ,‬والرمز ‪ٌ x‬عبر عن قٌمة المتحول المراد حساب كثٌر الحدود‬ ‫عنده‪.‬‬ ‫‪ ‬مثال (‪: )1‬‬ ‫‪+1‬‬

‫‪+‬‬

‫= )‪G(x‬‬

‫;]‪p = [1 1 1‬‬ ‫;‪x = 3‬‬ ‫)‪gx = polyval(p,x‬‬

‫‪gx= 13‬‬ ‫كما ٌمكن بطرٌقة ثانٌة إٌجاد قٌمة كثٌر الحدود ألجل قٌمة معٌنة باستخدام التابع الخاص ‪subs‬‬ ‫وباالستعانة بالتعلٌمة ‪ syms‬حٌث ٌقوم هذا األخٌر بتحوٌل قٌمة المتحول ‪ x‬إلى رمز ٌمكن التعامل‬ ‫معه من قبل البرنامج والتعرف علٌه ‪ ,‬واألمر ‪ subs‬الذي ٌقوم بحساب القٌمة لكثٌر الحدود عند قٌمة‬ ‫المتحول المطلوبة (أي أن التعلٌمة ‪ syms‬وظٌفتها تعرٌف المتغٌر ‪)x‬‬ ‫‪ ‬مثال (‪: )2‬‬ ‫‪syms x‬‬

‫‪32‬‬

‫;‪gx = x^2 + x + 1‬‬ ‫)‪subs(gx,3‬‬

‫‪ans = 13‬‬ ‫‪ ‬مثال (‪: )3‬‬ ‫‪syms x y‬‬ ‫;‪gx = y*x^2 + x*y + 1‬‬ ‫)‪subs(gx,x,3‬‬

‫‪ans = 12*y + 1‬‬ ‫)‪subs(gx,y,3‬‬

‫‪ans = 3*x^2 + 3*x + 1‬‬ ‫‪ ‬مثال (‪: )4‬‬ ‫المطلوب حساب قٌم كثٌر الحدود من أجل عناصر المصفوفة ‪x‬‬ ‫]‪p=[1 1 1‬‬ ‫]‪x = [2 4 6‬‬ ‫)‪gx = polyval(p,x‬‬

‫‪ ‬اشتقاق كثٌرات الحدود ‪:‬‬ ‫ٌمكن إٌجاد مشتق كثٌر حدود باستخدام التابع ‪ polyder‬وتكون النتٌجة عبارة عن كثٌر حدود ٌمثل‬ ‫مشتق كثٌر الحدود األصل‪.‬‬ ‫‪ ‬مثال (‪: )1‬‬ ‫;]‪gx = [2 5 -6 -5‬‬ ‫)‪a = polyder(gx‬‬

‫=‪a‬‬ ‫لمقارنة التابع مع مشتقه بٌانٌا ً ‪ٌ ,‬مكن رسمهما معا ً على نفس المحاور (محاور االحداثٌات)‬ ‫بالتعلٌمات التالٌة ‪:‬‬ ‫;‪x=-10:0.5:10‬‬ ‫;]‪gx=[2 5 -6 -5‬‬ ‫)‪a = polyder(gx‬‬ ‫)'‪plot(x,polyval(gx,x),'-*r',x,polyval(a,x),'-og‬‬

‫‪33‬‬

‫ واألمر‬syms ‫كما ٌمكن استخدام مشتق كثٌر الحدود بطرٌقة أخرى وذلك باستخدام األمر‬ ... diff(function name) : )2( ‫ مثال‬ syms x gx = 2*x^3 + 5*x^2 - 6*x - 5; diff(gx)

ans = 6*x^2 + 10*x -6

: )3( ‫ مثال‬ syms x gx = 2*sin(2*x)*exp(x) diff(gx)

ans = 4*cos(2*x)*exp(x) + 2*sin(2*x)*exp(x) : )4( ‫ مثال‬

34

‫‪syms x y‬‬ ‫)‪gx = 2*sin(x*y‬‬ ‫)‪diff(gx,x‬‬

‫‪ans = 2*cos(x*y)*y‬‬ ‫فً هذا المثال نالحظ أن التابع ‪ٌ diff‬مكنه أٌضا ً حساب المشتق بالنسبة ألحد المتحوالت (فً حال‬ ‫وجود أكثر من متحول فً التابع ‪ ,‬فً مثالنا هذا قمنا بإٌجاد مشتق التابع بالنسبة للمتحول (‪.)x‬‬ ‫كما ٌمكن أٌضا ً من خالل هذا التابع إٌجاد المشتقات من المرتبة الثانٌة والثالثة ومافوق وذلك كما ٌلً‬ ‫)‪diff(gx,x,2‬‬ ‫)‪diff(gx,x,3‬‬

‫أي إٌجاد المشتق (الثانً أو الثالث) بالنسبة للمتحول ‪....x‬‬ ‫‪ ‬تكامل كثٌرات الحدود ‪:‬‬ ‫من المعروف أن االشتقاق هو عملٌة معاكسة لالشتقاق ‪ ,‬وٌمكننا التابع ‪ polyint‬الموجود فً المكتبة‬ ‫الرٌاضٌة فً الماتالب من إٌجاد تكامل تابع من خالل إدخال معامالت كثٌر الحدود بشكل‬ ‫نسق(مصفوفة) كما سبق فً األمثلة السابقة ‪.‬‬ ‫‪ ‬مثال ‪:‬‬ ‫المطوب إٌجاد تكامل كثٌر الحدود (‪ )6x2+10x-6‬من أجل ثابت تكامل ‪k = -5‬‬ ‫;]‪p =[6 10 -6‬‬ ‫;‪k = -5‬‬ ‫)‪gx = polyint(p,k‬‬ ‫= ‪gx‬‬

‫كما ٌمكن إٌجاد تكامل كثٌر الحدود باستخدام ‪ syms‬والتابع ‪ int‬وذلك بشكل ٌماثل التابع ‪diff‬‬ ‫إلٌجاد المشتق ‪....‬‬ ‫)‪int(gx‬‬ ‫‪ ‬إٌجاد معادلة كثٌر الحدود المالبم ‪:‬‬ ‫إذا كان لدٌك مجموعة نقاط من منحنً ال تعرف معادلته وترٌد ان تشكل معادلة لهذا المنحنً ‪,‬‬ ‫فٌمكن االستعانة بالتابع ‪ polyfit‬للقٌام بهذه العملٌة ‪ ,‬حٌث أنه ٌعطٌك معادلة كثٌر الحدود المالبم‬ ‫للمنحنً بحٌث أنك تختار درجة كثٌر الحدود الذي ترٌد الحصول علٌه‪.‬‬

‫‪35‬‬

‫‪ ‬مثال ‪:‬‬ ‫;]‪x=[0:0.2:1.2‬‬ ‫;]‪y=[1 2 4 7 8 5 2‬‬ ‫)‪u=polyfit(x,y,3‬‬

‫=‪u‬‬ ‫)‪t=polyval(u,x‬‬ ‫)'*‪plot(x,y,'-or',x,t,'-‬‬

‫‪ ‬العملٌات الرٌاضٌة على كثٌرات الحدود ‪:‬‬ ‫ٌمكن جمع وطرح كثٌرات الحدود من خالل التعامل مع المصفوفات الممثلة لها مع مالحظة ان تكون‬ ‫كال المصفوفتٌن من نفس الدرجة والمثال التالً ٌوضح ذلك ‪....‬‬ ‫‪ ‬مثال ‪:‬‬ ‫‪2‬‬

‫‪3‬‬

‫‪4‬‬

‫‪A = 2x + x + 3x + x + 1‬‬ ‫‪B = 4x2 - x -1‬‬ ‫الحل ‪:‬‬ ‫;]‪A = [2 1 3 1 1‬‬ ‫;]‪B = [4 -1 -1‬‬ ‫]‪C = A + [0,0,B‬‬

‫‪36‬‬

‫]‪D = A - [0,0,B‬‬

‫=‪C‬‬ ‫=‪D‬‬ ‫اما عملٌة الجداء فٌمكن القٌام بها باالستعانة بالتابع ‪ conv‬مختصر كلمة (‪, (Convolution‬‬ ‫حٌث باستخدام هذا التابع ٌتم الحصول على جداء كثٌرات الحدود بشرط أن تعرف كثٌرات الحدود‬ ‫بأنساق موافقة ومعبرة عن معامالتها‪.‬‬ ‫)‪%conv(B,A‬‬

‫)‪conv(A,B‬‬

‫= ‪ans‬‬ ‫الجدول التالً ٌبٌن أهم التوابع المستخدمة وحسب الترتٌب األبجدي‬ ‫ضزب كثيز الحدود‬ ‫‪conv‬‬ ‫قسمت كثيز الحدود‬ ‫‪deconv‬‬ ‫اكتشاف معادلت كثيز حدود جذورها معلومت‬ ‫‪poly‬‬ ‫مشتق كثيز حدود‬ ‫‪polyder‬‬ ‫إيجاد كثيز الحدود المالئم‬ ‫‪polyfit‬‬ ‫تكامل كثيز الحدود‬ ‫‪polyint‬‬ ‫حساب قيمت كثيز الحدود عند قيمت معينت‬ ‫‪polyval‬‬ ‫إيجاد جذور كثيز الحدود‬ ‫‪roots‬‬ ‫مالحظة هامة ‪:‬‬ ‫تمكننا المصفوفات فً الماتالب من حل جملة ‪ n‬معادلة ب‪ n‬متغٌر بسهولة تامة وذلك كما ٌوضح‬ ‫المثال التالً ‪....‬‬ ‫‪5x1 – 2x2 + x3 = 1‬‬ ‫‪x2 + x3 = 0‬‬ ‫‪x1 + 6x2 – 3x3 = 4‬‬ ‫الحل ‪:‬‬ ‫‪clear‬‬ ‫;]‪A = [5 -2 1;0 1 1; 1 6 -1‬‬ ‫;]‪B = [1;0;4‬‬ ‫‪X=inv(A)*B‬‬

‫= ‪X‬‬

‫‪37‬‬

‫لنأخذ مثال آخر ‪...‬‬

‫الحل ‪:‬‬

‫‪x1 – 5x2 – 8x3 + x4 = 3‬‬ ‫‪3x1 + x2 – 3x3 – 5x4 = 1‬‬ ‫‪x1 – 7x3 + 2x4 = -5‬‬ ‫‪11x2 + 20x3 – 9x4 = 2‬‬ ‫‪clear‬‬ ‫;]‪A = [1 -5 -8 1;3 1 -3 -5;1 0 -7 2;0 11 20 -9‬‬ ‫;]‪B = [3;1;-5;2‬‬ ‫)‪det(A‬‬ ‫‪X=inv(A)*B‬‬

‫بمالحظة أن محدد المصفوفة ‪ٌ A‬ساوي الصفر فهذا ٌعنً أننا ال ٌمكن أن نجد مقلوب المصفوفة‬ ‫وبالتالً تكون جملة المعادالت السابقة غٌر متوافقة ولٌس لها حل‪.‬‬

‫‪38‬‬

‫برامج هندسٌة‬

: ‫ البرنامج األول‬ ‫برنامج ٌبٌن فرق الطور بٌن اإلشارات الجٌبٌة‬ t=linspace(-1,1,101);ً ‫مصفوفة متزاٌدة خطٌا‬ x=2*cos(2*pi*t); y=2*cos(2*pi*(t-0.125)); z=2*sin(2*pi*t); plot(t,x,t,y,t,z) axis([-1,1,-3,3]) title('Sinusoidal Signals') ylabel('Amplitude') xlabel('Time (s)') text(-0.13,1.75,'x') ‫تسمٌة كل شكل‬ text(-0.07,1.25,'y') text(0.01,0.8,'z') grid on ‫تفعٌل الشبكة‬

39

‫‪ ‬البرنامج الثانً ‪:‬‬ ‫برنامج التمثٌل الطوري لإلشارة الجٌبٌة أي رسم القسم الحقٌقً بالنسبة للعقدي ورسم كل منهما‬ ‫بالنسبة للزمن ‪...‬‬ ‫من المعلوم أن اإلشارة الجٌبٌة لها تمثٌل عقدي ٌبٌن بالشكل التالً ‪= cos(𝜃) + j.sin(𝜃 :‬‬ ‫;)‪t=(-2e-03:0.02e-03:2e-03‬‬ ‫التابع األسً فً الماتالب‪x=exp(j*2000*pi*t); exp‬‬ ‫القسم الحقٌقً لإلشارة ;)‪y=real(x‬‬ ‫القسم الوهمً لإلشارة (التخٌلً) ;)‪z=imag(x‬‬ ‫تقسٌم الرسم )‪subplot(2,1,1‬‬ ‫)'‪plot(x,'-.k‬‬ ‫‪axis square‬‬ ‫جعل المحاور مربعة الشكل‬ ‫)')‪title('exp(jwt‬‬ ‫)'‪xlabel('Real‬‬ ‫)'‪ylabel('Imaginary‬‬ ‫)‪subplot(2,1,2‬‬ ‫)'‪plot(t,y,'-',t,z,':‬‬ ‫)'‪title('Re[exp(jwt)] and Im[exp(jwt)] vs t w=1000*2*pi‬‬ ‫)')‪xlabel('Time (s‬‬ ‫‪grid on‬‬ ‫)‪legend('Re[exp(j\omegat)]','Im[exp(j\omegat)]',-1‬‬

‫‪40‬‬

: ‫ البرنامج الثالث‬ ... ‫برنامج دمج نغمتٌن‬ t=linspace(-1e-2,1e-2,1001); x=cos(2*pi*1500*t) + cos(2*pi*1300*t);‫غٌر تردد‬,‫نفس المطال‬ m=2*cos(2*pi*100*t); )‫اإلشارة المرجعٌة (إشارة الغالف‬ plot(t,m,'b:',t,-m,'b:',t,x,'k') axis([-0.01 0.01 -2.4 2.4]) title('Beating between tones') xlabel('Time (s)') ylabel('Amplitude')

: ‫ البرنامج الرابع‬ ... ‫برنامج ٌمثل دخول الضجٌج على اإلشارة الجٌبٌة‬ t=linspace(0,10,512) s=sin(2*pi/5*t); ‫اإلشارة األصلٌة‬ n=0.1*randn(size(t)); ‫إشارة الضجٌج‬ x = s + n; ‫اإلشارة المشوهة‬ disp('Signal to Noise Ratio(SNR), dB') SNR = 20*log10(std(s)/std(n)) ‫نسبة اإلشارة إلى الضجٌج‬

41

‫)'‪plot(t,x,'.',t,s,'r‬‬ ‫)')‪xlabel('Time (s‬‬ ‫)'‪ylabel('Signal Amplitude‬‬ ‫)'‪title('Noisy signal‬‬

‫استخدمنا فً هذا البرنامج التابع ‪ std‬وتكمن وظٌفة هذا التابع فً حساب االنحراف المعٌاري‪.‬‬

‫‪ ‬البرنامج الخامس ‪:‬‬ ‫برنامج لرسم اإلشارة المقومة‬ ‫)‪t=linspace(0,10,512‬‬ ‫;)‪x=sin(t‬‬ ‫;)‪x1=x.*(x>0‬‬ ‫اإلشارة المقومة األولى‬ ‫;)‪x2=abs(x‬‬ ‫اإلشارة المقومة الثانٌة‬ ‫)‪subplot(3,1,1‬‬ ‫تجزبة الرسم‬ ‫)‪plot(t,x‬‬ ‫)')‪xlabel('Time (s‬‬ ‫)'‪ylabel('Amplitude‬‬ ‫)'‪title('continuous signal‬‬ ‫)‪subplot(3,1,2‬‬

‫‪42‬‬

plot(t,x1) axis([0 10 -1.1 1.1]) title('Discontinuous signal') xlabel('Time (s)') ylabel('Amplitude') subplot(3,1,3) plot(t,x2) axis([0 10 -1.1 1.1]) title('DC signal') xlabel('Time (s)') ylabel('Amplitude')

43

‫‪ ‬البرنامج السادس ‪:‬‬ ‫برنامج لحساب المقاومة المكافبة لدارة مؤلفة من ‪ n‬ممانعة من الشكل(‪ )R jX‬بحٌث ٌحدد‬ ‫المستخدم عدد الممانعات الكلً فً الدارة وقٌمة كل ممانعة بقسمٌها الحقٌقً والوهمً ‪ ,‬كما ٌحدد‬ ‫المستخدم طرٌقة توصٌل الممانعات بشكل تسلسلً أو تفرعً وبالتالً ٌكون المستخدم قد حدد شكل‬ ‫الدارة بالكامل‪...‬‬ ‫ٌجب فً هذا البرنامج مالحظة أن الممانعة رقم ‪ n‬ال ٌهمنً طرٌقة توصٌلها وماٌهمنً هو طرٌقة‬ ‫توصٌل الممانعة (‪ )n-1‬معها ولذلك سنالحظ أن البرنامج لن ٌسأل عن طرٌقة توصٌل الممانعة ‪n‬‬ ‫وإنما سٌبدأ السؤال بالممانعة (‪)n-1‬‬ ‫فرضا ً‬ ‫;‪n = 8‬‬ ‫مصفوفة سطرٌة واحدٌة ;)‪P = ones(1,n‬‬ ‫‪for i=n:-1:1‬‬ ‫إدخال قٌم الممانعات بالترتٌب ;)]'‪P(1,i) = input (['Z' num2str(i) ':‬‬ ‫‪end‬‬ ‫;)‪Q = ones(1,n-1‬‬ ‫‪for j=1:n‬‬ ‫‪if j==1‬‬ ‫;)]' ‪connect = input([' Z' num2str(n-j) ' series or Parallel :‬‬ ‫‪switch connect‬‬ ‫تحدٌد نوع توصٌل الممانعات‬ ‫}'‪case {'series' 's‬‬ ‫;)‪Q(1,n-1) = P(1,n) + P(1,n-j‬‬ ‫}'‪case {'Parallel' 'P‬‬ ‫;))‪Q(1,n-1) = (P(1,n)*P(1,n-j))/(P(1,n)+P(1,n-j‬‬ ‫‪end‬‬ ‫‪else‬‬ ‫‪if n==j‬‬ ‫;‪break‬‬ ‫إٌقاف البرنامج عندما تصل الحلقة لقٌمة مساوٌة لعدد الممانعات فً الدارة‬ ‫‪else‬‬ ‫;)]' ‪connect = input([' Z' num2str(n-j) ' series or Parallel :‬‬ ‫‪switch connect‬‬ ‫}'‪case {'series' 's‬‬ ‫;)‪Q(1,n-j) = Q(1,n-j+1) + P(1,n-j‬‬ ‫}'‪case {'Parallel' 'P‬‬ ‫;))‪Q(1,n-j) = Q(1,n-j+1)*P(1,n-j)/(Q(1,n-j+1)+P(1,n-j‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫هذا العنصر من المصفوفة ٌمثل الممانعة الكلٌة المكافبة للدارة;)‪Zeq = Q(1,1‬‬

‫تنفٌذ البرنامج ‪:‬‬

‫‪44‬‬

: ‫ البرنامج السابع‬ w=0:1:2000; z=(10+(10.^4-j.*(10.^6./(w)))./(10+j.*(0.1.*w-10.^5./w))); Real=real(z); plot(w,Real); xlabel('radian frequency w'); ylabel('Real Part of Z'); grid on pause(5) imagine=imag(z); plot(w,imagine); grid on xlabel('radian frequency w'); ylabel('Imaginary Part of Z');

45

: ‫ البرنامج الثامن‬ .‫ مع الزمن‬V(t)=Asin(wt+alpha)+k ‫برنامج لرسم تغٌرات إشارة التوتر المتناوب‬ f=50 Vm=110; alpha=pi/6; k=0.25*Vm; T=1/f; step=T/20; t1=0 t2=3*T; t=t1:step:t2; V=Vm*sin(2*pi*f*t+alpha)+k; fig=figure; ax=axes; set(ax,'xlim',[t1 t2],'ylim',[-200 200]); title('V=Vm*sin(2*pi*f*t+alpha)+k'); xlabel('Time Axis (second)'); ylabel('Voltage Axis (Volt)'); hold on;

46

‫;‪grid on‬‬ ‫;)]‪ta=line([t1 t2],[0 0‬‬ ‫;)‪set(ta,'color','r','linewidth',2‬‬ ‫;)]‪Vo=line([t1 t2],[k k‬‬ ‫;)'‪set(Vo,'color','b','linestyle','-.‬‬ ‫;)'*‪plot(t,V,'r-‬‬

‫الجدول التالً ٌبٌن أهم األوامر والتوابع فً الماتالب‬ ‫القٌمة المطلقة أو طوٌلة العدد العقدي‬ ‫زاوٌة الطور‬ ‫الجواب عند حدم إسناد التعبٌر‬ ‫‪Arc tg‬‬ ‫تدرٌج المحور ٌدوٌا ً‬ ‫رسم مخطط بود‬ ‫مسح فضاء العمل‬ ‫مرافق العدد العقدي‬ ‫تجٌب الزاوٌة‬ ‫التجٌب القطعً‬ ‫إٌجاد معٌن مصفوفة‬ ‫إٌجاد قطر مصفوفة‬ ‫إنهاء البرنامج‬ ‫التابع األسً‬ ‫رفع مصفوفة لقوة‬ ‫المصفوفة الحٌادٌة‬ ‫إعطاء ‪ 15‬مرتبة بعد الفاصلة العشرٌة‬

‫‪Abs‬‬ ‫‪Angle‬‬ ‫‪Ans‬‬ ‫‪Atan‬‬ ‫‪Axis‬‬ ‫‪Bode‬‬ ‫‪Clc‬‬ ‫‪Conj‬‬ ‫‪Cos‬‬ ‫‪Cosh‬‬ ‫‪Det‬‬ ‫‪Diag‬‬ ‫‪exit‬‬ ‫‪exp‬‬ ‫‪expm‬‬ ‫‪eye‬‬ ‫‪Format long‬‬ ‫‪47‬‬

‫إعطاء ‪ 15‬مرتبة إضافٌة للقوة‬ ‫إعطاء ‪ 5‬مراتب‬ ‫إعطاء ‪ 5‬مراتب إضافٌة للقوة‬ ‫التحول إلى المستوي الالبالسً‬ ‫التحول إلى المستوي ‪z‬‬ ‫رسم خطوط الشبكة‬ ‫تثبٌت المخطط المرسوم على الشاشة‬ ‫الجزء الحقٌقً لعدد عقدي‬ ‫الجزء التخٌلً لعدد عقدي‬ ‫عدد ال نهابً‬ ‫مقلوب مصفوفة‬ ‫طول شعاع‬ ‫فضاء شعاعً خطً‬ ‫اللوغارٌتم الطبٌعً (النبري)‬ ‫الرسم على محورٌن لوغارٌتمٌٌن‬ ‫أخذ لوغارٌتم عناصر مصفوفة‬ ‫فضاء شعاعً لوغارٌتمً‬ ‫اللوغارٌتم العشري‬ ‫القٌمة العظمى‬ ‫القٌمة المتوسطة‬ ‫القٌمة المتوسطة التربٌعٌة‬ ‫القٌمة الصغرى‬ ‫لٌس رقم (ٌعامل لمحرف)‬ ‫رسم مخطط ناٌكوٌست‬ ‫‪Pi = 3.14‬‬ ‫الرسم فً المستوي الدٌكارتً‬ ‫الرسم فً المستوي القطبً‬ ‫حاصل ضرب العناصر‬ ‫تولٌد أعداد عشوابٌة أو مصفوفة‬ ‫حساب رتبة مصفوفة‬ ‫باقً قسمة‬ ‫توسٌع الجزء العشري‬ ‫رسم الجذور الصفرٌة‬ ‫رسم نصف لوغارٌتمً \ المحور ‪ x‬هو‬ ‫اللوغارٌتمً‬

‫‪Format long e‬‬ ‫‪Format short‬‬ ‫‪Format short e‬‬ ‫‪freqs‬‬ ‫‪freqz‬‬ ‫‪grid‬‬ ‫‪hold‬‬ ‫‪Real‬‬ ‫‪imag‬‬ ‫‪inf‬‬ ‫‪inv‬‬ ‫‪length‬‬ ‫‪linspace‬‬ ‫‪log‬‬ ‫‪Loglog‬‬ ‫‪Log m‬‬ ‫‪Logspace‬‬ ‫‪Log 10‬‬ ‫‪Max‬‬ ‫‪Mean‬‬ ‫‪Medium‬‬ ‫‪Min‬‬ ‫‪Nan‬‬ ‫‪Nyquist‬‬ ‫‪Pi‬‬ ‫‪Plot‬‬ ‫‪Polar‬‬ ‫‪Prod‬‬ ‫‪Rand‬‬ ‫‪Rank‬‬ ‫‪Rem‬‬ ‫‪Residue‬‬ ‫‪Rlocus‬‬ ‫‪Semilogx‬‬

‫‪48‬‬

‫رسم نصف لوغارٌتمً \ المحور ‪ y‬هو‬ ‫اللوغارٌتمً‬ ‫إسناد عدد‬ ‫مصفوفة الجذور التربٌعٌة‬ ‫االنحراف المعٌاري‬ ‫رسم منحنً االستجابة الواحدٌة‬ ‫إدراج المتحوالت الموجودة فً الذاكرة‬

‫‪Semilogy‬‬ ‫‪Sign‬‬ ‫‪Sqrtm‬‬ ‫‪Std‬‬ ‫‪Step‬‬ ‫‪Who‬‬

‫الجدول التالً ٌبٌن أهم العملٌات والعالقات فً الماتالب‬ ‫‪+‬‬ ‫‬‫*‬ ‫^‬ ‫‪ꞌ‬‬ ‫<‬ ‫=<‬ ‫>‬ ‫==‬ ‫=~‬ ‫&‬ ‫!‬ ‫~‬

‫الجمع‬ ‫الطرح‬ ‫الضرب‬ ‫الرفع لقوة‬ ‫منقول مصفوفة‬ ‫أصغر من‬ ‫أصغر أو ٌساوي‬ ‫أكبر من‬ ‫ٌساوي‬ ‫الٌساوي‬ ‫‪AND‬‬ ‫‪OR‬‬ ‫‪NOT‬‬

‫الجدول التالً ٌبٌن أهم الرموز الخاصة فً الماتالب‬ ‫][‬ ‫)(‬ ‫‪ꞌ‬‬ ‫;‬ ‫‪:‬‬ ‫‪%‬‬

‫ٌستخدم لتشكٌل المصفوفات‬ ‫التعبٌر الرٌاضً عن األشعة‬ ‫الفصل بٌن التعلٌقات وبٌن مناقشة الوظابف‬ ‫سطروإنهاء السطر ووقف الكتابة ومنع األمر‬ ‫المنفذ قبلها من الظهور‬ ‫إقرار امتداد شعاع‬ ‫إشارة تدل على أن ما بعدها تعلٌق ٌهمله البرنامج‬

‫‪49‬‬

‫التحكم بالمنفذ التفرعً‬ ‫‪Controling with Parallel Port‬‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫ٌعد المنفذ التفرعً هو األكثر شٌوعا ً لسهولة استخدامه والتحكم به فً المشارٌع الصغٌرة التً قد‬ ‫ُتنفذ فً المنازل ‪ ,‬حٌث ٌسمح لنا هذا المنفذ بإدخال بٌانات بحزمة بعرض ‪ 9‬بت أو بإخراج بحزمة‬ ‫بعرض ‪ 12‬بت فً أي لحظة ‪ ,‬كما ٌحوي هذا المنفذ على أربع خطوط تحكم وخمس خطوط حالة و‬ ‫ثمان خطوط لتبادل المعطٌات ‪ ,‬وفً أغلب الحواسٌب نشاهد هذا المنفذ فً لوحة المنافذ الخلفٌة‬ ‫والنوع األكثر انتشاراً هو ‪ D-type‬الذي ٌحوي ‪.(male or Female( 25pin‬‬ ‫وقد ٌوظف هذا المنفذ فً كثٌر من األمور مثل التحكم بدارات إلكترونٌة أو التحكم باألنواع المختلفة‬ ‫للمحركات و النظم غٌر المعقدة ‪ ,‬كما ٌستخدم فً التحكم بمبرمجات ‪ PIC/Atmel‬وفً األتمتة‪.‬‬

‫ثانٌا ً ‪ :‬المنفذ التفرعً ‪...‬‬ ‫تعتبر بوابة الطابعة بوابة للخرج فقط ولكن لحسن الحظ باإلضافة إلى البتات الثمانٌة المتوفرة‬ ‫كمخارج رقمٌة فإنها تمتلك العدٌد من خطوط المصافحة و التً ال ٌقل عددها عن تسعة خطوط‬ ‫خمسة مداخل وأربعة مخارج و الشكل الجدول ٌوضح توزع الخطوط فً موصل الطابعة المؤلف‬ ‫من ‪ 25‬خط من النوع ‪.D‬‬ ‫‪Pin No‬‬ ‫‪(D-Type‬‬ ‫)‪25‬‬

‫‪Hardware‬‬ ‫‪Direction‬‬ ‫‪Register‬‬ ‫‪Inverted‬‬ ‫‪In/out‬‬

‫‪1‬‬

‫‪In/Out‬‬

‫‪Control‬‬

‫‪2‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪3‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪4‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪5‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪6‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪7‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪8‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪9‬‬

‫‪Out‬‬

‫‪Data‬‬

‫‪Yes‬‬

‫‪50‬‬

Yes

Yes

Yes

D : Data (in,out)

-

Status

In

10

Status

In

11

Status

In

12

Status

In

13

Control

In/Out

14

Status

In

15

Control

In/Out

16

Control

In/Out

17

Gnd

18 – 25

C : Control

-

S : Status

-

Gnd : Ground

.‫وبهذه الطرٌقة ٌمكننا التمٌٌز بٌن أرجل المعطٌات و أرجل التحكم و األرجل المؤرضة‬

51

‫ثالثا ً ‪ :‬التحكم بالمنفذ التفرعً بواسطة الماتالب ‪...‬‬ ‫ ٌحتاج الماتالب لتعرٌف المنفذ الذي ستتعامل معه التعلٌمة التالٌة ‪:‬‬‫)‪>> dio=digitalio(ˈparallelˈ,1‬‬ ‫إن التعلٌمة ‪ digitalio‬تعرف المنفذ الرقمً فنكتب اسم المنفذ وهو هنا المنفذ التفرعً ثم نكتب رقمه‬ ‫أي ‪ LPT1‬أو ‪ LPT2‬وهنا تم تعرٌف ‪.LPT1‬‬ ‫ بعد تعرٌف المنفذ علٌنا تحدٌد األرجل التً نحتاجها وتعرٌفها هل هً دخل أم خرج وٌمكننا القٌام‬‫بذلك من خالل التعلٌمة التالٌة ‪:‬‬ ‫)ˈ‪>> addline(dio,[0:7],ˈout‬‬ ‫حٌث أن هذه التعلٌمة قامت بجعل األرجل من ‪ 2‬إلى ‪ 9‬كأرجل خرج وهً ترقم فً الماتالب من ‪0‬‬ ‫إلى ‪.7‬‬ ‫ فً الخطوة األخٌرة قمنا بتحدٌد أرجل الخرج واآلن ولو أردنا أن نخرج قٌمة معٌنة (‪)0 or 1‬‬‫من هذه األرجل فما علٌنا إال ان نستعمل التعلٌمة التالٌة ‪:‬‬ ‫)]‪>> putvalue(dio,[1 1 1 1 0 0 0 0‬‬ ‫بهذه الطرٌقة نكون قد أخرجنا القٌمة التً نرٌد من المنفذ التفرعً‪ .‬إذا أردنا اآلن أن نقرأ معطٌات‬ ‫من جهاز ما فٌمكننا ذلك بالتعلٌمة التالٌة وذلك بعد تحدٌد األرجل التً نرٌد القراءة منها ‪:‬‬ ‫)‪>> getvalue(dio‬‬ ‫‪ ‬برنامج اإلخراج ‪:‬‬ ‫إن كتابة ثالث تعلٌمات عند كل إخراج وإدخال أمر ممل ولذلك ٌجب تجهٌز برنامج لإلخراج‬ ‫وآخر لإلدخال وسنكتب برنامج كامل إلخراج المعطٌات فً ‪: m-file‬‬ ‫)‪function c=out(a,n‬‬ ‫;)‪dio=digitalio('parallel',1‬‬ ‫;)'‪addline(dio,a,'out‬‬ ‫;)‪putvalue(dio,n‬‬ ‫‪ : a o‬أرقام األرجل التً ترٌد التخرٌج علٌها وتدخل ‪ a‬كمصفوفة تحوي أرقام‬ ‫األرجل‪.‬‬ ‫‪ : n o‬البٌانات التً ترٌد إخراجها وٌمكنك إدخالها بالشكل العشري أو الثنابً‪.‬‬

‫‪52‬‬

‫‪ ‬برنامج اإلدخال ‪:‬‬ ‫البرنامج التالً هو لقراءة المعطٌات المدخلة ‪:‬‬ ‫)‪function c=in(a‬‬ ‫;)‪dio=digitalio('parallel',1‬‬ ‫;)'‪addline(dio,a,'in‬‬ ‫;)‪getvalue(dio‬‬ ‫رابعا ً ‪ :‬امثلة عملٌة ‪...‬‬ ‫‪ ‬مثال(‪)1‬‬ ‫برنامج للتحكم بإضاءة ثمان لٌدات موصولة إلى األرجل (‪ )9 – 2‬وٌقوم بإضاءة اللٌد األول ثم ٌطفبه‬ ‫وٌضًء اللٌد الثانً وهكذا إلى الثامن ‪...‬‬ ‫)‪funcion flash2(a‬‬ ‫‪for i=1:a‬‬ ‫‪for t=0:7‬‬ ‫‪c=2^t‬‬ ‫)‪out([0:7],c‬‬ ‫)‪pause(0.05‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫)‪out([0:7],0‬‬ ‫فً هذا البرنامج استدعٌنا برنامج ‪ out‬الذي كتبناه سابقا ً وحفظناه وكان االستدعاء هو فقط ذكر اسم‬ ‫البرنامج مع عناصر الدخل أو المتغٌرات‪.‬‬ ‫استخدمنا المتغٌر ‪ t‬لكً ال نكتب األعداد الثنابٌة فً كل مرة‪.‬‬ ‫‪ : a‬عدد مرات تكرار البرنامج‪.‬‬ ‫قٌمة ‪t‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬

‫قٌمة ‪c‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪8‬‬ ‫‪16‬‬ ‫‪32‬‬

‫التحوٌل الثنابً للمتغٌر ‪c‬‬ ‫‪00000001‬‬ ‫‪00000010‬‬ ‫‪00000100‬‬ ‫‪00001000‬‬ ‫‪00010000‬‬ ‫‪00100000‬‬

‫‪53‬‬

‫‪6‬‬ ‫‪7‬‬

‫‪64‬‬ ‫‪128‬‬

‫‪01000000‬‬ ‫‪10000000‬‬

‫إن التعلٌمة ‪ pause‬هً تعلٌمة تأخٌر زمنً واحدته الثانٌة فتحدد له كم ثانٌة ترٌد التأخٌر حتى تلحظ‬ ‫التغٌٌرات على اللٌدات‪.‬‬ ‫والتعلٌمة األخٌرة فً البرنامج هً من أجل إطفاء جمٌع اللٌدات بعد إنهاء البرنامج‪.‬‬ ‫بطرٌقة ثانٌة ‪:‬‬ ‫ٌمكن كتابة البرنامج بطرٌقة أخرى كالتالً ‪:‬‬ ‫)‪function flash12(a‬‬ ‫‪for i=1:a‬‬ ‫‪for t=1:8‬‬ ‫;)‪h=zeros(1,8‬‬ ‫;‪h(t)=1‬‬ ‫)‪out([0:7],h‬‬ ‫)‪pause(0.05‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫)‪out([0:7],0‬‬ ‫فً هذا البرنامج تم استخدام مصفوفة صفرٌة من ثمان عناصر فً كل مرة ٌتم تحوٌل أحد هذه‬ ‫األصفار لٌصبح واحداً وهو ٌعبر عن رقم اللٌد الواجب إضاءته‪.‬‬ ‫‪ ‬مثال(‪)2‬‬ ‫برنامج بتحوٌل األعداد العشرٌة المتزاٌدة إلى الشكل الثنابً عن طرٌق إضاءة اللٌدات ‪...‬‬ ‫)‪function flash1(a‬‬ ‫‪for i=1:a‬‬ ‫‪for t=1:255‬‬ ‫)‪out([0:7],t‬‬ ‫)‪pause(0.05‬‬ ‫‪end‬‬ ‫‪end‬‬ ‫)‪out([0:7],0‬‬ ‫إن اإلدخال هنا تم بشكل عشري‪.‬‬

‫‪54‬‬

)3(‫ مثال‬ ... ‫برنامج ٌقوم بإضاءة اللٌدات من الطرفٌن إلى المنتصف‬ function flash(a) for i=1:a out([0:7],255) pause(0.25) out([0:7],[0 1 0 0 0 0 1 0]) pause(0.25) out([0:7],[0 0 1 0 0 1 0 0]) pause(0.25) out([0:7],[0 0 0 1 1 0 0 0]) pause(0.25) end out([0:7],0)

55

‫تنفٌذ وبرمجة واجهات المستخدم الرسومٌة فً الماتالب‬ ‫‪Graphic User Interface‬‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫إن المشكلة التً كانت تواجه مستخدمً الماتالب قدرته الضعٌفة على العرض وإبراز العمل ‪ ,‬ولذلك‬ ‫فإن الكثٌر من المبرمجٌن كانوا ٌعتمدون علٌه فً الحساب وتنفٌذ وحل المشاكل الرٌاضٌة ‪ .‬ثم‬ ‫ٌستخدمون نتابجه فً برامج أخرى مثل ‪ Visual Basic‬مثالً ‪.‬‬ ‫فً النسخ الحدٌثة من الماتالب ظهرت وبقوة فكرة إدخال عملٌة بناء الواجهات فً الماتالب وهو ما‬ ‫ٌعرف بواجهات المستخدم الرسومٌة ‪ ,‬إن هذه الواجهات جعلت من برنامج الماتالب برنامجا ً متكامالً‬ ‫من حٌث السهولة فً البرمجة وحل المسابل والقدرة على عرض وإظهار النتابج بشكل رابع ‪,‬‬ ‫وإنشاء بٌبة تفاعلٌة بٌنه وبٌن المستخدم‪.‬‬

‫ثانٌا ً ‪ :‬ماهو مفهوم واجهات المستخدم الرسومٌة وكٌف تعمل ‪...‬‬ ‫إن واجهات المستخدم الرسومٌة عبارة عن عرض بٌانً تخطٌطً ٌتضمن وسابل أو مكونات تؤمن‬ ‫للمستخدم إنجاز مهام فعالة وجذابة ضمن بٌبة الماتالب‪.‬‬ ‫كما إن مكونات الواجهة ممكن أن تكون قوابم (‪ , )Menus‬أشرطة األدوات (‪ , )Toolbars‬أزرار‬ ‫الضغط ‪ ,‬أزرار خٌار ‪.....‬إلخ ‪ ,‬كما تستطٌع أٌضا ً فً بٌبة ماتالب عبر ‪ GUI‬أن تعرض المعطٌات‬ ‫على شكل جداول أو كأشكال بٌانٌة ‪ ,‬وتستطٌع تجمٌع المكونات المترابطة ‪.‬‬ ‫أما آلٌة العمل فتعتمد على المبدأ التالً ‪:‬‬ ‫كل مكون (جزء) فً ال‪ GUI‬وحتى الواجهة ككل تترافق بواحدة أو اكثر من اإلجرابٌات المكتوبة‬ ‫من قبل المستخدم والتً تعرف باالستدعاءات (‪.)Callbacks‬‬ ‫غالبا ً ما ٌعرف هذا النوع من البرمجة بالبرمجة المقادة بالحدث ( ‪Event-Driven‬‬ ‫‪ )Programming‬إن الحدث هنا هو ضغط الزر ‪ ,‬فً البرمجة المقادة بالحدث فإن تنفٌذ االستدعاء‬ ‫ٌكون متزامنا ً ‪ ,‬ومتحكما ً به من قبل أحداث موجهة من خارج البرمجٌات‪.‬‬

‫‪56‬‬

‫ثالثا ً ‪ :‬برمجة الواجهة ‪... GUI‬‬ ‫عندما تقوم بتخزٌن تخطٌط واجهتك ‪ ,‬فإن ‪ GUIDE‬وبشكل أوتوماتٌكً ٌولد ملف ماتالب (‪)M-file‬‬ ‫الذي تستطٌع أن تستخدمه للتحكم بكٌفٌة عمل ‪ .GUI‬إن ملف ماتالب (‪ )M-file‬هذا ٌؤمن شٌفرة‬ ‫لتهٌبة الواجهة وٌتضمن إطار عمل الستدعاءات الواجهة ‪( GUI‬اإلجرابٌات التً تنفذ بالتجاوب مع‬ ‫األحداث المولدة من المستخدم مثل نقر الفأرة)‪ٌ .‬مكنك باستخدام محرر ملف (‪ )M-file‬إضافة شٌفرة‬ ‫إلى االستدعاءات إلنجاز المهام التً نرٌد أن نفعلها ‪ ,‬وسٌتوضح ذلك أكثر فً األمثلة ‪.‬‬ ‫‪ .1‬فتح ‪ GUI‬جدٌدة فً محرر التخطٌط ‪:‬‬ ‫شغل ‪ GUIDE‬بكتابة الكلمة ‪ guide‬على موجه الماتالب ‪ ,‬هذا سٌعرض مربع البداٌة السرٌعة‬ ‫للدلٌل (‪ , )Guide Quick Start‬عند ظهور مربع الحوار سابق الذكر اختر خٌار ‪ GUI‬فارغة‬ ‫()‪ )Blank GUI(default‬انقر ‪ OK‬لعرض الواجهة الفارغة فً محرر التخطٌط‪.‬‬

‫‪57‬‬

‫الحظ أن المكونات معروضة فً الشكل باالسم وٌمكن عرضها حسب الرمز وذلك من خالل‬ ‫التفضٌالت ‪ File >>> Preferences‬ومن ثم كما بالشكل‬

‫‪ .2‬محاذاة مكونات ‪GUI‬‬ ‫‪58‬‬

‫ٌمكنك فً الواقع استخدام أداة المحاذاة (‪ )Alignment Tool‬من أجل محاذاة المكونات بالنسبة‬ ‫لبعضها البعض ‪ ,‬إذا كانت من نفس النوع ‪ ,‬فمن أجل محاذاة أزرار الضغط الثالثة المبٌنة ‪ ,‬قم‬ ‫بما ٌلً ‪:‬‬ ‫‪ )1‬اختر أزرار الضغط الثالثة وذلك بالضغط على ‪ Ctrl‬والنقر على هذه األزرار‪.‬‬ ‫‪ )2‬اختر من قابمة األدوات (‪ )Tools‬محاذاة العناصر (‪ )Align Objects‬من أجل عرض‬ ‫أداة المحاذاة‪.‬‬ ‫‪ )3‬نفذ الحالة المناسبة لترتٌب األزرار لدٌك (فً حالتنا هذه نفصل بٌن أزرار الضغط‬ ‫باالتجاه العمودي والمحاذاة تكون إلى الٌسار فً االتجاه األفقً)‪.‬‬

‫‪59‬‬

‫‪ .3‬عناصر التحكم ‪:‬‬ ‫سنتعرض اآلن فقط لوظٌفة كل عنصر من عناصر التحكم والحقا ً سنتطرق لكل عنصر على‬ ‫حدى ‪.‬‬ ‫‪ : Push Button .1‬هذا الزر نضغط علٌه بالفأرة لٌعود لحالته الطبٌعٌة بعد الضغط أي كما‬ ‫هً معظم األزرار التً نتعامل معها فً نزام التشغٌل كزر موافق أو إغالق أو غٌرها‪.‬‬ ‫‪ : Toggle Button .2‬أما هذا الزر فله وضعٌتٌن ٌنتقل بٌنهما عند كل ضغطة بزر الفأرة‪.‬‬ ‫‪ : Radio Button .3‬زر اختٌار وعادة ٌستخدم اكثر من واحد وٌكون واحد منها فقط مختار‪.‬‬ ‫‪ : Check Box .4‬أٌضا ً زر اختٌار حٌث نضع إشارة صح بجانب الخٌار الذي نرٌده‪.‬‬ ‫‪ : Edit Text .5‬المكان الذي ٌسمح للمستخدم الكتابة فٌه إلدخال رقم سري أو كلمة أو ‪.....‬إلخ‬ ‫‪ : Static Text .6‬نصوص ثابتة نرٌد إظهارها للمستخدم‪.‬‬ ‫‪ٌ : Slider .7‬شبه شرٌط التمرٌر‪.‬‬ ‫‪ : List Box .8‬مربع ٌحوي خٌارات عدٌدة ومدٌدة‪.‬‬ ‫‪ : Pop-up menu .9‬تشبه ‪ List Box‬ولكن بشكل آخر تعطً قابمة منسدلة‪.‬‬ ‫‪ : Axes‬إلظهار الرسوم والصور‪.‬‬ ‫‪.10‬‬ ‫‪.Panel / Button Group‬‬ ‫‪.11‬‬

‫‪60‬‬

‫‪.12‬‬

‫‪.axtiveX Component‬‬

‫‪ .4‬أهم التعلٌمات المستخدمة فً ‪: GUI‬‬ ‫‪ .1‬تعلٌمة ‪ : get‬مهمتها ببساطة أخذ أو معرفة أي خاصٌة ألي عنصر ترٌد بمعنى أنه عندما‬ ‫تضغط على أي عنصر مرتٌن فإن النافذة التً سوف تفتح أمامك هً نافذة خصابص هذا‬ ‫العنصر ‪ ,‬إن كل هذه الخاصٌات تستطٌع معرفتها عن طرٌق تعلٌمة ‪.get‬‬ ‫)‪Variable=get(handles.buttonname,ꞌpropertyꞌ‬‬ ‫‪ .2‬تعلٌمة ‪ : set‬هذه التعلٌمة مقابلة لعمل ‪ get‬فهً تقوم بوضع أو تغٌٌر خاصٌة معٌنة ما‬ ‫برمجٌاً‪.‬‬ ‫)‪set(handles.buttonname,ꞌpropertyꞌ,variablename‬‬ ‫‪ .3‬تعلٌمة ‪ : global‬ملف البرمجة ٌحوي على العدٌد من التوابع لكن هذه التوابع مستقلة أي أن‬ ‫المتغٌرات الموجودة فً ‪ function‬ما ال تؤثر على المتغٌرات الموجودة فً اآلخر‬ ‫(المتغٌرات المحلٌة) حتى لو كانا ٌملكان نفس االسم فلذلك أحٌانا ً نرٌد تصدٌر قٌمة المتغٌر‬ ‫من تابع آلخر فنلجأ لجعل هذا المتغٌر عالمً أو شامل وذلك باستخدام هذه التعلٌمة‪.‬‬ ‫‪ .5‬أهم العناصر المشتركة لعناصر التحكم ‪:‬‬ ‫‪ .1‬خاصٌة ‪ : string‬وهً خاصٌة موجودة فً كل عناصر التحكم ومسؤولة عن إظهار الكتابة‬ ‫على عنصر التحكم ‪ ,‬وٌمكن الوصول إلٌها بالضغط مرتٌن على أي عنصر لنجدها فً قابمة‬ ‫خصابص العنصر‪ ,‬أو باختصار ‪.Property Inspector>>string‬‬

‫‪ .2‬الخاصٌة ‪ : tag‬وهً خاصٌة موجودة فً كل عناصر التحكم وهو عبارة عن اسم التابع‬ ‫المسؤول عن برمجة الزر‪.‬‬

‫‪61‬‬

‫‪ .3‬الخاصٌة ‪ : Visible‬وهً خاصٌة تمكن من إظهار أو إخفاء العناصر (المكونات) وهً مفٌدة‬ ‫فً الحاالت التً ٌكون فٌها عدد كبٌر من الحاالت وعندها ننشا لوحة لكل حالة ونجعلها‬ ‫مخفٌة من هذا الخٌار ومن ثم نظهرها عندما نحتاجها‪.‬‬ ‫‪ .6‬سلوك ضبط القٌاس ‪:‬‬ ‫ٌمكنك أن تتحكم فٌما إذا كان المستخدم ٌستطٌع أن ٌضبط قٌاس نافذة الشكل المتضمنة واجهتك‬ ‫وكٌف ٌتعامل الماتالب مع ضبط القٌاس ‪ ,‬حٌث إن ‪ٌ GUIDE‬وفر ثالث خٌارات وهً ‪:‬‬ ‫‪ : Non-resizable ‬ال ٌستطٌع المستخدم فً هذه الحالة تغٌٌر قٌاس النافذة (حالة افتراضٌة)‬ ‫‪ٌ : Proportional ‬قوم الماتالب فً هذا الخٌار وبشكل أوتوماتٌكً بضبط قٌاس مكونات‬ ‫الواجهة بشكل نسبً مع قٌاس نافذة الشكل الجدٌد‪.‬‬ ‫‪ٌ(Other ‬ستخدم ‪ : )ResizeFcn‬تتم برمجة الواجهة بحٌث ٌتم ضبط المكونات بطرٌقة‬ ‫معٌنة عندما ٌقوم المستخدم بإعادة ضبط قٌاس الشكل‪.‬‬ ‫وٌمكن الوصول لهذه الخٌارات للضبط من خالل ‪Tools >> GUI option‬‬

‫مثال بسٌط ‪:‬‬ ‫برنامج لجمع عددٌن ‪...‬‬

‫‪62‬‬

‫مالحظات حول البرنامج ‪:‬‬ ‫‪ٌ .1‬جب االنتباه دوما ً لخاصٌة ‪ Tag‬الخاص بكل كابن فً الواجهة وذلك لكً نستطٌع التعامل عند‬ ‫كتابة الكود الخاص بالواجهة أو ‪ Callback‬الخاص بالكابن المسؤول عن تنفٌذ البرنامج‪.‬‬ ‫‪ .2‬الحظ كٌف ساستخدم األمرٌن ‪ set‬و ‪ get‬حٌث ٌقوم البرنامج بأخذ القٌمتٌن ‪ x,y‬ومن ثم ٌعطً‬ ‫القٌمة ‪ sum‬للكابن ‪ sum‬المسؤول عن إظهار النتٌجة‪.‬‬ ‫‪ .3‬الكود البرمجً المسؤول عن العملٌة المطلوبة من البرنامج (هنا الجمع) نضعها فً تابع الزر‬ ‫(الكابن) المسؤول عن تنفٌذ العملٌة المطلوبة‪.‬‬

‫بعد كتابة ‪ guide‬فً النافذة الربٌسٌة لبرنامج الماتالب واختٌار نافذة جدٌدة ٌظهر لنا الشكل التالً ‪:‬‬

‫‪63‬‬

‫فً هذا البرنامج نحن بحاجة إلى الكابنات التالٌة ‪:‬‬ ‫‬‫‬‫‪-‬‬

‫‪( Static Text‬للتوضٌح فقط(‬ ‫‪( Edit Text‬كابن ٌعمل كوسٌط دخل أو خرج فً هذا البرنامج)‬ ‫‪( Push Button‬لتنفٌذ العملٌة البرمجٌة)‬

‫بعد إضافة عنصر ‪ Edit Text‬نعدل فً خصابصه (ٌمكن الوصول إلٌها كما ٌبٌن الشكل) بحٌث‬ ‫نعدل خاصٌة ‪ String‬لتصبح ‪ x‬ونعدل خاصٌة ‪ tag‬لتصبح ‪ x‬أٌضا ً (انتبه لهذه التغٌرات جٌداً)‪.‬‬

‫نقوم اآلن بإضافة كابنٌن من نوع ‪ Edit Text‬والتعدٌل فً الخصابص لكل منهما بحٌث الثانً ٌكون‬ ‫كل من ‪ string & tag‬باسم ‪ y‬والثالث ٌكون كل من ‪ string & tag‬باسم ‪ , sum‬ومن أجل جمالٌة‬ ‫‪64‬‬

‫واجهة المستخدم نقوم بمحاذاة العناصر باستخدام األداة ‪ Align‬سابقة الذكر ‪...‬‬ ‫نقوم بإضافة كابن من نوع ‪ Push Button‬وذلك لتنفٌذ العملٌة المطلوبة من البرنامج وهً الجمع‬ ‫والتعدٌل على خاصتً ‪ string & tag‬لتصبح ‪ sum1‬وبالتالً تكون الواجهة أصبحت كما بالشكل‬ ‫التالً ‪....‬‬

‫بعد حفظ البرنامج نقوم بالدخول إلى ‪ Callback‬الخاص بكابن الزر كما ٌوضح الشكل ‪...‬‬

‫وفً جسم التابع الخاص بالكابن ‪ Push Buttom‬والمسمى ‪ sum1‬نضٌف بعد األسطر المبٌنة‬ ‫باللون األخضر األسطر التالٌة ‪:‬‬

‫‪65‬‬

‫;))ˈ‪x = str2double(get(handles.x,ˈstring‬‬ ‫;))ˈ‪y = str2double(get(handles.y,ˈstring‬‬ ‫;‪sum3 = x + y‬‬ ‫;)‪set(handles.sum,ˈstringˈ,sum3‬‬ ‫وبعد ذلك ٌكون تنفٌذ البرنامج كما ٌوضح الشكل (ٌتم التشغٌل باستخدام زر التشغٌل األخضر من‬ ‫ملف ‪ m-file‬وذلك لتفادي حدوث األخطاء)‬

‫‪66‬‬

‫رابعا ً ‪ :‬المكونات المتاحة فً ‪... GUI‬‬ ‫المكون‬ ‫‪Push Button‬‬

‫‪Toggle Button‬‬

‫‪Radio Button‬‬

‫‪Check Box‬‬

‫‪Edit text‬‬

‫‪Static text‬‬ ‫‪Slider‬‬

‫‪List Box‬‬ ‫‪Pop-Up Menu‬‬ ‫‪Axes‬‬ ‫‪Panel‬‬

‫الوصف‬ ‫تقوم أزرار الضغط بفعل معٌن عندما ٌنقر علٌها‬ ‫عندما تنقر على زر الضغط ‪ ,‬سٌظهر أنه نقر‬ ‫وعندما تحرر الفأرة عنه فإن الزر سٌظهر‬ ‫مرتفعا ً‬ ‫تولد أزرار التبدٌل فعالً وتشٌر فٌما إذا كانت‬ ‫مفعلة أو ملغٌة ‪ ,‬عندما تضغط على زر التبدٌل‬ ‫فإنه ٌظهر مضغوطا ً موضحا ً أنه مفتوح ‪ ,‬عندما‬ ‫تحرر زر الفأرة على عكس زر الضغط فإن زر‬ ‫الضغط ٌبقى مضغوطا ً حتى تنقره مرة أخرى‬ ‫إن أزرار الخٌار تشبه مربعات االختٌار ولكن‬ ‫تكون نوعا ً متعارضة ضمن مجموعة من أزرار‬ ‫الخٌار المرتبطة ‪ ,‬أي ٌمكنك أن تحدد فقط زراً‬ ‫واحداً فً نفس الوقت وتتم قٌادة هذه الكابنات من‬ ‫قبل ‪Button Group‬‬ ‫إن مربعات االختٌار تولد فعالً عندما تختبر‬ ‫وتشٌر لحالتها أكانت مختبرة أم غٌر مختبرة‪ ,‬إن‬ ‫مربعات االختبار مفٌدة عندما ٌتم تزوٌد المستخدم‬ ‫بعدد من االختبارات المستقلة التً تضبط النمط‬ ‫إن عناصر تحكم النص المحرر عبارة عن حقول‬ ‫تمكن المستخدمٌن من إدخال أو تعدٌل العبارات‬ ‫النصٌة‬ ‫إن عناصر تحكم النص الستاتٌكً تعرض‬ ‫خطوطا ً من النصوص‬ ‫تقبل المنزلقات دخالً رقمٌا ً ضمن مجال محدد‬ ‫وذلك بتمكٌن المستخدم من تحرٌك الشرٌط‬ ‫المنزلق الذي ٌدعى بالمنزلقة أو اإلبهام‬ ‫تعرض مربعات القابمة قابمة من األجزاء وتمكن‬ ‫المستخدمٌن من اختٌار أحد األجزاء أو أكثر‬ ‫تعرض القابمة المنسدلة قابمة من االختبارات‬ ‫عندما ٌنقر المستخدمٌن على السهم‬ ‫إن المحاور تمكن واجهتك من عرض الرسومات‬ ‫والصور‬ ‫تجمع اللوحة مكونات الواجهة ‪ ,‬بالتجمٌع‬ ‫البصري بالنسبة ألدوات التحكم ‪ ,‬فإذا حركت‬

‫‪67‬‬

‫اللوحة فإن أوالدها ستتحرك معها وتحافظ على‬ ‫مكانها على اللوحة‬ ‫تعتبر مجموعة األزرار هذه شبٌهة باللوحات‬ ‫ولكن تستخدم لتقود سلوك االختبار الحصري‬ ‫ألزرار الخٌار وأزرار التبدٌل‬ ‫تمكنك هذه المكونة من عرض أدوات التحكم‬ ‫الفعالة فً واجهتك‬

Button Group

ActiveX Component

... ‫ برمجة عناصر التحكم‬: ً ‫خامسا‬ Radio Button )1 : ‫إن هذا الزر ٌمتلك خاصٌة التحدٌد أو عدمه فهو إذا ٌبرمج بالطرٌقة التالٌة‬ if(get(hObject,ꞌValueꞌ)==get(hObject,ꞌMaxꞌ)) else end ‫إما إذا كان لدٌنا عدة أزرار من هذا النوع ونرٌد تحدٌد أحداها وإزلة التحدٌد عن الباقٌن فإن‬ : ‫العبارات البرمجٌة تكون‬ Function radiobutton1_callback(hObject,eventdata,handles) Set([handles.tadiobutton2 handles.radiobutton3],ꞌValueꞌ,0) Function radiobutton2_callback(hObject,eventdata,handles) Set([handles.tadiobutton1 handles.radiobutton3],ꞌValueꞌ,0) Function radiobutton3_callback(hObject,eventdata,handles) Set([handles.tadiobutton2 handles.radiobutton1],ꞌValueꞌ,0) Pop-Up Menus )2 ‫ وعندما نرٌد أن نخص كل‬String ‫نضع خٌارات عدٌدة فً هذه القابمة المنسدلة عن طرٌق‬ ‫ وهذا ٌمكننا من‬String ً‫ تقدم لنا رقم السطر الذي اخترناه ف‬value‫خٌار ببرنامج معٌن فإن ال‬ : ً‫كتابة التال‬ Function popupmenu_callback(hObject,eventdata,handles) Val=get(hObject,ꞌValueꞌ); Switch val case 1

68

case 2 end : ‫ولكن إذا كان لدٌنا خٌارات عدٌدة ونرٌد التعامل مع ما كتبناه ولٌس مع رقم السطر‬ Function popupmenu_callback(hObject,eventdata,handles) val=get(hObject,ꞌValueꞌ); String_list=get(hObject,ꞌstringꞌ); Selected_string=string_list{val}; ً‫ وفٌها جمٌع الخٌارات التً وضعت ف‬cell ‫ ستكون مصفوفة من النوع‬string_list ‫إن نتٌجة‬ .string Toggle Button )3 ‫ الموجودة فً الخصابص وقٌمة‬value‫ فً ال‬8 ‫إن هذا الزر ٌأخذ وضعٌتٌن فعند الضغط ٌأخذ قٌمة‬ : ‫ عن اإلفالت‬0 Function togglebutton_callback(hObject,eventdata,handles) Button_state=get(hObject,ꞌValueꞌ); if button_state==1 ……. elseif button_state==0 ……. end Check Boxes )4 Function checkbox1_callback(hObject, eventdata, handles) if(get(hObject,ꞌValueꞌ)==get(hObject,ꞌMaxꞌ)) else end

edit text )5 Function edittext1_callback(hObject, eventdata, handles) user_string = get(hObject,ꞌstringꞌ);

69

‫‪Sliders )6‬‬ ‫)‪Function slider1_callback(hObject, eventdata, handles‬‬ ‫;)‪slider_string = get(hObject,ꞌValueꞌ‬‬ ‫‪List Box )7‬‬ ‫إن هذا الزر ٌشبه ‪ Pop-Up Menu‬إال أنك تستطٌع ان تختار هنا عدة خٌارات فً نفس الوقت‪.‬‬ ‫ضع هذا الكابن فً صفحة فارغة من ‪ GUI‬واكتب فً ‪ String‬عدة خٌارات ثم شغل الملف وحاول‬ ‫أن تختار اكثر من خٌار تجد إنك لن تستطٌع ذلك فماذا نفعل إزاء ذلك ؟ نقوم بفتح خصابص الزر‬ ‫وتغٌٌر قٌمة ‪ max‬إلى قٌمة غٌر الواحد ‪ ,‬ثم نعود ونالحظ أنه أصبح بإمكاننا اختٌار عدة خٌارات‪.‬‬ ‫)‪Function listbox1_callback(hObject, eventdata, handles‬‬ ‫;)‪index_selected = get(handles.listbox1,ꞌValueꞌ‬‬ ‫;)‪list = get(handles.listbox1,ꞌstringꞌ‬‬ ‫;)‪item_selected = list(index_selected‬‬ ‫سادسا ً ‪ :‬االستدعاءات ‪...‬‬ ‫عند االنتهاء من تخطٌط الواجهة البد من برمجة سلوك هذه الواجهة ‪ ,‬إذ تتحكم الشٌفرة التً تكتبها‬ ‫بالكٌفٌة التً ستتجاوب بها الواجهة ‪ GUI‬مع األحداث مثل نقرة زر ‪ ,‬حركة منزلقة ‪ ,‬اختٌار جزء‬ ‫من قابمة ‪ ,‬أو إنشاء أو حذف المكونات ‪ ,‬تأخذ هذه البرمجة أشكاالً عدة مثل مجموعة توابع ‪ ,‬طلب‬ ‫االستدعاءات ‪ callbacks‬ولكل مكونة وحتى للواجهة‪ GUI‬نفسها‪.‬‬ ‫‪ .1‬ماهو االستدعاء ‪: Callback‬‬ ‫إن االستدعاء عبارة عن التابع الذي تكتبه وترفقه مع مكونة ‪ GUI‬محددة أو مع شكل الواجهة‬ ‫‪ , GUI‬إنه ٌتحكم بالواجهة ‪ GUI‬أو سلوك المكونة عن طرٌق إنجاز بعض األفعال بالتجاوب‬ ‫مع الحدث المطبق على المكونة ‪ٌ ,‬دعى هذا النوع من البرمجة غالبا ً بالبرمجة المقادة‬ ‫بالحدث ‪.event-driven Programming‬‬ ‫عندما ٌحدث حدث للمكونة ‪ ,‬فإن الماتالب ٌستحضر استدعاء المكونة التً طلب فً الحدٌث‬ ‫‪ ,‬وٌمكن أن تكون المكونة أي وسٌلة تحكم مثل زر ضغط أو مربع قابمة أو منزلقة كما ٌمكن‬ ‫أن تكون أٌضا ً قابمة أو لوحة أو مجموعة أزرار‪.‬‬ ‫‪ .2‬أنواع االستدعاءات ‪:‬‬

‫‪70‬‬

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

‫‪Callback‬‬

‫‪CloseRequestFcn‬‬ ‫‪CreatFcn‬‬

‫‪DeleteFcn‬‬

‫‪KeyPressFcn‬‬ ‫‪ResizeFcn‬‬

‫‪SelectionChangeFcn‬‬

‫حدث التنفٌذ‬

‫المكونات التً تستخدم‬ ‫الخاصٌة‬ ‫المحور – الشكل – مجموعة‬ ‫األزرار – لوحة – عناصر‬ ‫تحكم واجهة المستخدم‬

‫تتنفذ عندما ٌقوم المستخدم‬ ‫بنقر زر بٌنما ٌكون المؤشر‬ ‫على أو ضمن ‪5‬بٌكسل من‬ ‫المكونة أو الشكل‬ ‫قابمة المحتوٌات – قابمة –‬ ‫هو فعل التحكم‪ ,‬وٌنفذ على‬ ‫عناصر تحكم واجهة المستخدم‬ ‫سبٌل المثال عندما ٌنقر‬ ‫المستخدم على زر الضغط أو‬ ‫ٌختار جزءاً من القابمة‬ ‫الشكل‬ ‫ٌنفذ عندما ٌغلق الشكل‬ ‫ٌقوم بتهٌبة المكونة عندما ٌتم المحاور – الشكل – مجموعة‬ ‫األزرار – اللوحة – قابمة‬ ‫إنشاؤها‪ ,‬إنه ٌنفذ بعد إنشاء‬ ‫المحتوٌات – القابمة –‬ ‫المكونة أو الشكل ولكن قبل‬ ‫عناصر تحكم واجهة المستخدم‬ ‫عرضها‬ ‫ٌنجز عملٌات التنظٌف فقط المحاور – الشكل – مجموعة‬ ‫األزرار – اللوحة – قابمة‬ ‫قبل إلغاء المكونة أو الشكل‬ ‫المحتوٌات – القابمة –‬ ‫عناصر تحكم واجهة المستخدم‬ ‫ٌنفذ هذا االستدعاء عندما ٌنقر الشكل – عناصر تحكم واجهة‬ ‫المستخدم‬ ‫المستخدم على مفتاح من لوحة‬ ‫المفاتٌح ومكونة االستدعاءات‬ ‫أو الشكل تكون مفعلة‬ ‫مجموعة األزرار – الشكل –‬ ‫ٌنفذ عندما ٌعٌد المستخدم‬ ‫اللوحة‬ ‫ضبط قٌاس اللوحة ‪ ,‬مجموعة‬ ‫األزرار ‪ ,‬أو الشكل حٌث‬ ‫تكون خاصٌة ‪ Resize‬للشكل‬ ‫مضبوطة على ‪on‬‬ ‫مجموعة األزرار‬ ‫ٌنفذ عندها ٌختار المستخدم‬ ‫زر خٌار أو زر تبدٌل مختلف‬ ‫فً مكونة مجموعة األزرار‬ ‫‪71‬‬

‫‪WindowButtonDawnFcn‬‬ ‫‪WindowButtonMotionFcn‬‬ ‫‪WindowButtonUpFcn‬‬

‫مالحظة‬

‫ٌنفذ عندما تضغط زر الفأرة‬ ‫عندما ٌكون المؤشر ضمن‬ ‫الشكل‬ ‫ٌنفذ عندما تحرك المؤشر‬ ‫ضمن نافذة الشكل‬ ‫ٌنفذ عندما تحرر زر الفأرة‬

‫الشكل‬ ‫الشكل‬ ‫الشكل‬

‫إن عناصر التحكم التً تتفاعل مع المستخدم تتضمن أزرار الضغط ‪ ,‬المنزلقات ‪,‬‬ ‫أزرار خٌار ‪ ,‬مربعات اختٌار ‪ ,‬مربعات نص قابل للتحرٌر ‪ ,‬مربعات نص ستاتٌكً‬ ‫‪ ,‬مربعات قابمة ‪ ,‬وأزرار تبدٌل ‪ٌ ,‬شار إلٌها أحٌانا ً بعناصر تحكم واجهة المستخدم‬ ‫‪.UIControls‬‬

‫عندما ٌقوم ‪ GUIDE‬بتولٌد ملف ‪ M-File‬فإنه وبشكل أوتوماتٌكً ٌضم قوالب أغلب االستدعاءات‬ ‫شابعة االستخدام لكل مكونة ‪ .‬إن الملف ‪ٌ M-file‬تضمن أٌضا ً شٌفرة التهٌبة ‪ ,‬وكذلك استدعاء تابع‬ ‫االفتتاح استدعاء تابع الخرج‪ٌ .‬جب علٌك أن تضٌف شٌفرة إلى استدعاء المكونات لواجهتك من أجل‬ ‫أن تنجز األعمال التً ترٌد ‪ ,‬ومن جهة أخرى تستطٌع أٌضا ً إضافة شٌفرة الستدعاء تابع االفتتاح‬ ‫واستدعاء تابع الخرج‪ .‬إن األجزاء األساسٌة لملف ‪ M-file‬الواجهة مرتبة كما ٌبٌن الجدول ‪...‬‬ ‫الوصف‬ ‫المقطع‬ ‫تعرض على سطر استجابة لألمر ‪ , help‬إن‬ ‫تعلٌقات ‪Comments‬‬ ‫تحرٌر هذه التعلٌقات ضروري لواجهتك‬ ‫مهام تهٌبة ‪ ,GUIDE‬ال تحرر هذه الشٌفرة‬ ‫تهٌئة ‪Initialization‬‬ ‫ٌنجز مهام التهٌبة التً ترٌد قبل أن ٌدخل‬ ‫تابع االفتتاح (‪)opening function‬‬ ‫المستخدم إلى الواجهة ‪GUI‬‬ ‫ٌرجع المخارج إلى سطر أمر ماتالب بعدما‬ ‫تابع الخرج (‪)Output function‬‬ ‫ٌقوم تابع االفتتاح بإرجاع التحكم وقبل تسلٌم‬ ‫التحكم إلى سطر األمر‬ ‫ٌتحكم بسلوك شكل الواجهة والمكونات‬ ‫استدعاءات الشكل والمكونات‬ ‫الفردٌة ‪ ,‬إن ماتالب ٌطلب االستدعاء‬ ‫(‪)Component and figure callbacks‬‬ ‫بالتجاول مع الحدث الجزبً للمكونة أو للشكل‬ ‫نفسه‬

‫‪72‬‬

‫سابعا ً ‪ :‬البنٌة ‪... handles‬‬ ‫ٌنشا ‪ GUIDE‬البنٌة ‪ handles‬التً تتضمن مقابض كل العناصر فً الشكل ‪ ,‬من أجل الواجهات‬ ‫‪ GUI‬التً تتضمن نص محرر ‪ ,‬لوحة ‪ ,‬قابمة منبثقة ‪ ,‬وزر ضغط ‪ ,‬فإن البنٌة ‪ handles‬تبدو فً‬ ‫األصل مشابهة للنص التالً ‪ ,‬إن ‪ٌ GUIDE‬ستخدم خاصٌة ‪ tag‬للمكونات لتسمٌة عنصر البنٌة وذلك‬ ‫= ‪handles‬‬ ‫من أجل التعامل معه‬ ‫‪Figure1: 160.0011‬‬ ‫‪Edit1: 9.0020‬‬ ‫‪Uipanel1: 8.0017‬‬ ‫‪Popupmenu: 7.0018‬‬ ‫‪Pushbutton1: 161.0011‬‬ ‫‪Output: 160.0011‬‬ ‫إن ‪ٌ GUIDE‬نشا وٌعرض بنٌة ‪ handles‬كمعطٌات للواجهة ‪ , GUI‬حٌث تمرر كوسٌط دخل لكل‬ ‫االستدعاءات وتمكن استدعاءات الواجهة من مشاركة قٌم الخاصٌة ومعطٌات التطبٌق‪.‬‬

‫مثال (‪: )1‬‬ ‫واجهة ‪ GUI‬ذات محاور متعددة ‪...‬‬ ‫ٌنشا فً هذا المثال واجهة ‪ GUI‬تتضمن جملتً محاور لرسم تغٌرات التابع ‪ ,‬مع الزمن ورسم‬ ‫تغٌراتها أٌضا ً مع التردد‪.‬‬ ‫)‪sin(w1t)+sin(w2t‬‬ ‫المدخالت المطلوبة ‪ٌ :‬دخل المستخدم ‪ f1,f2,t‬حٌث ٌحدد المستخدم المجال الزمنً كامالً أي القٌمة‬ ‫البدابٌة والنهابٌة والخطوة‪.‬‬ ‫‪ ‬البرنامج ‪:‬‬ ‫فً هذه البرنامج وفً الواجهة الرسومٌة نحن بحاجة إلى ‪:‬‬ ‫ ‪ 3‬كابنات من نوع ‪.edit text‬‬‫ كابن من نوع ‪.Push Button‬‬‫‪ -‬كابنٌن من نوع ‪.axes‬‬

‫‪73‬‬

‫ باإلضافة إلى الكابنات اإلضافٌة المساعدة مثل النص الستاتٌكً واللوحات ‪....‬‬‫‪ ‬خطوات العمل ‪:‬‬ ‫‪ -8‬نقوم بداٌة برسم وتخطٌط واجهة المستخدم التخاطبٌة ‪.GUI‬‬ ‫‪ -2‬نحدد خاصٌة ‪ tag‬لكل عنصر من العناصر‪.‬‬ ‫‪ -3‬ندخل إلى االستدعاء الخاص بكل كابن ونكتب برنامجنا فً المكان الذي ٌهمنا (أي فً الكابن‬ ‫الذي ٌهمنا كتابة البرنامج الذي سٌنفذ فٌه)‬ ‫‪ ‬تنفٌذ البرنامج ‪:‬‬ ‫بعد تعدٌل خاصٌة ‪ tag‬لكل كابن ‪ ,‬ندخل لالستدعاء الخاص بالكابن ‪ Push Button‬ونضع‬ ‫ماٌلً ‪:‬‬ ‫;))'‪f1 = str2double(get(handles.f1,'string‬‬ ‫;))'‪f2 = str2double(get(handles.f2,'string‬‬ ‫;))'‪t = eval(get(handles.t,'string‬‬ ‫;)‪x=sin(2*pi*f1*t)+sin(2*pi*f2*t‬‬ ‫;)‪y = fft(x,512‬‬ ‫تحوٌل فورٌٌه السرٌع‬ ‫;‪m = y.*conj(y)/512‬‬ ‫;‪f=1000*(0:256)/512‬‬ ‫)‪axes(handles.axes1‬‬ ‫))‪plot(f,m(1:257‬‬ ‫;)')‪title('sin(2*pi*f1*t)+sin(2*pi*f2*t‬‬ ‫;)'‪xlabel('Frequency‬‬ ‫‪grid on‬‬ ‫)‪axes(handles.axes2‬‬ ‫)‪plot(t,x‬‬ ‫;)')‪title('sin(2*pi*f1*t)+sin(2*pi*f2*t‬‬ ‫;)'‪xlabel('Time‬‬ ‫‪grid on‬‬

‫‪74‬‬

: )2( ‫مثال‬ ‫برنامج نختار فٌه شكل الموجة الجٌبٌة من قابمة منسدلة لٌرسم لنا تغٌراتها مع الزمن‬ ....pi/10 ‫)والخطوة‬0
75

axes(handles.axes) plot(t,y)

76

‫حاول التعدٌل فً البرنامج بحٌث‪:‬‬ ‫‪ – 8‬اجعل اسم الشكل الظاهر ٌكتب تحته مباشرة بالطرٌقة التً تجدها مناسبة(على عنصر منفصل‬ ‫عن المحاور)‬ ‫‪ – 2‬اجعل القابمة المنسدلة تظهر لك زر خاص بالشكل (كابن من نوع ‪ )Push Buttom‬لترسم‬ ‫عن طرٌقه تغٌرات التابع مع الزمن‪.‬‬ ‫‪ – 3‬ضع خٌار للبرنامج ٌتٌح للمستخدم إمكانٌة تحدٌد المجال الزمنً فً حال رغبته بذلك‪.‬‬ ‫‪ – 4‬أعد البرنامج السابق كامالً باستخدام ‪ Radio Button‬بدالً من ‪.Pop-up menu‬‬ ‫وسنبدأ التعدٌل بهذا البرنامج بحٌث نحاول تغطٌة أكبر قدر ممكن من األفكار ‪...‬‬

‫‪77‬‬

... ً‫ سنجعل اسم التابع ٌظهر وفوقه الرسم وذلك كما ٌل‬-1 set ‫ السابق بحٌث نضٌف وباالعتماد على التابع‬Callback ‫لكً نقوم بذلك سنقوم بالتعدٌل على‬ : ً‫ وذلك على النحو التال‬... ‫تعلٌمة إلظهار اسم الشكل المرسوم‬ . .

switch state case 1 set(handles.edit,'string','select the function') case 2 y=sin(t) set(handles.edit,'string','sin') case 3 y=cos(t) set(handles.edit,'string',cos') case 4 y=exp(t( set(handles.edit,'string','exp') end . .

78

‫‪ -2‬اآلن سنتعلم كٌفٌة التحكم بظهور وإخفاء الكابنات فً بٌبة الواجهات وذلك باالستفادة من التابع‬ ‫‪ set‬ومن الخاصٌة ‪.vision‬‬ ‫سنقوم فً هذه الخطوة بتحدٌد المجال الزمنً الذي سٌتم الرسم بناءاً علٌه وذلك بإضافة كابن من‬ ‫نوع ‪ Radio Buttom‬وكابنٌن من نوع ‪ edit text‬من أجل إدخال وتحدٌد المجال الزمنً‬ ‫وذلك كما ٌلً‪...‬‬

‫بعد وضع الكابنات كما هو موضح بالشكل ‪ ,‬من خصابص عنصري اإلدخال نجعل الخاصٌة‬ ‫‪Vision  off‬‬ ‫بعد ذلك نقوم بالدخول إلى ‪ Callback‬الخاص بال‪ popupmenu‬ونضٌف إلى ما سبق الحالة‬ ‫الشرطٌة التالٌة وذلك كما ٌلً ‪....‬‬ ‫;)ˈ‪s=get(handles.radiobutton1,ˈvalue‬‬ ‫‪if s==0‬‬

‫‪79‬‬

t=0:pi/10:2*pi; else str=str2double(get(handles.from,ˈstringˈ)); nd=str2double(get(handles.to,ˈstringˈ)); if isnan(str)==1 | isnan(nd)==1 set(handles.edit, ˈstringˈ, ˈEnter two limitsˈ else t=str(nd-str)/100:nd; end end ‫ ونضٌف‬RadioButton ‫ الخاص بعنصر الراٌو المضاف‬Callback ‫بعد ذلك نقوم بالدخول إلى‬ .... ً‫إلٌه األسطر التالٌة وذلك كما ٌل‬ If (get(handles.radiobutton1, ˈstringˈ)==get(handles.radiobutton1, ˈMaxˈ)) set(handles.from,ˈvisibleˈ, ˈonˈ) set(handles.to,ˈvisibleˈ, ˈonˈ) set(handles.text3,ˈvisibleˈ, ˈonˈ) set(handles.text4,ˈvisibleˈ, ˈonˈ) else set(handles.from,ˈvisibleˈ, ˈoffˈ) set(handles.to,ˈvisibleˈ, ˈoffˈ) set(handles.text3,ˈvisibleˈ, ˈoffˈ) set(handles.text4,ˈvisibleˈ, ˈoffˈ) end

80

81

‫تحلٌل الدارات الكهربائٌة‬ ‫أوالً ‪ :‬تحلٌل دارات التٌار المستمر‬ ‫أوالً ‪ :‬مقدمة‬ ‫فً هذا الفصل سنعتمد على الطرابق المختلفة المعتمدة فً حساب التٌارات والتوترات فً دارات‬ ‫التٌار المستمر ‪ ,‬ومن ثم سنعتمد على برنامج الماتالب من أجل حل التوابع المعقدة التً ٌصعب‬ ‫الوصول لنتابجها بدون الحاسب‪.‬‬

‫ثانٌا ً ‪ :‬تحلٌل نقاط الدارة (قانون كٌرشوف األول)‬ ‫‪Y11V1 + Y12V2 + …….+ Y1mVm = ∑ I1‬‬ ‫‪Y21V1 + Y22V2 + …….+ Y2mVm = ∑ I1‬‬ ‫‪Ym1V1 + Ym2V2 + …….+ YmmVm = ∑ Im‬‬ ‫‪-1‬‬

‫=‬

‫→‬

‫=‬

‫مثال ‪:‬‬ ‫المطلوب إٌجاد كمونات العقد للدارة المبٌنة بالشكل التالً‬

‫بتطبٌق قانون كٌرشوف على العقد نجد‬ ‫العقدة ‪: 1‬‬

‫‪=5‬‬

‫‪– 0.05‬‬

‫‪– 0.1‬‬

‫‪0.15‬‬

‫→‬

‫‪–5=0‬‬

‫‪+‬‬

‫‪82‬‬

‫العقدة ‪: 2‬‬

‫‪=0‬‬

‫‪– 0.025‬‬

‫‪+ 0.145‬‬

‫‪-0.1‬‬

‫العقدة ‪: 3‬‬

‫‪=3‬‬

‫‪+ 0.075‬‬

‫‪– 0.025‬‬

‫‪-0.05‬‬

‫→‬ ‫→‬

‫‪+‬‬

‫‪=0‬‬ ‫‪–2=0‬‬

‫] [=] []‬

‫‪+‬‬ ‫‪+‬‬

‫[‬

‫وٌكون الكود البرمجً الذي نكتبه فً الماتالب كملف ‪ M-file‬كالتالً ‪....‬‬ ‫‪clc‬‬ ‫‪clear‬‬ ‫;]‪Y=[0.15 -0.1 -0.05; -0.1 0.145 -0.025; -0.05 -0.025 0.075‬‬ ‫;]‪I=[5; 0; 2‬‬ ‫)'‪fprintf('Nodal Voltages V1, V2 and V3 are: \n‬‬ ‫‪v=inv(Y)*I‬‬ ‫النتابج التً حصلنا علٌها بعد التطبٌق ‪:‬‬ ‫‪Nodal Voltages V1, V2 and V3 are:‬‬ ‫=‪v‬‬

‫ثالثا ً ‪ :‬تحلٌل حلقات الدارة (قانون كٌرشوف الثانً)‬ ‫‪Z11I1 + Z12I2 + Z13I3 + ….. + Z1nIn = ∑ V1‬‬ ‫‪Z21I1 + Z22I2 + Z23I3 + ….. + Z2nIn = ∑ V2‬‬ ‫‪Zn1I1 + Zn2I2 + Zn3I3 + ….. + ZnnIn = ∑ Vn‬‬ ‫‪-1‬‬

‫=‬

‫→‬

‫=‬

‫‪83‬‬

‫مثال ‪:‬‬ ‫المطلوب حساب قٌمة التٌار المار عبر المقاومة ‪ RB‬ومن ثم إٌجاد االستطاعة التً ٌؤمنها منبع الجهد‬ ‫(‪ , )10v‬وذلك للدارة الموضحة بالشكل الموضح‬

‫بتحلٌل الحلقات كما ٌبٌن الشكل التالً ‪:‬‬

‫الحلقة ‪: 1‬‬

‫‪40 - 10 - 30 = 10‬‬

‫→‬

‫‪10( - ) + 30( - ) – 10 = 0‬‬

‫الحلقة ‪: 2‬‬

‫‪-10 + 30 - 5 = 0‬‬

‫→‬

‫‪=0‬‬

‫الحلقة ‪: 3‬‬

‫‪-30 - 5 + 65 = 0‬‬

‫→‬

‫‪+ 30 = 0‬‬

‫]‬

‫[ =] []‬

‫(‪10( - ) + 15 + 5‬‬ ‫‪30( - ) + 5‬‬ ‫[‬

‫وٌكون الكود البرمجً الذي نكتبه فً الماتالب كملف ‪ M-file‬كالتالً ‪....‬‬

‫‪84‬‬

‫‪clear‬‬ ‫‪clc‬‬ ‫;]‪Z=[40 -10 -30; -10 30 -5; -30 -5 65‬‬ ‫;]‪V=[10; 0; 0‬‬ ‫;‪I=inv(Z)*V‬‬ ‫;)‪IRB=I(3)-I(2‬‬ ‫)‪fprintf('The current through R is %8.10f Amps \n', IRB‬‬ ‫;‪PS=I(1)*10‬‬ ‫)‪fprintf('The Power supplied by 10V source is %8.10f watts \n', PS‬‬ ‫النتابج التً حصلنا علٌها بعد التطبٌق ‪:‬‬ ‫‪The current through R is 0.0370370370 Amps‬‬ ‫‪The Power supplied by 10V source is 4.7530864198 watts‬‬ ‫دقة الناتج‬

‫رابعا ً ‪ :‬االستطاعة العظمى المنقولة‬ ‫لنفرض لدٌنا منبع الجهد المبٌن بالشكل الموضح حٌث ‪ Rs‬مقاومة منبع الجهد و ‪ RL‬الحمل‬

‫باستخدام مجزئ الجهد نجد أن ‪:‬‬

‫=‬

‫=‬

‫=‬

‫&‬

‫وللحصول على القٌمة مقاومة الحمل التً تعطٌنا القٌمة األعظمٌة للطاقة نشتق معادلة االستطاعة‬ ‫ونجعل الناتج مساوي للصفر فنجد ‪:‬‬ ‫األخٌرة بالنسبة للمقاومة‬ ‫‪=0‬‬ ‫وبتبسٌط العالقة األخٌرة بعد جعلها مساوٌة للصفر نجد ‪:‬‬

‫=‬ ‫=‬

‫‪85‬‬

‫وٌمكن استخدام الماتالب لمراقبة تغٌٌر الجهد وتبدٌد الطاقة فً الحمولة وذلك تبعا ً لقٌمة مقاومة‬ .‫الحمل‬ ˈFindˈ function ‫ٌستخدم هذا التابع لتحدٌد قٌم العناصر من المصفوفة التً قٌمها ال تساوي الصفر‬

‫مالحظة‬ : ‫مثال‬

‫ والمطلوب رسم‬, ‫كٌلواوم‬50 ‫ إلى‬0 ‫فً الدارة األخٌرة لنفرض أن قٌمة مقاومة الحمل تتغٌر من‬ . =10KΩ ‫ حدد االستطاعة العظمى على الحمل عندما‬, ‫تغٌٌرات االستطاعة فً الحمل‬ .... ً‫ كالتال‬M-file ‫الكود البرمجً الذي نكتبه فً الماتالب كملف‬ clc clear vs=10; rs=10e3; rl=0:1e3:50e3; k=length(rl); for i=1:k pl(i) = ((vs/(rs+rl(i)))^2)*rl(i); end dp=diff(pl)./diff(rl); rld=rl(2:length(rl)); prod=dp(1:length(dp)-1).*dp(2:length(dp)); crit_pt=rld(find(prod<0)); max_power=max(pl); fprintf('Maximum Power occurs at %8.3f ohms \n', crit_pt) fprintf('Maximum Power dissipation is %8.5f Watts \n', max_power) plot(rl,pl,'r-*') title('Power delivered to load') xlabel('load resistance in Ohms') ylabel('Power in Watts') : ‫النتابج التً حصلنا علٌها بعد التطبٌق‬ Maximum Power occurs at 10000.000 ohms Maximum Power dissipation is 0.00250 Watts

86

87

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

‫) 𝜃 ‪(wt +‬‬

‫) 𝜃 ‪v(t) = Vm.cos(wt +‬‬

‫= )‪i(t‬‬ ‫∫ √=‬

‫√‬

‫∫ √=‬

‫=‬

‫√‬

‫=‬

‫‪The average power dissipated :‬‬ ‫)𝜃‬

‫𝜃(‪cos‬‬

‫∫ =‪P‬‬

‫=‬

‫‪The power factor :‬‬ ‫)𝜃‬

‫= ‪pf‬‬

‫𝜃(‪= cos‬‬

‫‪The complex power,S, is :‬‬ ‫]) 𝜃 ‪.[cos(𝜃 - 𝜃 ) + jsin(𝜃 -‬‬

‫‪.‬‬

‫= ‪S = P + jQ‬‬

‫‪88‬‬

‫مالحظة‬

‫‪ˈquad & quad8ˈ functions‬‬ ‫ٌوفر الماتالب هاذٌن التابعٌن من أجل إجراء التكامل ألي تابع والصٌغة العامة‬ ‫للتابعٌن هً ‪....‬‬ ‫∫=‪q‬‬ ‫)‪quad(ˈfunctˈ,a,b,tol,trace‬‬ ‫)‪quad8(ˈfunctˈ,a,b,tol,trace‬‬ ‫حٌث ‪:‬‬ ‫اسم التابع كما تم تعرٌفه فً الماتالب‬ ‫القٌمة الحدٌة الدنٌا للتكامل‬ ‫القٌمة الحدٌة العلٌا للتكامل‬ ‫حدود التأرجح المسموح بها من أجل الدقة‬ ‫ولها قٌمة افتراضٌة‬ ‫لتفعٌل إمكانٌة رسم التكامل وٌمكن تفعٌلها‬ ‫بوضع أي قٌمة غٌر مساوٌة للصفر حٌث‬ ‫أن القٌمة صفر هً االفتراضٌة‬

‫‪funct‬‬ ‫‪a‬‬ ‫‪b‬‬ ‫‪tol‬‬ ‫‪trace‬‬

‫مثال ‪:‬‬ ‫)‪i(t) = 6.cos(120𝝅t + 60‬‬

‫)‪v(t) = 10.cos(120𝝅t + 30‬‬

‫والمطلوب تحدٌد القٌمة الوسطٌة للطاقة والقٌمة اللحظٌة للتوتر وكذلك معامل االستطاعة وذلك‬ ‫بالطرٌقتٌن التحلٌلٌة والرٌاضٌة‪.‬‬ ‫من أجل ذلك نكتب الكود البرمجً التالً فً ملف ‪ M-file‬كالتالً ‪...‬‬ ‫‪clc‬‬ ‫;)‪T=2*pi/(120*pi‬‬ ‫;‪a=0‬‬ ‫;‪b=T‬‬ ‫;‪x=0:0.02:1‬‬ ‫;‪t=x.*b‬‬ ‫;)‪v_int=quad('voltage1',a,b‬‬

‫‪89‬‬

v_rms=sqrt(v_int/b); i_int=quad('current1',a,b); i_rms=sqrt(i_int/b); p_int=quad('inst_pr',a,b); p_ave=p_int/b; pf=p_ave/(i_rms*v_rms); p_ave_an=(60/2)*cos(30*pi/180); v_rms_an=10/sqrt(2); pf_an=cos(30*pi/180); fprintf('Average power, analytical: %f \n average power, numerical: %f \n', p_ave_an, p_ave) fprintf('rms power, analytical: %f \n rms power, numerical: %f \n', p_ave_an, p_ave) fprintf('Power vactor, analytical: %f \n power factor, numerical: %f \n', pf_an, pf) ً‫نالحظ فً البرنامج أننا استخدمنا عدة توابع ولذلك البد من كتابتها فً ملفات خاصة بها وه‬ )‫ (ٌكتب كل تابع فً ملف لوحده‬...ً‫كالتال‬ function vsq=voltage1(t) vsq=(10*cos(120*pi*t + 60*pi/180)).^2; end function isq=current1(t) isq=(6*cos(120*pi*t+30*pi/180)).^2; end function pt=inst_pr(t) it=6*cos(120*pi*t+30*pi/180); vt=10*cos(120*pi*t+60*pi/180); pt=it.*vt; end : ‫النتابج التً حصلنا علٌها بعد التطبٌق‬ Average power, analytical: 25.980762 average power, numerical: 25.980762 rms power, analytical: 25.980762 rms power, numerical: 25.980762 Power vactor, analytical: 0.866025

90

‫‪power factor, numerical: 0.866025‬‬ ‫وبالتالً نجد أنه باستخدام الطرٌقة التحلٌلٌة أو الرقمٌة فإن النتابج ستكون متشابهة تماماً‪.‬‬ ‫ثالثا ً ‪ :‬دارات التٌار المتناوب األحادٌة والثالثٌة الطور‬ ‫مثال )‪(1‬‬ ‫لتكن لدٌنا الدارة الموضحة بالشكل ‪...‬‬

‫‪=50 Ω‬‬

‫‪=100 Ω‬‬

‫‪=20 Ω‬‬

‫‪= 250µf‬‬

‫‪=8H‬‬

‫‪=4H‬‬

‫‪w = 10 rad/s‬‬ ‫والمطلوب حساب طوٌلة وزاوٌة توتر الخرج ‪.....‬‬ ‫العقدة ‪: 1‬‬

‫‪=0‬‬

‫العقدة ‪: 2‬‬

‫‪=0‬‬

‫العقدة ‪: 3‬‬

‫‪=0‬‬

‫‪⁄‬‬

‫‪+‬‬

‫‪+‬‬ ‫‪+‬‬

‫‪⁄‬‬

‫‪+‬‬

‫‪+‬‬ ‫‪+‬‬

‫وبعد ترتٌب عناصر المعادالت الثالثة األخٌرة وإعادة تنسٌقها نحصل على المصفوفة التالٌة ‪...‬‬

‫‪91‬‬

[

][ ] = [

]

.... ‫برنامج حل المصفوفة‬ clc clear Y=[0.05-0.0225*j 0.025*j -0.0025*j; 0.025*j 0.01-0.0375*j 0.0125*j; 0.0025*j 0.0125*j 0.02-0.01*j]; c1=0.4*exp(pi*15*j/180); I=[c1; 0; 0]; V=inv(Y)*I; v3_abs=abs(V(3)); v3_ang=angle(V(3))*180/pi; fprintf('Voltage V3, magnitude : %f \nvoltage V3, angle in degree : %f \n', v3_abs,v3_ang) : ‫النتابج التً حصلنا علٌها بعد التطبٌق‬ Voltage V3, magnitude : 1.850409 voltage V3, angle in degree : -72.453299 v3(t) =1.85cos(10t – 72.45) v (2) ‫مثال‬ ... ً‫لٌكن لدٌنا النظام غٌر المتوازن المبٌن بالشكل التال‬

.VAN , VBN , VCN ‫والمطلوب حساب التوترات الطورٌة‬ : ‫باستخدام قانون كٌرشوف نجد‬ 110 0 = (1 + j) + (5 + 12j)

92



110 0 = (6+13j)

110 -120 = (1 – 2j) + (3 + 4j)



110 -120 = (4 + 2j)

110 120 = (1 – 0.5j) + (5 – 12j)



110 120 = (6 – 12.5j)

[

] [ ]=[

]

= inv(Z)*V VAN = (5 + 12j) VBN = (3 + 4j) VCN = (5 - 12j) ... ‫برنامج الماتالب‬ clc clear Z=[6-13*j 0 0; 0 4+2*j 0; 0 0 6-12.5*j]; c2=110*exp(j*pi*(-120/180)); c3=110*exp(j*pi*(120/180)); V=[110; c2; c3]; I = inv(Z)*V; Van=(5+12*j)*I(1); Vbn=(3+4*j)*I(2); Vcn=(5-12*j)*I(3); Van_abs=abs(Van); Van_ang=angle(Van)*180/pi; Vbn_abs=abs(Vbn); Vbn_ang=angle(Vbn)*180/pi; Vcn_abs=abs(Vcn); Vcn_ang=angle(Vcn)*180/pi; fprintf('Phasor voltage Van, magnitude : %f \nphasor Voltage Van, angle in degree : %f \n', Van_abs, Van_ang) fprintf('Phasor voltage Vbn, magnitude : %f \nphasor Voltage Vbn, angle in degree : %f \n', Vbn_abs, Vbn_ang)

93

fprintf('Phasor voltage Vcn, magnitude : %f \nphasor Voltage Vcn, angle in degree : %f \n', Vcn_abs, Vcn_ang) : ‫النتابج التً حصلنا علٌها بعد التطبٌق‬ Phasor voltage Van, magnitude : 99.875532 phasor Voltage Van, angle in degree : 132.604994 Phasor voltage Vbn, magnitude : 122.983739 phasor Voltage Vbn, angle in degree : -93.434949 Phasor voltage Vcn, magnitude : 103.134238 phasor Voltage Vcn, angle in degree : 116.978859 ‫ ممٌزات الشبكة‬: ً ‫رابعا‬ . y(t) ‫ وخرج‬x(t) ‫الشكل ٌبٌن شبكة خطٌة لها دخل‬

‫ٌمكن تمثٌل هذه الدخل والخرج فً هذه الشبكة بالمعادلة التفاضلٌة‬ + ….. +

+

(

94

+ (

+

=

+ ….. +

+ ‫ثوابت حقٌقٌة‬

+

,

,…….,

+ ,

,

: ‫حٌث‬ ,……..,

‫باالنتقال إلى مستوي البالس تصبح المعادلة التفاضلٌة‬ + …… + + ) = + …… + + )

‫وبالتالً فإن التابع الذي ٌعبر عن الشبكة الخطٌة ٌكون بالشكل‬ ‫=‬

‫=‬

‫وبإعادة ترتٌب تابع الشبكة نحصل على الشكل التالً‬ ‫‪+‬‬

‫‪+ …… +‬‬

‫‪+‬‬

‫=‬

‫=‬

‫حٌث ‪:‬‬ ‫‪ : , ……,‬أقطاب تابع الشبكة‪.‬‬ ‫‪ : , …....,‬رواسب الشبكة‪.‬‬ ‫مالحظة ‪:‬‬ ‫نستعمل تفرٌق الكسور فً تبسٌط التوابع الكسرٌة للحصول على األقطاب والرواسب ونستخدم لذلك‬ ‫التابع ‪ residue‬والذي له الصٌغة العامة ‪:‬‬ ‫)‪[r,p,k] = residue(num,den‬‬ ‫مثال (‪)1‬‬ ‫=‬ ‫من أجل تفرٌق الكسر المبٌن نكتب ماٌلً ‪:‬‬ ‫;]‪num=[4 3 6 10 20‬‬ ‫;]‪den=[1 2 5 2 8‬‬ ‫)‪[r,p,k]=residue(num,den‬‬ ‫النتابج التً حصلنا علٌها عند تنفٌذ البرنامج ‪:‬‬

‫‪95‬‬

‫وٌمكن العودة بشكل معاكس للتابع األصلً بكتابة ‪:‬‬ ‫]‪[num,den] = residue[r,p,k‬‬ ‫وستكون النتٌجة فً نسقٌن منفصلٌن ‪ ,‬األول ٌمثل معامالت كثٌر الحدود (البسط) والثانً معامالت‬ ‫كثٌر الحدود (المقام)‪.‬‬ ‫مثال (‪)2‬‬ ‫للدارة المبٌنة بالشكل ‪:‬‬ ‫‪ -8‬أوجد تابع الشبكة‬

‫=‬

‫‪.‬‬

‫‪ -2‬أوجد أقطاب ورواسب تابع الشبكة‬ ‫‪= 10‬‬ ‫‪ -3‬إذا كان )‪cos(2t + 40‬‬

‫‪.‬‬ ‫فأوجد‬

‫‪.‬‬

‫‪96‬‬

‫الحل ‪:‬‬ ‫باالنتقال للمستوي الالبالسً تصبح عناصر الدارة كالتالً‬

‫=‬

‫)‬

‫=‬

‫|‬

‫=‬

‫تذكر أن ‪:‬‬ ‫‪= 10 40‬‬ ‫‪s = -3 + 2j‬‬ ‫‪|s=-3+2j‬‬

‫→‬ ‫→‬ ‫)‪=(10 40‬‬

‫=‬ ‫𝜃‬ ‫‪s = 𝜎 + jw‬‬

‫واآلن سنستخدم البٌبة البرمجٌة (ماتالب) من أجل إٌجاد األقطاب والرواسب للتابع‬ ‫‪clear‬‬ ‫‪clc‬‬ ‫;]‪num=[4 6 0‬‬ ‫;]‪den=[6 25 30 9‬‬ ‫)' ‪disp('The zeros are :‬‬ ‫)‪z=roots(num‬‬ ‫)' ‪disp('The poles are :‬‬ ‫)‪p=roots(den‬‬ ‫;‪s1=-3+2*j‬‬ ‫;)‪n1=polyval(num,s1‬‬ ‫;)‪d1=polyval(den,s1‬‬ ‫;‪vo=10*exp(j*pi*(40/180))*n1/d1‬‬

‫‪97‬‬

vo_abs=abs(vo); vo_ang=angle(vo)*180/pi; fprintf('phasor voltage vo, magnitude : %f \nphasor voltage vo, angle in degrees : %f \n' , vo_abs, vo_ang) : ‫النتابج التً حصلنا علٌها بعد التطبٌق‬ The zeros are : z= 0 -8.5000 The poles are : p= -2.2853 -8.5000 -0.4584 phasor voltage vo, magnitude : 3.453492 phasor voltage vo, angle in degrees : -66.990823 : ‫وبالنتٌجة ٌكون الخرج‬ cos(2t – 66.99)

= 3.45

‫ االستجابة الترددٌة‬: ً ‫خامسا‬ : ‫تعطى الصٌغة العامة لتابع النقل إلشارة تمثٌلٌة بالمعادلة‬ =

= : ‫توابع نقل شهٌرة‬ ‫ مرشح تمرٌر منخفض‬= ‫ مرشح تمرٌر مرتفع‬=

98

‫ مرشح تمرٌر مجال‬‫=‬ ‫ مرشح منع مجال‬‫=‬ ‫حٌث ‪:‬‬ ‫‪, , and‬‬

‫‪, ,‬‬

‫ثوابث‬

‫االستجابة الترددٌة هً استجابة الشبكة إلشارة الدخل الجٌبٌة ‪ ,‬فإذا استبدلنا ‪ s=jw‬قً تابع الشبكة‬ ‫نحصل على ‪:‬‬ ‫𝜃‬

‫= ‪|s=jw‬‬

‫حٌث ‪:‬‬ ‫=‬

‫𝜃‬

‫&‬

‫|‬

‫|=‬

‫بالنسبة للتردد نحصل على االستجابة الترددٌة للطوٌلة وكذلك برسم تغٌرات‬ ‫وبرسم تغٌرات‬ ‫𝜃 بالنسبة للتردد نحصل على االستجابة الترددٌة للطور‪.‬‬ ‫وٌمكننا الحصول على هذه المٌزات باستخدام تابع شهٌر فً الماتالب هو ‪ freqs :‬والذي تعطى‬ ‫)‪hs = freqs(num,den,range‬‬ ‫الصٌغة العامة له بالشكل ‪:‬‬

‫‪99‬‬

‫حٌث ‪:‬‬ ‫]‪num = [bm bm-1 ……. b1 b0‬‬ ‫]‪den = [an an-1 ……. a1 a0‬‬ ‫‪ : range‬مجال التردد للحالة المدروسة‬ ‫‪ : hs‬االستجابة الترددٌة بالصٌغة العقدٌة‬

‫مثال‬ ‫من أجل الدارة المبٌنة بالشكل ‪:‬‬ ‫‪ -8‬بٌن أن تابع النقل ٌعطى بالشكل ‪:‬‬

‫=‬

‫=‬

‫‪ -2‬إذا علمنا أن ‪ L = 5H, C =1.12µf, and R = 10000Ω‬بٌن شكل االستجابة‬ ‫الترددٌة‪.‬‬ ‫‪ -3‬إذا جعلنا قٌمة المقاومة ‪ R = 100Ω‬ما التغٌر الذي سٌحدث ‪ ,‬بٌن بالرسم‬

‫=‬ ‫واآلن سنستعٌن بالماتالب من أجل الرسم ‪...‬‬ ‫;‪r2=100‬‬

‫=‬

‫;‪r1=10000‬‬

‫=‬

‫=‬

‫;‪l=5‬‬ ‫;‪c=1.25e-6‬‬ ‫;]‪num1=[r1/l 0‬‬ ‫;])‪den1=[1 r1/l 1/(l*c‬‬ ‫;)‪w=logspace(1,4‬‬

‫‪100‬‬

h1=freqs(num1,den1,w); f=w/(2*pi); mag1=abs(h1); phase1=angle(h1)*180/pi; num2=[r2/l 0]; den2=[1 r2/l 1/(l*c)]; h2=freqs(num2,den2,w) mag2=abs(h2); phase2=angle(h2)*180/pi; subplot(2,2,1) loglog(f,mag1,'.') title('magniture response R=10K') ylabel('magnitude') subplot(2,2,2) loglog(f,mag2,'.') title('magniture response R=1K') ylabel('magnitude') subplot(2,2,3) semilogx(f,phase1,'.') title('phase response R=10K') xlabel('Frequency,Hz') ylabel('angle in fegrees') subplot(2,2,4) semilogx(f,phase2,'.') title('phase response R=1K') xlabel('Frequency,Hz') ylabel('angle in fegrees')

101

102

‫النمذجة و المحاكاة باستخدام مكتبة ‪simulink‬‬ ‫أوالً ‪ :‬مقدمة ‪...‬‬ ‫فً هذا الفصل سوف نعرض الخطوات الواجب اتباعها من أجل الحصول على العناصر المناسبة‬ ‫لتشكٌل نموذج المحاكاة باستخدام بٌبة الماتالب بدءاً من فتح صفحة النموذج (‪ )Model‬وحتى تنفٌذ‬ ‫أمر النمذجة‪.‬‬ ‫لقد وضعت مجموعة من األشكال الالحقة تبٌن خطوات الحصول على العناصر الالزمة لبناء‬ ‫المودٌل (النموذج) بدءاً من المكتبة ‪ , Simulink‬حٌث تحتوي هذه المكتبة على مجموعة من‬ ‫المكتبات الفرعٌة وكل مكتبة فرعٌة تضم مجموعة من العناصر التً نستخدمها فً بناء المخطط‬ ‫الصندوقً للمحاكاة‪.‬‬

‫ثانٌا ً ‪ :‬إظهار محتوٌات بعض المكتبات ‪...‬‬ ‫قبل البدء ببناء المخططات الصندوقٌة البد من التعرف على المكتبات الفرعٌة وبعض العناصر‬ ‫الموجودة فً هذه المكتبات تمهٌداً للبدء بعملٌة بناء المخطط (المودٌل) الالزم لعملٌة محاكاة بعض‬ ‫الدارات الكهربابٌة‪.‬‬ ‫بعد ذلك ٌمكن االنتقال إلى بناء نماذج أكثر تعقٌداً تمثل عناصر نظم القدرة الكهربابٌة مثل اآلالت‬ ‫الكهربابٌة ‪ ,‬الشبكات ‪ ,‬القواطع ‪ ,‬عناصر إلكترونٌات القدرة الكهربابٌة ‪ ....‬إلخ‪.‬‬ ‫بعد استنتاج النموذج الرٌاضً لهذه العناصر ‪ ,‬وفً فصول قادمة سوف نتطرق إلى طرابق أخرى‬ ‫فً بناء النموذج (‪ )model‬دون الحاجة إلى استنتاج النموذج الرٌاضً ‪ ,‬بحٌث ٌتم اختٌار عناصر‬ ‫موجودة فً المكتبات تمثل العناصر الموجودة فً الدارة الكهربابٌة أو فً نظام القدرة الكهربابً‬ ‫المراد دراسته ‪ ,‬وبعد االنتهاء من وضع المودٌل ٌتم إدخال محددات كل عنصر تم اختٌاره من خالل‬ ‫صندوق حوار خاص به‪.‬‬ ‫وتبٌن األشكال التالٌة كٌفٌة الوصول إلى المكتبات الخاصة بالماتالب ‪ ,‬كما تعرض لنا بعض‬ ‫العناصر الموجودة ضمن كل مكتبة فرعٌة وٌمكن االطالع على جمٌع العناصر عند تشغٌل البرنامج‪.‬‬

‫‪103‬‬

‫‪ ...‬المكاتب فً الماتالب ‪...‬‬

‫‪ ...‬خطوات فتح صفحة لرسم المخطط الصندوقً ‪...‬‬

‫‪104‬‬

‫‪ ...‬محتوٌات بعض مكونات المكاتب الفرعٌة لمكتبة السٌمٌولٌنك ‪...‬‬

‫‪...simpower systems library...‬‬

‫‪105‬‬

‫‪...Application Library of simpowersystems ...‬‬

‫ثالثا ً ‪ :‬تعرٌف المكتبة أو األداة ‪... Simulink‬‬ ‫هً عبارة عن منهج برمجً نستطٌع من خالله نمذجة ومحاكاة وتحلٌل األنظمة الدٌنامٌكٌة سواء‬ ‫الخطٌة وبزمن مستمر أو متقطع ‪ ,‬ولتسهٌل النمذجة توفر المكتبة ‪ Simulink‬إمكانٌة البرمجة‬ ‫البٌانٌة الصندوقٌة باستخدام الفأرة وبناء التوابع المناسبة ‪ ,‬والوصول للبرمجة ومخطط ٌعبر عن‬ ‫المسألة المطروحة ‪ ,‬وٌمكن أخذ تلك الصنادٌق من مكتبات ‪ Simulink‬الواسعة والشاملة لكل‬ ‫النماذج الممكنة ‪ ,‬سواء مكتبة المصادر أو مكتبة الخرج أو الكتل المعبرة عن الحاالت الخطٌة و‬ ‫الالخطٌة ‪ ,‬أو أدوات الوصل بٌن تلك الكتل‪.‬‬ ‫كما نستطٌع صٌاغة وبناء الكتل الخاصة بنا ‪ ,‬ونستطٌع الولوج إلى داخل الكتلة بالنقر علٌها نقراً‬ ‫مزدوجا ً فتصبح بمستوى برمجً أعمق ‪ ,‬وهكذا ٌمكننا التنقل ضمن مستوٌات مختلفة تعبر عن‬ ‫هٌكلٌة المسألة المطروحة بشكل واضح‪.‬‬ ‫بعد بناء المخطط الصندوقً واالنتهاء من ذلك ٌمكن إجراء المحاكاة عن طرٌق التكامل وبطرابق‬ ‫مختلفة ‪ ,‬وكما وٌمكن إظهار النتابج ومراقبتها فً أثناء المكاملة باستخدام صنادٌق الخرج والتً‬ ‫تؤمن خٌارات كثٌرة وطرقا ً عدٌدة إلخراج وإظهار النتابج أو إرسالها لملف أو تخزٌنها ‪ ,‬وسوف‬

‫‪106‬‬

‫نتعرض على بعض الطرابق واإلمكانٌات لبناء المخططات الصندوقٌة الالزمة لمحاكاة بعض‬ ‫الدارات الكهربابٌة من خالل مجموعة من األمثلة‪.‬‬ ‫مثال (‪: )1‬‬ ‫جمع عدد من التوابع الجٌبٌة (‪ )sin‬و دراسة تأثٌر التوافقٌات على شكل اإلشارة الجٌبٌة الناتجة ‪.‬‬ ‫‪‬‬

‫نحتاج فً هذا المثال إلى العناصر التالٌة ‪:‬‬ ‫‪ -1‬منبع إشارة ‪.sinwave‬‬ ‫‪ -2‬عنصر جمع ‪.sum‬‬ ‫‪ -3‬عنصر إظهار إلظهار شكل اإلشارة الناتجة ‪.Scope‬‬

‫والشكل التالً ٌبٌن هذه العناصر وخصابص كل عنصر من هذه العناصر ‪ ,‬حٌث نالحظ أن إشارة‬ ‫الدخل الجٌبٌة ٌتم التعامل معها بالعالقة التالٌة ‪:‬‬ ‫‪Out = Amp*sin(Freq*t + Phase) + Bias‬‬ ‫أما إشارة الجمع ‪ sum‬فٌمكن زٌادة عدد اإلشارات الداخلة إلٌها من خالل التعدٌل فً ‪List of signs‬‬ ‫وذلك بإضافة إشارات الجمع (‪ )+‬بعدد عدد الدخل المرادة‪.‬‬

‫‪107‬‬

‫وٌمكن إضافة أي عنصر من العناصر السابقة إلى النموذج الجدٌد الذي نرٌد العمل فٌه بالضغط على‬ ‫العنصر بالزر الٌمٌنً للماوس ومن ثم نختار (‪ )add to …..‬لٌفتح لنا صفحة (‪ )model‬جدٌدة‬ ‫تحوي العنصر المضاف‪.‬‬ ‫مالحظة‬

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

‫نقوم اآلن بالتعدٌل على اإلشارات الجٌبٌة المراد جمعها وذلك كما ٌبٌن الجدول التالً ‪...‬‬ ‫‪Bias‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪Freq.‬‬ ‫𝜋‪2‬‬ ‫𝜋‪3*2‬‬ ‫𝜋‪5*2‬‬ ‫𝜋‪7*2‬‬ ‫𝜋‪9*2‬‬ ‫𝜋‪11*2‬‬

‫‪Amp.‬‬ ‫‪1‬‬ ‫‪1/3‬‬ ‫‪1/5‬‬ ‫‪1/7‬‬ ‫‪1/9‬‬ ‫‪1/11‬‬

‫رقم اإلشارة الجيبيت‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬

‫بعد ذلك نقوم بالتعدٌل على عدد مداخل عنصر الجمع ‪ sum‬بحٌث ٌكون عدد المداخل مساوي لعدد‬ ‫اإلشارات الداخلة إلٌه وفً مثالنا هذا (‪ )6‬وبالتالً نكتب فً مربع الحوار ‪ List of signs‬العبارة‬ ‫التالٌة (‪ )|++++++‬ونضغط موافق فنالحظ تغٌر عدد المداخل‪.‬‬ ‫بعد تنفٌذ النموذج (‪ )model‬وترتٌب عناصره نالحظ أن شكل المخطط ٌصبح كما ٌلً‬

‫‪108‬‬

‫نالحظ أننا لو قمنا بتشغٌل النموذج وجعل الزمن كبٌر ‪ 10s‬كما هو مبٌن بالشكل فإن أثر التوافقٌات‬ ‫لن ٌظهر ولذلك فإننا سنقوم بتعدٌل قٌمة الزمن وجعله ٌساوي ‪ 2‬وسنقوم بتشغٌل النموذج‪.‬‬

‫مثال (‪: )2‬‬ ‫رسم تغٌرات موجة جبٌبة (‪ )sin‬بعد ضربها بثابت ‪ k‬ومقارنة شكل اإلشارة قبل وبعد ضربها‬ ‫بالثابت‪.‬‬ ‫‪ ‬نحتاج فً هذا المثال إلى العناصر التالٌة ‪:‬‬ ‫‪ -1‬منبع إشارة ‪.sinwave‬‬

‫‪109‬‬

‫‪ -2‬عنصر تكبٌر ‪ٌ( Gain‬تم تعدٌل قٌمة الثابت فٌه من خصابصه)‬ ‫‪ Scope -3‬لرسم اإلشارة‪.‬‬ ‫‪) Mux -4‬عنصر دمج لإلشارات ‪ ,‬نتحكم بعدد المداخل من خصابصه)‬ ‫بعد إنشاء النموذج والتعدٌل فً قٌمة الثابت ‪ K‬وتشغٌل النموذج نالحظ من الشكل التالً المخطط و‬ ‫الرسم البٌانً الذي ٌحوي مقارنة بٌن اإلشارة األصلٌة واإلشارة المضروبة بالثابت ‪.k=3‬‬

‫لو أضفنا للنموذج السابق مولد نبضات وقمنا بتشغٌل النموذج ٌكون الشكل كالتالً ‪....‬‬

‫‪110‬‬

‫تعرفنا فً هذا الفصل على بعض المكاتب الموجودة فً الماتالب والحظنا من خالل بعض األمثلة‬ ‫البسٌطة كٌف ٌمكن بناء النموذج وكٌف ٌمكن الحصول على نتابجه باستخدام البٌبة ‪ Simulink‬فً‬ ‫الماتالب‪.‬‬

‫‪111‬‬

‫أوالً ‪ :‬تمثٌل نظم التحكم‬ ‫‪ -1‬المبدل التمثٌلً‪-‬الرقمً ‪Analog-to-Digital Converter‬‬ ‫أحد أهم البلوكات الجاهزة التً تم إضافنا فً اإلصدارات الجدٌدة لمكتبة (‪ )simulink‬هً‬ ‫المبدل التمثٌلً‪ -‬الرقمً المثالً‪.‬‬ ‫والبد من اإلشارة لالنتباه إلعدادات المبدل (البلوك) فً المودٌل حٌث أن بٌانات الخرج لكل من‬ ‫المبدل والساعة ٌجب أن تحدد بالنوع (‪.)double‬‬

‫‪112‬‬

‫‪ -2‬ماسك النظام الصفري (‪)Zero-order Hold‬وماسك النظام األول (‪)First-order Hold‬‬ ‫لنفرض أن لدٌنا إشارة مستمرة مع الزمن بعرض مجال محدود وٌحدده عرض الحزمة (‪, )B‬‬ ‫ولٌكن تحوٌل فورٌٌه له |)‪ |X(w‬مساوي للصفر من أجل أي قٌمة ل‪.w > B‬‬ ‫تنص نظرٌة أخذ العٌنات على أنه إذا تردد إشارة العٌنة ‪ ws‬مساوي أو أكبر من ‪ , 2B‬فإن‬ ‫اإلشارة )‪ٌ x(t‬مكن أن تعاد تماما ً من اإلشارة المعتانة )‪ xs(t‬وذلك بتطبٌق )‪ xs(t‬على مرشح‬ ‫تمرٌر منخفض بعرض حزمة ‪ .B‬وأٌضا ً ٌمكن استعادة اإلشارة األصلٌة باستخدام دارة ماسك‬ ‫بحٌث تمسك قٌمة اإلشارة المعتانة لزمن ‪ nT‬حتى تصل القٌمة التالٌة فً الزمن ‪.nT + T‬‬ ‫إن سلوك ماسك الترتٌب الصفري مشابه تماما ً لسلوك مرشح التمرٌر المنخفض ولذلك نستخدم‬ ‫هذه الدارة من أجل استعادة إشارة الزمن المستمرة من اإلشارة المعتانة‪.‬‬

‫حٌث أن ماسك الترتٌب الصفري ٌولد إشارات دخل مستمرة )‪ u(t‬بإمساك كل عٌنة لها قٌمة ثابتة‬ ‫]‪ u[k‬خالل زمن عٌنة واحدة ‪ ,‬أما دارة ماسك الترتٌب األول فتستعمل االستٌفاء الخطً بٌن العٌنات‪.‬‬

‫‪113‬‬

‫‪ -3‬التشكٌالت المختلفة للمرشحات الرقمٌة (‪)Digital Filter‬‬ ‫تابع النقل )‪ H(z‬للمرشح الرقمً المثالً ٌعطى بعدة أشكال ‪ ,‬وأغلب األشكال الشابعة هً‬ ‫التشكلٌة المباشرة األولى والتشكٌلة المباشرة الثانٌة والتوصٌل التسلسلً والتوصٌل التفرعً‪.‬‬ ‫‪ ‬التشكٌلة األولى للمرشح الرقمً المثالً ‪...‬‬

‫)‪a0X(z) + a1z-1X(z) + a2z-2X(z) + (-b1)z-1Y(z) + (-b2)z-1Y(z) = Y(z‬‬ ‫‪114‬‬

‫)‪X(z)(a0 + a1z-1 + a2z-2) = Y(z)(1 + b1z-1 + b2z-2‬‬ ‫وبالنتٌجة نحصل على تابع النقل للتشكلٌة األولى للمرشح الرقمً المثالً وذلك بالعالقة التالٌة‬ ‫= )‪H(z‬‬ ‫إن سٌبة هذه التشكٌلة من المرشحات الرقمٌة أنها تحتاج لسجالت ‪ 2k‬حٌث ‪ k‬تمثل ترتٌب‬ ‫الفلتر(المرشح)‪.‬‬ ‫‪ ‬التشكٌلة الثانٌة للمرشح الرقمً المثالً ‪...‬‬

‫تتمٌز هذه التشكلٌة عن السابقة بأنها تحتاج فقط لسجل ‪ٌ k‬دل علٌها بالعنصر ‪ , z-1‬حٌث أن العنصر‬ ‫(‪ )z-1‬فً التشكٌلة الثانٌة ٌتوضع بٌن راسب و قطب‪.‬‬ ‫مثال (‪)8‬‬ ‫بٌن إشارتً الدخل والخرج للمرشح الرقمً الذي له تابع النقل‬ ‫= )‪H(z‬‬ ‫وذلك بوضع مخطط باالستعانة بالمكتبة (‪ٌ )Simulink‬مثل تابع النقل السابق‪.‬‬

‫‪115‬‬

‫ال تنسى أن تضع زمن التنفٌذ ‪.200‬‬

‫مثال (‪)2‬‬ ‫بٌن إشارتً الدخل والخرج للمرشح الرقمً الذي له تابع النقل‬ ‫= )‪H(z‬‬

‫‪116‬‬

‫اكتب بسطر األوامر فً الماتالب ‪ fxpdemo_direct_form2 :‬لتحصل على المخطط األخٌر‪.‬‬ ‫‪ ‬الوصل التسلسلً للمرشحات الرقمٌة ‪...‬‬ ‫من أجل التوصٌل التسلسلً للمرشحات الرقمٌة ٌعطى تابع النقل لهذه التشكلٌة بالعالقة التالٌة‬ ‫)‪H(z) = H1(z).H2(z) ……. HR(z‬‬

‫‪117‬‬

‫والشكل التالً ٌبٌن المخطط الصندوقً لنظام مرشح رقمً من الدرجة الثانٌة تابع النقل له هو ‪:‬‬ ‫= )‪H(z‬‬

‫مثال (‪)8‬‬ ‫بٌن إشارتً الدخل والخرج لمرشح رقمً موصل بشكل تسلسلً له تابع النقل التالً‬ ‫= )‪H(z‬‬ ‫الحل ‪:‬‬ ‫بعد إعادة تنسٌق تابع النقل وتبسٌطه نحصل على الشكل التالً ‪....‬‬ ‫= )‪H(z‬‬

‫‪118‬‬

‫مالحظة ‪:‬‬ ‫بكتابة األمر التالً فً سطر األوامر فً الماتالب ‪fxpdemo_series_cascade_form :‬‬ ‫نحصل على المخطط الصندوقً للمرشح الرقمً التسلسلً الذي له تابع النقل‬ ‫)‬ ‫)‬

‫()‬ ‫()‬

‫(‬ ‫(‬

‫= )‪H(z‬‬

‫‪119‬‬

‫ثانٌا ً ‪ :‬تمثٌل ومحاكاة الدارات الكهربائٌة‬ ‫أوالً ‪ :‬النمذجة و المحاكاة لدارة كهربابٌة تسلسلٌة ‪RLC‬‬ ‫سنبدأ الشرح بمثال بسٌط ومن ثم سنعطً أمثلة أكثر تعقٌداً وهكذا ‪.....‬‬

‫المطلوب وضع المخطط الصندوقً لمحاكاة دارة كهربابٌة تسلسلٌة بسٌطة مكونة من مقاومة و ملف‬ ‫ومنبع تغذٌة متناوب ورسم القٌم العظمى للتوتر و للتٌار واالستطاعة حٌث ‪:‬‬ ‫‪L=0.1 H‬‬

‫‪R=20 Ω‬‬

‫خطوات الحل ‪:‬‬ ‫‪ -1‬استنتاج المعادلة التفاضلٌة الواصفة للدارة (النموذج الرٌاضً الواصف للنظام)‪.‬‬ ‫‪ -2‬رسم المخطط الصندوقً الالزم إلجراء المحاكاة‪.‬‬ ‫‪ -3‬إدخال معطٌات النظام (تنفذ بعدة طرق)‪.‬‬ ‫الحل ‪:‬‬ ‫بما أن الدارة تسلسلٌة فإن معادلة الجهد الواصفة للنظام هً ‪:‬‬ ‫حٌث ‪:‬‬

‫‪u = u1 + u2 = R.i + L‬‬

‫‪ u1 ‬التوتر الهابط على المقاومة ‪.R‬‬ ‫‪ u2 ‬التوتر الهابط على المحارضة ‪.L‬‬ ‫‪ U ‬التوتر المتناوب المطبق على الدارة الكهربابٌة‬ ‫=‬ ‫‬‫نعٌد كتابة المعادلة التفاضلٌة لتصبح بالشكل ‪:‬‬ ‫ونحصل على قٌمة شدة التٌار المار فً الدارة بإجراء التكامل للمعادلة التفاضلٌة و فرض أن القٌمة‬ ‫االبتدابٌة للتٌار ‪ , io=0‬نحصل على النموذج الرٌاضً النهابً الالزم إلنشاء مخطط المحاكاة للدارة‬

‫‪120‬‬

‫)‬

‫الكهربابٌة المفروضة (تسلسلٌة بسٌطة) ‪:‬‬

‫(∫ =‬

‫وٌمكن إجراء تعدٌل بسٌط على المعادلة األخٌرة لتصبح ‪:‬‬

‫∫ =‬

‫والجدول التالً ٌبٌن المعادالت الواصفة للنظام والتً سنبنً المخطط تبعا ً لها‬ ‫∫ =‬ ‫‪u1= R.i‬‬ ‫‪u2 = L‬‬ ‫‪u = u1 + u2 = R.i + L‬‬ ‫فً مثالنا هذا نحتاج إلى العناصر التالٌة ‪:‬‬ ‫‬‫‬‫‬‫‬‫‬‫‬‫‬‫‬‫‬‫‪-‬‬

‫عنصر تكامل ‪ Integrator‬وٌؤخذ من المكتبة ‪.Continuous‬‬ ‫مكبر ‪ Gain‬وٌؤخذ من المكتبة ‪.Math‬‬ ‫عنصر جداء ‪ Product‬وٌؤخذ من المكتبة ‪.Math‬‬ ‫عنصر الجمع ‪ sum‬وٌؤخذ من المكتبة ‪.Math‬‬ ‫عنصر مزج ‪ Mux‬وٌؤخذ من المكتبة ‪signals & system‬‬ ‫منبع متناوب جٌبً ‪ sinwave‬وتؤخذ من المكتبة ‪.Sources‬‬ ‫عداد الزمن أو إشارة الزمن وٌؤخذ من المكتبة ‪.Sources‬‬ ‫وسٌلة إظهار النتابج ‪ Scope‬وٌؤخذ من المكتبة ‪.sinks‬‬ ‫عنصر إخراج النتابج بشكل رقمً على صفحة عمل الماتالب بشكل مصفوفة ( ‪to‬‬ ‫‪ )workspace‬وٌؤخذ من المكتبة ‪.sinks‬‬ ‫إشارة ثابتة أو قٌمة ثابتة ‪ Constant‬وتؤخذ من المكتبة ‪.sources‬‬

‫اآلن بعد أن تم وضع جمٌع العناصر الالزمة على الصفحة (‪ٌ )model‬تم ربط العناصر مع‬ ‫بعضها ‪ ,‬بما ٌتناسب مع المعادلة التفاضلٌة الواصفة للدارة ‪ ,‬بحٌث نحصل فً النهاٌة على‬ ‫النموذج الرٌاضً النهابً جاهزاً إلجراء النمذجة‪.‬‬ ‫الختٌار زمن المحاكاة ولٌكن (‪)0.05sec‬مثالً ‪ٌ ,‬تم ذلك من خالل األمر ‪ simulation‬فً‬ ‫شرٌط األدوات ومنه اختٌار األمر ‪ , Configuration Parameters‬حٌث صندوق الحوار‬ ‫الناتج ٌحوي مربع إمكانٌة تغٌٌر زمن المحاكاة واختٌار طرٌقة التكامل ‪ ,‬والشكل التالً ٌبٌن‬ ‫مربع الحوار الذي ٌظهر ‪....‬‬

‫‪121‬‬

‫وبعد تحدٌد زمن التنفٌذ ‪ 0.05‬ثانٌة ومن ثم تحدٌد نوع التكامل والضغط على موافق ومن ثم‬ ‫تشغٌل النموذج نجد أن نتابج المحاكاة للدارة الكهربابٌة هً كما ٌبٌن الشكل التالً ‪...‬‬

‫‪122‬‬

‫طرابق إظهار نتابج المحاكاة ‪...‬‬ ‫‪ -1‬اإلظهار مباشرة على ‪ : Scope‬هذه الطرٌقة تعطً تصوراً مبدبٌا ً عن تغٌرات اإلشارة وال‬ ‫تعطً التفصٌل الخاصة ‪.‬‬ ‫‪ -2‬إرسال النتائج إلى نافذة األوامر ‪ٌ : )simout( to workspace‬مكن التحكم بخصابص‬ ‫هذا العنصر بالضغط علٌه بالفأرة نقراً مزدوجا ً فٌظهر مربع الحوار كما بالشكل‬

‫‪123‬‬

‫ما ٌهم من هذه الخصابص هو طرٌقة الحفظ إلى نافذة األوامر فهً ٌمكن أن تكون إما مصفوفة أو‬ ‫بنٌة (‪ )structure‬أو بنٌة متغٌرة مع الزمن‪.‬‬ ‫الحظ لو أننا اخترنا حفظ على شكل مصفوفة ومن ثم شغلنا النموذج وبعد ذلك توجهنا نحو نافذة‬ ‫األوامر وكتبنا ‪ simout‬لوجدنا النتابج كما ٌبٌن الشكل التالً ‪...‬‬ ‫نالحظ أن هذا البلوك قام بحفظ النتابج الظاهرة لدٌنا كمصفوفة ٌمكننا التعامل معها كٌفما نشاء ‪ ,‬حٌث‬ ‫أن كل عمود من أعمدة المصفوفة ٌمثل متغٌر محدد كالجهد أو التٌار أو االستطاعة ‪.......‬إلخ‬

‫‪124‬‬

‫‪ -3‬إرسال النتائج إلى ملف ذي امتداد ‪ : mat‬نسمٌه مثالً باالسم (‪ )s.mat‬والستدعاء النتابج‬ ‫المخزنة فً هذا الملف بعد انتهاء المحاكاة نعود إلى نافذة الماتالب الربٌسٌة ونكتب ‪:‬‬ ‫‪Load s.mat‬‬ ‫‪ans‬‬ ‫فٌعرض لنا الحاسب النتابج على شكل مصفوفة سطرها األول ٌحتوي على الزمن أما باقً‬ ‫األسطر فتحوي باقً اإلشارات ‪ ,‬وذلك كما ٌبٌن الشكل التالً‬

‫‪125‬‬

‫‪ -4‬إظهار النتائج عن طرٌق العنصر(‪: )XY Graph‬‬ ‫تتم إضافة العنصر بحٌث ٌوصل ‪ X‬منه إلى الزمن أي إلى مخرج الزمن ‪ t‬والمدخل الثانً ‪Y‬‬ ‫ٌوصل اإلشارة التً نرٌد رسمها ثم نفعل العنصر بالضغط علٌه (‪ , )Click‬والشكل التالً ٌوضح‬ ‫التعدٌالت الواجب القٌام بها من خصابص العنصر و الشكل الناتج عند رسم تغٌرات الجهد للجهد‬ ‫الكلً للدارة من الزمن‪.‬‬

‫‪126‬‬

‫‪ -5‬إظهار النتائج باستخدام العنصر ‪: Display‬‬ ‫هناك إمكانٌة زود بها البرنامج من أجل إظهار القٌم فً أثناء إجراء عملٌة المحاكاة بشكل أرقام‬ ‫على شاشة العنصر ‪ ,‬حٌث تتم مراقبة التغٌرات فً قٌم اإلشارة وٌتوقف عرض النتابج فً نهاٌة‬ ‫عملٌة المحاكاة عند آخر قٌمة للزمن والقٌم الموافقة لها من اإلشارات‪.‬‬ ‫‪ -6‬إظهار النتائج بطرائق أخرى ‪:‬‬ ‫‪ -1‬استعمال الملفات ‪ٌ ,‬مكن أن ٌشكل ملف لقراءة المحددات للدارة ‪ ,‬وملف آخر إلظهار‬ ‫النتابج ‪ ,‬وٌعطً كل ملف وحده اسما ً منفصالً‪.‬‬ ‫‪ -2‬تشكٌل ملف واحد لقراءة محددات الدارة وإخراج النتابج‪ ,‬تعد هذه الطرٌقة من أفضل‬ ‫النتابج المتبعة فً عملٌة المحاكاة‪.‬‬ ‫وبالنتٌجة أصبح لدٌنا الشكل النهابً للنموذج كالتالً ‪:‬‬

‫مثال غٌر محلول ‪:‬‬ ‫لٌكن لدٌنا الدارة الكهربابٌة المكونة من العناصر ‪ R,L,C‬على التسلسل ‪ ,‬قٌم معامالتها كماهو‬ ‫مبٌن بالشكل والمطلوب ‪:‬‬ ‫آ ‪ :‬وضع المخطط الصندوقً الالزم لمحاكاة الدارة وحساب التٌار المار فٌها وإظهاره‪.‬‬ ‫ب ‪ :‬كتابة ملف إلدخال المعطٌات وإخراج النتابج‪.‬‬

‫‪127‬‬

‫ثانٌا ً ‪ :‬النمذجة و المحاكاة لدارة كهربابٌة تسلسلٌة ‪ -‬تفرعٌة ‪RLC‬‬ ‫مثال)‪(1‬‬ ‫لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ‪ ,‬علما ً أن توتر الدخل متناوب‬

‫‪f = 50Hz - C = 1000µf - L = 0.1 H - Rs = 50 Ω - Vs= 100v‬‬ ‫والمطلوب إجراء النمذجة والمحاكاة للدارة ووضع النموذج الرٌاضً للدارة المكافبة للحصول على‬ ‫التٌار الكلً وتٌار كل فرع ‪ ,‬وكتابة ملف إدخال المعطٌات‪.‬‬ ‫‪ is‬التٌار الكلً‪.‬‬ ‫‪ ic‬التٌار المار فً الفرع الذي ٌحوي سعة فقط‪.‬‬ ‫‪ iL‬التٌار المار فً الفرع الذي ٌحوي محارضة فقط‪.‬‬ ‫وبالنتٌجة فإن التٌار الكلً المار فً الدارة هو ‪iS = iC + iL :‬‬ ‫ومن تحلٌل الدارة المكافبة وحسب قانون كٌرشوف (‪ )1‬لدٌنا ‪:‬‬ ‫‪Vs = Vc + is.Rs‬‬ ‫‪128‬‬

‫وحسب قانون كٌرشوف أٌضا ً نجد ‪is = iL + ic :‬‬ ‫∫ = ‪Vc‬‬ ‫)‬

‫(∫ =‬

‫‪Vc = L.‬‬

‫‪or‬‬ ‫→‬

‫∫ = ‪iL‬‬

‫نقوم بتعدٌل زمن التشغٌل للمودٌل لٌصبح ثانٌة واحدة‪.‬‬ ‫ ملف إدخال المعطٌات‪.‬‬‫;‪Rs=50‬‬ ‫;‪L=0.1‬‬ ‫;‪C=1000e-6‬‬ ‫;‪VS_mag=100‬‬ ‫;‪tdelay=0.05‬‬ ‫;‪vCo=0‬‬ ‫;‪iLo=0‬‬

‫‪129‬‬

tstop=0.5; disp('run simulation,type ''return'' when ready') keyboard subplot(3,1,1) plot(simout(:,1),simout(:,2),'k') title('source current') ylabel('iS in A') subplot(3,1,2) plot(simout (:,1), simout (:,3),'k') title('capacitor voltage') ylabel('vC in V') subplot(3,1,3) plot(simout (:,1), simout (:,4),'k') title('inductor current') xlabel('time in sec') ylabel('iL in A')

ً‫ وبالتال‬workspace ً‫بعد كتابة الملف نقوم بتشغٌله فنالحظ أن قٌم جمٌع المتحوالت أصبح ف‬ .‫أصبح اآلن بإمكاننا تشغٌل المودٌل‬ ‫) نالحظ شكل أمواج التٌار والتوتر التً تظهر على عنصر اإلظهار‬t=1( ‫ بعد تشغٌل المودٌل‬. ً‫ هً كما ٌبٌن الشكل التال‬scope

130

131

‫مثال)‪(2‬‬ ‫لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ‪ ,‬علما ً أن توتر الدخل متناوب‬

‫ استنتاج النموذج الرٌاضً للدارة والالزم لحساب التٌارات ‪.i1 , i2 , i3‬‬‫ وضعع مخطعط المحاكعاة العالزم لحسعاب قعٌم التٌعارات ‪ i1 , i2 , i3‬باسعتخدام برنعامج‬‫‪. Matlab‬‬ ‫ كتابة ملف لقراءة المعطٌات وإظهار النتابج‪.‬‬‫الحـل‪:‬‬ ‫ استنتاج المعادلة التفاضلٌة الواصفة للدارة (النموذج الرٌاضً) وهً‪:‬‬‫=‬ ‫=‬ ‫=‬ ‫‪di1 1‬‬ ‫‪di‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪1‬‬ ‫‪‬‬ ‫‪i1 dt  1  ( 1  1 i1 ‬‬ ‫) ‪i1 dt‬‬ ‫‪‬‬ ‫‪dt C1‬‬ ‫‪dt‬‬ ‫‪L1 L1‬‬ ‫‪L1C1 ‬‬

‫‪u1  R1i1  L1‬‬

‫‪u1 R1‬‬ ‫‪1‬‬ ‫‪ i1 ‬‬ ‫‪i1 dt )dt or‬‬ ‫‪L1 L1‬‬ ‫‪L1C1 ‬‬

‫)‪(1‬‬

‫( ‪i1  ‬‬

‫‪1‬‬ ‫‪1‬‬ ‫‪(u1  R i1 ‬‬ ‫‪i1 dt )dt‬‬ ‫‪‬‬ ‫‪L1‬‬ ‫‪C1 ‬‬

‫)‪(2‬‬

‫‪di2‬‬ ‫‪di‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪ 2  2  2 i2  i2   ( 2  2 i2 ) dt or‬‬ ‫‪dt‬‬ ‫‪dt L2 L2‬‬ ‫‪L 2 L2‬‬

‫‪i1 ‬‬

‫‪u 2  R 2 i 2  L2‬‬

‫‪1‬‬ ‫‪i2 ‬‬ ‫‪(u 2  R2 i2 ) dt‬‬ ‫‪L2 ‬‬

‫‪132‬‬

‫)‪(3‬‬

‫‪di3‬‬ ‫‪di‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪ 3  3  3 i3  i3   ( 3  3 i3 ) dt or‬‬ ‫‪dt‬‬ ‫‪dt L3 L3‬‬ ‫‪L3 L3‬‬

‫‪u 3  R3 i3  L3‬‬

‫‪1‬‬ ‫‪i3 ‬‬ ‫‪(u 3  R3 i3 ) dt‬‬ ‫‪L3 ‬‬

‫حٌث ‪:‬‬ ‫التوتر المتناوب المطبق على الدارة الكهربابٌة )‪u=Umsin(wt)=70sin(wt‬‬ ‫التردد الزاوي بالرادٌان ‪2𝜋 :‬‬ ‫نحصل على النموذج الرٌاضً النهابً الالزم ‪ i(0) = 0‬باعتبار القٌمة االبتدابٌة للتٌار تساوي الصفر‬ ‫إلنشاء مخطط المحاكاة للدارة الكهربابٌة‪:‬‬ ‫سوف نقوم بوضع المخطط الصندوقً الالزم للنمذجة اعتماداً على المعادالت‬ ‫‪u1 R1‬‬ ‫‪1‬‬ ‫‪ i1 ‬‬ ‫‪i1 dt )dt‬‬ ‫‪L1 L1‬‬ ‫‪L1C1 ‬‬

‫( ‪i1  ‬‬

‫‪u 2 R2‬‬ ‫‪‬‬ ‫‪i2 ) dt‬‬ ‫‪L2 L2‬‬

‫( ‪i2  ‬‬

‫‪u 3 R3‬‬ ‫‪‬‬ ‫‪i3 ) dt‬‬ ‫‪L3 L3‬‬

‫( ‪i3  ‬‬

‫‪133‬‬

: ‫ملف المعطٌات‬ % M-file for parallel R L – RLC circuit simulation % input parameters and initial conditions % and plot results of simulation R1 = 20; %R1 = 20 ohms R2 = 4 ; %R2 = 4 ohms R3 = 4 ; %R3 = 4 ohms L1 = 0.2 ; % L1 = 0.2 Henry L2= 0.1 ; % L2= 0.1 Henry L3= 0.3; % L3= 0.3 Henry C = 1000e-6 ; % C = 1000 ?f Vac_mag=70 ; %Volts AC K1= 1/ L1 ; K2 =1 / C ; K3 = R1 ; K4 =1 /L2 ; K5=R2 ; K6=1/L3 ; K7=R3 ;

134

iL1o = 0 ; % initial value of capacitor voltage iL2o = 0 ; % initial value of inductor current iL3o = 0 ; % initial value of inductor current vCo = 0 ; % initial value of capacitor voltage tstop = 0.4; % stop time for simulation disp('run simulation, type ''return'' when ready to return') keyboard subplot(4,1,1) plot(simout(:,1),simout(:,2),'k') title('i1 current') ylabel('i1 in A') grid subplot(4,1,2) plot(simout(:,1),simout(:,3),'k') title('i2 current') ylabel('i2 in A') grid subplot(4,1,3) plot(simout(:,1),simout(:,4),'k') title('i3 current') ylabel('is in A') grid subplot(4,1,4) plot(simout(:,1),simout(:,5),'k') title('Source voltage') ylabel('Vs=u1=u2=u3 in V') xlabel('Time in sec') grid phiurad=0 phi1rad= phiurad - atan(((we*L1)-(1/(we*C1)))/R1) phi1deg=( phi1rad*180)/pi phi2rad= phiurad - atan((we*L2)/R2) phi2deg=( phi2rad*180)/pi phi3rad= phiurad - atan((we*L3)/R3) phi3deg=( phi3rad*180)/pi

135

‫ثالثا ً ‪ :‬النمذجة و المحاكاة لدارة كهربابٌة مختلطة‬

‫‪136‬‬

‫ٌتم وضع المخطط الصندوقً لمحاكاة للدارة المبٌنةعلى ثالثة مراحل‪:‬‬ ‫‪ -8‬المرحلة األولى‪ :‬سوف نقوم بتبسٌط الدارة إلى دارة مكافبة أبسط وذلك عن طرٌق تحصٌل‬ ‫الفرعٌن )‪ (X1 ,R1‬و )‪ (X2 , R2‬وإٌجاد محصلتهما ‪ Ze = Re - jXe =3.5-j0.5‬ذات‬ ‫الطبٌعة السعوٌة بحٌث تصبح الدارة المكافبة من الشكل التالً‪:‬‬ ‫‪d‬‬ ‫) ‪(VS  Req iS‬‬ ‫‪dt‬‬

‫‪Req=R1+Re‬‬

‫‪iS  Ceq‬‬

‫‪Ceq=(C1Ce)/(Ce+C1) ,‬‬

‫‪-2‬المرحلة الثانٌة‪ :‬حساب التوتر المطبق على الجزء التفرعً‬ ‫واعتباره منبع تغذٌة لهذا الجزء من الدارة ‪u3 = u2.‬‬ ‫‪1‬‬ ‫‪iS dt  u 2‬‬ ‫‪C1 ‬‬

‫‪VS  R1iS ‬‬

‫‪137‬‬

u 2  VS  R1iS 

1 iS dt C1 

‫ حساب التٌارات الفرعٌة نعود إلى الدارة التفرعٌة واعتبار أن المنبع المغذي لها‬:‫المرحلة الثالثة‬-3 :‫ ومنه ٌصبح النموذج الرٌاضً لهذا الجزء من الدارة‬u3= u2 ‫هو التوتر‬ i3   (

u 3 R3  i3 ) dt L3 L3

i2  C 2

d (u 2  R2 i2 ) dt

% M-file for sires RC+ par.LC+LR circuit simulation % input parameters and initial conditions % and plot results of simulation R1=5; X1=4;we=314;C1=1/(X1*we);R2=3; X2=4; C2=1/(X2*we); X3=3; L3=X3/we; R3=4; Z2=R2-X2*i Z3=R3+X3*i Z=(Z3*Z2)/(Z3+Z2) Re=real(Z) Req=R1+real(Z) Xe=imag(Z) Ce=-1/(imag(Z)*we) Ze=sqrt((real(Z))^2+(imag(Z))^2) Vac_mag=130; K1=R1+real(Z) ; K2 = C1*Ce/(C1+Ce) ; %Ceq =K2= C1*Ce/(C1+Ce)

138

K3 =R1 ; K4=1/C1 ; K5=R3; K6=1/L3 ; K7=C2 ; K8=R2 ; vCo = 0 ; % initial value of capacitor voltage iLo = 0 ; % initial value of inductor current tstop = 0.5; % stop time for simulation disp('run simulation, type "return" when ready to return') keyboard subplot(5,1,1) plot(simout(:,1),simout(:,2),'k') title('source current') ylabel('i1 in A') grid subplot(5,1,2) plot(simout(:,1),simout(:,3),'k') title('current2') ylabel('i2 in A') grid subplot(5,1,3) plot(simout(:,1),simout(:,4),'k') title('Current3') ylabel('i3 in A') grid subplot(5,1,4) plot(simout(:,1),simout(:,5),'k') title('voltage u2=u3') ylabel('u2=u3 in v') grid subplot(5,1,5) plot(simout(:,1),simout(:,6),'k') title('voltage') ylabel('vs in v') xlabel('Time in sec') grid phitotaldeg=0-atan((imag(Ze1)-Xo)/(Ro+real(Ze1)))*180/pi phizedeg=atan(imag(Ze1)/real(Ze1))*180/pi phiu1deg=phitotaldeg+phizedeg phi1deg=phiu1deg-(atan(imag(Z1)/real(Z1))*180)/pi

139

phi2deg=phiu1deg-(atan(imag(Z2)/real(Z2))*180)/pi

:ً‫ باألمر التال‬simout ‫إظهار النتابج باستخدام العنصر‬ >> plot(simout(:,1),simout(:,2),simout(:,1),simout(:,3),simout(:,1),simout(:, 4),simout(:,1),simout(:,5),simout(:,1),simout(:,6)),grid

140

phitotaldeg=22.3801,phizedeg=8.1301 phiu2deg=14.2500 , phi2deg=67.3801,phi3deg=-22.6199

141

‫المراجع العربٌة‬ ‫ دار شعاع‬, ‫ المهندس موفق شما‬, ‫ خطوات فً احتراف الماتالب‬‫ الدكتور‬, ‫ فً الماتالب‬GUI ‫ تنفٌذ وبرمجة واجهات المستخدم الرسومٌة‬‫ دار شعاع‬2007 ‫ طبعة‬, ‫المهندس سمٌح ٌوسف العٌسى‬ ‫) فً نمذجة‬Simulink – SimPowerSys( ‫ استخدام البٌبة البرمجٌة‬ً‫ الدكتور مصطفى الحزوري و الدكتور عل‬, ‫ومحاكاة الدارات الكهربابٌة‬ 2008 - 2007 ‫ طبعة‬, ‫ جامعة دمشق‬, ‫الجازي‬ ‫المراجع االجنبٌة‬ - Electronics and Circuit Analysis using MATLAB , Ed. John Okyere Attia - Boca Raton : CRC Press LLC, 1999. - Graphics and GUIs with MATLAB - Patrick Marchand and O. Thomas Holland : CRC Press company - Introduction to Simulink with Engineering Applications Steven T. Karris - Orchard Publications - Dynamic simulation of Electric Machinery using MATLAB – Chee mun Ong

142

‫الفهرس‬ ‫‪ ‬الفصل األول ‪ :‬التعامل مع المصفوفات‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬العملٌات األساسٌة على المصفوفات‬‫ ثالثا ً ‪ :‬العملٌات الرٌاضٌة على المصفوفات‬‫ رابعا ً ‪ :‬عملٌات أخرى على المصفوفات‬‫ خامسا ً ‪ :‬عملٌات متقدمة على المصفوفات‬‫‪ ‬الفصل الثانً ‪ :‬البرمجة غٌر المرئٌة‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬الحلقات‬‫‪ ‬أمر التحكم الشرطً ‪if‬‬ ‫‪ ‬االختبار ‪switch‬‬ ‫‪ ‬حلقة ‪while‬‬ ‫‪ ‬حلقة ‪for‬‬ ‫‪ ‬عبارة اإلٌقاف ‪break‬‬ ‫‪ ‬عبارة المتابعة ‪Continue‬‬ ‫‪ ‬العبارة ‪try‬‬ ‫ ثالثا ً ‪ :‬مالحظات هامة‬‫ رابعا ً ‪ :‬أمثلة عملٌة‬‫‪ ‬الفصل الثالث ‪ :‬الرسم ثنائً البعد ‪2D‬‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬الخصائص الرئٌسٌة للرسم البٌانً ثنائً البعد‬‫‪ ‬تعلٌمة الرسم األساسٌة‬ ‫‪ ‬رسم منحنٌٌن على شكل واحد‬ ‫‪ ‬تسمٌة الشكل والمحاور‬ ‫‪ ‬تلوٌن الشكل‬ ‫‪ ‬إنشاء شبكة‬ ‫‪ ‬الكتابة على الشكل‬ ‫‪ ‬أبعاد المحاور‬

‫‪ ‬تسمٌة المحاور‬ ‫‪ ‬تسمٌة كل منحنً حسب لونه‬ ‫ ثالثا ً ‪ :‬أمثلة عملٌة‬‫‪ ‬الفصل الرابع ‪ :‬التوابع الرٌاضٌة الخاصة فً الماتالب‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬العملٌات الحسابٌة على كثٌرات الحدود‬‫‪ ‬إٌجاد جذور كثٌر حدود‬ ‫‪ ‬إٌجاد كثٌر الحدود إنطالقا ً من جذوره‬ ‫‪ ‬حساب قٌمة كثٌر الحدود عند قٌمة معٌنة‬ ‫‪ ‬اشتقاق كثٌرات الحدود‬ ‫‪ ‬تكامل كثٌرات الحدود‬ ‫‪ ‬إٌجاد معادلة كثٌر الحدود المالئم‬ ‫‪ ‬العملٌات الرٌاضٌة على كثٌرات الحدود‬ ‫‪ ‬الفصل الخامس ‪ :‬برامج هندسٌة‬ ‫ البرنامج األول ‪ :‬برنامج ٌوضح فرق الطور بٌن اإلشارات الجٌبٌة‬‫ البرنامج الثانً ‪ :‬التمثٌل الطوري إلشارة جٌبٌة أي رسم القسم الحقٌقً بالنسبة للعقدي‬‫ورسم كل منهما بالنسبة للزمن‬ ‫ البرنامج الثالث ‪ :‬برنامج دمج نغمتٌن‬‫ البرنامج الرابع ‪ :‬تأثٌر الضجٌج على إشارة جٌبٌة‬‫ البرنامج الخامس ‪ :‬رسم اإلشارة الجٌبٌة قبل وبعد التقوٌم‬‫ البرنامج السادس ‪ :‬حساب المقاومة المكافئة لدارة مؤلفة من ‪ n‬ممانعة بحٌث ٌحدد‬‫المستخدم طرٌقة كل ممانعة (تسلسل أم تفرع)‬ ‫ البرنامج السابع ‪ :‬رسم كل من القسم الحقٌقً والتخٌلً بالنسبة للتردد للتابع ‪ z‬الموضح‬‫بالبرنامج‬ ‫ البرنامج الثامن ‪ :‬برنامج لرسم تغٌرات إشارة التوتر المتناوب‬‫‪ V(t)=Asin(wt+alpha)+k‬مع الزمن‪.‬‬ ‫‪ ‬جدول ٌوضح أهم األوامر و التوابع فً الماتالب‪.‬‬ ‫‪ ‬جدول ٌوضح أهم العملٌات والعالقات فً الماتالب‪.‬‬ ‫‪ ‬جدول ٌوضح أهم الرموز فً الماتالب‪.‬‬

‫‪ ‬الفصل السادس ‪ :‬التحكم بالمنفذ التفرعً‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬المنفذ التفرعً‬‫ ثالثا ً ‪ :‬التحكم بالمنفذ التفرعً باستخدام الماتالب‬‫ رابعا ً ‪ :‬أمثلة عملٌة‬‫‪ ‬الفصل السابع ‪ :‬تنفٌذ وبرمجة واجهات المستخدم الرسومٌة فً الماتالب‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬مفهوم واجهات المستخدم الرسومٌة وكٌف تعمل‬‫ ثالثا ً ‪ :‬برمجة الواجهات ‪GUI‬‬‫‪ ‬فتح ‪ GUI‬جدٌدة فً محرر التخطٌط‬ ‫‪ ‬محاذاة مكونات ‪GUI‬‬ ‫‪ ‬عناصر التحكم‬ ‫‪ ‬أهم التعلٌمات المستخدمة فً ‪GUI‬‬ ‫‪ ‬أهم الخصائص المشتركة لعناصر التحكم‬ ‫‪ ‬سلوك ضبط القٌاس‬ ‫‪ ‬مثال بسٌط‬ ‫ رابعا ً ‪ :‬المكونات المتاحة فً ‪GUI‬‬‫ خامسا ً ‪ :‬برمجة عناصر التحكم‬‫‪Radio Buttom ‬‬ ‫‪Pop-up Menus ‬‬ ‫‪Toggle Buttom ‬‬ ‫‪Check Boxes ‬‬ ‫‪Edit Text ‬‬ ‫‪Sliders ‬‬ ‫‪List Box ‬‬ ‫ سادسا ً ‪ :‬االستدعاءات‬‫‪ ‬ماهو االستدعاء ‪Callback‬‬ ‫‪ ‬أنواع االستدعاءات‬ ‫ سابعا ً ‪ :‬البنٌة ‪handles‬‬‫‪ -‬ثامنا ً ‪ :‬أمثلة عملٌة‬

‫‪ ‬الفصل الثامن ‪ :‬تحلٌل الدارات الكهربائٌة‬ ‫ أوالً ‪ :‬تحلٌل دارات التٌار المستمر‬‫‪ ‬مقدمة‬ ‫‪ ‬تحلٌل نقاط الدارة (قانون كٌرشوف األول)‬ ‫‪ ‬تحلٌل حلقات الدارة (قانون كٌرشوف الثانً)‬ ‫‪ ‬االستطاعة العظمى المنقولة‬ ‫ ثانٌا ً ‪ :‬تحلٌل دارات التٌار المتناوب‬‫‪ ‬مقدمة‬ ‫‪ ‬دراسة الحالة المستقرة لدارات التٌار المتناوب‬ ‫‪ ‬دارات التٌار المتناوب األحادٌة والثالثٌة الطور‬ ‫‪ ‬ممٌزات الشبكة‬ ‫‪ ‬االستجابة الترددٌة‬ ‫‪ ‬الفصل التاسع ‪ :‬النمذجة والمحاكاة باستخدام مكتبة ‪Simulink‬‬ ‫ أوالً ‪ :‬مقدمة‬‫ ثانٌا ً ‪ :‬إظهار محتوٌات بعض المكتبات‬‫ ثالثا ً ‪ :‬تعرٌف المكتبة أو االداة ‪Simulink‬‬‫‪ o‬أوالً ‪ :‬تمثٌل نظم التحكم‬ ‫‪ o‬ثانٌا ً ‪ :‬تمثٌل ومحاكاة الدارات الكهربائٌة‬ ‫‪ ‬المراجع العربٌة و األجنبٌة‬

Related Documents

Matlab
January 2021 2
Matlab Fundamentals
January 2021 2
Matlab Cours
March 2021 0
Matlab Tutorial
January 2021 1
Arduino+matlab
January 2021 0
Matlab Tutorial
January 2021 1

More Documents from "xfreshtodef123"