You are on page 1of 101

‫‪01/12/2020‬‬

‫قناة دليل طلبة الدراسات العليا قسم الهندسة الكهربائية ‪/‬العراق ع التليغرام م‪/‬احمد العزاوي‬
‫‪3HUVRQDOSDJHRQIDFHERRNIRU0DUW\U0XNWDU4DVVPL‬‬ ‫‪)RU6XJJHVWLRQ‬‬
‫‪\DPHQHQ#OLYHFRP‬‬
‫‪MATLAB R2010‬‬ ‫‪)RU2WKHUERRNVIURP0XNWDU4DVVPL‬‬

‫)اللغة( ‪MATLAB‬‬ ‫مقدمة عن البرنامج‬

‫يتميز ‪ MATLAB‬بكونه برنامجا متخصصا ييسر عمل الباحثين والدارسين في مختلف مجاالت‬

‫الدراسات العليا وما قبلھا‪ ،‬فھو يتعامل مع المعادالت الرياضية والتكامالت والتفاضالت والمصفوفات‬

‫المختلفة بسرعة وسھولة‪ ،‬ويعامل األعداد المركبة بنفس الطريقة التي يعامل بھا األعداد‬

‫العادية‪،‬ويرسم المعادالت الرياضية في اإلحداثيات المختلفة‪ .‬ويضم المئات من الدوال الجاھزة التي‬

‫توفر للمبرمج وقتا وجھدا ويسرا عند إنشاء البرامج بلغة ‪ MATLAB‬وفضال عن ذلك فھو يسمح‬

‫للمبرمج أن ينشأ )‪ Graphical User Interfaces (GUI‬تمكنه من تنفيذ برنامجه وعرضه ونشره‬

‫بسھولة ويسر‪.‬‬

‫مفردات المنھج ‪:‬‬


‫‪ ‬التعريف بـ ‪MATLAB‬‬

‫‪ ‬تعريفات أساسية في ‪MATLAB‬‬

‫‪Command window ‬‬

‫‪Workspace ‬‬

‫‪ ‬المتغيرات في ‪MATLAB‬‬

‫‪ ‬المصفوفات‬
‫‪ ‬إدخال المصفوفات واستدعاءھا في ‪MATLAB‬‬

‫‪ ‬بعض المصفوفات القياسية ‪.‬‬


‫‪ ‬بعض األوامر الخاصة للتعامل مع المصفوفات‬
‫‪ ‬العمليات الرياضية على المصفوفات‪.‬‬
‫‪Cell Arrays ‬‬

‫‪Photo ‬‬

‫‪Relational and Logical Operations ‬‬

‫‪Control Flow ‬‬

‫‪for – end ‬‬

‫‪-1-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

while – end 

if – else – elseif – end 

switch – case – end 

break 

M-files 

scripts 

functions 

3D - 2D – Graphics 

plotting styles 

Customizing plot axes 

multiple plots in the same figure 

subplots 

multiple figures 

Introduction to GUI 

GUI ‫ تعريف الـ‬

GUI ‫ استخدامات الـ‬

GUI ‫ التعريف ببعض مكونات الـ‬

Introduction to Simulink and Toolboxes 


‫ تعريفھما‬
‫ أھميتھما‬
‫ استخداماتھما‬

-2- ‫مختار القاسمي‬.‫م‬


0932862329
‫‪MATLAB R2010‬‬

‫تعريفات أساسية في ‪:MATLAB‬‬

‫‪ :command window‬ھي الشاشة األساسية للتعامل مع ‪ MATLAB‬والتي يتم من خاللھا كتابة جميع األوامر‬

‫للتخاطب مع ‪ MATLAB‬وعرض نتائج األوامر المنفذة‪.‬‬

‫‪ :workspace‬ھي الذاكرة المؤقتة للـ‪ MATLAB‬والتي يتم فيھا حفظ جميع المتغيرات التي تم استعمالھا إلى‬

‫حين إغالق ‪ MATLAB‬أو تنفيذ األمر ‪.clear‬‬

‫ومن األوامر التي تتعامل مع ‪ workspace‬و ‪ command window‬وتنظمھا‪:‬‬

‫‪ :clc‬يقوم ھذا األمر بمسح محتويات ‪ command window‬دون أن يؤثر على محتويات ‪workspace‬‬

‫);( ‪ :‬تقوم الفاصلة المنقوطة بمنع ظھور ناتج األمر في ‪ command window‬بعد تنفيذه‪.‬‬

‫أكتب ثم نفذ كل من األمرين التاليين‪:‬‬ ‫مثال‪:1.1‬‬

‫‪a=3‬‬ ‫‪a=5+9‬‬
‫;‪a=3‬‬ ‫;‪a=5+9‬‬

‫‪ : ...‬تستعمل النقاط الثالثة في نھاية األسطر الطويلة إلكمال األمر في السطر التالي‬

‫‪ :who‬يعرض جميع محتويات ‪ workspace‬في ‪command window‬‬

‫‪ :whos‬يعرض جميع محتويات ‪ workspace‬في ‪ command window‬بتفاصيل عنھا‬

‫)االسم‪،‬األبعاد‪،‬الحجم والنوع (‬

‫‪ :clear‬يقوم ھذا األمر بمسح جميع محتويات ‪workspace‬‬

‫‪ :clear x‬مسح المتغير ‪ x‬فقط من ‪workspace‬‬

‫*‪ :clear a‬مسح المتغيرات التي تبدأ بحرف ‪ a‬فقط من ‪workspace‬‬

‫‪-3-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫‪ :save mywork‬يقوم ھذا األمر بحفظ محتويات ‪ workspace‬في ملف اسمه ‪) mywork‬امتداده ‪(.mat‬‬

‫في الدليل الحالي للـ ‪MATLAB‬‬

‫‪ :save mywork x y z‬حفظ المتغيرات ‪ z y x‬فقط في ملف اسمه ‪mywork‬‬

‫*‪ :save mywork a‬حفظ المتغيرات الموجودة في ‪ workspace‬والتي يبدأ اسمھا بحرف ‪ a‬فقط‬

‫في ملف اسمه ‪.mywork‬‬

‫الموجودة في‬ ‫)’‪ :save (‘D:\myfolder\mywork’,’x’ ‘y’ ‘z‬حفظ المتغيرات ‪z y x‬‬

‫‪ workspace‬في ملف اسمه ‪ mywork‬موجود في المجلد ‪ myfolder‬في القسم ‪ D‬من القرص‬

‫الصلب‬

‫‪ :load mywork‬وضع محتويات الملف الذي اسمه ‪ mywork‬في ‪workspace‬‬

‫‪ :load mywork x y z‬وضع المتغيرات ‪ z y x‬فقط من الملف ‪ mywork‬في ‪workspace‬‬

‫*‪ :load mywork a‬وضع المتغيرات الموجودة في الملف ‪ workspace‬والتي تبدأ بحرف ‪ a‬فقط‬

‫في ‪workspace‬‬

‫المتغيرات في ‪MATLAB‬‬

‫يحكم ‪ MATLAB‬المتغيرات التي يتعامل معھا بعدة قواعد منھا‪:‬‬

‫يتعامل ‪ MATLAB‬مع جميع المتغيرات كمصفوفات‬

‫يجب أن يكون اسم المتغير متكون من كلمة واحدة ال يفصل بينھا مسافة‪ ،‬فمثال‪:‬‬

‫‪ myvariable‬مقبول‬

‫‪ my variable‬غير مقبول‬

‫‪-4-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫يجب أن ال يزيد اسم المتغير عن ‪ 31‬كلمة‪ ،‬فـ‪ MATLAB‬يھمل تلقائيا الحروف التي تلي الحرف ‪ 31‬من اسم‬

‫المتغير‪ ،‬فمثال‪:‬‬

‫يصبح‬ ‫‪this_is_my_new_variable_in_matlab‬‬

‫‪this_is_my_new_variable_in_matl‬‬

‫يجب أن يبدأ اسم المتغير بحرف‪ ،‬ويمكن أن يتبع ھذا الحرف بأي حرف أو رقم‬

‫‪ MATLAB‬حساس لحالة الحروف‪ ،‬أي أن الحرف الصغير يختلف عن الحرف الكبير‪ ،‬مثال‬

‫… ‪VAR≠ var ≠ Var ≠ vaR ≠ vAr ≠ vaR‬‬

‫يوجد لدى ‪ MATLAB‬أسماء محجوزة لمتغيرات محددة ينصح بعدم استعمال ھذه األسماء ومنھا‪:‬‬

‫‪ :ans‬ھو المتغير االفتراضي في ‪ MATLAB‬والذي يتكون في حالة عدم استقبال ناتج تنفيذ أحد األوامر من‬

‫قبل متغير محدد‬

‫‪ :pi‬ويساوي ‪.3.14‬‬

‫‪ :eps‬قيمة متناھية في الصغر تستعمل في بعض التطبيقات الرياضية الخاصة ‪.‬‬

‫‪ :inf‬عندما تكون قيمة المتغير تساوي )‪ (0/1‬وھو نفسه ∞ ‪.‬‬

‫‪ :NaN‬عندما تكون قيمة الناتج يساوي )‪. (0/0‬‬

‫‪ :realmin‬أصغر رقم حقيقي لدى ‪ MATLAB‬ويساوي ‪.2.2251 × 10-308‬‬

‫‪ :realmax‬أكبر رقم حقيقي لدى ‪ MATLAB‬ويساوي ‪.1.7977 × 10308‬‬

‫‪ :nargin‬عدد المتغيرات الممررة إلى الدالة ‪.‬‬

‫‪ :nargout‬عدد المتغيرات الخارجة من الدالة ‪.‬‬

‫‪-5-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫طرق عرض األرقام في ‪MATLAB‬‬

‫يمكن للـ ‪ MATLAB‬أن يعرض القيم الرقمية للمتغيرات بعدة طرق‪ ،‬نوضحھا في الجدول التالي وسنأخذ قيمة‬

‫المتغير ‪ pi‬كمثال لطرق العرض المختلفة‪:‬‬

‫** ‪format‬‬ ‫عدد األرقام المعروضة‬ ‫‪pi‬‬


‫‪Short‬‬ ‫‪5‬‬ ‫*‪3.1416‬‬
‫‪Long‬‬ ‫‪15‬‬ ‫‪3.1415265358979‬‬
‫‪short e‬‬ ‫‪5‬‬ ‫‪3.1416 e+00‬‬
‫‪16‬‬ ‫‪3.141592653589793‬‬
‫‪long e‬‬
‫‪e+00‬‬
‫‪short g‬‬ ‫يختار تلقائيا األفضل بين‪ short‬و ‪short e‬‬ ‫‪3.1416‬‬
‫‪long g‬‬ ‫يختار تلقائيا األفضل بين ‪ long‬و ‪long e‬‬ ‫‪3.1415265358979‬‬
‫‪hex‬‬ ‫يعرض الرقم في النظام الست عشري‬ ‫‪400921fb54442d18‬‬
‫‪rat‬‬ ‫يعرض الرقم على ھيئة نسبة‬ ‫‪355/113‬‬
‫‪+‬‬ ‫‪+,-,or zero‬‬ ‫‪+‬‬

‫إذا كانت عدد األرقام المكونة للعدد أكبر من ‪ 5‬أرقام فان الـ ‪ MATLAB‬يقوم تلقائيا بتقريب الرقم ‪.‬‬ ‫‪-‬‬

‫أقصى دقة‬ ‫‪ -‬طريقة عرض األرقام ال تؤثر على دقة الحسابات التي يقوم بھا الـ ‪ MATLAB‬داخليا‪ ،‬فھو يستعمل‬

‫ممكنة لديه‪.‬‬

‫‪ -‬طريقة العرض االفتراضية ھي ‪. format short‬‬

‫‪-6-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫المصفوفات في ‪MATLAB‬‬

‫يتعامل ‪ MATLAB‬مع جميع المتغيرات على أنھا مصفوفات ومع األعداد كعناصر في مصفوفة‪ ،‬فمثال‪:‬‬

‫عندما نكتب األمر التالي‪ m=4; :‬يعني ذلك أنني كونت مصفوفة اسمھا ‪ m‬أبعادھا )‪ (1×1‬وقيمة العنصر‬

‫الوحيد الموجود فيھا تساوي ‪.4‬‬

‫أما إذا كتبنا األمر التالي ;‪ a=3*6‬فمعنى ذلك أننا كونا مصفوفة اسمھا ‪ a‬أبعادھا )‪ (1×1‬وقيمة العنصر الوحيد‬

‫الموجود فيھا تساوي ‪.18‬‬

‫مثال ‪ 2.1‬يوضح طرق إنشاء المصفوفات في ‪ MATLAB‬وتعبئتھا‪:‬‬

‫‪ 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‬فال تؤثر على ترتيب العناصر في المصفوفة ووظيفتھا فقط‬

‫للتنسيق‪.‬‬

‫مثال ‪ 2.2‬يوضح الطرق المختلفة الستدعاء المصفوفة أو جزء منھا‪:‬‬

‫]‪>>M=[2 3 5 9 1 ; 0 3 6 4 5 ; 1 10 8 6 4‬‬ ‫إدخال المصفوفة ‪:‬‬

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

‫‪M(1, 2:4)  3 5 9‬‬

‫‪M(2, 1:2:5)  0 6 5‬‬

‫مثال ‪ 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‬‬

‫‪-8-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫المصفوفات القياسية‬

‫يوفر ‪ MATLAB‬لمستخدميه العديد من المصفوفات القياسية الجاھزة والتي توفر عليھم الكثير من الجھد والوقت‬

‫المبذولين في إنشاء ھذا المصفوفات ومنھا‪:‬‬

‫‪ :ones ‬تكون مصفوفة قيم جميع عناصرھا تساوي ‪1‬‬

‫)‪ :ones(m,n‬يكون مصفوفة ‪ m×n‬قيم جميع عناصرھا تساوي ‪1‬‬

‫)‪ :ones(k‬يكون مصفوفة ‪ k×k‬قيم جميع عناصرھا تساوي ‪1‬‬

‫‪ : zeros ‬تكون مصفوفة قيم جميع عناصرھا تساوي ‪0‬‬

‫)‪ :zeros(m,n‬يكون مصفوفة ‪ m×n‬قيم جميع عناصرھا تساوي ‪0‬‬

‫)‪ :zeros(k‬يكون مصفوفة ‪ k×k‬قيم جميع عناصرھا تساوي ‪0‬‬

‫‪ : eye ‬يكون مصفوفة محايدة ”‪“identity‬‬

‫)‪ :M=eye(m,n‬يكون مصفوفة ‪ M‬تكون قيم العناصر )‪ M(m,m), M(n,n‬تساوي ‪ 1‬وباقي‬

‫العناصر قيمھا تساوي ‪0‬‬

‫)‪ :eye(k‬يكون مصفوفة مربعة )‪ (k×k‬قيم عناصر المحور تساوي ‪ 1‬وقيم باقي العناصر تساوي ‪0‬‬

‫‪ : magic ‬يكون مصفوفة مربعة مجموع كل صف يساوي مجموع كل عمود ويساوي مجموع المحور وتكون‬

‫قيم العناصر موزعة بين ‪ 1‬و مربع طول المصفوفة‬

‫‪ : Linspace ‬يكون مصفوفة بھا عدد محدد من القيم محصورة بين رقمين محددين )انظر ملحق دوال‬

‫المصفوفات(‬

‫‪ : Rand ‬يكون مصفوفة بھا قيم عشوائية محصورة بين ‪ 0‬و ‪1‬‬

‫‪-9-‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫دوال المصفوفات‬
‫تستعمل ھذه الدوال إلنشاء المصفوفات والتحكم بھا والتعامل معھا ‪:‬‬

‫وظيفتھا‬ ‫اسم الدالة‬


‫دوال المصفوفات القياسية‬
‫إنشاء مصفوفة قيم جميع عناصرھا تساوي ‪0‬‬ ‫‪zeros‬‬
‫إنشاء مصفوفة قيم جميع عناصرھا تساوي ‪1‬‬ ‫‪ones‬‬
‫إنشاء مصفوفة محايدة )‪(Identity‬‬ ‫‪eye‬‬
‫المصفوفة الفارغة‬ ‫][‬
‫إنشاء مصفوفة قيم عناصرھا محصورة بين ‪ 0‬و ‪1‬‬ ‫‪rand‬‬
‫إنشاء مصفوفة بھا عدد محدد من العناصر قيمھم موزعة بالتساوي بين قيمتين محددتين‬ ‫‪linspace‬‬
‫إنشاء مصفوفة بھا عدد محدد من العناصر قيمھم موزعة لوغاريثميا بين قيمتين محددتين‬ ‫‪logspace‬‬
‫دوال التعامل مع المصفوفات‬
‫إيجاد أبعاد المصفوفة‬ ‫‪size‬‬
‫إيجاد طول المصفوفة األحادية أو عدد عناصر الصفوف في المصفوفات غير األحادية‬ ‫‪length‬‬
‫اللوغاريتم الطبيعي‬ ‫‪log‬‬
‫اللوغاريتم العشري‬ ‫‪log10‬‬
‫الرفع الى قوة بأساس ‪e‬‬ ‫‪exp‬‬
‫إليجاد قيمة محدد المصفوفات المربعة فقط‪Determinant‬‬ ‫‪det‬‬
‫إليجاد عناصر محور المصفوفة‬ ‫‪diag‬‬
‫إليجاد معكوس المصفوفات المربعة فقط‬ ‫‪inv‬‬
‫لتغيير الصفوف إلى أعمدة واألعمدة إلى صفوف‬ ‫) ´( ‪transpose‬‬
‫إليجاد حاصل جمع عناصر كل عمود في المصفوفة‬ ‫‪sum‬‬
‫متوسط الحسابي لعناصر كل عمود‬ ‫‪mean‬‬
‫إليجاد أكبر قيمة في كل عمود‬ ‫‪max‬‬
‫إليجاد أصغر قيمة في كل عمود‬ ‫‪min‬‬
‫ايجاد باقي القسمة‬ ‫‪rem‬‬
‫يقوم بحذف األرقام العشرية‬ ‫‪fix‬‬
‫يقوم بتقريب إلى أقرب عدد صحيح ) التقريب المعروف (‬ ‫‪round‬‬
‫يقوم بالتقريب إلى القيمة الدنيا‬ ‫‪floor‬‬
‫يقوم بالتقريب إلى القيمة العليا‬ ‫‪ceil‬‬

‫‪- 10 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫لقلب المصفوفة من األعلى إلى األسفل‬ ‫‪flipud‬‬


‫لقلب المصفوفة من اليسار إلى اليمين‬ ‫‪fliplr‬‬
‫لدوران المصفوفة ‪ 90‬درجة‬ ‫‪rot90‬‬
‫لمعرفة وجود عنصر في مصفوفة‬ ‫‪find‬‬
‫ترتيب عناصر كل عمود بشكل تزايد‬ ‫‪sort‬‬
‫إليجاد حاصل ضرب عناصر كل عمود في المصفوفة‬ ‫‪prod‬‬

‫أمثلة على بعض الدوال المذكورة أعاله‪:‬‬

‫‪linspace (0,4,5)= 0 1 2 3 4‬‬ ‫‪logspace (0,4,5)= 1 10 100 1000 10000‬‬


‫‪linspace (1,5,3)= 1 3 5‬‬ ‫‪logspace (1,5,3)= 10 1000 100000‬‬
‫‪linspace (1,2,3)= 1 1.5 2‬‬ ‫‪logspace (1,2,3)= 10 31.6228 100‬‬

‫=)‪eye (3‬‬ ‫‪1 0 0‬‬ ‫‪eye(2,3)= 1 0 0‬‬


‫‪0 1 0‬‬ ‫‪0 1 0‬‬
‫‪0 0 1‬‬

‫‪ones(3)= 1 1 1 % ones(2,3)= 1 1 1 % zeros(3)= 0 0 0 % zeros(2,3)= 0 0 0‬‬


‫‪1 1 1‬‬ ‫‪1 1 1‬‬ ‫‪0 0 0‬‬ ‫‪0 0 0‬‬
‫‪1 1 1‬‬ ‫‪0 0 0‬‬

‫=)‪magic(3‬‬ ‫‪8 1 6‬‬ ‫‪rand(3,4)= 0.1389 0.6038 0.0153 0.9318‬‬


‫‪3 5 7‬‬ ‫‪0.2028 0.2722 0.7468 0.4660‬‬
‫‪4 9 2‬‬ ‫‪0.1987 0.1988 0.4451 0.4186‬‬

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

‫‪M= 2 4 7 9‬‬ ‫=‪N‬‬ ‫‪1 0 3‬‬


‫‪5 6 8 3‬‬ ‫‪4 7 5‬‬
‫‪1 3 9 5‬‬ ‫‪9 2 8‬‬

‫‪- 11 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

diag(M)=2 diag(N)= 1 length(M)=[4] length(N)=[3]


6 7
9 8

size(M)= 3 4 size(N)= 3 3 det(N)=-119

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

find(M = = 5)= 2 find(M = = 1)= 3 find(M = = 0)= [ ]


12

- 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*C=[ 56 81 ; 69 167 ; 71 124 ]

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 ]

A.^B=[1 8 16384 15625 ; 9 134217728 4304672 1 ; 16807 16 16 10077696]

- 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‬مع عنصر آخر مشابه له تماما‬

‫في النوع واألبعاد في ‪ cell‬أخرى‬

‫‪- 15 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

: ‫األعداد العقدة‬

c = x + jy

‫ طويلة العدد العقدي‬: abs

( ‫ زاوية العدد العقدي ) بالراديان‬: angle

‫ مرافق العدد العقدي‬: conj

‫ القسم التخيلي للعدد العقدي‬: imag

‫ القسم الحقيقي للعدد العقدي‬: real

Relational and Logical Operators:

Relational Operators

Operator name Symbol Comment


eq == equal
ne ~= not equal
lt < less than
gt > greater than
le <= less than or equal
ge >= greater than or equal
Logical Operators

and & logical and


xor xor Logical xor
or | logical or
not ~ logical not

- 16 - ‫مختار القاسمي‬.‫م‬
0932862329
‫‪MATLAB R2010‬‬

‫مثال ‪:‬‬

‫‪1==20‬‬ ‫‪0|11‬‬
‫‪2 ~= 3  1‬‬ ‫‪~1  0‬‬
‫‪4>21‬‬ ‫‪~0  1‬‬
‫‪2>50‬‬ ‫‪~5  0‬‬
‫‪8<91‬‬ ‫‪1&1  1‬‬
‫‪7<30‬‬ ‫‪1&0  0‬‬
‫‪1 >= 1  1‬‬ ‫‪xor(1,0)  1‬‬

‫كثيرات الحدود ‪:‬‬

‫يوفر ‪ Matlab‬عدد من الدوال المبنية داخليا لتسھيل التعامل مع كثير الحدود ‪، Polynomials‬‬

‫حيث يتم تمثيلھا كمتجه‪ ،‬مثال لتمثيل معادلة كثير الحدود التالية‪:‬‬

‫وظيفتھا‬ ‫اسم الدالة‬


‫إيجاد كثير حدود من جذور‬ ‫‪poly‬‬
‫إيجاد جذور كثير الحدود‬ ‫‪roots‬‬
‫إيجاد مشتق كثير حدود‬ ‫‪Ployder‬‬
‫إيجاد قيمة كثير حدودعند نقطة‬ ‫‪polyval‬‬
‫تفريق الكسر‬ ‫‪residue‬‬
‫ضرب كثير حدود‬ ‫‪conv‬‬
‫قسمة كثير حدود‬ ‫‪deconv‬‬
‫إيجاد تكامل كثير الحدود‬ ‫‪polyint‬‬
‫إيجاد كثير حدود من نقاط‬ ‫‪polyfit‬‬

‫‪- 17 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫تفريق الكسر ‪:‬‬

‫ﻓﻤﺜﻼ ‪:‬‬

‫]‪>> b= [ 5 3 -2 7‬‬

‫]‪>> a=[ -4 0 8 3‬‬

‫)‪>> [ r p k ]=residue(b,a‬‬

‫التحويل بين أنظمة العد ‪:‬‬

‫وظيفتھا‬ ‫اسم الدالة‬


‫التحويل من النظام الثنائي الى النظام الست العشر‬ ‫‪dec2hex‬‬
‫للتحويل الى اي نظام‬ ‫‪dec2base‬‬
‫للتحويل الى النظام الست العشر‬ ‫‪num2hex‬‬
‫للتحويل من النظام العشري الى النظام الثنائي‬ ‫‪dec2bin‬‬
‫للتحويل من النظام الثنائي الى النظام العشري‬ ‫‪bin2dec‬‬

‫‪- 18 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫الرسومات‬
‫يوفر ‪ MATLAB‬للمستخدم العديد من الدوال التي تساعده على رسم المصفوفات المختلفة بابعاد مختلفة وعلى محاور متعددة‪،‬‬

‫ومن أھم ھذه الدوال‪ ،‬الدالة ‪plot‬‬

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

‫يمكن للمستخدم أيضا أن يضيف عنوان إلى الرسم أو كتابة عنوان لكل من المحور األفقي والعمودي عن طريق األوامر‬

‫‘( ‪title‬‬ ‫;)‘‬

‫‘(‪xlabel‬‬ ‫;)‘‬

‫‘(‪ylabel‬‬ ‫;)‘‬

‫كما يمكن أيضا كتابة تعليق فوق الرسم مباشرة بواسطة األمر )‘ ‘(‪text‬‬

‫‪- 19 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫ويوفر ‪ 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=0:pi/100:2*pi‬‬
‫; )‪y=sin(x‬‬
‫; )‪z=cos(x‬‬
‫; )‪w= power (sin(x),2‬‬
‫‪% ploting‬‬
‫; )‪subplot (3,4,5‬‬
‫; )‪plot(x,y‬‬
‫;)’)‪title (‘y=sin(x‬‬
‫; )‪subplot (3,4,9‬‬
‫; )‪plot(x,z‬‬
‫;)’)‪title (‘y=cos(x‬‬
‫; )‪subplot (3,4,3‬‬
‫; )‪plot(x,w‬‬
‫;)’‪title (‘y=(sin(x))^2‬‬

‫و فيما يلي جدول ببعض دوال الرسم ‪:‬‬

‫‪- 20 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫وظيفتھا‬ ‫اسم الدالة‬


‫لفتح نافذة لعرض األشكال‬ ‫‪Figure‬‬
‫لرسم دالة أو مصفوفة‬ ‫‪Plot‬‬
‫لتقسيم الـ ‪ figure‬إلى عدد من األقسام وتحديد القسم المراد الرسم فيه‬
‫‪Subplot‬‬
‫)‪ subplot (m,n,p‬يقسم الـ ‪ figure‬إلى ‪ n×m‬جزء‪،‬و يرسم في الجزء رقم ‪) p‬أنظر األمثلة أدناه(‬
‫رسم شكلين بإحداثيات مختلفة في المحور ‪y‬‬ ‫‪Plotyy‬‬
‫كتابة عنوان الرسم‬ ‫‪Title‬‬
‫لتحديد عنوان المحور األفقي للرسم ‪x-axis‬‬ ‫‪Xlabel‬‬
‫لتحديد عنوان المحور العمودي للرسم ‪y-axis‬‬ ‫‪Ylabel‬‬
‫كتابة عبارة معينة داخل الرسم‬ ‫‪Text‬‬
‫تمكن من وضع جملة ما على الشكل‬ ‫‪gtext‬‬
‫للتعريف بالروسومات على الشكل‬ ‫‪legend‬‬
‫لمعرفة احداثيات أي نقطة نريدھا على الشكل‬ ‫‪ginput‬‬
‫تستخدم لألحصاء‬ ‫‪Pie‬‬
‫تستخدم ألنشاء بارات إحصائية‬ ‫‪Bar‬‬
‫تستخدم ألنشاء بارات ثالثية البعد إحصائية‬ ‫‪bar3‬‬
‫تستخدم ألنشاء بارات إفقية إحصائية‬ ‫‪Barh‬‬
‫لملىء الشكل باللون الذي تريده‬ ‫‪Fill‬‬
‫لملىء الشكل الثالثي البعد باللون الذي تريده‬ ‫‪fill3‬‬
‫إمكانية الرسم على نفس الشكل‬ ‫‪Hold‬‬
‫)انظر األمثلة(‬ ‫إلغالق الـ ‪figure‬‬ ‫‪Close‬‬
‫إلنشاء مناطق‬ ‫‪area‬‬
‫جعل المحور االفقي لوغاريتم‬ ‫‪semilogx‬‬
‫جعل المحورالعمودي لوغاريتم‬ ‫‪semilogy‬‬
‫جعل المحوريين لوغاريتم‬ ‫‪loglog‬‬
‫لمسح محتويات الـ ‪) figure‬انظر األمثلة(‬ ‫‪Clf‬‬
‫إلنشاء محاور جديدة‬ ‫‪Axis‬‬
‫يحدد اإلحداثيات تلقائيا بقيم تكون مناسبة للشكل المرسوم‬ ‫‪axis auto‬‬
‫يجعل اإلحداثيات في جميع االتجاھات محدودة بنفس القيم‬ ‫‪axis equal‬‬
‫يجعل اإلحداثيات على شكر مربع‬ ‫‪axis square‬‬
‫لرسم المعادلة التي نريد‬ ‫‪Ezplot‬‬
‫لرسم دالة ذات متغير واحد بقيم مختلفة لھذا المتغير‬
‫‪Fplot‬‬
‫)]‪fplot (function, [Xmin Xmax Ymin Ymax‬‬

‫‪- 21 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

:‫أمثلة حول دوال الرسم‬

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) ;

M=[0.5 , 1 , 1.6 , 1.2 , 0.8 , 2.1] ;


N=[2 3 4 5];
subplot (1,3,1) ;
pie (M) ;
title (‘case 1’) ;
subplot (1,3,2) ;
pie (M , M==max(M));
title (‘case 2’) ;
subplot (1,3,3) ;
pie (N,{'North','South','East','West'}) ;
title (‘case 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‬‬

‫)]‪axis ([Xmin Xmax Ymin Ymax Zmin Zmax‬‬


‫يحدد اإلحداثيات حسب األبعاد المدخلة من قبل المستخدم‬

‫‪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 ([-2 2 -0.6 0.6‬‬

‫‪- 26 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

axis auto ;

axis equal ;

axis square ;

- 27 - ‫مختار القاسمي‬.‫م‬
0932862329
‫‪MATLAB R2010‬‬

‫اﻟﺮﻣﻮز اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﺘﺤﻜﻢ ﺑﺸﻜﻞ اﻟﺮﺳﻢ *‬


‫الرمز‬ ‫اللون‬ ‫الرمز‬ ‫المؤشر‬ ‫الرمز‬ ‫نوع الخط‬
‫‪b‬‬ ‫األزرق‬ ‫‪.‬‬ ‫‪-‬‬
‫‪g‬‬ ‫األخضر‬ ‫‪o‬‬ ‫‪:‬‬
‫‪r‬‬ ‫األحمر‬ ‫‪x‬‬ ‫‪-.‬‬
‫‪c‬‬ ‫األخضر المزرق‬ ‫‪+‬‬ ‫‪--‬‬
‫‪m‬‬ ‫البنفسجي الفاتح‬ ‫*‬
‫‪y‬‬ ‫األصفر‬ ‫‪s‬‬ ‫مربع‬
‫‪k‬‬ ‫األسود‬ ‫‪d‬‬ ‫معين‬
‫‪w‬‬ ‫األبيض‬ ‫‪v‬‬ ‫مثلث إلى األسفل‬
‫^‬ ‫مثلث إلى األعلى‬
‫>‬ ‫مثلث إلى اليمين‬
‫<‬ ‫مثلث إلى اليسار‬
‫‪p‬‬ ‫شكل ثماني‬
‫‪h‬‬ ‫شكل ست عشري‬

‫* في حالة وجود فراغ مقابل للرمز معنى ذلك أن الناتج مشابه للرمز‪.‬‬

‫و فيما يلي الرموز المستخدمة في مجال الرسم ‪:‬‬

‫‪- 28 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

Character Symbol Character Symbol Character Symbol


Sequence Sequence Sequence
\alpha α \upsilon ν \sim ~
\beta β \phi \leq ≤
\gamma γ \chi Χ \infty ∞
\delta δ \psi Ψ \clubsuit ♣
\epsilon ε \omega ω \diamondsuit ♦
\zeta ζ \Gamma Γ \heartsuit ♥
\eta η \Delta Δ \spadesuit ♠
\theta θ \Theta Θ \leftrightarrow ↔
\vartheta ν \Lambda Λ \leftarrow ←
\iota ι \Xi Ξ \uparrow ↑
\kappa κ \Pi Π \rightarrow →
\lambda λ \Sigma Σ \downarrow ↓
\mu µ \Upsilon Y \circ º
\nu υ \Phi Φ \pm ±
\xi ξ \Psi Ψ \geq ≥
\pi π \Omega Ω \propto ∝
\rho ρ \forall \partial ∂
\sigma σ \exists э \bullet •
\varsigma ς \ni \div ÷
\tau τ \cong \neq ≠
\equiv ≡ \approx ≈ \aleph ‫אּ‬
\int ∫ \nabla ▽ \o o
\langle > \rangle <
\lfloor └ \cdot . \ldots …
\perp ┴ \prime ´
\wedge ^ \times X \0 Ø
\rceil ┐ \surd √ \mid |
\vee v \copyright ©

- 29 - ‫مختار القاسمي‬.‫م‬
0932862329
‫‪MATLAB R2010‬‬

‫الدوال الرياضية‬

‫يقدم لك الماتالب كل العمليات الرياضية مھما بلغت من الصعوبة أو التعقيد ‪ ،‬و ذلك من خالل التعليمات‬

‫السھلة االستعمال ‪ ،‬فھو يقوم باالشتقاق و التكامل و حل المعادلة الخطية و الغير الخطية و كذلك جميع‬

‫التحوالت من تحويل البالس و فورييه و كذلك منشور تايلور ‪....‬‬

‫و كل شي تتوقعه‬

‫وظيفتھا‬ ‫اسم الدالة‬


‫التعريف بالمتغيرات‬ ‫‪syms‬‬
‫االشتقاق‬ ‫‪diff‬‬
‫التكامل‬ ‫‪int‬‬
‫إيجاد النھاية‬ ‫‪limit‬‬
‫فورييه‬ ‫‪fourier‬‬
‫فورييه المعاكس‬ ‫‪Ifourier‬‬
‫تحويل البالس‬ ‫‪laplace‬‬
‫تحويل البالس المعاكس‬ ‫‪Ilaplace‬‬
‫تحويل ‪Z‬‬ ‫‪ztrans‬‬
‫تحويل ‪ Z‬المعاكس‬ ‫‪iztrans‬‬
‫منشور تايلور‬ ‫‪taylor‬‬
‫حل المعادلة الخطية و الغير الخطية‬ ‫‪solve‬‬
‫حل معادلة تفاضلية‬ ‫‪dsolve‬‬
‫يقوم بفك األقواس ونشر المعادلة‬ ‫‪expand‬‬
‫تقوم بإخراج العوامل المشتركة‬ ‫‪horner‬‬
‫تحول المعادلة إلى جداء أقواس بأصغر أس ممكن‬ ‫‪factor‬‬
‫تبسط المعادلة مھما كان نوعھا‬ ‫‪simplify‬‬
‫إيجاد قيمة تابع عند قيمة معينة‬ ‫‪subs‬‬
‫للتحويل من متغير الى شعاع‬ ‫‪Sym2poly‬‬
‫للتحويل من شعاع إلى متغير‬ ‫‪poly2sym‬‬

‫‪- 30 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

: ‫أمثلة‬

: ‫أوجد مشتق التابع‬

Y( x )=x^3-2x+1

>> syms x

>> y=x^3-2*x+1

>> diff(y)

‫و ﻟﻼﺷﺘﻘـﺎق ﻣﺮﺗﻴﻦ‬

diff(y,2)

y(x)=zx^2+sin(x) ‫و إذا ﻛﺎن اﻟﺘﺎﺑﻊ‬

>> 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‬‬

‫)‪diff(y,x,2‬‬ ‫وﻟﻼﺷﺘﻘـﺎق اﻟﺠﺰﺋﻲ ﻣﺮﺗﻴﻦ‬

‫)‪Y=(X+1)/(X-2‬‬ ‫أوﺟﺪ ﻧﻬﺎﻳﺔ اﻟﺘﺎﺑﻊ ‪:‬‬

‫‪>> syms X‬‬

‫)‪>> Y=(X+1)/(X-2‬‬

‫)‪>> limit(Y‬‬ ‫ﻧﻬﺎﻳﺔ اﻟﺘﺎﺑﻊ ﻋﻨﺪﻣﺎ ﻳﻨﺘﻬﻲ اﻟﻤﺘﻐﻴﺮ إﻟﻰ اﻟﺼﻔﺮ‬

‫)‪>> limit(Y,2‬‬ ‫ﻧﻬﺎﻳﺔ اﻟﺘﺎﺑﻊ ﻋﻨﺪﻣﺎ ﻳﻨﺘﻬﻲ اﻟﻤﺘﻐﻴﺮ اﻟﻰ‪2‬‬

‫)'‪>> limit(Y,X,2,'right‬‬ ‫ﻧﻬﺎﻳﺔ اﻟﺘﺎﺑﻊ ﻋﻨﺪﻣﺎ ﻳﻨﺘﻬﻲ اﻟﻤﺘﻐﻴﺮ إﻟﻰ ‪ 2‬ﻣﻦ اﻟﻴﻤﻴﻦ‬

‫أوﺟﺪ اﻟﺘﻜﺎﻣﻞ اﻟﺘﺎﻟﻲ‬

‫‪Y=⌠x.dx‬‬

‫‪>> syms x‬‬

‫‪>> y=x‬‬

‫)‪>> int(y‬‬

‫)‪>> int(y,0,inf‬‬ ‫>> ﻣﻦ أﺟﻞ اﻟﺘﻜﺎﻣﻞ اﻟﻤﺤﺪود ﻣﻦ اﻟﺼﻔﺮ إﻟﻰ اﻟﻼﻧﻬﺎﻳﺔ ‪:‬‬

‫)‪f=1/(1+x^2‬‬

‫)‪>> ans = atan(x‬‬

‫‪- 32 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

: ‫ﻓﻮرﻳﻴﻪ‬

>> sym x

>> f = exp(-x^2)

>> F = fourier(f)

:a ‫و إذا أردﻧﺎ أن ﻳﻜﻮن اﻟﺨﺮج ﺑﺪﻻﻟﺔ ﻣﺘﻐﻴﺮ ﻣﺤﺪد ﻣﺜﻼ‬

>> 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,y] = solve(x*y^2,exp(x)+2*y)

x =0

y =-1/2

>> S = solve('u^2-v^2 = a^2','u + v = 1','a^2-2*a = 3')

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‬‬

‫ﻫﻲ اﻟﺜﺎﺑﺖ اﻟﻨﺎﺗﺞ ﻋﻦ اﻟﺘﻜﺎﻣﻞ ‪c1‬‬

‫إذا أردت أن ﺗﻀﻊ ﺷﺮوط اﺑﺘﺪاﺋﻴﺔ ﻓـﻠﻚ ذﻟﻚ‬

‫)'‪>> y = dsolve('Dy=1+y^2','y(0)=1‬‬

‫)‪y =tan(t+1/4*pi‬‬

‫ﺳﻨﻔﺮض ﻣﻌﺎدﻟﺔ ﺟﺪﻳﺪة وﻧﺮى ﺣﻠﻬﺎ ‪:‬‬

‫)'‪>> u = dsolve('D3u=u','u(0)=1','Du(0)=-1','D2u(0) = pi','x‬‬

‫‪- 37 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

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‬‬

‫يتم إدخال ھذا التابع بالشكل التالي‪:‬‬


‫;]‪>>NUM=[1 3‬‬
‫;]‪>>DEN=[1 7 16 10‬‬
‫تشكل لدينا تابع النقل‪tf‬إن التعليمة‬
‫)‪>> SYS=tf(NUM,DEN‬‬

‫‪Transfer function:‬‬
‫‪s+3‬‬
‫‪-----------------------‬‬
‫‪s^3 + 7 s^2 + 16 s + 10‬‬

‫كما يمكن تمثيلھا بالطريقة التالية‬


‫;)'‪>> s=tf('s‬‬
‫)‪>> H=s/(s^2+2*s+10‬‬

‫‪Transfer function:‬‬
‫‪s‬‬
‫‪--------------‬‬
‫‪s^2 + 2 s + 10‬‬

‫ثانيا ً‪ :‬إذا كان تابع النقل على شكل أصفار و أقطاب و عامل الربح‬

‫كما يلي ‪ ZPK‬فيمكن استخدام التعليمة‬

‫‪- 39 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫)‪>> SYS=zpk([-3 -5],[-4 6 7],100‬‬

‫‪Zero/pole/gain:‬‬

‫)‪100 (s+3) (s+5‬‬


‫‪-----------------‬‬
‫)‪(s+4) (s-6) (s-7‬‬

‫حيث ]‪ [-3 -5‬شعاع األصفار‬


‫]‪ [-4 6 7‬شعاع األقطاب‬
‫‪ 100‬الربح‬
‫و بطريقة ثانية يمكن تمثيل التابع‬

‫;)'‪>> 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‬نحصل عليھا بتعويض‬
‫ليكن لدينا تابع النقل التالي‪:‬‬

‫و المطلوب رسم المميزة القطبية‪.‬‬


‫التي نحسب عندھا المطال المركب‪W.‬نحدد أوالً الترددات‬
‫;]‪>> W=[0:10:5000‬‬
‫‪- 40 -‬‬ ‫م‪.‬مختار القاسمي‬
‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫;‪>> S=j.*W‬‬
‫نحسب المطال المركب عند كل قيمة ل‪W‬‬
‫;)‪>> Z=0.8./(25e-8.*S.^2+75e-5.*S+1‬‬
‫‪ Z.‬نرسم المصفوفة العقدية ‪ W‬تحوي قيم المطال المركب و عند كل قيمة ل ‪Z‬المصفوفة‬
‫)‪>>plot(Z‬‬

‫يبين المميزة الناتجة)‪(1‬الشكل‬

‫)‪(1‬الشكل‬

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


‫)‪>> subplot(2,2,1‬‬
‫))‪>> plot(W,real(Z‬‬
‫أو القسم التخيلي‬
‫)‪>> subplot(2,2,2‬‬
‫))‪>> plot(W,imag(Z‬‬
‫أو صفحة تابع النقل‬
‫)‪>> subplot(2,2,3‬‬
‫))‪>> plot(W,angle(Z‬‬
‫أو مطال تابع النقل‬

‫‪- 41 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫)‪>> subplot(2,2,4‬‬
‫))‪>> plot(W,abs(Z‬‬
‫يوضح ھذه المميزات)‪(2‬الشكل‬

‫)‪(2‬الشكل‬

‫التابع العابر‪:‬‬

‫ھي اإلشارة التي نحصل عليھا في خرج النظام إذا طبقنا على دخلھا إشارة القفزة الواحدية ‪ ،‬باستخدام‬
‫نتمكن من رسم التابع العابر‪step‬تعليمة‬
‫;)]‪>> SYS=([1 2],[1 7 16 10‬‬
‫)‪>> step(SYS‬‬
‫أو يمكن كتابتھا بداللة البسط و المقام‬
‫)‪>> step(NUM,DEN‬‬
‫الشكل التالي تبين ھذه المميزة‬

‫‪- 42 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫التابع النبضي‪:‬‬

‫ھي اإلشارة التي نحصل عليھا في خرج النظام إذا طبقنا على دخلھا إشارة النبضة الواحدية ‪،‬‬
‫نتمكن من رسم التابع النبضي‪impulse.‬باستخدام تعليمة‬
‫)‪>> impulse(SYS‬‬
‫)‪>> impulse(NUM,DEN‬‬

‫فراغ الحالة‪:‬‬

‫يمكن التعبير عن النظام بتابع النقل أو بمجموعة من المتحوالت تسمى متحوالت الحالة‬
‫‪x=A . x + B . u‬‬
‫‪y=C . x + D . u‬‬
‫مصفوفات الثوابت لمتحوالت الحالة‪A,B,C,D‬حيث‬

‫‪- 43 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫متحوالت الحالة‪x‬‬
‫‪ u‬الدخل‬
‫الخرج‪y‬‬
‫فيمكن إيجاد المصفوفات ‪ A,B,C,D‬من تابع النقل باستخدام التعليمة ‪tf2ss‬‬
‫;)‪>>[A,B,C,D]=tf2ss(NUM,DEN‬‬

‫منحني ميخائيلوف ‪:‬‬

‫إذا كان لدينا تابع االنتقال للنظام المفتوح التالي ‪:‬‬

‫و المطلوب رسم منحني ميخائيلوف للنظام مغلق الحلقة ‪.‬‬

‫المعادلة المميزة للنظام المغلق ھي‬


‫‪A(S)=0.0057 S^3 + 0.58 S^2 + S +58‬‬
‫نرسم المنحني في مجال الترددات‬
‫>>‬ ‫;]‪W=[0:0.2:20‬‬
‫>>‬ ‫;‪S=j.*W‬‬
‫>>‬ ‫;‪Z=0.0057.*S.^3+0.58.*S.^2+S+58‬‬
‫>>‬ ‫)‪plot(Z‬‬
‫الشكل التالي يوضح منحني ميخائيلوف للتابع السابق‬

‫‪- 44 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫المخططات اللوغاريتمية للمطال و الصفحة )مخططات بود( ‪:‬‬

‫يمكن رسم المميزات اللوغاريتمية للمطال و الصفحة للنظام باستخدام التعليمة ‪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‬‬

‫‪- 45 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫و يمكن حساب ھامش الربح للمطال ‪ 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‬‬

‫‪- 46 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫المحاكاة‬ ‫‪Simulink‬‬

‫يقوم الماتالب بتحليل و محاكاة الدارات الكھربائية مھما كان نوعھا ‪ ،‬سوا أكانت اكترونية أو اتصاالت أو‬

‫ميكانيكية أو شبكات التوتر المنخفض أو المتوسط أو العالي أو تحكمية ) بلوكات تمثل أنظمة ( ‪ ،‬و ذلك من خالل‬

‫أضخم و أشمل مكتبة يمكن أن يتصورھا شخص ما أو أن تتواجد في أي برنامج غير الماتالب‬

‫و التي تضم مكتبات تھتم و تختص بكل اختصاص على حدا ‪ ،‬حيث يوجد مكتبة خاصة بالتحكم سوا أنظمة‬

‫المستمر أو المتقطع ‪...‬‬

‫و مكتبة تھتم بأنظمة االتصاالت و مكتبة بالطاقة و مكتبة بالميكانيك و ‪ ...‬و كل ما تتخيل ‪...‬‬

‫و ھكذا أنت أمام مكتبة تضم كل مستلزماتك في مجال المحاكاة و تحليل الدارات مھما كانت بينتھا ‪.‬‬

‫و سوف نقوم بعرض بعض الدارات البسيطة في ھذا الدورة بھدف معرفة كيفية التعامل مع المكتبات‬

‫و لنبدأ بمكتبة ‪: Simulink‬‬

‫و من الحصول على المكتبة الفريدة نقوم بكتابة األمر التالي على ‪command window‬‬
‫‪>> sinulink‬‬
‫أو من خالل اإليقونة التالية ‪:‬‬

‫سيظھر بعد ذلك نافذة تحوي مكتبات العناصر في جميع االختصاصات كما في الشكل التالي ‪:‬‬

‫‪- 47 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫و من أجل وضع عناصر الدارة البد من مكان ‪...‬‬

‫نقوم بالضغط على ‪ Ctrl+N‬بعد فتح المكتبة ‪ ،‬أو من خالل الضغط على رمز الصفحة الموجود ضمن نافذة‬
‫المكتبة ‪ ،‬فتظھر لنا النافذة التالية ‪:‬‬

‫و لنبدأ بمثال بسيط ھو أن نرى اإلشارة الجيبية وتكاملھا على راسم اإلشارة فنحن بذلك نحتاج إلى أربعة‬
‫عناصر‬

‫‪- 48 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫األول منبع جھد جيبي نضغط على ‪ simulink‬في مكتبة العناصر ثم نختار منھا المنابع ‪sources‬‬
‫كالصورة التالية تبين موضعه ‪:‬‬

‫ثم نسحب المنبع إلى النافذة الفارغة كالتالي ‪:‬‬

‫الثاني المكامل ‪:‬‬

‫ثم نضع المكامل ‪ ingerator‬في الدارة ولمعرفة مكانه تستطيع كتابة اسمه ھنا ‪:‬‬

‫‪- 49 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫الثالث ‪ mux‬المازج ‪:‬‬

‫و يتم الحصول عليه من ‪sinulink → commonly used blocks → bus creator‬‬

‫الرابع راسم اإلشارة ‪:‬‬

‫ثم من ‪ simulink → sinks → scope‬نختار راسم اإلشارة فيصبح لديك الشكل الكلي التالي ‪:‬‬

‫ثم نقوم بوصل العناصر مع بعضھا كما في الشكل التالي ‪:‬‬

‫‪- 50 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫لتشغل الدارة ثم انقر على راسم اإلشارة مرتين لترى شكل اإلشارتين‬ ‫اضغط على الزر التالي‬

‫إذا أردت أن ترى كل إشارة على حدى فعليك أن تنشئ مدخلين لراسم اإلشارة‬
‫وذلك بالضغط مرتين عليه وتغيير قيمة ‪ number of axes‬إلى ‪2‬‬
‫و نقوم بحذف المازج و تصبح الدارة ‪:‬‬

‫و بالضغط مرتين على راسم اإلشارة فنرى ‪:‬‬

‫‪- 51 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫‪autoscale‬و من أجل وضوح المنحني نستخدم ميزة‬

‫كما و يمكن معرفة طويلة و زاوية كل إشارة من خالل المكتبة الرياضية كما في الدارة التالية ‪:‬‬

‫و تظھر على رواسم اإلشارة ‪:‬‬

‫‪- 52 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫تحليل دارة بسيطة ‪:‬‬


‫لتكن لدينا الدارة التالية ‪:‬‬

‫و من أجل تطبيق الدارة السابقة ما علينا إال التوجه إلى مكتبة ‪ ، powerlib‬و نحصل عليھا من خالل‬
‫مكتبة ‪ simulink‬أو كتابة األمر التالي على ‪: command window‬‬
‫‪>> powerlib‬‬

‫‪- 53 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫و تصبح الدارة على الماتالب ‪:‬‬

‫و يجب االنتباه إلى بلوكة ‪ RLC‬أكانت بلوكة حمل أو فرع‬


‫كما و نقوم بوضع بارمترات الخاصة بكل عنصر‬
‫و إلكمال الدارة البد من وضع مقاييس أمبير و فولط ‪:‬‬

‫حيث تم وضع المخضم من أجل التحويل إلى القيم الواحدية و قيمته ھو ‪:‬‬

‫=‪K‬‬
‫و باعتبار أن الحمل تحريضي نضع البارمترات الخاصة بالحمل التسلسلي ‪:‬‬
‫‪Vn 424.4e3 V‬‬
‫‪fn‬‬ ‫‪60 Hz‬‬
‫‪P‬‬ ‫)‪110e6/300 W (quality factor = 300‬‬
‫‪QL 110e6 vars‬‬
‫‪Qc 0‬‬
‫و من أجل تحليل الدارة و معرفة كل التيارات المارة في الفروع و كذلك التوترات ما علينا سوا وضع‬
‫بلوكة ‪powergui‬التي تقوم بتحليل الدارة وفق الحالة المستقرة و الطورية و المتقطعة‬
‫و ما يھمنا ھي الحالة المستقرة ‪:‬‬

‫‪- 54 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫حيث تعطينا قيم التيارات و التوترات لكل العناصر و المصادرة الموجودة بالدارة‬

‫حيث تمكننا ھذه الواجھة من معرفة القيم الفعالة أو العظمى للمقاييس المتوافرة في الدارة‬
‫كما ويمكن معرفة تيارات عناصر الدارة ) حتى العناصر الالخطية ( ‪:‬‬

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

‫‪- 55 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫ومن خالل ھذا الدارة يتم التعرف على جھد الحمل و تيار الحمل و كذلك تيار و الجھد العكسي على الديود ‪:‬‬

‫و يمكننا أن نقوم بتصميم بلوكة خاصة يكون فيھا أكثر من بلوكة و بشروط التي نرغب بھا و ذلك من خالل‬

‫تحديد البلوكات التي نرغب بوضعھا في نظام جزيء‬

‫‪- 56 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫→ ‪Edit‬‬ ‫‪creat subsystem‬‬

‫و مثال ذلك بلوكة تحسب االستطاعة الكلية وفق العالقة المعروفة ‪:‬‬

‫حيث ال يوجد بلوكة جاھزة لذلك ‪.‬‬

‫‪- 57 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫‪ M-files‬ملف البرمجة‬

‫‪ M-files‬ھو نوع الملفات التي يتم فيھا كتابة وحفظ البرامج المكتوبة في ‪ MATLAB‬وتنقسم إلى قسمين‬

‫‪ :Scripts.1‬ال يمرر إليھا مدخالت وال يستقبل منھا مخرجات‪ ،‬ويتعامل ‪ script‬مباشرة في ‪workspace‬‬

‫‪ :functions.2‬يمرر إليھا عدد محدد من المدخالت والمخرجات المحددة لھا فقط توضع في ‪ workspace‬وال‬

‫تستطيع الدالة التعامل مباشرة مع ‪ workspace‬إال عن طريق المدخالت أو المخرجات ‪.‬‬

‫و يتم الحصول على ملف البرمجة ‪ M.file‬من ‪:‬‬

‫‪File → new → M.file‬‬

‫أو من خالل نافذة األوامر ‪:‬‬

‫‪>> edit muk12‬‬

‫فيتم فتح ملف جديد و باالسم ‪muk12‬‬

‫و يمكن أن يبدأ الملف بجملة تعريفية بالبرنامج بواسطة وضع إشارة ‪ %‬أول الجملة و يمكن الحصول عليھا بكتابة األمر‬

‫‪>> help M.file_name‬‬

‫يتم تعريف الدالة في أول سطر كالتالي‪:‬‬

‫)…‪function [output1,output2…]=function_name(input1,input2,‬‬

‫)…‪function function_name(input1,input2,‬‬ ‫يعني أن الدالة ليس لھا مخرجات‬

‫ھناك بعض المحددات في التعامل مع الدوال ومن ھذه المحددات‬

‫أن يكون اسم الدالة الموجود في تعريف الدالة ھو نفسه الذي يتم به حفظ الدالة‬

‫أن يكون اسم الدالة أو ‪ script‬مكونا من مقطع واحد ال يفصل بينه مسافات‬

‫أن ال يتجاوز اسم الدالة أو ‪ 31 script‬حرفا‬

‫‪- 58 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫يجب أن يبدأ اسم الدالة أو ‪ script‬بحرف ويمكن أن يتبع حرف البداية بأي رمز‬

‫كما يمكن ألي دالة أن تستدعي أي دالة أخرى أو ‪.script‬‬

‫ويتم تنفيذ الدالة عن طريق كتابة سطر التعريف بعد حذف كلمة ‪ function‬في ‪ command window‬أو في أي دالة‬

‫أخرى‪ ،‬أما تنفيذ ‪ script‬يتم عن طريق كتابة اسم ‪ script‬فقط‬

‫مثال ‪ :‬اذا كانت الدالة معرفة في السطر االول منھا كالتالي‬

‫;)‪function [a,b,c]=my_function(x,y‬‬

‫وتم استدعائھا في ‪ command window‬كالتالي‪:‬‬

‫;)‪[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‬مباشرة‪ ،‬أي أنه يجب على المبرمج أن يمررھما لھا‪.‬‬

‫)ولتفادي ھذه المشكلة ‪(nargin , nargout......‬‬

‫ويمكن كتابة دالة داخل دالة ‪ ،‬وتعتبر ھذه الدالة خاصة فقط بالدالة التي تحتويھا وتكتب كما تكتب الدوال العادية‪.‬‬

‫مثال ‪:‬‬

‫‪- 59 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫)‪function [mean,stdev] = stat(x‬‬


‫;)‪n = length(x‬‬
‫;)‪mean = avg(x,n‬‬
‫;)‪stdev = sqrt(sum((x-avg(x,n)).^2)/n‬‬

‫‪%-------------------------------------------------------‬‬

‫)‪function mean = avg(x,n‬‬


‫‪%MEAN subfunction‬‬
‫;‪mean = sum(x)/n‬‬

‫‪%-------------------------------------------------------‬‬

‫)‪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‬فيحسب القيمة ‪.‬‬
‫۩ كل األوامر التي تنفذ على نافذة األوامر تنفذ على ملف البرمجة‬

‫‪- 60 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫الحلقات‬

‫‪1- for – end‬‬

‫يسمح ھذا األمر للمبرمج أن يعيد تنفيذ مجموعة من األوامر لعدد محدد من المرات‪ ،‬والصيغة العامة لھذا األمر‬

‫ھي‪:‬‬

‫‪for variable= expression‬‬

‫‪statements‬‬

‫‪end‬‬

‫مثال ‪ :‬المثال التالي سيعرض األرقام من ‪ 1‬إلى ‪ 10‬وايجاد ثم عرض مربع كل رقم‬

‫‪for index=1:10‬‬
‫;)‪disp (i‬‬
‫;‪s=i^2‬‬
‫)‪disp (s‬‬
‫‪end‬‬

‫مثال ‪ :‬يوضح المثال التالي استعمال ‪ for-loop‬بداخل ‪ for-loop‬أخرى‬

‫‪for i=1:4‬‬
‫‪for j=3:-1:1‬‬
‫;)‪a(i,j)=(i^j) + (j^i‬‬
‫‪end‬‬
‫‪end‬‬
‫;)‪disp (a‬‬

‫‪2- while – end‬‬

‫يستعمل ھذا األمر لتكرار مجموعة من األوامر لعدد غير محدد من المرات‪ ،‬ويتم التحكم بعدد تنفيذ ھذه األوامر‬
‫عن طريق شرط يكتب مع ‪ while‬كما ستوضح ذلك األمثلة القادمة‪ ،‬والصيغة العامة ھي‪:‬‬

‫)‪while (expression‬‬

‫‪statements‬‬

‫‪- 61 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

end
: ‫مثال‬

x=0;
while (x<5)
x=x+s;
disp(x);
end

3- if – else – elseif – 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‬‬

‫مثال ‪:‬‬

‫;‪a=6; % a=7; % a=10‬‬


‫)‪if (rem(a,3)==0‬‬
‫;‪a=a*3‬‬
‫)‪elseif (rem(a,2)==0‬‬
‫;‪a=a*2‬‬
‫‪else‬‬
‫;‪a=a*10‬‬
‫‪end‬‬
‫;)‪disp (a‬‬

‫‪4- switch – case – otherwise – end‬‬

‫يستعمل ھذا األمر عندما يكون تنفيذ أمر أو مجموعة من األوامر معتمدا على قيمة متغير واحد‪ ،‬والصيغة العامة‬

‫ھي‪:‬‬

‫‪- 63 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

switch switch_expr

case case_expr,

statements;

case {case_expr1, case_expr2, case_expr3,...}

statements;

otherwise

statements;

end
‫ يقوم ھذا المثال بتحويل قيمة معينة إلى ما يقابلھا في السنتيمتر‬: ‫مثال‬

x= input (‘The value of x:’);


units= input (“Enter the unit of x: (Please Enter the unit between ‘ ‘) ’);
switch units
case (‘inch’,’in’)
y=x*2.54 ;
case (‘feet’,’ft’)
y=x*2.54*12 ;
case (‘meter’,’m’)
y=x*100 ;
case (‘millimeter’,’mm’)
y=x/10 ;
otherwise
disp (‘Unknown unit’);
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‬‬

‫أكتب البرنامج باستخدام كل من ‪ if , for , while‬كل منھم في برنامج منفرد‬

‫باستخدام ‪ switch – case‬أكتب برنامج ‪ MATLAB‬يقوم بالتالي‪:‬‬

‫إظھار عبارة ‪ 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‬‬

‫‪- 66 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫التحكم بخصائص ال ‪Figure‬‬

‫‪figure , axes , plot‬‬ ‫اآلن و بعد معرفة و‪ M.file .‬البد من التوسع أكثر في البرمجة و التعرف على خصائص بعد العناصر مثل‬

‫و لمعرفة خصائص ال‪ Figure‬نكتب‪:‬‬

‫‪>> a=figure‬‬

‫فيظھر الشكل و تكون النتيجة ‪:‬‬

‫=‪a‬‬

‫‪1‬‬

‫و اآلن نكتب ‪:‬‬

‫)‪>> get(a‬‬

‫فتظھر الخصائص التي يمكن التحكم بھا مع االنتباه الى أن الشكل يجب أن يكون مفتوح ‪ ،‬حيث تظھر الخاصة و بجانبھا‬

‫قيمتھا ‪.‬‬

‫]‪Alphamap = [ (1 by 64) double array‬‬

‫‪BackingStore = on‬‬

‫‪CloseRequestFcn = closereq‬‬

‫]‪Color = [0.8 0.8 0.8‬‬

‫]‪Colormap = [ (64 by 3) double array‬‬

‫][ = ‪CurrentAxes‬‬

‫‪- 67 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

CurrentCharacter = -

CurrentObject = []

CurrentPoint = [0 0]

DockControls = on

DoubleBuffer = on

FileName =

FixedColors = [ (3 by 3) double array]

IntegerHandle = on

InvertHardcopy = on

KeyPressFcn =

MenuBar = figure

MinColormap = [64]

Name =

NextPlot = add

NumberTitle = on

PaperUnits = inches

PaperOrientation = portrait

PaperPosition = [0.25 2.5 8 6]

PaperPositionMode = manual
- 68 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

PaperSize = [8.5 11]

PaperType = usletter

Pointer = arrow

PointerShapeCData = [ (16 by 16) double array]

PointerShapeHotSpot = [1 1]

Position = [360 278 560 420]

Renderer = None

RendererMode = auto

Resize = on

ResizeFcn =

SelectionType = normal

ShareColors = on

ToolBar = auto

Units = pixels

WindowButtonDownFcn =

WindowButtonMotionFcn =

WindowButtonUpFcn =

WindowStyle = normal

WVisual = 00 (RGB 32 GDI, Bitmap, Window)


- 69 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

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‬حيث يتم تحديد الخاصة ثم سمة الخاصة كما يلي ‪:‬‬

‫) ’ سمة الخاصة ’‪ ’,‬الخاصة ’‪Set(A,‬‬

‫إما ‪ 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‬‬

‫تقوم ھذه التعليمات بإنشاء قائمة منسدلة كما في الشكل ‪:‬‬

‫‪- 71 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

‫حيث إنشاء قائمة منسدلة تحتوي على ثالثة قوائم و القائمة االخيرة مفصولة عن البقية و يتم تنفيذ الوظيفة البرمجية الخاصة‬

. Ctrl+X ‫بھا عن طريق اختصار و ھو الضغط على‬

: right click ‫و لننشأ اآلن‬

ce = uicontextmenu;

% Define the line and associate it with the context menu

h = plot(1:10, 'UIContextMenu', ce);

% Define callbacks for context menu items

cb1 = ['set(h, ''LineStyle'', ''--'')'];

cb2 = ['set(h, ''LineStyle'', '':'')'];

cb3 = ['set(h, ''LineStyle'', ''-'')'];

% Define the context menu items

i1 = uimenu(ce, 'Label', 'dashed', 'Callback', cb1);

- 72 - ‫مختار القاسمي‬.‫م‬
0932862329
‫‪MATLAB R2010‬‬

‫;)‪i2 = uimenu(ce, 'Label', 'dotted', 'Callback', cb2‬‬

‫;)‪i3 = uimenu(ce, 'Label', 'solid', 'Callback', cb3‬‬

‫ھنا تم إنشاء ‪ right click‬تحتوي على ثالثة قوائم و تم تحديد الوظيفة البرمجية لكل قائمة ‪ ،‬و ھو التكم بشكل الخط‬

‫حاول التحكم بشكل الخط و لونه معا ‪.‬‬

‫و حاول أن يكون تقسيم المحور األفقي تقسيمات محرفية كما في الشكل ‪:‬‬

‫‪.‬‬ ‫الحلـــــــــــــــــــــــــــــــــــــــــــــــــــــــ ‪.. ..‬‬

‫في الصفحة التالية ‪:‬‬

‫‪- 73 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

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‬رجل دخل وخرج وأرضي موزعة كما ھو موضح في الشكل التالي‪:‬‬

‫‪- 75 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫األرجل من ‪ 2‬إلى‪ 9‬ھي أرجل معطيات أي دخل وخرج أما األرجل )‪ ( 17- 16 – 14 -1‬فھي أرجل تحكمية واألرجل‬

‫)‪ (15-13-12-11-10‬ھي أرجل دخل وباقي األرجل ) تتوزع من‪ 18‬إلى ‪ ( 25‬ھي أرجل أرضي‬

‫و لكي نتحكم بالمنفذ التفرع ‪:‬‬

‫)‪dio=digitalio('parallel',1‬‬

‫إن التعليمة ‪ digitalio‬تعرف المنفذ الرقمي فنكتب اسم المنفذ وھو ھنا المنفذ التفرعي ثم نكتب رقمه أي ‪ LPT1‬أو‬

‫‪ LPT2‬أو ‪ LPT3‬وھنا تم تعريف ‪LPT1‬‬

‫و بعد ذلك‬

‫)'‪addline(dio,[0:7],'out‬‬

‫ھذه التعليمة قامت بجعل األرجل من ‪ 2‬إلى ‪ 9‬كأرجل خرج‬

‫حيث ھناك بين ترميز الماتالب و الكمبيوتر ‪:‬‬

‫الحالة‬ ‫رقم الرجل في الماتالب‬ ‫رقم الرجل في المنفذ‬

‫‪Out/in‬‬ ‫‪13‬‬ ‫‪1‬‬

‫‪Out/in‬‬ ‫‪0‬‬ ‫‪2‬‬

‫‪Out/in‬‬ ‫‪1‬‬ ‫‪3‬‬

‫‪Out/in‬‬ ‫‪2‬‬ ‫‪4‬‬

‫‪Out/in‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪Out/in‬‬ ‫‪4‬‬ ‫‪6‬‬

‫‪- 76 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

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)

: mfile ‫و فيما يلي البرنامج كامال على ال‬

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‬ومن‬

‫‪8‬إلى ‪ 12‬ھي للـ‪ port1‬ومن ‪ 13‬إلى ‪ 16‬ھي للـ‪port2‬‬

‫)‪function d=flash2(a‬‬

‫‪for i=1:a‬‬

‫‪for t=0:7‬‬

‫‪c=2^t‬‬

‫‪- 78 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫)‪out([0:7],c‬‬

‫)‪pause(0.05‬‬

‫‪end‬‬

‫‪end‬‬

‫)‪out([0:7],0‬‬

‫في ھذا البرنامج استدعينا برنامج ‪ out‬الذي كتبناه سابقا وحفظناه وكان االستدعاء ھو فقط ذكر اسم البرنامج مع‬

‫عناصر الدخل أو المتغيرات إن ‪ a‬في ھذا البرنامج تعبر فقط عن عدد مرات تكرار البرنامج وماھي ‪ t‬؟؟؟‬

‫سنراقب قيم ‪ t‬و‪ c‬ثم نستنتج ما ھي ‪t‬‬

‫التحويل الثنائي لـ ‪c‬‬ ‫قيمة ‪c‬‬ ‫قيمة ‪t‬‬

‫‪00000001‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪00000010‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪00000100‬‬ ‫‪4‬‬ ‫‪2‬‬

‫‪00001000‬‬ ‫‪8‬‬ ‫‪3‬‬

‫‪00010000‬‬ ‫‪16‬‬ ‫‪4‬‬

‫‪00100000‬‬ ‫‪32‬‬ ‫‪5‬‬

‫‪01000000‬‬ ‫‪64‬‬ ‫‪6‬‬

‫‪10000000‬‬ ‫‪128‬‬ ‫‪7‬‬

‫‪- 79 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫لقد لجأت ماتالبيا إلى ‪ 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‬‬

‫‪- 80 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

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‬‬

‫الواجھات التخاطبية المرئية‬


‫بشكل مختصر كتير ‪.....‬‬
‫لنبدأ بالبرنامج األول ‪:‬‬
‫برنامج جمع مقاومتين‬

‫و عند الضغظ على زر التشغيل يظھر لدينا بالشكل التالي ‪:‬‬

‫‪- 83 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫ھذا البرنامج يقوم ‪:‬‬


‫بجمع مقاومتين على التسلسل ـو التفرع‬
‫يظھر رسمة توضح حالة الوصل مع القيم عليھا‬
‫يظھر رسالة خطأ في حالة إدخال حرف بدال من رقم‬
‫مربوط بواجھة ثانية ‪About‬‬
‫عدم تفعيل زر الحساب إال في إدخال قيم المقاومتين و توع الوصل‬

‫البرنامج في حالة الوصل التسلسل ‪:‬‬

‫‪- 84 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫البرنامج في حالة الوصل التفرعي ‪:‬‬

‫‪- 85 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
MATLAB R2010

: ‫ملف البرمجي‬

function varargout = Akram(varargin)


% AKRAM M-file for Akram.fig
% AKRAM, by itself, creates a new AKRAM or raises the
existing
% singleton*.
%
% H = AKRAM returns the handle to a new AKRAM or the
handle to
% the existing singleton*.
%
% AKRAM('CALLBACK',hObject,eventData,handles,...) calls
the local
% function named CALLBACK in AKRAM.M with the given
input arguments.
%

- 86 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% AKRAM('Property','Value',...) creates a new AKRAM or


raises the
% existing singleton*. Starting from the left, property value
pairs are
% applied to the GUI before Akram_OpeningFunction gets
called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to Akram_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI
allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help Akram

% Last Modified by GUIDE v2.5 24-Mar-2007 20:12:50

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Akram_OpeningFcn, ...
'gui_OutputFcn', @Akram_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
- 87 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});


else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before Akram is made visible.


function Akram_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Akram (see VARARGIN)

% Choose default command line output for Akram


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes Akram wait for user response (see


UIRESUME)
% uiwait(handles.figure1);
x=1:0.5:4;
y1=[1 1 2 0 2 1 1];
y2=[5 5 6 4 6 5 5];
plot(x,y1,x,y2)
axis off

% --- Outputs from this function are returned to the command line.
function varargout = Akram_OutputFcn(hObject, eventdata,
handles)
- 88 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% varargout cell array for returning output args (see


VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

function ed1_Callback(hObject, eventdata, handles)


% hObject handle to ed1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of ed1 as text


% str2double(get(hObject,'String')) returns contents of ed1 as a
% double
ed1= str2double(get(hObject, 'String'));
if isnan(ed1)
set(handles.ed1, 'String',[]);
errordlg('Input must be a number','Error');
end

% --- Executes during object creation, after setting all properties.


function ed1_CreateFcn(hObject, eventdata, handles)
% hObject handle to ed1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on


Windows.
- 89 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% See ISPC and COMPUTER.


if ispc
set(hObject,'BackgroundColor','white');
else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackground
Color'));
end

% --- Executes on button press in pb_cal.


function pb_cal_Callback(hObject, eventdata, handles)
% hObject handle to pb_cal (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
r_s=get(handles.r_s,'value');
r_p=get(handles.r_p,'value');
r1=get(handles.ed1,'string');
r2=get(handles.ed2,'string');
r1=str2num(r1);
r2=str2num(r2);
if r_s==1
r=r1+r2;
elseif r_p==1
r=(r1*r2)/(r1+r2);
end
set(handles.r_eq,'string',r);

function ed2_Callback(hObject, eventdata, handles)


% hObject handle to ed2 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
- 90 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% Hints: get(hObject,'String') returns contents of ed2 as text


% str2double(get(hObject,'String')) returns contents of ed2 as a
% double
ed2= str2double(get(hObject, 'String'));
if isnan(ed2)
set(handles.ed2, 'String',[]);
errordlg('Input must be a number','Error');
end

% --- Executes during object creation, after setting all properties.


function ed2_CreateFcn(hObject, eventdata, handles)
% hObject handle to ed2 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all CreateFcns
called

% Hint: edit controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackground
Color'));
end

% --- Executes on button press in pb_reset.


function pb_reset_Callback(hObject, eventdata, handles)
% hObject handle to pb_reset (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
- 91 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% handles structure with handles and user data (see GUIDATA)


set(handles.ed1,'string',[]);
set(handles.ed2,'string',[]);
set(handles.r_s,'value',0);
set(handles.r_p,'value',0);
set(handles.r_eq,'string',[]);
set(handles.pb_cal,'enable','off')

% --- Executes on button press in pb_close.


function pb_close_Callback(hObject, eventdata, handles)
% hObject handle to pb_close (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
close

% --- Executes on button press in redy.


function redy_Callback(hObject, eventdata, handles)
% hObject handle to redy (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
r11=get(handles.ed1,'string');
r1=isempty(r11);
r22=get(handles.ed2,'string');
r2=isempty(r22);
r_s=get(handles.r_s,'value');
r_p=get(handles.r_p,'value');
if r1==0 & r2==0 & r_s==1
set(handles.pb_cal,'enable','on')
- 92 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

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

% --- Executes on button press in pb_about.


function pb_about_Callback(hObject, eventdata, handles)
- 93 - ‫مختار القاسمي‬.‫م‬
0932862329
MATLAB R2010

% hObject handle to pb_about (see GCBO)


% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
global a
a=get(handles.figure1,'position')
muk_about

% --- Executes on button press in r_s.


function r_s_Callback(hObject, eventdata, handles)
% hObject handle to r_s (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of r_s

M file for About:

% 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‬ليظ ھر ل نا نا فذة‬
‫الخصائص التالية ‪:‬‬

‫‪- 95 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫نختار خاصية الـ‪ string‬ونحذف جملة ‪text edit‬‬

‫ثم نضغط على زر ‪ pop-up‬مرتين ونغير الـ ‪ string‬أيضا كالتالي‬

‫‪- 96 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫اضغط ھنا‬

‫تحذف العبارة الموجودة وتستبدل كتابة األلوان كاآلتي‪:‬‬

‫‪- 97 -‬‬ ‫م‪.‬مختار القاسمي‬


‫‪0932862329‬‬
‫‪MATLAB R2010‬‬

‫ثم نضغط على زر ‪ push‬مرتين ونغير الـ ‪ string‬أيضا ونضع كلمة أحسب مثال‬

‫وبالتالي نصل على ھذا الشكل‪:‬‬

‫اآلن سننتقل إلى برمجة األزرار ثم نعود إلى التنسيقات‬


‫‪- 98 -‬‬ ‫م‪.‬مختار القاسمي‬
‫‪0932862329‬‬
MATLAB R2010

‫برمجة زر أحسب‬

function calculate2_Callback(hObject, eventdata,


handles)

% hObject handle to calculate2 (see GCBO)

% eventdata reserved - to be defined in a future


version of MATLAB

% handles structure with handles and user data


(see GUIDATA)

h=get(handles.popupmenu1,'value')

g=get(handles.popupmenu2,'value')

e=get(handles.popupmenu3,'value')

r=get(handles.popupmenu4,'value')

i='0'

v=[num2str(h-1) num2str(g-1) num2str(e-1)


repmat(i,1,r-1)]

if r==11

v=num2str(str2double(v)*(10^(-11)))

elseif r==12

v=num2str(str2double(v)*(10^(-13)))

end

if (str2double(v)>=1000 & str2double(v)<1000000)

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

- 100 - ‫مختار القاسمي‬.‫م‬


0932862329

You might also like