By : ‘’ eng : Adnan Shahin ’’
You can Program Easily in Matlab Now !
بسم هللا الرحمن الرحيم المقدمة نظراً لألهمٌة الكبٌرة للبٌئة البرمجٌة ماتالب واستخدامها فً مجال حل التطبٌقات الرٌاضٌة ونمذجة ومحاكاة التطبٌقات الكهربائٌة فً قسم الطاقة الكهربائٌة أضع بٌن أٌدٌكم هذا الكتاب والذي ٌحتوي على المواضٌع األساسٌة فً البرمجة باستخدام البٌئة البرمجٌة الماتالب وٌشمل هذا الكتاب المواضٌع التالٌة : .1المصفوفات .2البرمجة غٌر المرئٌة .3الرسم ثنائً البعد 2D .4التوابع الرٌاضٌة الخاصة فً الماتالب .5برامج هندسٌة .6تنفٌذ وبرمجة واجهات المستخدم الرسومٌة باستخدام الماتالب وقد عملت جاهدأ على وضع العدد الكافً من األمثلة العملٌة لفهم كافة المواضٌع بإذن هللا . وفً حال وجود أي استفسار عن أي موضوع ٌتعلق بالماتالب ٌمكنكم مراسلتً E-mail :
[email protected] Facebook Account : Adnan Shahin Facebook Page : Matlab For Electrical Engineering My Blogger : Matlab For Electrical Engineering Mobile Number : +963 95 6738266 وهللا الموفق عدنان شاهٌن
التعامل مع المصفوفات أوالً :مقدمة ... تتكون المصفوفة من عدد من الصفوف وعدد من األعمدة حٌث ٌرمز بمتحول ما لكل منهما وتستخدم المصفوفات فً كثٌر من التطبٌقات الهندسٌة لحل المشاكل المعقدة ,وعناصر المصفوفة ممكن أن تكون قٌم حقٌقٌة أو عقدٌة ,وٌرمز عادة للمصفوفة )Matricname(m,n حٌث :
mعدد األسطر
nعدد األعمدة
ثانٌا ً :العملٌات األساسٌة على المصفوفات ... إنشاء مصفوفة ( )4,4باسم A]A = [3 4 4 3 ; 4 5 6 7 ; 5 6 7 4 ; 4 5 6 7 إدخال السطر السابق فً سطر األوامر فً ماتالب ٌشكل لدي مصفوفة مربعة بالقٌاس سابق الذكر حٌث نالحظ أنه عندما نرٌد االنتقال من سطر لسطر إلدخال عناصر مصفوفة نضع فاصلة منقوطة وذلك كما هو موضح ,وٌكون شكل المصفوفة ...
استدعاء عنصر من مصفوفة عن طرٌق رقم السطر ورقم العمود.مثالً الستدعاء العنصر الثانً من السطر الثالث نكتب : )A(3,2 ans = 6
1
استدعاء عنصر من المصفوفة عن طرٌق ترتٌبه.)A(8 ans = 5 )A(1 ans = 7 حٌث ٌتم العد حسب الترتٌب من أعلى العمود إلى اسفله وبالترتٌب. استدعاء سطر من مصفوفة.ans = 5 6 7 4
)A(3,:
استدعاء عمود من مصفوفة.)A(:,4
استدعاء السطر الثانً الذي ٌحوي العناصر الثالثة األخٌرة منه (دون العنصر األول).)A(2,2:4 ans = 5 6 7 استدعاء العنصر األول واألخٌر من السطر الثالث.)A(3,1:3:4 ans = 5 4 إضافة عمود فً نهاٌة المصفوفة.]A(:,5) = [3 5 0 0
فتصبح المصفوفة كما هو مبٌن
إضافة عمود جدٌد للمصفوفة الجدٌدة بحٌث ٌكون العنصر األخٌر من السطر الثالث مساوي9 A(3,6) = 9فتصبح المصفوفة كما هو مبٌن
2
حذف العمود الثانً من المصفوفة الجدٌدة.] [ = ) A(:,2فتصبح المصفوفة كما هو مبٌن
استبدال عنصر من المصفوفة بعنصر جدٌد. A(3,4) = 11فتصبح المصفوفة كما هو مبٌن
استدعاء آخر سطر من المصفوفة.)A(end,:
مالحظة : – 1تشكٌل مصفوفة واحدٌة
)ones(m,n
– 2تشكٌل مصفوفة صفرٌة
)zeros(m,n
- 3تشكٌل مصفوفة محاٌدة
)eye(m,n
3
ثالثا ً :العملٌات الرٌاضٌة على المصفوفات. بفرض لدٌنا المصفوفات A,Bونرٌد إجراء عملٌات الجمع والطرح والضرب والقسمة ...إلخ علٌها فتكون كالتالً : -1 -2 -3 -4 -5 -6 -7
A+B الجمع A-B الطرح الضرب A.*B A./B القسمة الرفع لقوى A.^B الضرب برقم 3 جمع مصفوفة لرقم 2 المصفوفة)
3*A ( A+2حٌث ٌتم جمع العدد 2لجمٌع عناصر
رابعا ً :عملٌات أخرى على المصفوفات. لتكن المصفوفة : D إٌجاد منقول مصفوفة (استبدال األعمدة مع األسطر)...فتكون المصفوفة الناتجة T ’T = D
-إٌجاد مقلوب مصفوفة ...
) S = inv(Dفتكون المصفوفة الناتجة S
-إٌجاد رتبة مصفوفة ...
)V = rank(D ans = 2
4
خامسا ً :عملٌات متقدمة على المصفوفات. استعمال مؤشر المصفوفة مع إحداثٌات من عناصر المصفوفة ... لتكن المصفوفة C
استدعاء مصفوفة جزبٌة من المصفوفة ( Cكما هو مبٌن بالشكل)...)c(1:2,3:4
= ans
= ans
)c(3:-1:1,:
-استبدال ترتٌب أعمدة (أو أسطر) المصفوفة مع قٌم عناصرها ...
= ans
)]c(:,[3,4,3,4
= ans
)c([3,1,3,2],:
5
التعامل مع المصفوفة وتغٌٌر شكلها وتعٌٌن حجمها ... لتكن المصفوفة k ’)k(:= ans إعادة تشكٌل المصفوفة بحٌث عدد األسطر ( )mوعدد األعمدة (. )n)reshape (matrix name ,m,n مثال : )reshape(k,4,3
= ans
)reshape(k,2,6
= ans
تدوٌر مصفوفة ...)rot90(matrix name مثال : )rot90(k
= ans
تعٌٌن حجم مصفوفة ...)size (matrix name )length(matrix name مثال : ans = 3 4
)size(k
6
)length(k
ans = 4
أنواع من ضرب المصفوفات ... لتكن المصفوفتان aالسطرٌة و bالعمودٌة الجداء الداخلً أو Dotproducta*b ans = 14 حٌث تم ضرب العمود األول مع السطر األول والعمود الثانً مع السطر الثانً وهكذا ... الجداء الخارجً أو outproductb*a
= ans
حٌث تم ضرب عناصر كل سطر من bمع سطر ... a مالحظة : لجعل العملٌة عملٌة ترتٌبٌة أي معاملة كل عنصر بالعنصر المناظر له فقط ٌ ,جب وضع نقطة قبل رمز العملٌة المراد إجراؤها سواء كانت قسمة أو ضرب أو رفع لقوة ...
لتكن المصفوفتان :
=a
=b
الجداءa.*b
= ans القسمة= ans
a./b
7
الرفع لقوةa.^b
= ans
مالحظات : إنشاء مصفوفة متزاٌدة خطٌا ً معلوم عدد عناصرها ...)linspace(a,b,c حٌث :
aالقٌمة البدابٌة
cعدد عناصر المصفوفة
bالقٌمة النهابٌة
إنشاء مصفوفة متزاٌدة لوغارٌتمٌا ً معلوم عدد عناصرها ...)logspace(a,b,c حٌث :
aالقٌمة البدابٌة
bالقٌمة النهابٌة
إنشاء مصفوفة سحرٌة ...)magic(d
cعدد عناصر المصفوفة حٌث dأبعاد المصفوفة
مثال: =v
)v = magic(3
وللتحقق من هذه المصفوفة نتأكد من : – 1مجموع عناصر كل عمود : = ans
)sum(v
– 2مجموع عناصر كل سطر :
8
= ans
)sum(v,2
– 3مجموع عناصر القطر الربٌسً : = ans
)diag(v
هذه هً عناصر القطر للمصفوفة السابقة وإلٌجاد مجموعها ans = 15 :
)sum(ans
تحدثنا فً الدرس السابق عن طرٌقة استدعاء عنصر من مصفوفة عن طرٌق ترتٌبهحٌث أن ترتٌب عناصر المصفوفة ٌكون كالتالً :
9
البرمجة غٌر المرئٌة أوالً :مقدمة ... سنتعرض فً هذا الدرس لدراسة عبارات التحكم بمسار البرنامج فً الماتالب والتً تشبه لحد كبٌر عبارات التحكم فً لغات البرمجة األخرى ,وسندرس : -
االختبار الشرطً . if االختبار . switch حلقة . while حلقة . For عبارة اإلٌقاف . Break متابعة الحلقة . Continue العبارة . try
ثانٌا ً :الحلقات ... .1أمر التحكم (االختبار) الشرطً : Ifالشكل العام if logical expression statements elseif logical expression statements else statements end عبارة elseال تحتوي على شرط منطقً ولكن ٌجري تنفٌذ العبارات المرتبطة بعبارة elseإذا كانت نتٌجة الشرط المنطقً فً عبارة ( ifأو )elseifخطأ أو مساوي للصفر. عبارة elseifتحتوي على شرط منطقً ٌتم تنفٌذه إذا كان الشرط المنطقً عبارة ifخطأ أو تساوي الصفر وٌتم تنفٌذ جمٌع العبارات المرتبطة بها إذا كانت نتٌجة الشرط المنطقً فً عبارة elseif تساوي الواحد (ال تساوي الصفر).
10
.2االختبار : switchالشكل العام Switch expression case value1 statements case value2 statements otherwise statements end تنفذ عبارة switchمجموعة من العبارات عن قٌم معٌنة للمتحول المراد اختباره . تتألف العبارة من كلمة switchمتبوعة بالعالقة المراد اختبارها ,وتنفذ العالقة وتقارن النتٌجة مع القٌم التً تتبع عبارة caseوعند حدوث أول تطابق بٌن نتٌجة العالقة وبٌن القٌمة الموجودة على ٌمٌن عبارة ٌ caseتم تنفٌذ التً تطابقت القٌمة الموجودة على ٌمٌنها مع نتٌجة العالقة ,حٌث أن الماتالب ال ٌتابع المقارنة بعد حدوث اول تطابق. فً حال لم ٌحدث تطابق مع القٌم الموجودة على ٌمٌن عبارة caseونتٌجة العالقة المراد اختٌارها ٌتم تنفٌذ العبارات التً تلً otherwiseوعبارة otherwiseاختٌارٌة ,وٌجب إنهاء عبارة switchب .end
.3حلقة : whileالشكل العام while expression statements end تنفذ حلقة whileعبارة أو مجموعة من العبارات بشكل متكرر طالما أن قٌمة عبارة التحكم تساوي الواحد (أي عبارة التحكم أو الشرط محقق) و إذا كانت عبارة التحكم مصفوفة فٌجب أن تحقق جمٌع عناصر المصفوفة الشرط لٌستمر الحساب.
11
.4حلقة : Forالشكل العام for variable = expression statements end تقوم حلقة forبتكرار عبارات معٌنة لعدد محدد من المرات .
.5عبارة اإلٌقاف : break تقوم هذه العبارة بإٌقاف تنفٌذ حلقة Forأو حلقة whileعند وضعها ضمن الحلقة ...وتتوضح هذه العبارة أكثر باألمثلة.
.6عبارة المتابعة : Continue تقوم هذه العبارة بوقف التكرار الحالً للحلقة وٌبدأ فً التكرار التالً له بمعنى أن الحلقة تستمر بالعمل لكن عند تعرضها لهذه التعلٌمة ستقوم بتجاهل التعلٌمات التً تحتها وتعود لمتابعة الحلقة ... وتتوضح هذه العبارة اكثر باألمثلة.
.7العبارة : tryالشكل العام try statement, … , statement, catch statement, … , statement, end ٌتم بشكل طبٌعً تنفٌذ العبارات بٌن tryو catchولكن عند حدوث أي خطأ فً تنفٌذ أي عبارة من العبارات عند ذلك ٌتم االنتقال إلى تنفٌذ العبارات الواقعة بٌن catchو endوعند حصول خطأ أٌضا ً من أحد العبارات ٌوقف الماتالب تنفٌذ األوامر وٌضع عبارة الخطأ فً متحول اسمه .lasterr مالحظات : - 1العبارة returnتنهً تسلسل تنفٌذ األوامر فً اإلجراء وتحول القٌادة إلى البرنامج الربٌسً وبشكل عام عندما تنتهً أوامر اإلجراء فإن القٌادة بشكل آلً تنتقل إلى البرنامج الربٌسً ولكن ٌمكن وضع هذه التعلٌمة فً أي مكان من اإلجراء إلعادة القٌادة قسرٌا ً إلى البرنامج الربٌسً.
12
– 2إظهار رسالة الخطأ على الشاشة ٌتم بواسطة تابع الخطأ بالشكل : )’error(‘error_message حٌث عند استدعاء رسالة الخطأ من قبل البرنامج فإن البرنامج ٌظهر العبارة الموضحة بٌن إشارات التنصٌص. ٌ – 3مكن إدخال المعلومات إلى البرنامج أثناء تنفٌذ ملف mوذلك باستخدام التابع input بالشكل : )’n = input(‘Prompt_string حٌث ٌظهر على الشاشة سلسلة الحروف بٌن إشارتً التنصٌص. ٌ – 4مكن التوقف أثناء تنفٌذ البرنامج لمراجعة نتابج الحسابات أو لفحص المخططات ولتحقٌق ذلك نستعمل األوامر Pauseبدون مضمون هذا ٌسبب توقف البرنامج حتى ٌضغط المستخدم أي زر من لوحة المفاتٌح. ) Pause(nهذا ٌسبب توقف البرنامج لمدة nثانٌة . ثالثا ً :مالحظات ... عند كتابة أي برنامج ٌمكن أن تكون طرٌقة البرمجة بطرٌقتٌن وهما إما أن ٌكتب البرنامج بشكل مباشر وهذه الطرٌقة تسمى ( )scriptأو أن ننشا تابع ونضع ضمنه التعلٌمات البرمجٌة الالزمة لتنفٌذ البرنامج وهذه الطرٌقة ( )functionوهنا عدة فروق بٌن هاتٌن الطرٌقتٌن نذكر منها : -1 -2 -3 -4
ال ٌ functionبدأ بكلمة functionبٌنما الٌ scriptبدأ بالبرنامج مباشرة. الشكل االفتراضً للكتابة بعد كلمة functionهو أن تضع وسطاء الخرج ومن ثم اسم ال functionوبعدها وسطاء الدخل بٌنما ال scriptsال ٌحتاج إلى كل هذا. ٌمكنك التابع ( )functionعند تنفٌذه من تغٌٌر وسطاء الدخل بٌنما ال ٌكون هذا ممكن فً ال.scripts المتغٌرات التً تحسب فً داخل ال functionال تحفظ فً ال workspaceبٌنما فً ال scriptsتحفظ فً ال( workspaceأي فً لوحة الدخل والخرج الربٌسٌة لبرنامج الماتالب).
13
كما أننا عندما نرٌد البدء بكتابة البرنامج البد فً أن نقوم بفتح ملف من نوع M-fileمن أجل أن نكتب البرنامج فٌه بدالً من الكتابة فً ال workspaceلبرنامج الماتالب وهناك عدة طرق للوصول إلى محرر ال M-fileوهً إما من اعلى الشاشة نختار file new M-fileأو أن تكتب edit فً ال workspaceأو أن نضغط على الملف النصً الظاهر فً الصفحة الربٌسٌة للماتالب ,وعند اإلنتهاء من كتابة البرنامج فً هذا الملف بقوم بحفظه ومن ثم نقوم بتشغٌله من الزر المبٌن باللون األخضر اعلى الصفحة ومقاطع الفٌدٌو توضح ذلك أكثر.
14
رابعأ ً :أمثلة عملٌة ...
المثال األول clear n=5 m=6 for i=1:n for j=1:m ;i ;j c(i,j)=i^j end end
تم وضع clearفً بداٌة البرنامج لحذف جمٌع المتغٌرات الموجودة فً ال workspaceوفً هذا البرنامج تكمن وظٌفة وضع حلقتً forمتداخلتٌن فً تولٌد مصفوفة ثنابٌة البعد حٌث تكمن وظٌفة حلقة forاألولى فً تولٌد أسطر المصفوفة أما حلقة forالثانٌة فهً لتولٌد أعمدة المصفوفة ,حٌث هذا البرنامج ٌقوم بحساب قٌمة العنصر من المصفوفة بحٌث ٌساوي رقم السطر الموجود به مرفوعا ً باألس إلى رقم العمود الموجود به هذا العنصر ,فلو كان السطر رقمه 3والعمود رقمه 4 فنالحظ أن قٌمة العنصر ستكون 88 :والمصفوفة الناتجة تكون :
المثال الثانً clear ;n=-6 if n<0 )'disp('input must be positive elseif rem(n,2)==0 )'disp('input is even else )'disp('input is odd end
هذا البرنامج ٌسمح بإدخال رقم nله قٌمة موجبة حصراً لٌمٌز هذا العدد إن كان فردٌا ً أم زوجٌا ً وفً حال إدخال رقم سالب فإنه ٌعطً العبارة input must be positiveوٌكون خرج هذا البرنامج فً ال .workspace
15
اعتمدنا فً هذا البرنامج على التابع ) rem(n,2حٌث ٌقوم هذا التابع بتقسٌم العدد nعلى 2ففً حال وجود باقً للقسمة فال ٌتحقق شرط المساواة .
المثال الثالث clear x=8 'units = 'mm switch units }'case {'inch' 'in x = x*2.54 }'case {'feet' 'ft x=x*12/2.54 }'case {'millimeter' 'mm x=x*0.1 }'case {'centimeter' 'cm x=x otherwise )]'هذه الواحدة غٌر معروفة'[(disp x=nan end
ٌقوم هذا البرنامج بتحوٌل الرقم من الذي نكتبه من الواحدة المعطاة (المحددة فً السطر الثانً للبرنامج) إلى , cmحٌث نالحظ فً المثال الموضح بالبرنامج ٌكون خرج البرنامج .x=0.8
المثال الرابع for i=1:1000 ;)'>=='(elem = input )if isempty(elem break end x(i)=elem end x
إن التعلٌمة inputتقوم بطباعة مابٌن إشارتً التنصٌص وتوقف عمل البرنامج حتى ٌدخل المستخدم قٌمة ما وٌضغط على الزر , Enterحٌث هذا البرنامج ٌطلب إدخال قٌم شعاع قٌمة قٌمة حتى ٌدخل المستخدم قٌمة فارغة لتقوم breakبإنهاء البرنامج.
المثال الخامس )function vals1(a,b,c
16
delta = b^2-4*a*c if delta>0 )x1=(-b+sqrt(delta))/(2*a )x2=(-b-sqrt(delta))/(2*a elseif delta<0 )'disp('the roots are complex else ))x1_2=(-b/(2*a end
برنامج حل معادلة من الدرجة الثانٌة بشرط أن تكون حلول هذه المعادلة ال تحوي أي عدد عقدي , نالحظ أننا انشأنا تابع لحل المعادلة. إن اسم التابع vals1هو اختٌاري للمستخدم وٌمكن له تغٌٌره كما ٌشاء ولكن ٌجب مالحظة انه عند حفظ البرنامج ٌجب حفظه بنفس اسم التابع ومابٌن قوسٌن هً الدخل أي القٌم التً سٌقوم المستخدم بإدخالها ,وإلستدعاء هذا التابع نكتب فً الworkspace )vals1(4,6,2 فٌعطً Delta = 4 x1=-0.5 x2=-1 أو بطرٌقة ثانٌة نكتب : a=6 b=8 c=3 )vals1(a,b,c delta = -8 the roots are complex
المثال السادس )function max1(a,b,c if a>b ;max=a if c>max ;max=c end else ;max=b if c>max ;max=c end end max
17
ٌقوم هذا البرنامج بتحدٌد القٌمة األكبر من بٌن ثالثة أعداد ٌدخلها المستخدم ,حٌث ٌتم استدعاء التابع الخاص بهذا البرنامج كما ٌتم االستدعاء فً البرنامج السابق وبإحدى الطرٌقتٌن.
المثال السابع )function c=factor1(n v=1 for i=1:n ;v=v*i end v
ٌقوم هذا البرنامج بحساب قٌمة العاملً لرقم ما ٌحدده المستخدم ,حٌث انشأنا تابع كما فً األمثلة السابقة وطرٌقة االستدعاء أٌضا ً كما ذكرنا فً الجلسة السابقة.
المثال الثامن )function g=sort1(a ;)s=length(a for i=1:s-1 for j=i+1:s )if a(i)
ٌقوم هذا البرنامج بترتٌب عناصر مصفوفة (شعاعٌة) أي مكونة من سطر واحد ترتٌبا ً تنازلٌا ً ,حٌث ٌقارن هذاالتابع قٌمة كل عنصر من المصفوفة مع قٌمةالعنصر التالً وبنا ًء على هذا الترتٌب ٌقوم بترتٌب عناصر من المصفوفة من جدٌد.
المثال التاسع )function prod22(num )if length(num)~=1|~isnumeric(num )'disp('please enter one number else for i=1:10 )])disp([num2str(num) 'x' num2str(i) '=' num2str(num*i
18
end end
ٌقوم هذا البرنامج بإظهار جدول الضرب ألي رقم ٌحدده المستخدم ,حٌث فً السطر الثانً من البرنامج ٌقوم البرنامج بفحص القٌمة المدخلة وٌتأكد أن ال تكون ال محرف وال أكثر من رقم ,حٌث نقوم بتحوٌل األرقام إلى محارف بالتعلٌمة num2strأي number to stringوبعد القٌام بالعملٌة المطلوبة بعٌد هذه القٌمة الرقمٌة لمحارف بتعلٌمة معاكسة للسابقة .num2str
المثال العاشر )function calcul2(a,b,operate 'if operate=='+' | operate=='*' | operate=='-' | operarte=='/ )])eval([num2str(a) operate num2str(b else )'}disp('enter one of this operation{+,-,*,/ end
برنامج آلة حاسبة بسٌطة حٌث ٌقوم المستخدم بإدخال الرقم األول والثانً ومن ثم العملٌة المطلوبة فٌعطً البرنامج ناتج العملٌة بٌن الرقمٌن ,وفً حال ادخل المستخدم عملٌة غٌر معروفة ٌعطً البرنامج العبارة }'enter one of this operation{+,-,*,/ فً هذا البرنامج نالحظ أننا استخدمنا التابع evalوتكمن وظٌفة هذا التابع فً الماتالب فً تنفٌذ العبارات المحرفٌة التً لها معنى فً الماتالب ,فلو كتبنا فً السطر الثالث للبرنامج العبارة : )])z=([num2str(a) operate num2str(b بدالً من العبارة السابقة أي دون استخدام التابع evalنالحظ أن البرنامج سٌكون خرجه (" )a+bفً حال الجمع ومهما كانت قٌم aو "b
المثال الحادي عشر )function game4(c ;)n=randperm(c for i=1:inf )'f=input('enter the number please: )if 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والتً سنراها فً أمثلة الحقة. اللون أخضر مزرق ارجوانً أصفر أسود أزرق أحمر أخضر
الرمز "–" " " --
Cyan Magenta Yellow Black Blue Red Green
الرمز c m y k b r G
نموذج خط الرسم --------------------------
22
None "": "".-
بدون خط رسم .............................. -.-.-.-.-.-.-.-.-.-
الرمز + O * . > < ^
الداللة إشارة جمع دابرة نجمة نقطة مثلث رأسه للٌمٌن مثلث رأسه للٌسار مثلث رأسه لألعلى
وهناك أٌضا ً نماذج أخرى ٌمكن اإلطالع علٌها من خالل أمر المساعدة إذا دعت الحاجة لها. .2رسم منحنٌٌن على شكل واحد : مثال (: )1 ;x = 0:0.05*pi:2*pi )y = sin(x )z = cos(x )plot(x,y,x,z
وبذلك نستطٌع أن رسم عدد كبٌر من المنحنٌات على نفس الشكل.
.3تسمٌة الشكل والمحاور : لو أضفنا األسطر التالٌة على البرنامج السابق ٌصبح الرسم ... )'title('Function sin and cos )'xlabel('x
23
)'ylabel('y
مثال (: )2 )z = cos(x )plot(z
ٌأخذ التابع أول قٌمة من التابع yوٌأخذ xرقم العنصر أي كأنك كتبت plot(1:length(z),z) : أما لو كانت zعقدٌة فإنه ٌرسم القسم العقدي بالنسبة للقسم الحقٌقً.
.4تلوٌن األشكال :
24
الجدول الموضح فً األعلى ٌوضح رموز األلوان التً نرٌد الرسم فٌها.
.5إنشاء شبكة : إن األمر ٌ grid onعطٌك شبكة حسب تقسٌمات المحاور وإلزالة الشبكة مرة أخرى نكتب . grid off
.6الكتابة على الشكل : نستطٌع كتابة أي نص على الرسم وذلك بتحدٌد إحداثٌاته فقط :
)’text(5,0.1,’sin
.7أبعاد المحاور : إن البرنامج بشكل تلقابً ٌحدد لك أبعاد المحاور ولكن لو أردت تحدٌد هذه الحدود فإلٌك التعلٌمة )] axis([-15 15 -17 17إن أول رقمٌن ٌحددان مجال المحور xوثانً رقمٌن ٌحددان التالٌة : مجال المحور .y
.8تسمٌة كل منحنً حسب لونه : إذا كان لدٌنا شكل ٌحوي عدة توابع متداخلة وأردنا تعرٌف كل تابع حسب لونه أو غٌره فٌمكن استعمال التعلٌمة التالٌة : )’legend(‘sin(x)’,’cos(x)’,’sin(x)./x هذا األمر سٌأخذ لون الشكل األول وٌضع بجانبه أول عبارة تضعها فً أمر legendوالثانً مع الثانً وهكذا ...
25
ثالثا ً :أمثلة عامة ... المثال األول :برنامج لرسم تغٌرات كثٌر الحدود + 1
+
+
= ) f(tمع تغٌرات .t ;t=-5:0.5:5 ;ft=t.^3+t.^2+t+1 ;)'plot(t,ft,'-*k grid on ;)'title('ft=t.^3+t.^2+t+1 ;)'xlabel('time sec ;)')ylabel('f(t
المثال الثانً :برنامج لرسم تغٌرات التابع البسٌط ) y = A sin(wtمع تغٌرات الزمن. ;t=0:0.001:0.1 ;A=220 ;f=50 ;w=2*pi*f ;)y=A*sin(w*t )'plot(t,y,'k- ;)'title('Voltage curve
26
;)']xlabel('time [sec ;)']ylabel('Amplitude [V ;grid on pause )'plot(y,t,'k- ;)'title('Voltage curve ;)']xlabel('Amplitude [V ;)']ylabel('time [sec ;grid on
سبق وشرحنا عم التابع pauseفً درس سابق ,حٌث هذا التابع ٌقوم بإٌقاف البرنامج حتى ٌضغط المستخدم أي زر لٌتمم عمل البرنامج حتى نهاٌته ,فً مثالنا هذا ٌقوم البرنامج بعملٌة الرسم وفق العالقة )‘ plot(t,y,’k-وعندما ٌضغط المستخدم أي زر من لوحة المفاتٌح فإن البرنامج سوف ٌحذف الرسم لٌرسم وفقا ً للعالقة )‘.plot(y,t,’k-
27
سأكتفً بهذا القدر بالنسبة للرسم ثنابً البعد فً الماتالب وسأدع األمور األخرى لك كً تتعلمها لوحدك وذلك باالستعانة ببٌبة ال helpالمتوفرة فً الماتالب والتً تعد طرٌقة ممتازة للبحث تعلم
28
الماتالب ,علما ً ان برنامج الماتالب ٌوفر إمكانٌة الرسم الثنابً البعد بالصٌغة القطبٌة وبالصٌغة العقدٌة وٌوفر إمكانٌة الرسم على شكل أعمدة من أجل التطبٌقات اإلحصابٌة أو من أجل إظهار قٌم التوافقٌات فً التوترات والتٌارات فً التطبٌقات الهندسٌة ,كما ٌمكننا البرنامج من الرسم على لوحة بأبعاد الرسم اللوغارٌتمٌة.
29
التوابع الرٌاضٌة الخاصة فً الماتالب أوالً :مقدمة ... ٌتم التعامل مع كثٌرات الحدود فً الماتالب من خالل توابع خاصة أعدت لحل كثٌرات الحدود ضمن هذا البرنامج ,حٌث ٌتم تحوٌل كثٌر الحدود إلى شعاع سطري ,وتمثل األعداد ضمن هذا النسق معامالت كثٌر الحدود ,وترتب ضمن النسق بشكل تنازلً ٌوافق قوى المتحول فً كثٌر الحدود بدءاً من القوة ( )nوحتى القوة ( )0بما فً ذلك المعامالت المعدومة للمتحول ,حٌث ( )nأعلى رتبة للمتحول فً كثٌر الحدود وذلك للتوافق ما األسلوب الذي ٌتعامل معه برنامج الماتالب فً حل كثٌرات الحدود. مثال بسٌط : f(t) = 7 +6 +3 + +5 ٌتم تمثٌل كثٌر الحدود هذا بالمصفوفة :
ثانٌا ً :العملٌات الحسابٌة على كثٌر الحدود ... إٌجاد جذور كثٌر حدود : إن التابع rootsهو التابع الخاص فً الماتالب الذي ٌمكن عن طرٌقه إٌجاد جذور كثٌر حدود , حٌث ٌعطً هذا التابع جذور كثٌر الحدود على شكل شعاع عمود وعناصر هذا الشعاع هً جذور كثٌر الحدود. مثال (: )1 ;%f(t) = 7*t^4+6*t^3+3*t^2+t^1+5 ;]A = [7 6 3 1 5 )A_roots = roots(A
30
مثال (: )2 %f(t) = 7t^3+5t^2-3t^1+10 ;]A = [7 5 -3 10 )A_roots = roots(A
إٌجاد كثٌر حدود انطالقا ً من جذوره : باستخدام التابع الخاص ٌ polyمكن إٌجاد كثٌر حدود إنطالقا ً من جذوره ,أي أن وظٌفة هذا التابع معاكسة تماما ً للتابع سابق الذكر. مثال (: )1 ;]A = [1 3 4 5 6 )roots(A
)poly(ans
مثال (: )2 ;]A = [3 5 6 7 8 9 )roots(A
31
)poly(ans
نالحظ من المثال الثانً أن هناك كثٌر حدود غٌر كثٌر الحدود الذي ادخلناه أوالً له نفس الجذور , وبالتالً لٌس بالضرورة الحصول على التابع المدخل مسبقا ً عند استدعاء (إعادة تولٌد) كثٌر الحدود الجدٌد من التابع ( , )polyكمال هو جدٌر بالذكر أنه هذا تابع فٌه نسبة خطأ ال تتجاوز ( )1/1000000قد تظهر فً بعض الحاالت.
حساب قٌمة كثٌر حدود عند قٌمة معٌنة : تتم هذه العملٌة فً الماتالب باستخدام التابع الخاص ) polyval(p,xحٌث ٌعبر pالنسق (المصفوفة) الممثل لكثٌر الحدود ,والرمز ٌ xعبر عن قٌمة المتحول المراد حساب كثٌر الحدود عنده. مثال (: )1 +1
+
= )G(x
;]p = [1 1 1 ;x = 3 )gx = polyval(p,x
gx= 13 كما ٌمكن بطرٌقة ثانٌة إٌجاد قٌمة كثٌر الحدود ألجل قٌمة معٌنة باستخدام التابع الخاص subs وباالستعانة بالتعلٌمة symsحٌث ٌقوم هذا األخٌر بتحوٌل قٌمة المتحول xإلى رمز ٌمكن التعامل معه من قبل البرنامج والتعرف علٌه ,واألمر subsالذي ٌقوم بحساب القٌمة لكثٌر الحدود عند قٌمة المتحول المطلوبة (أي أن التعلٌمة symsوظٌفتها تعرٌف المتغٌر )x مثال (: )2 syms x
32
;gx = x^2 + x + 1 )subs(gx,3
ans = 13 مثال (: )3 syms x y ;gx = y*x^2 + x*y + 1 )subs(gx,x,3
ans = 12*y + 1 )subs(gx,y,3
ans = 3*x^2 + 3*x + 1 مثال (: )4 المطلوب حساب قٌم كثٌر الحدود من أجل عناصر المصفوفة x ]p=[1 1 1 ]x = [2 4 6 )gx = polyval(p,x
اشتقاق كثٌرات الحدود : ٌمكن إٌجاد مشتق كثٌر حدود باستخدام التابع polyderوتكون النتٌجة عبارة عن كثٌر حدود ٌمثل مشتق كثٌر الحدود األصل. مثال (: )1 ;]gx = [2 5 -6 -5 )a = polyder(gx
=a لمقارنة التابع مع مشتقه بٌانٌا ً ٌ ,مكن رسمهما معا ً على نفس المحاور (محاور االحداثٌات) بالتعلٌمات التالٌة : ;x=-10:0.5:10 ;]gx=[2 5 -6 -5 )a = polyder(gx )'plot(x,polyval(gx,x),'-*r',x,polyval(a,x),'-og
33
واألمرsyms كما ٌمكن استخدام مشتق كثٌر الحدود بطرٌقة أخرى وذلك باستخدام األمر ... diff(function name) : )2( مثال syms x gx = 2*x^3 + 5*x^2 - 6*x - 5; diff(gx)
ans = 6*x^2 + 10*x -6
: )3( مثال syms x gx = 2*sin(2*x)*exp(x) diff(gx)
ans = 4*cos(2*x)*exp(x) + 2*sin(2*x)*exp(x) : )4( مثال
34
syms x y )gx = 2*sin(x*y )diff(gx,x
ans = 2*cos(x*y)*y فً هذا المثال نالحظ أن التابع ٌ diffمكنه أٌضا ً حساب المشتق بالنسبة ألحد المتحوالت (فً حال وجود أكثر من متحول فً التابع ,فً مثالنا هذا قمنا بإٌجاد مشتق التابع بالنسبة للمتحول (.)x كما ٌمكن أٌضا ً من خالل هذا التابع إٌجاد المشتقات من المرتبة الثانٌة والثالثة ومافوق وذلك كما ٌلً )diff(gx,x,2 )diff(gx,x,3
أي إٌجاد المشتق (الثانً أو الثالث) بالنسبة للمتحول ....x تكامل كثٌرات الحدود : من المعروف أن االشتقاق هو عملٌة معاكسة لالشتقاق ,وٌمكننا التابع polyintالموجود فً المكتبة الرٌاضٌة فً الماتالب من إٌجاد تكامل تابع من خالل إدخال معامالت كثٌر الحدود بشكل نسق(مصفوفة) كما سبق فً األمثلة السابقة . مثال : المطوب إٌجاد تكامل كثٌر الحدود ( )6x2+10x-6من أجل ثابت تكامل k = -5 ;]p =[6 10 -6 ;k = -5 )gx = polyint(p,k = gx
كما ٌمكن إٌجاد تكامل كثٌر الحدود باستخدام symsوالتابع intوذلك بشكل ٌماثل التابع diff إلٌجاد المشتق .... )int(gx إٌجاد معادلة كثٌر الحدود المالبم : إذا كان لدٌك مجموعة نقاط من منحنً ال تعرف معادلته وترٌد ان تشكل معادلة لهذا المنحنً , فٌمكن االستعانة بالتابع polyfitللقٌام بهذه العملٌة ,حٌث أنه ٌعطٌك معادلة كثٌر الحدود المالبم للمنحنً بحٌث أنك تختار درجة كثٌر الحدود الذي ترٌد الحصول علٌه.
35
مثال : ;]x=[0:0.2:1.2 ;]y=[1 2 4 7 8 5 2 )u=polyfit(x,y,3
=u )t=polyval(u,x )'*plot(x,y,'-or',x,t,'-
العملٌات الرٌاضٌة على كثٌرات الحدود : ٌمكن جمع وطرح كثٌرات الحدود من خالل التعامل مع المصفوفات الممثلة لها مع مالحظة ان تكون كال المصفوفتٌن من نفس الدرجة والمثال التالً ٌوضح ذلك .... مثال : 2
3
4
A = 2x + x + 3x + x + 1 B = 4x2 - x -1 الحل : ;]A = [2 1 3 1 1 ;]B = [4 -1 -1 ]C = A + [0,0,B
36
]D = A - [0,0,B
=C =D اما عملٌة الجداء فٌمكن القٌام بها باالستعانة بالتابع convمختصر كلمة (, (Convolution حٌث باستخدام هذا التابع ٌتم الحصول على جداء كثٌرات الحدود بشرط أن تعرف كثٌرات الحدود بأنساق موافقة ومعبرة عن معامالتها. )%conv(B,A
)conv(A,B
= ans الجدول التالً ٌبٌن أهم التوابع المستخدمة وحسب الترتٌب األبجدي ضزب كثيز الحدود conv قسمت كثيز الحدود deconv اكتشاف معادلت كثيز حدود جذورها معلومت poly مشتق كثيز حدود polyder إيجاد كثيز الحدود المالئم polyfit تكامل كثيز الحدود polyint حساب قيمت كثيز الحدود عند قيمت معينت polyval إيجاد جذور كثيز الحدود roots مالحظة هامة : تمكننا المصفوفات فً الماتالب من حل جملة nمعادلة ب nمتغٌر بسهولة تامة وذلك كما ٌوضح المثال التالً .... 5x1 – 2x2 + x3 = 1 x2 + x3 = 0 x1 + 6x2 – 3x3 = 4 الحل : clear ;]A = [5 -2 1;0 1 1; 1 6 -1 ;]B = [1;0;4 X=inv(A)*B
= X
37
لنأخذ مثال آخر ...
الحل :
x1 – 5x2 – 8x3 + x4 = 3 3x1 + x2 – 3x3 – 5x4 = 1 x1 – 7x3 + 2x4 = -5 11x2 + 20x3 – 9x4 = 2 clear ;]A = [1 -5 -8 1;3 1 -3 -5;1 0 -7 2;0 11 20 -9 ;]B = [3;1;-5;2 )det(A X=inv(A)*B
بمالحظة أن محدد المصفوفة ٌ Aساوي الصفر فهذا ٌعنً أننا ال ٌمكن أن نجد مقلوب المصفوفة وبالتالً تكون جملة المعادالت السابقة غٌر متوافقة ولٌس لها حل.
38
برامج هندسٌة
: البرنامج األول برنامج ٌبٌن فرق الطور بٌن اإلشارات الجٌبٌة t=linspace(-1,1,101);ً مصفوفة متزاٌدة خطٌا x=2*cos(2*pi*t); y=2*cos(2*pi*(t-0.125)); z=2*sin(2*pi*t); plot(t,x,t,y,t,z) axis([-1,1,-3,3]) title('Sinusoidal Signals') ylabel('Amplitude') xlabel('Time (s)') text(-0.13,1.75,'x') تسمٌة كل شكل text(-0.07,1.25,'y') text(0.01,0.8,'z') grid on تفعٌل الشبكة
39
البرنامج الثانً : برنامج التمثٌل الطوري لإلشارة الجٌبٌة أي رسم القسم الحقٌقً بالنسبة للعقدي ورسم كل منهما بالنسبة للزمن ... من المعلوم أن اإلشارة الجٌبٌة لها تمثٌل عقدي ٌبٌن بالشكل التالً = cos(𝜃) + j.sin(𝜃 : ;)t=(-2e-03:0.02e-03:2e-03 التابع األسً فً الماتالبx=exp(j*2000*pi*t); exp القسم الحقٌقً لإلشارة ;)y=real(x القسم الوهمً لإلشارة (التخٌلً) ;)z=imag(x تقسٌم الرسم )subplot(2,1,1 )'plot(x,'-.k axis square جعل المحاور مربعة الشكل )')title('exp(jwt )'xlabel('Real )'ylabel('Imaginary )subplot(2,1,2 )'plot(t,y,'-',t,z,': )'title('Re[exp(jwt)] and Im[exp(jwt)] vs t w=1000*2*pi )')xlabel('Time (s grid on )legend('Re[exp(j\omegat)]','Im[exp(j\omegat)]',-1
40
: البرنامج الثالث ... برنامج دمج نغمتٌن t=linspace(-1e-2,1e-2,1001); x=cos(2*pi*1500*t) + cos(2*pi*1300*t);غٌر تردد,نفس المطال m=2*cos(2*pi*100*t); )اإلشارة المرجعٌة (إشارة الغالف plot(t,m,'b:',t,-m,'b:',t,x,'k') axis([-0.01 0.01 -2.4 2.4]) title('Beating between tones') xlabel('Time (s)') ylabel('Amplitude')
: البرنامج الرابع ... برنامج ٌمثل دخول الضجٌج على اإلشارة الجٌبٌة t=linspace(0,10,512) s=sin(2*pi/5*t); اإلشارة األصلٌة n=0.1*randn(size(t)); إشارة الضجٌج x = s + n; اإلشارة المشوهة disp('Signal to Noise Ratio(SNR), dB') SNR = 20*log10(std(s)/std(n)) نسبة اإلشارة إلى الضجٌج
41
)'plot(t,x,'.',t,s,'r )')xlabel('Time (s )'ylabel('Signal Amplitude )'title('Noisy signal
استخدمنا فً هذا البرنامج التابع stdوتكمن وظٌفة هذا التابع فً حساب االنحراف المعٌاري.
البرنامج الخامس : برنامج لرسم اإلشارة المقومة )t=linspace(0,10,512 ;)x=sin(t ;)x1=x.*(x>0 اإلشارة المقومة األولى ;)x2=abs(x اإلشارة المقومة الثانٌة )subplot(3,1,1 تجزبة الرسم )plot(t,x )')xlabel('Time (s )'ylabel('Amplitude )'title('continuous signal )subplot(3,1,2
42
plot(t,x1) axis([0 10 -1.1 1.1]) title('Discontinuous signal') xlabel('Time (s)') ylabel('Amplitude') subplot(3,1,3) plot(t,x2) axis([0 10 -1.1 1.1]) title('DC signal') xlabel('Time (s)') ylabel('Amplitude')
43
البرنامج السادس : برنامج لحساب المقاومة المكافبة لدارة مؤلفة من nممانعة من الشكل( )R jXبحٌث ٌحدد المستخدم عدد الممانعات الكلً فً الدارة وقٌمة كل ممانعة بقسمٌها الحقٌقً والوهمً ,كما ٌحدد المستخدم طرٌقة توصٌل الممانعات بشكل تسلسلً أو تفرعً وبالتالً ٌكون المستخدم قد حدد شكل الدارة بالكامل... ٌجب فً هذا البرنامج مالحظة أن الممانعة رقم nال ٌهمنً طرٌقة توصٌلها وماٌهمنً هو طرٌقة توصٌل الممانعة ( )n-1معها ولذلك سنالحظ أن البرنامج لن ٌسأل عن طرٌقة توصٌل الممانعة n وإنما سٌبدأ السؤال بالممانعة ()n-1 فرضا ً ;n = 8 مصفوفة سطرٌة واحدٌة ;)P = ones(1,n for i=n:-1:1 إدخال قٌم الممانعات بالترتٌب ;)]'P(1,i) = input (['Z' num2str(i) ': end ;)Q = ones(1,n-1 for j=1:n if j==1 ;)]' connect = input([' Z' num2str(n-j) ' series or Parallel : switch connect تحدٌد نوع توصٌل الممانعات }'case {'series' 's ;)Q(1,n-1) = P(1,n) + P(1,n-j }'case {'Parallel' 'P ;))Q(1,n-1) = (P(1,n)*P(1,n-j))/(P(1,n)+P(1,n-j end else if n==j ;break إٌقاف البرنامج عندما تصل الحلقة لقٌمة مساوٌة لعدد الممانعات فً الدارة else ;)]' connect = input([' Z' num2str(n-j) ' series or Parallel : switch connect }'case {'series' 's ;)Q(1,n-j) = Q(1,n-j+1) + P(1,n-j }'case {'Parallel' 'P ;))Q(1,n-j) = Q(1,n-j+1)*P(1,n-j)/(Q(1,n-j+1)+P(1,n-j end end end end هذا العنصر من المصفوفة ٌمثل الممانعة الكلٌة المكافبة للدارة;)Zeq = Q(1,1
تنفٌذ البرنامج :
44
: البرنامج السابع w=0:1:2000; z=(10+(10.^4-j.*(10.^6./(w)))./(10+j.*(0.1.*w-10.^5./w))); Real=real(z); plot(w,Real); xlabel('radian frequency w'); ylabel('Real Part of Z'); grid on pause(5) imagine=imag(z); plot(w,imagine); grid on xlabel('radian frequency w'); ylabel('Imaginary Part of Z');
45
: البرنامج الثامن . مع الزمنV(t)=Asin(wt+alpha)+k برنامج لرسم تغٌرات إشارة التوتر المتناوب f=50 Vm=110; alpha=pi/6; k=0.25*Vm; T=1/f; step=T/20; t1=0 t2=3*T; t=t1:step:t2; V=Vm*sin(2*pi*f*t+alpha)+k; fig=figure; ax=axes; set(ax,'xlim',[t1 t2],'ylim',[-200 200]); title('V=Vm*sin(2*pi*f*t+alpha)+k'); xlabel('Time Axis (second)'); ylabel('Voltage Axis (Volt)'); hold on;
46
;grid on ;)]ta=line([t1 t2],[0 0 ;)set(ta,'color','r','linewidth',2 ;)]Vo=line([t1 t2],[k k ;)'set(Vo,'color','b','linestyle','-. ;)'*plot(t,V,'r-
الجدول التالً ٌبٌن أهم األوامر والتوابع فً الماتالب القٌمة المطلقة أو طوٌلة العدد العقدي زاوٌة الطور الجواب عند حدم إسناد التعبٌر Arc tg تدرٌج المحور ٌدوٌا ً رسم مخطط بود مسح فضاء العمل مرافق العدد العقدي تجٌب الزاوٌة التجٌب القطعً إٌجاد معٌن مصفوفة إٌجاد قطر مصفوفة إنهاء البرنامج التابع األسً رفع مصفوفة لقوة المصفوفة الحٌادٌة إعطاء 15مرتبة بعد الفاصلة العشرٌة
Abs Angle Ans Atan Axis Bode Clc Conj Cos Cosh Det Diag exit exp expm eye Format long 47
إعطاء 15مرتبة إضافٌة للقوة إعطاء 5مراتب إعطاء 5مراتب إضافٌة للقوة التحول إلى المستوي الالبالسً التحول إلى المستوي z رسم خطوط الشبكة تثبٌت المخطط المرسوم على الشاشة الجزء الحقٌقً لعدد عقدي الجزء التخٌلً لعدد عقدي عدد ال نهابً مقلوب مصفوفة طول شعاع فضاء شعاعً خطً اللوغارٌتم الطبٌعً (النبري) الرسم على محورٌن لوغارٌتمٌٌن أخذ لوغارٌتم عناصر مصفوفة فضاء شعاعً لوغارٌتمً اللوغارٌتم العشري القٌمة العظمى القٌمة المتوسطة القٌمة المتوسطة التربٌعٌة القٌمة الصغرى لٌس رقم (ٌعامل لمحرف) رسم مخطط ناٌكوٌست Pi = 3.14 الرسم فً المستوي الدٌكارتً الرسم فً المستوي القطبً حاصل ضرب العناصر تولٌد أعداد عشوابٌة أو مصفوفة حساب رتبة مصفوفة باقً قسمة توسٌع الجزء العشري رسم الجذور الصفرٌة رسم نصف لوغارٌتمً \ المحور xهو اللوغارٌتمً
Format long e Format short Format short e freqs freqz grid hold Real imag inf inv length linspace log Loglog Log m Logspace Log 10 Max Mean Medium Min Nan Nyquist Pi Plot Polar Prod Rand Rank Rem Residue Rlocus Semilogx
48
رسم نصف لوغارٌتمً \ المحور yهو اللوغارٌتمً إسناد عدد مصفوفة الجذور التربٌعٌة االنحراف المعٌاري رسم منحنً االستجابة الواحدٌة إدراج المتحوالت الموجودة فً الذاكرة
Semilogy Sign Sqrtm Std Step Who
الجدول التالً ٌبٌن أهم العملٌات والعالقات فً الماتالب + * ^ ꞌ < =< > == =~ & ! ~
الجمع الطرح الضرب الرفع لقوة منقول مصفوفة أصغر من أصغر أو ٌساوي أكبر من ٌساوي الٌساوي AND OR NOT
الجدول التالً ٌبٌن أهم الرموز الخاصة فً الماتالب ][ )( ꞌ ; : %
ٌستخدم لتشكٌل المصفوفات التعبٌر الرٌاضً عن األشعة الفصل بٌن التعلٌقات وبٌن مناقشة الوظابف سطروإنهاء السطر ووقف الكتابة ومنع األمر المنفذ قبلها من الظهور إقرار امتداد شعاع إشارة تدل على أن ما بعدها تعلٌق ٌهمله البرنامج
49
التحكم بالمنفذ التفرعً Controling with Parallel Port أوالً :مقدمة ... ٌعد المنفذ التفرعً هو األكثر شٌوعا ً لسهولة استخدامه والتحكم به فً المشارٌع الصغٌرة التً قد ُتنفذ فً المنازل ,حٌث ٌسمح لنا هذا المنفذ بإدخال بٌانات بحزمة بعرض 9بت أو بإخراج بحزمة بعرض 12بت فً أي لحظة ,كما ٌحوي هذا المنفذ على أربع خطوط تحكم وخمس خطوط حالة و ثمان خطوط لتبادل المعطٌات ,وفً أغلب الحواسٌب نشاهد هذا المنفذ فً لوحة المنافذ الخلفٌة والنوع األكثر انتشاراً هو D-typeالذي ٌحوي .(male or Female( 25pin وقد ٌوظف هذا المنفذ فً كثٌر من األمور مثل التحكم بدارات إلكترونٌة أو التحكم باألنواع المختلفة للمحركات و النظم غٌر المعقدة ,كما ٌستخدم فً التحكم بمبرمجات PIC/Atmelوفً األتمتة.
ثانٌا ً :المنفذ التفرعً ... تعتبر بوابة الطابعة بوابة للخرج فقط ولكن لحسن الحظ باإلضافة إلى البتات الثمانٌة المتوفرة كمخارج رقمٌة فإنها تمتلك العدٌد من خطوط المصافحة و التً ال ٌقل عددها عن تسعة خطوط خمسة مداخل وأربعة مخارج و الشكل الجدول ٌوضح توزع الخطوط فً موصل الطابعة المؤلف من 25خط من النوع .D Pin No (D-Type )25
Hardware Direction Register Inverted In/out
1
In/Out
Control
2
Out
Data
3
Out
Data
4
Out
Data
5
Out
Data
6
Out
Data
7
Out
Data
8
Out
Data
9
Out
Data
Yes
50
Yes
Yes
Yes
D : Data (in,out)
-
Status
In
10
Status
In
11
Status
In
12
Status
In
13
Control
In/Out
14
Status
In
15
Control
In/Out
16
Control
In/Out
17
Gnd
18 – 25
C : Control
-
S : Status
-
Gnd : Ground
.وبهذه الطرٌقة ٌمكننا التمٌٌز بٌن أرجل المعطٌات و أرجل التحكم و األرجل المؤرضة
51
ثالثا ً :التحكم بالمنفذ التفرعً بواسطة الماتالب ... ٌحتاج الماتالب لتعرٌف المنفذ الذي ستتعامل معه التعلٌمة التالٌة :)>> dio=digitalio(ˈparallelˈ,1 إن التعلٌمة digitalioتعرف المنفذ الرقمً فنكتب اسم المنفذ وهو هنا المنفذ التفرعً ثم نكتب رقمه أي LPT1أو LPT2وهنا تم تعرٌف .LPT1 بعد تعرٌف المنفذ علٌنا تحدٌد األرجل التً نحتاجها وتعرٌفها هل هً دخل أم خرج وٌمكننا القٌامبذلك من خالل التعلٌمة التالٌة : )ˈ>> addline(dio,[0:7],ˈout حٌث أن هذه التعلٌمة قامت بجعل األرجل من 2إلى 9كأرجل خرج وهً ترقم فً الماتالب من 0 إلى .7 فً الخطوة األخٌرة قمنا بتحدٌد أرجل الخرج واآلن ولو أردنا أن نخرج قٌمة معٌنة ()0 or 1من هذه األرجل فما علٌنا إال ان نستعمل التعلٌمة التالٌة : )]>> putvalue(dio,[1 1 1 1 0 0 0 0 بهذه الطرٌقة نكون قد أخرجنا القٌمة التً نرٌد من المنفذ التفرعً .إذا أردنا اآلن أن نقرأ معطٌات من جهاز ما فٌمكننا ذلك بالتعلٌمة التالٌة وذلك بعد تحدٌد األرجل التً نرٌد القراءة منها : )>> getvalue(dio برنامج اإلخراج : إن كتابة ثالث تعلٌمات عند كل إخراج وإدخال أمر ممل ولذلك ٌجب تجهٌز برنامج لإلخراج وآخر لإلدخال وسنكتب برنامج كامل إلخراج المعطٌات فً : m-file )function c=out(a,n ;)dio=digitalio('parallel',1 ;)'addline(dio,a,'out ;)putvalue(dio,n : a oأرقام األرجل التً ترٌد التخرٌج علٌها وتدخل aكمصفوفة تحوي أرقام األرجل. : n oالبٌانات التً ترٌد إخراجها وٌمكنك إدخالها بالشكل العشري أو الثنابً.
52
برنامج اإلدخال : البرنامج التالً هو لقراءة المعطٌات المدخلة : )function c=in(a ;)dio=digitalio('parallel',1 ;)'addline(dio,a,'in ;)getvalue(dio رابعا ً :امثلة عملٌة ... مثال()1 برنامج للتحكم بإضاءة ثمان لٌدات موصولة إلى األرجل ( )9 – 2وٌقوم بإضاءة اللٌد األول ثم ٌطفبه وٌضًء اللٌد الثانً وهكذا إلى الثامن ... )funcion flash2(a for i=1:a for t=0:7 c=2^t )out([0:7],c )pause(0.05 end end )out([0:7],0 فً هذا البرنامج استدعٌنا برنامج outالذي كتبناه سابقا ً وحفظناه وكان االستدعاء هو فقط ذكر اسم البرنامج مع عناصر الدخل أو المتغٌرات. استخدمنا المتغٌر tلكً ال نكتب األعداد الثنابٌة فً كل مرة. : aعدد مرات تكرار البرنامج. قٌمة t 0 1 2 3 4 5
قٌمة c 1 2 4 8 16 32
التحوٌل الثنابً للمتغٌر c 00000001 00000010 00000100 00001000 00010000 00100000
53
6 7
64 128
01000000 10000000
إن التعلٌمة pauseهً تعلٌمة تأخٌر زمنً واحدته الثانٌة فتحدد له كم ثانٌة ترٌد التأخٌر حتى تلحظ التغٌٌرات على اللٌدات. والتعلٌمة األخٌرة فً البرنامج هً من أجل إطفاء جمٌع اللٌدات بعد إنهاء البرنامج. بطرٌقة ثانٌة : ٌمكن كتابة البرنامج بطرٌقة أخرى كالتالً : )function flash12(a for i=1:a for t=1:8 ;)h=zeros(1,8 ;h(t)=1 )out([0:7],h )pause(0.05 end end )out([0:7],0 فً هذا البرنامج تم استخدام مصفوفة صفرٌة من ثمان عناصر فً كل مرة ٌتم تحوٌل أحد هذه األصفار لٌصبح واحداً وهو ٌعبر عن رقم اللٌد الواجب إضاءته. مثال()2 برنامج بتحوٌل األعداد العشرٌة المتزاٌدة إلى الشكل الثنابً عن طرٌق إضاءة اللٌدات ... )function flash1(a for i=1:a for t=1:255 )out([0:7],t )pause(0.05 end end )out([0:7],0 إن اإلدخال هنا تم بشكل عشري.
54
)3( مثال ... برنامج ٌقوم بإضاءة اللٌدات من الطرفٌن إلى المنتصف function flash(a) for i=1:a out([0:7],255) pause(0.25) out([0:7],[0 1 0 0 0 0 1 0]) pause(0.25) out([0:7],[0 0 1 0 0 1 0 0]) pause(0.25) out([0:7],[0 0 0 1 1 0 0 0]) pause(0.25) end out([0:7],0)
55
تنفٌذ وبرمجة واجهات المستخدم الرسومٌة فً الماتالب Graphic User Interface أوالً :مقدمة ... إن المشكلة التً كانت تواجه مستخدمً الماتالب قدرته الضعٌفة على العرض وإبراز العمل ,ولذلك فإن الكثٌر من المبرمجٌن كانوا ٌعتمدون علٌه فً الحساب وتنفٌذ وحل المشاكل الرٌاضٌة .ثم ٌستخدمون نتابجه فً برامج أخرى مثل Visual Basicمثالً . فً النسخ الحدٌثة من الماتالب ظهرت وبقوة فكرة إدخال عملٌة بناء الواجهات فً الماتالب وهو ما ٌعرف بواجهات المستخدم الرسومٌة ,إن هذه الواجهات جعلت من برنامج الماتالب برنامجا ً متكامالً من حٌث السهولة فً البرمجة وحل المسابل والقدرة على عرض وإظهار النتابج بشكل رابع , وإنشاء بٌبة تفاعلٌة بٌنه وبٌن المستخدم.
ثانٌا ً :ماهو مفهوم واجهات المستخدم الرسومٌة وكٌف تعمل ... إن واجهات المستخدم الرسومٌة عبارة عن عرض بٌانً تخطٌطً ٌتضمن وسابل أو مكونات تؤمن للمستخدم إنجاز مهام فعالة وجذابة ضمن بٌبة الماتالب. كما إن مكونات الواجهة ممكن أن تكون قوابم ( , )Menusأشرطة األدوات ( , )Toolbarsأزرار الضغط ,أزرار خٌار .....إلخ ,كما تستطٌع أٌضا ً فً بٌبة ماتالب عبر GUIأن تعرض المعطٌات على شكل جداول أو كأشكال بٌانٌة ,وتستطٌع تجمٌع المكونات المترابطة . أما آلٌة العمل فتعتمد على المبدأ التالً : كل مكون (جزء) فً ال GUIوحتى الواجهة ككل تترافق بواحدة أو اكثر من اإلجرابٌات المكتوبة من قبل المستخدم والتً تعرف باالستدعاءات (.)Callbacks غالبا ً ما ٌعرف هذا النوع من البرمجة بالبرمجة المقادة بالحدث ( Event-Driven )Programmingإن الحدث هنا هو ضغط الزر ,فً البرمجة المقادة بالحدث فإن تنفٌذ االستدعاء ٌكون متزامنا ً ,ومتحكما ً به من قبل أحداث موجهة من خارج البرمجٌات.
56
ثالثا ً :برمجة الواجهة ... GUI عندما تقوم بتخزٌن تخطٌط واجهتك ,فإن GUIDEوبشكل أوتوماتٌكً ٌولد ملف ماتالب ()M-file الذي تستطٌع أن تستخدمه للتحكم بكٌفٌة عمل .GUIإن ملف ماتالب ( )M-fileهذا ٌؤمن شٌفرة لتهٌبة الواجهة وٌتضمن إطار عمل الستدعاءات الواجهة ( GUIاإلجرابٌات التً تنفذ بالتجاوب مع األحداث المولدة من المستخدم مثل نقر الفأرة)ٌ .مكنك باستخدام محرر ملف ( )M-fileإضافة شٌفرة إلى االستدعاءات إلنجاز المهام التً نرٌد أن نفعلها ,وسٌتوضح ذلك أكثر فً األمثلة . .1فتح GUIجدٌدة فً محرر التخطٌط : شغل GUIDEبكتابة الكلمة guideعلى موجه الماتالب ,هذا سٌعرض مربع البداٌة السرٌعة للدلٌل ( , )Guide Quick Startعند ظهور مربع الحوار سابق الذكر اختر خٌار GUIفارغة () )Blank GUI(defaultانقر OKلعرض الواجهة الفارغة فً محرر التخطٌط.
57
الحظ أن المكونات معروضة فً الشكل باالسم وٌمكن عرضها حسب الرمز وذلك من خالل التفضٌالت File >>> Preferencesومن ثم كما بالشكل
.2محاذاة مكونات GUI 58
ٌمكنك فً الواقع استخدام أداة المحاذاة ( )Alignment Toolمن أجل محاذاة المكونات بالنسبة لبعضها البعض ,إذا كانت من نفس النوع ,فمن أجل محاذاة أزرار الضغط الثالثة المبٌنة ,قم بما ٌلً : )1اختر أزرار الضغط الثالثة وذلك بالضغط على Ctrlوالنقر على هذه األزرار. )2اختر من قابمة األدوات ( )Toolsمحاذاة العناصر ( )Align Objectsمن أجل عرض أداة المحاذاة. )3نفذ الحالة المناسبة لترتٌب األزرار لدٌك (فً حالتنا هذه نفصل بٌن أزرار الضغط باالتجاه العمودي والمحاذاة تكون إلى الٌسار فً االتجاه األفقً).
59
.3عناصر التحكم : سنتعرض اآلن فقط لوظٌفة كل عنصر من عناصر التحكم والحقا ً سنتطرق لكل عنصر على حدى . : Push Button .1هذا الزر نضغط علٌه بالفأرة لٌعود لحالته الطبٌعٌة بعد الضغط أي كما هً معظم األزرار التً نتعامل معها فً نزام التشغٌل كزر موافق أو إغالق أو غٌرها. : Toggle Button .2أما هذا الزر فله وضعٌتٌن ٌنتقل بٌنهما عند كل ضغطة بزر الفأرة. : Radio Button .3زر اختٌار وعادة ٌستخدم اكثر من واحد وٌكون واحد منها فقط مختار. : Check Box .4أٌضا ً زر اختٌار حٌث نضع إشارة صح بجانب الخٌار الذي نرٌده. : Edit Text .5المكان الذي ٌسمح للمستخدم الكتابة فٌه إلدخال رقم سري أو كلمة أو .....إلخ : Static Text .6نصوص ثابتة نرٌد إظهارها للمستخدم. ٌ : Slider .7شبه شرٌط التمرٌر. : List Box .8مربع ٌحوي خٌارات عدٌدة ومدٌدة. : Pop-up menu .9تشبه List Boxولكن بشكل آخر تعطً قابمة منسدلة. : Axesإلظهار الرسوم والصور. .10 .Panel / Button Group .11
60
.12
.axtiveX Component
.4أهم التعلٌمات المستخدمة فً : GUI .1تعلٌمة : getمهمتها ببساطة أخذ أو معرفة أي خاصٌة ألي عنصر ترٌد بمعنى أنه عندما تضغط على أي عنصر مرتٌن فإن النافذة التً سوف تفتح أمامك هً نافذة خصابص هذا العنصر ,إن كل هذه الخاصٌات تستطٌع معرفتها عن طرٌق تعلٌمة .get )Variable=get(handles.buttonname,ꞌpropertyꞌ .2تعلٌمة : setهذه التعلٌمة مقابلة لعمل getفهً تقوم بوضع أو تغٌٌر خاصٌة معٌنة ما برمجٌاً. )set(handles.buttonname,ꞌpropertyꞌ,variablename .3تعلٌمة : globalملف البرمجة ٌحوي على العدٌد من التوابع لكن هذه التوابع مستقلة أي أن المتغٌرات الموجودة فً functionما ال تؤثر على المتغٌرات الموجودة فً اآلخر (المتغٌرات المحلٌة) حتى لو كانا ٌملكان نفس االسم فلذلك أحٌانا ً نرٌد تصدٌر قٌمة المتغٌر من تابع آلخر فنلجأ لجعل هذا المتغٌر عالمً أو شامل وذلك باستخدام هذه التعلٌمة. .5أهم العناصر المشتركة لعناصر التحكم : .1خاصٌة : stringوهً خاصٌة موجودة فً كل عناصر التحكم ومسؤولة عن إظهار الكتابة على عنصر التحكم ,وٌمكن الوصول إلٌها بالضغط مرتٌن على أي عنصر لنجدها فً قابمة خصابص العنصر ,أو باختصار .Property Inspector>>string
.2الخاصٌة : tagوهً خاصٌة موجودة فً كل عناصر التحكم وهو عبارة عن اسم التابع المسؤول عن برمجة الزر.
61
.3الخاصٌة : Visibleوهً خاصٌة تمكن من إظهار أو إخفاء العناصر (المكونات) وهً مفٌدة فً الحاالت التً ٌكون فٌها عدد كبٌر من الحاالت وعندها ننشا لوحة لكل حالة ونجعلها مخفٌة من هذا الخٌار ومن ثم نظهرها عندما نحتاجها. .6سلوك ضبط القٌاس : ٌمكنك أن تتحكم فٌما إذا كان المستخدم ٌستطٌع أن ٌضبط قٌاس نافذة الشكل المتضمنة واجهتك وكٌف ٌتعامل الماتالب مع ضبط القٌاس ,حٌث إن ٌ GUIDEوفر ثالث خٌارات وهً : : Non-resizable ال ٌستطٌع المستخدم فً هذه الحالة تغٌٌر قٌاس النافذة (حالة افتراضٌة) ٌ : Proportional قوم الماتالب فً هذا الخٌار وبشكل أوتوماتٌكً بضبط قٌاس مكونات الواجهة بشكل نسبً مع قٌاس نافذة الشكل الجدٌد. ٌ(Other ستخدم : )ResizeFcnتتم برمجة الواجهة بحٌث ٌتم ضبط المكونات بطرٌقة معٌنة عندما ٌقوم المستخدم بإعادة ضبط قٌاس الشكل. وٌمكن الوصول لهذه الخٌارات للضبط من خالل Tools >> GUI option
مثال بسٌط : برنامج لجمع عددٌن ...
62
مالحظات حول البرنامج : ٌ .1جب االنتباه دوما ً لخاصٌة Tagالخاص بكل كابن فً الواجهة وذلك لكً نستطٌع التعامل عند كتابة الكود الخاص بالواجهة أو Callbackالخاص بالكابن المسؤول عن تنفٌذ البرنامج. .2الحظ كٌف ساستخدم األمرٌن setو getحٌث ٌقوم البرنامج بأخذ القٌمتٌن x,yومن ثم ٌعطً القٌمة sumللكابن sumالمسؤول عن إظهار النتٌجة. .3الكود البرمجً المسؤول عن العملٌة المطلوبة من البرنامج (هنا الجمع) نضعها فً تابع الزر (الكابن) المسؤول عن تنفٌذ العملٌة المطلوبة.
بعد كتابة guideفً النافذة الربٌسٌة لبرنامج الماتالب واختٌار نافذة جدٌدة ٌظهر لنا الشكل التالً :
63
فً هذا البرنامج نحن بحاجة إلى الكابنات التالٌة : -
( Static Textللتوضٌح فقط( ( Edit Textكابن ٌعمل كوسٌط دخل أو خرج فً هذا البرنامج) ( Push Buttonلتنفٌذ العملٌة البرمجٌة)
بعد إضافة عنصر Edit Textنعدل فً خصابصه (ٌمكن الوصول إلٌها كما ٌبٌن الشكل) بحٌث نعدل خاصٌة Stringلتصبح xونعدل خاصٌة tagلتصبح xأٌضا ً (انتبه لهذه التغٌرات جٌداً).
نقوم اآلن بإضافة كابنٌن من نوع Edit Textوالتعدٌل فً الخصابص لكل منهما بحٌث الثانً ٌكون كل من string & tagباسم yوالثالث ٌكون كل من string & tagباسم , sumومن أجل جمالٌة 64
واجهة المستخدم نقوم بمحاذاة العناصر باستخدام األداة Alignسابقة الذكر ... نقوم بإضافة كابن من نوع Push Buttonوذلك لتنفٌذ العملٌة المطلوبة من البرنامج وهً الجمع والتعدٌل على خاصتً string & tagلتصبح sum1وبالتالً تكون الواجهة أصبحت كما بالشكل التالً ....
بعد حفظ البرنامج نقوم بالدخول إلى Callbackالخاص بكابن الزر كما ٌوضح الشكل ...
وفً جسم التابع الخاص بالكابن Push Buttomوالمسمى sum1نضٌف بعد األسطر المبٌنة باللون األخضر األسطر التالٌة :
65
;))ˈx = str2double(get(handles.x,ˈstring ;))ˈy = str2double(get(handles.y,ˈstring ;sum3 = x + y ;)set(handles.sum,ˈstringˈ,sum3 وبعد ذلك ٌكون تنفٌذ البرنامج كما ٌوضح الشكل (ٌتم التشغٌل باستخدام زر التشغٌل األخضر من ملف m-fileوذلك لتفادي حدوث األخطاء)
66
رابعا ً :المكونات المتاحة فً ... GUI المكون Push Button
Toggle Button
Radio Button
Check Box
Edit text
Static text Slider
List Box Pop-Up Menu Axes Panel
الوصف تقوم أزرار الضغط بفعل معٌن عندما ٌنقر علٌها عندما تنقر على زر الضغط ,سٌظهر أنه نقر وعندما تحرر الفأرة عنه فإن الزر سٌظهر مرتفعا ً تولد أزرار التبدٌل فعالً وتشٌر فٌما إذا كانت مفعلة أو ملغٌة ,عندما تضغط على زر التبدٌل فإنه ٌظهر مضغوطا ً موضحا ً أنه مفتوح ,عندما تحرر زر الفأرة على عكس زر الضغط فإن زر الضغط ٌبقى مضغوطا ً حتى تنقره مرة أخرى إن أزرار الخٌار تشبه مربعات االختٌار ولكن تكون نوعا ً متعارضة ضمن مجموعة من أزرار الخٌار المرتبطة ,أي ٌمكنك أن تحدد فقط زراً واحداً فً نفس الوقت وتتم قٌادة هذه الكابنات من قبل Button Group إن مربعات االختٌار تولد فعالً عندما تختبر وتشٌر لحالتها أكانت مختبرة أم غٌر مختبرة ,إن مربعات االختبار مفٌدة عندما ٌتم تزوٌد المستخدم بعدد من االختبارات المستقلة التً تضبط النمط إن عناصر تحكم النص المحرر عبارة عن حقول تمكن المستخدمٌن من إدخال أو تعدٌل العبارات النصٌة إن عناصر تحكم النص الستاتٌكً تعرض خطوطا ً من النصوص تقبل المنزلقات دخالً رقمٌا ً ضمن مجال محدد وذلك بتمكٌن المستخدم من تحرٌك الشرٌط المنزلق الذي ٌدعى بالمنزلقة أو اإلبهام تعرض مربعات القابمة قابمة من األجزاء وتمكن المستخدمٌن من اختٌار أحد األجزاء أو أكثر تعرض القابمة المنسدلة قابمة من االختبارات عندما ٌنقر المستخدمٌن على السهم إن المحاور تمكن واجهتك من عرض الرسومات والصور تجمع اللوحة مكونات الواجهة ,بالتجمٌع البصري بالنسبة ألدوات التحكم ,فإذا حركت
67
اللوحة فإن أوالدها ستتحرك معها وتحافظ على مكانها على اللوحة تعتبر مجموعة األزرار هذه شبٌهة باللوحات ولكن تستخدم لتقود سلوك االختبار الحصري ألزرار الخٌار وأزرار التبدٌل تمكنك هذه المكونة من عرض أدوات التحكم الفعالة فً واجهتك
Button Group
ActiveX Component
... برمجة عناصر التحكم: ً خامسا Radio Button )1 : إن هذا الزر ٌمتلك خاصٌة التحدٌد أو عدمه فهو إذا ٌبرمج بالطرٌقة التالٌة if(get(hObject,ꞌValueꞌ)==get(hObject,ꞌMaxꞌ)) else end إما إذا كان لدٌنا عدة أزرار من هذا النوع ونرٌد تحدٌد أحداها وإزلة التحدٌد عن الباقٌن فإن : العبارات البرمجٌة تكون Function radiobutton1_callback(hObject,eventdata,handles) Set([handles.tadiobutton2 handles.radiobutton3],ꞌValueꞌ,0) Function radiobutton2_callback(hObject,eventdata,handles) Set([handles.tadiobutton1 handles.radiobutton3],ꞌValueꞌ,0) Function radiobutton3_callback(hObject,eventdata,handles) Set([handles.tadiobutton2 handles.radiobutton1],ꞌValueꞌ,0) Pop-Up Menus )2 وعندما نرٌد أن نخص كلString نضع خٌارات عدٌدة فً هذه القابمة المنسدلة عن طرٌق وهذا ٌمكننا منString ً تقدم لنا رقم السطر الذي اخترناه فvalueخٌار ببرنامج معٌن فإن ال : ًكتابة التال Function popupmenu_callback(hObject,eventdata,handles) Val=get(hObject,ꞌValueꞌ); Switch val case 1
68
case 2 end : ولكن إذا كان لدٌنا خٌارات عدٌدة ونرٌد التعامل مع ما كتبناه ولٌس مع رقم السطر Function popupmenu_callback(hObject,eventdata,handles) val=get(hObject,ꞌValueꞌ); String_list=get(hObject,ꞌstringꞌ); Selected_string=string_list{val}; ً وفٌها جمٌع الخٌارات التً وضعت فcell ستكون مصفوفة من النوعstring_list إن نتٌجة .string Toggle Button )3 الموجودة فً الخصابص وقٌمةvalue فً ال8 إن هذا الزر ٌأخذ وضعٌتٌن فعند الضغط ٌأخذ قٌمة : عن اإلفالت0 Function togglebutton_callback(hObject,eventdata,handles) Button_state=get(hObject,ꞌValueꞌ); if button_state==1 ……. elseif button_state==0 ……. end Check Boxes )4 Function checkbox1_callback(hObject, eventdata, handles) if(get(hObject,ꞌValueꞌ)==get(hObject,ꞌMaxꞌ)) else end
edit text )5 Function edittext1_callback(hObject, eventdata, handles) user_string = get(hObject,ꞌstringꞌ);
69
Sliders )6 )Function slider1_callback(hObject, eventdata, handles ;)slider_string = get(hObject,ꞌValueꞌ List Box )7 إن هذا الزر ٌشبه Pop-Up Menuإال أنك تستطٌع ان تختار هنا عدة خٌارات فً نفس الوقت. ضع هذا الكابن فً صفحة فارغة من GUIواكتب فً Stringعدة خٌارات ثم شغل الملف وحاول أن تختار اكثر من خٌار تجد إنك لن تستطٌع ذلك فماذا نفعل إزاء ذلك ؟ نقوم بفتح خصابص الزر وتغٌٌر قٌمة maxإلى قٌمة غٌر الواحد ,ثم نعود ونالحظ أنه أصبح بإمكاننا اختٌار عدة خٌارات. )Function listbox1_callback(hObject, eventdata, handles ;)index_selected = get(handles.listbox1,ꞌValueꞌ ;)list = get(handles.listbox1,ꞌstringꞌ ;)item_selected = list(index_selected سادسا ً :االستدعاءات ... عند االنتهاء من تخطٌط الواجهة البد من برمجة سلوك هذه الواجهة ,إذ تتحكم الشٌفرة التً تكتبها بالكٌفٌة التً ستتجاوب بها الواجهة GUIمع األحداث مثل نقرة زر ,حركة منزلقة ,اختٌار جزء من قابمة ,أو إنشاء أو حذف المكونات ,تأخذ هذه البرمجة أشكاالً عدة مثل مجموعة توابع ,طلب االستدعاءات callbacksولكل مكونة وحتى للواجهة GUIنفسها. .1ماهو االستدعاء : Callback إن االستدعاء عبارة عن التابع الذي تكتبه وترفقه مع مكونة GUIمحددة أو مع شكل الواجهة , GUIإنه ٌتحكم بالواجهة GUIأو سلوك المكونة عن طرٌق إنجاز بعض األفعال بالتجاوب مع الحدث المطبق على المكونة ٌ ,دعى هذا النوع من البرمجة غالبا ً بالبرمجة المقادة بالحدث .event-driven Programming عندما ٌحدث حدث للمكونة ,فإن الماتالب ٌستحضر استدعاء المكونة التً طلب فً الحدٌث ,وٌمكن أن تكون المكونة أي وسٌلة تحكم مثل زر ضغط أو مربع قابمة أو منزلقة كما ٌمكن أن تكون أٌضا ً قابمة أو لوحة أو مجموعة أزرار. .2أنواع االستدعاءات :
70
إن شكل الواجهة وكل نوع من المكونات ٌقبل انواعا ً محددة من االستدعاءات والتً ٌمكن إرفاقها معها .واالستدعاءات التً تكون متاحة ألي مكونة تكون معرفة بخواص هذه المكونة. ٌملك كل نوع من االستدعاءات آلٌة تنفٌذ أو حدث ٌسبب استدعاءه والجدول التالً ٌسرد الخواص االستدعابٌة التً ٌتٌحها GUIDEمع أحداث تنفٌذها والمكونات التً تطبق علٌها. خاصٌة االستدعاء ButtonDawnFcn
Callback
CloseRequestFcn CreatFcn
DeleteFcn
KeyPressFcn ResizeFcn
SelectionChangeFcn
حدث التنفٌذ
المكونات التً تستخدم الخاصٌة المحور – الشكل – مجموعة األزرار – لوحة – عناصر تحكم واجهة المستخدم
تتنفذ عندما ٌقوم المستخدم بنقر زر بٌنما ٌكون المؤشر على أو ضمن 5بٌكسل من المكونة أو الشكل قابمة المحتوٌات – قابمة – هو فعل التحكم ,وٌنفذ على عناصر تحكم واجهة المستخدم سبٌل المثال عندما ٌنقر المستخدم على زر الضغط أو ٌختار جزءاً من القابمة الشكل ٌنفذ عندما ٌغلق الشكل ٌقوم بتهٌبة المكونة عندما ٌتم المحاور – الشكل – مجموعة األزرار – اللوحة – قابمة إنشاؤها ,إنه ٌنفذ بعد إنشاء المحتوٌات – القابمة – المكونة أو الشكل ولكن قبل عناصر تحكم واجهة المستخدم عرضها ٌنجز عملٌات التنظٌف فقط المحاور – الشكل – مجموعة األزرار – اللوحة – قابمة قبل إلغاء المكونة أو الشكل المحتوٌات – القابمة – عناصر تحكم واجهة المستخدم ٌنفذ هذا االستدعاء عندما ٌنقر الشكل – عناصر تحكم واجهة المستخدم المستخدم على مفتاح من لوحة المفاتٌح ومكونة االستدعاءات أو الشكل تكون مفعلة مجموعة األزرار – الشكل – ٌنفذ عندما ٌعٌد المستخدم اللوحة ضبط قٌاس اللوحة ,مجموعة األزرار ,أو الشكل حٌث تكون خاصٌة Resizeللشكل مضبوطة على on مجموعة األزرار ٌنفذ عندها ٌختار المستخدم زر خٌار أو زر تبدٌل مختلف فً مكونة مجموعة األزرار 71
WindowButtonDawnFcn WindowButtonMotionFcn WindowButtonUpFcn
مالحظة
ٌنفذ عندما تضغط زر الفأرة عندما ٌكون المؤشر ضمن الشكل ٌنفذ عندما تحرك المؤشر ضمن نافذة الشكل ٌنفذ عندما تحرر زر الفأرة
الشكل الشكل الشكل
إن عناصر التحكم التً تتفاعل مع المستخدم تتضمن أزرار الضغط ,المنزلقات , أزرار خٌار ,مربعات اختٌار ,مربعات نص قابل للتحرٌر ,مربعات نص ستاتٌكً ,مربعات قابمة ,وأزرار تبدٌل ٌ ,شار إلٌها أحٌانا ً بعناصر تحكم واجهة المستخدم .UIControls
عندما ٌقوم GUIDEبتولٌد ملف M-Fileفإنه وبشكل أوتوماتٌكً ٌضم قوالب أغلب االستدعاءات شابعة االستخدام لكل مكونة .إن الملف ٌ M-fileتضمن أٌضا ً شٌفرة التهٌبة ,وكذلك استدعاء تابع االفتتاح استدعاء تابع الخرجٌ .جب علٌك أن تضٌف شٌفرة إلى استدعاء المكونات لواجهتك من أجل أن تنجز األعمال التً ترٌد ,ومن جهة أخرى تستطٌع أٌضا ً إضافة شٌفرة الستدعاء تابع االفتتاح واستدعاء تابع الخرج .إن األجزاء األساسٌة لملف M-fileالواجهة مرتبة كما ٌبٌن الجدول ... الوصف المقطع تعرض على سطر استجابة لألمر , helpإن تعلٌقات Comments تحرٌر هذه التعلٌقات ضروري لواجهتك مهام تهٌبة ,GUIDEال تحرر هذه الشٌفرة تهٌئة Initialization ٌنجز مهام التهٌبة التً ترٌد قبل أن ٌدخل تابع االفتتاح ()opening function المستخدم إلى الواجهة GUI ٌرجع المخارج إلى سطر أمر ماتالب بعدما تابع الخرج ()Output function ٌقوم تابع االفتتاح بإرجاع التحكم وقبل تسلٌم التحكم إلى سطر األمر ٌتحكم بسلوك شكل الواجهة والمكونات استدعاءات الشكل والمكونات الفردٌة ,إن ماتالب ٌطلب االستدعاء ()Component and figure callbacks بالتجاول مع الحدث الجزبً للمكونة أو للشكل نفسه
72
سابعا ً :البنٌة ... handles ٌنشا GUIDEالبنٌة handlesالتً تتضمن مقابض كل العناصر فً الشكل ,من أجل الواجهات GUIالتً تتضمن نص محرر ,لوحة ,قابمة منبثقة ,وزر ضغط ,فإن البنٌة handlesتبدو فً األصل مشابهة للنص التالً ,إن ٌ GUIDEستخدم خاصٌة tagللمكونات لتسمٌة عنصر البنٌة وذلك = handles من أجل التعامل معه Figure1: 160.0011 Edit1: 9.0020 Uipanel1: 8.0017 Popupmenu: 7.0018 Pushbutton1: 161.0011 Output: 160.0011 إن ٌ GUIDEنشا وٌعرض بنٌة handlesكمعطٌات للواجهة , GUIحٌث تمرر كوسٌط دخل لكل االستدعاءات وتمكن استدعاءات الواجهة من مشاركة قٌم الخاصٌة ومعطٌات التطبٌق.
مثال (: )1 واجهة GUIذات محاور متعددة ... ٌنشا فً هذا المثال واجهة GUIتتضمن جملتً محاور لرسم تغٌرات التابع ,مع الزمن ورسم تغٌراتها أٌضا ً مع التردد. )sin(w1t)+sin(w2t المدخالت المطلوبة ٌ :دخل المستخدم f1,f2,tحٌث ٌحدد المستخدم المجال الزمنً كامالً أي القٌمة البدابٌة والنهابٌة والخطوة. البرنامج : فً هذه البرنامج وفً الواجهة الرسومٌة نحن بحاجة إلى : 3كابنات من نوع .edit text كابن من نوع .Push Button -كابنٌن من نوع .axes
73
باإلضافة إلى الكابنات اإلضافٌة المساعدة مثل النص الستاتٌكً واللوحات .... خطوات العمل : -8نقوم بداٌة برسم وتخطٌط واجهة المستخدم التخاطبٌة .GUI -2نحدد خاصٌة tagلكل عنصر من العناصر. -3ندخل إلى االستدعاء الخاص بكل كابن ونكتب برنامجنا فً المكان الذي ٌهمنا (أي فً الكابن الذي ٌهمنا كتابة البرنامج الذي سٌنفذ فٌه) تنفٌذ البرنامج : بعد تعدٌل خاصٌة tagلكل كابن ,ندخل لالستدعاء الخاص بالكابن Push Buttonونضع ماٌلً : ;))'f1 = str2double(get(handles.f1,'string ;))'f2 = str2double(get(handles.f2,'string ;))'t = eval(get(handles.t,'string ;)x=sin(2*pi*f1*t)+sin(2*pi*f2*t ;)y = fft(x,512 تحوٌل فورٌٌه السرٌع ;m = y.*conj(y)/512 ;f=1000*(0:256)/512 )axes(handles.axes1 ))plot(f,m(1:257 ;)')title('sin(2*pi*f1*t)+sin(2*pi*f2*t ;)'xlabel('Frequency grid on )axes(handles.axes2 )plot(t,x ;)')title('sin(2*pi*f1*t)+sin(2*pi*f2*t ;)'xlabel('Time grid on
74
: )2( مثال برنامج نختار فٌه شكل الموجة الجٌبٌة من قابمة منسدلة لٌرسم لنا تغٌراتها مع الزمن ....pi/10 )والخطوة0
75
axes(handles.axes) plot(t,y)
76
حاول التعدٌل فً البرنامج بحٌث: – 8اجعل اسم الشكل الظاهر ٌكتب تحته مباشرة بالطرٌقة التً تجدها مناسبة(على عنصر منفصل عن المحاور) – 2اجعل القابمة المنسدلة تظهر لك زر خاص بالشكل (كابن من نوع )Push Buttomلترسم عن طرٌقه تغٌرات التابع مع الزمن. – 3ضع خٌار للبرنامج ٌتٌح للمستخدم إمكانٌة تحدٌد المجال الزمنً فً حال رغبته بذلك. – 4أعد البرنامج السابق كامالً باستخدام Radio Buttonبدالً من .Pop-up menu وسنبدأ التعدٌل بهذا البرنامج بحٌث نحاول تغطٌة أكبر قدر ممكن من األفكار ...
77
... ً سنجعل اسم التابع ٌظهر وفوقه الرسم وذلك كما ٌل-1 set السابق بحٌث نضٌف وباالعتماد على التابعCallback لكً نقوم بذلك سنقوم بالتعدٌل على : ً وذلك على النحو التال... تعلٌمة إلظهار اسم الشكل المرسوم . .
switch state case 1 set(handles.edit,'string','select the function') case 2 y=sin(t) set(handles.edit,'string','sin') case 3 y=cos(t) set(handles.edit,'string',cos') case 4 y=exp(t( set(handles.edit,'string','exp') end . .
78
-2اآلن سنتعلم كٌفٌة التحكم بظهور وإخفاء الكابنات فً بٌبة الواجهات وذلك باالستفادة من التابع setومن الخاصٌة .vision سنقوم فً هذه الخطوة بتحدٌد المجال الزمنً الذي سٌتم الرسم بناءاً علٌه وذلك بإضافة كابن من نوع Radio Buttomوكابنٌن من نوع edit textمن أجل إدخال وتحدٌد المجال الزمنً وذلك كما ٌلً...
بعد وضع الكابنات كما هو موضح بالشكل ,من خصابص عنصري اإلدخال نجعل الخاصٌة Vision off بعد ذلك نقوم بالدخول إلى Callbackالخاص بال popupmenuونضٌف إلى ما سبق الحالة الشرطٌة التالٌة وذلك كما ٌلً .... ;)ˈs=get(handles.radiobutton1,ˈvalue if s==0
79
t=0:pi/10:2*pi; else str=str2double(get(handles.from,ˈstringˈ)); nd=str2double(get(handles.to,ˈstringˈ)); if isnan(str)==1 | isnan(nd)==1 set(handles.edit, ˈstringˈ, ˈEnter two limitsˈ else t=str(nd-str)/100:nd; end end ونضٌفRadioButton الخاص بعنصر الراٌو المضافCallback بعد ذلك نقوم بالدخول إلى .... ًإلٌه األسطر التالٌة وذلك كما ٌل If (get(handles.radiobutton1, ˈstringˈ)==get(handles.radiobutton1, ˈMaxˈ)) set(handles.from,ˈvisibleˈ, ˈonˈ) set(handles.to,ˈvisibleˈ, ˈonˈ) set(handles.text3,ˈvisibleˈ, ˈonˈ) set(handles.text4,ˈvisibleˈ, ˈonˈ) else set(handles.from,ˈvisibleˈ, ˈoffˈ) set(handles.to,ˈvisibleˈ, ˈoffˈ) set(handles.text3,ˈvisibleˈ, ˈoffˈ) set(handles.text4,ˈvisibleˈ, ˈoffˈ) end
80
81
تحلٌل الدارات الكهربائٌة أوالً :تحلٌل دارات التٌار المستمر أوالً :مقدمة فً هذا الفصل سنعتمد على الطرابق المختلفة المعتمدة فً حساب التٌارات والتوترات فً دارات التٌار المستمر ,ومن ثم سنعتمد على برنامج الماتالب من أجل حل التوابع المعقدة التً ٌصعب الوصول لنتابجها بدون الحاسب.
ثانٌا ً :تحلٌل نقاط الدارة (قانون كٌرشوف األول) Y11V1 + Y12V2 + …….+ Y1mVm = ∑ I1 Y21V1 + Y22V2 + …….+ Y2mVm = ∑ I1 Ym1V1 + Ym2V2 + …….+ YmmVm = ∑ Im -1
=
→
=
مثال : المطلوب إٌجاد كمونات العقد للدارة المبٌنة بالشكل التالً
بتطبٌق قانون كٌرشوف على العقد نجد العقدة : 1
=5
– 0.05
– 0.1
0.15
→
–5=0
+
82
العقدة : 2
=0
– 0.025
+ 0.145
-0.1
العقدة : 3
=3
+ 0.075
– 0.025
-0.05
→ →
+
=0 –2=0
] [=] []
+ +
[
وٌكون الكود البرمجً الذي نكتبه فً الماتالب كملف M-fileكالتالً .... clc clear ;]Y=[0.15 -0.1 -0.05; -0.1 0.145 -0.025; -0.05 -0.025 0.075 ;]I=[5; 0; 2 )'fprintf('Nodal Voltages V1, V2 and V3 are: \n v=inv(Y)*I النتابج التً حصلنا علٌها بعد التطبٌق : Nodal Voltages V1, V2 and V3 are: =v
ثالثا ً :تحلٌل حلقات الدارة (قانون كٌرشوف الثانً) Z11I1 + Z12I2 + Z13I3 + ….. + Z1nIn = ∑ V1 Z21I1 + Z22I2 + Z23I3 + ….. + Z2nIn = ∑ V2 Zn1I1 + Zn2I2 + Zn3I3 + ….. + ZnnIn = ∑ Vn -1
=
→
=
83
مثال : المطلوب حساب قٌمة التٌار المار عبر المقاومة RBومن ثم إٌجاد االستطاعة التً ٌؤمنها منبع الجهد ( , )10vوذلك للدارة الموضحة بالشكل الموضح
بتحلٌل الحلقات كما ٌبٌن الشكل التالً :
الحلقة : 1
40 - 10 - 30 = 10
→
10( - ) + 30( - ) – 10 = 0
الحلقة : 2
-10 + 30 - 5 = 0
→
=0
الحلقة : 3
-30 - 5 + 65 = 0
→
+ 30 = 0
]
[ =] []
(10( - ) + 15 + 5 30( - ) + 5 [
وٌكون الكود البرمجً الذي نكتبه فً الماتالب كملف M-fileكالتالً ....
84
clear clc ;]Z=[40 -10 -30; -10 30 -5; -30 -5 65 ;]V=[10; 0; 0 ;I=inv(Z)*V ;)IRB=I(3)-I(2 )fprintf('The current through R is %8.10f Amps \n', IRB ;PS=I(1)*10 )fprintf('The Power supplied by 10V source is %8.10f watts \n', PS النتابج التً حصلنا علٌها بعد التطبٌق : The current through R is 0.0370370370 Amps The Power supplied by 10V source is 4.7530864198 watts دقة الناتج
رابعا ً :االستطاعة العظمى المنقولة لنفرض لدٌنا منبع الجهد المبٌن بالشكل الموضح حٌث Rsمقاومة منبع الجهد و RLالحمل
باستخدام مجزئ الجهد نجد أن :
=
=
=
&
وللحصول على القٌمة مقاومة الحمل التً تعطٌنا القٌمة األعظمٌة للطاقة نشتق معادلة االستطاعة ونجعل الناتج مساوي للصفر فنجد : األخٌرة بالنسبة للمقاومة =0 وبتبسٌط العالقة األخٌرة بعد جعلها مساوٌة للصفر نجد :
= =
85
وٌمكن استخدام الماتالب لمراقبة تغٌٌر الجهد وتبدٌد الطاقة فً الحمولة وذلك تبعا ً لقٌمة مقاومة .الحمل ˈFindˈ function ٌستخدم هذا التابع لتحدٌد قٌم العناصر من المصفوفة التً قٌمها ال تساوي الصفر
مالحظة : مثال
والمطلوب رسم, كٌلواوم50 إلى0 فً الدارة األخٌرة لنفرض أن قٌمة مقاومة الحمل تتغٌر من . =10KΩ حدد االستطاعة العظمى على الحمل عندما, تغٌٌرات االستطاعة فً الحمل .... ً كالتالM-file الكود البرمجً الذي نكتبه فً الماتالب كملف clc clear vs=10; rs=10e3; rl=0:1e3:50e3; k=length(rl); for i=1:k pl(i) = ((vs/(rs+rl(i)))^2)*rl(i); end dp=diff(pl)./diff(rl); rld=rl(2:length(rl)); prod=dp(1:length(dp)-1).*dp(2:length(dp)); crit_pt=rld(find(prod<0)); max_power=max(pl); fprintf('Maximum Power occurs at %8.3f ohms \n', crit_pt) fprintf('Maximum Power dissipation is %8.5f Watts \n', max_power) plot(rl,pl,'r-*') title('Power delivered to load') xlabel('load resistance in Ohms') ylabel('Power in Watts') : النتابج التً حصلنا علٌها بعد التطبٌق Maximum Power occurs at 10000.000 ohms Maximum Power dissipation is 0.00250 Watts
86
87
ثانٌا ً :تحلٌل دارات التٌار المتناوب أوالً :مقدمة فً هذه الجلسة سندرس دارات التٌار المتناوب وسنستعٌن بالتكامل العددي للحصول على القٌم الوسطٌة لالستطاعة .سنتطرق بعد ذلك لتحلٌل الدارات ثالثٌة الطور وذلك بتحوٌلها لمجال التردد ومن ذلك االستعانة بقوانٌن كٌرشوف لحل الدارة .ولما سبق سنعتمد على المصفوفات من أجل حسابات التوترات والتٌارات .وسنستعٌن بتوابع كثٌرة فً الماتالب سٌكون لها دور كبٌر فً تسهٌل الحسابات. ثانٌا ً :دراسة الحالة المستقرة لدارات التٌار المتناوب
) 𝜃 (wt +
) 𝜃 v(t) = Vm.cos(wt +
= )i(t ∫ √=
√
∫ √=
=
√
=
The average power dissipated : )𝜃
𝜃(cos
∫ =P
=
The power factor : )𝜃
= pf
𝜃(= cos
The complex power,S, is : ]) 𝜃 .[cos(𝜃 - 𝜃 ) + jsin(𝜃 -
.
= S = P + jQ
88
مالحظة
ˈquad & quad8ˈ functions ٌوفر الماتالب هاذٌن التابعٌن من أجل إجراء التكامل ألي تابع والصٌغة العامة للتابعٌن هً .... ∫=q )quad(ˈfunctˈ,a,b,tol,trace )quad8(ˈfunctˈ,a,b,tol,trace حٌث : اسم التابع كما تم تعرٌفه فً الماتالب القٌمة الحدٌة الدنٌا للتكامل القٌمة الحدٌة العلٌا للتكامل حدود التأرجح المسموح بها من أجل الدقة ولها قٌمة افتراضٌة لتفعٌل إمكانٌة رسم التكامل وٌمكن تفعٌلها بوضع أي قٌمة غٌر مساوٌة للصفر حٌث أن القٌمة صفر هً االفتراضٌة
funct a b tol trace
مثال : )i(t) = 6.cos(120𝝅t + 60
)v(t) = 10.cos(120𝝅t + 30
والمطلوب تحدٌد القٌمة الوسطٌة للطاقة والقٌمة اللحظٌة للتوتر وكذلك معامل االستطاعة وذلك بالطرٌقتٌن التحلٌلٌة والرٌاضٌة. من أجل ذلك نكتب الكود البرمجً التالً فً ملف M-fileكالتالً ... clc ;)T=2*pi/(120*pi ;a=0 ;b=T ;x=0:0.02:1 ;t=x.*b ;)v_int=quad('voltage1',a,b
89
v_rms=sqrt(v_int/b); i_int=quad('current1',a,b); i_rms=sqrt(i_int/b); p_int=quad('inst_pr',a,b); p_ave=p_int/b; pf=p_ave/(i_rms*v_rms); p_ave_an=(60/2)*cos(30*pi/180); v_rms_an=10/sqrt(2); pf_an=cos(30*pi/180); fprintf('Average power, analytical: %f \n average power, numerical: %f \n', p_ave_an, p_ave) fprintf('rms power, analytical: %f \n rms power, numerical: %f \n', p_ave_an, p_ave) fprintf('Power vactor, analytical: %f \n power factor, numerical: %f \n', pf_an, pf) ًنالحظ فً البرنامج أننا استخدمنا عدة توابع ولذلك البد من كتابتها فً ملفات خاصة بها وه ) (ٌكتب كل تابع فً ملف لوحده...ًكالتال function vsq=voltage1(t) vsq=(10*cos(120*pi*t + 60*pi/180)).^2; end function isq=current1(t) isq=(6*cos(120*pi*t+30*pi/180)).^2; end function pt=inst_pr(t) it=6*cos(120*pi*t+30*pi/180); vt=10*cos(120*pi*t+60*pi/180); pt=it.*vt; end : النتابج التً حصلنا علٌها بعد التطبٌق Average power, analytical: 25.980762 average power, numerical: 25.980762 rms power, analytical: 25.980762 rms power, numerical: 25.980762 Power vactor, analytical: 0.866025
90
power factor, numerical: 0.866025 وبالتالً نجد أنه باستخدام الطرٌقة التحلٌلٌة أو الرقمٌة فإن النتابج ستكون متشابهة تماماً. ثالثا ً :دارات التٌار المتناوب األحادٌة والثالثٌة الطور مثال )(1 لتكن لدٌنا الدارة الموضحة بالشكل ...
=50 Ω
=100 Ω
=20 Ω
= 250µf
=8H
=4H
w = 10 rad/s والمطلوب حساب طوٌلة وزاوٌة توتر الخرج ..... العقدة : 1
=0
العقدة : 2
=0
العقدة : 3
=0
⁄
+
+ +
⁄
+
+ +
وبعد ترتٌب عناصر المعادالت الثالثة األخٌرة وإعادة تنسٌقها نحصل على المصفوفة التالٌة ...
91
[
][ ] = [
]
.... برنامج حل المصفوفة clc clear Y=[0.05-0.0225*j 0.025*j -0.0025*j; 0.025*j 0.01-0.0375*j 0.0125*j; 0.0025*j 0.0125*j 0.02-0.01*j]; c1=0.4*exp(pi*15*j/180); I=[c1; 0; 0]; V=inv(Y)*I; v3_abs=abs(V(3)); v3_ang=angle(V(3))*180/pi; fprintf('Voltage V3, magnitude : %f \nvoltage V3, angle in degree : %f \n', v3_abs,v3_ang) : النتابج التً حصلنا علٌها بعد التطبٌق Voltage V3, magnitude : 1.850409 voltage V3, angle in degree : -72.453299 v3(t) =1.85cos(10t – 72.45) v (2) مثال ... ًلٌكن لدٌنا النظام غٌر المتوازن المبٌن بالشكل التال
.VAN , VBN , VCN والمطلوب حساب التوترات الطورٌة : باستخدام قانون كٌرشوف نجد 110 0 = (1 + j) + (5 + 12j)
92
→
110 0 = (6+13j)
110 -120 = (1 – 2j) + (3 + 4j)
→
110 -120 = (4 + 2j)
110 120 = (1 – 0.5j) + (5 – 12j)
→
110 120 = (6 – 12.5j)
[
] [ ]=[
]
= inv(Z)*V VAN = (5 + 12j) VBN = (3 + 4j) VCN = (5 - 12j) ... برنامج الماتالب clc clear Z=[6-13*j 0 0; 0 4+2*j 0; 0 0 6-12.5*j]; c2=110*exp(j*pi*(-120/180)); c3=110*exp(j*pi*(120/180)); V=[110; c2; c3]; I = inv(Z)*V; Van=(5+12*j)*I(1); Vbn=(3+4*j)*I(2); Vcn=(5-12*j)*I(3); Van_abs=abs(Van); Van_ang=angle(Van)*180/pi; Vbn_abs=abs(Vbn); Vbn_ang=angle(Vbn)*180/pi; Vcn_abs=abs(Vcn); Vcn_ang=angle(Vcn)*180/pi; fprintf('Phasor voltage Van, magnitude : %f \nphasor Voltage Van, angle in degree : %f \n', Van_abs, Van_ang) fprintf('Phasor voltage Vbn, magnitude : %f \nphasor Voltage Vbn, angle in degree : %f \n', Vbn_abs, Vbn_ang)
93
fprintf('Phasor voltage Vcn, magnitude : %f \nphasor Voltage Vcn, angle in degree : %f \n', Vcn_abs, Vcn_ang) : النتابج التً حصلنا علٌها بعد التطبٌق Phasor voltage Van, magnitude : 99.875532 phasor Voltage Van, angle in degree : 132.604994 Phasor voltage Vbn, magnitude : 122.983739 phasor Voltage Vbn, angle in degree : -93.434949 Phasor voltage Vcn, magnitude : 103.134238 phasor Voltage Vcn, angle in degree : 116.978859 ممٌزات الشبكة: ً رابعا . y(t) وخرجx(t) الشكل ٌبٌن شبكة خطٌة لها دخل
ٌمكن تمثٌل هذه الدخل والخرج فً هذه الشبكة بالمعادلة التفاضلٌة + ….. +
+
(
94
+ (
+
=
+ ….. +
+ ثوابت حقٌقٌة
+
,
,…….,
+ ,
,
: حٌث ,……..,
باالنتقال إلى مستوي البالس تصبح المعادلة التفاضلٌة + …… + + ) = + …… + + )
وبالتالً فإن التابع الذي ٌعبر عن الشبكة الخطٌة ٌكون بالشكل =
=
وبإعادة ترتٌب تابع الشبكة نحصل على الشكل التالً +
+ …… +
+
=
=
حٌث : : , ……,أقطاب تابع الشبكة. : , …....,رواسب الشبكة. مالحظة : نستعمل تفرٌق الكسور فً تبسٌط التوابع الكسرٌة للحصول على األقطاب والرواسب ونستخدم لذلك التابع residueوالذي له الصٌغة العامة : )[r,p,k] = residue(num,den مثال ()1 = من أجل تفرٌق الكسر المبٌن نكتب ماٌلً : ;]num=[4 3 6 10 20 ;]den=[1 2 5 2 8 )[r,p,k]=residue(num,den النتابج التً حصلنا علٌها عند تنفٌذ البرنامج :
95
وٌمكن العودة بشكل معاكس للتابع األصلً بكتابة : ][num,den] = residue[r,p,k وستكون النتٌجة فً نسقٌن منفصلٌن ,األول ٌمثل معامالت كثٌر الحدود (البسط) والثانً معامالت كثٌر الحدود (المقام). مثال ()2 للدارة المبٌنة بالشكل : -8أوجد تابع الشبكة
=
.
-2أوجد أقطاب ورواسب تابع الشبكة = 10 -3إذا كان )cos(2t + 40
. فأوجد
.
96
الحل : باالنتقال للمستوي الالبالسً تصبح عناصر الدارة كالتالً
=
)
=
|
=
تذكر أن : = 10 40 s = -3 + 2j |s=-3+2j
→ → )=(10 40
= 𝜃 s = 𝜎 + jw
واآلن سنستخدم البٌبة البرمجٌة (ماتالب) من أجل إٌجاد األقطاب والرواسب للتابع clear clc ;]num=[4 6 0 ;]den=[6 25 30 9 )' disp('The zeros are : )z=roots(num )' disp('The poles are : )p=roots(den ;s1=-3+2*j ;)n1=polyval(num,s1 ;)d1=polyval(den,s1 ;vo=10*exp(j*pi*(40/180))*n1/d1
97
vo_abs=abs(vo); vo_ang=angle(vo)*180/pi; fprintf('phasor voltage vo, magnitude : %f \nphasor voltage vo, angle in degrees : %f \n' , vo_abs, vo_ang) : النتابج التً حصلنا علٌها بعد التطبٌق The zeros are : z= 0 -8.5000 The poles are : p= -2.2853 -8.5000 -0.4584 phasor voltage vo, magnitude : 3.453492 phasor voltage vo, angle in degrees : -66.990823 : وبالنتٌجة ٌكون الخرج cos(2t – 66.99)
= 3.45
االستجابة الترددٌة: ً خامسا : تعطى الصٌغة العامة لتابع النقل إلشارة تمثٌلٌة بالمعادلة =
= : توابع نقل شهٌرة مرشح تمرٌر منخفض= مرشح تمرٌر مرتفع=
98
مرشح تمرٌر مجال= مرشح منع مجال= حٌث : , , and
, ,
ثوابث
االستجابة الترددٌة هً استجابة الشبكة إلشارة الدخل الجٌبٌة ,فإذا استبدلنا s=jwقً تابع الشبكة نحصل على : 𝜃
= |s=jw
حٌث : =
𝜃
&
|
|=
بالنسبة للتردد نحصل على االستجابة الترددٌة للطوٌلة وكذلك برسم تغٌرات وبرسم تغٌرات 𝜃 بالنسبة للتردد نحصل على االستجابة الترددٌة للطور. وٌمكننا الحصول على هذه المٌزات باستخدام تابع شهٌر فً الماتالب هو freqs :والذي تعطى )hs = freqs(num,den,range الصٌغة العامة له بالشكل :
99
حٌث : ]num = [bm bm-1 ……. b1 b0 ]den = [an an-1 ……. a1 a0 : rangeمجال التردد للحالة المدروسة : hsاالستجابة الترددٌة بالصٌغة العقدٌة
مثال من أجل الدارة المبٌنة بالشكل : -8بٌن أن تابع النقل ٌعطى بالشكل :
=
=
-2إذا علمنا أن L = 5H, C =1.12µf, and R = 10000Ωبٌن شكل االستجابة الترددٌة. -3إذا جعلنا قٌمة المقاومة R = 100Ωما التغٌر الذي سٌحدث ,بٌن بالرسم
= واآلن سنستعٌن بالماتالب من أجل الرسم ... ;r2=100
=
;r1=10000
=
=
;l=5 ;c=1.25e-6 ;]num1=[r1/l 0 ;])den1=[1 r1/l 1/(l*c ;)w=logspace(1,4
100
h1=freqs(num1,den1,w); f=w/(2*pi); mag1=abs(h1); phase1=angle(h1)*180/pi; num2=[r2/l 0]; den2=[1 r2/l 1/(l*c)]; h2=freqs(num2,den2,w) mag2=abs(h2); phase2=angle(h2)*180/pi; subplot(2,2,1) loglog(f,mag1,'.') title('magniture response R=10K') ylabel('magnitude') subplot(2,2,2) loglog(f,mag2,'.') title('magniture response R=1K') ylabel('magnitude') subplot(2,2,3) semilogx(f,phase1,'.') title('phase response R=10K') xlabel('Frequency,Hz') ylabel('angle in fegrees') subplot(2,2,4) semilogx(f,phase2,'.') title('phase response R=1K') xlabel('Frequency,Hz') ylabel('angle in fegrees')
101
102
النمذجة و المحاكاة باستخدام مكتبة simulink أوالً :مقدمة ... فً هذا الفصل سوف نعرض الخطوات الواجب اتباعها من أجل الحصول على العناصر المناسبة لتشكٌل نموذج المحاكاة باستخدام بٌبة الماتالب بدءاً من فتح صفحة النموذج ( )Modelوحتى تنفٌذ أمر النمذجة. لقد وضعت مجموعة من األشكال الالحقة تبٌن خطوات الحصول على العناصر الالزمة لبناء المودٌل (النموذج) بدءاً من المكتبة , Simulinkحٌث تحتوي هذه المكتبة على مجموعة من المكتبات الفرعٌة وكل مكتبة فرعٌة تضم مجموعة من العناصر التً نستخدمها فً بناء المخطط الصندوقً للمحاكاة.
ثانٌا ً :إظهار محتوٌات بعض المكتبات ... قبل البدء ببناء المخططات الصندوقٌة البد من التعرف على المكتبات الفرعٌة وبعض العناصر الموجودة فً هذه المكتبات تمهٌداً للبدء بعملٌة بناء المخطط (المودٌل) الالزم لعملٌة محاكاة بعض الدارات الكهربابٌة. بعد ذلك ٌمكن االنتقال إلى بناء نماذج أكثر تعقٌداً تمثل عناصر نظم القدرة الكهربابٌة مثل اآلالت الكهربابٌة ,الشبكات ,القواطع ,عناصر إلكترونٌات القدرة الكهربابٌة ....إلخ. بعد استنتاج النموذج الرٌاضً لهذه العناصر ,وفً فصول قادمة سوف نتطرق إلى طرابق أخرى فً بناء النموذج ( )modelدون الحاجة إلى استنتاج النموذج الرٌاضً ,بحٌث ٌتم اختٌار عناصر موجودة فً المكتبات تمثل العناصر الموجودة فً الدارة الكهربابٌة أو فً نظام القدرة الكهربابً المراد دراسته ,وبعد االنتهاء من وضع المودٌل ٌتم إدخال محددات كل عنصر تم اختٌاره من خالل صندوق حوار خاص به. وتبٌن األشكال التالٌة كٌفٌة الوصول إلى المكتبات الخاصة بالماتالب ,كما تعرض لنا بعض العناصر الموجودة ضمن كل مكتبة فرعٌة وٌمكن االطالع على جمٌع العناصر عند تشغٌل البرنامج.
103
...المكاتب فً الماتالب ...
...خطوات فتح صفحة لرسم المخطط الصندوقً ...
104
...محتوٌات بعض مكونات المكاتب الفرعٌة لمكتبة السٌمٌولٌنك ...
...simpower systems library...
105
...Application Library of simpowersystems ...
ثالثا ً :تعرٌف المكتبة أو األداة ... Simulink هً عبارة عن منهج برمجً نستطٌع من خالله نمذجة ومحاكاة وتحلٌل األنظمة الدٌنامٌكٌة سواء الخطٌة وبزمن مستمر أو متقطع ,ولتسهٌل النمذجة توفر المكتبة Simulinkإمكانٌة البرمجة البٌانٌة الصندوقٌة باستخدام الفأرة وبناء التوابع المناسبة ,والوصول للبرمجة ومخطط ٌعبر عن المسألة المطروحة ,وٌمكن أخذ تلك الصنادٌق من مكتبات Simulinkالواسعة والشاملة لكل النماذج الممكنة ,سواء مكتبة المصادر أو مكتبة الخرج أو الكتل المعبرة عن الحاالت الخطٌة و الالخطٌة ,أو أدوات الوصل بٌن تلك الكتل. كما نستطٌع صٌاغة وبناء الكتل الخاصة بنا ,ونستطٌع الولوج إلى داخل الكتلة بالنقر علٌها نقراً مزدوجا ً فتصبح بمستوى برمجً أعمق ,وهكذا ٌمكننا التنقل ضمن مستوٌات مختلفة تعبر عن هٌكلٌة المسألة المطروحة بشكل واضح. بعد بناء المخطط الصندوقً واالنتهاء من ذلك ٌمكن إجراء المحاكاة عن طرٌق التكامل وبطرابق مختلفة ,وكما وٌمكن إظهار النتابج ومراقبتها فً أثناء المكاملة باستخدام صنادٌق الخرج والتً تؤمن خٌارات كثٌرة وطرقا ً عدٌدة إلخراج وإظهار النتابج أو إرسالها لملف أو تخزٌنها ,وسوف
106
نتعرض على بعض الطرابق واإلمكانٌات لبناء المخططات الصندوقٌة الالزمة لمحاكاة بعض الدارات الكهربابٌة من خالل مجموعة من األمثلة. مثال (: )1 جمع عدد من التوابع الجٌبٌة ( )sinو دراسة تأثٌر التوافقٌات على شكل اإلشارة الجٌبٌة الناتجة .
نحتاج فً هذا المثال إلى العناصر التالٌة : -1منبع إشارة .sinwave -2عنصر جمع .sum -3عنصر إظهار إلظهار شكل اإلشارة الناتجة .Scope
والشكل التالً ٌبٌن هذه العناصر وخصابص كل عنصر من هذه العناصر ,حٌث نالحظ أن إشارة الدخل الجٌبٌة ٌتم التعامل معها بالعالقة التالٌة : Out = Amp*sin(Freq*t + Phase) + Bias أما إشارة الجمع sumفٌمكن زٌادة عدد اإلشارات الداخلة إلٌها من خالل التعدٌل فً List of signs وذلك بإضافة إشارات الجمع ( )+بعدد عدد الدخل المرادة.
107
وٌمكن إضافة أي عنصر من العناصر السابقة إلى النموذج الجدٌد الذي نرٌد العمل فٌه بالضغط على العنصر بالزر الٌمٌنً للماوس ومن ثم نختار ( )add to …..لٌفتح لنا صفحة ( )modelجدٌدة تحوي العنصر المضاف. مالحظة
ٌمكن العثور على أي عنصر نرٌد إضافته بكتابة اسم العنصر فً مربع البحث فً أعلى الشاشة ,وبهذه الطرٌقة ال داعً للبحث طوٌالً عن العنصر .
نقوم اآلن بالتعدٌل على اإلشارات الجٌبٌة المراد جمعها وذلك كما ٌبٌن الجدول التالً ... Bias 0 0 0 0 0 0
Freq. 𝜋2 𝜋3*2 𝜋5*2 𝜋7*2 𝜋9*2 𝜋11*2
Amp. 1 1/3 1/5 1/7 1/9 1/11
رقم اإلشارة الجيبيت 1 2 3 4 5 6
بعد ذلك نقوم بالتعدٌل على عدد مداخل عنصر الجمع sumبحٌث ٌكون عدد المداخل مساوي لعدد اإلشارات الداخلة إلٌه وفً مثالنا هذا ( )6وبالتالً نكتب فً مربع الحوار List of signsالعبارة التالٌة ( )|++++++ونضغط موافق فنالحظ تغٌر عدد المداخل. بعد تنفٌذ النموذج ( )modelوترتٌب عناصره نالحظ أن شكل المخطط ٌصبح كما ٌلً
108
نالحظ أننا لو قمنا بتشغٌل النموذج وجعل الزمن كبٌر 10sكما هو مبٌن بالشكل فإن أثر التوافقٌات لن ٌظهر ولذلك فإننا سنقوم بتعدٌل قٌمة الزمن وجعله ٌساوي 2وسنقوم بتشغٌل النموذج.
مثال (: )2 رسم تغٌرات موجة جبٌبة ( )sinبعد ضربها بثابت kومقارنة شكل اإلشارة قبل وبعد ضربها بالثابت. نحتاج فً هذا المثال إلى العناصر التالٌة : -1منبع إشارة .sinwave
109
-2عنصر تكبٌر ٌ( Gainتم تعدٌل قٌمة الثابت فٌه من خصابصه) Scope -3لرسم اإلشارة. ) Mux -4عنصر دمج لإلشارات ,نتحكم بعدد المداخل من خصابصه) بعد إنشاء النموذج والتعدٌل فً قٌمة الثابت Kوتشغٌل النموذج نالحظ من الشكل التالً المخطط و الرسم البٌانً الذي ٌحوي مقارنة بٌن اإلشارة األصلٌة واإلشارة المضروبة بالثابت .k=3
لو أضفنا للنموذج السابق مولد نبضات وقمنا بتشغٌل النموذج ٌكون الشكل كالتالً ....
110
تعرفنا فً هذا الفصل على بعض المكاتب الموجودة فً الماتالب والحظنا من خالل بعض األمثلة البسٌطة كٌف ٌمكن بناء النموذج وكٌف ٌمكن الحصول على نتابجه باستخدام البٌبة Simulinkفً الماتالب.
111
أوالً :تمثٌل نظم التحكم -1المبدل التمثٌلً-الرقمً Analog-to-Digital Converter أحد أهم البلوكات الجاهزة التً تم إضافنا فً اإلصدارات الجدٌدة لمكتبة ( )simulinkهً المبدل التمثٌلً -الرقمً المثالً. والبد من اإلشارة لالنتباه إلعدادات المبدل (البلوك) فً المودٌل حٌث أن بٌانات الخرج لكل من المبدل والساعة ٌجب أن تحدد بالنوع (.)double
112
-2ماسك النظام الصفري ()Zero-order Holdوماسك النظام األول ()First-order Hold لنفرض أن لدٌنا إشارة مستمرة مع الزمن بعرض مجال محدود وٌحدده عرض الحزمة (, )B ولٌكن تحوٌل فورٌٌه له |) |X(wمساوي للصفر من أجل أي قٌمة ل.w > B تنص نظرٌة أخذ العٌنات على أنه إذا تردد إشارة العٌنة wsمساوي أو أكبر من , 2Bفإن اإلشارة )ٌ x(tمكن أن تعاد تماما ً من اإلشارة المعتانة ) xs(tوذلك بتطبٌق ) xs(tعلى مرشح تمرٌر منخفض بعرض حزمة .Bوأٌضا ً ٌمكن استعادة اإلشارة األصلٌة باستخدام دارة ماسك بحٌث تمسك قٌمة اإلشارة المعتانة لزمن nTحتى تصل القٌمة التالٌة فً الزمن .nT + T إن سلوك ماسك الترتٌب الصفري مشابه تماما ً لسلوك مرشح التمرٌر المنخفض ولذلك نستخدم هذه الدارة من أجل استعادة إشارة الزمن المستمرة من اإلشارة المعتانة.
حٌث أن ماسك الترتٌب الصفري ٌولد إشارات دخل مستمرة ) u(tبإمساك كل عٌنة لها قٌمة ثابتة ] u[kخالل زمن عٌنة واحدة ,أما دارة ماسك الترتٌب األول فتستعمل االستٌفاء الخطً بٌن العٌنات.
113
-3التشكٌالت المختلفة للمرشحات الرقمٌة ()Digital Filter تابع النقل ) H(zللمرشح الرقمً المثالً ٌعطى بعدة أشكال ,وأغلب األشكال الشابعة هً التشكلٌة المباشرة األولى والتشكٌلة المباشرة الثانٌة والتوصٌل التسلسلً والتوصٌل التفرعً. التشكٌلة األولى للمرشح الرقمً المثالً ...
)a0X(z) + a1z-1X(z) + a2z-2X(z) + (-b1)z-1Y(z) + (-b2)z-1Y(z) = Y(z 114
)X(z)(a0 + a1z-1 + a2z-2) = Y(z)(1 + b1z-1 + b2z-2 وبالنتٌجة نحصل على تابع النقل للتشكلٌة األولى للمرشح الرقمً المثالً وذلك بالعالقة التالٌة = )H(z إن سٌبة هذه التشكٌلة من المرشحات الرقمٌة أنها تحتاج لسجالت 2kحٌث kتمثل ترتٌب الفلتر(المرشح). التشكٌلة الثانٌة للمرشح الرقمً المثالً ...
تتمٌز هذه التشكلٌة عن السابقة بأنها تحتاج فقط لسجل ٌ kدل علٌها بالعنصر , z-1حٌث أن العنصر ( )z-1فً التشكٌلة الثانٌة ٌتوضع بٌن راسب و قطب. مثال ()8 بٌن إشارتً الدخل والخرج للمرشح الرقمً الذي له تابع النقل = )H(z وذلك بوضع مخطط باالستعانة بالمكتبة (ٌ )Simulinkمثل تابع النقل السابق.
115
ال تنسى أن تضع زمن التنفٌذ .200
مثال ()2 بٌن إشارتً الدخل والخرج للمرشح الرقمً الذي له تابع النقل = )H(z
116
اكتب بسطر األوامر فً الماتالب fxpdemo_direct_form2 :لتحصل على المخطط األخٌر. الوصل التسلسلً للمرشحات الرقمٌة ... من أجل التوصٌل التسلسلً للمرشحات الرقمٌة ٌعطى تابع النقل لهذه التشكلٌة بالعالقة التالٌة )H(z) = H1(z).H2(z) ……. HR(z
117
والشكل التالً ٌبٌن المخطط الصندوقً لنظام مرشح رقمً من الدرجة الثانٌة تابع النقل له هو : = )H(z
مثال ()8 بٌن إشارتً الدخل والخرج لمرشح رقمً موصل بشكل تسلسلً له تابع النقل التالً = )H(z الحل : بعد إعادة تنسٌق تابع النقل وتبسٌطه نحصل على الشكل التالً .... = )H(z
118
مالحظة : بكتابة األمر التالً فً سطر األوامر فً الماتالب fxpdemo_series_cascade_form : نحصل على المخطط الصندوقً للمرشح الرقمً التسلسلً الذي له تابع النقل ) )
() ()
( (
= )H(z
119
ثانٌا ً :تمثٌل ومحاكاة الدارات الكهربائٌة أوالً :النمذجة و المحاكاة لدارة كهربابٌة تسلسلٌة RLC سنبدأ الشرح بمثال بسٌط ومن ثم سنعطً أمثلة أكثر تعقٌداً وهكذا .....
المطلوب وضع المخطط الصندوقً لمحاكاة دارة كهربابٌة تسلسلٌة بسٌطة مكونة من مقاومة و ملف ومنبع تغذٌة متناوب ورسم القٌم العظمى للتوتر و للتٌار واالستطاعة حٌث : L=0.1 H
R=20 Ω
خطوات الحل : -1استنتاج المعادلة التفاضلٌة الواصفة للدارة (النموذج الرٌاضً الواصف للنظام). -2رسم المخطط الصندوقً الالزم إلجراء المحاكاة. -3إدخال معطٌات النظام (تنفذ بعدة طرق). الحل : بما أن الدارة تسلسلٌة فإن معادلة الجهد الواصفة للنظام هً : حٌث :
u = u1 + u2 = R.i + L
u1 التوتر الهابط على المقاومة .R u2 التوتر الهابط على المحارضة .L U التوتر المتناوب المطبق على الدارة الكهربابٌة = نعٌد كتابة المعادلة التفاضلٌة لتصبح بالشكل : ونحصل على قٌمة شدة التٌار المار فً الدارة بإجراء التكامل للمعادلة التفاضلٌة و فرض أن القٌمة االبتدابٌة للتٌار , io=0نحصل على النموذج الرٌاضً النهابً الالزم إلنشاء مخطط المحاكاة للدارة
120
)
الكهربابٌة المفروضة (تسلسلٌة بسٌطة) :
(∫ =
وٌمكن إجراء تعدٌل بسٌط على المعادلة األخٌرة لتصبح :
∫ =
والجدول التالً ٌبٌن المعادالت الواصفة للنظام والتً سنبنً المخطط تبعا ً لها ∫ = u1= R.i u2 = L u = u1 + u2 = R.i + L فً مثالنا هذا نحتاج إلى العناصر التالٌة : -
عنصر تكامل Integratorوٌؤخذ من المكتبة .Continuous مكبر Gainوٌؤخذ من المكتبة .Math عنصر جداء Productوٌؤخذ من المكتبة .Math عنصر الجمع sumوٌؤخذ من المكتبة .Math عنصر مزج Muxوٌؤخذ من المكتبة signals & system منبع متناوب جٌبً sinwaveوتؤخذ من المكتبة .Sources عداد الزمن أو إشارة الزمن وٌؤخذ من المكتبة .Sources وسٌلة إظهار النتابج Scopeوٌؤخذ من المكتبة .sinks عنصر إخراج النتابج بشكل رقمً على صفحة عمل الماتالب بشكل مصفوفة ( to )workspaceوٌؤخذ من المكتبة .sinks إشارة ثابتة أو قٌمة ثابتة Constantوتؤخذ من المكتبة .sources
اآلن بعد أن تم وضع جمٌع العناصر الالزمة على الصفحة (ٌ )modelتم ربط العناصر مع بعضها ,بما ٌتناسب مع المعادلة التفاضلٌة الواصفة للدارة ,بحٌث نحصل فً النهاٌة على النموذج الرٌاضً النهابً جاهزاً إلجراء النمذجة. الختٌار زمن المحاكاة ولٌكن ()0.05secمثالً ٌ ,تم ذلك من خالل األمر simulationفً شرٌط األدوات ومنه اختٌار األمر , Configuration Parametersحٌث صندوق الحوار الناتج ٌحوي مربع إمكانٌة تغٌٌر زمن المحاكاة واختٌار طرٌقة التكامل ,والشكل التالً ٌبٌن مربع الحوار الذي ٌظهر ....
121
وبعد تحدٌد زمن التنفٌذ 0.05ثانٌة ومن ثم تحدٌد نوع التكامل والضغط على موافق ومن ثم تشغٌل النموذج نجد أن نتابج المحاكاة للدارة الكهربابٌة هً كما ٌبٌن الشكل التالً ...
122
طرابق إظهار نتابج المحاكاة ... -1اإلظهار مباشرة على : Scopeهذه الطرٌقة تعطً تصوراً مبدبٌا ً عن تغٌرات اإلشارة وال تعطً التفصٌل الخاصة . -2إرسال النتائج إلى نافذة األوامر ٌ : )simout( to workspaceمكن التحكم بخصابص هذا العنصر بالضغط علٌه بالفأرة نقراً مزدوجا ً فٌظهر مربع الحوار كما بالشكل
123
ما ٌهم من هذه الخصابص هو طرٌقة الحفظ إلى نافذة األوامر فهً ٌمكن أن تكون إما مصفوفة أو بنٌة ( )structureأو بنٌة متغٌرة مع الزمن. الحظ لو أننا اخترنا حفظ على شكل مصفوفة ومن ثم شغلنا النموذج وبعد ذلك توجهنا نحو نافذة األوامر وكتبنا simoutلوجدنا النتابج كما ٌبٌن الشكل التالً ... نالحظ أن هذا البلوك قام بحفظ النتابج الظاهرة لدٌنا كمصفوفة ٌمكننا التعامل معها كٌفما نشاء ,حٌث أن كل عمود من أعمدة المصفوفة ٌمثل متغٌر محدد كالجهد أو التٌار أو االستطاعة .......إلخ
124
-3إرسال النتائج إلى ملف ذي امتداد : matنسمٌه مثالً باالسم ( )s.matوالستدعاء النتابج المخزنة فً هذا الملف بعد انتهاء المحاكاة نعود إلى نافذة الماتالب الربٌسٌة ونكتب : Load s.mat ans فٌعرض لنا الحاسب النتابج على شكل مصفوفة سطرها األول ٌحتوي على الزمن أما باقً األسطر فتحوي باقً اإلشارات ,وذلك كما ٌبٌن الشكل التالً
125
-4إظهار النتائج عن طرٌق العنصر(: )XY Graph تتم إضافة العنصر بحٌث ٌوصل Xمنه إلى الزمن أي إلى مخرج الزمن tوالمدخل الثانً Y ٌوصل اإلشارة التً نرٌد رسمها ثم نفعل العنصر بالضغط علٌه ( , )Clickوالشكل التالً ٌوضح التعدٌالت الواجب القٌام بها من خصابص العنصر و الشكل الناتج عند رسم تغٌرات الجهد للجهد الكلً للدارة من الزمن.
126
-5إظهار النتائج باستخدام العنصر : Display هناك إمكانٌة زود بها البرنامج من أجل إظهار القٌم فً أثناء إجراء عملٌة المحاكاة بشكل أرقام على شاشة العنصر ,حٌث تتم مراقبة التغٌرات فً قٌم اإلشارة وٌتوقف عرض النتابج فً نهاٌة عملٌة المحاكاة عند آخر قٌمة للزمن والقٌم الموافقة لها من اإلشارات. -6إظهار النتائج بطرائق أخرى : -1استعمال الملفات ٌ ,مكن أن ٌشكل ملف لقراءة المحددات للدارة ,وملف آخر إلظهار النتابج ,وٌعطً كل ملف وحده اسما ً منفصالً. -2تشكٌل ملف واحد لقراءة محددات الدارة وإخراج النتابج ,تعد هذه الطرٌقة من أفضل النتابج المتبعة فً عملٌة المحاكاة. وبالنتٌجة أصبح لدٌنا الشكل النهابً للنموذج كالتالً :
مثال غٌر محلول : لٌكن لدٌنا الدارة الكهربابٌة المكونة من العناصر R,L,Cعلى التسلسل ,قٌم معامالتها كماهو مبٌن بالشكل والمطلوب : آ :وضع المخطط الصندوقً الالزم لمحاكاة الدارة وحساب التٌار المار فٌها وإظهاره. ب :كتابة ملف إلدخال المعطٌات وإخراج النتابج.
127
ثانٌا ً :النمذجة و المحاكاة لدارة كهربابٌة تسلسلٌة -تفرعٌة RLC مثال)(1 لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ,علما ً أن توتر الدخل متناوب
f = 50Hz - C = 1000µf - L = 0.1 H - Rs = 50 Ω - Vs= 100v والمطلوب إجراء النمذجة والمحاكاة للدارة ووضع النموذج الرٌاضً للدارة المكافبة للحصول على التٌار الكلً وتٌار كل فرع ,وكتابة ملف إدخال المعطٌات. isالتٌار الكلً. icالتٌار المار فً الفرع الذي ٌحوي سعة فقط. iLالتٌار المار فً الفرع الذي ٌحوي محارضة فقط. وبالنتٌجة فإن التٌار الكلً المار فً الدارة هو iS = iC + iL : ومن تحلٌل الدارة المكافبة وحسب قانون كٌرشوف ( )1لدٌنا : Vs = Vc + is.Rs 128
وحسب قانون كٌرشوف أٌضا ً نجد is = iL + ic : ∫ = Vc )
(∫ =
Vc = L.
or →
∫ = iL
نقوم بتعدٌل زمن التشغٌل للمودٌل لٌصبح ثانٌة واحدة. ملف إدخال المعطٌات.;Rs=50 ;L=0.1 ;C=1000e-6 ;VS_mag=100 ;tdelay=0.05 ;vCo=0 ;iLo=0
129
tstop=0.5; disp('run simulation,type ''return'' when ready') keyboard subplot(3,1,1) plot(simout(:,1),simout(:,2),'k') title('source current') ylabel('iS in A') subplot(3,1,2) plot(simout (:,1), simout (:,3),'k') title('capacitor voltage') ylabel('vC in V') subplot(3,1,3) plot(simout (:,1), simout (:,4),'k') title('inductor current') xlabel('time in sec') ylabel('iL in A')
ً وبالتالworkspace ًبعد كتابة الملف نقوم بتشغٌله فنالحظ أن قٌم جمٌع المتحوالت أصبح ف .أصبح اآلن بإمكاننا تشغٌل المودٌل ) نالحظ شكل أمواج التٌار والتوتر التً تظهر على عنصر اإلظهارt=1( بعد تشغٌل المودٌل. ً هً كما ٌبٌن الشكل التالscope
130
131
مثال)(2 لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ,علما ً أن توتر الدخل متناوب
استنتاج النموذج الرٌاضً للدارة والالزم لحساب التٌارات .i1 , i2 , i3 وضعع مخطعط المحاكعاة العالزم لحسعاب قعٌم التٌعارات i1 , i2 , i3باسعتخدام برنعامج. Matlab كتابة ملف لقراءة المعطٌات وإظهار النتابج.الحـل: استنتاج المعادلة التفاضلٌة الواصفة للدارة (النموذج الرٌاضً) وهً:= = = di1 1 di u R 1 i1 dt 1 ( 1 1 i1 ) i1 dt dt C1 dt L1 L1 L1C1
u1 R1i1 L1
u1 R1 1 i1 i1 dt )dt or L1 L1 L1C1
)(1
( i1
1 1 (u1 R i1 i1 dt )dt L1 C1
)(2
di2 di u R u R 2 2 2 i2 i2 ( 2 2 i2 ) dt or dt dt L2 L2 L 2 L2
i1
u 2 R 2 i 2 L2
1 i2 (u 2 R2 i2 ) dt L2
132
)(3
di3 di u R u R 3 3 3 i3 i3 ( 3 3 i3 ) dt or dt dt L3 L3 L3 L3
u 3 R3 i3 L3
1 i3 (u 3 R3 i3 ) dt L3
حٌث : التوتر المتناوب المطبق على الدارة الكهربابٌة )u=Umsin(wt)=70sin(wt التردد الزاوي بالرادٌان 2𝜋 : نحصل على النموذج الرٌاضً النهابً الالزم i(0) = 0باعتبار القٌمة االبتدابٌة للتٌار تساوي الصفر إلنشاء مخطط المحاكاة للدارة الكهربابٌة: سوف نقوم بوضع المخطط الصندوقً الالزم للنمذجة اعتماداً على المعادالت u1 R1 1 i1 i1 dt )dt L1 L1 L1C1
( i1
u 2 R2 i2 ) dt L2 L2
( i2
u 3 R3 i3 ) dt L3 L3
( i3
133
: ملف المعطٌات % M-file for parallel R L – RLC circuit simulation % input parameters and initial conditions % and plot results of simulation R1 = 20; %R1 = 20 ohms R2 = 4 ; %R2 = 4 ohms R3 = 4 ; %R3 = 4 ohms L1 = 0.2 ; % L1 = 0.2 Henry L2= 0.1 ; % L2= 0.1 Henry L3= 0.3; % L3= 0.3 Henry C = 1000e-6 ; % C = 1000 ?f Vac_mag=70 ; %Volts AC K1= 1/ L1 ; K2 =1 / C ; K3 = R1 ; K4 =1 /L2 ; K5=R2 ; K6=1/L3 ; K7=R3 ;
134
iL1o = 0 ; % initial value of capacitor voltage iL2o = 0 ; % initial value of inductor current iL3o = 0 ; % initial value of inductor current vCo = 0 ; % initial value of capacitor voltage tstop = 0.4; % stop time for simulation disp('run simulation, type ''return'' when ready to return') keyboard subplot(4,1,1) plot(simout(:,1),simout(:,2),'k') title('i1 current') ylabel('i1 in A') grid subplot(4,1,2) plot(simout(:,1),simout(:,3),'k') title('i2 current') ylabel('i2 in A') grid subplot(4,1,3) plot(simout(:,1),simout(:,4),'k') title('i3 current') ylabel('is in A') grid subplot(4,1,4) plot(simout(:,1),simout(:,5),'k') title('Source voltage') ylabel('Vs=u1=u2=u3 in V') xlabel('Time in sec') grid phiurad=0 phi1rad= phiurad - atan(((we*L1)-(1/(we*C1)))/R1) phi1deg=( phi1rad*180)/pi phi2rad= phiurad - atan((we*L2)/R2) phi2deg=( phi2rad*180)/pi phi3rad= phiurad - atan((we*L3)/R3) phi3deg=( phi3rad*180)/pi
135
ثالثا ً :النمذجة و المحاكاة لدارة كهربابٌة مختلطة
136
ٌتم وضع المخطط الصندوقً لمحاكاة للدارة المبٌنةعلى ثالثة مراحل: -8المرحلة األولى :سوف نقوم بتبسٌط الدارة إلى دارة مكافبة أبسط وذلك عن طرٌق تحصٌل الفرعٌن ) (X1 ,R1و ) (X2 , R2وإٌجاد محصلتهما Ze = Re - jXe =3.5-j0.5ذات الطبٌعة السعوٌة بحٌث تصبح الدارة المكافبة من الشكل التالً: d ) (VS Req iS dt
Req=R1+Re
iS Ceq
Ceq=(C1Ce)/(Ce+C1) ,
-2المرحلة الثانٌة :حساب التوتر المطبق على الجزء التفرعً واعتباره منبع تغذٌة لهذا الجزء من الدارة u3 = u2. 1 iS dt u 2 C1
VS R1iS
137
u 2 VS R1iS
1 iS dt C1
حساب التٌارات الفرعٌة نعود إلى الدارة التفرعٌة واعتبار أن المنبع المغذي لها:المرحلة الثالثة-3 : ومنه ٌصبح النموذج الرٌاضً لهذا الجزء من الدارةu3= u2 هو التوتر i3 (
u 3 R3 i3 ) dt L3 L3
i2 C 2
d (u 2 R2 i2 ) dt
% M-file for sires RC+ par.LC+LR circuit simulation % input parameters and initial conditions % and plot results of simulation R1=5; X1=4;we=314;C1=1/(X1*we);R2=3; X2=4; C2=1/(X2*we); X3=3; L3=X3/we; R3=4; Z2=R2-X2*i Z3=R3+X3*i Z=(Z3*Z2)/(Z3+Z2) Re=real(Z) Req=R1+real(Z) Xe=imag(Z) Ce=-1/(imag(Z)*we) Ze=sqrt((real(Z))^2+(imag(Z))^2) Vac_mag=130; K1=R1+real(Z) ; K2 = C1*Ce/(C1+Ce) ; %Ceq =K2= C1*Ce/(C1+Ce)
138
K3 =R1 ; K4=1/C1 ; K5=R3; K6=1/L3 ; K7=C2 ; K8=R2 ; vCo = 0 ; % initial value of capacitor voltage iLo = 0 ; % initial value of inductor current tstop = 0.5; % stop time for simulation disp('run simulation, type "return" when ready to return') keyboard subplot(5,1,1) plot(simout(:,1),simout(:,2),'k') title('source current') ylabel('i1 in A') grid subplot(5,1,2) plot(simout(:,1),simout(:,3),'k') title('current2') ylabel('i2 in A') grid subplot(5,1,3) plot(simout(:,1),simout(:,4),'k') title('Current3') ylabel('i3 in A') grid subplot(5,1,4) plot(simout(:,1),simout(:,5),'k') title('voltage u2=u3') ylabel('u2=u3 in v') grid subplot(5,1,5) plot(simout(:,1),simout(:,6),'k') title('voltage') ylabel('vs in v') xlabel('Time in sec') grid phitotaldeg=0-atan((imag(Ze1)-Xo)/(Ro+real(Ze1)))*180/pi phizedeg=atan(imag(Ze1)/real(Ze1))*180/pi phiu1deg=phitotaldeg+phizedeg phi1deg=phiu1deg-(atan(imag(Z1)/real(Z1))*180)/pi
139
phi2deg=phiu1deg-(atan(imag(Z2)/real(Z2))*180)/pi
:ً باألمر التالsimout إظهار النتابج باستخدام العنصر >> plot(simout(:,1),simout(:,2),simout(:,1),simout(:,3),simout(:,1),simout(:, 4),simout(:,1),simout(:,5),simout(:,1),simout(:,6)),grid
140
phitotaldeg=22.3801,phizedeg=8.1301 phiu2deg=14.2500 , phi2deg=67.3801,phi3deg=-22.6199
141
المراجع العربٌة دار شعاع, المهندس موفق شما, خطوات فً احتراف الماتالب الدكتور, فً الماتالبGUI تنفٌذ وبرمجة واجهات المستخدم الرسومٌة دار شعاع2007 طبعة, المهندس سمٌح ٌوسف العٌسى ) فً نمذجةSimulink – SimPowerSys( استخدام البٌبة البرمجٌةً الدكتور مصطفى الحزوري و الدكتور عل, ومحاكاة الدارات الكهربابٌة 2008 - 2007 طبعة, جامعة دمشق, الجازي المراجع االجنبٌة - Electronics and Circuit Analysis using MATLAB , Ed. John Okyere Attia - Boca Raton : CRC Press LLC, 1999. - Graphics and GUIs with MATLAB - Patrick Marchand and O. Thomas Holland : CRC Press company - Introduction to Simulink with Engineering Applications Steven T. Karris - Orchard Publications - Dynamic simulation of Electric Machinery using MATLAB – Chee mun Ong
142
الفهرس الفصل األول :التعامل مع المصفوفات أوالً :مقدمة ثانٌا ً :العملٌات األساسٌة على المصفوفات ثالثا ً :العملٌات الرٌاضٌة على المصفوفات رابعا ً :عملٌات أخرى على المصفوفات خامسا ً :عملٌات متقدمة على المصفوفات الفصل الثانً :البرمجة غٌر المرئٌة أوالً :مقدمة ثانٌا ً :الحلقات أمر التحكم الشرطً if االختبار switch حلقة while حلقة for عبارة اإلٌقاف break عبارة المتابعة Continue العبارة try ثالثا ً :مالحظات هامة رابعا ً :أمثلة عملٌة الفصل الثالث :الرسم ثنائً البعد 2D أوالً :مقدمة ثانٌا ً :الخصائص الرئٌسٌة للرسم البٌانً ثنائً البعد تعلٌمة الرسم األساسٌة رسم منحنٌٌن على شكل واحد تسمٌة الشكل والمحاور تلوٌن الشكل إنشاء شبكة الكتابة على الشكل أبعاد المحاور
تسمٌة المحاور تسمٌة كل منحنً حسب لونه ثالثا ً :أمثلة عملٌة الفصل الرابع :التوابع الرٌاضٌة الخاصة فً الماتالب أوالً :مقدمة ثانٌا ً :العملٌات الحسابٌة على كثٌرات الحدود إٌجاد جذور كثٌر حدود إٌجاد كثٌر الحدود إنطالقا ً من جذوره حساب قٌمة كثٌر الحدود عند قٌمة معٌنة اشتقاق كثٌرات الحدود تكامل كثٌرات الحدود إٌجاد معادلة كثٌر الحدود المالئم العملٌات الرٌاضٌة على كثٌرات الحدود الفصل الخامس :برامج هندسٌة البرنامج األول :برنامج ٌوضح فرق الطور بٌن اإلشارات الجٌبٌة البرنامج الثانً :التمثٌل الطوري إلشارة جٌبٌة أي رسم القسم الحقٌقً بالنسبة للعقديورسم كل منهما بالنسبة للزمن البرنامج الثالث :برنامج دمج نغمتٌن البرنامج الرابع :تأثٌر الضجٌج على إشارة جٌبٌة البرنامج الخامس :رسم اإلشارة الجٌبٌة قبل وبعد التقوٌم البرنامج السادس :حساب المقاومة المكافئة لدارة مؤلفة من nممانعة بحٌث ٌحددالمستخدم طرٌقة كل ممانعة (تسلسل أم تفرع) البرنامج السابع :رسم كل من القسم الحقٌقً والتخٌلً بالنسبة للتردد للتابع zالموضحبالبرنامج البرنامج الثامن :برنامج لرسم تغٌرات إشارة التوتر المتناوب V(t)=Asin(wt+alpha)+kمع الزمن. جدول ٌوضح أهم األوامر و التوابع فً الماتالب. جدول ٌوضح أهم العملٌات والعالقات فً الماتالب. جدول ٌوضح أهم الرموز فً الماتالب.
الفصل السادس :التحكم بالمنفذ التفرعً أوالً :مقدمة ثانٌا ً :المنفذ التفرعً ثالثا ً :التحكم بالمنفذ التفرعً باستخدام الماتالب رابعا ً :أمثلة عملٌة الفصل السابع :تنفٌذ وبرمجة واجهات المستخدم الرسومٌة فً الماتالب أوالً :مقدمة ثانٌا ً :مفهوم واجهات المستخدم الرسومٌة وكٌف تعمل ثالثا ً :برمجة الواجهات GUI فتح GUIجدٌدة فً محرر التخطٌط محاذاة مكونات GUI عناصر التحكم أهم التعلٌمات المستخدمة فً GUI أهم الخصائص المشتركة لعناصر التحكم سلوك ضبط القٌاس مثال بسٌط رابعا ً :المكونات المتاحة فً GUI خامسا ً :برمجة عناصر التحكمRadio Buttom Pop-up Menus Toggle Buttom Check Boxes Edit Text Sliders List Box سادسا ً :االستدعاءات ماهو االستدعاء Callback أنواع االستدعاءات سابعا ً :البنٌة handles -ثامنا ً :أمثلة عملٌة
الفصل الثامن :تحلٌل الدارات الكهربائٌة أوالً :تحلٌل دارات التٌار المستمر مقدمة تحلٌل نقاط الدارة (قانون كٌرشوف األول) تحلٌل حلقات الدارة (قانون كٌرشوف الثانً) االستطاعة العظمى المنقولة ثانٌا ً :تحلٌل دارات التٌار المتناوب مقدمة دراسة الحالة المستقرة لدارات التٌار المتناوب دارات التٌار المتناوب األحادٌة والثالثٌة الطور ممٌزات الشبكة االستجابة الترددٌة الفصل التاسع :النمذجة والمحاكاة باستخدام مكتبة Simulink أوالً :مقدمة ثانٌا ً :إظهار محتوٌات بعض المكتبات ثالثا ً :تعرٌف المكتبة أو االداة Simulink oأوالً :تمثٌل نظم التحكم oثانٌا ً :تمثٌل ومحاكاة الدارات الكهربائٌة المراجع العربٌة و األجنبٌة