Professional Documents
Culture Documents
)Matricname(m,n
1
-استدعاء عنصر من المصفوفة عن طرٌق ترتٌبه.
)A(8 ans = 5
)A(1 ans = 7
حٌث ٌتم العد حسب الترتٌب من أعلى العمود إلى اسفله وبالترتٌب.
)A(:,4
-استدعاء السطر الثانً الذي ٌحوي العناصر الثالثة األخٌرة منه (دون العنصر األول).
)A(2,2:4 ans = 5 6 7
-إضافة عمود جدٌد للمصفوفة الجدٌدة بحٌث ٌكون العنصر األخٌر من السطر الثالث مساوي9
A(3,6) = 9فتصبح المصفوفة كما هو مبٌن
2
-حذف العمود الثانً من المصفوفة الجدٌدة.
] [ = ) A(:,2فتصبح المصفوفة كما هو مبٌن
مالحظة :
3
ثالثا ً :العملٌات الرٌاضٌة على المصفوفات.
بفرض لدٌنا المصفوفات A,Bونرٌد إجراء عملٌات الجمع والطرح والضرب والقسمة ...إلخ علٌها
فتكون كالتالً :
4
خامسا ً :عملٌات متقدمة على المصفوفات.
استعمال مؤشر المصفوفة مع إحداثٌات من عناصر المصفوفة ...
)c(3:-1:1,: = ans
)]c(:,[3,4,3,4 = ans
)c([3,1,3,2],: = ans
5
التعامل مع المصفوفة وتغٌٌر شكلها وتعٌٌن حجمها ...
k(:)’ -
= ans
-إعادة تشكٌل المصفوفة بحٌث عدد األسطر ( )mوعدد األعمدة (. )n
)reshape (matrix name ,m,n
مثال :
)reshape(k,4,3 = ans
)reshape(k,2,6 = ans
)rot90(k = ans
6
)length(k ans = 4
b*a = ans
مالحظة :
لجعل العملٌة عملٌة ترتٌبٌة أي معاملة كل عنصر بالعنصر المناظر له فقط ٌ ,جب وضع نقطة قبل
رمز العملٌة المراد إجراؤها سواء كانت قسمة أو ضرب أو رفع لقوة ...
-الجداء
a.*b = ans
-القسمة
a./b = ans
7
-الرفع لقوة
a.^b = ans
مالحظات :
-إنشاء مصفوفة متزاٌدة خطٌا ً معلوم عدد عناصرها ...
)linspace(a,b,c
)logspace(a,b,c
مثال:
)sum(v = ans
8
)sum(v,2 = ans
)diag(v = ans
)sum(ans هذه هً عناصر القطر للمصفوفة السابقة وإلٌجاد مجموعها ans = 15 :
9
البرمجة غٌر المرئٌة
عبارة 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
end
تنفذ حلقة whileعبارة أو مجموعة من العبارات بشكل متكرر طالما أن قٌمة عبارة التحكم تساوي
الواحد (أي عبارة التحكم أو الشرط محقق) و إذا كانت عبارة التحكم مصفوفة فٌجب أن تحقق جمٌع
عناصر المصفوفة الشرط لٌستمر الحساب.
11
.4حلقة : Forالشكل العام
for variable = expression
statements
end
تقوم هذه العبارة بإٌقاف تنفٌذ حلقة Forأو حلقة whileعند وضعها ضمن الحلقة ...وتتوضح هذه
العبارة أكثر باألمثلة.
تقوم هذه العبارة بوقف التكرار الحالً للحلقة وٌبدأ فً التكرار التالً له بمعنى أن الحلقة تستمر
بالعمل لكن عند تعرضها لهذه التعلٌمة ستقوم بتجاهل التعلٌمات التً تحتها وتعود لمتابعة الحلقة ...
وتتوضح هذه العبارة اكثر باألمثلة.
مالحظات :
- 1العبارة returnتنهً تسلسل تنفٌذ األوامر فً اإلجراء وتحول القٌادة إلى البرنامج الربٌسً
وبشكل عام عندما تنتهً أوامر اإلجراء فإن القٌادة بشكل آلً تنتقل إلى البرنامج الربٌسً ولكن
ٌمكن وضع هذه التعلٌمة فً أي مكان من اإلجراء إلعادة القٌادة قسرٌا ً إلى البرنامج الربٌسً.
12
– 2إظهار رسالة الخطأ على الشاشة ٌتم بواسطة تابع الخطأ بالشكل :
)’error(‘error_message
حٌث عند استدعاء رسالة الخطأ من قبل البرنامج فإن البرنامج ٌظهر العبارة الموضحة بٌن
إشارات التنصٌص.
ٌ – 3مكن إدخال المعلومات إلى البرنامج أثناء تنفٌذ ملف mوذلك باستخدام التابع input
بالشكل :
)’n = input(‘Prompt_string
حٌث ٌظهر على الشاشة سلسلة الحروف بٌن إشارتً التنصٌص.
ٌ – 4مكن التوقف أثناء تنفٌذ البرنامج لمراجعة نتابج الحسابات أو لفحص المخططات ولتحقٌق
ذلك نستعمل األوامر
Pauseبدون مضمون هذا ٌسبب توقف البرنامج حتى ٌضغط المستخدم أي زر من لوحة
المفاتٌح.
) Pause(nهذا ٌسبب توقف البرنامج لمدة nثانٌة .
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
19
end
end
هذا البرنامج عبارة عن لعبة مسلٌة ٌقوم فٌها البرنامج بتخزٌن رقم وٌطلب من الالعب إدخال قٌمة
للرقم الموجود فً ذاكرة البرنامج لٌخبره إن كان الرقم أصغر أو أكبر أو ٌساوي الرقم المخزن فً
الذاكرة ,وبعد إدخال الرقم الصحٌح ٌعطً البرنامج عدد المحاوالت التً قام بها الالعب حتى
توصل للرقم الصحٌح.
تعلٌمة randpermتقوم بتولٌد أرقام وبترتٌب عشوابً والرقم األعظمً لهذه األرقام ٌحدد من قبل
المستخدم وٌرمز له فً برنامجنا هذا .c
20
الرسم ثنائً البعد 2D
أوالً :مقدمة ...
سنتعرض فً هذه الجلسة لدراسة أهم األوامر التً تتعلق بالرسم ثنابً البعد فً الماتالب وطرق
المعالجة والتنسٌق للرسوم البٌانٌة.
ثانٌا ً :الخصائص الرئٌسٌة للرسم البٌانً ثنائً البعد فً الماتالب ...
)plot(Y
)plot(X1,Y1,….
)plot(X1,Y1,LineSpec,….
)…plot(…,’PropertyName’,PropertyName,
)…plot(axes_handle,
)…(h = plot
)…hlines = plot(‘v6’,
ومن الخصابص اإلضافٌة لهذه التعلٌمة أٌضا ً :
تحدٌد عرض الخط (سماكة) LineWidth :
تحدٌد لون حواف العالمات الممٌزة MarkerEdgeColor :
تحدٌد لون العالمات الممٌزة MarkerFaceColor :
تحدٌد قٌاس العالمة الممٌزة MarkerSize :
مثال :
21
مالحظة :إعطاء قٌم متقاربة للمتغٌر ٌ xجعل دقة الرسم أعلى .
الجداول التالٌة توضح الرموز الدالة على األلوان والرموز الدالة على خطوط الرسم والرموز الدالة
على نماذج العالم والمستخدمة فً تعلٌمة الرسم جسم التابع plotوالتً سنراها فً أمثلة الحقة.
الرمز اللون
c Cyan أخضر مزرق
m Magenta ارجوانً
y Yellow أصفر
k Black أسود
b Blue أزرق
r Red أحمر
G Green أخضر
22
بدون خط رسم None
.............................. "":
-.-.-.-.-.-.-.-.-.- "".-
الداللة الرمز
إشارة جمع +
دابرة O
نجمة *
نقطة .
مثلث رأسه للٌمٌن >
مثلث رأسه للٌسار <
مثلث رأسه لألعلى ^
وهناك أٌضا ً نماذج أخرى ٌمكن اإلطالع علٌها من خالل أمر المساعدة إذا دعت الحاجة لها.
23
)'ylabel('y
ٌأخذ التابع أول قٌمة من التابع yوٌأخذ xرقم العنصر أي كأنك كتبت plot(1:length(z),z) :
أما لو كانت zعقدٌة فإنه ٌرسم القسم العقدي بالنسبة للقسم الحقٌقً.
24
الجدول الموضح فً األعلى ٌوضح رموز األلوان التً نرٌد الرسم فٌها.
إن األمر ٌ grid onعطٌك شبكة حسب تقسٌمات المحاور وإلزالة الشبكة مرة أخرى نكتب
. grid off
)’text(5,0.1,’sin نستطٌع كتابة أي نص على الرسم وذلك بتحدٌد إحداثٌاته فقط :
)’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
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هو التابع الخاص فً الماتالب الذي ٌمكن عن طرٌقه إٌجاد جذور كثٌر حدود ,
حٌث ٌعطً هذا التابع جذور كثٌر الحدود على شكل شعاع عمود وعناصر هذا الشعاع هً جذور
كثٌر الحدود.
30
مثال (: )2
%f(t) = 7t^3+5t^2-3t^1+10
;]A = [7 5 -3 10
)A_roots = roots(A
باستخدام التابع الخاص ٌ polyمكن إٌجاد كثٌر حدود إنطالقا ً من جذوره ,أي أن وظٌفة هذا التابع
معاكسة تماما ً للتابع سابق الذكر.
)poly(ans
31
)poly(ans
نالحظ من المثال الثانً أن هناك كثٌر حدود غٌر كثٌر الحدود الذي ادخلناه أوالً له نفس الجذور ,
وبالتالً لٌس بالضرورة الحصول على التابع المدخل مسبقا ً عند استدعاء (إعادة تولٌد) كثٌر الحدود
الجدٌد من التابع ( , )polyكمال هو جدٌر بالذكر أنه هذا تابع فٌه نسبة خطأ ال تتجاوز
( )1/1000000قد تظهر فً بعض الحاالت.
تتم هذه العملٌة فً الماتالب باستخدام التابع الخاص ) polyval(p,xحٌث ٌعبر pالنسق
(المصفوفة) الممثل لكثٌر الحدود ,والرمز ٌ xعبر عن قٌمة المتحول المراد حساب كثٌر الحدود
عنده.
كما ٌمكن بطرٌقة ثانٌة إٌجاد قٌمة كثٌر الحدود ألجل قٌمة معٌنة باستخدام التابع الخاص subs
وباالستعانة بالتعلٌمة symsحٌث ٌقوم هذا األخٌر بتحوٌل قٌمة المتحول xإلى رمز ٌمكن التعامل
معه من قبل البرنامج والتعرف علٌه ,واألمر subsالذي ٌقوم بحساب القٌمة لكثٌر الحدود عند قٌمة
المتحول المطلوبة (أي أن التعلٌمة symsوظٌفتها تعرٌف المتغٌر )x
32
;gx = x^2 + x + 1
)subs(gx,3
ans = 13
ٌمكن إٌجاد مشتق كثٌر حدود باستخدام التابع polyderوتكون النتٌجة عبارة عن كثٌر حدود ٌمثل
مشتق كثٌر الحدود األصل.
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
من المعروف أن االشتقاق هو عملٌة معاكسة لالشتقاق ,وٌمكننا التابع polyintالموجود فً المكتبة
الرٌاضٌة فً الماتالب من إٌجاد تكامل تابع من خالل إدخال معامالت كثٌر الحدود بشكل
نسق(مصفوفة) كما سبق فً األمثلة السابقة .
مثال :
المطوب إٌجاد تكامل كثٌر الحدود ( )6x2+10x-6من أجل ثابت تكامل k = -5
;]p =[6 10 -6
;k = -5
)gx = polyint(p,k
= gx
كما ٌمكن إٌجاد تكامل كثٌر الحدود باستخدام symsوالتابع intوذلك بشكل ٌماثل التابع diff
إلٌجاد المشتق ....
)int(gx
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,'-
36
]D = A - [0,0,B
=C
=D
اما عملٌة الجداء فٌمكن القٌام بها باالستعانة بالتابع convمختصر كلمة (, (Convolution
حٌث باستخدام هذا التابع ٌتم الحصول على جداء كثٌرات الحدود بشرط أن تعرف كثٌرات الحدود
بأنساق موافقة ومعبرة عن معامالتها.
)conv(A,B )%conv(B,A
= ans
= 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وتكمن وظٌفة هذا التابع فً حساب االنحراف المعٌاري.
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
: البرنامج الثامن
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-
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
.وبهذه الطرٌقة ٌمكننا التمٌٌز بٌن أرجل المعطٌات و أرجل التحكم و األرجل المؤرضة
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عدد مرات تكرار البرنامج.
53
01000000 64 6
10000000 128 7
إن التعلٌمة pauseهً تعلٌمة تأخٌر زمنً واحدته الثانٌة فتحدد له كم ثانٌة ترٌد التأخٌر حتى تلحظ
التغٌٌرات على اللٌدات.
والتعلٌمة األخٌرة فً البرنامج هً من أجل إطفاء جمٌع اللٌدات بعد إنهاء البرنامج.
مثال()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( مثال
55
تنفٌذ وبرمجة واجهات المستخدم الرسومٌة فً الماتالب
Graphic User Interface
أوالً :مقدمة ...
إن المشكلة التً كانت تواجه مستخدمً الماتالب قدرته الضعٌفة على العرض وإبراز العمل ,ولذلك
فإن الكثٌر من المبرمجٌن كانوا ٌعتمدون علٌه فً الحساب وتنفٌذ وحل المشاكل الرٌاضٌة .ثم
ٌستخدمون نتابجه فً برامج أخرى مثل Visual Basicمثالً .
فً النسخ الحدٌثة من الماتالب ظهرت وبقوة فكرة إدخال عملٌة بناء الواجهات فً الماتالب وهو ما
ٌعرف بواجهات المستخدم الرسومٌة ,إن هذه الواجهات جعلت من برنامج الماتالب برنامجا ً متكامالً
من حٌث السهولة فً البرمجة وحل المسابل والقدرة على عرض وإظهار النتابج بشكل رابع ,
وإنشاء بٌبة تفاعلٌة بٌنه وبٌن المستخدم.
56
ثالثا ً :برمجة الواجهة ... GUI
عندما تقوم بتخزٌن تخطٌط واجهتك ,فإن GUIDEوبشكل أوتوماتٌكً ٌولد ملف ماتالب ()M-file
الذي تستطٌع أن تستخدمه للتحكم بكٌفٌة عمل .GUIإن ملف ماتالب ( )M-fileهذا ٌؤمن شٌفرة
لتهٌبة الواجهة وٌتضمن إطار عمل الستدعاءات الواجهة ( GUIاإلجرابٌات التً تنفذ بالتجاوب مع
األحداث المولدة من المستخدم مثل نقر الفأرة)ٌ .مكنك باستخدام محرر ملف ( )M-fileإضافة شٌفرة
إلى االستدعاءات إلنجاز المهام التً نرٌد أن نفعلها ,وسٌتوضح ذلك أكثر فً األمثلة .
شغل GUIDEبكتابة الكلمة guideعلى موجه الماتالب ,هذا سٌعرض مربع البداٌة السرٌعة
للدلٌل ( , )Guide Quick Startعند ظهور مربع الحوار سابق الذكر اختر خٌار GUIفارغة
() )Blank GUI(defaultانقر OKلعرض الواجهة الفارغة فً محرر التخطٌط.
57
الحظ أن المكونات معروضة فً الشكل باالسم وٌمكن عرضها حسب الرمز وذلك من خالل
التفضٌالت File >>> Preferencesومن ثم كما بالشكل
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
.2تعلٌمة : setهذه التعلٌمة مقابلة لعمل getفهً تقوم بوضع أو تغٌٌر خاصٌة معٌنة ما
برمجٌاً.
)set(handles.buttonname,ꞌpropertyꞌ,variablename
.3تعلٌمة : globalملف البرمجة ٌحوي على العدٌد من التوابع لكن هذه التوابع مستقلة أي أن
المتغٌرات الموجودة فً functionما ال تؤثر على المتغٌرات الموجودة فً اآلخر
(المتغٌرات المحلٌة) حتى لو كانا ٌملكان نفس االسم فلذلك أحٌانا ً نرٌد تصدٌر قٌمة المتغٌر
من تابع آلخر فنلجأ لجعل هذا المتغٌر عالمً أو شامل وذلك باستخدام هذه التعلٌمة.
.2الخاصٌة : tagوهً خاصٌة موجودة فً كل عناصر التحكم وهو عبارة عن اسم التابع
المسؤول عن برمجة الزر.
61
.3الخاصٌة : Visibleوهً خاصٌة تمكن من إظهار أو إخفاء العناصر (المكونات) وهً مفٌدة
فً الحاالت التً ٌكون فٌها عدد كبٌر من الحاالت وعندها ننشا لوحة لكل حالة ونجعلها
مخفٌة من هذا الخٌار ومن ثم نظهرها عندما نحتاجها.
: Non-resizable ال ٌستطٌع المستخدم فً هذه الحالة تغٌٌر قٌاس النافذة (حالة افتراضٌة)
ٌ : Proportional قوم الماتالب فً هذا الخٌار وبشكل أوتوماتٌكً بضبط قٌاس مكونات
الواجهة بشكل نسبً مع قٌاس نافذة الشكل الجدٌد.
ٌ(Other ستخدم : )ResizeFcnتتم برمجة الواجهة بحٌث ٌتم ضبط المكونات بطرٌقة
معٌنة عندما ٌقوم المستخدم بإعادة ضبط قٌاس الشكل.
وٌمكن الوصول لهذه الخٌارات للضبط من خالل Tools >> GUI option
62
مالحظات حول البرنامج :
ٌ .1جب االنتباه دوما ً لخاصٌة Tagالخاص بكل كابن فً الواجهة وذلك لكً نستطٌع التعامل عند
كتابة الكود الخاص بالواجهة أو Callbackالخاص بالكابن المسؤول عن تنفٌذ البرنامج.
.2الحظ كٌف ساستخدم األمرٌن setو getحٌث ٌقوم البرنامج بأخذ القٌمتٌن x,yومن ثم ٌعطً
القٌمة sumللكابن sumالمسؤول عن إظهار النتٌجة.
.3الكود البرمجً المسؤول عن العملٌة المطلوبة من البرنامج (هنا الجمع) نضعها فً تابع الزر
(الكابن) المسؤول عن تنفٌذ العملٌة المطلوبة.
بعد كتابة guideفً النافذة الربٌسٌة لبرنامج الماتالب واختٌار نافذة جدٌدة ٌظهر لنا الشكل التالً :
63
فً هذا البرنامج نحن بحاجة إلى الكابنات التالٌة :
بعد إضافة عنصر 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نفسها.
إن االستدعاء عبارة عن التابع الذي تكتبه وترفقه مع مكونة GUIمحددة أو مع شكل الواجهة
, GUIإنه ٌتحكم بالواجهة GUIأو سلوك المكونة عن طرٌق إنجاز بعض األفعال بالتجاوب
مع الحدث المطبق على المكونة ٌ ,دعى هذا النوع من البرمجة غالبا ً بالبرمجة المقادة
بالحدث .event-driven Programming
عندما ٌحدث حدث للمكونة ,فإن الماتالب ٌستحضر استدعاء المكونة التً طلب فً الحدٌث
,وٌمكن أن تكون المكونة أي وسٌلة تحكم مثل زر ضغط أو مربع قابمة أو منزلقة كما ٌمكن
أن تكون أٌضا ً قابمة أو لوحة أو مجموعة أزرار.
70
إن شكل الواجهة وكل نوع من المكونات ٌقبل انواعا ً محددة من االستدعاءات والتً ٌمكن
إرفاقها معها .واالستدعاءات التً تكون متاحة ألي مكونة تكون معرفة بخواص هذه المكونة.
ٌملك كل نوع من االستدعاءات آلٌة تنفٌذ أو حدث ٌسبب استدعاءه والجدول التالً ٌسرد
الخواص االستدعابٌة التً ٌتٌحها GUIDEمع أحداث تنفٌذها والمكونات التً تطبق علٌها.
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حٌث تمرر كوسٌط دخل لكل
االستدعاءات وتمكن استدعاءات الواجهة من مشاركة قٌم الخاصٌة ومعطٌات التطبٌق.
73
-باإلضافة إلى الكابنات اإلضافٌة المساعدة مثل النص الستاتٌكً واللوحات ....
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
تحلٌل الدارات الكهربائٌة
أوالً :تحلٌل دارات التٌار المستمر
أوالً :مقدمة
فً هذا الفصل سنعتمد على الطرابق المختلفة المعتمدة فً حساب التٌارات والتوترات فً دارات
التٌار المستمر ,ومن ثم سنعتمد على برنامج الماتالب من أجل حل التوابع المعقدة التً ٌصعب
الوصول لنتابجها بدون الحاسب.
مثال :
المطلوب إٌجاد كمونات العقد للدارة المبٌنة بالشكل التالً
+ –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
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
83
مثال :
المطلوب حساب قٌمة التٌار المار عبر المقاومة RBومن ثم إٌجاد االستطاعة التً ٌؤمنها منبع الجهد
( , )10vوذلك للدارة الموضحة بالشكل الموضح
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
وٌمكن استخدام الماتالب لمراقبة تغٌٌر الجهد وتبدٌد الطاقة فً الحمولة وذلك تبعا ً لقٌمة مقاومة
.الحمل
والمطلوب رسم, كٌلواوم50 إلى0 فً الدارة األخٌرة لنفرض أن قٌمة مقاومة الحمل تتغٌر من
. =10KΩ حدد االستطاعة العظمى على الحمل عندما, تغٌٌرات االستطاعة فً الحمل
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
ثانٌا ً :تحلٌل دارات التٌار المتناوب
أوالً :مقدمة فً هذه الجلسة سندرس دارات التٌار المتناوب وسنستعٌن بالتكامل العددي للحصول
على القٌم الوسطٌة لالستطاعة .سنتطرق بعد ذلك لتحلٌل الدارات ثالثٌة الطور وذلك بتحوٌلها لمجال
التردد ومن ذلك االستعانة بقوانٌن كٌرشوف لحل الدارة .ولما سبق سنعتمد على المصفوفات من أجل
حسابات التوترات والتٌارات .وسنستعٌن بتوابع كثٌرة فً الماتالب سٌكون لها دور كبٌر فً تسهٌل
الحسابات.
ثانٌا ً :دراسة الحالة المستقرة لدارات التٌار المتناوب
∫ √= ∫ √=
= =
√ √
88
ˈquad & quad8ˈ functions
مالحظة
ٌوفر الماتالب هاذٌن التابعٌن من أجل إجراء التكامل ألي تابع والصٌغة العامة
للتابعٌن هً ....
∫=q
)quad(ˈfunctˈ,a,b,tol,trace
)quad8(ˈfunctˈ,a,b,tol,trace
حٌث :
مثال :
والمطلوب تحدٌد القٌمة الوسطٌة للطاقة والقٌمة اللحظٌة للتوتر وكذلك معامل االستطاعة وذلك
بالطرٌقتٌن التحلٌلٌة والرٌاضٌة.
من أجل ذلك نكتب الكود البرمجً التالً فً ملف 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
w = 10 rad/s
وبعد ترتٌب عناصر المعادالت الثالثة األخٌرة وإعادة تنسٌقها نحصل على المصفوفة التالٌة ...
91
[ ][ ] = [ ]
(2) مثال
92
110 -120 = (1 – 2j) + (3 + 4j) → 110 -120 = (4 + 2j)
[ ] [ ]=[ ]
= inv(Z)*V
VAN = (5 + 12j)
VBN = (3 + 4j)
VCN = (5 - 12j)
93
fprintf('Phasor voltage Vcn, magnitude : %f \nphasor Voltage Vcn,
angle in degree : %f \n', Vcn_abs, Vcn_ang)
+ + ….. + +
: حٌث
ثوابت حقٌقٌة , ,……., , , ,……..,
94
وبالتالً فإن التابع الذي ٌعبر عن الشبكة الخطٌة ٌكون بالشكل
= =
مثال ()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
الحل :
باالنتقال للمستوي الالبالسً تصبح عناصر الدارة كالتالً
واآلن سنستخدم البٌبة البرمجٌة (ماتالب) من أجل إٌجاد األقطاب والرواسب للتابع
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
= =
: توابع نقل شهٌرة
مرشح تمرٌر منخفض-
=
مرشح تمرٌر مرتفع-
=
98
-مرشح تمرٌر مجال
=
-مرشح منع مجال
=
حٌث :
االستجابة الترددٌة هً استجابة الشبكة إلشارة الدخل الجٌبٌة ,فإذا استبدلنا 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االستجابة الترددٌة بالصٌغة العقدٌة
مثال
من أجل الدارة المبٌنة بالشكل :
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حٌث تحتوي هذه المكتبة على مجموعة من
المكتبات الفرعٌة وكل مكتبة فرعٌة تضم مجموعة من العناصر التً نستخدمها فً بناء المخطط
الصندوقً للمحاكاة.
103
...المكاتب فً الماتالب ...
104
...محتوٌات بعض مكونات المكاتب الفرعٌة لمكتبة السٌمٌولٌنك ...
105
...Application Library of simpowersystems ...
هً عبارة عن منهج برمجً نستطٌع من خالله نمذجة ومحاكاة وتحلٌل األنظمة الدٌنامٌكٌة سواء
الخطٌة وبزمن مستمر أو متقطع ,ولتسهٌل النمذجة توفر المكتبة Simulinkإمكانٌة البرمجة
البٌانٌة الصندوقٌة باستخدام الفأرة وبناء التوابع المناسبة ,والوصول للبرمجة ومخطط ٌعبر عن
المسألة المطروحة ,وٌمكن أخذ تلك الصنادٌق من مكتبات Simulinkالواسعة والشاملة لكل
النماذج الممكنة ,سواء مكتبة المصادر أو مكتبة الخرج أو الكتل المعبرة عن الحاالت الخطٌة و
الالخطٌة ,أو أدوات الوصل بٌن تلك الكتل.
كما نستطٌع صٌاغة وبناء الكتل الخاصة بنا ,ونستطٌع الولوج إلى داخل الكتلة بالنقر علٌها نقراً
مزدوجا ً فتصبح بمستوى برمجً أعمق ,وهكذا ٌمكننا التنقل ضمن مستوٌات مختلفة تعبر عن
هٌكلٌة المسألة المطروحة بشكل واضح.
بعد بناء المخطط الصندوقً واالنتهاء من ذلك ٌمكن إجراء المحاكاة عن طرٌق التكامل وبطرابق
مختلفة ,وكما وٌمكن إظهار النتابج ومراقبتها فً أثناء المكاملة باستخدام صنادٌق الخرج والتً
تؤمن خٌارات كثٌرة وطرقا ً عدٌدة إلخراج وإظهار النتابج أو إرسالها لملف أو تخزٌنها ,وسوف
106
نتعرض على بعض الطرابق واإلمكانٌات لبناء المخططات الصندوقٌة الالزمة لمحاكاة بعض
الدارات الكهربابٌة من خالل مجموعة من األمثلة.
مثال (: )1
جمع عدد من التوابع الجٌبٌة ( )sinو دراسة تأثٌر التوافقٌات على شكل اإلشارة الجٌبٌة الناتجة .
نحتاج فً هذا المثال إلى العناصر التالٌة :
-1منبع إشارة .sinwave
-2عنصر جمع .sum
-3عنصر إظهار إلظهار شكل اإلشارة الناتجة .Scope
والشكل التالً ٌبٌن هذه العناصر وخصابص كل عنصر من هذه العناصر ,حٌث نالحظ أن إشارة
الدخل الجٌبٌة ٌتم التعامل معها بالعالقة التالٌة :
أما إشارة الجمع 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وسنقوم بتشغٌل النموذج.
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للمرشح الرقمً المثالً ٌعطى بعدة أشكال ,وأغلب األشكال الشابعة هً
التشكلٌة المباشرة األولى والتشكٌلة المباشرة الثانٌة والتوصٌل التسلسلً والتوصٌل التفرعً.
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 :لتحصل على المخطط األخٌر.
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 التوتر المتناوب المطبق على الدارة الكهربابٌة
120
(∫ = ) الكهربابٌة المفروضة (تسلسلٌة بسٌطة) :
∫ = وٌمكن إجراء تعدٌل بسٌط على المعادلة األخٌرة لتصبح :
والجدول التالً ٌبٌن المعادالت الواصفة للنظام والتً سنبنً المخطط تبعا ً لها
∫ =
u1= R.i
u2 = L
u = u1 + u2 = R.i + L
121
وبعد تحدٌد زمن التنفٌذ 0.05ثانٌة ومن ثم تحدٌد نوع التكامل والضغط على موافق ومن ثم
تشغٌل النموذج نجد أن نتابج المحاكاة للدارة الكهربابٌة هً كما ٌبٌن الشكل التالً ...
122
طرابق إظهار نتابج المحاكاة ...
-1اإلظهار مباشرة على : Scopeهذه الطرٌقة تعطً تصوراً مبدبٌا ً عن تغٌرات اإلشارة وال
تعطً التفصٌل الخاصة .
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تشكٌل ملف واحد لقراءة محددات الدارة وإخراج النتابج ,تعد هذه الطرٌقة من أفضل
النتابج المتبعة فً عملٌة المحاكاة.
وبالنتٌجة أصبح لدٌنا الشكل النهابً للنموذج كالتالً :
127
ثانٌا ً :النمذجة و المحاكاة لدارة كهربابٌة تسلسلٌة -تفرعٌة RLC
مثال)(1
لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ,علما ً أن توتر الدخل متناوب
والمطلوب إجراء النمذجة والمحاكاة للدارة ووضع النموذج الرٌاضً للدارة المكافبة للحصول على
التٌار الكلً وتٌار كل فرع ,وكتابة ملف إدخال المعطٌات.
isالتٌار الكلً.
icالتٌار المار فً الفرع الذي ٌحوي سعة فقط.
iLالتٌار المار فً الفرع الذي ٌحوي محارضة فقط.
وبالنتٌجة فإن التٌار الكلً المار فً الدارة هو iS = iC + iL :
ومن تحلٌل الدارة المكافبة وحسب قانون كٌرشوف ( )1لدٌنا :
Vs = Vc + is.Rs
128
وحسب قانون كٌرشوف أٌضا ً نجد is = iL + ic :
Vc = L. or ∫ = Vc
∫ = iL → (∫ = )
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
لٌكن لدٌنا الدارة الكهربابٌة المبٌنة بالشكل ,علما ً أن توتر الدخل متناوب
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
نحصل على النموذج الرٌاضً النهابً الالزم 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
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
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
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
الفهرس
الفصل األول :التعامل مع المصفوفات
-أوالً :مقدمة
-ثانٌا ً :العملٌات األساسٌة على المصفوفات
-ثالثا ً :العملٌات الرٌاضٌة على المصفوفات
-رابعا ً :عملٌات أخرى على المصفوفات
-خامسا ً :عملٌات متقدمة على المصفوفات