Professional Documents
Culture Documents
شرح ماتلاب محمد القاسمي
شرح ماتلاب محمد القاسمي
قناة دليل طلبة الدراسات العليا قسم الهندسة الكهربائية /العراق ع التليغرام م/احمد العزاوي
3HUVRQDOSDJHRQIDFHERRNIRU0DUW\U0XNWDU4DVVPL )RU6XJJHVWLRQ
\DPHQHQ#OLYHFRP
MATLAB R2010 )RU2WKHUERRNVIURP0XNWDU4DVVPL
يتميز MATLABبكونه برنامجا متخصصا ييسر عمل الباحثين والدارسين في مختلف مجاالت
الدراسات العليا وما قبلھا ،فھو يتعامل مع المعادالت الرياضية والتكامالت والتفاضالت والمصفوفات
المختلفة بسرعة وسھولة ،ويعامل األعداد المركبة بنفس الطريقة التي يعامل بھا األعداد
العادية،ويرسم المعادالت الرياضية في اإلحداثيات المختلفة .ويضم المئات من الدوال الجاھزة التي
توفر للمبرمج وقتا وجھدا ويسرا عند إنشاء البرامج بلغة MATLABوفضال عن ذلك فھو يسمح
للمبرمج أن ينشأ ) Graphical User Interfaces (GUIتمكنه من تنفيذ برنامجه وعرضه ونشره
بسھولة ويسر.
Workspace
المتغيرات في MATLAB
المصفوفات
إدخال المصفوفات واستدعاءھا في MATLAB
Photo
while – end
break
M-files
scripts
functions
3D - 2D – Graphics
plotting styles
subplots
multiple figures
Introduction to GUI
:command windowھي الشاشة األساسية للتعامل مع MATLABوالتي يتم من خاللھا كتابة جميع األوامر
:workspaceھي الذاكرة المؤقتة للـ MATLABوالتي يتم فيھا حفظ جميع المتغيرات التي تم استعمالھا إلى
:clcيقوم ھذا األمر بمسح محتويات command windowدون أن يؤثر على محتويات workspace
);( :تقوم الفاصلة المنقوطة بمنع ظھور ناتج األمر في command windowبعد تنفيذه.
a=3 a=5+9
;a=3 ;a=5+9
: ...تستعمل النقاط الثالثة في نھاية األسطر الطويلة إلكمال األمر في السطر التالي
)االسم،األبعاد،الحجم والنوع (
:save myworkيقوم ھذا األمر بحفظ محتويات workspaceفي ملف اسمه ) myworkامتداده (.mat
* :save mywork aحفظ المتغيرات الموجودة في workspaceوالتي يبدأ اسمھا بحرف aفقط
الصلب
* :load mywork aوضع المتغيرات الموجودة في الملف workspaceوالتي تبدأ بحرف aفقط
في workspace
المتغيرات في MATLAB
يجب أن يكون اسم المتغير متكون من كلمة واحدة ال يفصل بينھا مسافة ،فمثال:
myvariableمقبول
my variableغير مقبول
يجب أن ال يزيد اسم المتغير عن 31كلمة ،فـ MATLABيھمل تلقائيا الحروف التي تلي الحرف 31من اسم
المتغير ،فمثال:
يصبح this_is_my_new_variable_in_matlab
this_is_my_new_variable_in_matl
يجب أن يبدأ اسم المتغير بحرف ،ويمكن أن يتبع ھذا الحرف بأي حرف أو رقم
MATLABحساس لحالة الحروف ،أي أن الحرف الصغير يختلف عن الحرف الكبير ،مثال
يوجد لدى MATLABأسماء محجوزة لمتغيرات محددة ينصح بعدم استعمال ھذه األسماء ومنھا:
:ansھو المتغير االفتراضي في MATLABوالذي يتكون في حالة عدم استقبال ناتج تنفيذ أحد األوامر من
:piويساوي .3.14
يمكن للـ MATLABأن يعرض القيم الرقمية للمتغيرات بعدة طرق ،نوضحھا في الجدول التالي وسنأخذ قيمة
إذا كانت عدد األرقام المكونة للعدد أكبر من 5أرقام فان الـ MATLABيقوم تلقائيا بتقريب الرقم . -
أقصى دقة -طريقة عرض األرقام ال تؤثر على دقة الحسابات التي يقوم بھا الـ MATLABداخليا ،فھو يستعمل
ممكنة لديه.
المصفوفات في MATLAB
يتعامل MATLABمع جميع المتغيرات على أنھا مصفوفات ومع األعداد كعناصر في مصفوفة ،فمثال:
عندما نكتب األمر التالي m=4; :يعني ذلك أنني كونت مصفوفة اسمھا mأبعادھا ) (1×1وقيمة العنصر
أما إذا كتبنا األمر التالي ; a=3*6فمعنى ذلك أننا كونا مصفوفة اسمھا aأبعادھا ) (1×1وقيمة العنصر الوحيد
a=[1 4 6 8 9] يكون مصفوفة أحادية اسمھا aأبعادھا ) (1×5ويمكن كتابتھا كالتاليa=[1,4,6,8,9] :
b=[1 2 4 ; 3 5 8] يكون مصفوفة ثنائية اسمھا bأبعادھا ) (2×3ويمكن كتابتھا كالتاليb=[1 2 4 :
;]3 5 8
من طريقة إدخال المصفوفة الثنائية ) (bالحظنا أن الفاصلة المنقوطة );( تفصل بين عناصر الصفوف عن
بعضھا ،أما الفاصلة العادية ) (,في المصفوفة aفال تؤثر على ترتيب العناصر في المصفوفة ووظيفتھا فقط
للتنسيق.
M= 2 3 5 9 1
0 3 6 4 5
1 10 8 6 4
M(6) 10
M(3, 4) 6
-7- م.مختار القاسمي
0932862329
MATLAB R2010
M(3, :) 1 10 8 6 4
M(:, 2) 3
3
10
مثال 2.3ھذا المثال يوضح كيفية إضافة عنصر أو مجموعة عناصر إلى مصفوفة موجودة في workspace
M(:,6)=[3;5;8] M= 2 3 5 9 1 3
0 3 6 4 5 5
1 10 8 6 4 8
M(2,7)=9 M= 2 3 5 9 1 3 0
0 3 6 4 5 5 9
1 10 8 6 4 8 0
M(3,9)=7 M= 2 3 5 9 1 3 0 0 0
0 3 6 4 5 5 9 0 0
1 10 8 6 4 8 0 0 7
M(:,3)=[] M= 2 3 9 1 3 0 0 0
0 3 4 5 5 9 0 0
1 10 6 4 8 0 0 7
M(1,8)=4 M= 2 3 9 1 3 0 0 4
0 3 4 5 5 9 0 0
1 10 6 4 8 0 0 7
المصفوفات القياسية
يوفر MATLABلمستخدميه العديد من المصفوفات القياسية الجاھزة والتي توفر عليھم الكثير من الجھد والوقت
) :eye(kيكون مصفوفة مربعة ) (k×kقيم عناصر المحور تساوي 1وقيم باقي العناصر تساوي 0
: magic يكون مصفوفة مربعة مجموع كل صف يساوي مجموع كل عمود ويساوي مجموع المحور وتكون
: Linspace يكون مصفوفة بھا عدد محدد من القيم محصورة بين رقمين محددين )انظر ملحق دوال
المصفوفات(
: Rand يكون مصفوفة بھا قيم عشوائية محصورة بين 0و 1
دوال المصفوفات
تستعمل ھذه الدوال إلنشاء المصفوفات والتحكم بھا والتعامل معھا :
M´= 2 5 1 N´= 1 4 9
4 6 3 0 7 2
7 8 9 3 5 8
9 3 5
sum(M)= 8 13 24 17 sum(N)= 14 9 6
max(M)= 5 6 9 9 max(N)= 9 7 8
min(M)= 1 3 7 3 min(N)= 1 0 3
flipud(M)= 1 3 9 5 flipud(N)= 9 2 8
5 6 8 3 4 7 5
2 4 7 9 1 0 3
fliplr(M)= 9 7 4 2 fliplr(N)= 3 0 1
3 8 6 5 5 7 4
5 9 3 1 8 2 9
rot90(M)= 9 3 5 rot90(N) = 3 5 8
7 8 9 0 7 2
4 6 3 1 4 9
2 5 1
- 12 - مختار القاسمي.م
0932862329
MATLAB R2010
Symbol Comment
+ addition
- subtraction
* multiplication
^ power
.* Multiplication one by one
.^ Power one by one
\ left division
.\ left division one by one
/ right division
A=[ 1 2 4 5 ; 3 8 9 1 ; 7 4 2 6 ]
B=[ 0 3 7 6 ; 2 9 8 1 ; 5 2 4 9 ]
C=[ 1 6 ; 4 9 ; 3 8 ;7 5 ]
A+B=[ 1 5 11 11 ; 8 17 17 2 ; 12 6 6 15 ]
B-A=[-1 1 3 1 ; -1 1 -1 0 ; -2 -2 2 3 ]
A.*B=[ 0 6 28 ; 6 72 72 ; 35 8 8 ]
A./B=[ inf 0.6667 0.5714 0.8333 ; 1.5 0.889 1.125 1 ; 1.4 2 0.5 1.667 ]
C-1=[0 5 ; 3 8 ; 2 7 ; 6 4 ]
2*C=[ 2 12 ; 8 18 ; 6 16 ; 14 10 ]
- 13 - مختار القاسمي.م
0932862329
MATLAB R2010
: الدوال المثلثية
مع العلم أن الزوايا لديه تقاس بالراديان، الماتالب يقوم بحساب جميع الدوال المثلثية
Symbol Comment
sin Sine
cos Cosine
tan Tangent
asin Inverse sine
acos Inverse cosine
atan Inverse tangent
sinh Hyperbolic sine
cosh Hyperbolic cosine
tanh Hyperbolic tangent
: أمثلة
>> sin(30*pi/180)
ans =
0.5000
>> cosh(60*pi/180)
ans =
1.6003
- 14 - مختار القاسمي.م
0932862329
MATLAB R2010
:Cell Arrays
cellھي مصفوفة من نوع خاص ،فھذه المصفوفة يمكن أن يكون بعض أو جميع عناصرھا مصفوفات ليس من
مثال :يوضح المثال التالي تعريف cellوكيفية إدخال العناصر بعدة طرق مختلفة.
الطريقة األولى:
} ]C(1,1)={ [1 2 3 ; 4 5 6 ; 7 8 9
} C(1,2)={ 4+7i
}’C(2,1)={‘text in cell array
}C(2,2)={12:-2:0
الطريقة الثانية:
]C{1,1}=[1 2 3 ; 4 5 6 ; 7 8 9
C{1,2}= 4+7i
’C{2,1}= ‘text in cell array
C{2,2}=12:-2:0
نالحظ في ھذا المثال أن cellتحتوي على مصفوفة أرقام ثنائية األبعاد ومصفوفة أحادية وكتابة وعدد مركب
ولعرض محتويات cellفي command windowنستعمل الدالة ) ( celldispألنه ال يمكن عرض محتويات
cellمباشرة كما في المصفوفات العادية ،ولكن يمكن عرض كل عنصر منفردا بالطريقة التالية:
C{2,2} 12 10 8 6 4 2 0
وال يمكن تنفيذ العمليات الرياضية على cellsمباشرة ولكن جمع عنصر من cellمع عنصر آخر مشابه له تماما
: األعداد العقدة
c = x + jy
Relational Operators
- 16 - مختار القاسمي.م
0932862329
MATLAB R2010
مثال :
1==20 0|11
2 ~= 3 1 ~1 0
4>21 ~0 1
2>50 ~5 0
8<91 1&1 1
7<30 1&0 0
1 >= 1 1 xor(1,0) 1
يوفر Matlabعدد من الدوال المبنية داخليا لتسھيل التعامل مع كثير الحدود ، Polynomials
حيث يتم تمثيلھا كمتجه ،مثال لتمثيل معادلة كثير الحدود التالية:
ﻓﻤﺜﻼ :
]>> b= [ 5 3 -2 7
)>> [ r p k ]=residue(b,a
الرسومات
يوفر MATLABللمستخدم العديد من الدوال التي تساعده على رسم المصفوفات المختلفة بابعاد مختلفة وعلى محاور متعددة،
x=0:pi/100:2*pi
;)y=sin(x
)plot(x,y
Vertical axis
Horizontal axis
عند تنفيذ األمر plotيقوم MATLABتلقائيا بفتح شاشة رسم تسمى ، figureيقوم بتقسيم االحداثيات بحيث تتناسب مع
;)z=cos(x
;)plot(x,y,a,y
يقوم ھذا األمر برسم كل من ) cos(xو ) sin(xفي نفس figureوعلى نفس المحاور ويقوم MATLABتلقائيا بإعطاء
كل دالة لون يميزھا عن الدالة األخرى ،ويمكن للمستخدم تحديد لون ونوع خط وعالمات الدالة المرسومة )انظر جدول
وباستخدام األمر hold onيمكن أن نرسم دالة أو مصفوفة جديدة على نفس المحاور دون مسح الشكل المرسوم سابقا.
يمكن للمستخدم أيضا أن يضيف عنوان إلى الرسم أو كتابة عنوان لكل من المحور األفقي والعمودي عن طريق األوامر
‘(xlabel ;)‘
‘(ylabel ;)‘
كما يمكن أيضا كتابة تعليق فوق الرسم مباشرة بواسطة األمر )‘ ‘(text
ويوفر MATLABللمستخدم إمكانية إظھار أو إخفاء خطوط التوضيح gridبواسطة grid on , grid off
Subplot:
يمكن من خالل ھذا األمر تقسيم شاشة الرسم figureإلى عدد من األعمدة والصفوف باالضافة إلى تحديد المكان المطلوب
الرسم فيه
) subplot(m,n,pيقوم بتقسيم شاشة الرسم إلى mصف و nعمود ويرسم في المنطقة pحيث يبدأ التقسيم من الجزء
مثال يقوم المثال التالي بتقسيم شاشة الرسم إلى 3صفوف في كل صف 4أعمدة ،ثم يرسم ) y=sin(xفي الجزء الخامس
من الدالة ،ويرسم ) z=cos(xفي العمود األول من الصف الثالث ،والدالة ) w=sin2(xفي العمود الثالث من الصف األول
x=-pi:pi/100:pi ;
y=sin(x) ;
plot (x,y) ;
title (‘Graph of the Sine function’) ;
ylabel (‘ y=sin(x)’);
xlabel (‘ -\pi \leq {\itx} \leq \pi’) ;
text (1,-1/3,‘ Ammar Al-khatib’) ;
x=0:pi/100:2*pi ;
y=sin(x) ;
z=cos(x) ;
plot (x,y,x,z) ;
x=0:pi/100:2*pi ;
y=sin(x) ;
plot (x,y,’--’);
- 22 - مختار القاسمي.م
0932862329
MATLAB R2010
x=0:pi/100:2*pi ;
y=sin(x);
plot (x,y) ;
hold on ;
z=cos(x) ;
plot (x,z) ;
x=0:pi/100:2*pi ;
y=sin(x);
z=cos(x) ;
subplot (2,1,1) ;
plot (x,y) ;
grid on;
title (‘Sine function’) ;
subplot (2,1,2) ;
plot (x,z) ;
grid off;
title (‘Cosine function’) ;
x=-2*pi:pi/100:2*pi ;
y=sin(x);
z=2*cos(x) ;
subplot (2,1,1) ;
plot (x,y,x,z) ;
title (‘plot in same y-axis scale’);
subplot (2,1,2) ;
plotyy(x,y,x,z);
title (‘plot in different y-axis scales’);
- 23 - مختار القاسمي.م
0932862329
MATLAB R2010
subplot(3,1,1) ;
fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi]);
subplot(3,1,2) ;
fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1]) ;
subplot(3,1,3) ;
fplot('sin(1 ./ x)', [0.01 0.1 ],1e-3) ;
- 24 - مختار القاسمي.م
0932862329
MATLAB R2010
x=[1 5 8];
y=[4 9 2];
z=[3 6 7];
a=[2 3 9 7] ;
b=[5 8 6 1] ;
c=[2 4.7 3 9];
subplot (2,2,1) ;
fill (x,y,’r’);
subplot (2,2,2) ;
fill (a,b,’b’) ;
subplot (2,2,3) ;
fill3 (x,y,z,’r’);
subplot (2,2,4) ;
fill3 (a,b,c,’b’) ;
x=-3:0.2:3 ;
y=exp (-x .*x) ;
subplot(1,2,1) ;
bar(x,y) ;
subplot(1,2,2) ;
bar3(x,y) ;
x=-3:0.2:3 ;
y=exp(-x .* x) ;
subplot (1,2,1) ;
barh (x,y) ;
subplot (1,2,2) ;
stairs (x,y);
- 25 - مختار القاسمي.م
0932862329
MATLAB R2010
axis auto
يحدد اإلحداثيات تلقائيا من طرف MATLABبقيم تكون مناسبة للشكل المرسوم.
axis tight
يحدد اإلحداثيات بمدى المعلومات المرسومة
axis square
يجعل اإلحداثيات على شكر مربع
; x=-pi:pi/100:pi
; )y=sin(x
; )plot (x,y
; )’title (‘Graph of the Sine function
;)’)ylabel (‘ y=sin(x
; )’xlabel (‘ -\pi \leq {\itx} \leq \pi
; )’text (1,-1/3,‘ Ammar Al-khatib
axis auto ;
axis equal ;
axis square ;
- 27 - مختار القاسمي.م
0932862329
MATLAB R2010
* في حالة وجود فراغ مقابل للرمز معنى ذلك أن الناتج مشابه للرمز.
- 29 - مختار القاسمي.م
0932862329
MATLAB R2010
الدوال الرياضية
يقدم لك الماتالب كل العمليات الرياضية مھما بلغت من الصعوبة أو التعقيد ،و ذلك من خالل التعليمات
السھلة االستعمال ،فھو يقوم باالشتقاق و التكامل و حل المعادلة الخطية و الغير الخطية و كذلك جميع
و كل شي تتوقعه
: أمثلة
Y( x )=x^3-2x+1
>> syms x
>> y=x^3-2*x+1
>> diff(y)
و ﻟﻼﺷﺘﻘـﺎق ﻣﺮﺗﻴﻦ
diff(y,2)
>> syms x z
>> y=z*x^2+sin(x)
>> diff(y,x)
>> ans =
2*z*x-cos(x)
>> diff(y,z)
>> ans =
x^2
- 31 - مختار القاسمي.م
0932862329
MATLAB R2010
)>> Y=(X+1)/(X-2
)'>> limit(Y,X,2,'right ﻧﻬﺎﻳﺔ اﻟﺘﺎﺑﻊ ﻋﻨﺪﻣﺎ ﻳﻨﺘﻬﻲ اﻟﻤﺘﻐﻴﺮ إﻟﻰ 2ﻣﻦ اﻟﻴﻤﻴﻦ
Y=⌠x.dx
>> y=x
)>> int(y
)>> int(y,0,inf >> ﻣﻦ أﺟﻞ اﻟﺘﻜﺎﻣﻞ اﻟﻤﺤﺪود ﻣﻦ اﻟﺼﻔﺮ إﻟﻰ اﻟﻼﻧﻬﺎﻳﺔ :
)f=1/(1+x^2
: ﻓﻮرﻳﻴﻪ
>> sym x
>> f = exp(-x^2)
>> F = fourier(f)
>> syms x a
>> F = fourier(f,a)
>> f1=exp(-abs(x))
>> F = fourier(f1)
f = ifourier(F)
: ﻻﺑﻼس
>> l = t^3
>> L = laplace(l)
>> l = 1/sqrt(t)
>> L = laplace(l)
- 33 - مختار القاسمي.م
0932862329
MATLAB R2010
>> ilaplace(ans)
: z ﺗﺤﻮﻳﻞ
>> y = x
>> Z = ztrans(y)
>> z = iztrans(Z)
: ﻣﻨﺸﻮر ﺗﺎﻳﻠﻮن
>> n=sin(x)
>> N=taylor(n)
: ﺗﺎﺑﻊ ﻏﺎﻣﺎ
>> a=gamma(0.5)
ans= 1.77
: ﺗﺎﺑﻊ ﺑﻴﺘﺎ
>> b=beta(0.5,0.5)
ans = 3.1416
- 34 - مختار القاسمي.م
0932862329
MATLAB R2010
>> expand((x-1)*y+x^3+y^2*(x-5)^2)
ans =y*x-y+x^3+y^2*x^2-10*y^2*x+25*y^2
>> expand(cos(x+y))
ans =cos(x)*cos(y)-sin(x)*sin(y)
>> expand(cos(2*x))
ans =2*cos(x)^2-1
>> expand(exp(a+b))
ans =exp(a)*exp(b)
>> horner(2*x^3-4*x^2+x-x*y+(6+x)^2)
ans =36+(13-y+(-3+2*x)*x)*x
>> factor(x^3-x^2+x-6)
ans =(x-2)*(x^2+x+3)
>> simplify((1-x^2)/(1+x))
ans =1-x
>> solve(exp(x)+cos(x)^2+2*sin(x))
- 35 - مختار القاسمي.م
0932862329
MATLAB R2010
ans =-0.6323265
وﻟﻠﺘﺄﻛﺪ ﻣﻦ اﻟﺤﻞ
>> subs(exp(x)+cos(x)^2+2*sin(x),ans)
ans =0.
syms a b c x
S = a*x^2 + b*x + c;
solve(S)
ans =[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
>> solve(exp(x)+3*t,t)
ans =-1/3*exp(x)
واﻟﻤﺜﺎل اﻟﻘـﺎدم ﻳﺒﻴﻦ ﻟﻨﺎ ﻛﻴﻔﻴﺔ ﺣﻞ ﺟﻤﻠﺔ ﻣﻌﺎدﻻت ﺗﺤﻮي ﺟﻤﻠﺔ ﻣﺠﺎﻫﻴﻞ
x =0
y =-1/2
S= a: [2x1 sym]
u: [2x1 sym]
v: [2x1 sym]
- 36 - مختار القاسمي.م
0932862329
MATLAB R2010
>> S.a
ans = 3
-1
>> S.u
ans = 5
1
>> S.v
ans = -4
0
)'>> dsolve('Dy=1+y^2
)ans =tan(t+C1
)'>> y = dsolve('Dy=1+y^2','y(0)=1
)y =tan(t+1/4*pi
u =1/3*pi*exp(x)-
1/3*(1+pi)*3^(1/2)*exp(1/2*x)*sin(1/2*3^(1/2)*x)+(1-
1/3*pi)*exp(-1/2*x)*cos(1/2*3^(1/2)*x)
- 38 - مختار القاسمي.م
0932862329
MATLAB R2010
أوالً :يمثل تابع النقل بشعاعين سطريين األول يمثل أمثال كثير حدود بسط تابع النقل الثاني يمثل
DENو NUMأمثال كثير حدود المقام
إذا كان لدينا تابع االنتقال التالي :
s+3
-----------------------
s^3 + 7 s^2 + 16 s + 10
Transfer function:
s+3
-----------------------
s^3 + 7 s^2 + 16 s + 10
Transfer function:
s
--------------
s^2 + 2 s + 10
ثانيا ً :إذا كان تابع النقل على شكل أصفار و أقطاب و عامل الربح
Zero/pole/gain:
;)'>> s=zpk('s
))>> H=(s+1)/((s+2)*(s+3
Zero/pole/gain:
)(s+1
-----------
)(s+2) (s+3
و يمكن االنتقال من شكل إلى آخر
;)>>[Z,P,K]=tf2zp(NUM,DEN
;)>>[NUM,DEN]=zp2tf(z,p,k
حيث Z,Pأشعة عمودية تحوي قيم األصفار و األقطاب
ھو عبارة عن نسبة المطال المركب إلشارة الخرج إلى المطال المركب إلشارة الدخل و ذلك من ،و
في تابع النقل أجل إشارة جيبية على الدخلS=jWنحصل عليھا بتعويض
ليكن لدينا تابع النقل التالي:
;>> S=j.*W
نحسب المطال المركب عند كل قيمة لW
;)>> Z=0.8./(25e-8.*S.^2+75e-5.*S+1
Z.نرسم المصفوفة العقدية Wتحوي قيم المطال المركب و عند كل قيمة ل Zالمصفوفة
)>>plot(Z
)(1الشكل
)>> subplot(2,2,4
))>> plot(W,abs(Z
يوضح ھذه المميزات)(2الشكل
)(2الشكل
التابع العابر:
ھي اإلشارة التي نحصل عليھا في خرج النظام إذا طبقنا على دخلھا إشارة القفزة الواحدية ،باستخدام
نتمكن من رسم التابع العابرstepتعليمة
;)]>> SYS=([1 2],[1 7 16 10
)>> step(SYS
أو يمكن كتابتھا بداللة البسط و المقام
)>> step(NUM,DEN
الشكل التالي تبين ھذه المميزة
التابع النبضي:
ھي اإلشارة التي نحصل عليھا في خرج النظام إذا طبقنا على دخلھا إشارة النبضة الواحدية ،
نتمكن من رسم التابع النبضيimpulse.باستخدام تعليمة
)>> impulse(SYS
)>> impulse(NUM,DEN
فراغ الحالة:
يمكن التعبير عن النظام بتابع النقل أو بمجموعة من المتحوالت تسمى متحوالت الحالة
x=A . x + B . u
y=C . x + D . u
مصفوفات الثوابت لمتحوالت الحالةA,B,C,Dحيث
متحوالت الحالةx
uالدخل
الخرجy
فيمكن إيجاد المصفوفات A,B,C,Dمن تابع النقل باستخدام التعليمة tf2ss
;)>>[A,B,C,D]=tf2ss(NUM,DEN
يمكن رسم المميزات اللوغاريتمية للمطال و الصفحة للنظام باستخدام التعليمة Bode
إذا كان لدينا تابع االنتقال التالي :
يمكن رسم مخطط بود للنظامSYSبعد إدخال شعاعي البسط و المقام و تسمية تابع النقل
;]>> NUM=[1
;]>> DEN=[1 8 19 12 0
)>> SYS=tf(NUM,DEN
Transfer function:
1
------------------------------
X^4+8*X^3+19*X^2+12*X
)>> bode(SYS
و يمكن حساب المطال و التردد عند قيمة معينة للتردد wباستخدام :
)>>[M,P]=bode(SYS,W
و يمكن حساب ھامش الربح للمطال GMو الصفحة PMو ترددات القطع Wgcو Wpc
بواسطة التعليمة margin
)>> [GM,PM,Wpc,Wgc]=margin(SYS
= GM
26.2500
= PM
82.4833
= Wpc
1.2247
= Wgc
0.0830
)sys = series(sys1,sys2
)sys = parallel(sys1,sys2
)sys = feedback(sys1,sys2
المحاكاة Simulink
يقوم الماتالب بتحليل و محاكاة الدارات الكھربائية مھما كان نوعھا ،سوا أكانت اكترونية أو اتصاالت أو
ميكانيكية أو شبكات التوتر المنخفض أو المتوسط أو العالي أو تحكمية ) بلوكات تمثل أنظمة ( ،و ذلك من خالل
أضخم و أشمل مكتبة يمكن أن يتصورھا شخص ما أو أن تتواجد في أي برنامج غير الماتالب
و التي تضم مكتبات تھتم و تختص بكل اختصاص على حدا ،حيث يوجد مكتبة خاصة بالتحكم سوا أنظمة
و مكتبة تھتم بأنظمة االتصاالت و مكتبة بالطاقة و مكتبة بالميكانيك و ...و كل ما تتخيل ...
و ھكذا أنت أمام مكتبة تضم كل مستلزماتك في مجال المحاكاة و تحليل الدارات مھما كانت بينتھا .
و سوف نقوم بعرض بعض الدارات البسيطة في ھذا الدورة بھدف معرفة كيفية التعامل مع المكتبات
و من الحصول على المكتبة الفريدة نقوم بكتابة األمر التالي على command window
>> sinulink
أو من خالل اإليقونة التالية :
سيظھر بعد ذلك نافذة تحوي مكتبات العناصر في جميع االختصاصات كما في الشكل التالي :
نقوم بالضغط على Ctrl+Nبعد فتح المكتبة ،أو من خالل الضغط على رمز الصفحة الموجود ضمن نافذة
المكتبة ،فتظھر لنا النافذة التالية :
و لنبدأ بمثال بسيط ھو أن نرى اإلشارة الجيبية وتكاملھا على راسم اإلشارة فنحن بذلك نحتاج إلى أربعة
عناصر
األول منبع جھد جيبي نضغط على simulinkفي مكتبة العناصر ثم نختار منھا المنابع sources
كالصورة التالية تبين موضعه :
ثم نضع المكامل ingeratorفي الدارة ولمعرفة مكانه تستطيع كتابة اسمه ھنا :
ثم من simulink → sinks → scopeنختار راسم اإلشارة فيصبح لديك الشكل الكلي التالي :
لتشغل الدارة ثم انقر على راسم اإلشارة مرتين لترى شكل اإلشارتين اضغط على الزر التالي
إذا أردت أن ترى كل إشارة على حدى فعليك أن تنشئ مدخلين لراسم اإلشارة
وذلك بالضغط مرتين عليه وتغيير قيمة number of axesإلى 2
و نقوم بحذف المازج و تصبح الدارة :
كما و يمكن معرفة طويلة و زاوية كل إشارة من خالل المكتبة الرياضية كما في الدارة التالية :
و من أجل تطبيق الدارة السابقة ما علينا إال التوجه إلى مكتبة ، powerlibو نحصل عليھا من خالل
مكتبة simulinkأو كتابة األمر التالي على : command window
>> powerlib
حيث تم وضع المخضم من أجل التحويل إلى القيم الواحدية و قيمته ھو :
=K
و باعتبار أن الحمل تحريضي نضع البارمترات الخاصة بالحمل التسلسلي :
Vn 424.4e3 V
fn 60 Hz
P )110e6/300 W (quality factor = 300
QL 110e6 vars
Qc 0
و من أجل تحليل الدارة و معرفة كل التيارات المارة في الفروع و كذلك التوترات ما علينا سوا وضع
بلوكة powerguiالتي تقوم بتحليل الدارة وفق الحالة المستقرة و الطورية و المتقطعة
و ما يھمنا ھي الحالة المستقرة :
حيث تعطينا قيم التيارات و التوترات لكل العناصر و المصادرة الموجودة بالدارة
حيث تمكننا ھذه الواجھة من معرفة القيم الفعالة أو العظمى للمقاييس المتوافرة في الدارة
كما ويمكن معرفة تيارات عناصر الدارة ) حتى العناصر الالخطية ( :
و لنقوم اآلن بمحاكاة عنصر من عناصر الكترونات القدرة و لكن الديود :
ومن خالل ھذا الدارة يتم التعرف على جھد الحمل و تيار الحمل و كذلك تيار و الجھد العكسي على الديود :
و يمكننا أن نقوم بتصميم بلوكة خاصة يكون فيھا أكثر من بلوكة و بشروط التي نرغب بھا و ذلك من خالل
و مثال ذلك بلوكة تحسب االستطاعة الكلية وفق العالقة المعروفة :
M-filesملف البرمجة
M-filesھو نوع الملفات التي يتم فيھا كتابة وحفظ البرامج المكتوبة في MATLABوتنقسم إلى قسمين
:Scripts.1ال يمرر إليھا مدخالت وال يستقبل منھا مخرجات ،ويتعامل scriptمباشرة في workspace
:functions.2يمرر إليھا عدد محدد من المدخالت والمخرجات المحددة لھا فقط توضع في workspaceوال
و يمكن أن يبدأ الملف بجملة تعريفية بالبرنامج بواسطة وضع إشارة %أول الجملة و يمكن الحصول عليھا بكتابة األمر
)…function [output1,output2…]=function_name(input1,input2,
أن يكون اسم الدالة الموجود في تعريف الدالة ھو نفسه الذي يتم به حفظ الدالة
أن يكون اسم الدالة أو scriptمكونا من مقطع واحد ال يفصل بينه مسافات
يجب أن يبدأ اسم الدالة أو scriptبحرف ويمكن أن يتبع حرف البداية بأي رمز
ويتم تنفيذ الدالة عن طريق كتابة سطر التعريف بعد حذف كلمة functionفي command windowأو في أي دالة
;)function [a,b,c]=my_function(x,y
;)[b]=my_function(x,y,z
فذلك يعني أن الدالة ستعود فقط بقيمة aويصبح في workspaceمتغير اسمه bله قيمة المتغير aالناتج من الدالة
.my_function
نفس الحال مع مدخالت الدالة فاذا كتبنا السطر التالي في :command window
;)[a,b,c]=my_function(u
فإذا وجد متغير اسمه uموجود في workspaceفانه سيعطي قيمته للمتغير xفقط ،وسوف تعطي الدالة خطا عند تنفيذھا
بسبب أنه ال يوجد متغيرين اسميھما y,zفي workspaceوحتى لو كانوا موجودين فان الدالة لن تستطيع التعامل معھما
ألنھا ال تتعامل مع workspaceمباشرة ،أي أنه يجب على المبرمج أن يمررھما لھا.
ويمكن كتابة دالة داخل دالة ،وتعتبر ھذه الدالة خاصة فقط بالدالة التي تحتويھا وتكتب كما تكتب الدوال العادية.
مثال :
%-------------------------------------------------------
%-------------------------------------------------------
)function a=aver12(x
)b=length(x
)c=sum(x
a=c/b
و كما نالحظ أنه يمكن تمرير أكثر من دخل من خالل التابع بوضعھم ضمن ) ( و الفصل بينھم بفاصلة
و كذلك يمكن أن يكون لدينا أكثر من خرج و يتم ذلك بوضعھم ضمن ] [ ،
و يتم حفظ الملف بالنسبة إلى آخر تابع باسم
aver12
و يتم استدعائه من خالل نافذة األوامر من خالل
>> x=1:9
)>> aver(x
و كمثال عن scriptنقوم بتنفيذ برنامج !: n
M.file
% برنامج لحساب!n
)' =n= input('the value of n
x=1:n
)a=prod(x
)])Disp([' n! = ',num2str(a
و يتم حفظ الملف باالسم الذي نريده وليكن fac3و يتم استدعائه في نافذة األوامر كما يلي :
>> fac3
فيطلب منا إدخال قيمة nندخلھا و نضغط على Enterفيحسب القيمة .
۩ كل األوامر التي تنفذ على نافذة األوامر تنفذ على ملف البرمجة
الحلقات
يسمح ھذا األمر للمبرمج أن يعيد تنفيذ مجموعة من األوامر لعدد محدد من المرات ،والصيغة العامة لھذا األمر
ھي:
statements
end
مثال :المثال التالي سيعرض األرقام من 1إلى 10وايجاد ثم عرض مربع كل رقم
for index=1:10
;)disp (i
;s=i^2
)disp (s
end
for i=1:4
for j=3:-1:1
;)a(i,j)=(i^j) + (j^i
end
end
;)disp (a
يستعمل ھذا األمر لتكرار مجموعة من األوامر لعدد غير محدد من المرات ،ويتم التحكم بعدد تنفيذ ھذه األوامر
عن طريق شرط يكتب مع whileكما ستوضح ذلك األمثلة القادمة ،والصيغة العامة ھي:
)while (expression
statements
end
: مثال
x=0;
while (x<5)
x=x+s;
disp(x);
end
: والصيغ العامة له ھي،يستعمل ھذا األمر لتنفيذ أمر أو مجموعة من األوامر بناء على شرط محدد
if (expression)
statements
end
if (expression)
statements
else
statements
end
if (expression)
statements
elseif (expression)
statements
else
statements
end
- 62 - مختار القاسمي.م
0932862329
MATLAB R2010
مثال :
;a=10; % a=4
)if (a>5
;a=a*5
end
disp (a); % a
مثال :
;a=10; % a=4
)if (a>5
;a=a/5
else
;a=a*5
end
;)disp (a
مثال :
يستعمل ھذا األمر عندما يكون تنفيذ أمر أو مجموعة من األوامر معتمدا على قيمة متغير واحد ،والصيغة العامة
ھي:
switch switch_expr
case case_expr,
statements;
statements;
otherwise
statements;
end
يقوم ھذا المثال بتحويل قيمة معينة إلى ما يقابلھا في السنتيمتر: مثال
5- break
الموجود فيھا فقطwhile-loop أوfor-loop يستعمل ھذا األمر الخراج البرنامج من
: مثال
for i=1:10
if (i>5)
- 64 - مختار القاسمي.م
0932862329
MATLAB R2010
break;
else
a=a*4.5;
end
end
disp (a);
: مثال
a=3; % a=1.5;
if (a>2)
break;
else
a=a*7;
end
a
- 65 - مختار القاسمي.م
0932862329
MATLAB R2010
H.W.
أكتب برنامج MATLABيحسب مجموع األرقام الثالة بدءا من الرقم 2وحتى (2,5,8,…100) 100
إظھار عبارة Hot Dayإذا كان مجموع عناصر المصفوفة Mبين 20و35
و إظھار عبارة Nice Dayإذا كان مجموع عناصر المصفوفة Mبين 10و 20
و إظھار عبارة Cold Dayإذا كان مجموع عناصر المصفوفة Mيساوي 0و 10
و إظھار عبارة Out of Rangeإذا كان مجموع عناصر المصفوفة Mيساوي قيمة أخرى
حيثM :
) (aمصفوفة ثنائية من حجم 6×3بھا قيم عشوائية موزعة بين 0و 2
) (bمصفوفة ثنائية مربعة من حجم 3بھا قيم محصورة بين 1و 9
) (cمصفوفة أحادية جميع عناصرھا متساوية وتساوي 5وطول المصفوفة =7
) (dمصفوفة ثنائية مربعة قيم عناصر المحور 1والبقية 0وأبعاد المصفوفة 10×10
يجب أن تستعمل إلنشاء المصفوفة Mفي الحاالت المختلفة دوال موجودة في MATLAB
figure , axes , plot اآلن و بعد معرفة و M.file .البد من التوسع أكثر في البرمجة و التعرف على خصائص بعد العناصر مثل
>> a=figure
=a
1
)>> get(a
فتظھر الخصائص التي يمكن التحكم بھا مع االنتباه الى أن الشكل يجب أن يكون مفتوح ،حيث تظھر الخاصة و بجانبھا
قيمتھا .
BackingStore = on
CloseRequestFcn = closereq
][ = CurrentAxes
CurrentCharacter = -
CurrentObject = []
CurrentPoint = [0 0]
DockControls = on
DoubleBuffer = on
FileName =
IntegerHandle = on
InvertHardcopy = on
KeyPressFcn =
MenuBar = figure
MinColormap = [64]
Name =
NextPlot = add
NumberTitle = on
PaperUnits = inches
PaperOrientation = portrait
PaperPositionMode = manual
- 68 - مختار القاسمي.م
0932862329
MATLAB R2010
PaperType = usletter
Pointer = arrow
PointerShapeHotSpot = [1 1]
Renderer = None
RendererMode = auto
Resize = on
ResizeFcn =
SelectionType = normal
ShareColors = on
ToolBar = auto
Units = pixels
WindowButtonDownFcn =
WindowButtonMotionFcn =
WindowButtonUpFcn =
WindowStyle = normal
WVisualMode = auto
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [0]
Selected = off
SelectionHighlight = on
Tag =
Type = figure
UIContextMenu = []
UserData = []
Visible = on
- 70 - مختار القاسمي.م
0932862329
MATLAB R2010
A=figure
)'set(A,'toolbar','none
,
نالحظ أنه تم إخفاء شريط األدوات ،و ذلك من خالل تعليمة setحيث يتم تحديد الخاصة ثم سمة الخاصة كما يلي :
إما Aفھي اسم الشكل المراد التحكم به ،و إما السمة تكون ھناك سمة افتراضية للشكل تكتب بجانب الخاصة .
;)'f = uimenu('Label','Workspace
;)'uimenu(f,'Label','New Figure','Callback','figure
;)'uimenu(f,'Label','Save','Callback','save
;)'uimenu(f,'Label','Quit','Callback','exit','Separator','on','Accelerator','X
حيث إنشاء قائمة منسدلة تحتوي على ثالثة قوائم و القائمة االخيرة مفصولة عن البقية و يتم تنفيذ الوظيفة البرمجية الخاصة
ce = uicontextmenu;
- 72 - مختار القاسمي.م
0932862329
MATLAB R2010
ھنا تم إنشاء right clickتحتوي على ثالثة قوائم و تم تحديد الوظيفة البرمجية لكل قائمة ،و ھو التكم بشكل الخط
و حاول أن يكون تقسيم المحور األفقي تقسيمات محرفية كما في الشكل :
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'XTick',-pi:pi/2:pi)
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
- 74 - مختار القاسمي.م
0932862329
MATLAB R2010
ھو واسطة تخاطب بين الكمبيوتر واألجھزة الخارجية أي أن الجھاز يرسل معلومات إلى الجھاز الخارجي أي وسيلة
يحتوي المنفذ التفرعي على 25رجل دخل وخرج وأرضي موزعة كما ھو موضح في الشكل التالي:
األرجل من 2إلى 9ھي أرجل معطيات أي دخل وخرج أما األرجل ) ( 17- 16 – 14 -1فھي أرجل تحكمية واألرجل
) (15-13-12-11-10ھي أرجل دخل وباقي األرجل ) تتوزع من 18إلى ( 25ھي أرجل أرضي
)dio=digitalio('parallel',1
إن التعليمة digitalioتعرف المنفذ الرقمي فنكتب اسم المنفذ وھو ھنا المنفذ التفرعي ثم نكتب رقمه أي LPT1أو
و بعد ذلك
)'addline(dio,[0:7],'out
Out/in 5 7
Out/in 6 8
Out/in 7 9
IN 11 10
IN 12 11
IN 10 12
IN 9 13
Out/in 14 14
IN 8 15
Out/in 15 16
Out/in 16 17
getvalue(dio,1)
function c=out(a,n)
dio=digitalio('parallel',1);
- 77 - مختار القاسمي.م
0932862329
MATLAB R2010
;)'addline(dio,a,'out
;)putvalue(dio,n
إن aھي أرقام األرجل التي تريد التخريج عليھا وھي فقط )من 0إلى سبعة ومن 13إلى (16وتدخل aعلى شكل
و nھي البيانات التي تريد إخراجھا ويمكنك إدخالھا بالشكل العشري أو الثنائي
)function c=in(a
;)dio=digitalio('parallel',1
;)'addline(dio,a,'in
;)getvalue(dio
وإن األرجل التي نستطيع إدخال قيم لھا والقراءة منھا ھي )من 0إلى (16
إن المنفذ التفرعي يقسم إلى ثالثة أقسام port0و port1و port2األرجل من 0إلى سبعة ھي للـ port0ومن
)function d=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الذي كتبناه سابقا وحفظناه وكان االستدعاء ھو فقط ذكر اسم البرنامج مع
عناصر الدخل أو المتغيرات إن aفي ھذا البرنامج تعبر فقط عن عدد مرات تكرار البرنامج وماھي t؟؟؟
مثال:2
)function d=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
مثال:3
)function d=flash3(a
for i=1:a
c0=0
for t=0:7
c=2^t
c=c+c0
out([0:7],c)
pause(0.05)
c0=c
end
out([0:7],0)
end
: 4 مثال
for i=1:10
n=1
dio=digitalio('parallel',1)
addline(dio,2,'out')
putvalue(dio,n)
pause (0.3)
- 81 - مختار القاسمي.م
0932862329
MATLAB R2010
n=0
dio=digitalio('parallel',1)
addline(dio,2,'out')
putvalue(dio,n)
pause (0.3)
end
- 82 - مختار القاسمي.م
0932862329
MATLAB R2010
Gui
Graphical User Interface
: ملف البرمجي
- 86 - مختار القاسمي.م
0932862329
MATLAB R2010
if nargout
- 87 - مختار القاسمي.م
0932862329
MATLAB R2010
% --- Outputs from this function are returned to the command line.
function varargout = Akram_OutputFcn(hObject, eventdata,
handles)
- 88 - مختار القاسمي.م
0932862329
MATLAB R2010
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackground
Color'));
end
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackground
Color'));
end
x1=1:0.5:4;
x2=4:0.5:7;
y=[1 1 2 0 2 1 1];
plot(x1,y,x2,y)
axis off
text(1.3,0.8,r11)
text(4.3,0.8,r22)
elseif r1==0 & r2==0 & r_p==1
set(handles.pb_cal,'enable','on')
x=1:0.5:4;
y1=[1 1 2 0 2 1 1];
y2=[5 5 6 4 6 5 5];
x1=[1 1];
y3=[1 5];
x2=[4 4];
y4=[3 3];
x3=[1 -1];
x4=[4 6];
plot(x,y1,'b',x,y2,'b',x1,y3,'r',x2,y3,'r',x3,y4,'r',x4,y4,'r')
axis off
text(0.3,6,r11)
text(0.3,0.3,r22)
elseif r_s==0 & r_p==0
errordlg('Set the Type of Connection','Error');
elseif r1~=0 & r_s==1 & r_p==0
errordlg('Set the Value of R1','Error');
elseif r2~=0 & r_s==1 & r_p==0
errordlg('Set the Value of R2','Error');
end
% uiwait(handles.figure2);
global a
set(handles.figure2,'position',a)
imshow('1.jpg')
axis off
- 94 - مختار القاسمي.م
0932862329
MATLAB R2010
مثال:
برنامج يقوم بتحويل ألوان المقاومة بقيمة ھذه المقاومة
نحتاج إلى أربع قوائم منسدلة نختار منھا األلوان و زر للح ساب و شا شة إلظ ھار الن تائج
( 4 pop-up menu و زر لإلغالق )2push button 1 edit text
نبدأ اآلن بإزالة ع بارة edit textوذ لك بالنقر مرتين ع لى edit textليظ ھر ل نا نا فذة
الخصائص التالية :
اضغط ھنا
ثم نضغط على زر pushمرتين ونغير الـ stringأيضا ونضع كلمة أحسب مثال
برمجة زر أحسب
h=get(handles.popupmenu1,'value')
g=get(handles.popupmenu2,'value')
e=get(handles.popupmenu3,'value')
r=get(handles.popupmenu4,'value')
i='0'
if r==11
v=num2str(str2double(v)*(10^(-11)))
elseif r==12
v=num2str(str2double(v)*(10^(-13)))
end
v=num2str(str2double(v)*(10^(-3)))
- 99 - مختار القاسمي.م
0932862329
MATLAB R2010
set(handles.edit1,'string',v )
set(handles.text1,'string','kohm')
elseif str2double(v)>=1000000
v=num2str(str2double(v)*(10^(-6)))
set(handles.edit1,'string',v )
set(handles.text1,'string','megaohm')
else
set(handles.edit1,'string',v )
set(handles.text1,'string','ohm')
end