You are on page 1of 149

By : ‘’ eng : Adnan Shahin ’’

You can Program Easily in Matlab Now !


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

‫)‪Matricname(m,n‬‬

‫‪ n‬عدد األعمدة‬ ‫‪ m‬عدد األسطر‬ ‫حٌث ‪:‬‬

‫ثانٌا ً ‪ :‬العملٌات األساسٌة على المصفوفات ‪...‬‬

‫‪ -‬إنشاء مصفوفة (‪ )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‬‬
‫حٌث ٌتم العد حسب الترتٌب من أعلى العمود إلى اسفله وبالترتٌب‪.‬‬

‫‪ -‬استدعاء سطر من مصفوفة‪.‬‬


‫)‪A(3,:‬‬ ‫‪ans = 5 6 7 4‬‬

‫‪ -‬استدعاء عمود من مصفوفة‪.‬‬

‫)‪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,:‬‬

‫مالحظة ‪:‬‬

‫)‪ones(m,n‬‬ ‫‪ – 1‬تشكٌل مصفوفة واحدٌة‬

‫)‪zeros(m,n‬‬ ‫‪ – 2‬تشكٌل مصفوفة صفرٌة‬

‫)‪eye(m,n‬‬ ‫‪ - 3‬تشكٌل مصفوفة محاٌدة‬

‫‪3‬‬
‫ثالثا ً ‪ :‬العملٌات الرٌاضٌة على المصفوفات‪.‬‬

‫بفرض لدٌنا المصفوفات ‪ A,B‬ونرٌد إجراء عملٌات الجمع والطرح والضرب والقسمة ‪...‬إلخ علٌها‬
‫فتكون كالتالً ‪:‬‬

‫‪A+B‬‬ ‫الجمع‬ ‫‪-1‬‬


‫‪A-B‬‬ ‫الطرح‬ ‫‪-2‬‬
‫الضرب ‪A.*B‬‬ ‫‪-3‬‬
‫‪A./B‬‬ ‫القسمة‬ ‫‪-4‬‬
‫الرفع لقوى ‪A.^B‬‬ ‫‪-5‬‬
‫‪3*A‬‬ ‫الضرب برقم ‪3‬‬ ‫‪-6‬‬
‫‪( A+2‬حٌث ٌتم جمع العدد ‪ 2‬لجمٌع عناصر‬ ‫جمع مصفوفة لرقم ‪2‬‬ ‫‪-7‬‬
‫المصفوفة)‬

‫رابعا ً ‪ :‬عملٌات أخرى على المصفوفات‪.‬‬

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

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


‫فتكون المصفوفة الناتجة ‪T‬‬ ‫’‪T = D‬‬

‫)‪ S = inv(D‬فتكون المصفوفة الناتجة ‪S‬‬ ‫‪ -‬إٌجاد مقلوب مصفوفة ‪...‬‬

‫)‪V = rank(D‬‬ ‫‪ -‬إٌجاد رتبة مصفوفة ‪...‬‬


‫‪ans = 2‬‬

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

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

‫‪ -‬استدعاء مصفوفة جزبٌة من المصفوفة ‪( C‬كما هو مبٌن بالشكل)‪...‬‬


‫)‪c(1:2,3:4‬‬ ‫= ‪ans‬‬

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

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

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

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

‫‪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‬‬
‫مثال ‪:‬‬
‫)‪size(k‬‬ ‫‪ans = 3 4‬‬

‫‪6‬‬
‫)‪length(k‬‬ ‫‪ans = 4‬‬

‫أنواع من ضرب المصفوفات ‪...‬‬

‫لتكن المصفوفتان ‪ a‬السطرٌة و‪ b‬العمودٌة‬

‫‪ -‬الجداء الداخلً أو ‪Dotproduct‬‬


‫‪a*b‬‬ ‫‪ans = 14‬‬
‫حٌث تم ضرب العمود األول مع السطر األول والعمود الثانً مع السطر الثانً وهكذا ‪...‬‬

‫‪ -‬الجداء الخارجً أو ‪outproduct‬‬

‫‪b*a‬‬ ‫= ‪ans‬‬

‫حٌث تم ضرب عناصر كل سطر من ‪ b‬مع سطر ‪... a‬‬

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

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

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

‫‪ -‬القسمة‬
‫‪a./b‬‬ ‫= ‪ans‬‬

‫‪7‬‬
‫‪ -‬الرفع لقوة‬
‫‪a.^b‬‬ ‫= ‪ans‬‬

‫مالحظات ‪:‬‬
‫‪ -‬إنشاء مصفوفة متزاٌدة خطٌا ً معلوم عدد عناصرها ‪...‬‬

‫)‪linspace(a,b,c‬‬

‫‪ c‬عدد عناصر المصفوفة‬ ‫‪ b‬القٌمة النهابٌة‬ ‫‪ a‬القٌمة البدابٌة‬ ‫حٌث ‪:‬‬

‫‪ -‬إنشاء مصفوفة متزاٌدة لوغارٌتمٌا ً معلوم عدد عناصرها ‪...‬‬

‫)‪logspace(a,b,c‬‬

‫‪ c‬عدد عناصر المصفوفة‬ ‫‪ b‬القٌمة النهابٌة‬ ‫‪ a‬القٌمة البدابٌة‬ ‫حٌث ‪:‬‬

‫‪ -‬إنشاء مصفوفة سحرٌة ‪...‬‬


‫حٌث ‪ d‬أبعاد المصفوفة‬ ‫)‪magic(d‬‬

‫مثال‪:‬‬

‫)‪v = magic(3‬‬ ‫=‪v‬‬

‫وللتحقق من هذه المصفوفة نتأكد من ‪:‬‬

‫‪ – 1‬مجموع عناصر كل عمود ‪:‬‬

‫)‪sum(v‬‬ ‫= ‪ans‬‬

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

‫‪8‬‬
‫)‪sum(v,2‬‬ ‫= ‪ans‬‬

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

‫)‪diag(v‬‬ ‫= ‪ans‬‬

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

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


‫حٌث أن ترتٌب عناصر المصفوفة ٌكون كالتالً ‪:‬‬

‫‪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‬وهنا عدة فروق بٌن هاتٌن الطرٌقتٌن نذكر منها ‪:‬‬

‫ال ‪ٌ function‬بدأ بكلمة ‪ function‬بٌنما ال‪ٌ script‬بدأ بالبرنامج مباشرة‪.‬‬ ‫‪-1‬‬


‫الشكل االفتراضً للكتابة بعد كلمة ‪ function‬هو أن تضع وسطاء الخرج ومن ثم اسم‬ ‫‪-2‬‬
‫ال‪ function‬وبعدها وسطاء الدخل بٌنما ال‪ scripts‬ال ٌحتاج إلى كل هذا‪.‬‬
‫ٌمكنك التابع (‪ )function‬عند تنفٌذه من تغٌٌر وسطاء الدخل بٌنما ال ٌكون هذا ممكن فً‬ ‫‪-3‬‬
‫ال‪.scripts‬‬
‫المتغٌرات التً تحسب فً داخل ال‪ function‬ال تحفظ فً ال‪ workspace‬بٌنما فً‬ ‫‪-4‬‬
‫ال‪ 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)<a(j‬‬
‫;)‪x=a(i‬‬
‫;)‪a(i)=a(j‬‬
‫;‪a(j)=x‬‬
‫‪end‬‬
‫‪end‬‬
‫‪end‬‬
‫‪a‬‬

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

‫‪ ‬المثال التاسع‬
‫)‪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 f<n(4‬‬
‫)'‪disp('the number is greater than your number‬‬
‫)‪elseif f>n(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‬والتً سنراها فً أمثلة الحقة‪.‬‬
‫الرمز‬ ‫اللون‬
‫‪c‬‬ ‫‪Cyan‬‬ ‫أخضر مزرق‬
‫‪m‬‬ ‫‪Magenta‬‬ ‫ارجوانً‬
‫‪y‬‬ ‫‪Yellow‬‬ ‫أصفر‬
‫‪k‬‬ ‫‪Black‬‬ ‫أسود‬
‫‪b‬‬ ‫‪Blue‬‬ ‫أزرق‬
‫‪r‬‬ ‫‪Red‬‬ ‫أحمر‬
‫‪G‬‬ ‫‪Green‬‬ ‫أخضر‬

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


‫"–"‬
‫‪--------------------------‬‬ ‫" ‪" --‬‬

‫‪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‬‬
‫ثالثا ً ‪ :‬أمثلة عامة ‪...‬‬
‫‪ -‬المثال األول ‪:‬‬

‫= )‪ f(t‬مع تغٌرات ‪.t‬‬ ‫‪+‬‬ ‫‪+‬‬ ‫برنامج لرسم تغٌرات كثٌر الحدود ‪+ 1‬‬
‫;‪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‬‬

‫= )‪G(x‬‬ ‫‪+‬‬ ‫‪+1‬‬


‫;]‪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,'-‬‬

‫‪ ‬العملٌات الرٌاضٌة على كثٌرات الحدود ‪:‬‬


‫ٌمكن جمع وطرح كثٌرات الحدود من خالل التعامل مع المصفوفات الممثلة لها مع مالحظة ان تكون‬
‫كال المصفوفتٌن من نفس الدرجة والمثال التالً ٌوضح ذلك ‪....‬‬
‫‪ ‬مثال ‪:‬‬
‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬
‫‪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(A,B‬‬ ‫)‪%conv(B,A‬‬

‫= ‪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-‬‬

‫الجدول التالً ٌبٌن أهم األوامر والتوابع فً الماتالب‬

‫‪Abs‬‬ ‫القٌمة المطلقة أو طوٌلة العدد العقدي‬


‫‪Angle‬‬ ‫زاوٌة الطور‬
‫‪Ans‬‬ ‫الجواب عند حدم إسناد التعبٌر‬
‫‪Atan‬‬ ‫‪Arc tg‬‬
‫‪Axis‬‬ ‫تدرٌج المحور ٌدوٌا ً‬
‫‪Bode‬‬ ‫رسم مخطط بود‬
‫‪Clc‬‬ ‫مسح فضاء العمل‬
‫‪Conj‬‬ ‫مرافق العدد العقدي‬
‫‪Cos‬‬ ‫تجٌب الزاوٌة‬
‫‪Cosh‬‬ ‫التجٌب القطعً‬
‫‪Det‬‬ ‫إٌجاد معٌن مصفوفة‬
‫‪Diag‬‬ ‫إٌجاد قطر مصفوفة‬
‫‪exit‬‬ ‫إنهاء البرنامج‬
‫‪exp‬‬ ‫التابع األسً‬
‫‪expm‬‬ ‫رفع مصفوفة لقوة‬
‫‪eye‬‬ ‫المصفوفة الحٌادٌة‬
‫‪Format long‬‬ ‫إعطاء ‪ 15‬مرتبة بعد الفاصلة العشرٌة‬

‫‪47‬‬
‫‪Format long e‬‬ ‫إعطاء ‪ 15‬مرتبة إضافٌة للقوة‬
‫‪Format short‬‬ ‫إعطاء ‪ 5‬مراتب‬
‫‪Format short e‬‬ ‫إعطاء ‪ 5‬مراتب إضافٌة للقوة‬
‫‪freqs‬‬ ‫التحول إلى المستوي الالبالسً‬
‫‪freqz‬‬ ‫التحول إلى المستوي ‪z‬‬
‫‪grid‬‬ ‫رسم خطوط الشبكة‬
‫‪hold‬‬ ‫تثبٌت المخطط المرسوم على الشاشة‬
‫‪Real‬‬ ‫الجزء الحقٌقً لعدد عقدي‬
‫‪imag‬‬ ‫الجزء التخٌلً لعدد عقدي‬
‫‪inf‬‬ ‫عدد ال نهابً‬
‫‪inv‬‬ ‫مقلوب مصفوفة‬
‫‪length‬‬ ‫طول شعاع‬
‫‪linspace‬‬ ‫فضاء شعاعً خطً‬
‫‪log‬‬ ‫اللوغارٌتم الطبٌعً (النبري)‬
‫‪Loglog‬‬ ‫الرسم على محورٌن لوغارٌتمٌٌن‬
‫‪Log m‬‬ ‫أخذ لوغارٌتم عناصر مصفوفة‬
‫‪Logspace‬‬ ‫فضاء شعاعً لوغارٌتمً‬
‫‪Log 10‬‬ ‫اللوغارٌتم العشري‬
‫‪Max‬‬ ‫القٌمة العظمى‬
‫‪Mean‬‬ ‫القٌمة المتوسطة‬
‫‪Medium‬‬ ‫القٌمة المتوسطة التربٌعٌة‬
‫‪Min‬‬ ‫القٌمة الصغرى‬
‫‪Nan‬‬ ‫لٌس رقم (ٌعامل لمحرف)‬
‫‪Nyquist‬‬ ‫رسم مخطط ناٌكوٌست‬
‫‪Pi‬‬ ‫‪Pi = 3.14‬‬
‫‪Plot‬‬ ‫الرسم فً المستوي الدٌكارتً‬
‫‪Polar‬‬ ‫الرسم فً المستوي القطبً‬
‫‪Prod‬‬ ‫حاصل ضرب العناصر‬
‫‪Rand‬‬ ‫تولٌد أعداد عشوابٌة أو مصفوفة‬
‫‪Rank‬‬ ‫حساب رتبة مصفوفة‬
‫‪Rem‬‬ ‫باقً قسمة‬
‫‪Residue‬‬ ‫توسٌع الجزء العشري‬
‫‪Rlocus‬‬ ‫رسم الجذور الصفرٌة‬
‫‪Semilogx‬‬ ‫رسم نصف لوغارٌتمً \ المحور ‪ x‬هو‬
‫اللوغارٌتمً‬

‫‪48‬‬
‫‪Semilogy‬‬ ‫رسم نصف لوغارٌتمً \ المحور ‪ y‬هو‬
‫اللوغارٌتمً‬
‫‪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‬‬
‫‪Hardware‬‬ ‫‪Direction‬‬
‫‪Register‬‬ ‫‪(D-Type‬‬
‫‪Inverted‬‬ ‫‪In/out‬‬
‫)‪25‬‬
‫‪Yes‬‬ ‫‪Control‬‬ ‫‪In/Out‬‬ ‫‪1‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪2‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪3‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪4‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪5‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪6‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪7‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪8‬‬
‫‪Data‬‬ ‫‪Out‬‬ ‫‪9‬‬

‫‪50‬‬
Status In 10
Yes Status In 11
Status In 12
Status In 13
Yes Control In/Out 14
Status In 15
Control In/Out 16
Yes Control In/Out 17
Gnd 18 – 25

D : Data (in,out) - 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‬عدد مرات تكرار البرنامج‪.‬‬

‫التحوٌل الثنابً للمتغٌر ‪c‬‬ ‫قٌمة ‪c‬‬ ‫قٌمة ‪t‬‬


‫‪00000001‬‬ ‫‪1‬‬ ‫‪0‬‬
‫‪00000010‬‬ ‫‪2‬‬ ‫‪1‬‬
‫‪00000100‬‬ ‫‪4‬‬ ‫‪2‬‬
‫‪00001000‬‬ ‫‪8‬‬ ‫‪3‬‬
‫‪00010000‬‬ ‫‪16‬‬ ‫‪4‬‬
‫‪00100000‬‬ ‫‪32‬‬ ‫‪5‬‬

‫‪53‬‬
‫‪01000000‬‬ ‫‪64‬‬ ‫‪6‬‬
‫‪10000000‬‬ ‫‪128‬‬ ‫‪7‬‬

‫إن التعلٌمة ‪ 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‬‬
‫‪.axtiveX Component‬‬ ‫‪.12‬‬

‫‪ .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‬‬
‫تكون نوعا ً متعارضة ضمن مجموعة من أزرار‬
‫الخٌار المرتبطة ‪ ,‬أي ٌمكنك أن تحدد فقط زراً‬
‫واحداً فً نفس الوقت وتتم قٌادة هذه الكابنات من‬
‫قبل ‪Button Group‬‬
‫إن مربعات االختٌار تولد فعالً عندما تختبر‬ ‫‪Check Box‬‬
‫وتشٌر لحالتها أكانت مختبرة أم غٌر مختبرة‪ ,‬إن‬
‫مربعات االختبار مفٌدة عندما ٌتم تزوٌد المستخدم‬
‫بعدد من االختبارات المستقلة التً تضبط النمط‬
‫إن عناصر تحكم النص المحرر عبارة عن حقول‬ ‫‪Edit text‬‬
‫تمكن المستخدمٌن من إدخال أو تعدٌل العبارات‬
‫النصٌة‬
‫إن عناصر تحكم النص الستاتٌكً تعرض‬ ‫‪Static text‬‬
‫خطوطا ً من النصوص‬
‫تقبل المنزلقات دخالً رقمٌا ً ضمن مجال محدد‬ ‫‪Slider‬‬
‫وذلك بتمكٌن المستخدم من تحرٌك الشرٌط‬
‫المنزلق الذي ٌدعى بالمنزلقة أو اإلبهام‬
‫تعرض مربعات القابمة قابمة من األجزاء وتمكن‬ ‫‪List Box‬‬
‫المستخدمٌن من اختٌار أحد األجزاء أو أكثر‬
‫تعرض القابمة المنسدلة قابمة من االختبارات‬ ‫‪Pop-Up Menu‬‬
‫عندما ٌنقر المستخدمٌن على السهم‬
‫إن المحاور تمكن واجهتك من عرض الرسومات‬ ‫‪Axes‬‬
‫والصور‬
‫تجمع اللوحة مكونات الواجهة ‪ ,‬بالتجمٌع‬ ‫‪Panel‬‬
‫البصري بالنسبة ألدوات التحكم ‪ ,‬فإذا حركت‬

‫‪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‬‬
‫األزرار – لوحة – عناصر‬ ‫بنقر زر بٌنما ٌكون المؤشر‬
‫تحكم واجهة المستخدم‬ ‫على أو ضمن ‪5‬بٌكسل من‬
‫المكونة أو الشكل‬
‫قابمة المحتوٌات – قابمة –‬ ‫هو فعل التحكم‪ ,‬وٌنفذ على‬ ‫‪Callback‬‬
‫عناصر تحكم واجهة المستخدم‬ ‫سبٌل المثال عندما ٌنقر‬
‫المستخدم على زر الضغط أو‬
‫ٌختار جزءاً من القابمة‬
‫الشكل‬ ‫ٌنفذ عندما ٌغلق الشكل‬ ‫‪CloseRequestFcn‬‬
‫ٌقوم بتهٌبة المكونة عندما ٌتم المحاور – الشكل – مجموعة‬
‫األزرار – اللوحة – قابمة‬ ‫إنشاؤها‪ ,‬إنه ٌنفذ بعد إنشاء‬ ‫‪CreatFcn‬‬
‫المحتوٌات – القابمة –‬ ‫المكونة أو الشكل ولكن قبل‬
‫عناصر تحكم واجهة المستخدم‬ ‫عرضها‬
‫ٌنجز عملٌات التنظٌف فقط المحاور – الشكل – مجموعة‬
‫األزرار – اللوحة – قابمة‬ ‫قبل إلغاء المكونة أو الشكل‬ ‫‪DeleteFcn‬‬
‫المحتوٌات – القابمة –‬
‫عناصر تحكم واجهة المستخدم‬
‫ٌنفذ هذا االستدعاء عندما ٌنقر الشكل – عناصر تحكم واجهة‬
‫المستخدم‬ ‫المستخدم على مفتاح من لوحة‬ ‫‪KeyPressFcn‬‬
‫المفاتٌح ومكونة االستدعاءات‬
‫أو الشكل تكون مفعلة‬
‫مجموعة األزرار – الشكل –‬ ‫ٌنفذ عندما ٌعٌد المستخدم‬ ‫‪ResizeFcn‬‬
‫اللوحة‬ ‫ضبط قٌاس اللوحة ‪ ,‬مجموعة‬
‫األزرار ‪ ,‬أو الشكل حٌث‬
‫تكون خاصٌة ‪ Resize‬للشكل‬
‫مضبوطة على ‪on‬‬
‫مجموعة األزرار‬ ‫ٌنفذ عندها ٌختار المستخدم‬ ‫‪SelectionChangeFcn‬‬
‫زر خٌار أو زر تبدٌل مختلف‬
‫فً مكونة مجموعة األزرار‬

‫‪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<t<2pi(
: ً‫ الخاص بها ما ٌل‬string ً‫ بعد التعدٌل ف‬popupmenu ‫نضع فً استدعاء‬
state = get(handles.popupmenu1,'value');
t=0:pi/10:2*pi;
switch state
case 1
set(handles.edit,'string','select the function')
case 2
y=sin(t)
case 3
y=cos(t)
case 4
y=exp(t)
end

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‬‬
‫=‬ ‫→‬ ‫=‬

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

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

‫‪+‬‬ ‫‪–5=0‬‬ ‫→‬ ‫‪0.15‬‬ ‫‪– 0.1‬‬ ‫‪– 0.05‬‬ ‫‪=5‬‬ ‫العقدة ‪: 1‬‬

‫‪82‬‬
‫‪+‬‬ ‫‪+‬‬ ‫‪=0‬‬ ‫→‬ ‫‪-0.1‬‬ ‫‪+ 0.145‬‬ ‫‪– 0.025‬‬ ‫‪=0‬‬ ‫العقدة ‪: 2‬‬

‫‪+‬‬ ‫‪–2=0‬‬ ‫→‬ ‫‪-0.05‬‬ ‫‪– 0.025‬‬ ‫‪+ 0.075‬‬ ‫‪=3‬‬ ‫العقدة ‪: 3‬‬

‫[‬ ‫] [=] []‬

‫وٌكون الكود البرمجً الذي نكتبه فً الماتالب كملف ‪ 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‬وذلك للدارة الموضحة بالشكل الموضح‬

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

‫‪10( - ) + 30( - ) – 10 = 0‬‬ ‫→‬ ‫‪40 - 10 - 30 = 10‬‬ ‫الحلقة ‪: 1‬‬

‫(‪10( - ) + 15 + 5‬‬ ‫‪=0‬‬ ‫→‬ ‫‪-10 + 30 - 5 = 0‬‬ ‫الحلقة ‪: 2‬‬

‫‪30( - ) + 5‬‬ ‫‪+ 30 = 0‬‬ ‫→‬ ‫‪-30 - 5 + 65 = 0‬‬ ‫الحلقة ‪: 3‬‬

‫[‬ ‫[ =] []‬ ‫]‬

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

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

‫∫ √=‬ ‫∫ √=‬

‫=‬ ‫=‬
‫√‬ ‫√‬

‫‪The average power dissipated :‬‬

‫∫ =‪P‬‬ ‫=‬ ‫𝜃(‪cos‬‬ ‫)𝜃‬

‫‪The power factor :‬‬

‫= ‪pf‬‬ ‫𝜃(‪= cos‬‬ ‫)𝜃‬

‫‪The complex power,S, is :‬‬

‫= ‪S = P + jQ‬‬ ‫‪.‬‬ ‫]) 𝜃 ‪.[cos(𝜃 - 𝜃 ) + jsin(𝜃 -‬‬

‫‪88‬‬
‫‪ˈquad & quad8ˈ functions‬‬
‫مالحظة‬
‫ٌوفر الماتالب هاذٌن التابعٌن من أجل إجراء التكامل ألي تابع والصٌغة العامة‬
‫للتابعٌن هً ‪....‬‬

‫∫=‪q‬‬

‫)‪quad(ˈfunctˈ,a,b,tol,trace‬‬
‫)‪quad8(ˈfunctˈ,a,b,tol,trace‬‬
‫حٌث ‪:‬‬

‫‪funct‬‬ ‫اسم التابع كما تم تعرٌفه فً الماتالب‬


‫‪a‬‬ ‫القٌمة الحدٌة الدنٌا للتكامل‬
‫‪b‬‬ ‫القٌمة الحدٌة العلٌا للتكامل‬
‫‪tol‬‬ ‫حدود التأرجح المسموح بها من أجل الدقة‬
‫ولها قٌمة افتراضٌة‬
‫‪trace‬‬ ‫لتفعٌل إمكانٌة رسم التكامل وٌمكن تفعٌلها‬
‫بوضع أي قٌمة غٌر مساوٌة للصفر حٌث‬
‫أن القٌمة صفر هً االفتراضٌة‬

‫مثال ‪:‬‬

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

‫والمطلوب تحدٌد القٌمة الوسطٌة للطاقة والقٌمة اللحظٌة للتوتر وكذلك معامل االستطاعة وذلك‬
‫بالطرٌقتٌن التحلٌلٌة والرٌاضٌة‪.‬‬
‫من أجل ذلك نكتب الكود البرمجً التالً فً ملف ‪ 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‬‬

‫لتكن لدٌنا الدارة الموضحة بالشكل ‪...‬‬

‫‪=20 Ω‬‬ ‫‪=100 Ω‬‬ ‫‪=50 Ω‬‬

‫‪=4H‬‬ ‫‪=8H‬‬ ‫‪= 250µf‬‬

‫‪w = 10 rad/s‬‬

‫والمطلوب حساب طوٌلة وزاوٌة توتر الخرج ‪.....‬‬

‫‪+‬‬ ‫‪+‬‬ ‫‪=0‬‬ ‫العقدة ‪: 1‬‬


‫‪⁄‬‬

‫‪+‬‬ ‫‪+‬‬ ‫‪=0‬‬ ‫العقدة ‪: 2‬‬

‫‪+‬‬ ‫‪+‬‬ ‫‪=0‬‬ ‫العقدة ‪: 3‬‬


‫‪⁄‬‬

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

‫‪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) → 110 0 = (6+13j)

92
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 = 𝜎 + jw‬‬ ‫→‬ ‫‪s = -3 + 2j‬‬
‫)‪=(10 40‬‬ ‫‪|s=-3+2j‬‬

‫واآلن سنستخدم البٌبة البرمجٌة (ماتالب) من أجل إٌجاد األقطاب والرواسب للتابع‬
‫‪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

: ‫وبالنتٌجة ٌكون الخرج‬


= 3.45 cos(2t – 66.99)

‫ االستجابة الترددٌة‬: ً ‫خامسا‬


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

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

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Ω‬ما التغٌر الذي سٌحدث ‪ ,‬بٌن بالرسم‬

‫=‬ ‫=‬ ‫=‬ ‫=‬

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


‫;‪l=5‬‬ ‫;‪c=1.25e-6‬‬ ‫;‪r1=10000‬‬ ‫;‪r2=100‬‬
‫;]‪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‬جدٌدة‬
‫تحوي العنصر المضاف‪.‬‬
‫ٌمكن العثور على أي عنصر نرٌد إضافته بكتابة اسم العنصر فً مربع البحث فً‬ ‫مالحظة‬
‫أعلى الشاشة ‪ ,‬وبهذه الطرٌقة ال داعً للبحث طوٌالً عن العنصر ‪.‬‬
‫نقوم اآلن بالتعدٌل على اإلشارات الجٌبٌة المراد جمعها وذلك كما ٌبٌن الجدول التالً ‪...‬‬
‫رقم اإلشارة الجيبيت‬ ‫‪Amp.‬‬ ‫‪Freq.‬‬ ‫‪Bias‬‬
‫‪1‬‬ ‫‪1‬‬ ‫𝜋‪2‬‬ ‫‪0‬‬
‫‪2‬‬ ‫‪1/3‬‬ ‫𝜋‪3*2‬‬ ‫‪0‬‬
‫‪3‬‬ ‫‪1/5‬‬ ‫𝜋‪5*2‬‬ ‫‪0‬‬
‫‪4‬‬ ‫‪1/7‬‬ ‫𝜋‪7*2‬‬ ‫‪0‬‬
‫‪5‬‬ ‫‪1/9‬‬ ‫𝜋‪9*2‬‬ ‫‪0‬‬
‫‪6‬‬ ‫‪1/11‬‬ ‫𝜋‪11*2‬‬ ‫‪0‬‬
‫بعد ذلك نقوم بالتعدٌل على عدد مداخل عنصر الجمع ‪ 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‬‬
‫سنبدأ الشرح بمثال بسٌط ومن ثم سنعطً أمثلة أكثر تعقٌداً وهكذا ‪.....‬‬

‫المطلوب وضع المخطط الصندوقً لمحاكاة دارة كهربابٌة تسلسلٌة بسٌطة مكونة من مقاومة و ملف‬
‫ومنبع تغذٌة متناوب ورسم القٌم العظمى للتوتر و للتٌار واالستطاعة حٌث ‪:‬‬
‫‪R=20 Ω‬‬ ‫‪L=0.1 H‬‬
‫خطوات الحل ‪:‬‬
‫‪ -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 = L.‬‬ ‫‪or‬‬ ‫∫ = ‪Vc‬‬
‫∫ = ‪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‬‬
‫‪u1  R1i1  L1‬‬ ‫‪‬‬
‫‪dt C1‬‬ ‫‪‬‬ ‫‪i1 dt  1  ( 1  1 i1 ‬‬
‫‪dt‬‬ ‫‪L1 L1‬‬ ‫‪L1C1 ‬‬
‫) ‪i1 dt‬‬

‫‪u1 R1‬‬ ‫‪1‬‬


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

‫‪di2‬‬ ‫‪di‬‬ ‫‪u‬‬ ‫‪R‬‬ ‫‪u‬‬ ‫‪R‬‬


‫‪u 2  R 2 i 2  L2‬‬ ‫‪ 2  2  2 i2  i2   ( 2  2 i2 ) dt or‬‬
‫‪dt‬‬ ‫‪dt L2 L2‬‬ ‫‪L 2 L2‬‬
‫)‪(2‬‬
‫‪1‬‬
‫‪L2 ‬‬
‫‪i2 ‬‬ ‫‪(u 2  R2 i2 ) dt‬‬

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

‫حٌث ‪:‬‬
‫التوتر المتناوب المطبق على الدارة الكهربابٌة )‪u=Umsin(wt)=70sin(wt‬‬

‫التردد الزاوي بالرادٌان ‪2𝜋 :‬‬

‫نحصل على النموذج الرٌاضً النهابً الالزم ‪ i(0) = 0‬باعتبار القٌمة االبتدابٌة للتٌار تساوي الصفر‬
‫إلنشاء مخطط المحاكاة للدارة الكهربابٌة‪:‬‬
‫سوف نقوم بوضع المخطط الصندوقً الالزم للنمذجة اعتماداً على المعادالت‬
‫‪u1 R1‬‬ ‫‪1‬‬
‫( ‪i1  ‬‬
‫‪L1C1 ‬‬
‫‪ i1 ‬‬ ‫‪i1 dt )dt‬‬
‫‪L1 L1‬‬
‫‪u 2 R2‬‬
‫( ‪i2  ‬‬ ‫‪‬‬ ‫‪i2 ) dt‬‬
‫‪L2 L2‬‬
‫‪u 3 R3‬‬
‫( ‪i3  ‬‬ ‫‪‬‬ ‫‪i3 ) dt‬‬
‫‪L3 L3‬‬

‫‪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‬‬
‫‪iS  Ceq‬‬ ‫) ‪(VS  Req iS‬‬
‫‪dt‬‬

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

‫‪-2‬المرحلة الثانٌة‪ :‬حساب التوتر المطبق على الجزء التفرعً‬


‫واعتباره منبع تغذٌة لهذا الجزء من الدارة ‪u3 = u2.‬‬
‫‪1‬‬
‫‪C1 ‬‬
‫‪VS  R1iS ‬‬ ‫‪iS dt  u 2‬‬

‫‪137‬‬
1
C1 
u 2  VS  R1iS  iS dt

‫ حساب التٌارات الفرعٌة نعود إلى الدارة التفرعٌة واعتبار أن المنبع المغذي لها‬:‫المرحلة الثالثة‬-3
:‫ ومنه ٌصبح النموذج الرٌاضً لهذا الجزء من الدارة‬u3= u2 ‫هو التوتر‬
u 3 R3
i3   (  i3 ) dt
L3 L3
d
i2  C 2 (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‬ثانٌا ً ‪ :‬تمثٌل ومحاكاة الدارات الكهربائٌة‬

‫‪ ‬المراجع العربٌة و األجنبٌة‬

You might also like