ماتلاب للحوسبة العددية

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 362

‫ماتالب للحوسبة العددية‬

‫اﻟﻤﮭﻨﺪس سيمون طربوش‬

‫‪ISSN: 2617-989X‬‬
‫ماتالب للحوسبة العددية‬
‫اﻟﻤﮭﻨﺪس سيمون طربوش‬

‫من منشورات الجامعة االفتراضية السورية‬


‫الجمهورية العربية السورية ‪2020‬‬

‫هذا الكتاب منشور تحت رخصة المشاع المبدع – النسب للمؤلف – حظر االشتقاق (‪)CC– BY– ND 4.0‬‬

‫‪https://creativecommons.org/licenses/by-nd/4.0/legalcode.ar‬‬

‫يحق للمستخدم بموجب هذه الرخصة نسخ هذا الكتاب ومشاركته وإعادة نشره أو توزيعه بأية صيغة وبأية وسيلة للنشر وألية غاية تجارية‬
‫أو غير تجارية‪ ،‬وذلك شريطة عدم التعديل على الكتاب وعدم االشتقاق منه وعلى أن ينسب للمؤلف األصلي على الشكل اآلتي حصرا‪:‬‬
‫م‪ .‬سيمون طربوش‪ ،‬اإلجازة في تقانة االتصاالت ‪ ،BACT‬من منشورات الجامعة االفتراضية السورية‪ ،‬الجمهورية العربية السورية‪،‬‬
‫‪2020‬‬

‫متوفر للتحميل من موسوعة الجامعة ‪https://pedia.svuonline.org/‬‬

‫‪MATLAB for Numerical Computing‬‬


‫‪Eng. Simon Tarbouche‬‬

‫)‪Publications of the Syrian Virtual University (SVU‬‬

‫‪Syrian Arab Republic, 2020‬‬

‫‪Published under the license:‬‬

‫‪Creative Commons Attributions- NoDerivatives 4.0‬‬

‫)‪International (CC-BY-ND 4.0‬‬

‫‪https://creativecommons.org/licenses/by-nd/4.0/legalcode‬‬

‫‪Available for download at: https://pedia.svuonline.org/‬‬


‫الفهرس‬
Introduction to MATLAB )‫ (مفاهيم عامة‬MATLAB® ‫ مدخل إلى بيئة‬:‫الفصل األول‬
®

5.......................................................................... Environment (General Concepts)


7.....What is MATLAB® and what it used for? ،‫ وما هي استخداماته‬MATLAB ‫ ما هو‬.1
7.................................... Getting to know MATLAB® ،MATLAB ‫ التعرف على‬.1-1
7................... Historical Overview about the software ،‫ لمحة تاريخية عن البرمجية‬.2-1
8............................................................. MATLAB® System ،MATLAB ‫ نظام‬.3-1
9......................................................... MATLAB® uses ،MATLAB ‫ استخدامات‬.4-1
11.......................................................... Features of MATLAB ،MATLAB ‫ ميزات‬.2
11.............................................. What are MATLAB® features ،‫ ما هي الميزات‬.1-2
12.........................................................Numeric Computation? ‫ الحسابات العدّدية‬.2-2
13...............................Data Analysis and Visualization ‫ تحليل المعطيات واظهارها‬.3-2
16.............................. Resources for Learning MATLAB® ،MATLAB ‫ موارد لتعلم‬.3
18................................................................... Software Versions ،‫ إصدارات البرمجية‬.4
19.................................. Installing MATLAB® software ،MATLAB ‫ تنزيل برمجية‬.5
Understaning MATLAB® user interface ،MATLAB ‫ فهم الواجهة التخاطبية لبرمجية‬.6
31...............................................................................................................................
47............................................................................ Important notes ،‫ مالحظات هامة‬.7
51.................................................................................................................. ‫ األسئلة‬.8
52................................................................................................................ ‫ اإلجابات‬.9
Fundamentals of ،)‫ (النحو والمتحوالت‬MATLAB® ‫ أساسيات لغة البرمجة‬:‫الفصل الثاني‬
53.......................... MATLAB® Programming Language (Syntax and Variables)
55......................................................................... ‫ وما هي استخداماته‬MATLAB ‫ ما هو‬.1
55. Syntax and using of commands ،Commands ‫ واستخدام التعليمات‬Syntax ‫ النحو‬.1-1
62......... Working with variables in MATLAB ،MATLAB ‫ العمل مع المتحوالت ضمن‬.2
62............................................... Introduction on variables ،‫ مقدمة عن المتحوالت‬.1-2
67....................... how to define a scalar variable ،scalar ‫ كيف نعرف متحول سلمي‬.2-2
71............................................ how to define a vector ،Vector ‫ كيف نعرف شعاع‬.3-2
74........................................ how to define a matrix ،Matrix ‫ كيف نعرف مصفوفة‬.4-2
76............................................ how to define an array ،Array ‫ كيف نعرف صفيفة‬.5-2

-1-
78............................................. Operators in MATLAB ،MATLAB ‫ المؤثرات ضمن‬.3
97.................................................................................................................. ‫ األسئلة‬.4
100.............................................................................................................. ‫ اإلجابات‬.5
Programming ،)‫ والتوابع‬scripts ‫ (استخدام ملفات‬-1- MATLAB® ‫ البرمجة في‬:‫الفصل الثالث‬
102..................................... in MATLAB® -1- (Use of Scripts files and Functions)
104............................ File extensions in MATLAB ،MATLAB ‫ لواحق الملفات ضمن‬.1
105....................................................................................... Scripts Vs Functions.2
106..Comparison between scripts and functions ،functions‫ و‬scripts ‫ مقارنة بين‬.1-2
106................................... How to create new script? ،new script ‫ كيف يتم إنشاء‬.2-2
Getting to know text ،MATLAB ‫ ضمن‬Editor ‫ التعرف على محرر النصوص‬.3-2
109.......................................................................................... Editor in MATLAB
112........................................ ?How to save script file ،Script ‫ كيف يتم حفظ ملف‬.4-2
113.................................. How to run script file? ،Script ‫ ملف‬Run ‫ كيف يتم تنفيذ‬.5-2
114........... Add comments and help to your programs ،‫ إضافة تعليقات إلى البرامج‬.6-2
Run code section (Division into cells) ،)‫ تنفيذ مقاطع من الرمازات (التقسيم إلى خاليا‬.7-2
116..........................................................................................................................
117.......................... How to create new function? ،new function ‫ كيف يتم إنشاء‬.8-2
119............................... Examples about creating functions ،‫ أمثلة عن إنشاء توابع‬.9-2
124........................Convert script file to function ،Function ‫ إلى‬Script ‫ تحويل‬.10-2
125........................................... Function Types ،Function Types ‫ أنواع التوابع‬.11-2
‫ السالسل‬،‫ البيانيات واإلظهار‬،‫ (عبارات التحكم بالتدفق‬-2- MATLAB® ‫ البرمجة في‬:‫الفصل الرابع‬
Programming in MATLAB® -2- (Control Flow Statements, ،)‫المحرفية‬
134................................................................. Graphics and Visualization, Strings)
136..................................................... Control Flow Statements ،‫ تعابير التحكم بالتدفق‬.1
137.................................................... Conditional Statements ،‫ العبارات الشرطية‬.1-1
149............................................................................................. Loops ،‫ الحلقات‬.2-1
150............................................................................... while loop ،while ‫ حلقة‬.3-1
152........................................................................................ for loop ،for ‫ حلقة‬.4-1
158.............................................................................. Strings ،‫ السالسل المحرفية‬.5-1
161.............................................. Graphics and visualization،‫ البيانيات واإلظهار‬.6-1
182................................................................................................................ ‫ األسئلة‬.2
183.............................................................................................................. ‫ اإلجابات‬.3

-2-
،‫ التعامل مع الصور والملفات الصوتية‬،‫ تمثيل المعطيات (استيراد وتصدير المعطيات‬:‫الفصل الخامس‬
Data Representations (Data Import & Export, Dealing with ،)‫مقدمة عن األدوات‬
186............................................................................. Images & Sounds, Toolboxes)
188.................................................................................. Data types ،‫ أنماط المعطيات‬.1
189.......................... Data Type Identification،‫التعرف على (تحديد) أنماط المعطيات‬
ّ .1 - 1
191......................................... Data Type Conversion،‫ التحويل بين أنماط المعطيات‬.2-1
193....................................................................... Data Import،‫ استيراد المعطيات‬.3-1
204....................................................................... Data Export،‫ تصدير المعطيات‬.4-1
205........................................................ Dealing with Images،‫ التعامل مع الصور‬.5-1
207............................................ Dealing with Sounds،‫ التعامل مع الملفات الصوتية‬.6-1
209..................................................................................... Toolboxes،‫ األدوات‬.7-1
213................................................................................................................ ‫ األسئلة‬.2
215.............................................................................................................. ‫ اإلجابات‬.3
،‫ اشتقاق‬،‫ حل جملة معادالت‬،‫ (جبر خطي‬MATLAB® ‫ تمارين رياضية باستخدام‬:‫الفصل السادس‬
Mathematical Exercises using MATLAB® (Linear ،)‫ كثيرات حدود‬،‫ تحويالت‬،‫تكامل‬
Algebra, Solving Equations, Derivation, Integration, Transforms and
218......................................................................................................... Polynomials)
220................................................................................................... Algebra ،‫ الجبر‬.1
221...................................... Solving Algebraic Equations،‫ حل المعادالت الجبرية‬.1-1
Solving System of Equations using ،‫ حل جملة معادالت باستخدام المصفوفات‬.2-1
226............................................................................................................ Matrices
Expanding and Collecting Equations ،MATLAB ‫ تجميع وتفريق المعادالت ضمن‬.3-1
228..................................................................................................... in MATLAB
Factorization and Simplification of Algebraic ،‫ ﺗﺤﻠﯿﻞ وتبسيط التعابير الجبرية‬.4-1
229...................................................................................................... Expressions
230.......................................................................... Polynomials،‫ كثيرات الحدود‬.5-1
233............................................................................................ Limits ،‫ النهايات‬.6-1
237.................................................................................... Derivation ،‫ االشتقاق‬.7-1
242..................................................................................... Integration ،‫ التكامل‬.8-1
246................................................... Differential Equations ،‫ المعادالت التفاضلية‬.9-1
251.............................................................................. Transforms ،‫ التحويالت‬.10-1
255.......................................... Probability and Statistics،‫ االحتماالت واإلحصاء‬.11-1

-3-
257................................................................................................................ ‫ األسئلة‬.2
259.............................................................................................................. ‫ اإلجابات‬.3
261................. Simulation using Simulink® ،Simulink® ‫ المحاكاة باستخدام‬:‫الفصل السابع‬
263................. Introduction on Simulink® Environment ،Simulink® ‫ مقدمة عن بيئة‬.1
265........................................Start of using Simulink® ،Simulink® ‫ البدء في استخدام‬.2
268.............................................. Principle of Simulink Work ،Simulink ‫ مبدأ عمل‬.3
getting to know more about Simulink libraries ،Simulink ‫ التعرف أكثر على مكاتب‬.4
269.............................................................................................................................
273................................................................................................. Examples ،‫ أمثلة‬.5
318........... Graphical User Interface GUI ،GUI ‫ الواجهات البيانية التخاطبية‬:‫الفصل الثامن‬
Introduction on Graphical User Interface ،GUI ‫ مقدمة عن الواجهات البيانية التخاطبية‬.1
320...................................................................................................................... GUI
320...................................... What is a User Interface UI? ،‫ ما هي الواجهات التخاطبية؟‬.2
322.................... How does a User Interface UI work? ،‫ كيف تعمل الواجهات التخاطبية؟‬.3
Ways to build MATLAB User Interfaces ،MATLAB ‫ طرق بناء واجهات بيانية ضمن‬.4
323....................................................................................................................... UIs
324....................... Getting Start with GUI ،GUI ‫ بدء العمل مع الواجهات البيانية التخاطبية‬.5
Getting to know more ،‫ واستخدامه في بناء واجهة بيانية تخاطبية‬GUIDE ‫ التعرف أكثر على‬.6
331............................................................ about GUIDE and user it to build a GUI
348................................................................................................. Examples ،‫ أمثلة‬.7

-4-
MATLAB for Numerical Computing-Ch1

MATLAB® ‫ مدخل إلى بيئة‬:‫الفصل األول‬


)‫(مفبهيم عبمة‬
Introduction to MATLAB® Environment
(General Concepts)

-0-

-5-
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫عنوان الموضوع‪:‬‬
‫مدخل إلى بيئة ®‪( MATLAB‬مفاىيم عامة)‬
‫)‪Introduction to MATLAB® Environment (General Concepts‬‬
‫الكممات المفتاحية‪:‬‬
‫®‪ ،MathWorks® ،MATLAB‬لغة برمجة عالية المستوى‪،Help ،Command Window ،Workspace ،‬‬
‫‪ ،Toolstrip ،Documentation‬واجية بيانية تخاطبية ‪.Toolboxes ،Simulink ،GUI‬‬
‫ممخص‪:‬‬
‫نقدم في ىذا الفصل تعريف ببرمجية ®‪ MATLAB‬وأجزائيا ‪ ،‬حيث سنتعرف عمى لغة البرمجة ®‪MATLAB‬‬
‫واالستخدامات العديدة ليذه البرمجية في تطبيقات ومجاالت متنوعة كيندسة االتصاالت والتحكم‪ ،‬وسنتعرف أيضًا‬
‫عمى الميزات اليامة والمختمفة التي تتمتع بيا برمجية ®‪ .MATLAB‬ثم سننتقل إلى التعرف عمى الواجيات‬
‫البيانية ضمن البرمجية‪ ،‬وطريقة استخدام كل منيا‪.‬‬
‫أىداف تعميمية‪:‬‬
‫يتعرف الطالب في ىذا الفصل عمى‪:‬‬
‫‪ ‬مقدمة عن لغة البرمجة ®‪MATLAB‬‬
‫‪ ‬مكونات البيئة‬
‫‪ ‬استخدامات ®‪ MATLAB‬في المجاالت المتنوعة وميزاتو‬
‫‪ ‬استخدام ‪ HELP‬الموجودة ضمن البرمجية وىو أكثر األمور أىميةً حتى نياية المقرر‪.‬‬

‫‪ ‬التعامل مع الواجية التخاطبية لمبرمجية وفيم مكوناتيا‪ ،‬واستخدامات كل منيا‪.‬‬

‫‪-6-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ماىو ‪ MATLAB‬وما ىي استخداماتو‬


‫‪ .1‬التعرف عمى ‪MATLAB‬‬

‫‪ ،MATLAB‬اختصار ل ـ‪MATrix LABoratory‬‬


‫أي مختبر المصفوفات‪ ،‬وىي إحدى لغات البرمجة‬
‫عالية المستوى‪ ،‬قامت شركة ®‪MathWorks‬‬
‫اسم‬ ‫عمييا‬ ‫أطمقت‬ ‫برمجية‬ ‫بيئة‬ ‫بتطوير‬
‫وتطوير‬ ‫برمجة‬ ‫بيدف‬ ‫‪ MATLAB‬أيضًا‪،‬‬
‫التطبيقات اعتمادًا عمى لغة ‪MATLAB‬؛ تتميز‬
‫ىذه البيئة بأنيا تفاعمية وسيمة االستعمال حيث‬
‫يتم صياغة المشاكل والحمول باستخدام الصيغ‬
‫والرموز الرياضية‪ ،‬تستخدم ىذه البرمجية من قبل‬
‫الماليين من الميندسين والعمماء في جميع أنحاء العالم‪.‬‬

‫‪ .2‬لمحة تاريخية عن البرمجية‬


‫نقدم في ىذه الفق رة لمحة تاريخية يفضل ان يتم عرضيا عمى شكل تعدادات متالحقة باستخدام ‪ bullets‬الموجودة‬
‫ضمن ‪ word or powerpoint‬اي عمى الشكل‬

‫‪-7-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ ‬قام ‪ ، Cleve Moler‬المسؤول عن قسم عموم الحاسب في جامعة ‪ ،New Mexico‬بالبدء بتطوير‬
‫‪ MATLAB‬في الفترة بين ‪1980-1970‬؛‬
‫وقد كان اليدف من بناء لغة البرمجة وتصميم البرمجية ىو منح الطالب القدرة عمى التعامل مع‬ ‫‪‬‬
‫برمجيات مبنية بمغة ‪ Fortran‬دون الحاجة لتعمم لغة ‪Fortran‬‬
‫وقد القت الفكرة نجاحًا كبي اًر وأخذت باالنتشار إلى العديد من الجامعات‪ ،‬كما أنيا راعت انتباه العاممين‬ ‫‪‬‬
‫في مجال الرياضيات التطبيقية‪.‬‬
‫‪ ‬بعد ذلك قام الميندس ‪ Jack Little‬بمقاء ‪ Cleve Moler‬وأدرك قيمة ىذه البرمجية من الناحية‬
‫التطبيقية والتجارية؛ لذلك قام الميندس جاك مع ‪ Cleve Moler‬و‪ Steve Bangert‬بإنشاء شركة‬
‫واعادة كتابة ‪ MATLAB‬بمغة ‪ C‬واضافة العديد من المكاتب‬ ‫®‪ Mathwork‬في عام ‪1984‬‬
‫‪ Libraries‬التي تحتوي عمى عدد كبير من التوابع الرياضية بيدف تسييل عمل المستخدم وزيادة كفاءة‬
‫البرمجية‪،‬‬
‫‪ ‬ومنذ ذلك الحين وحتى اآلن يتم تطوير البرمجية واضافة مكاتب وأدوات ‪ Toolboxes‬تسيل العمل في‬
‫مجاالت عممية وىندسية مختمفة ومتنوعة حتى أصبحت البرمجية مستخدمة في أنظمة التحكم‪ ،‬معالجة‬
‫اإلشارة واالتصاالت‪ ،‬معالجة الصورة والفيديو‪ ،‬االختبار والقياس ‪.Test and Measurement‬‬
‫‪ ‬في عام ‪ 2004‬أصبح عدد مستخدمي ‪ MATLAB‬حوالي مميون مستخدم موزعين بين الشركات‬
‫الصناعية‪ ،‬األبحاث العممية و المجال األكاديمي‪ ،‬في وقتنا الراىن يزيد عدد مستخدمي ىذه البرمجية عن‬
‫عشرة ماليين مستخدم‪ ،‬إضافةً لوجود أكثر من ‪ 1500‬كتاب لتعميم ‪ MATLAB‬ب ‪ 72‬لغة مختمفة‪.‬‬

‫‪ .3‬نظام ‪MATLAB‬‬
‫يتألف نظام ‪ MATLAB‬من أربعة أجزاء رئيسية ىي‬
‫‪ .1‬لغة البرمجة ‪)Prgramming Language MATLAB( MATLAB‬‬
‫وىي لغة برمجة عالية المستوى تحتوي عمى ‪ control flow statement‬مثل ‪،if else, switch‬‬
‫توابع‪ ،‬بنى معطيات ‪ ، data structure‬وميزات البرمجة غرضية التوجو من حيث التعامل مع صفوف‬
‫‪ classes‬ومفاىيم الوراثة واألغراض‪.‬‬
‫‪ .2‬بيئة ‪)MATLAB Environment( MATLAB‬‬
‫وىي البيئة المكونة من مجموعة من الواجيات واألدوا ت التي يتم العمل معيا من قبل المستخدمين‬
‫والمبرمجين‪ ،‬حيث تحتوي عمى حقول مخصصة لتعريف وتنظيم المتحوالت‪ ،‬تصدير واستيراد معطيات‪،‬‬
‫تطوير وتنفيذ برامج وتطبيقات‪.‬‬
‫‪Handle Graphics .3‬‬
‫وىو عبارة عن نظام الرسومات والبيانيات ضمن ‪ ،MATLAB‬يحتوي عمى تعميمات إلنشاء رسومات‬
‫ثنائية وثالثية األبعاد بيدف إظيار المعطيات‪ ،‬معالجة الصور‪ ،‬تحريك الرسوم وعرضيا‪ ،‬إضاف ًة لمعديد‬
‫من اإلضافات والخيارات لتوضيح األشكال ككتابة تعميقات وعناوين واضافة أسماء لممحاور؛ كما‬

‫‪-8-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫يتضمن ىذا النظام عمى أدوات مساعدة في بناء الواجيات البيانية التخاطبية ‪GUI Graphical User‬‬
‫‪.Interface‬‬
‫‪ .4‬مكاتب التوابع الرياضية الخاصة ب ـ‪MATLAB‬‬
‫وىي عبارة عن مجموعة واسعة من الخوارزميات الحسابية البسيطة (مثل الجمع‪ ،‬حساب جيب وتجيب‬
‫الزاوية‪ ،‬العمميات العقدية) والمقعدة (مثل مقموب مصفوفة‪ ،‬حساب القيم الذاتية لمصفوفة‪ ،‬توابع بيسل‬
‫‪ ،Bessel‬تحويل فورييو السريع)‪.‬‬

‫‪ .4‬استخدامات ‪MATLAB‬‬
‫تعترب الصفيفة ‪ Array‬عنصر ادلعطيات األساسي ‪ data element‬يف هذه الربجمية‪ ،‬مما يتيح لنا إجراء عمليات خمتلفة‬
‫على ادلعطيات وذلك بغض النظر عن طريقة دتثيلها‪ ،‬كادلعطيات ادلمثلة بشكل مصفوفات ‪ Matrices‬حيث ميكن ضرهبا‬
‫ومجعها وإجراء عدد كبري من العمليات عليها‪ ،‬كما تسمح لنا الربجمية بإجراء العمليات احلسابية‪ ،‬حتليل وإظهار‬
‫ادلعطيات‪ ،‬رسم التوابع‪ ،‬تنجيز وتطوير اخلوارزميات‪ ،‬إنشاء واجهات بيانية ختاطبية ‪GUI Graphical User Interface‬‬
‫‪ ،‬التعامل مع تطبيقات مبنية اعتماداً على لغات برجمة خمتلفة مثل ‪.C, C++, Java,C#, Fortran‬‬

‫التصور ‪ Visualization1‬ومحاكاة األفكار‬


‫ّ‬ ‫تقدم لنا ىذه البرمجية أيضًا خيا رات واسعة تفيد في االسكتشاف‪،‬‬
‫إضافةً إلى التطوير في مختمف االختصاصات؛ نذكر منيا االتصاالت‪ ،‬أنظمة التحكم‪ ،‬معالجة اإلشارة والصورة‪.‬‬
‫إضاف ًة لذلك فيي تستخدم ضمن العديد من الجامعات والمعاىد العالمية في مجال التدريس كالجبر الخطي‬
‫العددي‪ ،‬البحث األكاديمي‪ ،‬والنمذجة ‪.modeling‬‬
‫والتحميل ّ‬
‫تستخدم ىذه البرمجية‪ ،‬عمميًا‪ ،‬في بناء وتنجيز عدد كبير من التطبيقات والمشاريع في مجاالت ومواضيع متنوعة؛‬
‫ال تتيح لنا نمذجة استيالك الطاقة لبناء شبكات الطاقة الذكية‪ ،‬وتطوير خوارزميات التحكم‪ ،‬وتحميل بيانات‬
‫فمث ً‬
‫الطقس لتصور أحول الطقس ومسار وشدة األعاصير‪.‬‬
‫يبين لنا الشكل التالي منتجات شركة ‪ Mathwork‬والمواضيع المختمفة التي جرى مكاممتيا ضمن برمجية‬
‫‪ MATLAB‬حيث تحتوي ىذه البرمجية عمى قسم خاص بالبرمجة بمغة ‪ ،MATLAB‬جزء ‪ Simulink‬من أجل‬
‫المحاكاة‪ ،‬أدوات ‪ Toolboxes‬تيتم بعدد كبير من المجاالت مثل الرياضيات و اإلحصاء واألمثمة‬
‫‪Test and‬‬ ‫‪ ، Optimization‬أنظمة التحكم‪ ،‬معالجة اإلشارة واالتصاالت‪ ،‬االختبارات والقياسات‬
‫‪.Measurement‬‬

‫‪1‬‬
‫‪Visualization is the process of representing abstract business or scientific data as images or graphics that‬‬
‫‪can aid in understanding the meaning of the data.‬‬
‫وىي عممية تمثيل المعطيات التجارية أوالعممية المجردة باستخدام الصور أو الرسوم البيانية بحيث تساعد في فيم معنى وداللة المعطيات‬

‫‪-9-‬‬
MATLAB for Numerical Computing-Ch1

-10-
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ميزات ‪Features of MATLAB ،MATLAB‬‬


‫‪ .1‬ما ىي الميزات‬
‫العددية‪ ،‬تطوير التطبيقات و‪.Visualization‬‬
‫‪ ‬لغة برمجة عالية المستوى تستخدم في الحسابات ّ‬
‫‪ ‬بيئة تفاعمية تستخدم في البحث واستخالص النتائج‪ ،‬حل المشاكل‪ ،‬تصميم وتنفيذ خوارزميات مختمفة‪.‬‬
‫‪Fourier‬‬ ‫تشتمل عمى توابع رياضية تفيد في مجاالت الجبر الخطي‪ ،‬اإلحصاء‪ ،‬تحميل فورييو‬ ‫‪‬‬
‫‪ ،Analysis‬الترشيح ‪ ،Filtering‬أم ّثمة الخوارزميات ‪ ،Algorithms Optimization‬التكامالت‬
‫العددية‪ ،‬وحل المعادالت التفاضمية الجزئية ‪.Differential Equations‬‬
‫ّ‬
‫رسومات بيانية من ضمن البرمجية (‪ )built-in graphics‬تفيد في إظيار المعطيات‪ ،‬إضاف ًة ألدوات‬ ‫‪‬‬
‫‪ Toolboxes‬تستخدم في إنشاء أشكال ومنحنيات تتناسب مع متطمبات المستخدم‪.‬‬
‫‪ ‬أدوات تستخدم في تحسين نوعية الرماز ‪ code‬من حيث زمن التنفيذ‪ ،‬والحصول عمى أداء أفضل‪.‬‬
‫‪ ‬واجيات بيانية ‪ GUI‬يقوم المستخدم ببنائيا تحتوي عمى خيارات تصميمية متنوعة تتناسب مع التطبيق‪.‬‬
‫توابع تفيد في مكاممة الخورازميات التي تم برمجتيا باستخدام ‪ MATLAB‬مع تطبيقات ولغات برمجة‬ ‫‪‬‬
‫®‬
‫مختمفة مثل ‪ ،.NET ،C# ،JAVA ،C‬و ‪.Microsoft Excel‬‬

‫عنوان الشكل‪ :‬تحميل واظيار المعطيات باستخدام برمجية ‪ .MATLAB‬إن بيئة ‪ MATLAB‬تتيح لممستخدم كتابة‬
‫الرمازات البرمجية والبرامج وتطوير الخوارزميات والتطبيقات‪.‬‬

‫‪-11-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫العددية ‪Numeric Computation‬‬


‫‪ .2‬الحسابات ّ‬
‫العددي تستخدم في معالجة المعطيات‪ ،‬تطوير‬
‫يؤمن لنا ‪ MATLAB‬مجموعة كبيرة من طرائق الحساب ّ‬
‫الخوارزميات‪ ،‬وتصميم نماذج رياضية ‪ Mathematical Models‬لتوصيف مسألة ما‪ ،‬حيث تحتوي لغة البرمجة‬
‫‪ MATLAB‬عمى عدد كبير من التوابع الرياضية التي تدعم مجاالت اليندسة المختمفة‪ .‬كما تؤمن لنا ىذه‬
‫البرمجية السرعة العالية في تنفيذ التوابع الرياضية المستخدمة في الحسابات الخاصة باألشعة والمصفوفات‪ ،‬تعود‬
‫ىذه السرعة العالية في التنفيذ بسبب استخدام مكاتب جرى ضمنيا مسبقًا بناء التوابع بط ريقة أمثمية‪ .‬نستعرض‬
‫فيما يمي أىم الطرائق الحسابية‪:‬‬
‫‪ ‬االستيفاء والط رائق العودية ‪.Interpolation and Regression‬‬
‫‪ ‬التفاضل والتكامل ‪.Differentiation and integration‬‬
‫‪ ‬جممة معادالت خطية ‪.Linear systems of equations‬‬
‫‪ ‬تحميل فورييو ‪Fourier analysis‬‬
‫‪ ‬القيم الذاتية والقيم المنفردة ‪Eigenvalues and singular values‬‬
‫‪ ‬معادالت تفاضمية ‪Differential Equations‬‬
‫ياضية في مجاالت مختمفة نذكر منيا‪:‬‬
‫تؤمن لنا الطرائق الحسابية السابقة إجراء العديد من الحسابات الر ّ‬
‫‪ Dealing with Matrices and Arrays ‬التعامل مع المصفوفات واألشعة‬
‫‪ 2-D and 3-D Plotting and graphics‬رسومات واظيارات بيانية ثنائية وثالثية األبعاد‬ ‫‪‬‬
‫‪ Linear Algebra‬الجبر الخطي‬ ‫‪‬‬
‫‪ Algebraic Equations‬المعادالت الجبرية‬ ‫‪‬‬
‫‪ Non-linear Functions‬التوابع غير الخطية‬ ‫‪‬‬
‫‪ Statistics ‬اإلحصاء‬
‫‪ Data Analysis‬تحميل المعطيات‬ ‫‪‬‬
‫‪ Differential Equations‬المعادالت التفاضمية‬ ‫‪‬‬
‫العددية‬
‫‪ Numerical Calculations‬الحسابات ّ‬ ‫‪‬‬
‫‪ Integration and differentiation‬التكامالت واالشتقاق‬ ‫‪‬‬
‫‪ Transforms such as Fourier and Laplace‬التحويالت مثل تحويل البالس وتح ويل فورييو‬ ‫‪‬‬
‫‪Curve Fitting‬‬ ‫‪‬‬
‫يتيح ‪ MATLAB‬أيضًا الحصول عمى منتجات إضافية متخصصة في عدة مجاالت كاإلحصاء‪ ،‬األمثمة‬
‫‪ ،Optimization‬ومعالجة اإلشارة ‪.Signal Proccessing‬‬

‫‪-12-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫صورة عمى استخراج شكل منحني من مجموعة من المعطيات باستخدام ‪Cubic Interpolation‬‬

‫‪ .3‬تحميل المعطيات واظيارىا ‪Data Analysis and Visualization‬‬


‫عدة أدوات ‪ Tools‬لمحصول عمى‪ ،‬تحميل‪ ،‬واظيار المعطيات وأخي اًر يمكن الحصول عمى‬
‫يؤمن لنا ‪ّ MATLAB‬‬
‫عددية‪.‬‬
‫ممفات ‪ document‬تحتوي عمى النتائج الخاصة بالمستخدم كأشكال ومنحنيات ورسومات ونتائج ّ‬
‫تتيح لنا الربجمية‪ ،‬من أجل الحصول عمى المعمومات ‪ ،‬إمكانية النفاذ إىل معطيات موجودة ضمن ملفات ‪ ،text‬قواعد‬
‫معطيات ‪ ، Microsoft Excel ،Databases‬صور‪ ،‬صوت وملفات فيديو وذلك على اختالف الصيغ للمعطيات‬
‫حيث جرى بناء عدد كبري من توابع دخل‪/‬خرج ‪ I/O‬وهي اختصار ل ‪ .Input/Output‬كما ميكن احلصول على‬
‫ادلعطيات من احلاسب عن طريق البوابة التسلسلية ‪ Serial Port‬أو كرت الصوت ‪.Sound Card‬‬

‫‪-13-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫مثال على جلب ‪ import‬معطيات إىل ‪ MATLAB‬باستخدام ‪ Import Tool‬حيث يقوم ‪ MATLAB‬بشكل‬
‫اتوموماتيكي بإنشاء ‪ script‬او تابع حيوي على ادلعطيات اليت مت جلبها بواسطة األداة‪.‬‬
‫من أجل تحميل المعطيات يوجد العديد من األدوات التي تتيح لنا عممية التحميل‪ ،‬نذكر منيا ‪Curve Fitting‬‬
‫‪ Tool‬المبينة في الشكل حيث يتم إيجاد صيغة رياضية تحميمة لسطح يتالئم مع المعطيات التجريبية‪.‬‬

‫‪-14-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪Fitting a surface to data with a custom model using MATLAB and Curve Fitting Toolbox.‬‬

‫من أجل إظيار النتائج إضاف ًة دلا سبق يوجد أدوات وتوابع مبختلف األحداثيات كالقطبية والديكارتية والكروية و‬
‫منحنيات ثنائية األبعاد أو ثالثية األبعاد ‪ .‬الشكل التايل يبني لنا اخليارات العديدة ادلمكن إضافتها على ادلنحنيات الناجتة‬
‫هبدف عرضها بالطريقة‪ ،‬واأللوان واحلجم ادلناسب إضاف ًة إلمكانية إدراج تسميات للمحاور واألشكال‪.‬‬

‫‪-15-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫موارد لتعمم ‪MATLAB‬‬


‫ىو‬ ‫الشركة‬ ‫(موقع‬ ‫®‪MathWorks‬‬ ‫قبل‬ ‫من‬ ‫والمتوفرة‬ ‫المفيدة‬ ‫الموارد‬ ‫من‬ ‫العديد‬ ‫يوجد‬
‫‪ )https://www.mathworks.com‬يرجى ذكر موقع الشركة ونصح الطالب بزيارتو والتي تمكننا من اكتشاف‬
‫المزيد والتعمم عن ‪ ،MATLAB‬ىذه الموارد ىي‪:‬‬

‫)‪(Documentation‬‬ ‫‪ .1‬الوثائق‬
‫‪(Functions and Code‬‬ ‫‪ .2‬التوابع والرما زات عمى شكل أمثمة تعميمية‬
‫)‪Examples‬‬
‫‪ .3‬الفيديوىات والوثائق التعميمية ( ‪)Videos and Tutorials‬‬

‫تؤمن الموارد السابقة شرح التعميمات والتوابع‪ ،‬والتغييرات التي ط رأت عمى البرمجية‪ ،‬تبعًا لإلصدارات المختمفة‬
‫)‪ ،(Release‬من حيث‪:‬‬
‫‪ - 1‬التعميمات ‪ - 2‬األدوات ‪ Toolboxes‬اإلضافية ‪ - 3‬التوابع حديثة التنجيز في كافة المجاالت‪.‬‬
‫ننوه ىنا إلى أمر ميم وىو إن لم تكن عمى دراية كافية بمطمبات المقرر ‪ prerequisities‬فيذه ليست بمشكمة‬
‫كبيرة حيث تعتبر برمجية ‪ MATLAB‬نفسيا إحدى أفضل المصادر لتعمم ىذه المفاىيم بسرعة وفاعمية كبيرة فيي‬
‫متميزة واستثنائية تقوم بشرح التعميمات وطريقة استخداميا بشكل واضح وصحيح‬
‫ّ‬ ‫تمتاز ب ــ"مساعدة ‪"HELP‬‬
‫مفصل إضاف ًة لممفاىيم المرتبطة بالتعميمة‪ ،‬والعالقات الرياضية في حال حاجتيا‪ ،‬وتعتبر من أفضل المراجع‬
‫و ّ‬
‫التي ينصح بالمجوء إلييا قبل استخدام أي تابع لضمان االستخدام الصحيح وتالفي األخطاء‪ .‬حيث يتم كتابة‬
‫‪ help‬ثم اسم التعميمة‬
‫من أجل تخصيص البحث والحصول عمى مساعدة مدعومة بأمثمة حول تعميمة يمكن استخدام أيضًا ‪ doc‬ثم اسم‬
‫التعميمة‬
‫كما أن البحث ضمن الوب وايجاد العديد من الممفات التعميمية )‪ (Tutorials‬قد يكون مفيداً عند اختيار المادة‬
‫المناسبة والمصدر الموثوق‪ ،‬إضاف ًة لوجود عدد كبير من الكتب المتعمقة بتعميم ‪ MATLAB‬و ‪Simulink‬‬
‫و‪.Toolboxes‬‬
‫بعض المواقع المفيدة‬
‫‪ http://www.mathworks.com/academia/student_center/tutorials/‬لمحصول عمى ‪Tutorials‬‬

‫‪ http://www.mathworks.com/products/MATLAB/videos.html‬لمحصول عمى فيديوىات تعميمية‬


‫‪ http://www.mathworks.com/company/events/webinars/index.html?id=&language=en‬فيديوىات‬
‫لبعض الندوات عمى االنترنت‬

‫‪ http://www.mathworks.com/MATLABcentral/‬وىو موقع لتبادل الممفات والخب رات ‪MATLA Central‬‬


‫‪ File Exchange‬حيث يوجد العديد من األمثمة التعميمية وبعض اإلجابات عن مشاكل واجيت المستخدمين وقد‬

‫‪-16-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫تم تقديم حمول مفيدة ليا وعدد كبير من التوابع المفيدة والمنجزة من قبل مستخدمي ‪ MATLAB‬وقد وضعت‬
‫ضمن الموقع لالستفادة منيا‪.‬‬

‫كما يمكن إنشاء حساب ‪ Account‬في موقع الشركة وىذا أمر ميم لمغاية‪.‬‬

‫‪-17-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫إصدارات البرمجية‬
‫نعرض في ىذه الفقرة بعض إصدارات البرمجية‪ ،‬حيث يتم في كل فترة زمنية تحديث البرمجية من حيث األداء‪،‬‬
‫التوافق مع البرمجيات األخرى ‪ ،compatibility‬الشكل والتفاعل مع المستخدم‪ ،‬تصحيح األخطاء في حال‬
‫وجودىا في اإلصدارات السابقة‪ ،‬إضافة توابع في مجاالت مختمفة تسيل عمل المستخدم‪ ،‬إضافة إمكانيات جديدة‬
‫في إظيار الرسوم والبيانات واستيراد وتصدير المعطيات وانشاء الواجيات البيانية‪ ،‬وفي بعض األحيان يتم إضافة‬
‫‪ Toolbox‬في مجال جديد لم يكن موجودًا في اإلصدارات السابقة‪ .‬بعض اإلصدارات ل ‪MATLAB‬‬

‫ويتم العمل ضمن شركة ®‪ MathWorks‬عمى إصدار ‪ ،R2015b‬يمكن عن طريق الرابط التالي‬
‫‪http://www.mathworks.com/help/MATLAB/release -notes.html‬‬

‫االطالع عمى مالحظات حول اإلصدارات المختمفة وذلك لمتعرف عمى ما ىو جديد من توابع ومكاتب و‬
‫‪ toolboxes‬أو ما تم إصالحو من أخطاء في اإلصدارات الجديدة‪.‬‬

‫‪-18-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫تنزيل برمجية ‪MATLAB‬‬


‫تستطيع تحميل برمجية ‪ MATLAB‬من خال ل الدخول إلى موقع شركة ®‪ MathWorks‬االلكتروني وىو‬
‫‪ http://www.mathworks.com‬وىذه الصورة ىي واجية الموقع‬

‫لعدة أيام فقط‪ ،‬ويمكن‬


‫إن ىذه البرمجية غير مجانية‪ ،‬يمكن من الموقع الحصول عمى نسخة تجريبية ‪ Trial‬تعمل ّ‬
‫االطالع عمى م زايا البرمجية واألدوات الممكن إضافتيا لمبرمجية والمتخصصة بمجاالت مختمفة ضمن الموقع‪.‬‬
‫من أجل تنزيل البرمجية عمى الحاسب الخاص بك يرجى اتباع التعميمات التالية‪:‬‬
‫نفتح المجمد ‪ MATLAB R2012b‬يوجد عدد من الممفات المضغوطة بالحقة ‪ .rar‬عددىا ‪ 6‬ىي الممفات‬
‫‪ MATLAB R2012b.part6 ..... MATLAB R2012b.part1‬إضافةً لممف آخر مضغوط اسمو‬
‫‪attachment‬‬

‫‪-19-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫نقوم بفك ضغط كل منيا الممفات ‪ MATLAB R2012b.part1‬إلى ‪ MATLAB R2012b.part6‬ستعطي‬


‫مجمد اسمو ‪ MATLAB R2012b‬أم عند فك ضغط الممف ‪ attachement‬سيتم الحصول عمى مجمدين ىما‬
‫‪ help‬و ‪bugreport‬‬

‫نقوم بفتح المجمد ‪ MATLAB R2012b‬ونختار من ضمنو ‪setup‬‬

‫سيتم فتح نافذة عمى الشكل التالي‬

‫‪-20-‬‬
MATLAB for Numerical Computing-Ch1

‫ كما في الشكل‬next ‫ ثم اختر‬Install without using the Internet ‫اختر‬

‫ ثم‬yes ‫ اختر‬Do you accept the terms of the license agreement? ‫ستظير واجية تحتوي عمى‬
.next ‫اضغط‬

-21-
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ستظير أمامك الواجية التالية‪ ،‬اختر ‪I have the File Installation Key for my license‬‬

‫ثم ضع ضمن الحقل الرقم التسمسمي التالي‪ 23809-26556-08469-31324 :‬كما في الشكل واضغط عمى‬
‫‪next‬‬

‫‪-22-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ستظير أمامك الواجية التالية‬

‫قم باختيار ‪ Custom‬ثم اضغط عمى ‪next‬‬

‫‪-23-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ستظير أمامك الواجية التالية وىذه الخطوة ىي خطوة تحديد مجمد التنزيل‬

‫الواجية تطمب منك تحديد المسار الكامل لتنزيل الرمجية ضمن مجمد التنزيل‪ ،‬يفضل استخدام القرص ‪ C‬لكن‬
‫األمر تابع لمشخص‪ ،‬يمكن تغيير المسار عن طريق ‪ .Browse‬ثم اضغط ‪ next‬ستظير أمامك الواجية التالية‬

‫‪-24-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫قم بإلغاء اختيار ‪ MATLAB Distributed Computing Server 6.1‬كما يوضح الشكل‬

‫ثم اضغط عمى ‪ next‬ستظير أمامك واجية تطمب منك أن تختار في وضع اختصارات ‪ shortcuts‬خاصة‬
‫بالبرمجية يمكن أم تختار أن تضع اختصار ضمن شطح المكتب ‪ desktop‬و كذلك األمر في ‪Start Menu‬‬
‫كما يوضح الشكل‬

‫‪-25-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ثم ستظير أمامك الواجية التالية التي تطمب منك إعطاء أمر التنزيل‪ ،‬اختر ‪ Install‬لبدء تنزيل البرمجية‬

‫بعد االنتياء من التنزيل‪ ،‬حيث يجب التنويو إلى أن التنزيل يتطمب وقت كبير حوالي ربع أو نصف ساعة‪،‬‬
‫ستظير أمامك الواجية التالية‪ ،‬اختر ‪next‬‬

‫‪-26-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫ثم ستظير الواجية التي تطمب منك تفعيل البرمجية‪ ،‬في حالة عدم التفعيل لن تكون قاد ًار عمى استخدام البرمجية‪،‬‬
‫اختر ‪next‬‬

‫ستظير أمامك الواجية التالية‬

‫‪-27-‬‬
MATLAB for Numerical Computing-Ch1

next ‫ ثم اضغط عمى‬Activate manually without using the Internet ‫اختر‬

Enter the full path to your license file, including the ‫ستظير أمامك الواجية التالية قم باختيار‬
file name

-28-
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫يوجد لتفعيل البرمجية الممف '‪ 'MATLAB2012b_std.dat‬الموجود ضمن المجمد ‪ crack‬ضمن المجمد‬
‫‪MATLAB R2012b‬‬
‫ال إلى المسار الذي جرى اخ تياره في خطوة تحديد مجمد التنزيل ومن ثم عن‬
‫يفضل نسخ مجمد ‪ crack‬كام ً‬
‫طريق ‪ browse‬قم بتحديد المسار الكامل واختر الممف ' ‪ 'MATLAB2012b_std.dat‬كما في الشكل‬

‫ستظير اماك الواجية التالية لمداللة عمى انتياء التنزيل‬

‫‪-29-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫نتيج ًة لوجود بعض األخطاء في نسخة البرمجية يوجد ممف يجب إضافتو موجود ضمن الممف الذي جرى فك‬
‫ال وىو ‪ attachement‬اختر المجمد ‪ help‬سيفتح المجمد وضمنو مجمد اسمو ‪ includes‬سيفتح المجمد‬
‫ضغط أو ً‬
‫وضمنو مجمد اسمو ‪ product‬سيفتح المجمد وضمنو مجمد اسمو ‪ scripts‬ستجد ممف يدعى ‪localnav‬‬
‫قم بنسخ ىذا الممف إلى مجمد التنزيل‪ ،‬إلى المسار السابق نفسو ‪ help\includes\product\scripts‬بيذا يكون‬
‫قد اكتمل تنصيب البرمجية‪.‬‬

‫‪-30-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫فيم الواجية التخاطبية لبرمجية ‪MATLAB‬‬


‫سنقوم اآلن بالتعرف عمى الواجية التخاطبية لــ‪ ،MATLAB‬عند تشغيل البرمجية وذلك بعد النقر مرتين عمى‬
‫األيقونة التالية الموجودة عمى سطح المكتب بزر الفأرة ‪ mouse‬اليساري‪ ،‬أو عن طريق تحديد األيقونة التالية ثم‬
‫ضغط الزر اليميني واختيار "فتح أو ‪"Open‬‬

‫ستظير أمامك الواجية التالية‬

‫مالحظة في حال استخدام نسخة أحدث من النسخة الحالية‪ ،‬وىي ‪ ،R2012b‬أو أقدم ليست مشكمة كبيرة‬
‫فاالختالف يكون باإلظيار لكن األجزاء الرئيسية تبقى ذاتيا في كافة اإلصدارات‪ .‬الواجية السابقة مقسمة إلى‬
‫خمسة أجزاء رئيسية وىي موضحة بالصورة التالية‬

‫‪-31-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ Current Folder .1‬وىو يعرض جميع الممفات المتعمقة ب ـ‪ MATLAB‬حيث تم تخزين جميع التوابع‪،‬‬
‫‪ ،scripts‬والممفات األخرى بمواحق مثل ‪ .asv‬و ‪ .m‬المتعمقة بالبرمجية وذلك وفقًا لمسار العمل‬
‫الحالي‬

‫‪ Command Window .2‬تعمل ىذه النافذة عمى أنيا نافذة لعرض الدخل ‪ input‬والخرج ‪ output‬عند‬
‫تنفيذ التعميمات ‪ Commands‬أو التوابع ‪ Functions‬المختمفة‪.‬‬
‫مثال‪:‬‬
‫اكتب ‪ help‬ضمن ىذه النافذة ثم اضغط ‪ enter‬سيتم استعراض‪ ،‬كما في الشكل‪ ،‬جميع المواضيع الممكن إيجاد‬
‫مساعدة حوليا‬

‫‪-32-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ ‬عند تنفيذ ‪ run‬أي تعميمة ‪ Command‬أو مجموعة تعميمات موجودة ضمن ‪( script‬في فصل الحق‬
‫سيتم شرح ‪ )script‬يتم إظيار الخرج ضمن ىذه النافذة‪.‬‬
‫(فكرة ميمة جدًا جداً)‬
‫‪ ‬يمكن منع إظيار الخرج ضمن ‪ Command window‬عن طريق إضافة ” ; “ بعد التعميمة أو‬
‫المتحول‪ ،‬تفيد ىذه التعميمة كثي ًار في حالة الرما زات البرمجية الكبيرة وتنجيز الخوارزميات حيث االىتمام‬
‫فقط بالخرج النيائي وليس بخرج كل سطر‬
‫مثال عمى الفكرة السابقة‬
‫قم بتعريف المتحول‪ x‬عمى الشكل ‪ x=6‬ثم اضغط ‪enter‬‬
‫ستالحظ إظيار قيمة المتحول‬
‫ثم قم بتعريف المتحول ‪y‬عمى الشكل ;‪ y=1‬ثم اضغط ‪enter‬‬
‫ستالحظ أن المتحول ظير ضمن ‪ workspace‬دون ان يظير ضمن ‪command window‬‬

‫‪-33-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫يتم مسح جميع البيانات والتعميمات الموجودة ضمن ‪ Command Window‬فقط عن طريق تعميمة‬ ‫‪‬‬
‫‪ clc‬أما المتحوالت ال يتم مسحيا من فضاء العمل ‪.Workspace‬‬
‫مثال‬
‫اضغط عمى ‪ help clc‬لمعرفة المزيد عن ىذه التعميمة ثم ‪enter‬‬
‫أو كما في الشكل التالي اضغط عمى الزر التالي‬

‫فيظير الخيارات التالية‬

‫‪-34-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫اختر ‪.clear command window‬‬


‫‪ ‬عند الكتابة ضمن ‪ command window‬يمكن استخدام زر ‪ Esc‬و استخدام ‪ Ctrl +C‬من أجل‬
‫‪ Esc ‬مسح التعميمة ضمن السطر الحالي )‪(used for clear command line‬‬
‫‪ Ctrl+C ‬الخروج من العممية الحالية واالنتقال إلى سطر جديد من ال ‪.command line‬‬
‫)‪(used for Quit current operation and return control to the command line‬‬

‫الموجود ضمن ‪ command window‬من أجل الحصول عمى‬ ‫‪ ‬يمكن أيضًا الضغط عمى الرمز‬
‫مساعدة ‪ help‬حول التوابع الموجودة ضمن البرمجية‬

‫‪ ‬يمكن االستفادة من ‪ command window‬أيضًا لمحصول عمى ‪ Help‬و ‪ Documentation‬حيث‬


‫ان جميع توابع ‪ MATLAB‬تدعم التوثيق ‪Documentation‬‬
‫تتضمن الممفات الموثقة عمى امثمة الستخدام التوابع إضاف ًة لتوصيف التابع بشكل مفصل من حيث الدخل والخرج‬
‫و ‪ calling syntax‬اي القواعد (النحو) لالستدعاء‪.‬‬

‫‪-35-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫من اجل فتح نافذة منفصمة تحتوي عمى ‪ function documentation‬يمكن استخدام التعميمة ‪ doc‬ضمن‬
‫ال‪ command window‬عمى الشكل‬

‫من أجل عرض مساعدة وتنويو ‪ hint‬حول التابع‪ ،‬يمكن كتابة اسم التابع في ‪ command window‬ثم فتح‬
‫قوس من أجل بارمترات دخل التابع واالنتظار عمى الشكل التالي‬

‫سيتم تقديم مساعدة مفيدة بعد العممية السابقة‬


‫كما نذكر بإمكانية استخدام تعميمة ‪ help‬ضمن ‪ command window‬عمى الشكل التالي‬

‫‪-36-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ Workspace .3‬يتم في ىذه النافذة عرض أسماء المتحوالت التي جرى تعريفيا‪ ،‬قيمتيا‪ ،‬القيمة الصغرى‬
‫‪ ،Min‬القيمة الكبرى ‪ ،Max‬إضافةً لخيارات إضافية يمكن استعراضيا كما في الشكل التالي‪ ،‬عن طريق‬
‫الضغط بالزر اليميني عمى الشريط‪ ،‬فتظير الخيارات وىي )‪(Name, Value, …, Max‬‬

‫‪ ‬لننفذ المثال التالي‬


‫ضمن ‪ command window‬اكتب ‪ z=2‬ثم ‪enter‬‬
‫سممية ‪scalar‬‬
‫أي عبارة عن قيمة ّ‬ ‫يتم تعريف متحول ىو عبارة عن مصفوفة أبعادىا‬
‫ضمن ‪ command window‬اكتب ]‪ z1=[2 4 5 100‬ثم ‪enter‬‬
‫نالحظ كيف تم إيجاد القيمة الصغرى‬ ‫يظير لك التالي حيث أن المتحول ىو عبارة عن شعاع بعده‬
‫والكبرى تمقائيًا‬

‫‪-37-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ ‬كما يمكن مسح المتحوالت المعرفة ضمن ‪ workspace‬عن طريق خيار ‪clear workspace‬كما في‬
‫الشكل التالي‬

‫أو عن طريق تعميمة ‪clear‬‬


‫اضغط عمى ‪ help clear‬لمعرفة المزيد عن ىذه التعميمة واضافةً لمفرق مع ‪clear all‬‬
‫أو يمكن فتح ‪ help‬كما في الصورة‬

‫‪-38-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫وكتابة ‪ clear‬لمبحث عن التعميمة وفيم عمميا مع أمثمة عنيا وكذلك الحال من أجل أي تعميمة أو تابع‪.‬‬
‫‪ Command History .4‬تحتفظ بنسخة من جميع التعميمات التي تم تنفيذىا إضاف ًة إلى تاريخ التنفيذ مما‬
‫يتيح لنا العودة لمعرفة المتحوالت والتوابع التي جرى تعريفيا مسبقاً‪،‬‬
‫يمكن أيضًا إعادة تنفيذ التعميمات أو إعادة تعريف المتحوالت التي جرى استخداميا سابقًا عن طريق‬
‫الضغط عمييا فقط‪.‬‬
‫ميكن مسح ‪ command history‬عن طريق الضغط ضمن النافذة بالزر اليميني فيظير عدد من‬
‫الخيارات ضمن ىذه الخيارات ‪ Clear Command History‬كما في الشكل‬

‫‪( Toolstrip .5‬الجزء الخامس ىذا ‪ toolstrip‬ىو جزء جديد خاص بالنسخ ‪ vesion 8‬والنسخ الالحقة )‬
‫بعد التعرف عمى الواجية التخاطبية‪ ،‬سننتقل لمتعرف عمى محتويات الشريط العموي أو ما يسمى ‪toolstrip‬‬
‫سنيتم حاليًا بالجزء االول وىو ‪ Home‬أما الجزء الثاني فيو ‪ Plots‬سيتم التعرف عميو الحقًا وىو يحتوي‬

‫‪-39-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫عمى توابع إلظيار منحنيات وأشكال ثنائية وثالثية األبعاد والجزء الثالث ‪ apps‬سيتم شرحو الحقًا‪ .‬يبين‬
‫الشكل التالي صورة ل ‪.toolstrip‬‬

‫تعتبر ‪ Toolstrip‬إحدى أىم التعديالت التي طرأت عمى ‪ MATLAB‬في النسخة الثامنة ‪ Version 8‬من حيث‬
‫شكل البرمجية فيي تعتبر الطريقة الجديدة في ‪ MATLAB‬لمحصول عمى الخصائص الوظيفية ضمن البرمجية ‪،‬‬
‫& ‪Menus‬‬ ‫حيث قامت ‪ Toolstrip‬بتجميع كافة الخاصائص الموجودة ضمن القائمة و شريط األدوات‬
‫‪ Toolbars‬الموجودين في النسخ السابقة‪.‬‬
‫تحتوي ‪ Toolstrip‬عمى عناصر كانت موجودة مسبقًا في ‪ menus, toolbars‬و زر ‪ start‬وىية تحتوي عمى‬
‫عدة ‪ tabs‬وىي ‪ Home, Apps, Editor and Variable‬إضاف ًة إلى مجموعات وظيفية تدعم خدمات شائعة‬
‫االستخدام‪.‬‬
‫يحتوي ‪ toolstrip‬عمى‬
‫‪ .a‬شريط ‪quick access‬‬

‫الذي يحتوي عمى عدة خيا رات تستخدم بشكل متكرر مثل ‪ cut copy paste‬كما يمكن إضافة خصائص أخرى‬
‫ليذا الشريط من الخيارات المتاحة في ‪ toolstrip‬ويمكن أيضًا تغيير موضعو‪.‬‬
‫‪ .b‬شريط ‪ current folder‬الذي يتيح لك التحكم بمسار العمل الحالي‪.‬‬

‫‪ Search Documentation box .c‬يتيح لممستخدم البحث عن الممفات التي جرى توثيقيا عن التوابع‬
‫والتعميمات‪.‬‬

‫ننتقل اآلن إلى تقديم شرح عن قسم ‪Home‬‬

‫يتألف من عدة أج زاء تتعمق بوظائف مختمفة‪ ،‬وىي‬


‫‪ File ‬من أجل إنشاء ‪scripts, function, Simulink models,….‬‬
‫‪ Variable‬لمتحكم بالمتحوالت من حيث إنشاء متحول جديد‪ ،‬مسح بعض المتحوالت إضافةً إلمكانية‬ ‫‪‬‬
‫استيراد المعطيات ‪.import data‬‬

‫‪-40-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ Code‬من اجل تنفيذ التعميمات والرمازات البرمجية‬ ‫‪‬‬


‫‪ Simulink ‬من اجل الوصول إلى مكاتب ‪Simulink‬‬
‫‪ Environment ‬تحتوي عمى ‪ Layout‬و ‪ preferences‬من اجل تغيير شكل البرمجية من ناحية ما‬
‫يتم عرضو ضمن المواجية البيانية وضبط االعدادات الخاصة بالعرض مثل نوع الخط وحجمو‪ ،‬إضافة‬
‫الوان لممتحوالت و التعميمات و ‪.......‬‬
‫‪ Resources ‬تحتوي عمى ‪ help‬وتتيح لك االتصال مع موقع الشركة‬

‫‪-41-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪File .a‬‬
‫‪ ‬عند الضغط عمى ‪ New Script‬يتم إنشاء ‪Script‬جديدة (سيتم شرح معنى ‪ script‬في الفصل القادم)‬
‫كما في الشكل‬

‫يمكن ضمن ‪ script‬تعريف متحوالت‬


‫مثالً‬
‫;)‪y=5; x=sin(y‬‬
‫من أجل التنفيذ نضغط ‪ F9‬أو نحدد كامل الرماز المكتوب ونضفط بالزر اليميني لنحصل عمى عدد من‬
‫الخيارات نختار منيا ‪ Evaluate Selection‬كما في الشكل‬

‫‪-42-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫نقوم بعدىا بالحصول عمى النتيجة ضمن ‪ workspace‬حيث جرى تخزين قيمة المتحوالت‬

‫‪ ‬من ‪ new‬نحصل عمى عدد كبير من الخيا رات‪:‬‬

‫حيث يمكن تعريف ‪ ،script‬تابع‪ ،class ،‬شكل‪ ،‬واجية بيانية تخاطبية ‪ ،GUI‬ونموذج ‪.Simulink‬‬

‫‪-43-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪Variable .b‬‬
‫من الممكن الحصول عمى معطيات عن طريق ‪Import Data‬‬

‫عند الضغط عمى الخيار ‪ import data‬ستفتح واجية اخرى كما في الشكل‬

‫نالحظ إم كانية استيراد المعطيات المخزنة بعدد صيغ سواء كانت صور‪ ،‬ممف نصي‪ ،‬فيديو أو ممف‬
‫‪.MATLAB‬‬

‫‪-44-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫يمكن ايضًا إنشاء متحول جديد عن طريق ‪ ،NewVariable‬مسح المتحوالت التي جرى تعريفيا سابقًا ‪Clear‬‬
‫أو نتائج الحسابات او فضاء العمل عن طريق ‪ ،Clear Workspac‬ويمكن أيضًا معاينة قيم متحول تم تعريفو‬
‫عن طريق ‪ Open Variable‬إضاف ًة لذلك يمكن حفظ ‪ workspace‬في حال الحاجة الستخدامو الحقًا عن‬
‫طريق ‪Save Workspace‬‬
‫‪Environment .c‬‬
‫من أجل ضبط اإلعدادات واإلظيار ضمن ‪ MATLAB‬ادخل إلى ‪preferences‬‬

‫وقم بتغيير نوع الخط ضمن أي نافذة لمبرمجية ولونو وحجمو مثالً عن طريق ‪fonts and colors‬‬

‫إضافةً لذلك تحتوي ‪ preferences‬عمى خواص عديدة ومتنوعة لمتحم بعمل البرمجية واظياراتيا‬
‫يمكن عن طريق ‪ Layout‬التحكم بالواجيات التي يتم عرضيا حيث يمكن مثالً إزالة ‪ Workspace‬او‬
‫‪ Current folder‬من الواجية الرئيسية لمبرمجية‬
‫‪Resources .d‬‬
‫من أىم األجزاء حيث يوجد ‪help‬‬

‫ويمكن إيجاد المساعدة الالزمة عن الضغط عمييا حيث يمكن فتح الممفات ‪ documentation‬أو األمثمة إضاف ًة‬
‫إلى العديد من الخيا رات كما في الشكل‬

‫‪-45-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫يمكن ايضاً الحصول عمى المساعدة ‪ help‬عن طريق كتابة التعممية ثم الضفط عمى ‪ F1‬كما في الشكل‬

‫‪-46-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫مالحظات ىامة‬
‫‪ .1‬يجب االنتباه إلى خطأ شائع كثي ًار وذلك عند استعمال أوتنفيذ الرما زات البرمجية ‪ Codes‬التي جرى‬
‫برمجتيا وتخزينيا مسبقاً‪،‬‬
‫الخطأ ىو‪ :‬عند تنفيذ ىذه التوابع يكون المسار الحالي ‪ Current path‬مختمف عن المسار الموجود ضمنو‬
‫التابع‪.‬‬
‫الحل ‪ :‬يجب تغيير المسار الحالي إلى المسار الموجود ضمنو الممف الذي يجري تنفيذه وذلك باستخدام ‪current‬‬
‫‪folder toolbar‬‬
‫سنوضح كيفية تغيير فيما يمي‪:‬‬
‫إن المسار االفتراضي ‪ default path‬ليذه البرمجية ىو‬
‫‪C: Users: yourComputerName: Document: MATLAB‬‬

‫ويمكن تغييره بسيولة (نفترض أن الممفات المراد تنفيذىا موجودة ضمن القرص ‪ D‬في مجمد اسمو ‪)My_exp‬‬
‫عن طريق الضغط عمى إشارة المجمد نجد أنو تم عرض األقراص الموجودة ضمن الحاسب‪ ،‬نختار منيا القرص‬
‫المناسب ثم نختار الممف المناسب الذي يحتوي عمى البرامج المطموب تنفيذىا أو التي جرى تخزينيا سابقًا‬

‫‪-47-‬‬
MATLAB for Numerical Computing-Ch1

-48-
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫الصورة التالية توضح الممفات الموجودة ضمن المجمد وىي ممفات توابع ‪ MATLAB‬الحقتيا ‪.m‬‬

‫عند الضغط عمى الممف يتم فتحو‬

‫‪-49-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫‪ .2‬ينصح باستخدام المجمدات من أجل حفظ كافة البرامج والرمازات البرمجية بشكل منظم وسيولة الوصول‬
‫إلييا‪ ،‬فمثالً إنشاء مجمد خاص بكل درس وتسمية الممفات بأسماء واضحة‬
‫يمكن ذلك ببساطة عبر الصورة التالية اضغط بالزر اليميني لمفأرة ضمن ‪ current folder‬ستحصل عمى‬
‫الخيارات التالية‬

‫ثم قم بإنشاء مجمد جديد‬

‫يمكن وضعيا في نياية الفصل تحت عنوان فيديوىات من المفيد االطالع عمييا‪.‬‬
‫الروابط التالية من المفيد قرائتيا‬

‫‪-50-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫األسئمة‬
‫‪ .1‬كممة ‪ MATLAB‬ىي اختصار ألي كممات ؟؟‬
‫مساعدة‪ :‬قراءة فقرة التعرف عمى ‪.MATLAB‬‬

‫‪ .2‬مم يتألف نظام ‪،MATALB‬‬


‫مساعدة‪ :‬قراءة فقرة نظام ‪.MATLAB‬‬

‫‪ .3‬ىل ‪ MATLAB‬لغة برمجة أم بيئة ؟؟‬


‫مساعدة‪ :‬قراءة فقرة نظام ‪.MATLAB‬‬

‫‪ .4‬ما ىو عنصر المعطيات األساسي في برمجية ‪ MATLAB‬؟؟ اختيار من متعدد‬


‫‪ .a‬متحوالت سممية ‪scalar‬‬
‫‪ .b‬أشعة ‪vectors‬‬
‫‪ .c‬مصفوفات ‪Matrices‬‬
‫‪ .d‬صفيفات متعددة األبعاد ‪Multidimensional arrays‬‬
‫مساعدة‪ :‬فقرة استخدامات ‪ MATLAB‬أو فكرة التمييز بين ‪ array‬و ‪ matrix‬التي طمب وضعيا كفق رة او‬
‫سؤال ضمن الفقرة السابقة‪.‬‬

‫‪ .5‬ما ىي أجزاء الواجية الرئيسية من برمجية ‪MATLAb‬؟‬


‫مساعدة‪ :‬قراءة فقرة فيم الواجية التخاطبية لبرمجية ‪.MATLAb‬‬

‫‪ .6‬كيف يتم االستعالم عن عمل تعميمة ما ؟؟‬


‫مساعدة‪ Command window :‬ضمن فقرة فيم الواجية التخاطبية لبرمجية ‪.MATLAb‬‬

‫‪-51-‬‬
‫‪MATLAB for Numerical Computing-Ch1‬‬

‫اإلجابا ت‬
‫‪ .1‬ىي اختصار ل ‪.Matrix Laboratory‬‬

‫‪ .2‬يتألف نظام ‪ MATLAB‬من‬


‫‪ .a‬لغة البرمجة ‪MATLAB‬‬
‫‪ .b‬بيئة ‪MATLAB‬‬
‫‪Handle Graphics .c‬‬
‫‪ .d‬مكاتب التوابع الرياضية الخاصة ب ‪.MATLAB‬‬

‫‪ .3‬ىي لغة برمجة وبيئة معًا‬


‫‪ MATLAB‬ىي لغة برمجة عالية المستوى قامت شركة ‪ MathWorks‬بتطوير برمجية وأسمتيا ‪MATLAB‬‬
‫أيضًا حيث تتيح البرمجية ‪ MATLAB‬بتطوير برامج بمغة البرمجة ‪ MATLAB‬إضافةً الستخدام أجزاء‬
‫وأدوات أخرى مختمفة عن البرمجة بمغة ‪ MATLAB‬نذكر منيا ‪ Simulink‬واألدوات ‪ Toolboxes‬سيتم‬
‫التعرف عمييم الحقًا‪.‬‬

‫‪ .4‬الخيار رقم ‪8‬‬

‫‪ .5‬ىي خمسة أجزاء‪:‬‬


‫‪Current folder .a‬‬
‫‪Command Window .b‬‬
‫‪Command History .c‬‬
‫‪Workspace .d‬‬
‫‪Toolstrip .e‬‬

‫‪Help‬‬ ‫‪ .6‬نستطيع عن طريق ‪ Command Window‬كتابة ‪ Help‬ثم اسم التعميمة أو عن طريق‬


‫‪.browser‬‬

‫‪-52-‬‬
MATLAB for Numerical Computing-Ch2

MATLAB® ‫ أساسيات لغة البرمجة‬:‫الفصل الثاني‬


)‫(النحو والمتحوالت‬
Fundamentals of MATLAB® Programming
Language (Syntax and Variables)

-0-

-53-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫عنوان الموضوع‪:‬‬
‫أساسيات لغة البرمجة ®‪( MATLAB‬النحو والمتحوالت)‬
‫)‪Fundamentals of MATLAB® Programming Language (Syntax and Variables‬‬

‫الكممات المفتاحية‪:‬‬
‫‪ ،documentation ،help ،command window ،workspace ،MathWorks ،MATLAB‬متحول‬
‫‪ ،variable‬متحول سممي ‪،scalar variable‬شعاع ‪ ،vector‬مصفوقة ‪ ،matrix‬صفيفة ‪،array‬نمط المعطيات‬
‫‪ ،colon ،data type‬مؤثرات ‪ ،operators‬مؤثرات حسابية ‪ ،Arithmetic Operators‬مؤثرات عالقاتية‬
‫‪Set‬‬ ‫‪ ،Relational Operators‬مؤثرات منطقية ‪ ،Logical Operators‬عمميات عمى المجموعات‬
‫‪ ،Operations‬عمميات عمى مستوى البت ‪.Bit-Wise Operations‬‬

‫ممخص‪:‬‬
‫نقدم في ىذا الفصل أساسيات البرمجة باستخدام لغة ‪ ، MATLAB‬ييتم الفصل بمحورين‪ ،‬األول ىو قواعد الكتابة‬
‫ضمن المغة (النحو ‪ ) Syntax‬حيث سنتعرف ونستخدم بعض التعميمات إلجراء العديد من العمميات الحسابية‪ ،‬ثم‬
‫يتم التعرف عمى المتحوالت وكيفية التعامل معيا ومعأشكاليا المختمفة من متحول سممي ‪ ،scalar‬مرو ًار باألشعة‬
‫انتياء بالصفيفة ثالثية األبعاد أو أكثر‪ ،‬وأخي اًر نعرض المؤثرات ضمن‬
‫إلى المصفوفات ثنائية األبعاد و ً‬
‫‪ MATLAB‬والتي تقسم إلى عدة أقسام منيا المؤثرات الحسابية والعالقاتية والمنطقية حيث سيتم عرض عمل كل‬
‫مؤثر وأىميتو إضافةً إلى مجموعة من األمثمة لتوضيح األفكار السابقة واالختالفات بين المؤثرات‪.‬‬

‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب يف هذا الفصل على‪:‬‬
‫‪ ‬أساسيات لغة البرمجة ‪MATLAB‬‬
‫‪ ‬استخدام التعميمات‪ ،‬وقواعد الكتابة (النحو) ‪.Syntax‬‬
‫‪ ‬استخدام ‪ HELP‬الموجودة ضمن البرمجية‬
‫‪ ‬تعريف المتحوالت ضمن ‪MATLAB‬‬
‫‪scalar variables, vectorsm‬‬ ‫سممية‪ ،‬أشعة‪ ،‬مصفوفات و صفيفات‬
‫ّ‬ ‫‪ ‬التعامل مع متحوالت‬
‫‪.matrices and arrays‬‬
‫‪ ‬التعامل مع المؤث رات الحسابية‪ ،‬العالقاتية والمنطقية‪.‬‬

‫‪-54-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫ماهو ‪ MATLAB‬وما هي استخداماته‬


‫النحو ‪ Syntax‬واستخدام التعميمات ‪Commands‬‬
‫‪ (Basic calculation) .1‬عمميات حسابية بسيطة‬
‫قبل البدء بعرض قدرات برمجية ‪ MATLAB‬اليائمة البد لنا من معرفة أن ىذه البرمجية يمكن أن تحل‬
‫ببساطة مكان اآللة الحاسبةالبسيطة أو اآللة الحاسبة العممية وحتى في مجال األعداد العقدية‪،‬‬
‫سنستعرض بعض العمميات البسيطة التي يمكن القيام بيا ضمن ‪ command window‬من اجل‬
‫التعرف عمى بعض قواعد الكتابة ‪ Syntax‬باستخدام لغة ‪.MATLAB‬‬
‫بعد الرمز " " ضمن ‪ command window‬يجري كتابة كافة التعميمات‬
‫مثالً‬
‫النتيجة ىي ‪7‬‬ ‫‪ ‬من أجل إجراء عممية الجمع اكتب ‪ 3+4‬ثم اضغط ‪enter‬‬
‫‪ ‬من أجل الرفع إلى قوة اكتب ‪ 3^5‬ثم اضغط ‪ enter‬النتيجة ىي ‪243‬‬
‫أو‬ ‫أو‬ ‫‪ ‬أخذ قيمة جيب أو تجيب زاوية‪ ،‬مثالً‬
‫اكتب )‪ sin(pi/2‬ثم اضغط ‪ enter‬النتيجة ىي ‪1‬‬
‫اكتب )‪ cos(0‬ثم اضغط ‪ enter‬النتيجة ىي ‪1‬‬
‫اكتب )‪ cos(pi/2‬ثم اضغط ‪ enter‬النتيجة نظريًا ىي ‪ 0‬أما عمى الخرج ىي ‪ 6.1232e-17‬وىو عدد‬
‫صغير جدًا نتيجةً لتمثيل القيمة عمى عدد محدوود من البتات وحسب نمط ىذه القيمة‬
‫‪ ‬التقسيم عمى صفر اكتب ‪ 4/0‬ثم اضغط ‪ enter‬النتيجة ىي النياية والخرج سيكون ‪ Inf‬لمداللة‬
‫عمى ‪ infinity‬في بعض إصدارات البرمجية يظير رسالة تحذير عمى الشكل " ‪warning:‬‬
‫‪"division by zero‬‬
‫ال‪.‬‬
‫يمكن إضاف ًة إلى العمميات السابقة القيام بالعديد من العمميات الحسابية كالقسمة والطرح مث ً‬
‫صور لمخرج بعد تنفيذ العمميات ضمن ‪Command Window‬‬

‫‪-55-‬‬
MATLAB for Numerical Computing-Ch2

-56-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫مالحظة‪ :‬خرج العمميات الحسابية يتم حفظو بتمحول اسمو ‪ ، ans‬وىو اختصار ل ‪ ،answer‬وذلك عند تنفيذ‬
‫أي عممية حسابية ضمن ‪ MATLAB‬والحصول عمى نتيجة وفي حال عدم إسناد الخرج إلى متحول عند إجراء‬
‫عممية أخرى يجري إسناد ناتج العممية إلى المتحول‬
‫ال اكتب ضمن ‪ 6+8 command window‬نفذ ىذه العممية ثم اكتب ‪ 9-4‬والحظ التغييرات‬
‫‪ ‬مث ً‬
‫عمى قيمة ‪.ans‬‬
‫‪ .2‬محارف وقيم خاصة‬
‫نعرض في ىذه الفقرة بعض المحارف الخاصة بالمغة والتي ليا دالالتيا الخاصة بمغة ‪ ،MATLAB‬كما نعرض‬
‫بعض القيم ‪ Special Values‬الخاصة ضمن ‪ MATLAB‬أي التي اليمكن تسمية المتحوالت بيذه األسماء‬
‫ألنيا محجوزة ضمن المغة الجدول التالي يبين ىذه القيم والثوابت ودالالتيا‪:‬‬

‫رابط يوجد ضمنو الجدول السابق‬

‫‪ ans -1‬لعرض نتيجة أخر عممية حسابية تمت‪ ،‬وىو اختصار لكممة ‪ ،answer‬حيث ‪ MATLAB‬يقوم‬
‫اتوماتيكياً بإسناد قيمة الخرج ألي عممية ضمن المتحول ‪ ans‬وذلك في حالة عدم إسناد قيمة الخرج من قبل‬
‫المستخدم لمتحول ما‪ .‬نعيد التذكير أنو في حال عدم إسناد الخرج إلى متحول عند إجراء عممية حسابية أخرى‬
‫يجري أسناد ناتج العممية إلى المتحول ‪.ans‬‬
‫مثال اكتب ‪ 1+2‬ضمن ‪ command window‬ثم اضغط ‪ enter‬نالحظ ما يمي‬

‫‪-57-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫قم بكتابة ‪ 5-3‬ثم اضغط ‪ enter‬نالحظ تغير قيمة ‪ans‬‬

‫قم بعدىا بتنفيذ العممية الحسابية ‪ 9+8‬ثم عرف المتحول ‪ x‬عمى أنو خرج العممية أيضاً ‪ 8+9‬نالحظ أمو احتفظ‬
‫بقيمة ‪ ans‬لمعممية األولى واحتفظ بقيمة العممية الثانية ضمن المتحول ‪ ،x‬يمكن إجراء عممية مثالً ‪4*5‬‬
‫ومالحظة تغيير قيمة ‪.ans‬‬

‫‪ Eps -2‬وىو اختصار ل ‪ epsilon‬أي عدد موجب تمامًا وقيمتو العددية صغيرة جدًا وىي ىنا تعبر عن الدقة‬
‫النسبية عند تمثيل األعداد باستخدام ‪.floating-point‬‬

‫‪ i -3‬أو ‪ j‬ىو العدد التخيمي‪ ،‬مالحظة في اإلصدا رات القديمة المن البرمجية يجري تعريف ىذا العدد عمى الشكل‬
‫التالي ‪ 1*i‬أو ‪1*j‬‬

‫وقيمتو ‪3.141592….‬‬ ‫‪ Pi -4‬ىو العدد المشيور‬

‫‪ inf -5‬لمداللة عمى الالنياية الموجبة‪ ،‬عند ظيور ‪ –inf‬يكون لمداللة عمى الالنياية السالبة‬
‫عددية‪ ،‬وىي عبارة عن النتيجة‬
‫‪ NAN -6‬وىي اختصار ل ‪ Not-a-Number‬لمداللة عمى أنيا ليست قيمة ّ‬
‫من عمميات غير معرفة نتيجتيا نذكر منيا‪:‬‬

‫‪-58-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪ .1‬أي عممية حسابية عمى ‪NAN‬‬


‫أو‬ ‫أو‬ ‫أو‬ ‫‪ .2‬خرج عممية‬
‫تفيد في إنشاء مصفوفات بقيم ابتدائية غير صفرية وخاص ًة في حالة مصفوفات من أحرف أو سالسل محرفية‬

‫ال‬
‫يمكن استخدام ىذه القيم في الرمازات البرمجية مث ً‬
‫‪r = 2 * pi‬‬
‫‪r = 6.2832‬‬
‫]‪B = [1+2i 5-6i‬‬

‫‪-59-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪B = 1.0000 + 2.0000i 5.0000 - 6.0000i‬‬


‫وكذلك األمر بالنسبة لباقي القيم ضمن الجدول السابق‪.‬‬
‫المحارف الخاصة ‪:Special Characters‬‬
‫@‬ ‫!‬ ‫‪%{ }%‬‬ ‫‪%‬‬ ‫;‬ ‫‪: ,‬‬ ‫)(‪.‬‬ ‫…‬ ‫‪.. .‬‬ ‫وىي‪' = { } ) ( [ ] :‬‬
‫سنقوم بشرح بعض منيا بشكل مختزل‬
‫] [ تدعى ‪ Brackets‬وتستخدم من أجل إنشاء شعاع أو مصفوفة‪.‬‬
‫= المساواة من أجل عمميات اإلسناد‬
‫' يدعى ‪ Matrix Transpose‬وىو يعطي المنقول والم رافق لمصفوفة ما (نفترض أن المصفوفة في الحالة‬
‫العامة عقدية‪ ،‬في حال كانت حقيقة يعطي المنقول)‬
‫ليا عدة وظائف فنذكر منيا تمثل الفاصمة العشرية‪ ،‬كما أنيا المؤثر ‪ operator‬المستخدم في عمميات‬ ‫‪.‬‬
‫عنصر لعنصر ‪ element-by-element operation‬سيتم في ىذا الفصل التعرف أكثر عمى التفاصيل عن‬
‫ىذا المؤثر اليام‪.‬‬
‫; تدعى ‪ semicolon‬تفيد في إنياء السطر ضمن مصفوفة واالنتقال لتعريف عمود جديد‪ ،‬كما أن وضعيا بعد‬
‫تعميمة ما يمنع نتيجة ىذه التعميمة من الظيور ضمن ‪.Command Window‬‬
‫‪ ,‬تدعى ‪ colon‬وتفيد في الفصل بين عناصر السطر الواحد ضمن شعاع او مصفوفة‪ ،‬كما انيا تفيد في الفصل‬
‫(محددات) التوابع ‪.function arguments‬‬
‫ّ‬ ‫بين متحوالت‬
‫‪ :‬يدعى ‪ colon‬سيتم تقديم شرح مفصل عنو في فقرة العمل مع المتحوالت ضمن ‪ MATLAB‬ضمن الفقرة‬
‫الجزئية تعريف شعاع ‪.vector‬‬
‫من أجل معرفة عمل باقي ىذه المحارف ادخل إلى ‪ Help‬واكتب ‪ special characters‬وأيضًا ‪symbol‬‬
‫‪references‬كما ىو موضح في الشكل ثم قم بقراءة الفقرات كاممةً‪.‬‬
‫مالحظة ىامة‪ :‬سيتم ضمن الجمسة المتزامنة طرح العديد من األسئمة عن ىذه المحارف وعن عمميا ضمن‬
‫البرمجية‪ ،‬وسيتم التعامل مع ىذه المحارف بشكل كبير والتآلف معيا عند العمل مع البرمجية لكن من الضروري‬
‫االطالع عمييا‪.‬‬

‫‪-60-‬‬
MATLAB for Numerical Computing-Ch2

-61-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫العمل مع المتحوالت ضمن ‪MATLAB‬‬


‫‪All MATLAB variables are multidimensional arrays, no matter what type of data. A‬‬
‫‪matrix is a two-dimensional array often used for linear algebra‬‬

‫‪ .1‬مقدمة عن المتحوالت‬
‫سيتم في ىذه الفقرة تعمم كيف يتم إنشاء متحوالت واستخداميا وألخذ العمم فإن أي متحول ضمن ‪ MATLAB‬ىو‬
‫متعددة األبعاد ‪ ،Multidimensional Array‬ويمكن أيضًا تعريف‬
‫إما صفيفة ّ‬
‫سممي ‪ scalar‬ببعد‬
‫ّ‬ ‫‪ ‬متحول‬
‫( يعبر عن سطر وحيد أو عمود وحيد)‬ ‫او‬ ‫‪ ‬شعاع ‪ vector‬ببعد‬
‫‪ ‬مصفوفة ‪ Matrix‬ثنائية األبعاد ببعد‬

‫يمكن إنشاء ممف ‪ new script‬لتعريف المتحوالت مما يفيد في حفظ ىذا الممف واستخدامو الحقاً (سيجري في‬
‫الفصل القادم شرح مفصل عن ممفات ‪ )scripts‬أو يمكن تعريف المتحوالت ضمن ‪.Command Window‬‬

‫يعتبر إنشاء متحول جديد ضمن ‪ MATLAB‬ىو أمر بسيط مقارن ًة مع تعريف المتحوالت ضمن مختمف لغات‬
‫البرمجة مثل ‪ JAVA ،C‬حيث ال توجد حاجة إلى تعريف نمط المتحول ك ـ ‪Integer,Char,String, Double,‬‬
‫… ‪ Float,‬ويكفي فقط إسناد قيمة لممتحول وسيتم معرفة نمطو تمقائيًا‪ ،‬إن غالبية المتحوالت التي يجري التعامل‬
‫معيا ىي من النمط ‪ double 64-bit‬و ‪ char 16-bit‬فيي األنماط االفتراضية ‪default‬‬

‫مثال‪:‬‬
‫اكتب ضمن ‪ A=1 Command Window‬ثم ‪enter‬‬
‫ستالحظ التغيرات التالية ضمن واجية البرمجية‬

‫‪-62-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫أي عبارة عن عنصر سممي ‪.Scalar‬‬ ‫نالحظ أنو تم تعريف متحول باسم ‪ A‬عمى شكل مصفوفة بعدىا‬
‫كما في الشكل التالي من أجل إظيار نمط ىذا المتحول نقوم بالضغط عمى الزر اليميني عمى الشريط ‪(Name,‬‬
‫)‪ Value, …, Max‬ونختار إظيار ‪ .Class‬نالحظ أن الصف ‪ Class‬ىو ‪Double‬‬

‫مالحظة ‪ :1‬الصف االفتراضي ‪ default Class‬ألي متحول ىو ‪ double 64-bit‬ضمن برمجية ‪MATLAB‬‬
‫سؤال كيف نقوم بتغيير الصف (أو نمط المتحول)؟؟‬

‫نقوم بما يمي ضمن ‪ Command Window‬نعرف‬


‫)‪ A=uint32(1‬لتحويل المتحول إلى الصف ‪.unsigned integer 32 bit‬‬
‫من الميم االطالع عمى ىذه األنماط ومعرفة دالالتيا ألنو سيتم استخداميا بشكل كبير في كامل المقرر)‬

‫‪-63-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫سنقوم بتغيير الصف ‪ class‬لممتحول السابق إلى ‪ integer‬ونحدد عدد البتات الممكن تمثيل المتحول عمييا‬
‫وفقاً لمصف المختار ثم سنوجد كافة الصفوف الممكن تعريفيا باستخدام ‪help‬‬
‫)‪ A=int16(1‬من أجل جعل نمط المتحول ‪ integer‬ممثل عمى ‪16 bit‬‬
‫)‪ A=int8(1‬من أجل جعل نمط المتحول ‪ integer‬ممثل عمى ‪8 bit‬‬
‫يبين الشكل غالبية أنماط المعطيات المستخدمة ضمن ‪ MATLAB‬يمكن الحصول عمى ذلك عن طريق كتابة‬
‫‪ Help class‬ضمن ‪ ،Command Window‬او باستخدام ‪ Help‬الرئيسي ضمن البرمجية‬

‫اكتب ضمن ‪ Search Documentation‬الكممة التالية ‪.Fundamental MATLAB Classes‬‬


‫صورة ‪1‬‬

‫صورة ‪2‬‬

‫مالحظات حول تعريف المتحوالت‪:‬‬


‫الرجاء االنتباه إلى ما يمي‪:‬‬
‫يمكن اإلشارة إلى المتحول أو استخدامو في عمميات الحقة بعد تعريفو ضمن البرمجية‪.‬‬ ‫‪‬‬

‫‪-64-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫يجب أن تسند قيم إلى المتحوالت قبل استخداميا‪.‬‬ ‫‪‬‬


‫في حال عدم إسناد خرج أي عممية حسابية أو تعميمة أو تعبير ‪ ،expression‬فإن البرمجية تقوم تمقائيًا‬ ‫‪‬‬
‫بإسناده لممتحول ‪ ans‬حيث يمكن استخدامو الحقاً ولكن عند تنفيذ أي تعميمة أو عممية حسابية أخرى‬
‫يتم إسناد آخر نتيجة لممتحول ‪.ans‬‬
‫‪ ‬حول أسماء المتحوالت‬
‫‪ ‬اول حرف من االسم يجب ان يكون حرف ‪LETTER‬‬
‫‪ ‬بعد ذلك يسمح بأي تشكيمة من الحروف واألرقام و _ ( ‪)underscore‬‬
‫‪ Case Sensitive ‬أي ان المتحول ‪ var1‬مختمف عن ‪Var1‬‬
‫‪if, else, for,‬‬ ‫‪ ‬ال يمكن استخدام الكممات المفتاحية أو الكممات المحجوزة ضمن المغة مثل‬
‫‪.while,...‬‬
‫مثال من اجل اسماء المتحوالت لمتوضيح‬
‫عرف المتحولين التاليين‬
‫قم بتعريف المتحوالت التالية ‪ var1=2, Var1=1‬ضمن ‪ Command Window‬ثم ّ‬
‫‪ x=1+var1, y=1+Var1‬ثم نفذ التعميمات والحظ الخرج‬

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


‫' !‪str ='Hello World‬‬
‫‪n =2345‬‬

‫‪-65-‬‬
MATLAB for Numerical Computing-Ch2

d =double(n)
un = uint32(789.50)
rn =5678.92347
c = int32(rn)
:‫الخرج ىو‬

-66-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫نذكر بالتعميمات التالية‪:‬‬


‫‪ clc‬من أجل مسح محتوى ‪ Command Window‬فقط أي مسح التعميمات التي قمنا بإدخاليا ومن ضمنيا‬
‫تعريف المتحوالت والنتائج التي حصمنا عمييا‪ ،‬مع التنبيو إلى أن المتحوالت والنتائج يبقوا معرفين ضمن‬
‫‪ workspace‬أي عمل التعميمة ىو فقط مسح شاشة اإلدخال والخرج‪.‬‬
‫أما من أجل مسح متحول ما نقوم بكتابة ‪ clear‬ثم يمييا اسم المتحول الذي نرغب بمسحو أي‬
‫‪clear nameofvariable‬‬
‫إ از اردنا مسح المتحول ‪ c‬نكتب ‪ ،clear c‬وا از أردنا مسح جميع المتحوالت نكتب التعميمة ‪.clear all‬‬
‫جرب ‪ clc‬ثم ‪ clear c‬ثم ‪clear‬‬
‫ال ّ‬
‫قم بتجريب التعميمات السابقة عمى المتحوالت التي جرى تعريفيا سابقاً‪ ،‬أو ً‬
‫‪.all‬‬

‫‪ .2‬كيف نعرف متحول سممي ‪scalar‬‬


‫ننوه منذ اآلن والى نياية المقرر إلى ضرورة تعريف المتحوالت بأسماء تعبر عن استخداميا عمى سبيل المثال‪،‬‬
‫تردد يسمى‬
‫متحول يعبر عن مطال اإلشارة يسمى مثالً ‪ Amp‬كاختصار لكممة ‪ ،Amplitude‬متحول عبر عن ّ‬
‫مثالً ‪ Freq‬وىكذا‪.‬‬

‫لتعريف متحول سممي ‪ scalar‬نقوم بتعريف اسمو واسناد قيمتو وتمقائيًا يتم تعريف نمطو (أو الصف)عمى أنو‬
‫‪double 64-bit‬‬

‫‪-67-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫;‪x=125‬‬

‫إن إضافة ‪ %‬يسمح لنا بإضافة تعميق أي عند تنفيذ التعميمات ال يتم تنفيذ ما ىو مكتوب بعد اإلشا رة ‪ %‬تفيد‬
‫التعميقات في وضع شرح عن الرماز البرمجي المكتوب أو توضيح عن المتحوالت ودالالتيا‪ ،‬وىذا يفيد عند العودة‬
‫لمرمازات البرمجية الحقًا أو عند تسميم عمل عمى شكل مشروع أو وظيفة‪ ،‬وننوه إلى ضرورة استخدام التعميقات‬
‫ال‪.‬‬
‫لتوضيح ميمة كل متحول أو توضيح خطوات العمل عند برمجة خورارزمية مث ً‬

‫يمكن منع إظيار الخرج عن طريق إضافة “ ; ” بعد التعميمة أو المتحول كما في المثال التالي تفيد ىذه التعميمة‬
‫كثي ًار في حالة الرما زات البرمجية الكبيرة وتنجيز الخوارزميات حيث االىتمام فقط بالخرج النيائي وليس بخرج كل‬
‫سطر أي من أجل منع خرج كل تعميمة من الظيور ضمن ‪ Command Window‬يجب استخدام “ ; ”‬
‫مجموعة من األمثمة‪:‬‬
‫‪ ‬عرف المتحوالت التالية ضمن ‪Command Window‬‬
‫‪x= 125; % scalar variable with value of 125‬‬
‫‪Freq= 8000; % Sampling Frequency‬‬
‫‪T=10; % period =10 Sec‬‬
‫‪A=1; % amplitude =1 Volts‬‬
‫‪y =3; % defining y and initializing it with a value‬‬
‫وكل منيا‬ ‫سيقوم ‪ MATLAB‬بتنفيذ التعميمات السابقة وتعريف المتحوالت وسيتم إنشاء مصفوفة ببعد‬
‫معرف باسم المتحول ويخزن ضمن كل من المتحوالت السابقة القيمة المسندة لو‪.‬‬
‫باسم ّ‬
‫‪ ‬يمكن أيضاً تعريف متحول ىو خرج لتعميمة أو عممية أو تابع ما‬
‫مثالً‪:‬‬
‫)‪Z=sqrt(25‬‬
‫‪ ‬كما يمكن إجراء عدة إسنادات لممتحوالت في نفس السطر‬
‫ال اكتب‬
‫مث ً‬
‫;‪a=1; b=2; c=a*b‬‬
‫مالحظة‪ :‬يمكن االستفادة من التعميمة ‪ who‬من أجل عرض كل أسماء المتحوالت التي جرى تعريفيا سابقًا‪.‬‬
‫تمرين‬
‫استخدم ‪ help‬لمعرفة فائدة التعميمة ‪ whos‬ثم قم بتعريف المتحوالت ;'‪ a=2;b=3;c=a*b;e='hello‬ونفذ بعدىا‬
‫التعميمة ‪whos‬‬
‫الحل‬
‫تفيد التعميمة ‪ whos‬في معرفة‬

‫‪-68-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪whos is a long form of WHO. It lists all the variables in the current workspace,‬‬
‫‪together with information about their size, bytes, class, etc.‬‬
‫عند التنفيذ نحصل عمى‬

‫انتيى المثال‬
‫مالحظة‪ :‬عند تعريف بعض المعادالت أو العالقات الجبرية قد تكون طويمة في الصياغة‪ ،‬وخاص ًة عند استخدام‬
‫أسماء طويمة لممتحوالت‪ ،‬لذلك يفيد المؤثر ”…“ في حالة ‪ long assignment‬عند استخدامو‬
‫مثال لمتوضيح لممالحظة السابقة‬

‫عرف المتحوالت التالية مع القيم البدائية واستخدم … لالنتقال إلى سطر جديد ضمن تعريف المتحول األخير‬
‫حيث ان العالقة ىي ‪final_velocity=initial_velocity+acceleration*time‬‬
‫;‪initial_velocity =0‬‬
‫;‪acceleration =9.8‬‬
‫;‪time =10‬‬
‫‪final_velocity = initial_velocity ...‬‬
‫‪+acceleration * time‬‬
‫خرج ‪ MATLAB‬بعد التنفيذ‬

‫‪-69-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫يتم عرض النتائج ضمن ‪ MATLAB‬باستخدام النمط االفتراضي ‪ default‬وىو ‪ double 64-bit‬إال أن شكل‬
‫العرض ‪ format‬االفتراضي ىو ‪ short format‬أي يتم عرض أربعة أرقام عشرية بعد الفاصمة‪ ،‬من أجل زيادة‬
‫الدقة ‪( precision‬أي عدد األرقام التي يتم عرضيا بعد الفاصمة في ناتج أي عممية حسابية وعمى اعتبار أن‬
‫نمط التمثيل ىو ‪ )double 64-bit‬يمكن استخدام ‪ long format‬لنوضح االختالف لدينا المثال التالي‬
‫اكتب ضمن ‪Command Window‬‬
‫‪format long‬‬
‫‪x =7+10/3+5^1.2‬‬
‫والحظ الخرج‬
‫ثم اكتب ضمن ‪Command Window‬‬
‫‪format short‬‬
‫‪x =7+10/3+5^1.2‬‬
‫والحظ الخرج نجد أن‬
‫=‪x‬‬
‫‪17.231981640639408‬‬
‫=‪x‬‬
‫‪17.2320‬‬
‫‪The format long command displays 16 digits after decimal‬‬
‫‪The format short command displays 4 digits after decimal‬‬
‫تتمة لممثال‬
‫من أجل معرفة أكثر عن األنماط ‪ Style‬المتوفرة ضمن التعميمة ‪format‬‬
‫‪ help format‬ثم ابحث ضمن ‪ Input Arguments‬ستجد ‪ style‬قم بقراءة وتجريب األنماط المختمفة‪.‬‬

‫كما يمكن التعامل مع متحوالت عمى انيا ‪ string‬أو ‪char‬‬


‫لتعريف النمط ‪ Char‬لممتحول يتم عمى الشكل‬
‫)'‪B= char ('s‬‬
‫أما لتعريف ‪ string‬يمكن باألشكال التالية‪:‬‬
‫'‪S= 'Any Characters‬‬
‫]… ‪S= [S1 S2‬‬
‫يوجد أشكال أخرى لتعريف ‪ string‬يجب االطالع عمييا عن طريق ‪help string‬‬
‫يمكن االستفادة أيضًا من التعميمات التالية ‪ num2str‬و‪ str2num‬من أجل التحويل من عدد إلى محرف‬
‫والعكس‪ ،‬باستخدام ‪ help‬تعمم كيفية استخدام التعميمة‬

‫‪-70-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫ويمكن أيضًا دمج سمستين محرفيتين عن طريق التعميمة ‪(strcat‬اطمع عمى ‪ help‬لمعرفة المزيد عن ىذه‬
‫التعميمة) مثال‬
‫قم بتعريف المتحوالت التالية‬
‫'‪B='Hello‬‬
‫'‪C='World‬‬
‫)‪D=strcat(B,C‬‬
‫الخرج ىو‬

‫‪ .3‬كيف نعرف شعاع ‪Vector‬‬

‫‪-71-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫يمكن تعريف شعاع ‪ vector‬عمى الشكل‬


‫] ‪V= [1, 2, 3] or V1 = [ 1 2 3‬‬
‫مالحظة‪ :‬لمفصل بين عناصر الشعاع ضمن نفس السطر نستخدم ” “ أو ”‪“,‬‬
‫;]‪V= [1 2 3 4 5‬‬
‫نحصل عمى شعاع ببعد‬
‫;]‪V1= [1,7,123,66,12‬‬
‫فيكون عمى الشكل التالي‬ ‫‪ .‬أما من أجل الحصول عمى عمى شعاع ببعد‬ ‫نحصل عمى شعاع ببعد‬
‫‪V2= [1‬‬
‫‪2‬‬
‫‪66‬‬
‫‪61‬‬
‫‪]64‬‬
‫أو عمى الشكل ]‪v=[1;2;3;4;5;6‬‬
‫مالحظة‪ :‬من أجل الفصل بين أسطر الشعاع نستخدم ”;“‪.‬‬
‫ألخذ مرافق ومنقول ‪ transpose‬لشعاع أو مصوفة نستخدم ” ' “‪ ،‬قم بتجريب ذلك عمى الشعاع ‪.V2 ،V1‬‬
‫من أجل أخذ الم رافق والمنقول معًا‪ ،‬يجب توليد قيمة عقدية أوالً‪ ،‬مثالً ;‪x=1+ 5 *i‬‬
‫ثم نفذ '‪.y=x‬‬
‫تدريب‪ :‬ولد شعاع عقدي مؤلف من ‪ 6‬قيم ال عمى التعيين وقم بإيجاد مرافق ومنقول ىذا الشعاع‬
‫الحل‬
‫]‪V_complex= [2+2*i, 3*i, 1-10*i, 77, 3+10*i‬‬
‫'‪V_tr=V_complex‬‬
‫الشكل العام لتوليد شعاع‬
‫يتم ذلك بالشكل التالي‬ ‫من أجل توليد شعاع عمى الشكل ]‪ vect=[ 1,2,3, ….,n‬أي ببعد‬

‫‪-72-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪vect1= start: step: stop‬‬


‫وىنا نقوم بتعريف المتحوالت السابقة ( ‪ )start,step, stop‬حسب الشعاع المطموب‪ ،‬إن طول الشعاع المولّد ىو‬

‫مثالً لتوليد الشعاع ]‪ vect= [1,2, …, 20‬نقوم بمايمي‬


‫نعرف المتحوالت التالية‬
‫;‪Start= 1; Step =1; Stop=20‬‬
‫ثم نعرف الشعاع عمى الشكل التالي‬
‫‪Vect1= Start: Step: Stop‬‬

‫مالحظة إن تعريف الشعاع بالشكل التالي‬


‫‪Vect=start: stop‬‬
‫يعطي نفس النتيجة ألن الخطوة االفتراضية في برنامج ىي ‪.1‬‬
‫من أجل معرفة طول شعاع يمكن استخدام التعميمة ‪ length‬وىي تستخدم عمى الشكل التالي‪:‬‬
‫;]‪a = [ 1 2 3 4‬‬
‫)‪length (a‬‬
‫اإلجابة ىي ‪.4‬‬
‫لالستعالم أكثر عن التعميمة ‪ length‬استخدم ‪ MATLAB Help‬وفق تسمسل البحث التالي‪:‬‬
‫ادخل إلى ‪ HELP‬ضمن ‪ toolstrip‬جزء ‪ home‬قسم ‪ resources‬واختر ‪ Documentation‬ىو رقم ‪1‬‬
‫بالصورة أو اضغط عمى االختصار ىو رقم ‪ 2‬بالصورة‬

‫‪-73-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪Array‬‬ ‫ادخل إلى ‪ MATLAB‬ثم ‪ Language Fundamentals‬ثم ‪ Matrices and Arrays‬ثم‬


‫‪ Dimensions‬وادخل إلى التابع ‪.length‬‬
‫مالحظة‪ :‬مطموب من الطالب البحث ضمن ‪ Help‬عن التعميمات التالية وفيم عمميا‪:‬‬

‫‪ linspace‬و ‪.logspace‬‬

‫‪ .4‬كيف نعرف مصفوفة ‪Matrix‬‬


‫يتم التعامل ضمن ‪ MATLAB‬عمى أساس المصفوفات‪ ،‬وىذا ىو االختالف الجوىري بين ‪ MATLAB‬وباقي‬
‫لغات البرمجة‪ ،‬حيث تم بناء برمجية ‪ MATLAB‬لمتعامل مع المصفوفات بمختمف األبعاد والحجوم‪ ،‬مما يجعميا‬
‫من أىم البرمجيات في مجال التحميل اإلحصائي ‪.Statistical Analysis‬‬
‫نقوم بما يمي‬ ‫لتعريف مصفوفة‬
‫]‪M= [1 2 3; 4 5 6‬‬
‫تعريف مصفوفة‬
‫‪M0= [11,4,0,2‬‬
‫]‪4,5,8,9‬‬
‫يمكن استخدام التعريفات التالية وىي متكافئة‬ ‫لتعريف مصفوفة‬
‫]‪M1= [1 2; 3 4‬‬
‫]‪M2= [1,2;3,4‬‬
‫‪M3 = [1 2‬‬
‫]‪34‬‬
‫لمفصل بين عناصر المصفوفة ضمن نفس السطر نستخدم ” “ أو ”‪ “,‬أما من أجل الفصل بين األسطر نستخدم‬
‫”;“‪.‬‬
‫يوجد العديد من التوابع المفيدة لمتعامل مع المصفوفات نذكر منيا‪:‬‬
‫‪ size‬تفيد في معرفة حجم صفيفة‪ ،‬حيث تقوم ىذه التعميمة بإرجاع متحول ىو شعاع كل عنصر فيو ىو أحد‬
‫أبعاد الصفيفة أي في حال إنشاء مصفوفة ثنائية البعد فالخرج ىو شعاع يحتوي عنصرين األول ىو عدد األسطر‬
‫والثاني ىو عدد األعمدة‪.‬‬
‫‪ sum‬يفيد ىذه التابع في معرفة مجموع عناصر صفيفة حيث يقوم بجمع عناصر كل عمود‪.‬‬
‫‪ prod‬يفيد ىذه التابع في معرفة حاصل ضرب عناصر صفيفة حيث يقوم بضرب عناصر كل عمود‪.‬‬
‫مثال‪ :‬لنقم بإنشاء المصفوفة التالية ]‪ A= [ 1 1 1; 2 3 4‬ولنطبق التعميمات السابقة عمى الترتيب أي‬
‫)‪.size(A), sum(A), prod(A‬‬
‫مالحظة‪ :‬يمكن التعرف أكثر عمى ىذه التعميمات عن طريق ‪ ،Help‬كما يمكن إسناد خرج ىذه التعميمات إلى‬
‫متحوالت بغرض االستفادة منيا في تطبيق ما أو ضمن العمل عمى موضوع ما‪.‬‬

‫‪-74-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫جرب ذلك عن طريق توليد مصفوفة‬ ‫مالحظة‪ :‬يمكن لتابع … ‪ cos, sin , tan,‬أن تاخذ دخل ىو مصفوفة‪ّ ،‬‬
‫سميا ‪ MAT‬ثم أخذ )‪ sin(MAT‬و كذلك األمر لمتعميمات السابقة‪ .‬ويوجد أيضاً عدد من التعميمات المفيدة اطمّ ع‬
‫ّ‬
‫عمى التعميمة ‪.sort‬‬
‫مالحظة‪ :‬يوجد عدد كبير من التعميمات والتوابع التي تسيل عمل المستخدم مع المصفوفات يمكن االطالع عمييا‬
‫عن طريق ‪ help‬وفيم معناىا‪ ،‬قمنا بعرض عدد قميل وقميل جدًا من التعميمات ونترك لممستخدم التعمم عند‬
‫الحاجة‪.‬‬

‫‪-75-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪ .5‬كيف نعرف صفيفة ‪Array‬‬


‫قمنا في الفقرات السابقة بشرح الط رائق المختمفة لتمثيل المعطيات ضمن ‪ MATLAB‬إما عمى شكل متحول سممي‬
‫أو شعاع أو مصفوفة أي كصفيفة ‪ array‬أحادية األبعاد أو ثنائية األبعاد‪ ،‬إال أن ‪ MATLAB‬يتيح لنا إنشاء‬
‫ال صفيفة ثالثية األبعاد ويتم ذلك بسيولة ولكن المشكمة تكمن في عرض الصفيفة ألنو من‬
‫أبعاد بأبعاد أكثر مث ً‬
‫غير الممكن عرض أشكال ثالثية األبع اد عمى شاشة ثنائية األبعاد‪ ،‬لذلك نقوم بالتعامل مع مساقط ىذه‬
‫المصفوفة‪.‬‬
‫ببساطة يتم تعريف الصفيفة عن طريق تعريف األبعاد وقيم عناصرىا‪.‬‬
‫قم باستخدام ‪ help‬بالبحث عن التعميمات التالية ‪zeros, ones, rand‬‬
‫بعد البحث يجب معرفة أن‬
‫‪ zeros‬تقوم بإنشاء صفيفة كل قيميا أصفار‬
‫‪ ones‬تقوم بإنشاء صفيفة كل قيميا واحدات‬
‫‪ rand‬تقوم بإنشاء صفيفة بتوزيع شبو عشوائي ىو توزيع منتظم عمى المجال ]‪[0,1‬‬
‫بعد التعرف عمى التعميمات المهمة السابقة نقوم بتعريف صفيفة ثالثية األبعاد عمى الشكل‬
‫نكتب )‪ zeros(2,2,2‬ثم ‪enter‬‬
‫يتم التعريف عمى الشكل التالي كما يتم عرض مساقط ىذه الصفيفة‬

‫ىذه الصورة ىي لتوضيح الصفيفة ‪<---------------‬‬


‫حيث ‪ m‬ىو عدد األسطر‪ n ،‬ىو عدد األعمدة و ‪ p‬ىو البعد‬
‫الثالث‬
‫إن المؤثر ‪ “:” Operator‬في أسطر وأعمدة الصفيفة السابقة‬
‫يدل عمى أنو يتم إظيار جميع العناصر الموجودة في ىذا البعد اي ىنا يتم عرض عناصر البعدين األول والثاني‬
‫من أجل العمود األول أي ‪ p=1‬ثم يتم عرض عناصر البعدين األول والثاني من أجل العمود الثاني أي ‪p=2‬‬
‫اعتمادًا عمى الشكل السابق‬

‫‪-76-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫جرب ‪ command window‬ما يمي ضمن )‪ ans(:,1,:‬او )‪ ans(:,2,:‬سينتج الشكل التالي‬


‫ّ‬

‫‪ ‬يمكن أيضاً اعتماداً عمى تعريف كل مسقط لمصفيفة تعريف صفيفات بأبعاد مختمفة أكبر من بعدين‬
‫‪ ‬ويمكن تعريف أيضًا مصفوفة مصفوفات عمى الشكل التالي‪:‬‬
‫تمرين‪ :‬قم بتعريف المصفوفات التالية‬
‫]‪a=[1,2;3,4] b=[5,6;7,8] c=[9,9] d=[4;4;4‬‬
‫من أجل إنشاء صفيفة تحتوي كافة المصفوفات السابقة نقوم بتعريف‬
‫}‪e={a,b;c,d‬‬
‫فنحصل عمى‬

‫من أجل استعمال (أو معاينة) عناصر ىذه المصفوفة التي ىي عبارة عن مصفوفات يمكن كتابة }‪ e{1,1‬والخرج‬
‫ىو عبارة عن المصفوفة ‪.a‬‬

‫‪-77-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪Operators in MATLAB‬‬ ‫المؤثرات ضمن ‪MATLAB‬‬


‫أوالً سنقوم بشرح المؤثر ‪ Colon‬ثم سننتقل لشرح باقي المؤثرات‪.‬‬
‫المؤثر )‪ Colon(:‬ويعتبر من أىم المؤثرات في ‪ ،MATLAB‬يستخدم في توليد سمسمة من األرقام وىي تفيد في‬
‫إنشاء (توليد) وفيرسة ( ‪ )indexing‬األشعة والمصفوفات و الصفيفة ‪ ،array‬كما أنو يستخدم ضمن حمقة ‪for‬‬
‫من أجل إنشاء عداد الحمقة‪.‬‬
‫سنقوم بشرح استخدامات ىذا المؤثر‪:‬‬
‫‪ ‬إنشاء شعاع بخطوة ثابتة أو متغيرة كما أوضحنا سابقاً في ىذه الفقرة‬
‫;‪Vect = 1:15‬‬
‫;‪Vect_2 = 0:2:30‬‬
‫‪ ‬تفيد في إسناد قيم معينة إلى مصفوفة ما بعد تعريفيا أو إسناد قيم جديد ة لممصفوفة دون تغيير شكميا‪.‬‬
‫عرف المصفوفة التالية )‪ A= rand(3,4‬ثم قم بما يمي‪:‬‬
‫مثال‪ّ :‬‬
‫‪A(1,:) = 0‬‬
‫والحظ الخرج‪( ،‬مالحظة تعميمة ‪ rand‬تقوم بتوليد قيم عشوائية لذلك عند كل تنفيذ لمتعميمة‬ ‫‪A(:) = 1:12‬‬
‫ستحصل عمى قيم مختمفة لممصفوفة األولى)‪.‬‬

‫‪-78-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪ ‬إنشاء عداد التكرار ضمن حمقة ‪.for‬‬


‫مثال‪ :‬اكتب ضمن ‪ Command Window‬ما يمي‪:‬‬
‫‪for i = 1 :3‬‬
‫‪x = 2*i‬‬
‫‪end‬‬

‫‪ ‬تحديد مجال من القيم أو سطر أو عمود ضمن مصفوفة‪ ،‬صفيفة‪.‬‬


‫مثال‪ :‬نعرف المصفوفة ‪ A‬عمى الشكل التالي‪ ،‬وننفذ ما يمي )‪ A(:,1‬والتي تفيد في قراءة عناصر العمود األول‬
‫من المصفوفة ‪ ،A‬و )‪ A(2,:‬والتي تفيد في عناصر السطر التاني من المصفوفة ‪ A(:,2:3) ،A‬من أجل قراءة‬
‫العمود الثاني والثالث من المصفوفة ‪ A(2:3,2:3) ،A‬من أجل قراءة العمود الثاني والثالث و السطر الثاني‬
‫والثالث من المصفوفة ‪.A‬‬
‫‪‬‬ ‫]‪A = [ 1 2 3 4; 4 5 6 7; 7 8 9 0‬‬

‫‪-79-‬‬
MATLAB for Numerical Computing-Ch2

 A(:,1)% First Coloumn of A


 A(2,:)% second Row of A
 A(:,2:3)% second and third column of A
 A(2:3,2:3)% second and third rows and second and third columns

-80-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫تقوم بقراءة جميع عناصر المتحول وتحويمو إلى شعاع عمود سواء كان المتحول ىو سطر أو عمود أو‬ ‫‪‬‬
‫مصفوفة‪.‬‬
‫كما في المثال التالي‪:‬‬
‫عرف )‪ B1= A1(:‬و )‪B2=A2=(:‬‬
‫عرف ;]‪ A1=[1, 2, 3, 4; 5, 6, 7,8]; A2=[1 2 3 4‬ثم ّ‬
‫ّ‬

‫لالستعالم أكثر عن المؤثر ‪ colon‬استخدم ‪ MATLAB Help‬وفق تسمسل البحث التالي‪:‬‬


‫ادخل إلى ‪ HELP‬ضمن ‪ toolstrip‬جزء ‪ home‬قسم ‪ resources‬واختر ‪ Documentation‬ىو رقم ‪1‬‬
‫بالصورة أو اضغط عمى االختصار ىو رقم ‪ 2‬بالصورة‬

‫ادخل إلى ‪ MATLAB‬ثم ‪ Language Fundamentals‬ثم ‪ Matrices and Arrays‬ثم ‪ Indexing‬وادخل‬


‫إلى ‪.Colon‬‬
‫بعد النتياء من الحديث عن المؤثر اليام ‪ colon‬سنعرض في ىذه الفقرة المؤثرات ‪ operators‬التي تستخدم‬
‫ضمن برمجية ‪ MATLAB‬إضافةً لوظيفتيا‪ ،‬تقسم ضمن خمسة فئات وىي‪:‬‬
‫‪ .1‬مؤثرات حسابية ‪Arithmetic Operators‬‬
‫‪ .2‬مؤثرات عالقاتية ‪Relational Operators‬‬
‫‪ .3‬مؤثرات منطقية ‪Logical Operators‬‬
‫‪ .4‬عمميات عمى مستوى البت ‪Bit-Wise Operations‬‬

‫‪-81-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪ .5‬عمميات عمى المجموعات ‪Set Operations‬‬

‫مؤثرات حسابية ‪Arithmetic Operators‬‬

‫تقسم المؤثرات الحسابية ضمن ‪ MATLAB‬إلى قسمين من العمميات ىما‪:‬‬


‫‪ ‬العمميات عمى الصفيفة ‪ Array Operations‬والتي تكون عمى مستوى العناصر أي عنصر لعنصر‬
‫‪.element-by-element‬‬
‫‪ ‬العمميات عمى مستوى المصفوفة ‪.Matrix Operations‬‬

‫‪-82-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫العددية‪ ،‬مثل جمع عددين أو شعاعين‪ ،‬ضرب‬


‫يمكن استخدام ىذه المؤثرات الحسابية إلجراء الحسابات ّ‬
‫مصفوفتين‪ ،‬رفع عناصر صفيفة إلى قوة معينة‪.‬‬
‫يجب االنتباه إلى االختالف بين النوعين السابقين حيث أن العمميات عمى المصفوفة تتبع قواعد الجبر الخطي‪،‬‬
‫متعددة‬
‫في حين أن العمميات عمى الصفيفة تنفذ عمى مستوى عنصر لعنصر ويمكن استخداميا عمى الصفيفات ّ‬
‫األبعاد‪ .‬يستخدم المحرف ( ‪ ) .‬لمتمييز بين العمميات عمى الصفيفات والعمميات عمى المصفوفات‪.‬‬
‫مالحظة‪ :‬ال يوجد اختالف بين عمميات الطرح والجمع بين الصفيفة والمصفوفة لذلك من غير الضروري استخدام‬
‫المحرف ‪ .‬مع عممياة الجمع ‪ +‬أي ال نستخدم ‪ .+‬بل نستخدم ‪ +‬فقط‪.‬‬
‫سنبدأ الشرح عن العمميات عمى الصفيفة يوضح الجدول التالي المؤثرات إضافةً إلى اليدف منيا ووصف المؤثر‬
‫إضاف ًة ألسماء التعميمات أو المفاىيم الموجودة ضمن ‪MATLAB HELP‬من أجل االطالع بشكل أوسع عمى‬
‫عمل التعميمة وشرح عن المؤثر إضافةً لالستفادة من األمثمة الموجودة ضمن ‪.HELP‬‬

‫مالحظة ىامة‪ :‬العمميات التالية صحيحة من أجل صفيفات بنفس البعد (‪.)equal dimensions‬‬
‫‪ + .1‬مؤثر الجمع‪ - ،‬مؤثر الطرح‪:‬‬

‫‪-83-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫نعرف شعاعين ;]‪ A= [ 1 1 1 1]; B= [ 2 2 2 2‬أوجد ناتج ‪.A+B, B-A‬‬


‫‪ / .2‬مؤثر القسمة لكن يجب التفريق بين المؤثر ‪ /‬و \ لدينا المثال التالي‪:‬‬
‫اكتب ‪ 5/4‬النتيجة ىي ‪1.2500‬‬
‫أما ‪ 5\4‬النتيجة ىي ‪0.8000‬‬
‫أي المؤثر ‪ /‬يعني أن العدد إلى يسار المؤثر ىو المقسوم والعدد إلى يمين المؤثر ىو المقسوم عميو‬
‫ويمكن تجريبيا أيضًا عمى أشعة أو صفيفات‪.‬‬
‫‪ .* .3‬مؤثر الضرب يقوم بضرب كل عنصر من الصفيفة بالعنصر المقابل لو‪ /‬المثال التمي يوضح الفكرة‬
‫التالية‪:‬‬
‫عرف ;] ‪ A = [1 2 ; 3 4 ]; B = [1 2; 1 2‬ونالحظ أن الخرج ىو كالتالي‪:‬‬
‫ّ‬

‫‪-84-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫أما القسم الثاني من العمميات ىو العمميات عمى المصفوفة يوضح الجدول التالي المؤثرات إضاف ًة إلى اليدف‬
‫منيا ووصف المؤثر إضافةً ألسماء التعميمات أو المفاىيم الموجودة ضمن ‪ MATLAB HELP‬من أجل‬
‫االطالع بشكل أوسع عمى عمل التعميمة وشرح عن المؤثر إضاف ًة لالستفادة من األمثمة الموجودة ضمن ‪.HELP‬‬

‫‪N‬‬
‫* مؤثر جداء المصفوفات والذي يتم وفقًا لمعالقة التالية ‪C i , j   Ai ,k .B k , j‬‬
‫‪k 1‬‬

‫سنسعى في الشرح التالي التمييز بين المؤثر *‪ .‬و * حيث وجدنا أن المؤثر *‪ .‬يقوم بضرب كل عنصر من‬
‫الصفيفة مع العنصر المقابل لو بشرط أن تكون الصفيفات بنفس األبعاد‪ ،‬اما بالنسبة لضرب المصفوفات فيجب‬
‫أن يتحقق شرط األبعاد الداخمية ‪ inner dimensions‬من أجل إجراء عممية الضرب‪.‬‬
‫الخطوات من أجل ضرب مصفوفتين ‪:‬‬
‫‪ .1‬يجب أن يكون عدد أعمدة المصفوفة األولى مساوي لعدد أسطر المصفوفة الثانية‪.‬‬
‫‪N‬‬
‫‪ .2‬عندىا يتم تطبيق العالقة التالية ‪ C i , j   Ai ,k .B k , j‬حيث يتم ضرب العناصر من كل سطر من‬
‫‪k 1‬‬

‫المصفوفة األولى بالعناصر من كل عمود من المصفوفة الثانية‪ ،‬ثم يتم جمع ىذا ناتج ضرب كل‬
‫عنصر مع العنصر المقابل لو عند االنياء من السطر مع العمود المقابل لو‪.‬‬

‫‪-85-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫ٍ‬
‫مساو لعدد أسطر المصفوفة الثانية‬ ‫ال عدد أعمدة المصوفة األولى يساوي ‪ 2‬وىو‬
‫المثال التالي لمتوضيح‪ :‬لدينا أو ً‬
‫ومنو يمكن تنفيذ عممية الضرب‪.‬‬
‫العنصر األول في المصفوفة الناتجة ىو حاصل الجداء السممي لمسطر األول من المصفوفة األولى مع العمود‬
‫األول من المصفوفة الثانية حيث يتم ضرب كل عنصر بمقابمو وجمع النتيجة وىكذا من أجل باقي عناصر‬
‫المص فوفة الناتجة والتي تكوت بأبعاد ىي األول ىو عدد أسطر المصفوفة األولى و الثاني ىو عدد أعمدة‬
‫المصفوفة الثانية‪.‬‬

‫مثال‪ :‬لنقم بتوليد المصفوفتين التاليتين‬


‫;]‪ A= [1 2; 3 4]; B= [3 0; 2 4‬ولنوجد المصفوفات التالية‪ C= A.*B :‬و ‪.D= A*B‬‬

‫‪-86-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫يمكن استخدام ‪ help‬لالطالع عمى عمل ىذه المؤثرات بشكل أكبر‪ .‬ابحث وفق المسار التالي‬
‫‪Matlab  language fundamaentals  operators and elementary operations ‬‬
‫‪.arithmetic‬‬
‫مثال عمى استخدام المصفوفات في حل جممة المعادالت‪.‬‬
‫لتكن لدينا جممة المعدالت التالية‪ ،‬يمكن تمثيميا‬

‫يمكن تمثيميا بالشكل المصفوفاتي أي ‪ Ax=b‬حيث ‪ A‬ىي مصفوفة‪ x ،‬ىو شعاع المجاىيل و ‪ b‬ىو شعاع‬
‫األمثال المعطاة‪.‬‬
‫نقوم بتشكيل المصفوفة ‪ A‬حيث عناصرىا ىي‪:‬‬

‫‪-87-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫;]‪ A= [3 2 -1; 2 -2 4; -1 0.5 -1]; b= [1; -2; 0‬ثم نقوم بإيجاد شعاع المجاىيل حيث يمكن إيجاد‬
‫الشعاع ]‪ x= [t; v; u‬بث الثة طرق متكافئة إال أن فكرة الحل وحيدة وىي إيجاد مقموب المصفوفة ‪ A‬وضربيا‬
‫بالشعاع ‪.b‬‬
‫الطريقة األولى باستخدام تعميمة ‪ inv‬والتي تفيد في إيجاد مقموب مصفوفة‪.‬‬
‫الطريقة الثانية باستخدام المؤثر ^ أي ‪ power‬وىو الرفع إلى قوة نقوم برفعو إلى القوة ‪ -1‬من أجل إيجاد‬
‫المقموب عمى اعتبار ان المؤثر يتعامل مع المصفوفة‪.‬‬
‫الطريقة الثالثة ىي استخدام المؤثر \ حيث نقوم بتقسيم الشعاع ‪ b‬عمى المصفوفة ‪ A‬وىذا ممكن ألن ىذا المؤثر‬
‫معرف من أجل العمميات عمى المصفوفات‪.‬‬
‫ّ‬

‫تمرين‪ :‬قم بإيجاد حل جممة المعادالت التالية‪.‬‬

‫‪-88-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫مؤثرات عالقاتية ‪Relational Operators‬‬


‫تعمل ىذه المؤثرات عمى مستوى عناصر الصفيفة بشكل عام شرط أن تكون بأبعاد متساوية‪ ،‬أي ان المقارنة تتم‬
‫عمى مستوى عنصر لعنصر ‪ .element-by-element‬يكون خرج عممية المقارنة ىو متحول منطقي ‪logical‬‬
‫أي ىو عبارة عن ‪ 1‬إذا كانت نتيجة المقارنة صحيحة (ي دل عمى ‪ )true‬أو ‪ 0‬إذا كانت نتيجة المقارنة خاطئة‬
‫(يدل عمى ‪)false‬‬

‫يمكن إضافة حقل لمجدول ىو التفسير بالمغة العربية ليذه المؤثرات‬


‫< أصغر من =< أصغر أو يساوي > أكبر من => أكبر أو يساوي == لممساواة =~ عدم المساواة‬
‫مثال‪:‬‬

‫‪-89-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫مؤثرات منطقية ‪Logical Operators‬‬


‫يتيح ‪ MATLAB‬لممستخدم نوعين من المؤثرات المنطقية‪:‬‬
‫‪( Element-wise‬مستوى العناصر) تعمل عمى عناصر الصفيفات المنطقية ‪.logical arrays‬‬ ‫‪‬‬
‫لناخذ المثال التالي من أجل معرفة عمل ىذه المؤثرات وما ىي التعميمات أو المحارف الخاصة بيا ضمن المغة‪.‬‬
‫نعرف الشعاعين التاليين ;]‪ A = [0 1 1 0 1]; B= [1 1 0 0 1‬يبين الجدول التالي المؤثرات المنطقية عمى‬
‫مستوى العنصر ونتيجة تطبيق ىذه المؤث رات عمى الشعاعين السابقين‪.‬‬

‫يمكن التعرف أكثر عمى التوابع المتوفرة ضمن ‪ MATLAB‬وعمى المؤثرات عن طريق ‪ .Help‬قم بالبحث عن‬
‫‪ logical operators‬و ‪ logical operators: element-wise‬و ‪logical-operators: short-circuit‬‬
‫و يمكن أيضًا البحث عن ‪ operators‬يوجد ضمنيا فقرة خاصة ب ‪.logical operators‬‬
‫‪ Short-circuit‬تعمل عمى التعابير المنطقية التي تحتوي عمى قيم السممية ‪scalar and logical‬‬ ‫‪‬‬
‫‪.expressions‬‬
‫ىذه المؤثرات ىي‬

‫‪-90-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫يمكن استخدام ‪ help‬لالطالع عمى عمل ىذه المؤثرات بشكل أكبر‪.‬‬

‫عمميات عمى مستوى البت ‪Bit-Wise Operations‬‬


‫تفيد في إجراء عمميات منطقية عمى مستوى البت مثل ‪ and, or, xor‬وايجاد المكمل ‪ complement‬والقيام‬
‫بعممية األزاحة ‪ shift‬و ‪ ،....‬لالطالع عمى المزيد عن ىذا الموضوع استخدم ‪.help‬‬
‫نعرض المثال التالي‪:‬‬
‫موضح أيضاً‪.‬‬
‫ّ‬ ‫يتم تعريف قيمتين ‪ A,B‬ومن ثم يتم استخدام بعض العمميات المنطقية عمى مستوى البت‪ ،‬الخرج‬

‫مثال‪ :‬قم بتعريف مايمي‪:‬‬


‫‪a = 60; % 60 = 0011 1100‬‬
‫‪b = 13; % 13 = 0000 1101‬‬
‫‪c = bitand(a, b) % 12 = 0000 1100‬‬
‫‪c = bitor(a, b) % 61 = 0011 1101‬‬

‫‪-91-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪c = bitxor(a, b) % 49 = 0011 0001‬‬


‫*‪c = bitshift(a, 2) % 240 = 1111 0000 /‬‬
‫*‪c = bitshift(a,-2) % 15 = 0000 1111 /‬‬
‫الخرج عمى الشكل التالي‪:‬‬

‫مالحظة‪ :‬يرجى دمج ىذه الصورة مع الصورة السابقة ألنيا نتيجة الخرج‪.‬‬
‫عمميات عمى المجموعات ‪Set Operations‬‬
‫وىي تشمل عمميات التقاطع‪ ،‬االجتماع‪ ،‬االنتماء إلى مجموعة‪ ،‬الفرق إضاف ًة إلى العديد من التوابع الممكن‬
‫استخداميا في ىذا المجال‪ ،‬يبين الشكل التالي صورة ليا لالطالع أكثر عمى عمميا استخدم ‪ help‬وابحث عن‬
‫‪ set operations‬وقم بقراءة عمل كل تابع عند الحاجة لمعمل مع مثل ىذه التوابع‪.‬‬

‫‪-92-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫مثال‪:‬‬
‫]‪a = [7 23 14 15 9 12 8 24 35‬‬
‫]‪b = [2 5 7 8 14 16 25 35 27‬‬
‫)‪u = union (a,b‬‬
‫)‪i = intersect (a,b‬‬
‫)‪s = setdiff (a,b‬‬

‫مالحظة يرجى دمج ىذه الصورة مع الصورة السابقة ألنيا خرج لمتنفيذ‪.‬‬

‫فهرسة المصفوفات ‪:Array indexing‬‬


‫من أجل الوصول إلى عنصر معين أو مجموعة من العناصر ضمن شعاع‪ ،‬مصفوفة أو صفيفة البد لنا من‬
‫استخدام عممية الفيرسة ‪ ،indexing‬ىنا تجدر اذكر المالحظة األكثر أىمية وىو ان ‪ MATLAB‬ال يقبل أي‬
‫دليل سابي أي أن الوصول لمعنصر األول ضمن شعاع أو مصفوفة ما ىو عبر الدليل ‪ 1‬وليس الدليل ‪.0‬‬
‫عرف الشعاع التالي ;]‪ Ind= [ 0 1 2 3‬من أجل الوصول لمعنصر األول وىنا قيمتو ‪ 0‬نكتب )‪Ind(1‬‬ ‫مثال‪ّ :‬‬
‫واال ستظير رسالة خطأ كما في الشكل التالي‪:‬‬

‫‪-93-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫الوصول إلى عنصر‬


‫يتم الوصول إلى عنصر ضمن مصفوفة عن طريق تحديد ضمن اي سطر وعمود يقع العنصر أي عمى الشكل‪:‬‬
‫)‪Matrix (row, coloumn‬‬
‫باستخدام التعميمة ‪ .magic‬نكتب التعميمة التالية )‪ A= magic(5‬قم باالطالع‬ ‫لنقم بتوليد مصفوفة ببعد‬
‫ضمن ‪ HELP‬عمى عمل التعميمة ‪ ،magic‬ثم قم بإيجاد العنصر الواقع في السطر الرابع والعمود الثالث‪.‬‬

‫ىنالك طريقة أخرى لموصول إلى عنصر حيث ان ‪ MATLAB‬يقوم بتخزين المصفوفة ضمن الذاكرة بشكل‬
‫تسمسمي أي أن أي مصفوفة تخزن عمى شكل عمود عدد أسطره ىو عدد عناصر المصفوفة وعدد أعمدتو ‪.1‬‬
‫عناصر العمود األول في المصفوفة األصمية ىي األسطر األولى ضمن المصفوفة ثم يأتي بعدىا عناصر العمود‬
‫الثاني وىكذا لنوضح ذلك بمثال‪.‬‬
‫مثال‪ :‬لنقم بتوليد المصفوفة التالية ;]‪ A = [1, 2, 3; 8, 3, 6; 1, 2, 5‬يتم تخرين المصفوفة التالية في الذاكرة‬
‫عمى الشكل التالي‬
‫‪1‬‬
‫‪8‬‬

‫‪-94-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪6‬‬
‫‪5‬‬
‫يمكن الوصول إلى العنصر ‪ 8‬والذي يقع ضمن السطر الثاني العمود األول عن طريق كتابة )‪ ،A(2‬أما العنصر‬
‫‪ 4‬الواقع في السطر الثاني العمود الثالث فترتيبو ىو العنصر الثامن أي نكتب )‪A(8‬‬

‫‪-95-‬‬
MATLAB for Numerical Computing-Ch2

https://www.youtube.com/watch?v=tqjZ80PwqBU
https://www.youtube.com/watch?v=q8lUOI0uqTo

-96-
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫األسئمة‬
‫‪ .1‬ما ىي قيمة المتحول ‪ ans‬بعد تنفيذ الرماز التالي‬
‫‪1+6 .a‬‬
‫‪X =1+6 .b‬‬
‫‪E=X+2 .c‬‬
‫‪ 4+5 .d‬؟؟‬
‫مساعدة‪ :‬قراءة فقرة عمميات حسابية بسيطة و فقرة محارف وقيم خاصة‬

‫‪ .2‬كممة ‪ NAN‬ىي اختصار ألي كممة وما داللتيا ومتى يكون خرج العممية الحسابية ىو القيمة ‪ NAN‬؟؟‬
‫مساعدة‪ :‬قراءة فقرة محارف وقيم خاصة‬

‫‪ .3‬عند تعريف المتحول ;‪ x=1‬ما ىو نمط المتحول؟؟‬


‫مساعدة‪ :‬قراءة فقرة مقدمة عن المتحوالت‬

‫‪ .4‬ما ىو الفرق بين عمل التعميمة ‪ clc‬والتعميمة ‪clear all‬‬


‫مساعدة‪ :‬قراءة فقرة مقدمة عن المتحوالت‬

‫وسمو ‪ x‬وأسند لو القيمة ‪ 10‬وأضف تعميق إلى جانبو وىو ‪this variable is‬‬
‫‪ .5‬قم بتعريف متحول سممي ّ‬
‫‪ the answer of question 4‬وضمن التعريف ال يجب عند تنفيذ التعميمة أن تظير النتيجة في‬
‫‪.command window‬‬
‫مساعدة‪ :‬قراءة فقرة كيف نعرف متحول سممي‬

‫يحتوي عمى كافة األعداد الفردية ضمن المجال ]‪ [1-60‬بحيث‬ ‫‪ .6‬قم بتعريف شعاع باسم ‪ vect‬ببعد‬
‫عند تنفيذ التعميمة يتم عرض القيم في ‪ command window‬كيف يمكن معرفة طول الشعاع اكتب‬
‫التعميمة الالزمة لذلك‬
‫مساعدة‪ :‬قراءة فقرة كيف نعرف شعاع‬

‫‪ .7‬قم بتعريف المصفوفات التالية‪:‬‬


‫‪ ‬مصفوفة مربعة ببعد‬
‫باستخدام التعميمة ‪zeros‬‬ ‫‪ ‬مصفوفة مربعة ببعد‬
‫باستخدام التعميمة ‪ones‬‬ ‫‪ ‬مصفوفة مربعة ببعد‬

‫‪-97-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫باستخدام التعميمة ‪rand‬‬ ‫‪ ‬مصفوفة مربعة ببعد‬


‫مساعدة‪ :‬قراءة فقرة كيف نعرف مصفوفة‬

‫‪ .8‬كيف ممكن معرفة بعد ىذه المصفوفة وحاصل جمع ع ناصر ىذه المصفوفة اكتب الرماز البرمجي الالزم‪،‬‬
‫المصفوفة ىي‬
‫;]‪A= [2 5 6; 1 1 3‬‬
‫مساعدة‪ :‬قراءة فقرة كيف نعرف مصفوفة‬

‫‪ .9‬في حال قمنا بتعريف المصفوفات التالية‬


‫]‪a=[1,3; 2 ,4;3,4] b=[1,1;2,2] c=[0,1] d=[4;5;6‬‬
‫كيف يتم تعريف صفيفة تحتوي كافة المصفوات السابقة ؟؟ و كيف من الممكن معاينة العنصر ‪c‬‬
‫مساعدة‪ :‬قراءة فقرة كيف نعرف صفيفة‬

‫‪ .11‬اكتب الرماز البرمجي االلذي يقوم بتنفيذ ما يمي‪ :‬في حال قمنا بتعريف المصفوفة التالية‬
‫]‪A = [ 0 3 3 4; 4 2 1 7; 7 4 9 0; 47 86 19 10‬‬
‫ال من المصفوفة‬
‫كيف يمكن قراءة العمود الثالث كام ً‬
‫كيف يمكن قراءة السطر الثالث كامالً من المصفوفة‬
‫كيف يمكن قراءة العنصر األول والثاني ضمن السطر الرابع من المصفوفة‬
‫مساعدة‪ :‬قراءة فقرة المؤثرات ضمن ‪ MATLAB‬وتحديدًا المؤثر ‪.colon‬‬

‫‪ .11‬في حال لدينا المصفوفتين التاليتين ‪ A,B‬المعرفتين وفق ما يمي‬


‫]‪A= [ 1 , 1; 2, 2] B= [2,3;4,0‬‬
‫ما قيمة اخرج العميمات التالية‬
‫‪X= A+3‬‬
‫‪Y= A^2‬‬
‫‪Z=2*B‬‬
‫‪C=A*B‬‬
‫‪D=A.*B‬‬
‫مساعدة‪ :‬قراءة فقرة المؤثرات ضمن ‪ MATLAB‬وتحديدًا المؤثرات الحسابية‬

‫‪-98-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫‪ .12‬قم بإيجاد حل جممة المعادالت التالية‪.‬‬

‫مساعدة‪ :‬قراءة فقرة المؤثرات ضمن ‪ MATLAB‬وتحديدًا المؤثرات الحسابية وبشكل أدق التمرين الذي طمب‬
‫تحضيره‬

‫‪ .13‬ما خرج التعميمات التالية‪ ،‬في حال كان أحدىا يعطي خطأ يرجى اإلجابة بكممة ‪ error‬فقط‪.‬‬
‫]‪X = [1 ,2 ; 3 ,4; 5 ,6‬‬
‫)‪X(0‬‬
‫)‪X(6‬‬
‫)‪X(5‬‬
‫)‪X(3,2‬‬
‫)‪X(4,7‬‬

‫‪-99-‬‬
‫‪MATLAB for Numerical Computing-Ch2‬‬

‫اإلجابات‬
‫‪9 .1‬‬

‫عددية‪ ،‬وىي عبارة عن النتيجة‬


‫‪ NAN .2‬وىي اختصار ل ‪ Not-a-Number‬لمداللة عمى أنيا ليست قيمة ّ‬
‫من عمميات غير معرفة نتيجتيا نذكر منيا‪:‬‬
‫‪ ‬أي عممية حسابية عمى ‪NAN‬‬
‫أو‬ ‫أو‬ ‫أو‬ ‫‪ ‬خرج عممية‬

‫‪ .3‬النمط ‪double 64-bit‬‬

‫‪ .4‬األولى ‪ clc‬تقوم بمسح التعميمات الموجودة ضمن ‪ command window‬دون مسح المتحوالت أي تبقى‬
‫ضمن ‪ workspace‬الثانية ‪ clear all‬تقوم بمسح جميع المتحوالت التي تم تعريفيا‬

‫‪x=10; % this variable is the answer of question 4 .5‬‬

‫‪ vect = 1:2: 60 .6‬ويتم معرفة الطول عن طريق كتابة )‪length(vect‬‬

‫‪ .7‬يترك تصحيح اإلجابة لألستاذ المشرف عمى المقرر‪.‬‬

‫‪size(A), sum(A) .8‬‬

‫‪ arr={a,b;c,d} .9‬أما من أجل معاينة العنصر ‪ c‬نكتب }‪arr{2,1‬‬

‫‪ .11‬من أجل قراءة العمود الثالث نكتب )‪A(:,3‬‬


‫من أجل قراءة السطر الثالث نكتب )‪A(3,:‬‬
‫من أجل قراءة العنصر األول والثاني ضمن السطر ال رابع )‪A(4,1:2‬‬

‫‪X = [4 4; 5 5]; .11‬‬


‫;]‪Y= [3 3; 6 6‬‬
‫;]‪Z= [4 6; 8 0‬‬
‫;]‪C= [6 3; 12 6‬‬
‫;]‪D= [2 3; 8 0‬‬

‫‪-100-‬‬
MATLAB for Numerical Computing-Ch2

a = [2 3 5 1 .12
4790
1602
1 1 1 -1],
b = [1 5 0 5],
x = a\b'

error ‫ تعطي‬X(0) .13


6 ‫ تعطي‬X(6)
4 ‫ تعطي‬X(5)
6 ‫ تعطي‬X(3,2)
error ‫ تعطي‬X(4,7)

-101-
MATLAB for Numerical Computing-Ch3

-1- MATLAB® ‫ البرمجة في‬:‫الفصل الثالث‬


)‫ والتوابع‬scripts ‫(استخدام ملفات‬
Programming in MATLAB® -1- (Use of Scripts
files and Functions)

-0-

-102-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫عنوان الموضوع‪:‬‬
‫البرمجة في ®‪( -1- MATLAB‬استخدام ممفات ‪ scripts‬والتوابع)‬
‫)‪Programming in MATLAB® -1- (Use of Scripts files and Functions‬‬

‫الكممات المفتاحية‪:‬‬
‫‪ ،MATLAB‬لواحق الممفات ‪ ،script ،.m file ،file extension‬تابع ‪ ،function‬محرر النصوص ‪Text‬‬
‫‪ Anonymous function ،Editor‬التوابع مجيولة االسم‪ ،‬التوابع المحمية ‪ ،Local function‬التوابع المتداخمة‬
‫‪ Private function ،Nested function‬التوابع الخاصة‪.‬‬

‫ممخص‪:‬‬
‫ييتم ىذا الفصل بتعمم البرمجة باستخدام لغة ‪ ،MATLAB‬والتركيز عمى استخدام ممفات ‪ scripts‬والتوابع‬
‫‪ ،functions‬حيث نبدأ بعرض بسيط لمواحق الممفات ضمن ‪ ،MATLAB‬لنبدأ بعدىا بالتعرف عمى ممفات‬
‫‪ ،script‬وممفات التوابع ‪ function‬والفروقات بين الممفات السابقة‪ ،‬ثم يتم ضمن ىذا الفصل التعامل مع ممفات‬
‫‪ script‬من حيث اإلنشاء‪ ،‬البرمجة‪ ،‬التنفيذ وكذلك األمر بالنسبة لمتوابع ثم ننيي الفصل بعرض أنواع التوابع‬
‫ضمن لغة البرمجة ‪ . MATLAB‬ويتم تقديم أمثمة عديدة ضمن الفصل بيدف التعامل أكثر مع المغة وتوضيح‬
‫كافة األفكار السابقة‪.‬‬
‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب في ىذا الفصل عمى‪:‬‬
‫‪ ‬التعامل مع ‪ scripts‬و ‪ functions‬ضمن ‪.MATLAB‬‬
‫‪ ‬إنشا‪ ،‬حفط وتنفيذ ممف ‪ script‬أو تابع ‪ function‬ضمن ‪.MATLAB‬‬
‫‪ ‬التعامل مع أنواع التوابع ضمن لغة ‪ MATLAB‬ومعرفة أىمية كل منيا‪.‬‬

‫‪-103-‬‬
MATLAB for Numerical Computing-Ch3

MATLAB ‫لواحق الممفات ضمن‬


‫ وما يقابميا ضمن‬،MATLAB ‫نعرض في ىذه الفقرة لواحق الممفات التي يمكن تخرينيا باستخدام برمجية‬
‫ أو‬Simulink model ‫ إنشاء‬،‫ صفوف‬،scripts ،‫ حيث يمكن أن تكون ىذه الممفات عمى شكل توابع‬،‫البرمجية‬
. .... ‫الحصول عمى أشكال أو‬

‫ يوجد إضافةً لممواحق التالية عدد من المواحق لكن ليست ضمن اىتمامنا في ىذا المقرر‬:‫مالحظة‬

‫االستخدام‬ ‫الالحقة‬
MATLAB figure .fig

MATLAB code (function, script, or class) .m

MATLAB data (binary file for storing variables) .mat

project file used by various solutions (packaged .prj


app/toolbox projects, MATLAB Compiler/Coder projects,
Simulink projects)
Simulink Model .mdl

Simulink Protected Model .mdlp

Simulink Model .slx

Simulink Protected Model .slxp

-104-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫‪Scripts Vs Functions‬‬
‫حتى اآلن‪ ،‬وجدنا أنو يمكن استخدام بيئة ‪ MATLAB‬عوضًا عن اآللة الحاسبة‪ .‬إال ّأنو في الواقع فإن إمكانيات‬
‫العددية‪.‬‬
‫ىذه البرمجية ىائمة‪ ،‬وخاصةً في مجال الحسابات ّ‬
‫تم التعمم في الفصل السابق والفقرات السابقة كيفية إدخال التعميمات ‪ commands‬عن طريق ‪Command‬‬
‫‪ ،Window‬وىي ما تسمى ب ـ ‪ Line-command‬أو ‪ Line-statement‬ألنيا تدخل عمى شكل تعميمة سطر‬
‫ال‪،‬‬
‫وحيد‪ .‬يتيح ‪ MATLAB‬أيضًا لممستخدم كتابة مجموعة من التعميمات ضمن ممف‪ ،‬ومن ثم تنفيذ الممف كام ً‬
‫بشكل مشابو لكتابة التوابع ‪ Functions‬ضمن أي لغة برمجة‪.‬‬
‫مخصصة‬
‫ّ‬ ‫وجدنا في فقرة لواحق الممفات ضمن ‪ MATLAB‬وجود الحقة " ‪ ".m‬أو ما تسمى ب ـ ‪ M-files‬وىي‬
‫لنوعين من ممفات البرامج ضمن ىذه البيئة‪ ،‬وىما‪:‬‬
‫‪Script ‬‬
‫‪Function‬‬ ‫‪‬‬

‫‪ :Scripts‬ممفات ‪ script‬عبارة عن ممفات برامج بالحقة ‪ ، .m‬تعتبر أبسط أنواع البرامج ضمن ‪ MATLAB‬و‬
‫يمكن ضمن ىذه الممفات كتابة مجموعة من التعميمات المتعاقبة‪ ،‬والتي يرغب المبرمج بتنفيذىا سويةً‪ .‬ال تقبل‬
‫ممفات ‪ Scripts‬وجود دخل ‪ input‬ليا‪ ،‬وال تقوم بإعادة أي خرج ‪ ،output‬وعمى الرغم من ذلك فإن أي متحول‬
‫يجري تعريفو خالل التنفيذ يبقى ضمن ‪ workspace‬ويمكن االستفادة منو الحقاً في حسابات أخرى‪.‬كما أنيا‬
‫تتعامل مع المعطيات الموجودة مسبقاً ضمن ‪ Workspace‬ويمكن من خالليا إنشاء وتعريف معطيات جديدة‬
‫لمتعامل معيا‪ .‬إضاف ًة لما سبق يمكن الحصول عمى رسومات بيانية باستخدام التعميمات المخصصة لذلك مثل‬
‫‪.plot‬‬
‫لكل ممف ‪ Script‬اسم مضافاً لو الالحقة ‪ ،.m‬مثالً ‪ ،myclac.m‬يمكن االستفادة كثي اًر من ممفات ‪ Script‬في‬
‫إجراء عدد من الحسابات يتم استخدماتيا بشكل متكرر من المستخدم ‪ ،‬فيقوم المستخدم بكتابتيا ضمن ‪Script‬‬
‫وحفظيا بيدف إعادة االستعمال عند الحاجة‪.‬‬

‫التوابع ‪ : Functions‬ممفات التوابع عبارة عن ممفات ب رامج بالحقة ‪ .m‬أيضاً‪ ،‬يسمح التابع بوجود دخل واعادة‬
‫محمية ‪ local‬أي ال يمكن استخداميا ّإال ضمن التابع‬
‫المعرفة ضمن التابع عبارة عن متحوالت ّ‬
‫ّ‬ ‫خرج‪ ،‬المتحوالت‬
‫نفسو‪ ،‬ممفات التوابع عبارة عن مجموعة من التعميمات والحمقات والحاالت الشرطية المتربطة مع بعضيا بيدف‬
‫معين‪ ،‬ضمن ‪ MATLAB‬يتم تعريف التوابع ضمن ممفات منفصمة‪ ،‬ولكن يجب أن يكون اسم‬ ‫تحقيق غرض ّ‬
‫التابع مطابق ًا السم الممف التي يتم حفظه‪.‬‬
‫مالحظة‪ :‬ي مكن لمتوابع أن تقبل أكثر من دخل‪ ،‬وأن تعيد أكثر من خرج‪.‬‬

‫‪-105-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫مقارنة بين ‪ scripts‬و ‪:functions‬‬


‫ممفا ت الب رامج ضمن ‪ MATLAB‬ىي إما ‪ scripts‬تقوم ببساطة بتنفيذ مجموعة من التعميمات ال تقبل دخل وال‬
‫تعطي خرج أو ‪ functions‬تقبل بأن يكون ليا متحوالت دخل‪ ،‬وتعطي كنتيج ًة خرج‪ .‬كل من ‪ scripts‬و‬
‫‪ functions‬يحتويان عمى رماز برمجي مكتوب بمغة ‪ ، MATLAB‬كما أنيا كل منيما يجري تخزينو ضمن ممف‬
‫بالحقة ‪ ،.m‬إن تنفيذ ‪ scripts‬سيتم بنفس الطريقة دوماً أما تنفيذ التوابع وخرجيا فيعتمد عمى متحوالت الدخل‬
‫وفائدة لممستخدم‪.‬‬
‫ً‬ ‫التي يقوم المستخدم بإدخاليا مما يجعل التوابع أكثر عمومي ًة‬

‫كيف يتم إنشاء ‪ new script‬؟؟‬


‫في ىذه الفقرة سنتعرف أكثر عمى ممفات ‪ ،scripts‬رأينا أن ممفات ‪ Scripts‬تحتوي عمى عدد من السطور‬
‫المتعاقبة التي تحتوي عمى تعميمات ‪ MATLAB‬أو توابع منجزة في مكاتب ‪ MATLAB‬أو حتى توابع قام‬
‫المبرمج بتنجيزىا مسبقًا‪.‬‬
‫من أجل إنشاء ممفات ‪ .m‬يمكن استخدام محرر النصوص ‪ text editor‬الخاص ببرمجية ‪ MATLAB‬أو أي‬
‫محرر نصوص آخر مثل ‪ ،Notepad++‬سنعرض فيما يمي الطرق الممكنة إلنشاء ‪:new script‬‬
‫‪ ‬من خالل ‪.Command History‬‬
‫‪ ‬من خالل شريط ‪ Toolstrip‬ثم نافذة ‪.Home‬‬
‫‪ ‬عن طريق استخدام التابع ‪ edit‬ضمن ‪.Command Window‬‬

‫‪ .1‬من خالل ‪ : Command History‬بعد كتابة مجموعة من التعميمات ضمن ‪Command window‬‬
‫وتنفيذىا فإن نسخة من ىذه التعميمات يتم حفظيا في ‪ Command History‬يمكن تحديدىا في النافذة‬
‫السابقة والضغط بالزر اليميني واختيار ”‪.“Create Script‬‬
‫مثالً اكتب ضمن ‪ Command Window‬التعميمات التالية‬
‫;‪a =5; b =7‬‬
‫‪c=a+b‬‬
‫)‪d = c + sin(b‬‬
‫‪e =5* d‬‬
‫)‪f = exp(-d‬‬
‫اذىب إلى ‪ Command History‬ستجد نسخة من ىذه التعميمات‪ ،‬قم بتحديد التعميمات كما في الشكل‬

‫‪-106-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫اضغط الزر اليميني ستجد عدة خيارات كما في الشكل التالي‪ ،‬قم باختيار ‪.Create Script‬‬

‫عند إنشاء ‪ Script‬يتم فتح واجية جديدة تدعى ‪ ،Editor‬وىذه الواجية منفصمة عن الواجيات السابقة كما في‬
‫الشكل التالي‪:‬‬

‫‪-107-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫يمكن إعادة ىذه الواجية إلى الواجية الرئيسية عن طريق استخدام الزر الموضح في الشكل التالي‪:‬‬

‫يعطي ىذا الزر ‪ Show Editor Action‬عند الضغط عميو يظير عدة خيا رات قم باختيار ‪Dock Editor‬‬

‫عند اختيار الخيار السابق ستحصل عمى الشكل التالي‪.‬‬

‫‪ New Script‬قم‬ ‫‪ .2‬من خالل شريط ‪ Toolstrip‬ثم نافذة ‪ :Home‬ضمن ‪ Home‬ستجد زر‬
‫‪ new‬ثم اختر ‪ script‬أو قم باستخدام‬ ‫بالضغط عمى الزر السابق‪ ،‬أو قم بالضغط عمى الزر‬
‫‪.Ctrl+N‬‬

‫‪ .3‬عن طريق استخدام التابع ‪ edit‬ضمن ‪.Command Window‬‬


‫اكتب ضمن ‪ Command Window‬التعميمة التالية‬

‫‪-108-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫‪edit FirstScript‬‬

‫إن التعميمة السابقة ستقوم بإنشاء ‪ ،new script‬وذلك حسب االسم الذي تم كتابتو كما في الشكل التالي‪:‬‬

‫مالحظة‪ :‬في حالة عدم تحديد اسم لممف ‪ Script‬فإن ‪ MATLAB‬يولد ممفًا جديدًا باسم ‪.Untitled‬‬

‫التعرف عمى محرر النصوص ‪ Editor‬ضمن ‪MATLAB‬‬


‫رأينا عند إنشاء ‪ new script‬يتم فتح النافذة التالية والتي تدعى ‪:Editor‬‬

‫‪-109-‬‬
MATLAB for Numerical Computing-Ch3

‫ يبين الشكل التالي‬.MATLAB ‫ والذي يتم ضمنو كتابة الرمازات البرمجية في لغة‬Editor ‫ال عمى‬
ً ‫لنتعرف قمي‬
‫ حسب قيمة المتحول‬Tail ‫ أو‬Head ‫ وقد تم كتابة رماز برمجي بسيط يقوم بإظيار كممة‬editor ‫صورًة لل‬
.‫العشوائي‬
:‫الرماز البرمجي ىو‬

%coinToss.m
%a script that flips a fair coin and displays the output
y =rand(1,1);
if y < 0.5 % if a random number is less than 0.5 sau heads
disp('HEADS');
else % if greater than 0.5 say tails
disp('TAILS');
end

:‫يبين الشكل التالي األجزاء الموجودة ضمن محرر النصوص‬

-110-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫إن الشكل السابق كما ىو واضح يحتوي عمى عدة أجزاء سنقوم بشرحيا‪:‬‬
‫‪ .1‬إن العالمة السابقة تدل عمى عدم وجود خطأ ‪ error‬وذلك عند تمونيا بالمون األخضر‪ ،‬اما في حالة‬
‫وجود خطأ ‪ error‬أو تحذير ‪ warning‬يتم تغيير المون إلى برتقالي إضاف ًة لوضع إشارة عند مكان‬
‫الخطأ‪.‬‬
‫‪ .2‬إن إشارة * السابقة تدل عمى أن الممف لم يتم حفظو بعد‪.‬‬
‫‪ Help File .3‬وىي عبارة عن تعميقات تشرح اليدف من الممف بيدف تنظيم العمل عند تطوير برامج أو‬
‫خوارزميات معقدة‪ ،‬كما أنيا تفيد المستخدم في العودة إلى ممفاتو بسرعة كبيرة حيث يكتفي بقراءة ىذه‬
‫عادة في‬
‫ً‬ ‫المالحظات التي قام بكتابتيا حتى يستطيع التعرف عمى عمل الممف‪ ،‬ىذه التعميقات تأتي‬
‫السطور األولى المكتوبة ضمن ‪.script‬‬
‫‪ Comments .4‬أي التعميقات‪ ،‬حيث يقوم المستخدم بتوضيح اليدف من تعريف متحول ما أو شرح عمل‬
‫مجموعة من األوامر والتعميمات مجتمعة بيدف فيم الممف بسرعة كبيرة‪.‬‬
‫‪Comment thoroughly in the Script to avoid wasting time‬‬
‫‪ Possible Breakpoints .5‬وىي عبارة عن األماكن التي قام المستخدم بوضع ‪ Breakpoint‬فييا‪،‬‬
‫الغرض من نقطة التوقف ‪ breakpoint‬ىو نفسو في كافة لغات البرمجة وىو تحديد مواقع لمتوقف‬
‫ضمن برنامج ما بيدف اختبار وتصحيح ومعرفة قيم المتحوالت أو خرج العمميات الحسابية المتعاقبة‬
‫التي تتم ضمن البرنامج نفسو وخاصةً داخل حمقات ‪.for‬‬
‫‪ .6‬عدد أسطر الرماز المكتوب‪ ،‬يفيد ذلك عن حدوث خطأ في تحديد المكان بسرعة حيث أن ‪MATLAB‬‬
‫يعيد رسالة لممستخدم عن حدوث أي خطأ ويذكر بو السطر التي تم وقوع الخطأ ضمنو‪.‬‬
‫‪ Run Tools .7‬وىي أدوات متاحة من قبل محرر النصوص ‪ editor‬بعد تنفيذ الممف البرمجي‪ ،‬حيث‬
‫يضاف إلى التنفيذ خيارات مختمف ًة مثل تحديد زمن تنفيذ البرنامج المكتوب‪.‬‬

‫‪-111-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫‪ .8‬نقاط التوقف ‪ Breakpoints‬عند الضغط عمى األيقونة السابقة يمكن اختيار وضع نقطة توقف أو‬
‫إزالة نقاط توقف أو وضع نقاط توقف شرطية ىذه الناقط تستخدم بشكل كبير عند التعامل ممفات‬
‫‪ script‬أو تنجيز التوابع‪.‬‬
‫‪ Edit Tools .9‬يمكن عن ط ريق ىذه األزرار إضافة خيارات عديدة منيا إضافة تعميق أو تقسيم الممف‬
‫البرمجي إلى مقاطع ‪ section‬او ترتيب الرماز البرمجي المكتوب ضمن مستويات وىو ما يعرف ب‬
‫‪.Smart Indent‬‬

‫كيف يتم حفظ ممف ‪Script‬؟؟؟‬


‫قم بكتابة الرماز التالي ضمن ‪:Script‬‬
‫;‪NumOfStudents=1000‬‬
‫;‪TeachStaff=15‬‬
‫;‪NonTeachStaff=2‬‬
‫;‪Total=NumOfStudents+TeachStaff+NonTeachStaff‬‬
‫;)‪disp(Total‬‬
‫قم بحفظ الممف التالي‪ ،‬اضغط ‪ Ctrl+S‬ستظير النافذة التالية أمامك‬

‫‪ Save‬ضمن ‪Editor‬‬ ‫عمى زر‬ ‫مالحظة‪ :‬يمكن أيضاً حفظ الممف عن طريق عن طريق الضغط‬
‫الموجود ضمن ‪.Toolstrip‬‬

‫‪-112-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫قم بتغيير اسم الممف من ‪ Untitled7‬إلى ‪ prog‬واختر ‪.Save‬‬

‫كيف يتم تنفيذ ‪ Run‬ممف ‪Script‬؟؟؟‬


‫‪ ‬عن طريق كتابة اسم الممف ضمن ‪ Command Window‬ثم الضغط عمى ‪.Enter‬‬
‫ال اكتب ‪ prog‬ضمن ‪ Command Window‬ستالحظ تنفيذ الممف السابق وستظير النتيجة ضمن‬
‫مث ً‬
‫موضح في الشكل‬
‫ّ‬ ‫‪ Command Window‬كما ىو‬

‫‪ Run‬ضمن ‪ Editor‬الموجود ضمن ‪.Toolstrip‬‬ ‫‪ ‬عن طريق الضغط عمى زر‬

‫‪-113-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫الحظ أنو عند تنفيذ أي ‪ Script‬يتم تعريف المتحوالت الموجودة ضمنيا في ‪.Work Space‬‬

‫إضافة تعميقات إلى البرامج‪:‬‬


‫عند كتابة رماز برمجي باستخدام لغة ‪ ،MATLAB‬فإن إضافة التعميقات ‪ Comments‬تعتبر عادة برمجية جيدة‬
‫حيث تقوم ىذه التعميقات بوصف الرماز البرمجي المكتوب‪ ،‬مما يتيح لمشخص نفسو ولألشخاص اآلخرين فيم‬
‫الرماز المكتوب‪.‬‬
‫عمى غرار كافة الرمازات المكتوبة في ‪ ،MATLAB‬يمكن لممفات ‪ Script‬أن تحتوي عمى تعميقات ‪Comments‬‬
‫ويمكن أيضًا لمتوابع ان تحتوي عمييا‪ .‬يتم استخدام الرمز ‪ )percent symbol( %‬من أجل إضافة تعميقات‪ ،‬إن‬
‫جميع الكممات التي تتمو (تأبي بعد) إشارة ‪ %‬يتم التعامل معيا عمى انيا تعميقات أي ال يتم تنفيذىا حتى وان‬
‫احتوت عمى تعميمات معروفة لمغة ‪.MATLAB‬‬
‫‪ ‬يمكن لمتعميقات ان تكون بنفس السطر الذي ننفذ‪ /‬نستدعي بو التعميمة أو في سطر الحق بيدف‬
‫توضيح عمل التعميمات‪.‬‬
‫مثالً‪:‬‬
‫‪% Add up all the vector elements.‬‬
‫)‪y = sum(x‬‬ ‫‪% Use the sum function.‬‬

‫التعميقات مفيدة في حاالت تطوير برامج أو اختبارىا‪ ،‬حيث يمكن منع بعض التعميمات من التنفيذ عن‬ ‫‪‬‬
‫طريق جعميا كتعميق مثالً عند إجراء اختبار عمى جزء محدد من البرنامج‪ ،‬يمكن استخدام {‪ %‬و ‪}%‬‬
‫من أجل جعل كتمة كاممة من التعميمات عمى أنيا تعميق‪.‬‬
‫مثالً‪:‬‬

‫‪-114-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫;)‪a = magic(3‬‬
‫{‪%‬‬
‫)‪sum(a‬‬
‫)‪diag(a‬‬
‫))‪sum(diag(a‬‬
‫}‪%‬‬
‫)))‪sum(diag(fliplr(a‬‬

‫{‪ %‬و ‪ " }%‬الموثر ىوة يمي ممون بالمون األزرق ‪ ،‬مالحظة‪ :‬من أجل االستخدام‬ ‫إن المؤثر ‪" Operator‬‬
‫الصحيح لممؤثر السابق يجب أن يوضع {‪ %‬في السطر السابق لمكتمة الم راد جعميا كتعميق و أن يوضع }‪ %‬في‬
‫السطر الالحق لمكتمة‪ ،‬ويجب أال يحتوي السطر الذي يقع فيو ىذا المؤثر عمى أي عبارة‪.‬‬

‫‪ ‬من أجل إضاف ة تعميق لتعميمات تمتد عمى عدة سطور وتحتوي عمى المؤثر ( ‪ ) ...‬يمكن استخدام‬
‫المؤثر‬
‫( ‪ ) ...‬نفسو عوضًا عن استخدام ‪%‬‬
‫ال‪:‬‬
‫مث ً‬
‫‪header = ['Last Name, ',‬‬ ‫‪...‬‬
‫‪'First Name, ',‬‬ ‫‪...‬‬
‫‪... 'Middle Initial, ', ...‬‬
‫]'‪'Title‬‬

‫ضمن ‪ Editor‬يوجد عدد من الخيارات المفيدة إلضافة تعميقات في الجزء الموضح بالشكل‬

‫‪-115-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫تنفيذ مقاطع من الرمازات (التقسيم إلى خاليا)‬


‫عادة أي رماز برمجي مكتوب بمغة ‪ MATLAB‬أو أي ممف يحتوي عمى تعميمات من عدد كبير من‬ ‫ً‬ ‫يتألف‬
‫محددة‬
‫ال إلى تنفيذ مجموعة ّ‬
‫التعميمات‪ ،‬وغالبًا ما ييتم المبرمج بجزء من الرماز في لحظة ما من عممو ويحتاج مث ً‬
‫من التعميمات دون الحاجة إلى تنفيذ باقي التعميمات لما قد يؤدي من مشاكل أو لما يتطمب من وقت عند تنفيذ‬
‫البرنا مج ككل‪ ،‬كذكل عند شرح الممفات أو الرمازات التي قمت بتنفيذىا لشخص ما ستقوم بالشرح عمى شكل كتل‬
‫محددة لذلك تعتبر عادة تجزئة الرماز البرمجي إلى عدة أقسام من أفضل العادات البرمجية‬
‫كل منيا لو وظيفة ّ‬
‫وخاصةً عند استخدام لغة ‪.MATLAB‬‬
‫من أجل تسييل عممية تجزئة الرماز البرمجي إلى أقسام أو ما يعرف ضمن ‪ MATLAB‬بخاليا ( ‪code‬‬
‫‪ )sections or code cells‬يحتوي ‪ MATLAB‬عمى محارف خاصة تتيح لك تنفيذ مجموعة من التعميمات‬
‫ضمن ممف ‪ script‬ما‪ ،‬ىذه المحارف ىي (‪.)%%‬‬
‫عند تجزئة الرماز البرمجي إلى عدة أج زاء باستخدام ‪ %%‬يصبح بإمكاننا تنفيذ الخمية بشكل كامل عن طريق‬
‫الضغط ضمن الخمية عندىا سنالحظ اختالف لون الخمفية من األبيض إلى األصفر‪ ،‬ونضغط عمى الزر اليميني‬
‫ونختار ‪ Evaluate Current Section‬أو نضغط ‪.Ctrl + Enter‬‬
‫في الشكل التالي نالحظ أنو في الجزء األول قمنا بتعريف متحوالت عامة ستفيدنا في باقي أجزاء العمل لذلك‬
‫نضعيا ضمن خمية وعندما نريد تعريف فقط المتحوالت نقوم بتنفيذ التعميمات ضمن ىذه الخمية ثم قمنا بتجزئة‬
‫محددة‪.‬‬
‫باقي الرماز إلى خاليا كل منيا تقوم بوظيفة ّ‬

‫‪-116-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫كيف يتم إنشاء ‪new function‬؟؟‬


‫سنعرض في ىذه الفقرة تفاصيل إضافية عن التوابع ضمن ‪ ،MATLAB‬لكن قبل الخوض في التفاصيل البد لنا‬
‫من توضيح الشكل العام لتعريف تابع وىو‬
‫‪Syntax of a function statement is:‬‬
‫)‪Function [out1,out2,..., outN] = myfun (in1,in2,in3,..., inN‬‬
‫أي يجب التصريح عن اسم التابع و دخمو وخرجو‪.‬‬
‫يصرح‬
‫‪ ‬إن التعريف السابق )‪ّ Function [out1,out2,…,outN] = myfun (in1,in2,in3,…,imN‬‬
‫عن تابع باسم ‪ myfun‬والذي يقبل ‪ in1,in2,in3,…,imN‬كمتحوالت دخل لو‪ ،‬ويعطي خرج‬
‫‪ ، out1,out2,..., outN‬إن التعريف السابق يجب وضعو في أول الممف عند تعريف تابع‪ ،‬أما لمتعبير‬
‫عن نياية التابع يمكن استخدام ”‪ “end‬في نياية ممف التابع‪.‬‬
‫‪ ‬الالحقة التي يتم حفظ الممف فييا ىي ‪ ،.m‬من أجل أن يكون اسم التابع صحيحًا ‪ valid‬يجب أن يبدأ‬
‫بحروف أبجدية‪ ،‬يمكن أن يحتوي اسم التابع (وليس أول حرف) أحرف وأرقام و ”_“ ‪.underscores‬‬
‫يمكن لمتوابع أن تقبل أكثر من دخل يتم التصريح عنو كمايمي‪:‬‬ ‫‪‬‬

‫‪-117-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫‪ ‬يمكن لمتوابع أن تعيد أكثر من خرج يتم التصريح عنو كمايمي‪:‬‬

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

‫‪ ‬يكون اسم التابع مطابقاً السم الممف التي يتم حفظو‪.‬‬


‫بالنسبة لممتحوالت التي يتم تعريفيا داخل التابع و لكن ال يتم إعادتيا من قبل التابع (أي أنيا ليست‬ ‫‪‬‬
‫خرج لمتابع) تختفي عندما يتوقف تشغيل البرنامج‪ ،‬عمى الرغم من أنو يتم إنشاؤىا واسناد القيم ليا‪ ،‬ىذا‬
‫األمر يرجع إلى وجود فضاء عمل ‪ Workspace‬يختمف عن ‪ Workspace‬الخاص بالبرنامج‪ ،‬ضمن‬
‫ىذا الفضاء يتم تعريف المتحوالت الخاصة بالتوابع دون السماح لموصول إلييا إال في حالة وضو نقاط‬
‫عادة ‪Base‬‬
‫ً‬ ‫توقف ‪ ،Break points‬ونذكر بأن فضاء العمل ‪ Workspace‬الخاص بالبرنامج يسمى‬
‫‪Workspace‬‬
‫كما ذكرنا في الفق رات السابقة حول التعميقات يمكن إضافة تعميقات لمفالت التوابع أيضًا بشكل مشابة‬ ‫‪‬‬
‫إلضافتيا لممفات ‪.Scripts‬‬

‫‪ new‬ثم‬ ‫من أجل إنشاء تابع جديد‪ ،‬من خالل شريط ‪ Toolstrip‬ثم نافذة ‪ Home‬قم بالضغط عمى الزر‬
‫اختر ‪function‬‬

‫عند إنشاء تابع جديد ستصبح الواجية األساسية ل ‪ MATLAB‬عمى الشكل التالي‪.‬‬

‫‪-118-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫نالحظ إنشاء ممف جديد ولكن ال يكون فارغاً ‪ blank‬كما الحال عند إنشاء ‪ script‬جديدة‪ ،‬إنما يحتوي عمى‬
‫الترويسة األساسية التي تحتوي عمى المعمومات األساسية لمتصريح عن تابع‪.‬‬
‫مالحظة‪ :‬يتم حفظ التابع بنفس الطريقة التي يتم حفظ ممفات ‪ .Script‬كما يجب التذكير بأن يكون اسم التابع‬
‫مطابقاً السم الممف التي يتم حفظه‪.‬‬

‫أمثمة عن إنشاء توابع‪:‬‬


‫مثال ‪:1‬‬
‫قم بتعريف تابع في ممف يدعى ‪ ،average‬سيتم حفظو عمى الشكل ‪ ،average.m‬يقوم ىذا التابع بأخذ شعاع‬
‫‪ vector‬كدخل لو‪ ،‬ثم يقوم بحساب متوسط القيم الموجودة ضمن الشعاع‪ ،‬ويعيد كخرج لو قيمة وحيدة ىي قيمة‬
‫المتوسط‪.‬‬
‫التابع‪:‬‬
‫)‪function y = average(x‬‬
‫)‪if ~isvector(x‬‬
‫)'‪error('Input must be a vector‬‬
‫‪end‬‬
‫;)‪y = sum(x)/length(x‬‬
‫‪end‬‬
‫ثم قم بحفظو باسم ‪ ،average‬صورة لمتابع ضمن بيئة ‪.MATLAB‬‬

‫‪-119-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫قم ضمن ‪ Command window‬بإنشاء شعاع يحتوي عمى القيم من ‪ 1‬إلى ‪ 99‬واسمو ‪ z‬ثم قم استدعاء التابع‬
‫كما يمي‪ ،‬ستحصل عمى النتيجة التي تعبر عن المتوسط وىي ‪.50‬‬

‫مالحظة‪ :‬يمكن إنشاء ‪ script‬وتعريف الشعاع ضمنيا واستدعاء التابع‪.‬‬


‫مثال ‪:2‬‬
‫قم بتعريف تابع في ممف يدعى ‪ ،stat‬يقوم بإعادة المتوسط واالنحرف المعياري لشعاع يمثل الدخل‪.‬‬
‫التابع‪:‬‬
‫)‪function [m,s] = stat(x‬‬
‫;)‪n = length(x‬‬
‫;‪m = sum(x)/n‬‬
‫;))‪s = sqrt(sum((x-m).^2/n‬‬
‫‪end‬‬
‫ثم قم بحفظو باسم ‪ ،stat‬صورة لمتابع ضمن بيئة ‪.MATLAB‬‬

‫‪-120-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫عرف‬
‫قم بإنشاء ممف ‪ script‬جديد‪ ،‬الغرض منو ىو إجراء اختبار لمتابع السابق‪ ،‬قم بتسمية الممف ب ـ ‪ ،test‬ثم ّ‬
‫قيم شعاع الدخل‪ ،‬وقم باستدعاء التابع وفقًا لمرماز التالي‪:‬‬
‫;]‪in_vec = [12.7, 45.4, 98.9, 26.6, 53.1‬‬
‫)‪[av_vec,std_vec] = stat(in_vec‬‬
‫صورة ل ‪ script‬ضمن بيئة ‪.MATLAB‬‬

‫‪“Evaluate‬‬ ‫عند تنفيذ التعميمات السابقة‪ ،‬عن طريق تحديدىا ثم الضغط عمى الزر اليميني واختيار‬
‫”‪ Selection‬أو الضغط عمى ‪ ،F9‬نحصل ضمن ‪ Command Window‬عمى الخرج التالي‪ ،‬أو يمكن قراءة‬
‫قيمة كل متحول ضمن ‪.work space‬‬

‫‪-121-‬‬
MATLAB for Numerical Computing-Ch3

:3 ‫مثال‬
‫ يأخذ خم سة متحوالت دخل عبارة عن أرقام ثم يقوم المقارنة قيما بينيا‬،mymax ‫قم بتعريف تابع في ممف يدعى‬
‫ حيث أن الخرج ىو القيمة األكبر ضمن عناصر الدخل‬،‫من أجل أيجاد العدد األكير فيما بينيا‬
:‫التابع‬
function max = mymax(n1, n2, n3, n4, n5)
%Thisfunction calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
end
.MATLAB ‫ صورة لمتابع ضمن بيئة‬،mymax ‫ثم قم بحفظو باسم‬

-122-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫يمكن إضافة التعميقات ضمن نص التابع وذلك لتوضيح عمل التابع‪ ،‬يجري ذلك عن طريق استخدام ”‪ ،“%‬إن‬
‫إضافة التعميقات أمر ضروري عند تنفيذ أي عمل حيث تفيد في توضيح معنى كل متحول‪ ،‬توضيح اليدف من‬
‫كل تعميمة أو مجموعة من التعميمات‪ ،‬كما ّأنو عند العودة إلى التابع يكفي ق ارءة التعميقات الموجودة من أجل‬
‫معرفة عمل‪.‬‬
‫ضمن التابع السابق تم كتابة التعميقات التالية‪:‬‬
‫‪%Thisfunction calculates the maximum of the‬‬
‫‪% five numbers given as input‬‬
‫إن التعميقات التي تأتي مباشرًة بعد التصريح عن التابع‪ ،‬تؤمن مساعدة حول التابع عند االستفسار عن عمل‬
‫التابع‪ ،‬اكتب ضمن ‪ Command Window‬التعميمة التالية‪:‬‬
‫‪help mymax‬‬
‫سيكون خرج ىذه التعميمة‬

‫ضمن ‪ Script‬التي تم إنشاؤىا مسبقاً‪ ،‬قم باستدعاء التابع عمى الشكل التالي‪:‬‬
‫)‪mymax(34,78,89,23,11‬‬
‫سيكون الخرج عمى الشكل التالي‪:‬‬

‫‪-123-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫=‪ans‬‬
‫‪89‬‬

‫تحويل ‪ Script‬إلى ‪:Function‬‬


‫قم بإنشاء ممف ‪ Script‬جديد ثم قم بكتابة التعميمات التالية‪ ،‬إضاف ًة لذلك قم بحفظ الممف وتسميتو باسم‬
‫‪ .triarea‬اليدف من ىذه التعميمات ىو حساب مساحة مثمث‬
‫;‪b = 5‬‬
‫;‪h = 3‬‬
‫)‪a = 0.5*(b.* h‬‬
‫يمكن ضمن ‪ Command Window‬استدعاء التابع عن طريق كتابة اسمو ثم اضغط ‪ ،Enter‬أي قم بكتابة‬
‫‪triarea‬‬
‫سيكون الخرج عمى الشكل‪:‬‬

‫ذكرنا أن التوابع مفيدة أكثر من ممفات ‪ Script‬يكونيا أكثر عمومية‪ ،‬لنوضح الفكرة السابقة من خالل المثال‬
‫التالي‪:‬‬
‫إن ممف ‪ triarea‬التي تم كتابتو والذي يفيد في حساب مساحة مثمث يتم تطبيقو عمى القيم السابقة فقط‪ ،‬اما في‬
‫حال ح ساب مساحة مثمث جديد باستخدام ‪ script‬السابقة‪ ،‬يمكن إعادة إسناد القيم لممتحولين ‪ b‬و ‪ h‬المعبران عن‬
‫طول القاعدة واالرتفاع عمى الترتيب‪ ،‬ومن ثم تنفيذ ممف ‪ script‬مرة أخرى وىكذا‪ ،‬وفي كل مرة يتم تخزين‬
‫النتيجة في المتحول ‪ a‬ضمن ‪.workspace‬‬
‫يمكن تحويل ‪ script‬السابقة إلى تابع أكثر عمومية ومرونةً بحيث ال نحتاج كل مرة إلى تغيير قيم المتحوالت‬
‫ضمن ‪ script‬بشكل يدوي‪ ،‬بل يكفي أن نمرر ىذه المتحوالت كدخل لمتابع ومن ثم سيقوم بحساب المساحة‪.‬‬
‫رماز التابع‬

‫‪-124-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫)‪function a = mytriarea(b,h‬‬
‫;)‪a = 0.5*(b.* h‬‬
‫بعد حفظ التابع‪ ،‬يمكن استخدام التابع من أجل عدة قيم لطول القاعدة واالرتفاع ضمن ‪Command Window‬‬
‫دون الحاجة لمتعديل عمى ممف ‪ ،script‬عمى سبيل المثال‪:‬‬
‫)‪a1 = mytriarea(1,5‬‬
‫)‪a2 = mytriarea(2,10‬‬
‫)‪a3 = mytriarea(3,6‬‬
‫سيكون الخرج عمى الشكل التالي‪:‬‬
‫= ‪a1‬‬
‫‪2.5000‬‬
‫= ‪a2‬‬
‫‪10‬‬
‫= ‪a3‬‬
‫‪9‬‬

‫أنواع التوابع ‪:Function Types‬‬


‫يوجد ضمن ‪ MATLAB‬عدد كبير من أنواع التوابع مثل‬
‫‪ Local function, Nested function, Private function and Anonymous function‬سنتطرق‬
‫لمحديث عنيا ويمكن الق راءة عنيا ضمن ‪ help‬بيدف زيادة المعرفة‪.‬‬
‫‪ Anonymous Functions .1‬التوابع مجيولة االسم‪:‬‬
‫‪ ‬يشابو ‪ anonymous function‬في عممو أي تابع ‪ inline function‬في لغات البرمجة التقميدية‪.‬‬
‫يتم تعريف مثل ىذا النوع من التوابع باستخدام تعميمة وحيدة في لغة ‪ ،MATLAB‬ويتألف من تعبير‬ ‫‪‬‬
‫رياضي ‪ mathematical expression‬وحيد و عدد اختياري من متحوالت الدخل والخرج‪.‬‬
‫‪ ‬يمكن تعريف تابع من نمط ‪ anonymous‬ضمن ‪ Command Window‬أو ضمن ‪ Script‬أو ضمن‬
‫تابع آخر‪.‬‬
‫من أجل تعريف تابع من نمط ‪ anonymous‬يجب اتباع الشكل التالي لمتعريف‬
‫‪The syntax is‬‬

‫مثال‪:‬‬

‫‪-125-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫في ىذا المثال سنقوم بكتابة تابع من نمط ‪ anonymous‬يدعى ‪ power‬ضمن ‪ script‬باسم‬
‫‪ ،AnonymousFunctionTest‬والذي يأخذ متحولين كدخل لو‪ ،‬ويقوم باعتبار العدد األول كأساس لمقوة ويرفع‬
‫األساس إلى قوة العدد الثاني‪ ،‬ثم قم باختبار التابع من أجل عدة حاالت وىي‪:‬‬
‫رفع العدد ‪ 5‬إلى القوة ‪ 2‬أي إيجاد تربيع القيمة‪ ،‬رفع العدد ‪ 36‬إلى القوة ‪ 0.5‬أي إيجاد جذر القيمة‪ ،‬رفع العدد‬
‫‪ 10‬إلى القوة ‪ ،-2‬رفع العدد ‪ 2.5‬إلى القوة ‪. 1.5‬‬
‫الحل‪:‬‬
‫;‪power= @(x,n) x.^n‬‬
‫)‪res1 = power (5,2‬‬
‫)‪res2 = power (36,0.5‬‬
‫)‪res3 = power (10,-2‬‬
‫)‪res4 = power (2.5,1.5‬‬
‫يوضح الشكل ممف ‪ script‬بعد تعريف التابع من نمط ‪ Anonymous‬و إضافةً لألمثمة السابقة‬

‫الخرج‬

‫‪-126-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫مالحظة‪ :‬يعتبر ىذا النمط من التوابع ىو الوحيد القادر عمى إنشاء توابع بسيطة دون الحاجة إلى إنشاء‬ ‫‪‬‬
‫ممفات خاصة ليم‪ ،‬وىذه الخاصية مفيدة حيث أن كثرة الممفات أحيانًا قد تتسبب ببعض المشاكل مثل‬
‫ال‪ ،‬أو حذف أحدىا مما يعطل عمل خوارزمية بأكمميا !!!‬
‫ضياعيا مث ً‬
‫مثال‪:‬‬
‫سنقوم بإنشاء تابع يقوم بحساب العالقة التالية‪:‬‬

‫ولنختر قيم األمثال كالتالي‪:‬‬


‫‪a=1.3, b=0.2, c=30.‬‬
‫سنوضح في ىذا المثال أن التابع المعرف من النمط ‪ Anonymous‬ال يقوم فقط بحفظ التعبير ‪expression‬‬
‫المراد حسابو إنما يقوم أيضاً بحفظ المتحوالت التي يحتاج ليا التعبير من أجل إيجاد القيمة الحسابية‪.‬‬
‫الحل‪:‬‬
‫أوال قم بتعريف المتحوالت التالية‪ ،‬إضاف ًة لمتابع من نمط ‪ Anonymous‬المطموب‪.‬‬
‫;‪a = 1.3‬‬
‫;‪b = .2‬‬
‫;‪c = 40‬‬
‫;‪parabola = @(x) a*x.^2 + b*x + c‬‬

‫‪-127-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫ثم قم بتحديد التعميمات السابقة واضغط الزر اليميني واختار ‪ evaluate selection‬أو اضغط ‪F9‬‬
‫ثانياً قم بسمح المتحوالت ‪ a , b , c‬عن طريق التعميمة ‪ clear‬ثم استدعي التابع من أجل القيمة ‪ x = 1‬وقم‬
‫بإسنادىا لممتحول ‪.y‬‬
‫‪clear a b c‬‬
‫;‪x = 1‬‬
‫)‪y = parabola (x‬‬

‫الخرج‬

‫‪-128-‬‬
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫‪ Local Functions .2‬التوابع المحمية‪:‬‬


‫أي نمط لمتوابع باستثناء نمط ‪ anonymous‬يجب تعريفو ضمن ممف منفصل‪،‬‬ ‫‪ ‬ضمن ‪ّ MATLAB‬‬
‫حيث يحتوي كل ممف خاص بالتوابع (بالحقة ‪ ).m‬عمى تابع رئيسي ‪ primary function‬أو ‪main‬‬
‫‪ function‬يتم برمجتو أوالً ضمن الممف ومن ثم يمكن أن يحتوى عمى أي عدد من التوابع الثانوية‪/‬‬
‫‪primary‬‬ ‫الفرعية ‪، sub-function‬وىي اختيارية أي ليس من الضروري وجودىا عمى عكس‬
‫‪ ، function‬حيث يتم تعريف ىذه التوابع الثانوية االختيارية بعد تعريف التابع الرئيسي ويتم استخداميا‬
‫من قبمو‪ .‬تفيد مثل ىذه التوابع في تقسيم البرنامج إلى ميمات ‪ tasks‬أصغر مما يسرع من زمن التنفيذ ‪،‬‬
‫ويسيل فيم البرنامج‪.‬‬
‫ال يمكن استدعاء التوابع الثانوية عن طريق ‪ command window‬او التوابع االخرى خارج الممف‬ ‫‪‬‬
‫الموجودة ضمنو ىذه التوابع الثانوية‪ ،‬عمى عكس التوابع الرئيسية حيث يمكن استدعائيا عن طريق‬
‫‪ command window‬او التوابع االخرى خارج الممف الموجودة ضمنو‪.‬‬
‫‪ Local function‬التوابع المحمية ىي عبارة عن توابع متاحة ألي توابع أخرى موجودة معيا ضمن نفس‬ ‫‪‬‬
‫عادة‪.‬‬
‫الممف‪ ،‬ترد ىذه التوابع بعد التابع الرئيسي ً‬
‫مالحظة‪ :‬جميع التوابع وبما فييم التوابع المحمية لدييم فضاء العمل ‪ workspace‬الخاص بيم وىو‬ ‫‪‬‬
‫عادة ‪.base workspace‬‬
‫منفصل عن فضاء العمل األساسي في البرمجية والذي يسمى ً‬

‫مثال‪:‬‬
‫لنقم بكتابة تابع يسمى ‪ quadratic‬والذي يقوم بحساب جذور معادلة تربيعية‪ ،‬يجب أن يمرر لمتابع ثالث‬
‫متحوالت دخل تعبر عن األمثال لمحد التربيعي‪ ،‬والحد الخطي‪ ،‬والحد الثابت‪ .‬يعيد التابع متحولي خرج يعبران‬
‫عن الجذور‪.‬‬
‫يحتوي ممف التابع ‪ quadratic.m‬عمى تابع رئيسي ىو ‪ quadratic‬وتابع محمي ىو ‪ disc‬والذي يقوم بحساب‬
‫المميز دلتا‪ .‬قم بإنشاء ممف تابع جديد وتسميتو باسم ‪ quadratic‬واكتب الرماز التالي‪:‬‬
‫ّ‬
‫)‪function [x1,x2] = quadratic (a,b,c‬‬
‫‪%thisfunction returns the roots of‬‬

‫‪-129-‬‬
MATLAB for Numerical Computing-Ch3

% a quadratic equation.
%It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
%It returns the roots
d = disc (a,b,c);
x1 =(-b + d)/(2*a);
x2 =(-b - d)/(2*a);
end%end of quadratic
function dis = disc (a,b,c)
%function calculates the discriminant

dis = sqrt(b^2-4*a*c);
end%end of sub-function

:‫ مثالً اكتب‬command Window ‫يمكن استدعاء التابع من خالل‬


[ y1 , y2] = quadratic(1,4,3)
:‫فنحصل عمى الخرج التالي‬

-130-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫مثال‪:‬‬
‫التابع التالي‬
‫)‪function b = myfunction(a‬‬
‫;)‪b = squareMe(a) + doubleMe(a‬‬
‫‪end‬‬
‫)‪function y = squareMe(x‬‬
‫;‪y = x.^2‬‬
‫‪end‬‬

‫)‪function y = doubleMe(x‬‬

‫;‪y = x.*2‬‬
‫‪end‬‬

‫محميين ىما‬
‫يقوم بحساب مجموع قيمة مربع الدخل وحاصل ضرب الدخل ب ـ ‪ .2‬نالحظ ضمن التابع وجةد تابعين ّ‬
‫‪ squareMe‬و ‪.doubleMe‬‬
‫‪ Nested Functions .3‬التوابع المتداخمة‪:‬‬
‫يمكن تعريف توابع داخل ضمن جسم تابع آخر‪ ،‬ىذه التوابع تعرف باسم التوابع المتداخمة ‪،nested functions‬‬
‫يتم تعريف التابع من نمط ‪ nested‬تماماً كما يتم تعريف أي تابع آخر‪ .‬واالختالف الرئيسي بين التوابع المتداخمة‬
‫معرفة في التابع الرئيسي دون أن يتم‬
‫والتوابع المحمية ىو ان التوابع المحمية يمكن أن تستخدم أو تعدل متحوالت ّ‬
‫تمرير ىذه المتحوالت صراحةً لمتابع المتداخل كمتحول دخل‪.‬‬
‫يتبع تابع من نمط ‪ nested‬النحو ‪ syntax‬التالي‪:‬‬
‫)‪function x = A(p1, p2‬‬

‫‪...‬‬

‫‪-131-‬‬
MATLAB for Numerical Computing-Ch3

B(p2)
function y = B(p3)

...

end

...

end

:‫مثال‬
nested ‫ عبارة عن تابع من نمط‬disc ‫ ولكن في ىذه المرة سنجعل التابع‬quadratic ‫سنعيد كتابة التابع السابق‬
.local ‫وليس تابع من نمط‬
function[x1,x2]= quadratic2(a,b,c)

function disc % nested function

d = sqrt(b^2-4*a*c);
end%end of function disc

disc;
x1 =(-b + d)/(2*a);
x2 =(-b - d)/(2*a);
end%end of function quadratic2

:‫ مثالً اكتب‬command Window ‫يمكن استدعاء التابع من خالل‬


[ y3 , y4] = quadratic2(1,4,3)

-132-
‫‪MATLAB for Numerical Computing-Ch3‬‬

‫فنحصل عمى الخرج التالي‪:‬‬

‫لن نتطرق لمحديث عن ‪ private function‬حيث ال نحتاج ليا ضمن مقررنا ىذا‪ ،‬لممزيد من المعمومات حوليا‬
‫استخدم ‪ help‬ضمن ‪.MATLAB‬‬
‫مالحظة‪ :‬يوجد عدد من األمور التي البد من االطالع عمييا تجدونيا ضمن ‪ MATLAB HELP‬وفق المسار‬
‫‪MATLAB  Programming Scripts and Functions  Debugging  Examples and‬‬
‫‪How To  Ways to Degug MATLAB Files … …. Error Brealpoints‬‬
‫يفضل قراءة كافة الفق رات حيث عددىا ‪ 11‬فقرة ضمن صفحة وحيدة تفتح عند الضغط عمى أي من العناوين‪.‬‬

‫‪https://www.youtube.com/watch?v=pRsGM7H91VY‬‬

‫‪-133-‬‬
MATLAB for Numerical Computing-Ch4

‫ (عبارات التحكم‬- 2- MATLAB® ‫ البرمجة في‬:‫الفصل الرابع‬


)‫ السالسل المحرفية‬،‫ البيانيات واإلظهار‬،‫بالتدفق‬
Programming in MATLAB® -2- (Control Flow
Statements, Graphics and Visualization, Strings)

-1-

-134-
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫عنوان الموضوع‪:‬‬
‫البرمجة في ®‪( -2- MATLAB‬عبارات التحكـ بالتدفؽ‪ ،‬البيانيات واإلظيار‪ ،‬السالسؿ المحرفية)‬
‫‪Programming in‬‬ ‫®‪MATLAB‬‬ ‫‪-2-‬‬ ‫‪(Control Flow Statements,‬‬ ‫‪Graphics and‬‬
‫)‪Visualization, Strings‬‬

‫الكممات المفتاحية‪:‬‬
‫‪Conditional‬‬ ‫‪ ،MATLAB‬تعابير التحكـ بالتدفؽ ‪ ،Control Flow Statements‬العبارات الشرطية‬
‫‪switch‬‬ ‫‪ ،Statements‬عبارة ‪ ،if statement if‬عبارات ‪ if‬متداخمة ‪ ، nested if‬عبارة ‪switch‬‬
‫‪ ،statement‬الحمقات ‪ ،Loops‬حمقة ‪ ،while loop while‬حمقة ‪ ،for loop for‬السالسؿ المحرفية ‪Strings‬‬
‫‪ ،‬المحارؼ ‪ ،Chars‬دمج ‪ ،concatenation‬البيانيات ‪ ،Graphics‬رسـ ‪.plot‬‬
‫ممخص‪:‬‬
‫فعالة‬
‫نعرض في ىذا الفصؿ عدد مف المفاىيـ البرمجية اليامة التي تساعد المستخدـ في بناء رمازات وبرامج ّ‬
‫ومفيدة‪ .‬سنتعرؼ في الجزء األوؿ مف ىذا الفصؿ عمى عبا رات التحكـ بالتدفؽ وخصوصًا العبارات الشرطية‪ ،‬مثؿ‬
‫عبارة ‪ if‬و ‪ ،switch‬التي تساعد المستخدـ عمى اتخاذ القرار مثالً وفقاً لقيـ الدخؿ أو استثناء الحاالت الشاذة‪ ،‬ثـ‬
‫ننتقؿ إلى الحمقات والتي تعتبر جزءًا أساسيًا ضمف ‪ MATLAB‬وخاص ًة الشرطية منيا‪.‬‬
‫نقدـ في الجزء الثاني مف الفصؿ خيارات إضافية لمتعامؿ مع السالسؿ المحرفية‪ ،‬وأخي اًر ننتقؿ إلى موضوع ىاـ‬
‫جداً وىو إظيار المتحوالت‪ ،‬التوابع والنتائج فبعد القياـ بأية عممية حسابية أو تطبيؽ أية خوارزمية البد لنا مف‬
‫رسـ النتائج إما بيدؼ فيـ الظاىرة‪ ،‬أو مناقشة النتائج أو عرضيا بشكؿ واضح‪ .‬سيتـ التعرؼ عمى الخيارات‬
‫والتوابع العديدة المتوفرة ضمف برمجية ‪ MATLAB‬التي تساعد في عممية اإلظيار‪.‬‬

‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب يف هذا الفصل على‪:‬‬
‫‪ ‬استخداـ تعابير التحكـ بالتدفؽ‪.‬‬
‫‪ ‬إ تقاف العبارات الشرطية و الحمقات ضمف برمجية ‪.MATLAB‬‬
‫‪ ‬التعامؿ مع السالسؿ المحرفية‪ ،‬واتقاف تطبيؽ العمميات عمييا‪.‬‬
‫‪ ‬استخداـ توابع ‪ MATLAB‬في عممية اإلظيار‪.‬‬
‫‪ ‬استخداـ وا تقاف المعارؼ ضمف ىذا الفصؿ وماكمممتيا مع الفصوؿ السابقة لتحميؿ وتصميـ رمازات‬
‫وبرامج متقدمة تعطي حالً لمشكمة معينة‪.‬‬

‫‪-135-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫تعابير التحكم بالتدفق ‪Control Flow Statements‬‬


‫وجدنا في الفصوؿ السابقة أف التعميمات ‪ Commands‬والتعابير ‪ Expressions‬ضمف ‪ MATLAB‬يجري‬
‫تنفيذىا بشكؿ تسمسمي‪ ،‬ولكف الحاؿ ال يكوف دائمًا كما سبؽ‪ ،‬ففي كثير مف األحياف واعتمادًا عمى معطيات‬
‫محددة مف التعميمات وذلؾ باستخداـ العبا رات‬‫الدخؿ‪ ،‬أو خرج مرحمة ما مف خوارزمية‪ ،‬يتـ تنفيذ مجموعة ّ‬
‫الشرطية ‪ Conditional Statements‬أو غيرىا مف عبا رات التحكـ بالتدفؽ‪.‬‬
‫يشتمؿ ‪ MATLAB‬عمى عدد كبير مف التعابير المستخدمة في التحكـ بتدفؽ المعطيات كالتعابير الشرطية‪،‬‬
‫إضاف ًة لماسبؽ يحتوي ‪ MATLAB‬عمى عبارت تسمح بتك رار مجموعة مف التعميمات وىو ما يعرؼ بالحمقات‬
‫‪.Loop‬‬
‫نعرض فيما يمي العبا رات (أو التعابير) الخاصة بػ ػ ‪ Control Flow‬ضمف ‪.MATLAB‬‬
‫الوصؼ ‪Description‬‬ ‫التعميمة ‪Command‬‬
‫تنفيذ مجموعة مف العبارات إ از كاف الشرط‬ ‫‪if/elseif/else‬‬
‫محقؽ (صحيح ‪.)true‬‬
‫محدد مف‬
‫تنفيذ مجموعة مف العبا رات عدد ّ‬ ‫‪for‬‬
‫المرات‪.‬‬
‫التبديؿ بيف عدة حاالت ‪ cases‬اعتمادًا‬ ‫‪switch/case/otherwise‬‬
‫عمى تعبير ما‪.‬‬
‫تنفيذ مجموعة مف العبا رات وتمتقط‬ ‫‪try/catch‬‬
‫األخطاء الناتجة‪.‬‬
‫تنفيذ مجموعة مف العبارات بشكؿ متكرر‬ ‫‪while‬‬
‫طالما أف الشرط محقؽ (صحيح ‪.)true‬‬
‫إنياء تنفيذ حمقة ‪ for‬أو ‪.while‬‬ ‫‪break‬‬
‫‪next‬‬ ‫تمرير التحكـ إلى التكرار التالي‬ ‫‪continue‬‬
‫‪ iteration‬لحمقة ‪ for‬أو ‪.while‬‬
‫إنياء مجموعة مف التعميمات أو اإلشارة‬ ‫‪end‬‬
‫لنياية فيرسة صفيفة‪.‬‬
‫توقيؼ التنفيذ مؤقتاً‪.‬‬ ‫‪pause‬‬
‫العودة إلى استدعاء التابع‪.‬‬ ‫‪return‬‬

‫نذكر أف ىذه الكممات المفتاحية ال يمكف استخداميا مف أجؿ تسمية المتحوالت‪.‬‬


‫أوالً‪ ،‬سنعرض شرحاً لمعبارات الشرطية ‪ Conditional Statements‬والتي تساعد عمى اتخاذ قرار ‪.decision‬‬

‫‪-136-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫العبارات الشرطية ‪Conditional Statements‬‬


‫تتطمب بنى عممية اتخاذ قرار مف المبرمج أف يقوـ بتحديد شرط أو مجموعة مف الشروط ليتـ تنفيذىا أو اختبارىا‬
‫وبناء عمى تحقيؽ الشرط‪ ،‬أو عدـ تحقيقو‪ ،‬يتـ تنفيذ مجموعة مف التعميمات والعبارات‪ ،‬كما يمكف‬
‫ً‬ ‫ضمف البرنامج‪،‬‬
‫تنفيذ مجموعة مف التعميمات في حاؿ تحقؽ الشرط وتنفيذ مجموعة مختمفة مف التعميمات في حاؿ عدـ تحقؽ‬
‫الشرط‪.‬‬
‫يعرض الشكؿ التالي الشكؿ العاـ لبنية اتخاذ القرار والموجودة في معظـ لغات البرمجة‪:‬‬

‫يمتمؾ ‪ MATLAB‬عبارتيف أساسيتيف تسمحاف باالختيار واتخاذ القرار وىما‪:‬‬


‫‪ ‬عبارة ‪.if‬‬
‫‪ ‬عبارة ‪.switch‬‬

‫‪if statement‬‬ ‫عبارة ‪if‬‬


‫تأخذ ىذه العبارة عدة أشكاؿ سنقوـ استع راضيا فيما يمي إضاف ًة لشرح فائدة كؿ شكؿ مف األشكاؿ التالية‪:‬‬
‫‪if … end .1‬‬
‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫>‪if <expression‬‬

‫‪-137-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪% statement (s) will execute if the Boolean expression is true‬‬


‫>‪<statements‬‬
‫‪end‬‬

‫الوصؼ‪:‬‬
‫تتألؼ ىذه العبا رة مف تعميمة ‪ if‬يمييا تعبير منطقي يميو مجموعة مف التعميمات أو العبارات‪ ،‬في حاؿ تحقؽ‬
‫الشرط الموجود ضمف التعبير يتـ تنفيذ الرماز البرمجي أما في حاؿ عدـ تحقؽ الشرط ال يتـ تنفيذ أي تعميمة‬
‫ويتـ انتقاؿ إلى التعميمات الالحقة بعد ‪ .end‬يبيف الشكؿ التالي مخططاً لمخطوات المنطقية لبرنامج ما يحتوي‬
‫عمى العبارة السابقة‪.‬‬

‫مالحظة‪ :‬يجب اتباع الشكؿ القواعدي السابؽ أي أف أي تعميمة ‪ if‬يمزميا تعميمة ‪ ،end‬في حاؿ نسيانيا سينتج‬
‫خطأ‪ .‬مالحظة ىامة جدًا جدًا‪ :‬يمكف ضمف التعبير ‪ expression‬الموجود ضمف تعميمة ‪ if‬استخداـ المؤثرات‬
‫المنطقية والعالقاتية ‪.Relational and Logical Operators‬‬
‫مالحظة‪ :‬مف اآلف وصاعدًا عند تنفيذ أي مثاؿ يجب إنشاء ممؼ ‪ script‬وحفظ التعميمات ضمنو الستخداميا‬
‫الحقاً‪ ،‬وفي حاؿ كانت التعميمات عبارة عف تايع يجب إنشاء ممؼ خاص بالتابع واتباع القواعد التي جرى تعمميا‬
‫في الفصؿ السابؽ‪.‬‬
‫مثاؿ‪:‬‬
‫قبؿ البدء بالمثاؿ ينصح بإنشاء ممؼ ‪ script‬وتسميتو ‪ if_end‬مثالً‪ ،‬وعند عرض اكثر مف مثاؿ يفضؿ استخداـ‬
‫‪.cells‬‬
‫يقوـ ىذا الرماز البرمجي بفحص قيمة متحوؿ إ از كانت أصغر مف قيمة ما (عتبة) يظير رسالة تخبر المستخدـ‬
‫أف قيمة المتحوؿ أصغر مف قيمة العتبة ثـ تظير رسالة بقيمة المتحوؿ‪ ،‬في حاؿ كانت قيمة المتحوؿ أكبر مف‬
‫العتبة فإف الرماز يظير قيمة المتحوؿ فقط‪.‬‬

‫‪-138-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫عند تنفيذ التابع نجد ما يمي‬

‫مالحظة‪ :‬قـ بتغيير قيمة المتحوؿ واجعميا ‪ ،a= 30‬ثـ قـ بتنفيذ الرماز‪.‬‬
‫مثاؿ ‪:2‬‬
‫الحظ تقسيـ الرماز إلى خاليا واضافة التعميقات‪.‬‬

‫عند تنفيذ البرنامج السابؽ (تذكر يمكف عند الضغط عمى الخمية ‪ cell‬استخداـ ‪ )ctrl+enter‬يظير مايمي‪:‬‬

‫في حالة اإلجابة بأي حرؼ مختمؼ عف ‪ y‬ضمف ‪ command window‬ال يظير أي خرج‪ ،‬أما في حالة كتابة‬
‫‪ y‬يظير الخرج التالي‪:‬‬

‫‪-139-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬سنقدـ في فق رات الحقة مف الفصؿ شرحاً عف التعميمات‪.input ،disp ،fprintf :‬‬
‫‪if … else … end .2‬‬
‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫>‪if <expression‬‬
‫‪% statement (s) will execute if the Boolean expression is true‬‬

‫>‪<statements‬‬

‫‪else‬‬
‫‪% statement (s) will execute if the Boolean expression is false‬‬

‫>‪<statements‬‬

‫‪end‬‬
‫الوصؼ‪:‬‬
‫تتألؼ ىذه العبا رة مف تعميمة ‪ if‬يمييا تعبير منطقي يميو مجموعة مف التعميمات أو العبارات‪ ،‬في حاؿ تحقؽ‬
‫الشرط الموجود ضمف التعبير يتـ تنفيذ الرماز البرمجي أما في حاؿ عدـ تحقؽ الشرط ال يتـ تنفيذ مجموعة‬
‫التعميمات التي تمي تعميمة ‪ .else‬يبيف الشكؿ التالي مخططًا لمخطوات المنطقية لبرنامج ما يحتوي عمى العبارة‬
‫السابقة‪.‬‬

‫‪-140-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مثاؿ‪:‬‬
‫قـ بإنشاء ممؼ ‪ script‬وتسميتو ‪ if_else_end‬مثالً‪:‬‬

‫عند التنفيذ يكوف الخرج‪:‬‬

‫قـ بتغيير قيمة ‪ a‬إلى ‪ ،a=12‬ثـ قـ بتنفيذ الرماز ستالحظ الخرج التالي‪:‬‬

‫‪-141-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫ال‪ ،‬وا لضغط بالزر اليميني لتظير قائمة مف الخيارت ثـ يمكف‬


‫مالحظة‪ :‬بعد كتابة الرماز يمكف تحديده كام ً‬
‫اختيار ‪ Smart Indent‬مف أجؿ تنظيـ الرماز بشكؿ واضح وجعؿ قرائتو وفيمو أسيؿ‪.‬‬

‫مثاؿ ‪:2‬‬

‫إف الرماز السابؽ يولد عدد عشوائي ثـ يقوـ بفحصو إ از كاف زوجيًا يظير رسالة أف العدد زوجي‪ ،‬ثـ يقوـ‬
‫بتقسيمو عمى ‪ 2‬ويظير نتيجة القسمة‪ ،‬أما في حاؿ كاف فردياً فيظير رسالة لذلؾ عند التنفيذ يكوف الخرج عمى‬
‫شكميف ىما‪:‬‬

‫‪if … elseif … else … end .3‬‬


‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫‪-142-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫>‪if <expression 1‬‬


‫‪% statement (s) will execute if the Boolean expression 1 is true‬‬

‫>‪<statements‬‬

‫>‪elseif <expression 2‬‬


‫‪% statement (s) will execute if the Boolean expression 2 is true‬‬

‫>‪<statements‬‬

‫>‪elseif <expression 3‬‬


‫‪% statement (s) will execute if the Boolean expression 3 is true‬‬

‫>‪<statements‬‬

‫‪else‬‬
‫‪% statement (s) will execute when none of the above condition is true‬‬

‫>‪<statements‬‬

‫‪end‬‬
‫الوصؼ‪:‬‬
‫الشكؿ السابؽ ىو الشكؿ العاـ لتعميمة ‪ ،if‬حيث وجود تعميمة ‪ else‬وحيدة أو تعميمة ‪ elseif‬وحيدة (أو أكثر) ىو‬
‫اختياري‪.‬‬
‫إف التعميمات السابقة مفيدة كثي ًار مف أجؿ اختبار مجموعة مف الشروط عمى قيـ متحوؿ ما لدخؿ البرنامج او‬
‫خرج مرحمة ما مف الرماز البرمجي‪.‬‬
‫مالحظات حوؿ استخداـ التعميمات السابقة‪:‬‬
‫‪ ‬أي تعميمة ‪ if‬ممكف أف يتبعيا تعميمة ‪ else‬وحيدة أو أال يتبعيا أي تعميمة ‪ ،else‬وفي حاؿ ورودىا‬
‫يجب أف تأتي بعد تعميمة ‪ elseif‬في حاؿ وجود ‪.elseif‬‬
‫‪ ‬أي تعميمة ‪ if‬ممكف أف يتبعيا تعميمة ‪ elseif‬وحيدة أو اكثر أو أال يتبعيا أي تعميمة ‪ ،elseif‬وفي حاؿ‬
‫ورودىا يجب أف تأتي قبؿ تعميمة ‪.else‬‬
‫في حاؿ تحقؽ أي مف التعابير ضمف أي واحدة مف ‪ ،elseif‬فإف أي تعميمة ‪ elseif‬أو ‪else‬‬ ‫‪‬‬
‫(إضافةص لمتعميمات الم رافقة ليا) لف يتـ اختبارىـ او تنفيذىـ‪.‬‬

‫‪-143-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مثاؿ‪:‬‬
‫قـ بإنشاء ممؼ ‪ script‬باسـ ‪ if_elseif_else_end‬مثالً واكتب الرماز التالي‪:‬‬

‫الرماز السابؽ يقوـ بتوليد عدد طبيعي عشوائي ضمف المجاؿ ]‪ [1-100‬ثـ يقوـ بعدة اختبارت وىي‪:‬‬
‫‪ .1‬إذا كاف العدد أصغر تمامًا مف ‪ 30‬تظير رسالة بكممة ‪small‬‬
‫‪ .2‬إذا كاف العدد أصغر تماماً مف ‪ 80‬وأكبر أو يساوي ‪ 30‬تظير رسالة بكممة ‪medium‬‬
‫‪ .3‬إذا كاف العدد أكبر أو يساوي مف ‪ 80‬تظير رسالة بكممة ‪large‬‬
‫الخرج عمى الشكؿ التالي‪:‬‬

‫يمكف باستخداـ ‪ workspace‬مراقبة قيـ المتحوؿ‪ ،‬و يمكف طباعة قيمة ‪ a‬في كؿ مرة باستخداـ التعميمة‬
‫‪ ،fprintf‬قـ بالتعرؼ عمى التعميمة باستخداـ ‪ help‬واستعمميا إلظ يار قيمة المتحوؿ ‪.a‬‬
‫مثاؿ‪:‬‬
‫قـ بقراءة المثاؿ التالي‪ ،‬وحاوؿ فيـ الرماز البرمجي ثـ قـ بتنفيذه‪ ،‬وحاوؿ اف تفسر نتيجة الخرج‪.‬‬

‫‪-144-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪nested if‬‬ ‫‪ .4‬عبارات ‪ if‬متداخمة‬


‫تتيح لغة ‪ MATLAB‬خيارات برمجية واسعة لممبرمج‪ ،‬حيث مف الممكف كتابة عبارات ‪ if … else‬متداخمة‬
‫(‪ )nested‬أي يمكف استخداـ عبارة ‪( if‬أو ‪ )elseif‬ضمف عبارة ‪( if‬أو ‪ )elseif‬أخرى‪.‬‬
‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬
‫>‪if <expression 1‬‬
‫‪% Execute when the Boolean expression 1 is true‬‬

‫>‪if <expression 2‬‬

‫‪% Execute when the Boolean expression 2 is true‬‬

‫‪end‬‬
‫‪end‬‬
‫وىو نفس الشكؿ القواعدي الستخداـ ‪ elseif …else‬متداخمة‪.‬‬
‫ال واكتب الرماز التالي‪ ،‬وحاوؿ فيـ التعميمات ضمنو‪:‬‬
‫مثاؿ‪ :‬قـ بإنشاء ممؼ ‪ script‬باسـ ‪ nested_if‬مث ً‬

‫‪-145-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫الخرج ىو‬

‫‪switch statement‬‬ ‫عبارة ‪switch‬‬


‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫الوصؼ‪:‬‬
‫تقوـ كتمة تعميمات ‪ switch block‬بتنفيذ إحدى المجموعات مف التعميمات والعبارات بشكؿ شرطي‪ ،‬مف ضمف‬
‫عدة خيارات ‪ choices‬مف مجموعات مف التعميمات والعبارات‪ ،‬كؿ خيار يدعى حالة ‪.case‬‬
‫يأخذ ‪ switch_expression‬ضمف الشكؿ القواعدي السابؽ قيـ سممية ‪ scalar‬أو محارؼ ‪ ،string‬أما‬
‫‪ case_expression‬فيأخذ قيـ سممية ‪ scalar‬أو محارؼ ‪ string‬أو خمية صفيفة ‪ cell array‬مف العناصر‬
‫السممية أو المحارؼ‪ ،‬عند تنفيذ ‪ switch block‬يتـ المرور عمى كؿ حالة ‪ case‬حتى يتـ تحقؽ إحداىف وعندىا‬
‫يتـ تنفيذ مجموعة التعميمات ضمف الحالة ‪ ،case‬ومف ثـ يتـ الخروج مف ‪ ،switch block‬إف وضع‬
‫‪ otherwise‬ىو اختياري ويتـ تنفيذ التعميمات التي تمييا في حاؿ لـ تكف اي مف الحاالت ‪ cases‬صحيح ًة‪.‬‬

‫‪-146-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬تكوف الحالة ‪ case‬صحيحية ‪ true‬في حاؿ كاف‬


‫‪ ‬لألعداد السميمة‪ eq(case_expression, switch_expression) :‬أي متساوييف‪.‬‬
‫‪ ‬لممحارؼ‪ strcmp(case_expression, switch_expression) :‬أي متساوييف‪.‬‬
‫مالحظة‪ eq :‬و ‪ strcmp‬تعميمات لممقارنة بيف األعداد‪ ،‬المحارؼ عمى الترتيب‪.‬‬
‫مثاؿ‪:‬‬
‫ال‪ ،‬واكتب المثاؿ التالي‪:‬‬
‫وسمو ‪ switch_file‬مث ً‬
‫قـ بإنشاء ممؼ ‪ّ script‬‬

‫اخلرج هو‪:‬‬

‫مالحظة‪ :‬قـ بتغيير قيمة ‪ ،grade‬ودعو يأخذ القيـ التالية عمى الترتيب ‪ A,C,Q,D,R,F,Z‬والحظ الخرج لفيـ‬
‫الرماز بشكؿ أكبر‪.‬‬
‫مثاؿ‪:‬‬

‫‪-147-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫الخرج مف أجؿ عدة قيـ لمدخؿ‪:‬‬

‫مالحظة‪ :‬ضمف ‪ switch block‬عند ما يتـ تحقؽ أوؿ حالة ‪ case‬أي أف تصبح صحيحة ‪ true‬يتـ تنفيذ‬
‫التعميمات الخاصة بيا دوف النظر إلى الحاالت التالية حتى لو أف الشرط ضمنيا محقؽ‪.‬‬
‫مثاؿ‪:‬‬

‫الخرج‬

‫‪-148-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬يمكف استخداـ ‪ switch‬متداخمة ‪.nested‬‬


‫محددة‬
‫مالحظة‪ :‬تستخدـ عبارة ‪ switch‬بكثرة عندما يريد المستخدـ اختبار المساواة لقيمة ما مع مجموعة ّ‬
‫منتهية ومعروفة من القيم‬

‫مثاؿ‪ :‬الخرج متضمف مع الصورة‬

‫‪Loops‬‬ ‫الحمقات‬
‫في معظـ األحياف يحتاج المبرمج إلى تنفيذ مجموعة مف التعميمات عدد معيف مف المرات‪ ،‬يؤمف لنا ‪MATLAB‬‬
‫تنفيذ العممية السابقة عف طريؽ الحمقات ‪ ،Loops‬يوجد نوعاف مف الحمقات ضمف ‪:MATLAB‬‬
‫‪ ‬الحمقات المعدودة‪ :‬باستخداـ تعميمة ‪ ، for‬تقوـ ىذه التعميمة بتفيذ سمسمة مف التعميمات عدة مرات اعتمادًا‬
‫يحدد عدد مرات التكرار‪ .‬يمكف التعبير عف ىذه الحمقة بجممة‬
‫عمى دليؿ الحمقة ‪ ،loop indicator‬الذي ّ‬
‫بسيطة‪:‬‬
‫كرر ىذه التعميمات عشريف مرة"‬
‫" ّ‬

‫‪-149-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪ ‬الحمقات الشرطية‪ :‬باستخداـ تعميمة ‪ ،while‬تستمر ىذه التعميم ة بتفيذ سمسمة مف التعميمات طالما أف‬
‫ال ثـ تقوـ بتنفيذ التعميمات داخؿ الحمقة‪ .‬يمكف‬
‫الشرط المعطى محقؽ‪ ،‬حيث تقوـ باختبار الشرط أو ً‬
‫التعبير عف ىذه الحمقة بجممة بسيطة‪:‬‬
‫كرر ىذه التعميمات حتى يصبح ىذا الشرط خاطئًا"‬
‫" ّ‬

‫‪while loop‬‬ ‫حمقة ‪while‬‬


‫محددة‬
‫ذكرنا أف ‪ while‬تستخدـ كحمقة شرطية ضمف ‪ ،MATLAB‬أي انيا تستعمؿ مف أجؿ تكرار تعميمات ّ‬
‫عندما ال نعرؼ مسبقاً عدد المرات المطموب تك رارىا فييا‪.‬‬
‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫الوصؼ‪:‬‬
‫طالما أف الشرط الموجود ضمف ‪ expression‬الزاؿ محققًا فإف الحمقة تستمر بتنفيذ التعميمات داخؿ الحمقة‪ ،‬مف‬
‫الضروري عدـ نسياف تعميمة ‪ end‬في نياية حمقة ‪ ،while‬وكما ىو الحاؿ بالنسبة لتعميمة ‪ if‬فإف التعبير‬
‫‪ expression‬مف الممكف استخداـ المؤث رات المنطقية والعالقاتية ‪.Relational and Logical Operators‬‬
‫في حالة وضع شرط صحيح دومًا تدخؿ البرمجية في حمقة النيائية‪ ،‬مف أجؿ الخروج مف ىذه الحمقة يمكف‬
‫استخداـ ‪.ctrl + c‬‬
‫وسمو ‪ while_file‬مثالً‪ ،‬واكتب المثاؿ التالي‪:‬‬
‫مثاؿ‪ :‬قـ بإنشاء ممؼ ‪ّ script‬‬
‫في المثاؿ التالي سنقوـ بتنفيذ عممية إظيار قيـ متحوليف طالما أف صحيح‪ ،‬وسنستخدـ المؤثرات المنطقية ضمف‬
‫التعبير‪.‬‬

‫يقوـ ىذا الرماز بطباعة قيمة المتحوليف ‪ a‬و ‪ b‬طالما أف قيمة المتحوؿ ‪ a‬أصغر مف ‪ 15‬و قيمة المتحوؿ ‪b‬‬
‫المحددة فقط لمخروج مف الحمقة‪.‬‬
‫ّ‬ ‫أصغر مف ‪ ،30‬أي أنه يكفي أن يصبح أحد المتحوالت أصغر مف القيمة‬

‫‪-150-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫الخرج‪:‬‬

‫نالحظ أف المتحوؿ ‪ b‬يصبح أكبر مف ‪ 30‬أسرع مف المتحوؿ ‪ a‬وتتوقؼ الحمقة عف تنفيذ التعميمات‪.‬‬
‫جرب أف يصبح التعبير كالتالي‪:‬‬
‫مالحظة‪ّ :‬‬
‫)‪(a < 15 || b < 30‬‬
‫وفسر النتيجة‪.‬‬
‫والحظ الخرج ّ‬
‫مثاؿ‪:‬‬
‫في المثاؿ التالي سنقوـ بإيجاد أوؿ عدد صحيح يحقؽ أف العاممي (‪ )Factorial‬لو أصغر مف قيمة معينة‪ ،‬ثـ‬
‫سنقوـ بإظيار العدد و أيضًا سنظير قيمة العاممي الموافقة لو‪.‬‬
‫ن ّذكر أف العاممي لعدد ‪ n‬ىو بالتعريؼ‪:‬‬

‫الخرج‪:‬‬

‫‪-151-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬قـ بتحويؿ الرماز السابؽ إلى تابع يأخذ كدخؿ لو قيمة ولنسمييا ‪ threshold‬ويوجد أصغر عدد‬
‫صحيح يحقؽ أف قيمة العاممي لو أكبر مف العتبة المدخمة ‪.threshold‬‬

‫‪for loop‬‬ ‫حمقة ‪for‬‬


‫محدد ومعروف مسبق ًا‬
‫يتـ استعماؿ الحمقة ‪ for‬عندما نحتاج لتكرار تنفيذ مجموعة مف التعميمات أو تابع ما عدد ّ‬
‫من المرات ‪ ،‬ما يتـ ضمف الحمقة ىو مفيوـ التك رار ‪ ، iterate‬حيث يوجد متحوؿ يتـ استعمالو مف أجؿ المرور‬
‫عمى القيـ يدعى ىذا المتحوؿ كما أشرنا سابقاً بمتحوؿ (دليؿ‪ ،‬عداد) الحمقة ‪Loop indicator‬‬
‫الشكؿ القواعدي (‪ )Syntax‬ىو‪:‬‬

‫مثاؿ‪:‬‬
‫وسمو ‪ for_file‬مثالً‪ ،‬واكتب المثاؿ التالي‪:‬‬
‫قـ بإنشاء ممؼ ‪ّ script‬‬
‫مثاؿ ‪ :1‬يبيف لنا حمقة تقوـ بعرض مجموعة مف القيـ بخطوة ‪.1‬‬
‫‪for a = 2 : 1 : 9‬‬
‫)‪fprintf('the value of a is: %d\n',a‬‬
‫‪end‬‬

‫مالحظة‪ :‬يمكف كتابة ‪ a = 2:9‬ألف الخطوة االفتراضية ضمف البرمجية ىي ‪.5‬‬


‫مثاؿ ‪ :2‬مماثؿ لممثاؿ السابؽ إال أف العداد يعد بخطوة ‪ .2‬الناتج ىو األعداد الزوجية‬
‫‪for a = 0 : 2 : 00‬‬
‫)‪fprintf('the value of a is: %d\n',a‬‬
‫‪end‬‬

‫مالحظة‪ :‬قـ بالتغيير عمى شعاع القيـ واإلبقاء عمى الخطوة ‪ 2‬وقـ بعرض األعداد الفردية‪.‬‬
‫مثاؿ ‪ :3‬مماثؿ لممثاؿ السابؽ إال أف العداد يعد بخطوة سالبة‪.‬‬
‫‪for d = 2 : -0.2 : 0‬‬
‫)‪fprintf('the value of a is: %0.2f\n',d‬‬
‫‪end‬‬

‫مثاؿ ‪ :4‬نقوـ بعرض قيـ شعاع‪.‬‬

‫‪-152-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫]‪for a = [2,180,317,3,208‬‬
‫)‪disp(a‬‬
‫‪end‬‬

‫مالحظة ىامة‪ :‬ذكرنا في الفصوؿ السابقة أف عممية ‪ indexing‬لممصفوفات تقبؿ فقط أعداد موجبة أي أف‬
‫العنصر األوؿ يكوف الدليؿ لو ىو ‪ 1‬وليس ‪ ،0‬لذلؾ عند تعريؼ مجاؿ قيـ العداد يجب االنتباه إلى موضوع‬
‫الفيرسة‬
‫مثاؿ عمى المالحظة السابقة‪:‬‬
‫نرغب في عرض قيـ عمود مصفوفة قمنا بتعريفيا مسبقًا‪ ،‬سنقوـ بعرض قيـ العمود األوؿ مثالً‪:‬‬
‫اكتب الرماز التالي‪:‬‬
‫;]‪a = [ 10 5 6; 3 0 2‬‬
‫)‪for k = 0:size(a,1‬‬
‫;))‪disp(a(k,1‬‬
‫‪end‬‬

‫قـ بتنفيذه والحظ ظيور الخطأ التالي‪:‬‬

‫لتصحيح الرما زالسابؽ قـ بتغيير القيمة البدائية لمعداد لتصبح عمى الشكؿ‪:‬‬
‫;]‪a = [ 10 5 6; 3 0 2‬‬
‫)‪for k = 1:size(a,1‬‬
‫;))‪disp(a(k,1‬‬
‫‪end‬‬

‫مالحظة‪ :‬حاوؿ عند استعماؿ متحوالت لعداد الحمقة (متحوؿ التك رار) االبتعاد عف المحارؼ ‪ i‬و‪ j‬فيذه المحارؼ‬
‫كما رأينا مسبقاً مخصصة لتعريؼ األعداد العق دية‪ ،‬وفي حالة استخداميـ كعداد لمحمقة اليمكف تعريؼ العدد‬
‫العقدي باستخداـ الحرؼ الذي قمت باستخدامو أي إ از استخدمت المحرؼ ‪ i‬ضمف الحمقة قـ بتعريؼ األعداد‬
‫العقدية باستخداـ المحرؼ ‪.j‬‬

‫‪-153-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬تذكر الفرؽ دومًا بيف المؤثرات المخصصة لجداء ‪،‬قسمة ‪ ،‬الرفع إلى قوة‪ ... ،‬المخصصة لممصفوفات‬
‫وتمؾ المؤث رات المخصصة لجداء ‪،‬قسمة ‪ ،‬الرفع إلى قوة‪ ... ،‬الصفيفات والتي تستخدـ )‪ (.‬دوماً أي التي تعمؿ‬
‫عمى مستوى عنصر لعنصر‪.‬‬
‫مالحظة‪ :‬كما رأينا في فقرة ‪ ،if‬أنو يمكف استخداـ تعميمات ‪ if‬متداخمة‪ ،nested if ،‬كذلؾ األمر بالنسبة لتعميمات‬
‫‪ for‬و ‪ ،while‬نعرض ىنا الشكؿ القواعدي (‪:)Syntax‬‬

‫مثاؿ لممالحظة السابقة‪ :‬سنستخدـ في ىذا المثاؿ حمقات ‪ for‬متداخمة إضافةً لبعض الشروط لعرض كؿ األعداد‬
‫األولية ضمف المجاؿ ]‪.[1-100‬‬

‫الخرج‪:‬‬

‫‪-154-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة ىامة جداً‪ :‬يرجى االطالع عمى عمؿ التعميمات ‪.break, try/catch, continue‬‬
‫مالحظة ىامة جدًا جدًا‪:‬‬
‫أوضحنا في الفقرة السابقة كيفية استخداـ حمقات ‪ ،for‬إال أنو يجب التذكير إلى اف ‪ MATLAB‬مبني أساساً عمى‬
‫المصفوفات ويستخدـ العمميات الحسابية عمى المصفوفات أي أف التوابع المبنية ضمف مكاتب البرمجية تتعامؿ‬
‫مع المصفوفات والعمميات عمييا وقد جرى عمميات أمثمة ‪ optimization‬عمييا لتنفيذ المطموب بزمف أقؿ‪ ،‬لذلؾ‬
‫جرب الرماز التالي‪:‬‬
‫ينصح بعدـ استخداـ الحمقات مف أجؿ إجراء عمميات حسابية تتعمؽ بالمصفوفات‪ ،‬مثالً ّ‬
‫‪%%‬‬
‫;‪clear all;close all;clc‬‬
‫;)‪a = randi(100,1,10000‬‬
‫;)‪b = randi(100,1,10000‬‬
‫)]'‪disp([char(10),'Using Loops:‬‬
‫;‪tic‬‬
‫‪for i=1:10000‬‬

‫‪-155-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫;)‪c(i)= a(i).*b(i‬‬
‫‪end‬‬
‫‪toc‬‬
‫)]'‪disp([char(10), 'Using Array Operations:‬‬
‫‪tic‬‬
‫;‪c1=a.*b‬‬
‫‪toc‬‬

‫الخرج ىو‪:‬‬

‫نالحظ الفرؽ في زمف التنفيذ‪.‬‬


‫تستخدـ لمعرفة الزمف الالزـ لتنفيذ رماز برمجي‪ ،‬ا والً نضع ‪ tic‬في بداية‬ ‫‪toc‬‬ ‫ثـ‬ ‫‪tic‬‬ ‫التعميمات‬
‫الرماز الذي نرغب بتقدير الزمف تقوـ ىذه التعميمة بإنشاء عداد زمني واحدتو ميمي ثانية ‪ millisecond‬ثـ نضع‬
‫في نياية الرماز تعميمة ‪ toc‬والتي بدورىا تقوـ بإعادة الزمف المنقضي ‪ time elapsed‬منذ تفعيؿ آخر تعميمة‬
‫‪.tic‬‬
‫يعرؼ المفيوـ السابؽ ب ػ ‪ vectorization‬أي التحويؿ إلى أشعة ‪ vector‬وىو ما ينصح بو عند استخداـ‬
‫‪ MATLAB‬أي تجنب الحمقات قدر اإلمكاف والتفكير لتحويؿ المسألة إلى عمميات مصفوفات لالستفادة مف سرعة‬
‫التوابع المنجزة في المكاتب‪.‬‬
‫مثاؿ‪:‬‬
‫‪%%‬‬
‫;‪clear all;close all;clc‬‬
‫‪% Define Variables‬‬
‫;)‪Mass = rand(5,1000‬‬
‫;)‪Length = rand(5,1000‬‬
‫;)‪Width = rand(5,1000‬‬
‫;)‪Height = rand(5,1000‬‬
‫‪% get the size‬‬

‫‪-156-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫;)‪[rows, cols] = size(Mass‬‬


‫)]'‪disp([char(10), 'Using Array Operations:‬‬
‫‪tic‬‬
‫;)‪Density = Mass./(Length.*Width.*Height‬‬
‫‪toc‬‬
‫)]'‪disp([char(10),'Using Loops:‬‬
‫;‪tic‬‬
‫‪for I = 1:rows‬‬
‫‪for J = 1:cols‬‬
‫;))‪Density(I) = Mass(I,J)/(Length(I,J)*Width(I,J)*Height(I,J‬‬
‫‪end‬‬
‫‪end‬‬
‫‪toc‬‬

‫الخرج عند التنفيذ‪:‬‬

‫مالحظة‪ :‬عند استخداـ الحمقة مف أجؿ حساب مجموع لمتحوؿ ما (قيمة سممية‪ ،‬شعاع‪ ،‬مصفوفة)‪ ،‬أي إضافة‬
‫مجموعة مف القيـ لممتحوؿ‪ ،‬يجب عدـ نسياف إعطاء قيمة بدائية لممتحوؿ وىي ‪ 0‬في حالة متحوؿ سممي أو‬
‫شعاع (أو مصفوفة) مف األصفار (باستخداـ تعميمة ‪ )zeros‬في حالة متحوؿ ىو شعاع (أو مصفوفة)‪ ،‬تفيد ىذه‬
‫العممية في تقميؿ الزمف الالزـ لتنجير رماز برمجي‪ .‬مثالً لنقـ بالتعديؿ عمى المثاؿ األوؿ ضمف ىذه المالحظة‪:‬‬
‫‪%%‬‬
‫;‪clear all;close all;clc‬‬
‫;)‪a = randi(100,1,10000‬‬
‫;)‪b = randi(100,1,10000‬‬
‫;)‪c=zeros(1,10000‬‬
‫;)‪c1=zeros(1,10000‬‬

‫‪-157-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫)]'‪disp([char(10),'Using Loops:‬‬
‫;‪tic‬‬
‫‪for i=1:10000‬‬
‫;)‪c(i)= a(i).*b(i‬‬
‫‪end‬‬
‫‪toc‬‬
‫)]'‪disp([char(10), 'Using Array Operations:‬‬
‫‪tic‬‬
‫;‪c1=a.*b‬‬
‫‪toc‬‬

‫الخرج ىو‬

‫الحظ نقصاف زمف التنفيذ بشكؿ كبير تعتبر المالحظتيف السابقتيف مف أىـ المالحظات البرمجية عند استخداـ‬
‫‪ MATLAB‬يضاؼ ليا مالحظة بسيطة وىي استخداـ );( لمنع إظيار الخرج الغير الزـ ضمف ‪command‬‬
‫‪ ، window‬فعممية اإلظيار تمؾ تزيد مف زمف التنفيذ ويجب االكتفاء بإظيار النتائج الميمة والمعبرة فقط‪ ،‬يمكف‬
‫ال‪.‬‬
‫استخداـ توابع ‪ fprintf ،disp‬مث ً‬
‫النصيحة األخيرة ىي تغيير نمط المتحوؿ‪ ،‬عند إجراء بعض الحسابات ال نحتاج دائماً إلى دقة كبيرة في التمثيؿ‬
‫لذلؾ مف الممكف عند إج راء عمميتا حسابية عادية أو أننا ال نحتاج إلى دقة كبيرة في النتيجة يمكف استخداـ أنماط‬
‫لممتحوالت تتطمب حجمًا أصغر في الذاكرة‪ ،‬تؤثر العممية السابقةة عمى زمف الحسابات وعمى الذاك رة المستخدمة (‬
‫المحجوزة) عند تنفيذ الرماز‪.‬‬

‫‪Strings‬‬ ‫السالسل المحرفية‬


‫ال مع المحارؼ ‪ chars‬والسالسؿ المحرفية ‪ ،strings‬ووجدنا أف إنشاء متحوالت مف‬
‫تعاممنا في الفصؿ الثاني قمي ً‬
‫نمط ‪ string‬أو ‪ char‬ىو أمر بسيط‪ ،‬نيدؼ في ىذه الفقرة غمى عرض بعض األمور اإلضافية المتعمقة بالتعامؿ‬
‫مع السالسؿ المحرفية‪ ،‬واستخداـ التوبع المبنية في ‪ MATLAB‬والتي تسيؿ عمؿ المبرمج و المستخدـ‪.‬‬
‫تذكرة سريعة‪:‬‬

‫‪-158-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫إلنشاء متحوؿ نقوـ بالتعريؼ عمى الشكؿ التالي‪:‬‬


‫;'!!! ‪str='Hello MATLAB students‬‬

‫ونذكر بأف التعريؼ السابؽ ينشئ متحوؿ عبارة عف شعاع سطر مف النمط ‪ char‬ويكوف الحجـ مف الذاكرة الالزـ‬
‫لكؿ محرؼ ىو ‪.2 Bytes‬‬
‫مف أجؿ دمج المحارؼ ‪ concatenate‬استخدـ ] ‪ [str1 , str2‬مثأل‪ ،‬اكتب الرماز التالي‪:‬‬
‫' ‪str1='Hi there.‬‬
‫'?‪str2='How are you‬‬
‫'‪str3= 'Bye‬‬
‫‪c1= [str1,' ',str2] % join two strings‬‬

‫‪vertical‬‬ ‫الدمج السابؽ يدعى ‪ ،horizontal concatenation‬أما مف أجؿ دمج محارؼ بشكؿ عمودي‬
‫جرب‪:‬‬
‫‪ concatenation‬ىنا يجب التحقؽ مف أف المتحوالت ليا نفس الطوؿ‪ّ ،‬‬
‫)‪c2 = [str1;str2] % vertical concatenation (must be same length‬‬

‫ثـ‬
‫]‪C_err= [str1;str3‬‬

‫ستظير رسالة خطأ‪.‬‬


‫جرب‪:‬‬
‫يمكف استخداـ التابع ‪ strvcat‬مف أجؿ الحصوؿ عمى ‪ّ ،vertical concatenation‬‬
‫)‪c3=strvcat(str1,str2,str3) % vertically concatenate (matrix‬‬

‫قـ باستخداـ ‪ help‬وفؽ المسار التالي لمتعرؼ أكثر عمى ‪ string‬وكيفية دمج ‪ concatenate‬أكثر مف محرؼ‪:‬‬
‫‪MATLAB  Language Fundamentals  Data Types  Characters and Strings ‬‬
‫‪Create and Concatenate Strings‬‬
‫مالحظة‪ :‬يتـ التعامؿ مع السالسؿ المحرفية في ‪ MATLAB‬عمى انيا أشعة أي يمكف تطبيؽ كافة العمميات‬
‫والتوابع المستعممة مع األشعة عمى السالسؿ المحرفية مثالً يمكف الحصوؿ عمى منقوؿ الشعاع‪ ،‬او استخداـ‬
‫التابع ‪ length‬مثالً‪.‬‬
‫يمتمؾ ‪ MATLAB‬مجموعة مف التوابع المفيدة كثي ًار عند التعامؿ مع السالسؿ المحرفية والتي تسيؿ عمؿ‬
‫المبرمج وتفيد في عدـ ضياع الوقت في إعادة برمجة مثؿ ىذه التوابع الضرورية واألساسية نذكر منيا‪:‬‬
‫الوصؼ ‪Description‬‬ ‫التعميمة ‪Command‬‬

‫تقوـ بدمج السالسؿ المحرفية‬ ‫‪strcat‬‬

‫‪-159-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫تنفيذ بالتحقؽ فيما إ از كاف المتحوؿ ىو‬ ‫‪ischar,isletter, isspace‬‬


‫محرؼ‪ ،‬حرؼ أبجدي‪ ،‬فراغ ‪.space‬‬

‫تقوـ ىذه التعميمات بالتحويؿ مف متحوؿ‬ ‫‪int2str, num2str‬‬


‫‪ number‬إلى‬ ‫نمطو ‪ int‬إلى ‪ string‬أو مف‬
‫‪.string‬‬
‫لممقارنة بيف المحارؼ‪.‬‬ ‫‪strcmp‬‬

‫العودة إلى استدعاء التابع‪.‬‬ ‫‪sprintf,fprintf‬‬

‫قـ باستخداـ ‪ help‬لمتعرؼ بشكؿ أكبر عمى التعميمات ‪ sprintf, fprintf‬ثـ قـ بالبحث وفؽ المسار التالي‬
‫لمتعرؼ أكثر عمى فقرة ‪ formatting strings‬والتي تساعد في فيـ التعميمات السابقة بشكؿ أكبر‬
‫‪MATLAB  Language Fundamentals  Data Types  Characters and Strings ‬‬
‫‪Formatting Strings‬‬
‫مثاؿ‪ :‬اكتب الرماز التالي‪ ،‬والحظ الخرج وحاوؿ أف تفسره اعتمادًا عمى القراءة السابقة‪.‬‬
‫;)‪C =2* pi*1000*ones(1,6‬‬
‫)‪sprintf(' %f \n %.2f \n %.4f \n %+.2f \n %12.2f \n %012.2f \n', C‬‬

‫الخرج ىو‪:‬‬

‫مالحظة ىامة‪ :‬يرجى االنتباه بعد التعمـ عف تعميمتي ‪ fprintf‬و ‪ sprint‬أف الفرؽ الجوىري ىو أف التعميمة‬
‫‪ sprint‬تنشئ سمسمة محرفية أما التعميمة ‪ fprintf‬فتقوـ بطباعة السالسؿ المحرفية فقط‪.‬‬

‫‪-160-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪:Graphics and visualization‬‬ ‫البيانيات واإلظهار‬


‫قدمنا في الفصوؿ والفقرات السابقة فقرات عديدة تناقش تعريؼ متحوالت عمى اختالؼ نمطيا‪ ،‬نوعيا وحجميا‪،‬‬
‫إال أننا لـ نتطرؽ لكيفية إظيار ىذه المتحوالت؛ وكما ىو معروؼ أف الرسوـ البيانية في كثير مف األحيات تعطي‬
‫صورة أفضؿ عف النتيجة‪ ،‬كما اف رسـ بعض التوابع او المتحوالت يساعد في فيـ سموؾ المتحوؿ المعبر عف‬
‫ظاىرة ما‪.‬‬
‫بالتصور‬
‫ّ‬ ‫نعرض في ىذه الفقرة عممية اإلظيار ضمف ‪ MATLAB‬وكافة المواضيع والتعميمات المتعمقة‬
‫‪ visualization‬حيث سنركز عمى‪:‬‬

‫نحتاج إلى‬ ‫بشكؿ عاـ لرسـ ‪ Plot‬شكؿ تابع‬


‫الخطوات التالية‪:‬‬
‫تعريؼ شعاع الدخؿ لمتابع أو ما يعرؼ بالمنطمؽ‪ ،x ،‬وىنا المقصود ىو تحديد مجاؿ القيـ لممتحوؿ ‪x‬‬ ‫‪‬‬
‫التي نرغب في معرفة قيـ التابع عندىا‪ ،‬ومف ثـ رسمو‪.‬‬
‫‪.‬‬ ‫‪ ‬تعريؼ التابع‬
‫‪ ‬استخداـ التوابع المبنية ضمف ‪ MATLAB‬والتي تفيد في رسـ منحني التابع‪ ،‬وىي عديدة منيا ما ىو‬
‫مستمر ومنيا ما ىو متقطع‪ ،‬ومنيا ما ىو مخصص لرسمات ثنائية األبعاد ‪ 2D Plot‬أو ثالثية األبعاد‬
‫‪ ،3D Plot‬نذكر منيا‪.plot, stem, stair, plot3 :‬‬

‫مثاؿ‪:‬‬
‫عمى المجاؿ ]‪ [-5, 4‬بخطوة مقدارىا ‪ .0.5‬قـ بإنشاء ممؼ‬ ‫سنقوـ في ىذا المثاؿ برسـ التابع‬
‫‪ script‬واكتب ضمنو الرماز التالي‪:‬‬
‫;‪x = -5 : 0.5 : 4‬‬
‫;‪y=x‬‬

‫‪-161-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫)‪plot(x,y‬‬

‫ستالحظ إنشاء شكؿ يعبر عف الخرج وىو‪:‬‬

‫مالحظة‪ :‬يتيح لنا ‪ MATLAB‬القياـ بخيارات إضافية عند ظيور شكؿ ‪ ،figure‬بعد تنفيذ مجموعة مف‬
‫التعميمات‪ ،‬منيا طباعة الشكؿ‪ ،‬نسخ وحفظ الشكؿ وذلؾ بمواحؽ عديدة سواء كممفات أشكاؿ ‪ MATLAB‬بالحقة‬
‫‪ .fig‬أو كصور بالحقة ‪ ،.bmp .jpg .tif .png‬إضافة مالحظات لمشكؿ الناتج مثؿ إشافة تسمية لممحاور‪،‬‬
‫عنواف أو مالحظات نصية (دوف استخداـ التعميمات) ويمكف أيضاً القياـ بتدوير لمشكؿ‪zoom ،zoom in ،‬‬
‫‪ .out‬نجد ىذه اإلضافة ضمف الشرط بأعمى الشكؿ قـ بالضغط عمى ‪ File‬أو ‪ Insert‬أو ‪ Tools‬لمتعرؼ عمى‬
‫الخيارات بشكؿ أكبر‪.‬‬

‫سنأخذ المثاؿ التالي‪ ،‬اليدؼ منو ىو توضيح أىمية أخذ عدد نقاط كافي مف أجؿ الحصوؿ عمى األشكاؿ بشكؿ‬
‫صحيح‪ ،‬حيث أف برمجية ‪ MATLAB‬تقوـ بعممية االستيفاء ‪ Interpolation‬بيف النقاط باستخداـ توابع خطية‬
‫ىي خطوط مستقيمة ومنو كمما ازداد عدد النقاط اقترب الشكؿ الناتج مف الواقع‪.‬‬
‫لنأخذ المثاؿ التالي‪ ،‬حيث نرغب في رسـ تابع )‪ .Sin(x‬نكتب الرماز األوؿ‬

‫‪%%‬‬
‫;‪clear all‬‬
‫;‪close all‬‬

‫‪-162-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫;‪clc‬‬
‫;‪x_in= 0:0.1:1‬‬
‫;)‪y=sin(2*pi*x_in‬‬
‫)‪plot(x_in,y‬‬

‫سيظير الشكؿ التالي‪:‬‬

‫‪1‬‬

‫‪0.8‬‬

‫‪0.6‬‬

‫‪0.4‬‬

‫‪0.2‬‬

‫‪0‬‬

‫‪-0.2‬‬

‫‪-0.4‬‬

‫‪-0.6‬‬

‫‪-0.8‬‬

‫‪-1‬‬
‫‪0‬‬ ‫‪0.1‬‬ ‫‪0.2‬‬ ‫‪0.3‬‬ ‫‪0.4‬‬ ‫‪0.5‬‬ ‫‪0.6‬‬ ‫‪0.7‬‬ ‫‪0.8‬‬ ‫‪0.9‬‬ ‫‪1‬‬

‫نالحظة كيفية أف التابع السابؽ قريب مف التابع )‪ sin(x‬لكنو ليس صحيحًا مثالً الحظ ثبات القيمة بيف النقطتيف‬
‫‪ x=0.2‬و ‪ x=0.3‬كما أف قيمة التابع نظريًا محدودة ضمف المجاؿ ]‪ [-1,1‬في حيف ىنا أعمى قيمة يصميا ليا‬
‫والتفسير ىو قمة عدد النقاط المستخدمة لرسـ التابع ( ‪ 11‬نقطة)‪.‬‬ ‫التابع ىي‬
‫نغير قيمة شعاع الدخؿ ‪ x_in‬في المثاؿ السابؽ ليصبح عدد النقاط ‪ 1001‬نقطة عمى الشكؿ التالي‪:‬‬
‫;‪x_in= 0:0.001:1‬‬
‫ثـ نعيد تنفيذ الرماز السابؽ فنحصؿ عمى الشكؿ التالي‪:‬‬

‫‪-163-‬‬
MATLAB for Numerical Computing-Ch4

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

: 2D Plot and Graph Annotation ‫مثاؿ‬


‫ وحاوؿ فيـ الرماز حيث تمت‬،‫ ثـ اكتب الرماز التالي‬،‫ السابؽ قـ بإنشاء خمية جديدة‬script ‫باستخداـ ممؼ‬
:‫إضافة تعميقات لتسييؿ فيـ الرماز‬
%%
x = 0:0.1:2*pi; % Define input desired variable range
y=sin(x); % Define the function sin(x)
plot(x,y); %Make 2D plot
grid on; % Intialize grid lines to the current axes
hold on; % Allow user to plot another plot on the same figure
plot(x , exp(-x),'r:*'); %Make 2D plot
axis ([ 0 2*pi 0 1]) % Define scope of view range: axis([xmin xmax ymin ymax])
title('2-D Plots');% Adds a title to the plot
xlabel('Time');% Adds an x axis label
ylabel('Sin(t)');% Adds an y axis label
text(pi/3,sin(pi/3),'<--sin(\pi/3)') %Add text to a specified position on the plot

-164-
MATLAB for Numerical Computing-Ch4

legend('Sine Wave','Decaying Exponential');% Add a legend to the plot

:‫الخرج عمى الشكؿ التالي‬


2-D Plots
1
Sine Wave
0.9 Decaying Exponential
<--sin(/3)
0.8

0.7

0.6
Sin(t)

0.5

0.4

0.3

0.2

0.1

0
0 1 2 3 4 5 6
Time

:‫ثـ قـ بكتابة الرماز التالي‬


figure(2);
plot(x,y,x,exp(-x),'r:*')

:‫لتحصؿ عمى الشكؿ التالي‬

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

-165-
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫تقوـ تعميمة ;)(‪ figure‬بإنشاء شكؿ جديد لرسـ المنحني ضمنو‪ ،‬الحظ اف تعميمة ‪ plot‬تسمح برسـ أكثر مف تابع‬
‫أي تسمح بإدخاؿ أكثر مف ثنائية مف )‪.(x,y) , (x1,y1) …(xn,yn‬‬
‫لنتعرؼ عمى خيا رات أكثر ضمف تابع ‪ plot‬مثالً الحظ الشكؿ الناتج بعد إضافة الخيارات ضمف التعميمة ‪plot‬‬
‫‪%%‬‬
‫;‪x = -pi:pi/10:pi‬‬
‫;))‪y = tan(sin(x)) - sin(tan(x‬‬
‫‪plot(x,y,'--rs','LineWidth',2,...‬‬
‫‪'MarkerEdgeColor','k',...‬‬
‫‪'MarkerFaceColor','g',...‬‬
‫)‪'MarkerSize',10‬‬

‫الخرج‪:‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪-1‬‬

‫‪-2‬‬

‫‪-3‬‬
‫‪-4‬‬ ‫‪-3‬‬ ‫‪-2‬‬ ‫‪-1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫يمكف تغيير األلواف لألشكاؿ الناتجة وذلؾ بيدؼ التمييز بينيا وذلؾ بإضافة الرماز الخاص بكؿ لوف ضمف‬
‫تعميمة ‪ Plot‬عمى الشكؿ التالي‪:‬‬
‫)'‪plot(x,y,'r‬‬

‫يعرض الجدوؿ التالي األلوف والرما زات الموافقة ليا‬

‫‪-166-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫يجب استخداـ ‪ help‬لمتعرؼ أكثر عمى التعميمات المستخدمة في األمثمة السابقة‬


‫مثاؿ ‪:subplot‬‬
‫سنستخدـ في ىذا المثاؿ تعميمة ‪ subplot‬والتي تتيح لممستخدـ بعرض عدة رسوـ عمى نفس الشكؿ حيث يتـ‬
‫تقسيـ الواجية الخاصة بعرض األشكاؿ ‪ .figure‬التعميمة تأخذ المعامالت التالية )‪: subplot(m,n,p‬‬
‫ويستخدـ المتحوؿ ‪ p‬إلعطاء موضع الشكؿ‬ ‫يتـ تقسيـ الشكؿ الناتج إلى مصفوفة مف النوافذ أبعادىا‬
‫المراد إظياره ضمف النافذة الكمية أي ىو دليؿ الموقع ضمف مصفوفة التقسيـ‪.‬‬
‫نذكر أف تعميمة ‪ subplot‬تقوـ فقط بتجزئة النافذة وال تقوـ بالرسـ حيث يجب استخ داـ تعميمات الرسـ ثنائية‬
‫األبعاد مثالً مثؿ ‪.plot‬‬
‫لنكتب الرماز التالي بعد إنشاء خمية جديدة ضمف نفس ممؼ ‪ ،script‬استخدـ التعميمة ‪ clear all‬لمسح جميع‬
‫المعرفة مسبقًا‪ ،‬والتعميمة ‪ clc‬لمسح نافذة ‪ ،Command window‬اما ‪ close all‬فتستخدـ إلغالؽ‬ ‫ّ‬ ‫المتحوالت‬
‫جميع نوافذ األشكاؿ التي جرى تنفيذىا مسبقاً‪ ،‬التعميمات الثالثة السابقيف ينصح باستخداميـ بشكؿ دائـ عند كتابة‬
‫رماز برمجي وذلؾ لضماف عدـ استخداـ متحوالت جرى تعريفيا مسبقًا ولمعرفة جميع األشكاؿ الناتجة عف تنفيذ‬
‫المحدد ومسح التعميمات مف نافذة ‪.command window‬‬
‫ّ‬ ‫الرماز‬
‫‪%%‬‬
‫‪% subplot - display multiple plots in the same window‬‬
‫)‪% subplot (nrows,ncols,plot_number‬‬
‫;‪clear all;close all;clc‬‬
‫;‪x=0:.1:2*pi‬‬
‫;)‪subplot(2,2,1‬‬
‫;))‪plot(x,sin(x‬‬
‫;)‪subplot(2,2,2‬‬

‫‪-167-‬‬
MATLAB for Numerical Computing-Ch4

plot(x,cos(x));
subplot(2,2,3)
plot(x,exp(-x));
subplot(2,2,4);
plot(peaks);

:‫الخرج عمى الشكؿ‬

1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 2 4 6 8 0 2 4 6 8

1 10

0.8
5
0.6
0
0.4
-5
0.2

0 -10
0 2 4 6 8 0 20 40 60

.‫ والحظ الفروقات مع الرماز السابؽ وانظر إلى الخرج‬،‫لفيـ التعميمة بشكؿ أكبر قـ بكتابة الرماز التالي‬
subplot(4,1,1);
plot(x,sin(x));
subplot(4,1,2);
plot(x,cos(x));
subplot(4,1,3)
plot(x,exp(-x));
subplot(4,1,4);
plot(peaks);

-168-
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪1‬‬

‫‪0‬‬

‫‪-1‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬
‫‪1‬‬

‫‪0‬‬

‫‪-1‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬
‫‪1‬‬

‫‪0.5‬‬

‫‪0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬
‫‪10‬‬

‫‪0‬‬

‫‪-10‬‬
‫‪0‬‬ ‫‪5‬‬ ‫‪10‬‬ ‫‪15‬‬ ‫‪20‬‬ ‫‪25‬‬ ‫‪30‬‬ ‫‪35‬‬ ‫‪40‬‬ ‫‪45‬‬ ‫‪50‬‬

‫مثاؿ ‪:scale for axes‬‬


‫نيتـ في ىذا المثاؿ بعرض كيفية تغيير التقييس لمحاور الرسـ‪ ،‬فمثالً يوجد رسـ عمى محاور سممية‪ ،‬او‬
‫لوغاريتمية أو نصؼ لوغاريتمية بالنسبة لمحور شعاع الدخؿ او محور شعاع الخرج‪ ،‬يوضح المثاؿ التالي ىذه‬
‫االنواع‪:‬‬
‫نكتب الرماز التالي ب عد إنشاء خمية جديدة ضمف نفس ممؼ ‪:script‬‬
‫;‪clear all‬‬
‫;‪close all‬‬
‫;‪clc‬‬
‫;‪data = 1:1000‬‬
‫)‪subplot(2,2,1‬‬
‫)‪loglog(data‬‬
‫)')‪title('LOGLOG(1:1000‬‬
‫)‪subplot(2,2,2‬‬
‫)‪semilogy(data‬‬
‫;)')‪title('SEMILOGY(1:1000‬‬
‫)‪subplot(2,2,3‬‬

‫‪-169-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫)‪semilogx(data‬‬
‫)')‪title('SEMILOGX(1:1000‬‬
‫)‪subplot(2,2,4‬‬
‫)‪plotyy(data,data,data,data.^2‬‬
‫;)'‪title('PLOTYY‬‬

‫الخرج عمى الشكؿ‪:‬‬

‫‪3‬‬
‫)‪LOGLOG(1:1000‬‬ ‫‪3‬‬
‫)‪SEMILOGY(1:1000‬‬
‫‪10‬‬ ‫‪10‬‬

‫‪2‬‬ ‫‪2‬‬
‫‪10‬‬ ‫‪10‬‬

‫‪1‬‬ ‫‪1‬‬
‫‪10‬‬ ‫‪10‬‬

‫‪0‬‬ ‫‪0‬‬
‫‪10‬‬ ‫‪10‬‬
‫‪0‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪0‬‬ ‫‪500‬‬ ‫‪1000‬‬
‫‪10‬‬ ‫‪10‬‬ ‫‪10‬‬
‫‪5‬‬
‫)‪SEMILOGX(1:1000‬‬ ‫‪PLOTYY‬‬ ‫‪x 10‬‬
‫‪1000‬‬ ‫‪1000‬‬ ‫‪10‬‬

‫‪800‬‬ ‫‪8‬‬

‫‪600‬‬ ‫‪6‬‬
‫‪500‬‬
‫‪400‬‬ ‫‪4‬‬

‫‪200‬‬ ‫‪2‬‬

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


‫‪0‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪0‬‬ ‫‪500‬‬ ‫‪1000‬‬
‫‪10‬‬ ‫‪10‬‬ ‫‪10‬‬

‫تستخدـ تعميمة ‪ plot‬مف أجؿ رسـ منحنيات باستخداـ محاور تـ تقييسيا بأساس خطي ‪.linear‬‬
‫تستخدـ تعميمة ‪ loglog‬مف أجؿ رسـ منحنيات باستخداـ محاور تـ تقييسيا بأساس لوغاريتمي ‪( log‬أساسو‬
‫‪.)10‬‬
‫تستخدـ تعميمة ‪ semilogx‬مف أجؿ رسـ منحنيات حيث المحور ‪ x‬تـ تقييسو بأساس لوغاريتمي ‪ log10‬أما‬
‫المحور ‪ y‬تـ تقييسو بأساس خطي‪.‬‬
‫تستخدـ تعميمة ‪ semilogy‬مف أجؿ رسـ منحنيات حيث المحور ‪ y‬تـ تقييسو بأساس لوغاريتمي ‪ log10‬أما‬
‫المحور ‪ x‬تـ تقييسو بأساس خطي‪.‬‬
‫تستخدـ تعميمة ‪ plotyy‬مف أجؿ رسـ مجموعتيف مف المعطيات باستخداـ نفس المحور ‪ x‬لكف مف أجؿ مقياسيف‬
‫مختمفيف عمى المحور ‪.y‬‬

‫‪-170-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫مالحظة‪ :‬يتيح لنا ‪ MATLAB‬إمكانيات كبيرة مف أجؿ إضافة مالحظات وتعميقات لألشكاؿ كأسماء المحاور‬
‫وِ‬
‫األكاؿ‪ ،‬عرضنا بعض التعميمات في األمثمة السابقة‪ ،‬نعرض في ىذه المالحظة إمكانيات إضافية ىي‪:‬‬
‫‪ ‬كتابة أحرؼ إغريقية‪.‬‬
‫‪ ‬التحكـ بحجـ وشكؿ التسميات‪.‬‬
‫مثاؿ لتوضيح الفكرة السابقة‪:‬‬
‫قـ بكتابة الرماز التالي‪:‬‬
‫‪%%‬‬
‫;‪clear all‬‬
‫;‪close all‬‬
‫;‪clc‬‬
‫;‪alpha = 0.5‬‬
‫;‪beta = 0.3‬‬
‫;‪x = 0:.01:10‬‬
‫;)‪y = exp(alpha*x).*sin(beta*x‬‬
‫;)(‪figure‬‬
‫;)‪plot(x,y‬‬
‫)'}‪title('\fontname{Times}{Times} \fontname{Impact}{Impact‬‬
‫)'}‪xlabel('^{super} and _{sub‬‬
‫)'}‪ylabel('Some \bfboldface\rm and some \it{italics‬‬
‫)')‪text(3.5, 20, 'y = e^{\alphax}sin(\betax‬‬

‫‪-171-‬‬
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪Times Impact‬‬
‫‪40‬‬

‫‪Some boldface and some italics‬‬ ‫‪35‬‬

‫‪30‬‬

‫‪25‬‬

‫‪20‬‬ ‫)‪y = ex sin(x‬‬

‫‪15‬‬

‫‪10‬‬

‫‪5‬‬

‫‪0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪10‬‬
‫‪super‬‬
‫‪and sub‬‬

‫مالحظة ‪ :2‬يتيح لنا ‪ MATLAB‬أيضاً إمكانيات كبيرة وخيارات واسعة مف أجؿ إظيار األشكاؿ حيث تـ تعريؼ‬
‫ضمف مكاتب البرمجية عدد كبير مف أنواع الرسوـ إلظيار األشكاؿ سنستعرض العديد منيا في ىذا المثاؿ‪،‬‬
‫حيث نرغب في جعؿ ىذه الرما زات البرمجية أساس يعود ليا الطالب عند الحاجة الستخداـ نوع معيف مف‬
‫الرسوـ‪ ،‬يجب قراءة كؿ رماز بشكؿ دقيؽ‪:‬‬
‫‪%%‬‬
‫;‪clear all‬‬
‫;‪close all‬‬
‫;‪clc‬‬
‫;]‪data = [10 2 3 5; 5 8 10 3; 9 7 6 1; 3 5 7 2; 4 7 5 3‬‬
‫)‪subplot(2,3,1‬‬
‫;)'‪bar(data, 'stacked‬‬
‫;)')''‪title('Bar Graph (''stacked‬‬
‫)‪subplot(2,3,2‬‬
‫;)‪bar3h(data‬‬
‫;)')''‪title('Horizontal Bar (''grouped‬‬

‫‪-172-‬‬
MATLAB for Numerical Computing-Ch4

subplot(2,3,3)
hist(randn(1000,3));
title('Histogram - (HIST)');
subplot(2,3,4)
area(data);
title('Area Plot - (AREA)');
subplot(2,3,5)
pie3(sum(data), [0 0 1 0]);
title(['3-D Pie Chart';' (PIE3) ']);
subplot(2,3,6)
rose(5/3*randn(1000,1), 18);
title('Polar Histogram - (ROSE)');

:‫يظير الشكؿ التالي‬


Bar Graph ('stacked') Horizontal Bar ('grouped') Histogram - (HIST)
30 400

5 300
20 4
3
200
2
10 1
100
0
0 5 0
12345 10 -5 0 5

Area Plot - (AREA) Polar Histogram - (ROSE)


30 3-D Pie Chart 90 100
(PIE3) 120 60
150 50 30
20 13%
30%
30% 180 0
10 28% 210 330
240 300
0 270
2 4

clear all

-173-
MATLAB for Numerical Computing-Ch4

close all;
clc;
subplot(2,1,1)
t = 0:0.1:10;
z = impulse(1, [1 1 1], t);
stairs(t(1:5:end),z(1:5:end))
hold on
plot(t,z,'r')
plot([0 t(end)], [0 0], 'k:')
title('Impulse Response - (STAIRS)')
subplot(2,1,2)
theta = 2*pi*(0:74)/75;
x = cos(theta);
y = sin(theta);
z = abs(fft(ones(10,1), 75))';
stem3(x, y, z)
title('Polar FFT - (STEM3)')

-174-
MATLAB for Numerical Computing-Ch4

Impulse Response - (STAIRS)


0.6

0.4

0.2

-0.2
0 1 2 3 4 5 6 7 8 9 10

Polar FFT - (STEM3)

10

0
1
0.5 1
0 0.5
-0.5 0
-1 -1 -0.5

clear all
close all;
clc;
subplot(2,1,1)
[X,Y,Z] = peaks(-2:0.25:2);
[U,V] = gradient(Z, 0.25);
contour(X,Y,Z,10);
hold on
quiver(X,Y,U,V);
title('Surface Gradient - (CONTOUR & QUIVER)')
theta = 0:0.1:4*pi;
[x,y] = pol2cart(theta(1:5:end), theta(1:5:end));
subplot(2,1,2)
polar(theta,theta)
axis([-13 13 -12.5 14.5])

-175-
MATLAB for Numerical Computing-Ch4

title('Spiral Plot - (POLAR)')

Surface Gradient - (CONTOUR & QUIVER)


2

-1

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
90 20
120 60
Spiral Plot - (POLAR)

150 10 30

180 0

210 330

240 300
270
:3D Plot ‫مثاؿ‬
:‫ سنوضح في ىذا الرماز استخداـ ىذه التعميمة‬،plot3 ‫يمكف رسـ توابع ثالثية األبعاد استخداـ‬
%%
clear all
close all;
clc;
z=0:.1:40;
x=cos(z);
y=sin(z);
grid;
plot3(x,y,z);
zlabel('Height');

:‫سنحصؿ عمى الشكؿ التالي‬

-176-
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫‪40‬‬

‫‪30‬‬
‫‪Height‬‬

‫‪20‬‬

‫‪10‬‬

‫‪0‬‬
‫‪1‬‬
‫‪0.5‬‬ ‫‪1‬‬
‫‪0‬‬ ‫‪0.5‬‬
‫‪0‬‬
‫‪-0.5‬‬ ‫‪-0.5‬‬
‫‪-1‬‬ ‫‪-1‬‬

‫يمكف إضافة التعميمة ‪ rotate3d‬مف أجؿ اإلتاحة لممستخدـ إمكانية تدوير الشكؿ‪.‬‬
‫مثاؿ ‪:3D Surface Plotting‬‬
‫سنعرض في ىذه األمثمة خيارات اإلظيار المتعمقة برسـ السطوح ألشكاؿ ثالثية األبعاد‪.‬‬
‫فيما يمي بعض التعميمات المفيدة‪:‬‬

‫مثاؿ ‪:5‬‬

‫‪%%‬‬
‫‪clear all‬‬
‫;‪close all‬‬
‫;‪clc‬‬
‫)‪subplot(2,1,1‬‬

‫‪-177-‬‬
MATLAB for Numerical Computing-Ch4

x = -3:0.3:3; y = x;
[X,Y]=meshgrid(x,y);
[theat,R] = cart2pol(X,Y);
Z = sinc(R);
contourf(peaks(30), 10)
colorbar
grid on
title('Peaks Function - (CONTOURF & COLORBAR)')

subplot(2,1,2)
plot3(X,Y,Z)
grid on
axis([-3 3 -3 3 -1 1])
title('Sinc Function - (PLOT3)')

:‫الخرج بعد التنفيذ‬


Peaks Function - (CONTOURF & COLORBAR)
30
25 5

20
15 0
10
5 -5
5 10 15 20 25 30

Sinc Function - (PLOT3)

-1
2 3
0 1 2
-1 0
-2 -3 -2

-178-
MATLAB for Numerical Computing-Ch4

:2 ‫مثاؿ‬
%%
clear all
close all;
clc;
subplot(2,1,1)
waterfall(membrane(1));
title('L-shaped Membrane - (WATERFALL)')

subplot(2,1,2)
contour3(peaks(30), 25);
title('Peaks Function - (CONTOUR3)')

:‫الخرج بعد التنفيذ‬

L-shaped Membrane - (WATERFALL)

-1
40
30 40
20 30
10 20
0 0 10

Peaks Function - (CONTOUR3)

10

-10
30 25
20 25 30
15 10 15 20
5 5 10

-179-
MATLAB for Numerical Computing-Ch4

:5 ‫مثاؿ‬

%%
clear all
close all;
clc;
x = -3:0.3:3; y = x;
[X,Y]=meshgrid(x,y);
[theat,R] = cart2pol(X,Y);
Z = sinc(R);
subplot(2,1,1)
mesh(X,Y,Z)
axis([-3 3 -3 3 -1 1])
title('Sinc Function - (MESH)')

subplot(2,1,2)
surf(membrane(1))
title('L-shaped Membrane - (SURF)')

:‫الخرج عمى الشكؿ التالي‬

-180-
MATLAB for Numerical Computing-Ch4

Sinc Function - (MESH)

-1
2 3
0 1 2
-1 0
-2 -3 -2

L-shaped Membrane - (SURF)

-1
40
30 40
20 30
10 20
0 0 10

-181-
‫‪MATLAB for Numerical Computing-Ch4‬‬

‫األسئمة‬
‫‪ .1‬اذكر خمسة مف عبا رات التحكـ بالتدفؽ‬
‫مساعدة‪ :‬قراءة فقرة تعابيير التحكـ بالتدفؽ‬

‫‪ .2‬قـ بكتابة تابع وسمو ‪ checkvariable‬يقوـ بفحص قيمة المتحوؿ واعادة رسالة عمى الشكؿ التالي‪:‬‬
‫إذا كاف المتحوؿ أكبر مف ‪ 1‬أو أصغر مف ‪ -20‬يعيد متحوؿ يحتوي الرسالة " ‪"this variable is invalid‬‬
‫أما إذا كانت القيمة غير ذلؾ أي أصغر مف ‪ 5‬وأكبر مف ‪ -20‬سوؼ يعيد متحوؿ يحوي الرسالة التالية‬
‫”‪“this variable is valid‬‬
‫مساعدة‪ :‬قراءة فقرة عبارة ‪ if‬كامم ًة‬

‫‪ .3‬قـ بكتابة تابع وسمو ‪ checkdays‬يؤخذ التابع دخؿ لو اسـ مف أسماء االسبوع وحسب االسبوع يعيد‬
‫ترتيبو أي‬
‫األحد يظير الرقـ ‪ ....... 1‬السبت يظير الرقـ ‪7‬‬
‫مساعدة‪ :‬قراءة فقرة عبارة ‪switch‬‬

‫‪ .4‬ضمف ممؼ ‪ script‬قـ بكتابة رماز برمجي يقوـ بإظيار كؿ قوى عدد ‪ 2‬ضمف المجاؿ ]‪.[2 – 256‬‬
‫مساعدة‪ :‬قراءة فقرة حمقة ‪while‬‬

‫‪ .5‬ضمف ممؼ ‪ script‬قـ بكتابة رماز برمجي يقوـ بإظيار كؿ اإلعداد الزوجية ضمف المجاؿ‬
‫]‪. [30 – 60‬‬
‫ثـ أنشئ خمية جديدة وقـ بإظيار كافة األعداد الفردية ضمف المجاؿ ]‪.[10 – 40‬‬
‫مساعدة‪ :‬قراءة فقرة حمقة ‪for‬‬

‫‪ .6‬قـ بتعريؼ متحوليف مف نمط ‪ string‬األوؿ يحتوي الكممة ”‪ “TEST‬واالثاني ”‪ “Chapter 4‬ومف ثـ‬
‫قـ بتعريؼ متحوؿ يقوـ بضـ المتحوليف السابقيف بشكؿ أفقي‪.‬‬
‫مساعدة‪ :‬قراءة فقرة السالسؿ المحرفية‬

‫‪ .7‬قـ برسـ التابع الموغاريتمي عمى المجاؿ ‪ 0.1:100‬بخطوة ‪ 0.1‬وذلؾ باسخداـ التعميمات ‪stem ,plot‬‬
‫و ‪ stairs‬و ‪semilogx‬‬
‫قـ بتسمية محور الزمف ب ‪ Time‬ومحور الترتيب ب )‪ Log(t‬إ ضافةً لوضع عنواف لمرسمة وىو‬
‫‪ Plot Log Function‬وتغيير لوف المنحني إلى الموف األسود‬
‫مساعدة‪ :‬قراءة فقرة البيانيات واإلظيار‬

‫‪-182-‬‬
MATLAB for Numerical Computing-Ch4

‫اإلجابات‬
.1
if/elseif/else
for
switch/case/otherwise

try/catch
while
break
continue
end
pause
return

function y = checkvariable( x ) .2
if x < -20
y='this variable is invalid';
elseif x > 5
y='this variable is invalid';
else
y='this variable is valid';
end
End

-183-
MATLAB for Numerical Computing-Ch4

function [ ord_day ] = checkdays( day ) .3


switch day
case{ 'Sunday'}
ord_day=1;
case{ 'Monday'}
ord_day=2;
case{ 'Tuesday'}
ord_day=3;
case{ 'Wednesday'}
ord_day=4;
case{ 'Thursday'}
ord_day=5;
case{ 'Friday'}
ord_day=6;
case{ 'Saturday'}
ord_day=7;
disp(ord_day)
end
End

power = 2; .4
disp(power)
while power < 256
power =power* 2;
disp(power);

end

-184-
MATLAB for Numerical Computing-Ch4

for i = 30 : 2 : 60 .5
disp(i);
End
%%
for i = 11 : 2 : 40
disp(i);

End

str1='TEST ' .6
str2='Chapter 4'
c= [str1,' ',str2]

t=0.1:0.1:100; .7
y=log(t);
plot(t,y,'k');
xlabel('Time');
ylabel('Log(t)');
title('Plot Log Function');
stem(t,y)
stairs(t,y);

semilogx(t,y);

-185-
MATLAB for Numerical Computing-Ch5

،‫ تمثيل المعطيات (استيراد وتصذير المعطيات‬:‫الفصل الخامس‬


)‫ مقذمة عن األدوات‬،‫التعامل مع الصور والملفات الصوتية‬
Data Representations (Data Import & Export, Dealing
with Images & Sounds, Toolboxes)

-1-

-186-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫عنوان الموضوع‪:‬‬
‫تمثيل المعطيات (استيراد وتصدير المعطيات‪ ،‬التعامل مع الصور والممفات الصوتية‪ ،‬مقدمة عن األدوات)‬
‫‪Data Representations (Data Import & Export, Dealing with Images & Sounds,‬‬
‫)‪Toolboxes‬‬
‫الكممات المفتاحية‪:‬‬
‫‪ ،MATLAB‬أنماط المعطيات ‪ ،Data type‬سالسل محرفية ‪ ،string‬محارف ‪ ،characters‬أعداد صحيحة‬
‫‪ ،double ،integer‬فاصمة عائمة ‪ ،floating point‬تحويل ‪ ،conversion‬ممفات دخل ‪ /‬خرج‬
‫‪ ،Input/Output file or I/O file‬صور ‪ ،images‬ممفات صوتية ‪ ،sound files‬األدوات ‪.toolboxes‬‬

‫ممخص‪:‬‬
‫نيتم في ىذا الفصل بالتعرف عمى أنماط المعطيات‪ ،‬وبشكل خاص الصفوف الموجودة ضمن ‪ MATLAB‬من‬
‫أجل تمثيل ىذه المعطيات‪ ،‬ثم ننتقل لمتعرف عمى توابع ‪ MATLAB‬التي تؤمن لنا تحديد نمط المعطيات أو تتيح‬
‫لنا التحويل من نمط إلى آخر مما قد يفيد في حفظ الذاكرة أو تقميل زمن تنفيذ الرماز المكتوب بمغة ‪.MATLAB‬‬
‫ننتقل بعدىا لمتعرف عمى التوابع عالية أو منخفضة المستوى والتي تفيد في التعامل مع ممفات دخل ‪ /‬خرج‪ ،‬حيث‬
‫سيتم قراءة المعطيات من ممف نصي‪ ،‬وتعمم الكتابة بممف نصي‪ ،‬وسيتم أيضًا التعامل مع معطيات مخزنة ضمن‬
‫ممفات برنامج ‪.Excel‬‬
‫نتعرف أيضًا ضمن ىذا الفصل عمى كيفية التعامل مع الصور والممفات الصوتية ضمن ‪ .MATLAB‬ننتقل في‬
‫الجزء األخير لمتعرف عمى األدوات ‪ Toolboxes‬المتوفرة ضمن برمجية ‪.MATLAB‬‬

‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب في ىذا الفصل عمى‪:‬‬
‫‪ ‬التعامل مع مختمف أنماط المعطيات‪.‬‬
‫التعرف عمييا وتحديدىا‪.‬‬
‫‪ ‬إتقان وفيم تحديد أنماط المعطيات و ّ‬
‫‪ ‬استخدام توابع عالية المستوى او منخفضة المستوى في التعامل مع الممفات‪.‬‬
‫‪ ‬استخدام توابع ‪ MATLAB‬الستيراد وتصدير المعطيات وتخزينيا من والى ممفات نصية‪ ،‬أو ممفات‬
‫ال‪.‬‬
‫‪ Excel‬مث ً‬
‫‪ ‬التعامل مع الممفات الصوتية والصور ضمن ‪.MATLAB‬‬
‫‪ ‬التعرف عمى األدوات ‪ Toolboxes‬ضمن ‪ MATLAB‬وتطبيقاتيا المتنوعة‪.‬‬

‫‪-187-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪Data types‬‬ ‫أنماط المعطيات‬


‫قدمنا ضمن فقرة (العمل مع المتحوالت ضمن ‪ MATLAB‬في الفصل الثاني من ىذا المقرر) شرحًا عن أنماط‬
‫المعطيات والصفوف المتوفرة ضمن ‪ ،MATLAB‬وبعد التعامل مع ‪ MATLAB‬ضمن الفصول السابقة أصبحت‬
‫الميزة التالية واضحة ألي مستخدم لمبرمجية‪ ،‬وىي أنو ال حاجة لتعريف نمط أو تحديد أبعاد أي متحول ضمن‬
‫‪ ،MALTAB‬حيث يقوم المستخدم بتعريف المتحول الجديد حص ًار عن طريق تعريف اسمو واسناد قيمة لو‪ ،‬ثم يتم‬
‫إسناد نمط وحجز موقع لو تمقائيًا في الذاكرة‪ ،‬ومن الممكن لممستخدم التعديل عمى قيم المتحول أو إضافة قيم‬
‫سمميًا ثم يصبح شعاعاً من القيم السممية‪.‬‬
‫جديدة كأن يكون المتحول عنص اًر ّ‬
‫سنقدم اآلن تذكرة سريعة هبذه األمناط مث سننتقل إىل فقرتني مهمتني‪:‬‬
‫التعرف عمى(تحديد) أنماط المعطيات ‪.Data Taype Indentification‬‬
‫ّ‬ ‫‪‬‬
‫‪ ‬التحويل بين أنماط المتحوالت ‪.Data Type Conversion‬‬
‫يبين الشكل التالي الصفوف الرئيسية الموجودة ضمن ‪.MATLAB‬‬

‫يوجد ضمن برمجية ‪ MATLAB‬العديد من انماط المعطيات المتنوعة‪ ،‬أو ما يعرف بالصفوف ‪ ،Classes‬والتي‬
‫يستطيع المبرمج استخداميا‪ ،‬حيث يمكن بناء مصفوفات وصفيفات من معطيات صحيحة ‪ ،integer‬باستخدام‬
‫الفاصمة العائمة ‪ ،floating point‬محارف ‪ ،characters‬سالسل محرفية ‪ ،strings‬أو متحوالت منطقية ( ‪true‬‬
‫‪ .)or false‬إضاف ًة لما سبق يمكن استخدام ‪ struct‬أو خمية صفيفات ‪ cell arrays‬من أجل تخزين المعطيات‬
‫المتباينة (غير المتشابية) مثالً اسم الموظف‪ ،‬رقمو‪ ،‬عمره‪ ،‬أيام عممو‪.‬‬

‫‪-188-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪Data Type Identification‬‬ ‫التعرف عمى (تحديد) أنماط المعطيات‬


‫ّ‬
‫يبتضمن ‪ MATLAB‬عمى العديد من التوابع المبنية والتي تفيد المستخدم في تحديد نمط المعطيات لمتحول ما‪،‬‬
‫نعرض في الجدول التالي ىذه التوابع إضاف ًة إلى الغرض ‪ purpose‬من استخداميا‪:‬‬

‫ال‬
‫يجب عمى الطالب قراءة التوابع السابقة ومعرفة عمميا بشكل دقيق فيي مفيدة جداً في الكثير من التطبيقات مث ً‬
‫ال من الضروري فحص‬
‫عند تطوير برامج‪ ،‬أو بناء واجيات تخاطبية أو حتى بناء توابع تحل مشكمة معينة‪ ،‬فمث ً‬
‫الدخل قبل البدء بالعمميات‪.‬‬
‫مثال‪ :‬اليدف ىو استخدام بعض من التوابع السابقة‪ .‬قم بكتابة الرماز التالي‪ ،‬وفسر نتيجة خرجو‪.‬‬
‫;‪x =3‬‬
‫)‪isinteger(x‬‬

‫‪-189-‬‬
MATLAB for Numerical Computing-Ch5

isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
y =23.54;
isinteger(y)
isfloat(y)
isvector(y)
isscalar(y)
isnumeric(y)

:‫مثال‬
:‫ وفقًا لما يمي‬،‫لنقم ببناء تابع يقوم بتحديد عدد األيام ضمن شير ما يقوم المستخدم بإدخالو‬
.‫ الدخل ىو عبارة عن اسم الشير‬
.switch ‫ يجب استخدام تعميمة‬
.‫ القيمة المعادة من التابع ىي عدد أيام الشير‬
:‫يعيد التابع رسالة خطأ في الحاالت التالية‬ 
.‫ الدخل ليس كممة‬
.‫ الدخل ليس اسم لشير من أشير السنة‬
.‫ يبين الرماز التالي التابع المبني لمقيام بالوظيفة السابقة‬:‫الحل‬
function [ days ] = days_in_month( month )
% Returns the number of days for a given month
if ~ischar(month)
days=sprintf('Error: you did not enter the name of a month');
return
end
switch month
case{ 'january' 'march' 'may' 'july' 'august' 'october' 'december'}
days=31;
case { 'april' 'june' 'september' 'november' }

-190-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫;‪days =30‬‬
‫} '‪case {'february‬‬
‫;‪days=28‬‬
‫‪otherwise‬‬
‫;)‪days=sprintf('%s is not the name of a month',month‬‬
‫)‪disp(days‬‬
‫‪end‬‬

‫‪end‬‬

‫بعد فيم التابع‪ ،‬قم بإنشاء ممف ‪ script‬واختبر التابع السابق‪.‬‬


‫نالحظ استخدام التابع ‪ ischar‬لمتأكد من كون الدخل ىو محرف‪.‬‬
‫ينصح دومًا باستخدام ىذه التوابع عند الحاجة وذلك من أجل بناء توابع او برامج ميمة وذات تطبيق عممي بحيث‬
‫تناقش جميع الحاالت لمدخل‪ ،‬كما بنصح دوماً باستخداميا مع تعميمة ‪.if‬‬

‫‪Data Type Conversion‬‬ ‫التحويل بين أنماط المعطيات‬


‫يحتوي ‪ MATLAB‬عمى العديد من التوابع المبنية والتي تفيد المستخدم في التحويل بين نمط معطيات ما ونمط‬
‫آخر‪ ،‬نعرض فيما يمي التوابع المفيدة في عممية التحويل ىذه‪:‬‬

‫‪-191-‬‬
MATLAB for Numerical Computing-Ch5

‫ يجب االطالع عمييا بشكل مفصل إضافةً لمشرح واألمثمة‬،‫تفيد ىذه التوابع كثي ًار عند بناء الواجيات التخاطبية‬
:‫ وذلك وفقاً لممسار التالي‬Help ‫ضمن‬
MATLAB  Language Fundamentals  Data Types  Data Type conversion 
converting from Numeric to String
‫و‬
MATLAB  Language Fundamentals  Data Types  Data Type conversion 
converting from String to Numeric

-192-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪Data Import‬‬ ‫استيراد المعطيات‬


‫يعني استيراد المعطيات ضمن ‪ MATLAB‬جمبيا من ممف خارجي‪ ،‬مثالً ممف ‪ .text‬يمكن باستخدام التابع‬
‫‪ importdata‬استيراد أنواع مختمفة من ممفات المعطيات وبعدة أشكال وصيغ‪ ،‬نعرض فيما يمي الصيغ التي‬
‫تؤخذىا التعميمة‪:‬‬
‫الوصف‬ ‫صيغة التابع‬

‫تقوم ىذه التعميمة بجمب المعطيات وتخرينيا ضمن‬ ‫) ‪A = importdata( filename‬‬


‫الصفيفة ‪ A‬من ممف اسمو ‪ ،filename‬أي االسم الذي يقوم‬
‫متعددة‬
‫المستخدم بتحديده‪ .‬الخرج ىو عبارة مصفوفة أو صفيفة ّ‬
‫يفضل أيضًا ذكر الحقة الممف‪.‬‬
‫األبعاد حسب طبيعة الممف‪ّ .‬‬
‫تقوم ىذه التعميمة بجمب المعطيات من ذاكرة التخزين‬ ‫)'‪A = importdata('-pastespecial‬‬
‫المؤقتة عوضاً عن الممف‪.‬‬
‫إن ‪ delimiterIn‬ىو عبارة المحرف الخاص لفصل‬ ‫‪A = importdata( ____ , delimiterIn‬‬
‫األعمدة ضمن ممف ‪ ،ASCII‬أو الممف الذي يقوم المستخدم‬ ‫)‬
‫بتطبيق التعميمة عميو‪ ،‬أو الذاكرة المؤقتة‪ .‬يمكن استخدام‬
‫‪ delimiterIn‬مع الشكمين القواعديين السابقين‪.‬‬
‫يتم تحديده كسمسمة محرفية ‪ ،string‬أمثمة‪:‬‬
‫'‪ ',‬أو ' '‬
‫جمب المعطيات من ممف ‪ ،ASCII‬أو الممف الذي‬ ‫‪A‬‬ ‫=‬ ‫(‪importdata‬‬ ‫____‬ ‫‪,‬‬
‫يقوم المستخدم بتطبيق التعميمة عميو‪ ،‬أو الذاكرة المؤقتة ويتم‬ ‫)‪delimiterIn, headerlinesIn‬‬
‫ابتداء من‪:‬‬
‫ً‬ ‫قراءة المعطيات‬

‫‪headerlinesIn+1‬‬
‫يمكن عند كتابة التعميمة بالشكل التالي الحصول عمى‬ ‫]‪[A, delimiterOut, headerlinesOut‬‬
‫المعطيات مخرنة في ‪ A‬إضاف ًة لمحصول عمى محرف‬ ‫) ‪= importdata( filename‬‬
‫‪ delimiter‬المستخدم ضمن الممف لمفصل بين عناصر و‬
‫الحصول عمى عدد سطور رأس الممف ‪ header‬ضمن الممف‪.‬‬
‫مالحظة مهمة جداً جداً جداً‪:‬‬
‫يوجد ممفات مرفقة مع الفصل الحالي‪ ،‬عبارة عن ممفات معطيات وصور يرجى وضعيا ضمن مسار العمل‬
‫الحالي من أجل تطبيق التعميمات التالية واال سيعطي التنفيذ خطأ‪.‬‬
‫مثال ‪:1‬‬
‫سنقوم باستيراد وعرض صورة‪ ،‬مخزنة باسم والحقة ‪ Koala.png‬ومن ثم صورة ‪Desert.jpg‬‬

‫‪-193-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫عند تنفيذ أول ثالثة أسطر نحصل عمى الخرج التالي‪:‬‬

‫‪100‬‬

‫‪200‬‬

‫‪300‬‬

‫‪400‬‬

‫‪500‬‬

‫‪600‬‬

‫‪700‬‬

‫‪100‬‬ ‫‪200‬‬ ‫‪300‬‬ ‫‪400‬‬ ‫‪500‬‬ ‫‪600‬‬ ‫‪700‬‬ ‫‪800‬‬ ‫‪900‬‬ ‫‪1000‬‬

‫ثم بعد تنفيذ آخر ثالثة أسطر نحصل عمى‬

‫‪-194-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪100‬‬

‫‪200‬‬

‫‪300‬‬

‫‪400‬‬

‫‪500‬‬

‫‪600‬‬

‫‪700‬‬

‫‪100‬‬ ‫‪200‬‬ ‫‪300‬‬ ‫‪400‬‬ ‫‪500‬‬ ‫‪600‬‬ ‫‪700‬‬ ‫‪800‬‬ ‫‪900‬‬ ‫‪1000‬‬

‫مالحظة‪ :‬قم بتجريب الرماز السابق عمى كافة الصور الموجودة في الممف المرفق‪.‬‬
‫مثال‪ :‬نرغب في ىذا المثال في استيراد ممف نصي باسم ‪ weeklydata.txt‬وسيتم تحديد ‪ Delimiter‬إضاف ًة‬
‫إلى ‪.Column Header‬يوضح الشكل التالي المعطيات الموجودة ضمن الممف‪.‬‬

‫نقوم بكتابة الرماز التالي‪:‬‬

‫‪-195-‬‬
MATLAB for Numerical Computing-Ch5

:‫الخرج عمى الشكل التالي‬

-196-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫مثال‪ :‬سنقوم في ىذا المثال باستيراد معطيات من الذاكرة المؤقتة‪.‬‬


‫ضمن ممف ‪ script‬مثالً ثم اكتب التعميمة التالية‪:‬‬
‫)'‪A = importdata('-pastespecial‬‬
‫ثم اكتب عبارة ! ‪I love MATLAB course‬‬
‫ونفذ التعميمة السابقة فقط والحظ الخرج‪.‬‬
‫أو أنشئ ممف نصي واكتب بو بعض الكممان ثم نفذ التعميمة والحظ الخرج ضمن ‪.MATLAB‬‬

‫مثال‪ :‬أنشئ ممف نصي باسم ‪ mydata.txt‬عمى الشكل التالي‪:‬‬

‫‪-197-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫ثم قم بكتابة الرماز التالي‪:‬‬


‫‪%%‬‬
‫;‪clear all;close all;clc‬‬
‫;'‪filename = 'mydata.txt‬‬
‫)‪[A,delimiterOut]=importdata(filename‬‬

‫الخرج ىو‪:‬‬

‫نالحظ أن ‪ MATLAB‬قام بمعرفة ‪ delimiter‬تمقائيًا‪.‬‬


‫يمكن إضافةً لما سبق التعامل مع المتحوالت الموجودة ضمن فضاء العمل ‪ ،Worksapce‬فمثالً من المفيد‬
‫أحياناً حفظ قيم المتحوالت ضمن ممف ما إلعادة استخدامو في وقت الحق‪.‬‬

‫‪-198-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫يتيح لنا ‪ MATLAB‬العديد من الخيا رات لمتعامل مع المتحوالت ضمن فضاء العمل مثل استيرد المتحول‪ ،‬حفظو‬
‫وحذفو ‪ ،load, save and delete‬حيث يتم حفظ ىذه المتحوالت إلى ‪ MAT-file‬بالحقة )‪.(.mat‬‬
‫من أجل حفظ المتحول أو جميع المتحوالت ضمن فضاء العمل يمكن من خالل ‪ Toolstrip‬ضمن جزء‬
‫‪ ،Home‬ضمن قسم ‪ Variable‬استخدام الخيار ‪ Save Worksapce‬كما في الشكل‪.‬‬

‫أو يمكن الضغظ عمى المتحول ضمن فضاء العمل ثم الضغط عمى الزر اليميني لمفأرة يظير عدة خيارات‪،‬‬
‫يمكن اختيار ‪ ،save as‬او استخدام التوابع مثل تابع ‪.save‬‬
‫من أجل استيراد المتحول يمكن استخدام التابع ‪ load‬ح يث يستخدم ىذا التابع بشكل عام من اجل جمب‬
‫المعطيات المخزنة بممف ‪ .mat‬إلى فضاء العمل‪ ،‬أما من أجل مسح المتحوالت فكما تعممنا مسبقًا باستخدام‬
‫‪.clear‬‬
‫مثال‪:‬‬
‫سنقوم باستيراد ممف ‪ cloudwater.dat‬ومن ثم غظيار النتائج‪ ،‬يحتوي ىذا الممف عمى قيم مخزنة مسبقاً ألحد‬
‫المتحوالت ضمن ‪ Worspace‬ونرغب في رسميا‪ ،‬يجب التأكد من وضع الممف ضمن مسار العمل‪.‬‬
‫ومن ثم سنقوم ببعض العمميات عمى المعطيات من أجل إظيار الشكل الميم ىو فيم كيفية استيراد ممف‬
‫المعطيات اما العمميات فيي ليست ضرورية اآلن‪.‬‬

‫‪-199-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫الخرج ىو‪:‬‬

‫مثال‪ :‬سنقوم في ىذا المثال باستيراد معطيات من ممف ‪ excel‬بالحقة ‪..csv‬‬


‫يقوم البرنامج الذي سنقوم بكتابتو بتقديم بعض المعمومات اإلحصائية لمجموعة من معطيات األسعار اليومية‬
‫ألحد المخازن وذلك ضمن فترة معينة ممتدة بين عام ‪ 2002‬و ‪ 2012‬حيث يقوم بإيجاد المتوسط لألسعار لكل‬
‫السنوات إضافةً لممتوسط لكل سنة عمى حدى‪ ،‬المعطيات باسم ‪ sample_data.csv‬ال تنسى وضعيا ضمن‬
‫مسار العمل‪.‬‬
‫قم بكتابة الرماز التالي‪:‬‬

‫والحظ الخرج‪.‬‬
‫‪ ‬التعامل مع ممفات دخل‪ /‬خرج بتعميمات منخفضة المستوى ‪Low-Level File I/O‬‬

‫‪-200-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫وجدنا في الشرح السابق أن استخدام تابع ‪ importdata‬يتيح لنا استيراد المعطيات‪ ،‬إال أن ىذا التابع يعمل عمى‬
‫مستوى مرتفع ‪ .High Level‬تتيح لنا توابع منخفضة المستوى ‪ Low Level‬المخصصة لمتعامل مع ممفات‬
‫دخل‪ /‬خرج تحكم أكبر وخيارات أرسع في قراءة أو كتابة المعطيات إلى ممف‪ ،‬إال أنيا تحتاج إلى معمومات أكثر‬
‫فعال‪.‬‬
‫عن الممف المطموب العمل عميو وذلك لضمان عمميا بشكل ّ‬
‫يؤمن ‪ MATLAB‬عدد من التوابع إلجراء عمميات القراءة أو الكتابة عمى مستوى البايت ‪ byte‬أو المحرف‬
‫‪ ،character‬يعرض الجدول التالي ىذه التوابع‪:‬‬

‫لنتعمم اآلن كيفية استيراد المعطيات من ممف نصي باستخدام تعميمات دخل‪ /‬خرج منخفضة المستوى ‪Low-‬‬
‫‪Level I/O‬‬
‫عادة االستعانة بالتوابع التالية لمتعامل مع الممفات النصية‪:‬‬
‫يتم ً‬
‫‪ ‬تابع ‪ fscanf‬يقوم بقراءة المعطيات الموجودة في ممف نصي أو ممف ‪.ASCII‬‬
‫‪ ‬تابعي ‪ fgetl‬و ‪ fgets‬تق أر سطر واحد من الممف عند تنفيذىا لمرة واحدة‪ .‬والفرق بين التابعين ىو في‬
‫المحافظة عمى أحرف السطر الجديد أم عدميا‪.‬‬
‫تابع ‪ fread‬يقوم بقراءة دفقة من المعطيات عمى مستوى البايت ‪ byte‬أو البت ‪.bit‬‬ ‫‪‬‬
‫مثال‪:‬‬
‫لدينا ممف معطيات باسم ‪ myfile.txt‬تم حفظو ضمن مسار العمل‪ ،‬تم تخزين ضمن ىذا الممف معطيات عن‬
‫سقوط األمطال لثالثة أشير ىي ‪ June‬و ‪ July‬و ‪ August‬في عام ‪.2012‬‬

‫‪-201-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫مكررة من الزمن‪ ،‬الشير‪ ،‬وقياسات ىطول‬


‫إن المعطيات المخزنة ضمن الممف ‪ myfile.txt‬تحتوي مجموعة ّ‬
‫األمطال في خمسة اماكن‪ ،‬بادئة الممف ‪ header‬يحتوي عمى عدد األشير ‪ M‬لذلك سيكون لدينا ‪ M‬مجموعة‬
‫من القياسات‪.‬‬
‫المعطيات موضحة في الشكل التالي‪:‬‬

‫سنقوم باستيراد المعطيات من الممف ومن ثم عرض ىذه المعطيات‪ ،‬وذلك باتباع الخطوات التالية‪:‬‬
‫‪ .1‬فتح الممف باستخدام تعميمة ‪ fopen‬والحصول عمى معرف الممف ‪.file IDentifier‬‬
‫‪ .2‬ـوصيف المعطيات ضمن الممف باستخدام ‪ format specifiers‬مثل '‪ '%s‬لـمسالسل المحرفية‬
‫‪floating‬‬ ‫‪ '%d' ،string‬لـألعداد الصحيحة ‪ ،integer‬و'‪ '%f‬لألعداد الممثمة بالفاصمة العائمة‬
‫‪.point‬‬

‫‪-202-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪ .3‬من أجل إىمال أحرف ضمن الممف‪ ،‬يجب تضمنييم ضمن ‪ format description‬الخاص بالتعميمة‬
‫‪ fscanf‬حيث يجب استخدام )*( ثم نمط أو صيغة المعطيات التي ترغب بإىماليا مثالً لمحصول عمى‬
‫قيمة ‪ M‬المخزنة ضمن الممف استخدام الرماز التالي‪:‬‬
‫;)‪M = fscanf(fid,'%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n',1‬‬

‫‪ .4‬تقوم تعميمة ‪ fscanf‬تمقائيًا بق راءة المعطيات وذلك تبعًا لتوصيف الصيغ ‪ format description‬الذي‬
‫قمنا بوضعو إلى حين لم تعد قادرة عمى الموافقة بين المعطيات والتوصيف الذي قمنا بكتبابتو‪ ،‬سنقوم‬
‫في ىذا الرماز باستخدام حمقة ‪ for‬من أجل قراءة ثالث مجموعات من المعطيات كل مرة‪ ،‬وسيتم قراءة‬
‫سبعة أسطر و خمس أعمدة‪.‬‬
‫‪ .5‬سيتم إنشاء ‪ struct‬يدعى ‪ Mydata‬من أجل حفظ المعطيات‪ ،‬التي تم قرائتيا من الممف‪ ،‬ضمنو‬
‫ضمن فضاء العمل ‪ .workspace‬تحتوي ىذه البنية ‪ struct‬عمى ثالثة حقول ىي ‪time, month‬‬
‫‪.and raindata aaray‬‬
‫قم بكتابة الرماز التالي‪ ،‬وال تنسى بوضع ممف المعطيات ضمن مسار العمل‪:‬‬

‫الخرج عمى الشكل التالي‪:‬‬

‫‪-203-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪Data Export‬‬ ‫تصدير المعطيات‬


‫نقصد بتصدير المعطيات ‪ data export‬ىو كتابة المعطيات ضمن ممفات‪ .‬يتيح لنا ‪ MATLAB‬استخدام‬
‫المعطيات ضمن تطبيقات أخرى تستطيع قراءة ممفات ‪ ،ASCII‬ىذه الطرق عديدة سنركز في ىذه الفقرة عمى‬
‫تصدير المعطيات إلى ممف نصي باستخدام تعميمات ‪.Low-Level I/O‬‬

‫مثال‪ :‬اكتب الرماز التالي‬

‫‪-204-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫الخرج عمى الشكل التالي وىو عبارة عن ممف نصي‪.‬‬

‫‪Dealing with Images‬‬ ‫التعامل مع الصور‬


‫نحتاج في عدد كبير من التطبيقات إلى التعامل مع الصور‪ ،‬يؤمن لنا ‪ MATLAB‬عدد كبير من التوابع التي‬
‫تتعامل مع الصور بيدف تطبيق مفاىيم معالجة الصورة ‪ ،image precessing‬سنركز في ذه الفقرة فقط عمى‬
‫عد ةتعميمات من أجل قراءة الصورة واظيارىا‪.‬‬

‫‪-205-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫لو بعدين ‪ x,y‬ويعبر مطالو عن شدة اإلضاءة من أجل‬ ‫يمكن النظر إلى أي صورة كتابع لمتحولين‬
‫النقطة )‪ .(x,y‬حيث تتكون الصورة من مجموعة عناصر منتيية ندعوىا ‪ ،pixel‬وبالتالي يمكن تمثيل المصفوفة‬
‫كما في الشكل التالي‪:‬‬ ‫عمى شكل مصفوفة‬

‫يوجد أنواع عديدة من الصور نذكر منيا‪ PNG, JPEG, GIF, TIFF, BMP :‬حيث تختمف الصور حسب‬
‫طريقة تخزينيا وترميزىا‪.‬‬
‫سنستخدم التوابع التالية لمتعامل مع الصور‪:‬‬
‫‪ imread ‬لقراءة الصورة‪.‬‬
‫‪ imshow ‬إلظيار الصورة‪.‬‬
‫‪ imwrite‬لكتابة الصورة ضمن ممف جديد‪.‬‬ ‫‪‬‬
‫‪ iminfo‬لعرض معمومات عن الصورة‪.‬‬ ‫‪‬‬
‫مثال‪ :‬سنقوم في ىذا المثال بقراءة صورة‪ ،‬ثم إظيارىا ومعرفة بعض المعمومات عنيا‪ ،‬ثم كتابة ىذه الصورة‬
‫ضمن ممف جديد اسمو ‪ yourname.jpeg‬أي تغيير الحقة الصورة‪.‬‬

‫‪-206-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫الخرج‪:‬‬

‫سيتم إنشاء ‪ struct‬ضمن فضاء العمل قم بفتحو لمعرفة معمومات غضافية عن الصورة‪ ،‬وتفقد مسار العمل‬
‫والحظ إنشاء صورة جديدة باسم والحقة ‪.yourname.jpeg‬‬

‫‪Dealing with Sounds‬‬ ‫التعامل مع الممفات الصوتية‬


‫يعتبر التعامل مع الممفات جزءًا ىامًا في معظم تطبيقات الحياة اليومية وخاصة نقل الصوت أو التعديل عميو أو‬
‫التردد األساسي لصوتنا ومن الممكن‬
‫ال يمكن لنا معرفة ّ‬ ‫كشف بعض الخواص اإلحصائية المميزة لمصوت‪ ،‬فمث ً‬
‫تطبيق خوارزميات لمتعديل عمى النغمات واألصوات ومن ثم تطبيق مفاىيم معالجة اإلشارة الكالمية لتحسين جودة‬
‫الصوت‪ ،‬ومن الممكن ايضًا تطبيق خوارزميات ضغط الصوت المستخدمة في األجيزة الخموية مثالً‪.‬‬
‫مثال‪ :‬سنقوم بتسجيل صوت عن المايك وذلك باستخدام الرماز التالي‪ ،‬يطمب عند بدأ التسجيل أن تتكمم من اجل‬
‫سماع صوتك بعد تسجيل المقطع‪.‬‬

‫‪-207-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫يتم التسجيل لمدة خمسة ثواني‪.‬‬


‫مثال‪ : 2‬نعرض في ىذا المثال تعميمات لتسجيل ممف صوتي من نوع ‪ wav‬ىذه التعميمات لم تعد مستخدمة في‬
‫النسخ الحديثة من ‪ MATLAB‬وقد تم استبداليا بالتعميمات السابقة‪ ،‬اليدف ىو فقط االطالع عمييا‪.‬‬

‫نقوم بتسجيل المقطع الصوتي‪ ،‬ثم نقوم بتشغيمو بعد تضخيمو ‪ 20‬مرة ومن ثم نقوم برسمو‪.‬‬
‫‪Recorded Sound‬‬
‫‪0.1‬‬

‫‪0.08‬‬

‫‪0.06‬‬

‫‪0.04‬‬

‫‪0.02‬‬

‫‪0‬‬

‫‪-0.02‬‬

‫‪-0.04‬‬

‫‪-0.06‬‬

‫‪-0.08‬‬

‫‪-0.1‬‬
‫‪0‬‬ ‫‪0.5‬‬ ‫‪1‬‬ ‫‪1.5‬‬ ‫‪2‬‬ ‫‪2.5‬‬ ‫‪3‬‬ ‫‪3.5‬‬
‫‪4‬‬
‫‪x 10‬‬

‫‪-208-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪Toolboxes‬‬ ‫األدوات‬
‫العددية‪ ،‬إال أن ‪ MATLAB‬تقدم‬
‫عمى الرغم من أن اليدف األساسي لبرمجية ‪ MATLAB‬ىو إجراء الحسابات ّ‬
‫مجموعة متنوعة من اإلضافات ‪ extensions‬والمكاتب ‪ libraries‬الخاصة بالبرمجية‪ ،‬وذلك عمى غرار مختمف‬
‫لغات البرمجة‪ ،‬ىذه اإلضافات مفيدة في طيف واسع من التطبيقات‪.‬‬
‫قام المطورون والقائمون عمى إعداد واخراج البرمجية‪ ،‬بتجميع عدد كبير وشامل من المكاتب ‪libraries‬‬
‫معين‪ ،‬وتطويرىا واخراجيا عمى شكل أداة ‪ Toolbox‬تفيد‬
‫والتوابع ‪ functions‬المتخصصة بتطبيق أو مجال ّ‬
‫محدد ‪ application-specific solutions‬أو صف خاص من المشكالت ‪،‬‬
‫المستخدم في إيجاد حمول لتطبيق ّ‬
‫ىذه المكاتب السابقة تدعى األدوات ‪.Toolboxes‬‬
‫‪Toolboxes are comprehensive collections of libraries, MATLAB functions (M-files),‬‬
‫‪and Routines that are designed to provide application-specific solutions and solve‬‬
‫‪particular classes of problems‬‬
‫يعتبر استخدام ‪ toolboxes‬أم اًر ميماً لغالبية مستخدمي ‪ ،MATLAB‬وذلك ألنيا تتيح لك تعمم و تطبيق تقانات‬
‫ال واسعًا من‬
‫وخوارزميات في مجاالت واختصاصات مختمفة‪ ،‬تغطي ‪ Toolboxes‬ضمن ‪ MATLAB‬مجا ً‬
‫ال‬
‫ابتداء من تقديم وسيمة أبسط عن طريق برامج إلجراء حسابات اعتيادية‪ ،‬كحساب مقموب مصفوفة مث ً‬
‫ً‬ ‫التطبيقات‬
‫أو ترشيح إشارة بمرشح ما‪ ،‬مرو اًر بتطبيق خوارزميات معينة في مجال ما عمى الدخل مباشرًة دون الخوض في‬
‫تفاصيل تنجيز الخوارزمية‪ ،‬مثالً تطبيق خوارزميات معالجة الصور عمى الصور كإيجاد الحواف أو كشف‬
‫انتياء بالحصول عمى نتائج‪ ،‬في التنبؤ أو االستيفاء مثالً‪ ،‬ال يمكنك الحصول عمييا مباشرةً دون ىذه‬
‫الوجوه‪ ،‬و ً‬
‫األدوات‪.‬‬
‫‪Toolboxes will make your life easier because you don't have to write them, and test‬‬
‫‪them‬‬
‫نذكر بعض من المجاالت واالختصاصات التي تشتمل عمييا ‪MATLAB Toolboxes:‬‬
‫معالجة اإلشارة والصورة‬
‫أنظمة التحكم‬
‫الشبكات العصبونية ‪Neural Networks‬‬
‫االتصاالت‬
‫الرياضيات واإلحصاء واألمثمة ‪.Optimization‬‬
‫يمكن االطالع عمى جميع ‪ toolboxes‬المتوفرة ضمن برمجية ‪ ،MATLAB‬عن طريق زيارة الموقع االلكتروني‬
‫لشركة ®‪ MathWorks‬والدخول إلى ‪.Products‬‬
‫‪http://www.mathworks.com/‬‬

‫الصور التالية تعرض بعض المنتجات والخدمات المتعمقة ب ‪ MATLAB‬واضاف ًة إلى األدوات ‪Toolboxes‬‬
‫متعددة‪ ،‬حيث تسعى شركة‬
‫ّ‬ ‫التي تؤمنيا شركة ®‪ MathWorks‬وذلك ضمن مجاالت مختمفة وتطبيقات‬

‫‪-209-‬‬
MATLAB for Numerical Computing-Ch5

‫ أو إضافة تحسينات‬MATLAB ‫ جديدة مع كل إصدار جديد لبرمجية‬Toolboxes ‫ إلى إضافة‬MathWorks®


.‫ الموجودة مسبقًا‬Toolboxes ‫لجميع‬
http://www.mathworks.com/products/?s_tid=gn_ps

-210-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫إن جميع ‪ Toolboxes‬السابقة جرى مكاممتيا مع‬


‫بيئة ‪ MATLAB‬ضمن الواجية الرئيسية‪ ،‬يمكن معرفة جميع ال ـ ‪ toolboxes‬المرفقة مع النسخة الخاصة بك من‬
‫‪ MATLAB‬عن طريق التعميمة ‪ ،ver‬يمكن كتابتيا ضمن ‪ Command Window‬لمعرفة المعمومات السابقة‪.‬‬
‫من أجل الوصول إلى ‪ toolboxes‬ضمن البرمجية‪ ،‬يمكن استخدام ‪Toolstrip‬‬

‫ضمن ‪ Toolstrip‬اضغط عمى ‪Apps‬‬

‫ستجد الواجية التالية‬

‫يمكن رؤية كافة ‪ Toolboxes‬المتاحة لك ضمن نسخة البرمجية‪ ،‬وفتحيا عم طريق الضغط عمى السيم‬
‫الموضح في الصورة التالية‬

‫‪-211-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫ستظير أمامك الواجية التالية‬

‫سي‬

‫سيس‬

‫ال توضح ىذه الصورة كافة‬


‫نالحظ انيا مقسمة وفقًا لالختصاصات أو المجاالت التي تدعميا ىذه األدوات‪ .‬مث ً‬
‫ال‪ Toolboxes‬المتخصصة في مجال معالجة اإلشارة واالتصاالت‪.‬‬

‫ال لن نقوم بالخوض في تفاصيل ىذه األدوات وال بالشرح‬


‫مالحظة‪ :‬إن شرح أي أداة ‪ toolbox‬يتطمب مقر اًر كام ً‬
‫اليدف ىو عرض ىذه الغضافات الموجودة ضمن ‪ ، MATLAB‬وفي حالة الحاجة ليا يمكن التعمم عمييا عن‬
‫طريق ‪ MATLAB Help‬أو عن طريق فيديوىات تعميمية متوفرة عمى االنترنت أو عن طريق ممفات تزود بيا‬
‫الشركة أو دروس لجامعات ميتمة في األداة المرغوبة‪.‬‬

‫‪-212-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫األسئمة‬
‫‪ .1‬اذكر خمسة من توابع التعرف عمى أنماط المعطيات مع ذكر عمميا ( ‪)Data Type Identification‬‬
‫مساعدة‪ :‬قراءة فقرة التعرف عمى أنماط المعطيات‬

‫‪ .2‬ما ىو خرج الرماز التالي‪:‬‬


‫;‪x =4‬‬
‫)‪isinteger(x‬‬
‫)‪isfloat(x‬‬
‫)‪isvector(x‬‬
‫)‪isscalar(x‬‬
‫)‪isnumeric(x‬‬

‫مساعدة‪ :‬قراءة فقرة التعرف عمى أنماط المعطيات‬

‫‪ .3‬اذكر خمسة من توابع التحوبل بين أنماط المعطيات مع ذكر عمميا (‪)Data Type Conversion‬‬
‫مساعدة‪ :‬قراءة فقرة التحويل عمى أنماط المعطيات‬

‫‪ .4‬في حالة لدينا ممف نصي باسم ‪ mydata.txt‬عمى الشكل التالي‪:‬‬

‫‪-213-‬‬
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫ال بمسح جميع المتحوالت التي تم تعريفيا ومسح‬


‫ضمن ممف ‪ script‬قم بكتابة رماز برمجي تقوم بو أو ً‬
‫محتويات ‪ Command Window‬واغالق جميع األشكال ثم باستيراد المعطيات الموجودة ضمنو الخرج‬
‫ىو المعطيات مع معرفة ‪delimiter‬‬
‫مساعدة‪ :‬قراءة فقرة استيراد المعطيات‬

‫مفصل‪:‬‬
‫‪ .5‬قم بشرح عمل الرماز التالي بشكل ّ‬
‫;‪x = 0:0.01:2*pi‬‬
‫;])‪y = [x ;cos (x‬‬
‫;)'‪fid = fopen('costable.txt', 'w‬‬
‫‪fprintf(fid, 't‬‬ ‫;)'‪Cos(t)\n\n‬‬
‫;)‪fprintf(fid, '%f %f\n', y‬‬
‫;)‪fclose(fid‬‬

‫مساعدة‪ :‬قراءة فقرة تصدير المعطيات‬

‫‪ .6‬قم بكتابة رماز برمجي من أجل قراءة صورة باسم ‪ testch5.png‬ومن ثم قم بعرضيا واستخدم توابع‬
‫‪ MATLAB‬لمعرفة بعض المعمومات عن الصورة‬
‫مساعدة‪ :‬قراءة فقرة التعامل مع الصوت‬

‫مفصل‬
‫‪ .7‬قم بشرح الرماز التالي بشكل ّ‬
‫;‪Fs=12e3‬‬
‫;‪npoints=5*Fs‬‬
‫;)‪sound_rec=wavrecord(npoints,Fs‬‬
‫;)‪wavplay(30*sound_rec,Fs‬‬

‫مساعدة‪ :‬قراءة فقرة التعامل مع الممفات الصوتية‬

‫‪-214-‬‬
MATLAB for Numerical Computing-Ch5

‫اإلجابات‬
.1

0 .2
1
1
1
1

-215-
MATLAB for Numerical Computing-Ch5

.3

%% .4
clear all;close all;clc;
filename = 'mydata.txt';
[A,delimiterOut]=importdata(filename)

-216-
‫‪MATLAB for Numerical Computing-Ch5‬‬

‫‪ [0 -‬بخطوة ‪0.01‬‬ ‫‪ .5‬السطر األول يتم تعريف شعاع من القيم ضمن المجال ]‬
‫السطر الثاني يتم تعريف مصفوفة بسطرين تحوي عمى المعطيات التي جرى تعريفيا في السطر السابق‬
‫كشعاع لمزمن أم السطر الثاني فيو قيم التابع ‪ cos‬عند النقاط السابقة‬
‫السطر الثالث يتم فتح ممف نصي جديد باسم ‪ costable‬بالحقة ‪ .txt‬وتعريفو ضمن ‪ MATLAB‬عمى‬
‫انو متحول يدعى ‪fid‬‬
‫السطر الرابع يتم طباعة ترويسة في داخل الممف وىي ‪ t‬و )‪ cos(t‬حيث سيتم تخزين القيم ضمن‬
‫الممف عمى شكل معطيات ضمن عمودين في سطر نجد قيمة الزمن ومقابميا قيمة التابع ‪ cos‬ليذه‬
‫النقطة وىو ما يقوم بو السطر الخامس‬
‫السطر السادس يتم إغالق الممف‪.‬‬

‫‪Timage=imread('testch5.png'); % read the image .6‬‬


‫‪imshow('testch5.png');% show the image‬‬
‫‪fo=imfinfo('testch5.png');% get information‬‬

‫‪ .7‬ييدف ىذا الرماز لتسجيل مفطع صوتي مدتو خمسة ثواني ومن ثم تشغيمو‬
‫تردد التقطيع بقيمة ‪ 12 KHz‬في السطر الثاني تعريف عدد النقاط وىو خمسة‬
‫السطر األول تعريف ّ‬
‫تردد التقطيع ومن ثم تسجيل مقطع صوتي باستخدام التعميمة ‪ wavrecord‬يمرر ليا عدد‬ ‫أضعاف ّ‬
‫وتردد التقطيع ومن ثم تشغيل المقطع الصوتي بعد تضخميو ‪ 30‬مرة‪.‬‬
‫النقاط ّ‬

‫‪-217-‬‬
MATLAB for Numerical Computing-Ch6

‫ حل‬،‫ (جبر خطي‬MATLAB® ‫ تمارين رياضية باستخذام‬:‫الفصل السادس‬


)‫ كثيرات حذود‬،‫ تحويالت‬،‫ تكامل‬،‫ اشتقاق‬،‫جملة معادالت‬
Mathematical Exercises using MATLAB ® (Linear Algebra, Solving
Equations, Derivation, Integration, Transforms and
Polynomials)

-1-

-218-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫عنوان الموضوع‪:‬‬
‫تمارين رياضية باستخدام ®‪( MATLAB‬جبر خطي‪ ،‬حل جممة معادالت‪ ،‬اشتقاق‪ ،‬تكامل‪ ،‬تحويالت‪ ،‬كثيرات‬
‫حدود)‬

‫‪Mathematical Exercises using MATLAB ® (Linear Algebra, Solving Equations,‬‬


‫)‪Derivation, Integration, Transforms and Polynomials‬‬

‫الكممات المفتاحية‪:‬‬
‫‪Algebraic‬‬ ‫‪ ،MATLAB‬الجبر ‪ ،Algebra‬الجبر الخطي ‪ ،Linear Algebra‬المعادالت الجبرية‬
‫‪ ،Equations‬كثيرات الحدود ‪ ،Polynomials‬النيايات ‪ ،Limits‬االشتقاق ‪ ،Derivation‬التكامل‬
‫‪ ،Integration‬المعادالت التفاضمية ‪ ،Differential Equations‬التحويالت ‪ ،Transforms‬االحتماالت‬
‫‪Fourier‬‬ ‫‪ ،Probability‬اإلحصاء ‪ ،Statistics‬تحويل البالس ‪ ،Laplace Transform‬تحويل فورييو‬
‫‪.Transform‬‬

‫‪.‬ممخص‪:‬‬
‫تم التركيز في الفصول السابقة عمى أساسيات المغة وكيفية التعامل مع البرمجية واستخدمات قدراتيا‪ ،‬سنعرض‬
‫في ىذا الفصل عدد من التطبيقات العممية التي يفيد ‪ MATLAB‬في الحصول عمى نتائج مباشرة ليا‪ ،‬سنبدأ‬
‫العددي أو بداللة الرموز‪،‬‬
‫بالجبر ونيتم خصوصًا بالجبر الخطي وتطبيقاتو وذلك بطريقتين اعتماداً عمى الحل ّ‬
‫سنعرض حل جممة من المعادالت‪ ،‬والعمميات عمى المصفوفات‪ .‬ننتقل بعدىا لمتعرف عمى كثيرات الحدود وكيفية‬
‫التعامل معيا باستخدام لغة ‪، MATLAB‬ومن ثم يتم عرض أكثر المسائل التي يتعرض ليا الطالب خالل دراستو‬
‫أو الميندس خالل عممو وىي قضايا النيايات‪ ،‬االشتقاق والتكامل حيث سنوضح لممستخدم كيفية حساب المقادير‬
‫السابقة بشكل يضمن لو الدقة والصحة والوقت وذلك عبر عرض عدد من التمارين واألمثمة‪.‬‬
‫يتم في الجزء الالحق عرض لممعادالت التفاضمية وحميا ضمن ‪ ،MATLAB‬وأخي اًر سنعطي لمحة سريعة عن‬
‫تحويمي البالس وفورييو حيث تعتبر ىذه التحويالت البنى األساسية في تحميل األنظمة أو التعامل مع اإلشارت‪.‬‬
‫أخي اًر يجري التعرف عمى تعميمات تفيد في مجال اإلحصاء واالحتماالت‪.‬‬
‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب في ىذا الفصل عمى‪:‬‬
‫‪ ‬يتقن مفاىيم الجبر‪ ،‬ويستخدم ‪ MATLAB‬لمحصول عمى حمول المعادالت الجبرية‪.‬‬
‫يتعرف عمى كثيرات الحدود وتمثيميا ضمن ‪.MATLAB‬‬ ‫‪‬‬
‫ينجز العديد من المسائل الرياضية كالنيايات واالشتقاق والتكامل باستخدام ‪.MATLAB‬‬ ‫‪‬‬
‫‪ ‬يستخدم ‪ MATLAB‬لمحصول عمى حمول لممعادالت التفاضمية‪.‬‬
‫يتعرف عمى تحويمي البالس وفرييو‪ ،‬وبعض المفاىيم في اإلحصاء واالحتماالت‪.‬‬ ‫‪‬‬

‫‪-219-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪Algebra‬‬ ‫الجبر‬
‫قدمنا في الفصول السابقة عدد كبير من المفاىيم المتعمقة بالبرمجة بشكل عام‪ ،‬وبمغة ‪ MATLAB‬بشكل خاص‬
‫وقد عرضنا عدد كبير من الميزات التي تقدميا برمجية ‪.MATLAB‬‬
‫نيدف في ىذا الفصل إلى تطبيق عدد من المفاىيم الرياضية التي سبق تعمميا سواء في المدرسة أو في دروس‬
‫السابقة‪ ،‬بيدف توطيد بعض المفاىيم والتعرف عمى اإلمكانيات اليائمة لبرمجية ‪ MATLAB‬التي تسيل عمل‬
‫المستخدم في معظم الحاالت‪ ،‬وفي بعض األحيان‪ ،‬عندما يصبح إيجاد الحل أو الحصول عمى عالقة تحميمية‬
‫معقداً أومستحيالً ‪ ،‬تكون مثل ىذه البرمجيات الطريقة الوحيدة لمحصول عمى اليدف المطموب‪.‬‬

‫سنعرض في ىذه الفقرة عدة أفكار ىي‪:‬‬


‫ال إلى درجات أعمى‪.‬‬
‫‪ ‬حل المعادالت الجبرية البسيطة من الدرجة األولى‪ ،‬ثم من الدرجة الثانية ووصو ً‬
‫تمثيل جممة معادالت بالشكل المصفوفاتي‪ ،‬وحميا‪.‬‬ ‫‪‬‬
‫بعض المفاىيم الخاصة بالمصفوفات كالرتبة‪ ،‬والتفريق‪.‬‬ ‫‪‬‬
‫‪ ‬تجميع وتفريق المعادالت ضمن ‪.MATLAB‬‬
‫‪ ‬تحميل وتبسيط التعابير الجبرية‪.‬‬

‫‪-220-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪Solving Algebraic Equations‬‬ ‫حل المعادالت الجبرية‬


‫‪ ‬من أجل تعريف متحول رمزي أو تابع ‪ symbolic variable and function‬يمكن استخدام التعميمة‬
‫‪ syms‬و ‪.sym‬‬
‫األىمية من تعريف مثل ىذه المتحوالت ىو الحصول عمى الصيغة المجردة لمعبارة التحميمية واستخداميا في‬
‫إيجاد الحمول بداللة المتحوالت ومن ثم القيام بالتعويض العددي عند الحاجة أي أننا نقوم بتجنب الحسابات‬
‫العددية باليد‪.‬‬
‫ّ‬
‫العددي ‪.Numerics‬‬
‫نعرض مقارنة بسيطة بين اختيار الحل باستخدام الرموز ‪ Symbolics‬أو الحل ّ‬
‫المساوئ‬ ‫المحاسن‬
‫أحيانًا ال يمكن الوصول‬ ‫الحصول عمى صيغة تحميمية لمحل‪.‬‬ ‫‪Symbolic‬‬
‫إلى حل‪.‬‬
‫الصيغة‬ ‫تكون‬ ‫أحيانًا‬ ‫معرفة شكل الحل مما قد يفيد في فيم‬
‫النيائبة معقدة كثي ًار وال تحمل معنى‬ ‫الظاى رة أحيانًا‪.‬‬
‫عددية‪.‬‬
‫دون قيمة ّ‬
‫من الصعب الحصول عمى‬ ‫الحصول عمى حل ممكن دومًا‬ ‫‪Numeric‬‬
‫العددية فقط‬
‫فيم لمظاىرة من القيم ّ‬
‫أحيانا‬ ‫الممكن‬ ‫من‬ ‫ممكن الحصول عمى حمول دقيقة جدًا‬
‫الحصول عمى خطأ في الحل نتيجة‬
‫العددي‬
‫خورزميات الحل ّ‬

‫‪ ،‬قم بكتابة الرماز التالي‪:‬‬ ‫محدد مصفوفة ببعد‬


‫مثال‪ :‬نرغب في إيجاد العالقات التحميمية لمقموب و ّ‬

‫‪%% Mathematical Exercises using MATLAB‬‬


‫;‪clear all; close all; clc‬‬
‫;)']‪mat=sym('[a b;c d‬‬
‫)‪d=det(mat‬‬
‫)‪i=inv(mat‬‬

‫الخرج ىو‪:‬‬

‫‪-221-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫مثال‪ :‬لتعريف متحولين ‪ x‬و ‪ ،y‬وتابع لمتحولين )‪ f(x,y‬اكتب الرماز التالي‪:‬‬

‫عند التعريف الحظ المتحوالت ضمن فضاء العمل‪.‬‬

‫أما ضمن ‪ Command Window‬فنالحظتعريف التابع عمى الشكل‪:‬‬

‫ويمكن أيضًا تحديد نمط المتحولين كما في الرماز السابق حيث تم تحديد النمط عمى أنو حقيقي ‪.real‬‬

‫‪-222-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫من أجل رسم التواب ع التي تم تعريفيا باستخدام الرموز يمكن استخدام التابع ‪ ezplot‬إن المجال االفتراضي الذي‬
‫ىو تابع لممتحول ‪ x‬فقط‪ ،‬يوجد‬ ‫ولكن يجب االنتباه لكون التابع‬ ‫يتم الرسم عميو ىو‬
‫خيارات إضافية تسمح لنا بتحديد مجال الرسم أو تحديد رسم تابع لمتحولين يمكن االطالع عمييا عن طريق‬
‫‪.help‬‬
‫مثال‪:‬‬
‫اكتب الرماز التالي‪:‬‬
‫)'‪h = ezplot('x^2‬‬
‫;)'‪set(h, 'Color', 'm‬‬

‫‪.‬‬ ‫الخرج ىو رسم لمتابع‬


‫ثم اكتب الرماز التالي والحظ الخرج‪:‬‬
‫)'‪ezplot('x^2-y^4‬‬

‫‪.‬‬ ‫يقوم التابع برسم حل المعادلة‬


‫‪ ‬من أجل القيام بحل معادالت جبرية يمكن استخدام تعميمة ‪.solve‬‬
‫مثال‪ :‬قم بكتابة الرماز التالي لحل معادالت بسيطة وتعمم منو كيفية استخدام تعميمة ‪ ،solve‬الحظ وجود‬
‫طريقتين‪ ،‬إضاف ًة إلمكانية تحديد المجيول ضمن المسألة‪.‬‬

‫الخرج‪:‬‬

‫‪-223-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫مثال‪ :‬حل معادلة من الدرجة الثانية‪.‬‬

‫الخرج عمى الشكل التالي‪:‬‬

‫مثال‪ :‬حل معادلة من درجات أعمى‪.‬‬

‫‪-224-‬‬
MATLAB for Numerical Computing-Ch6

:‫الخرج‬

-225-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪Solving System of Equations using‬‬ ‫حل جممة معادالت باستخدام المصفوفات‬


‫‪Matrices‬‬
‫سبق لنا في الفصول السابقة عرض فكرة حل مجموعة من المعادالت عبر تمثيميا بالشكل المصفوفاتي ومن ثم‬
‫إيجاد الحل كما يمي‪:‬‬

‫وقد وجدنا كيفية إيجاد الحل عبر إيجاد مقموب مصفوفة‪ ،‬أو باستخدام عممية القسمة‪ ،‬سنستخدم في ىذه الفقرة‬
‫التعميمة ‪ solve‬لحل مجموعة من المعادالت‪.‬‬
‫مثال‪:‬‬
‫قم بحل المعادالت التالية‪:‬‬

‫‪-226-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫قم بكتابة الرماز التالي‪:‬‬


‫‪%% Solving System of Equations‬‬
‫;‪clear all; close all; clc‬‬
‫;)'‪s = solve('5*x + 9*y = 5','3*x - 6*y = 4‬‬
‫‪s.x‬‬
‫‪s.y‬‬

‫والحظ الخرج‪ ،‬ثم قم بحل جممة المعادالت التالية‪:‬‬

‫‪More Linear Algebra‬‬ ‫المزيد من الجبر الخطي‬


‫سنتعرف ضمن ىذا الرماز عمى المزيد من التعميمات المفيدة في مجال الجبر الخطي‪.‬‬
‫مثال‪:‬‬

‫نفذ الرماز السابق والحظ الخرج‪.‬‬

‫‪ ‬تعميمة ‪ rank‬تفيد في إيجاد رتبة مصفوفة أي عدد السطور أو األعمدة المستقمة خطيًا وىي تعطي‬
‫معيا اًر لوجود مقموب مصفوفة من عدمو‪.‬‬
‫المحدد يجب أن تكون المصفوفة مربعة‪ ،‬وفي حال‬
‫‪ ‬تعميمة ‪ det‬تفيد في إيجاد محدد مصفوفة‪ ،‬لوجود ّ‬
‫المحدد ال يساوي الصفر ومنو يوجد مقموب لممصفوفة‪.‬‬
‫ّ‬ ‫كان‬
‫‪ ‬تعميمة ‪ inv‬تفيد في إيجاد مقموب مصفوفة‪.‬‬

‫‪-227-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪ ‬تعميمة ‪ eig‬تفيد في إيجاد تحميل لممصفوفة السابقة بداللة القيم الذاتية‪ ،‬يوجد عدد كبير من من طرق‬
‫تحميل المصفوفات والتي تم برمجتيا ضمن ‪ MATLAB‬ومن الممكن استخداميا بسيولة‪.‬‬
‫ننصح بالتعرف عمى البعض التعميمات المفيدة مثل ‪،cross ،dot ،eye ،null ،norm ، linsolve‬‬ ‫‪‬‬
‫‪.kron‬‬
‫فعالة مثالً يمكن باستخدام تعميمة ‪ det‬أو ‪rank‬‬
‫‪ ‬يمكن االستفادة من التعميمات السابقة لبرمجة رمازات ّ‬
‫معرفة مسبقًا أن المصفوفة ليا مقموب أم ال ومن ثم إظيار رسالة خطأ أو تحذير لممستخدم‪.‬‬

‫‪Expanding and Collecting‬‬ ‫تجميع وتفريق المعادالت ضمن ‪MATLAB‬‬


‫‪Equations in MATLAB‬‬
‫قم باستخدام تعليمتي ‪ expand‬و ‪.collect‬‬

‫مثال‪:‬‬

‫الخرج‪:‬‬

‫‪-228-‬‬
MATLAB for Numerical Computing-Ch6

‫تحميل وتبسيط التعابير الجبرية‬


Factorization and Simplification of Algebraic Expressions
‫ من‬simplify ‫ من أجل تحميل العبارات الجبرية وتعميمة‬factor ‫ استخدم تعميمة‬،‫ قم بكتابة الرماز التالي‬:‫مثال‬
.‫ والحظ الخرج‬،‫أجل تبسيط التعابير الجبرية‬
%% Factorization and Simplification of Algebraic Expressions
clear all; clc;
syms x %symbolic variable x
syms y %symbolic variable x
factor(x^3- y^3)
factor([x^2-y^2,x^3+y^3])

-229-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫))‪simplify((x^4-16)/(x^2-4‬‬

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


‫نعمم أن معظم التوابع يمكن تمثيميا عمى شكل كثير حدود برتبة عالية‪ ،‬من أجل تمثيل كثيرات الحدود ضمن‬
‫‪ MATLAB‬يكفي توصيف شعاع األمثال‪.‬‬

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

‫عرف شعاع األمثال التالي عمى شكل السطر‪p = [1 7 0 -5 9]; :‬‬

‫عرف شعاع األمثال التالي عمى شكل السطر‪p = [1 0 -2 -5]; :‬‬

‫عرف شعاع األمثال التالي عمى شكل السطر‪p = [1 0 -2]; :‬‬

‫عرف شعاع األمثال التالي عمى شكل السطر‪p = [2 0 0 0]; :‬‬


‫أي أننا نحتاج الشعاع ‪ p‬بطول ‪ N+1‬من أجل تمثيل كثير حدود من الدرجة ‪.N‬‬
‫‪ ‬من أجل إيجاد جذور كثير حدود استخدام التعميمة ‪.roots‬‬
‫مثال‪ :‬قم بتجريب الرماز التالي ومالحظة الخرج لكل كثير حدود‪.‬‬
‫‪%% Mathematical Exercises using MATLAB‬‬
‫‪% Polynomials‬‬
‫;‪clear all; close all; clc‬‬
‫;]‪p =[1 7 0 -5 9‬‬
‫;)‪r = roots(p‬‬
‫;]‪p1 = [1 -6 -72 -27‬‬
‫;)‪r1 = roots(p1‬‬
‫;]‪p2= [1 -5 2 8‬‬
‫;)‪r2 = roots(p2‬‬

‫‪-230-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪ ‬يمكن الحصول عمى كثير حدود انطالقاً من جذوره عن طريق التعميمة ‪.poly‬‬
‫مثال‪ :‬استخدم المتحوالت ‪ r,r1 ,r2‬من المثال السابق واكتب ما يمي‪ p_e= poly(r) :‬و)‪ p_e1= poly(r1‬و‬
‫)‪. p_e2= poly(r2‬‬
‫‪ ‬من أجل إيجاد قيمة كثير الحدود عند نقطة يمكن استخدام التعميمة ‪ polyval‬عمى الشكل‬
‫)‪ y0=polyval(P,x0‬حيث ‪ x0‬ىية القيمة الم راد إيجاد قيمة كثير الحدود عندىا‪ ،‬او يمكن إدخال‬
‫شعاع من القيم‪.‬‬
‫مثال‪:‬‬
‫;‪clear all; close all; clc‬‬
‫;]‪p =[1 7 0 -5 9‬‬
‫)‪polyval(p,4‬‬
‫;]‪p1 = [3 2 1‬‬
‫)]‪polyval(p1,[5 7 9‬‬

‫‪ ‬يمكن إيجاد أيضاً أفضل كثير حدود يمر من مجموعة نقاط ومن الدرجة التي يرغب المستخدم بيا عن‬
‫طريق التعميمة ‪.polyfit‬‬
‫مثال‪:‬‬

‫الخرج‪:‬‬

‫‪-231-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪9‬‬

‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

‫‪0‬‬

‫‪-1‬‬
‫‪-3‬‬ ‫‪-2‬‬ ‫‪-1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬

‫ولكن سنضيف ىذه المرة إلى التابع ضجيج‬ ‫مثال‪ :‬سنقوم باستخدام التعميمات السابقة عمى التابع‬
‫عشوائي‪.‬‬

‫الخرج‪:‬‬

‫‪-232-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪18‬‬

‫‪16‬‬

‫‪14‬‬

‫‪12‬‬

‫‪10‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪2‬‬

‫‪0‬‬

‫‪-2‬‬
‫‪-4‬‬ ‫‪-3‬‬ ‫‪-2‬‬ ‫‪-1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫‪Limits‬‬ ‫النهايات‬
‫سنتعرف في ىذه الفقرة عمى طريقة حساب النيايات ضمن ‪ ،MATLAB‬سنعرض بعض التمارين ونتأكد من‬
‫بعض خواص النيايات‪ .‬يتم استخدام التابع ‪ ،limit‬يأخذ التابع األشكال القواعدية التالية‪:‬‬

‫إن التعميمة السابقة تأخذ عمى دخميا تعبير ‪ expression‬وتقوم بحساب النياية لو عن د لبصفر في حالة عدم‬
‫تحديد قيمة النياية المرجوة‪.‬‬
‫مثال‪:‬‬

‫‪-233-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫النتيجة ىي ‪.3/4‬‬
‫مثال‪ :‬لحساب النياية عند قيمة معينة‪ ،‬بعد تعريف المتحول ‪ syms x‬اكتب التعميمة التالية‪:‬‬
‫)‪limit((x -3)/(x-1),1‬‬

‫النياية ىي ‪.NAN‬‬
‫لناخد مثال آخر‪،‬‬
‫)‪limit(x^2+1,3‬‬
‫الجواب هو ‪.01‬‬

‫مثال‪ :‬سنقوم ضمن ىذه المثال بالتاكد من خواص النيايات طبعًا مع احترام جميع الشروط الرياضية الالزمة‬
‫لوجود النياية‪ ،‬نكتب‪:‬‬

‫لنقم بتعريف تابعين ‪ f‬و‪ ، g‬ومن ثم نقوم بحساب نياية كل من التابعين عندما يسعى المتحول ‪ x‬إلى القيمة ‪،4‬‬
‫نعرف‪:‬‬
‫ومن ثم سنقوم بالتأكد من خواص النيايات السابقة باستخدام ‪ .MATLAB‬حيث ّ‬

‫قم بإنشاء ‪ script‬واكتب الرماز التالي‪:‬‬

‫الخرج هو‪:‬‬

‫‪-234-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

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

‫|‬ ‫|‬

‫غير موجودة وذلك بطريقتين‪:‬‬ ‫سنبين ضمن التمرين أن‬


‫‪ ‬رسم منحني التابع واظيار نقاط االنقطاع‪.‬‬
‫‪ ‬حساب النيايات واظيار أن النيايتين عند ‪( x  3‬من اليمني ثم من اليسار) غير متساويتين‪.‬‬
‫يتم حساب النياية من اليمين ‪ ،right‬أو اليسار ‪ left‬عبر تمرير كممة '‪ 'left‬أو '‪ 'right‬ضمن متحوالت التعميمة‪.‬‬
‫لنكتب الرماز التالي‪:‬‬
‫‪%%‬‬

‫‪-235-‬‬
MATLAB for Numerical Computing-Ch6

clear all; close all; clc;


syms x
f =(x -3)/abs(x-3);
ezplot(f,[-1,5])
L = limit(f,x,3,'left')
R = limit(f,x,3,'right')

:‫الخرج ىو‬

(x - 3)/abs(x - 3)

0.5

-0.5

-1

-1 0 1 2 3 4 5
x

-236-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪Derivation‬‬ ‫االشتقاق‬
‫يتم حساب المشتقات ضمن ‪ MATLAB‬عن طريق التعميمة ‪ diff‬وذلك من أجل التوابع التي جرى تعريفيا‬
‫باستخدام متحوالت ‪.Symbolic‬‬
‫في الشكل البسيط لمتعميمة يمكن تمرير التابع الذي نرغب بإيجاد المشتق لو لمتابع‪ ،‬لنقم باستخدام التعميمة ‪diff‬‬
‫إليجاد مشتق التابع التالي‪:‬‬

‫قم بإنشاء ‪ script‬واكتب الرماز التالي والحظ الخرج‪.‬‬


‫‪%% Mathematical Exercises using MATLAB‬‬
‫‪% Derivation‬‬
‫;‪clear all; close all; clc‬‬
‫‪syms x‬‬
‫;)‪f =3*x^2+2*x^(-2‬‬
‫)‪diff(f‬‬

‫يمكن كمثال التأكد من خواص االشتقاق (الخطية‪ ،‬مشتق جمع وطرح تابعين‪ ،‬مشتق جداء ‪ )... ،‬أو من الممكن‬
‫أيضًا إيجاد المشتقات لبعض التوابع األساسية‪ ،‬نعرض في الجدول التالي بعض التوابع األساسية مع مشتقاتيا‬
‫ومن ثم سنقوم بإيجادىا باستخدام ‪.MATLAB‬‬

‫مثال‪ :‬سنقوم بإيجاد ا لمشتقات لبعض التوابع‪ .‬اكتب الرماز التالي والحظ الخرج وقم بالحسابات النظرية‬
‫يدوياً أيضاً ومن ثم قم بالمقارنة‪.‬‬

‫‪-237-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫مثال‪ :‬سنقوم ضمن ىذا المثال بحساب مشتقات من مراتب عميا لتابع ما‪.‬‬
‫لحساب مشتقات تابع ‪ f‬من مراتب أعمى يمكن استخدام تعميمة ‪ diff‬لكن مع إضافة مرتبة المشتق باستخدام‬
‫نكتب الرماز التالي‪:‬‬ ‫ال لحساب المشتق الثاني لمتابع‬
‫الشكل القواعدي التالي‪ .diff(f,n) :‬مث ً‬
‫‪syms x‬‬
‫;)‪f = x*exp(-3*x‬‬
‫)‪diff(f,2‬‬

‫سنقوم بتنفيذ مثال آخر عمى استخدام التابع ‪ ، diff‬لكن ىذا المرة مع استخدام تعميمات أكثر حيث نرغب في‬
‫معرفة تحقق معادلة من عدميا‪.‬‬
‫ونرغب في معرفة فيما إ از كانت المعادلة التالية محققة‪:‬‬ ‫نعرف التابع‬
‫ّ‬

‫نكتب الرماز التالي‪:‬‬

‫الخرج‪:‬‬

‫‪-238-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫مثال‪ :‬سنقوم ضمن ىذا المثال بإيجاد القيمة العظمى والدنيا لتابع ما‪.‬‬
‫‪ ،‬ىذا يعني أننا نبحث عن النقاط التي تحقق‬ ‫البحث عن قيمة عظمى محمية أو صغرى لتابع ما‬
‫المعادلة التالية‪:‬‬

‫لنطبق ما سبق عمى التابع التالي‪:‬‬

‫سنقسم العمل ضمن المثال التالي إلى عدة خطوات‪:‬‬


‫‪ .1‬تعريف التابع ورسمو‪:‬‬
‫‪%%‬‬
‫;‪clear all;clc;close all‬‬
‫‪syms x‬‬
‫‪y =2*x^3+3*x^2-12*x +17;% defining the function‬‬
‫)‪ezplot(y‬‬

‫‪-239-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪3 x 2 - 12 x + 2 x 3 + 17‬‬

‫‪500‬‬

‫‪400‬‬

‫‪300‬‬

‫‪200‬‬

‫‪100‬‬

‫‪0‬‬

‫‪-100‬‬

‫‪-200‬‬

‫‪-300‬‬
‫‪-4‬‬ ‫‪-2‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬
‫‪x‬‬

‫‪ .2‬اليدف ىو إيجاد القيمة المحمية الصغرى والعظمى عمى المجال ]‪ [-2,2‬لذلك سنقوم برسم التابع عمى‬
‫المجال السابق‪.‬‬
‫)]‪ezplot(y,[-2,2‬‬

‫‪-240-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪3 x 2 - 12 x + 2 x 3 + 17‬‬
‫‪40‬‬

‫‪35‬‬

‫‪30‬‬

‫‪25‬‬

‫‪20‬‬

‫‪15‬‬

‫‪10‬‬

‫‪-2‬‬ ‫‪-1.5‬‬ ‫‪-1‬‬ ‫‪-0.5‬‬ ‫‪0‬‬ ‫‪0.5‬‬ ‫‪1‬‬ ‫‪1.5‬‬ ‫‪2‬‬


‫‪x‬‬

‫‪ .3‬ثم نقوم بإيجاد المشتق‪:‬‬


‫)‪g = diff(y‬‬

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


‫‪g= 6*x^2 + 6*x - 12‬‬

‫‪ .4‬اآلن نقوم بحل المعدلة ‪.g=0‬‬


‫)‪s = solve(g‬‬

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


‫‪s = 1 , -2‬‬

‫‪ .5‬تتفق النتيجة السابقة مع رسم التابع‪ ،‬بعد ذلك نقوم بحساب قيمة التابع ‪ f‬عند النقاط ‪ x=1, -2‬ويمكن‬
‫ذلك باستخدام التعميمة ‪.subs‬‬
‫)‪subs(y,1), subs(y,-2‬‬

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


‫‪ans = 10‬‬
‫‪ans = 37‬‬

‫‪-241-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫مثال‪ :‬يمكن تطبيق تعميمة ‪ diff‬مع أمثمة عددية كما في المثال التالي‪:‬‬
‫;‪x=0:0.01:2*pi‬‬
‫;)‪y=sin(x‬‬
‫;)‪dydx=diff(y)./diff(x‬‬
‫)'‪plot(x,y,x(2:end),dydx,'r‬‬

‫‪1‬‬

‫‪0.8‬‬

‫‪0.6‬‬

‫‪0.4‬‬

‫‪0.2‬‬

‫‪0‬‬

‫‪-0.2‬‬

‫‪-0.4‬‬

‫‪-0.6‬‬

‫‪-0.8‬‬

‫‪-1‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬

‫يجب االنتباه إلى أن الشعاع الناتج عن استخدام تعميمة ‪ diff‬يكون بعدد نقاط أقل من شعاع الدخل لمتابع بنقطة‬
‫واحدة وىذا طبيعي كونو يأخذ الفرق بين نقطتين إليجاد تقريب لممشتق‪.‬‬

‫‪Integration‬‬ ‫التكامل‬
‫تفيد حساب التكامالت في عدد كبير من المسائل مثل إيجاد مساحة أو حجم جسم ما‪ ،‬عمل قوة‪ ،‬مركز الثقل‬
‫عددية مختمفة وواسعة‪ .‬نقدم في ىذه الفقرة فكرة عن إمكانيات‬
‫ّ‬ ‫لجسم ما‪ ،‬استطاعة إشارة ما إضاف ًة لتطبيقات‬
‫‪ MATLAB‬في حساب التكامالت بنوعييا‪:‬‬
‫النوع األول ىو التكامل غير المحدود والذي يفيد في إيجاد التابع األصمي أي ما ىو معاكس لعممية‬ ‫‪‬‬
‫االشتقاق‪.‬‬
‫‪ ‬النوع الثاني ىو التكامل المحد ود أي إيجاد قيمة تكامل التابع عمى مجال ما‪.‬‬
‫‪ .1‬إيجاد التكامل غير المحدود (التابع األصمي) ‪:Finding Indefinite Integral‬‬

‫‪-242-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪ ،‬عندىا يمكننا القول أن التكامل غير المحدود (التابع األصمي)‬ ‫هو‬ ‫بالتعريف‪ ،‬إ از كان مشتق التابع‬
‫‪.‬‬ ‫بالنسبة ل ـ ىو التابع‬ ‫لـ‬
‫عندىا يكون التكامل غير المحدود‬ ‫ىو‬ ‫ال‪ :‬نعمم ان المشتق بالنسبة ل ‪ x‬لمتابع‬
‫مث ً‬
‫‪ .‬باستخدام الرموز‪:‬‬ ‫ىو‬ ‫(التابع األصمي) لمتابع‬

‫∫‬

‫‪ ،‬حيث ‪ c‬ثابت اختياري‪ ،‬ىو‬ ‫يجب التنبيو أن التكامل غير المحدود ليس وحيدًا‪ ،‬حيث أن مشتق التابع‬
‫‪ .‬أي نكتب‪:‬‬ ‫أيضًا التابع‬

‫∫‬

‫حيث ‪ c‬ثابت اختياري‪.‬‬


‫يتيح ‪ MATLAB‬لمستخدميو تعميمة ‪ int‬وذلك لحساب تكامل تعبير ‪ expression‬ما‪ .‬لمحصول عمى التكامل‬
‫غير المحدود نكتب )‪.int(f‬‬
‫مثالً‪:‬‬
‫‪%% Mathematical Exercises using MATLAB‬‬
‫‪% Integration‬‬
‫;‪clear all; close all; clc‬‬
‫‪syms x‬‬
‫)‪int(2*x‬‬

‫الخرج ىو ‪.ans = x^2‬‬


‫مثال‪ :‬سنقوم في ىذا المثال في إيجاد التابع األصمي لعدد من التوابع المستخدمة كثي ًار‪ ،‬قم بإنشاء ممف ‪script‬‬
‫من أجل كتابة الرماز التالي‪:‬‬
‫‪%%‬‬
‫‪syms x n‬‬
‫))‪int(sym(x^n‬‬
‫;')‪f ='sin(n*t‬‬
‫))‪int(sym(f‬‬
‫‪syms a t‬‬
‫))‪int(a*cos(pi*t‬‬
‫)‪int(a^x‬‬

‫‪-243-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫الخرج‬

‫مثال‪ :‬سنقوم أيضًا في حساب بعض التكامالت لتوابع شييرة ومستخدمة كثي اًر لكن اإلضافة في ىذا التمرين ىو‬
‫استخدام تعميمة ‪ pretty‬التي تساعد في جعل النتيجة أسيل لمق راءة عمى المستخدم‪ ،‬قم بتنفيذ الرماز التالي والحظ‬
‫الخرج‪.‬‬

‫‪ .2‬إيجاد التكامل المحدود ‪:Finding Definite Integral‬‬


‫نحصل عمى قيمة التكامل المحدود عمى مجال ]‪ [a,b‬عن طريق العالقة التالية‪:‬‬

‫∫‬

‫‪-244-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫أي إيجاد قيمة التابع األصمي عند أطراف المجال‪ ،‬يستفاد من التكامل المحدود في حساب مساحة تابع بين‬
‫منحني التابع ومحور السينات ‪ .x-axis‬من أجل حساب ىذا التكامل ضمن ‪ MATLAB‬يمكن استخدام تعميمة‬
‫‪ int‬السابقة ولكن يجب تحديد مجال التكامل أي نكتب )‪.int(f,a,b‬‬
‫∫ نكتب )‪ int(x,4,9‬وتكون النتيجة ىي ‪.‬‬ ‫ال لحساب التكامل التالي‬
‫مث ً‬

‫مثال‪ :‬سنقوم ضمن ىذا المثال بحساب التكامل بين محور السينات ومنحني التابع‬
‫ضمن المجال ]‪ .[1,2‬اكتب الرماز التالي ضمن ممف ‪ ،script‬والحظ قيمة الخرج حيث من الممكن القيام‬
‫بحساب القيمة يدويًا لممقارنة‪.‬‬
‫‪%% Definite Integral‬‬
‫;‪clear all; close all; clc‬‬
‫‪syms x‬‬
‫;‪f = x^3-2*x +5‬‬
‫;)‪a =int(f,1,2‬‬
‫;))‪display('Area: '), disp(double(a‬‬

‫مثال‪ :‬حساب تكامل محدود يتطمب تكامل بالتجزئة واستخدام التعميمة ‪ subs‬لتعويض قيم طرفي المجال‪.‬‬
‫عادة يمكن استخدام ‪ MATLAB‬إلجراء ىذه‬
‫ً‬ ‫إن حساب التكامل بالتجزئة يتطمب عدداً إضافياً من الحسابات‬
‫الحسابات‪ ،‬نرغب في حساب التكامل‪:‬‬

‫∫‬

‫ومن ثم حساب ىذه القيمة ضمن المجال ]‪.[a=0,b=2‬‬


‫‪%%‬‬
‫;‪clear all; close all; clc‬‬
‫‪syms a b x‬‬
‫)‪Q=int(x*exp(x),a,b‬‬
‫)}‪subs(Q,{a,b},{0,2‬‬

‫عددية أو تقريبات لحساب التكامالت نذكر منيا ‪Adaptive‬‬


‫مالحظة‪ :‬يحتوي ‪ MATLAB‬أيضًا عمى طرائق ّ‬
‫‪ Simpson’s quadrature‬و ‪ ،Trapezoidal‬ويوجد توابع منجرة ضمن ‪ MATLAB‬لمقيام بالحسابات‪ ،‬نذكر‬
‫كمثال عمى الطريقتين السابقتين‪:‬‬
‫;)‪q=quad(@(x) sin(x),0,pi‬‬
‫;‪x=0:0.01:pi‬‬

‫‪-245-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫;))‪z=trapz(x,sin(x‬‬

‫‪Differential Equations‬‬ ‫المعادالت التفاضمية‬


‫مضمنة في‬
‫َّ‬ ‫تمثل المعدالت التفاضمية عنص ًار أساسيًا في غالبية العالقات الموصفة لمحركة جسم ما‪ ،‬كما أنيا‬
‫العديد من الظواىر الفيزيائية والتطبيقات العممية‪ ،‬سنعرض في ىذه الفقرة كيفية الحصول عمى حمول لممعدالت‬
‫التفاضمية باستخدام ‪.MATLAB‬‬
‫نعمم مسبقًا أن حل المعادالت التفاضمية يتم عن طريق التكامل عدد من الم رات وفقًا لمرتبة المعادلة التفاضمية‪،‬‬
‫العددي يتم ضمن ‪ MATLAB‬تجميع‬ ‫عادة يتم تنجيز حمول المعادالت التفاضمية باستخدام خوارزميات التحميل ّ‬‫ً‬
‫ىذه الخوارزميات وفقًا لمطريقة التي تعتمد عمييا في الحل‪ ،‬والمشكالت التي تسطيع حميا بما يعرف ب ـ ‪،Solver‬‬
‫‪Ordinary‬‬ ‫ويشتمل ‪ MATLAB‬عمى عدد من ‪ solvers‬الخاصة بحمول المعادلة التفاضمية االعتيادية‬
‫‪.Differential Equation ODE‬‬
‫يضمن االختيار الصحيح ل ـ ‪ ODE Solver‬الحفاظ عمى كثير من وقت المستخدم‪ ،‬إضاف ًة لمحصول عمى نتائج‬
‫دقيقة‪ ،‬نعرض بعض من ‪( ODE Solvers‬ىذه األسماء ىي نفس اسم التعميمة ضمن ‪:)MATLAB‬‬
‫‪ ode23 .1‬وىو ‪ ، Low-order solver‬يتم استخدامو عندما تجري عممية المكاممة عمى مجال صغير او‬
‫عندما تكون الدقة أقل أىميةً من السرعة‪.‬‬
‫‪ ode45 .2‬وىو ‪ ،High-order Solver‬يعتبر أكثر استخداماً من باقي ال ـ‪ ،solvers‬يتميز بدقة عالية‬
‫وسرعة مقبولة‪.‬‬
‫‪ ode15s .3‬يستخدم عندما تحتوي المعادلة التفاضمية عمى ثوابت زمنية تختمق تبعًا لمرتبة المتحوالت‬
‫ضمن المعادلة ومطاالتيا‪.‬‬
‫من أجل استخدام التعميمات لدينا الشكل القواعدي التالي‪:‬‬

‫الدخل‪:‬‬
‫‪ .1‬اسم التابع الذي يحتوي عمى المعادلة التفاضمية االعتيادية ‪ ،ODE‬أو استخدام تابع من نمط‬
‫‪ ،anonymous‬يحتوي التابع عمى دخمين مثالً )‪ (t,y‬ويعيد القيمة ‪ .dy/dt‬ويجب االنتباه أن جممة‬
‫المعادلة التفاضمية يجب أن تكون من المرتبة األولى حتى نستطيع استخدام ‪ ODE Solvers‬وحتى لو‬
‫كانت غير خطية‪.‬‬

‫‪-246-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫تحددان بداية ونياية الزمن لممحاكاة‪.‬‬


‫‪ .2‬المجال الزمني‪ :‬ىو عبارة عن شعاع يحتوي عم ى قيمتين ّ‬
‫‪ .3‬الشروط االبتدائية‪ :‬شعاع عمود يحتوي عمى الشروط االبتدائية من أجل كل معادلة تفاضمية اعتيادية‬
‫‪.ODE‬‬
‫الخرج‪:‬‬
‫‪ t .1‬يحتوي عمى النقاط التي تمثل الزمن‪.‬‬
‫‪ y .2‬يحتوي عمى قيم الحل الموافق لممجال الزمني‪ ،‬حيث ان كل سطر ضمن ‪ y‬ىو موافق لقيم المجال‬
‫الزمني ضمن سطر ضمن المتحول ‪.t‬‬
‫مثال‪ :‬سيتم ضمن ىذا المثال شرح آلية سير تفاعل كيميائي‪ ،‬أوالً يجب بناء تابع يوصف الحالة ىو ‪ODE‬‬
‫‪ function‬والذي يجب أن يعيد قيم المشتق من أجل لحظات زمنية معينة وقيم دخل معينة‪.‬‬
‫المعادالت التي توصف التفاعل الكيميائي ىي‪:‬‬

‫نقوم أوالً بإنشاء ممف تابع ‪ function‬يحتوي عمى الرماز التالي‪ ،‬ال تنسى أن يكون التابع ضمن نفس مسار‬
‫العمل عند استعمالو وال تنسى أن يكون اسم الممف المحفوظ بو التابع ىو نفس اسم التابع‪.‬‬
‫)‪function dydt = chem (t,y‬‬
‫‪% this function describe Chemical Reaction ODE function‬‬
‫;)‪dydt = zeros(2,1‬‬
‫;)‪dydt(1)=-10*y(1)+50*y(2‬‬
‫;)‪dydt(2)=10*y(1)-50*y(2‬‬
‫‪end‬‬

‫قم بإنشاء ممف ‪ script‬واكتبو ضمنو الرماز التالي‪:‬‬

‫‪-247-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫الخرج ىو‪:‬‬
‫‪Chem Reaction‬‬
‫‪1‬‬
‫‪A‬‬
‫‪0.9‬‬ ‫‪B‬‬

‫‪0.8‬‬

‫‪0.7‬‬
‫)‪Amount of chemical (g‬‬

‫‪0.6‬‬

‫‪0.5‬‬

‫‪0.4‬‬

‫‪0.3‬‬

‫‪0.2‬‬

‫‪0.1‬‬

‫‪0‬‬
‫‪0‬‬ ‫‪0.05‬‬ ‫‪0.1‬‬ ‫‪0.15‬‬ ‫‪0.2‬‬ ‫‪0.25‬‬ ‫‪0.3‬‬ ‫‪0.35‬‬ ‫‪0.4‬‬ ‫‪0.45‬‬ ‫‪0.5‬‬
‫)‪Time (s‬‬

‫مالحظة‪ :‬يستخدم ‪ MATLAB’s ODE Solvers‬خطوة زمنية متغيرة‪ ،‬في بعض الحاالت من المفيد أخذ خطوة‬
‫زمنية ثابتة‪.‬‬
‫محددة الخطوة ضمنو‪ ،‬أما الخرج فيكون عند المحظات التي‬
‫من الممكن القيام بذلك عن طريق تمرير شعاع زمن ّ‬
‫جرى تحديدىا ضمن شعاع الزمن‪ ،‬إن تحديد الخطوة الزمنية ضمن شعاع الدخل يؤدي إلى زيادة زمن تنفيذ‬
‫المحددة‪.‬‬
‫ّ‬ ‫التعميمة وذلك ألن قيم التابع يتم إجراء استيفاء ‪ interpolation‬إلعطاء الخرج عند المحظات‬
‫جرب ذلك عمى المثال السابق‪:‬‬
‫ال ّ‬
‫مث ً‬
‫;)]‪[t1,y1]=ode45('chem',0:0.001:0.5,[0 1‬‬

‫‪-248-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪ tic‬لمتحقق أيضًا‪.‬‬ ‫يمكن استخدام ‪toc‬‬


‫يمكن أيضاً تحديد خيارات إضافية لمحل منيا تحديد التسامح في الخطأ عن طريق التعميمة ‪.odeset‬‬
‫مثال‪:‬‬
‫;)‪options=odeset('RelTol',1e-6,'AbsTol',1e-10‬‬
‫;)‪[t,y]=ode45('chem',[0 0.5],[0 1],options‬‬

‫لمعرفة أكثر عن ىذه الخيا رات استخدم ‪.help‬‬


‫مثال‪ :‬استخدم ‪ ode45‬لحل المعادلة التالية لمتابع )‪ y(t‬ضمن المجال ]‪ t = [0,10‬مع شرط ابتدائي ‪y(0)=1-‬‬
‫و مع العمم ان‬
‫‪⁄‬‬

‫ومن ثم ارسم الخرج‪.‬‬


‫الحل‪:‬‬
‫انشأ ممف تابع عمى الشكل‪:‬‬
‫)‪function dydt=odefun(t,y‬‬
‫;‪dydt=-t*y/10‬‬

‫ثم ضمن ممف ‪script‬‬


‫;)‪[t,y]=ode45('odefun',[0 10],10‬‬
‫;)')‪plot(t,y);xlabel('Time');ylabel('y(t‬‬

‫الخرج عمى الشكل التالي‪:‬‬

‫‪-249-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪10‬‬

‫‪9‬‬

‫‪8‬‬

‫‪7‬‬

‫‪6‬‬
‫)‪y(t‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬

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

‫يمكن استخدام ‪ anonymous function‬عمى الشكل التالي‪:‬‬


‫;)‪[t,y]=ode45(@(t,y) -t*y/10,[0 10],10‬‬

‫مالحظة‪ :‬يمكن ضمن ‪ MATLAB‬الحصول عمى حمول المعادلة التفاضمية بداللة الرموز وذلك باستخدام التعميمة‬
‫‪ ،dsolve‬الش كل القواعدي لمتعميمة ىو‪:‬‬
‫)'‪dsolve( 'eqn‬‬

‫حيث '‪ 'eqn‬ىي عبارة عن معادلة مكتوبة كسمسمة من المحارف ‪.string‬‬

‫تعيد التعميمة الحل بداللة الرموز ‪ symbolic solution‬إضافةً إلى ثوابت اختيارية ىي ‪ .C1, C2, ….‬ومن‬
‫حدية لممسألة وفق الشكل التالي‪:‬‬
‫الممكن أيضًا تحديد شروط ابتدائية أو ّ‬
‫)… ‪dsolve( 'eqn','cond1', 'cond2',‬‬

‫من أجل استخدام التعميمة ‪ dsolve‬بشكل صحيح‪ ،‬يتم التعبير عن المشتقات باستخدام المحرف ‪ ،D‬مثالً لمتعبير‬
‫عن المعادلة التالية‪:‬‬

‫نكتب ما يمي‪:‬‬
‫')‪'Df = -2*f + cos(t‬‬
‫أما من أجل تحديد مشتقات من مرتبة أعمى يجب أن يتبع رقم المرتبة حرف ‪ D‬أي لمتعبير عن المعادلة التالية‪:‬‬

‫‪-250-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫نكتب ما يمي‪:‬‬
‫')‪'D2y+2Dy = 5*sin(3t‬‬
‫باستخدام ‪ .MATLAB‬نكتب الرماز التايل‪:‬‬ ‫مثال‪ :‬لنقم حبل املعادلة التفاضلية التالية‬
‫)'‪s = dsolve('Dy = 5*y‬‬

‫الخرج ىو‪:‬‬
‫)‪C2*exp(5*t‬‬

‫مثال‪ : :‬لنقم بحل المعادلة التفاضمية التالية مع الشروط االبتدائية‬


‫باستخدام ‪ .MATLAB‬نكتب الرماز التالي‪:‬‬
‫)'‪dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2‬‬

‫الخرج ىو‪:‬‬
‫‪exp(t)/2 - (3*exp(-t))/2‬‬

‫‪Transforms‬‬ ‫التحويالت‬
‫يحتوي ‪ MATLAB‬عمى عدد من التحويالت المشيورة‪ ،‬والتي من الممكن تطبيقيا بسرعة باستخدام تعميمة وحيدة‬
‫مثل تحويل البالس ‪ Laplace‬وتحويل فورييو ‪ .Fourier‬سيتم التعرف عمى ىذه التحويالت بشكل أكبر ضمن‬
‫مقررات أخرى لذلك لن ندخل بالتفاصيل الرياضية ووجود التحويل وتقاربو‪ ،‬اليدف ىو استخدام التعميمات‬
‫لمحصول عمى التحويالت‪.‬‬
‫‪ .1‬تحويل البالس ‪:Laplcae Transform‬‬
‫سنذكر فقط عالقة تحويل البالس‪:‬‬

‫{‬ ‫}‬ ‫∫‬

‫التعميمة المستخدمة ىي ‪.laplace‬‬


‫مثال‪:‬‬

‫الخرج ىو‪:‬‬

‫‪-251-‬‬
MATLAB for Numerical Computing-Ch6

:Inverse Laplace Transform ‫ تحويل البالس العكسي‬.2


.ilaplace ‫يتم عن طريق التعميمة‬
:‫مثال‬

:‫الخرج ىو‬

-252-
MATLAB for Numerical Computing-Ch6

:Fourier Transform ‫ تحويل فورييو‬.3


.fourier ‫يتم عبر استخدام تعميمة‬
:‫مثال‬
%% Fourier Transform
clear all;close all;clc;
syms x
f = exp(-2*x^2);%ourfunction
ezplot(f,[-2,2])% plot of ourfunction
FT = fourier(f) %Fourier transform

:‫الخرج ىو‬

-253-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫)‪exp(-2 x 2‬‬

‫‪1‬‬

‫‪0.8‬‬

‫‪0.6‬‬

‫‪0.4‬‬

‫‪0.2‬‬

‫‪0‬‬

‫‪-2‬‬ ‫‪-1.5‬‬ ‫‪-1‬‬ ‫‪-0.5‬‬ ‫‪0‬‬ ‫‪0.5‬‬ ‫‪1‬‬ ‫‪1.5‬‬ ‫‪2‬‬


‫‪x‬‬

‫إضافة لمخرج التالي‪:‬‬


‫= ‪FT‬‬

‫‪(2^(1/2)*pi^(1/2)*exp(-w^2/8))/2‬‬

‫ثم نقوم برسم تحويل فورييو باستخدام التعميمة التالية‪:‬‬


‫)‪ezplot(FT‬‬

‫فنحصل عمى الخرج التالي‪:‬‬

‫‪-254-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪(21/2 1/2 exp(-w2/8))/2‬‬

‫‪1.2‬‬

‫‪1‬‬

‫‪0.8‬‬

‫‪0.6‬‬

‫‪0.4‬‬

‫‪0.2‬‬

‫‪0‬‬

‫‪-6‬‬ ‫‪-4‬‬ ‫‪-2‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪6‬‬


‫‪w‬‬

‫‪ .4‬تحويل فورييو ‪:Fourier Transform‬‬


‫يتم عبر استخدام تعميمة ‪.ifourier‬‬
‫مثال‪:‬‬
‫‪%%‬‬
‫‪syms w‬‬
‫)))‪f = ifourier(-2*exp(-abs(w‬‬

‫الخرج ىو‪:‬‬
‫))‪f = -2/(pi*(x^2 + 1‬‬

‫‪Probability and Statistics‬‬ ‫االحتماالت واإلحصاء‬


‫يعتبر عمم االحتماالت واإلحصاء واحداً من أىم العموم في د راسة الظواىر الطبيعية او دراسة العينات أو‬
‫المعطيات وفيم سموكيا وتوزعيا‪ ،‬نيدف في ىذه الفقرة إلى إعطاء لمحة سريعة ومختصرة عن بعض التوابع‬
‫المستخدمة في ىذا المجال‪.‬‬
‫من أجل توليد معطيات عشوائية بتوزيع معين يمكن استخدام التعميمات التالية‪:‬‬
‫‪rand, randn, randi ‬‬
‫بعض التعميمات لمحصول عمى المتوسط‪ ،‬الوسطي‪:... ،‬‬

‫‪-255-‬‬
MATLAB for Numerical Computing-Ch6

mean, median, mode 


min, max 
std, var 
pdf, cdf 

-256-
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫األسئمة‬
‫‪Command‬‬ ‫‪ .1‬قم بكتابة رماز برمجي لحل جممة المعادالت التالية ومن ثم أظير الحل ضمن‬
‫‪.Window‬‬

‫مساعدة‪ :‬قراءة فقرة حل المعادالت الجبرية‬

‫‪ .2‬نرغب في حل المعادلة التالية بشكل يكون الخرج بداللة الرمز‪ ،‬اكتب الرماز البرمجي الالزم‬
‫المعادلة‪:‬‬

‫الخرج بداللة المتحول ‪.x‬‬


‫مساعدة‪ :‬قراءة فقرة حل المعادالت الجبرية‬

‫‪ .3‬قم بكتابة رماز برمجي لتعريف تابع لنحتولين بداللة المتحوالت كما في دروس النظري‪ ،‬التابع‪:‬‬

‫مساعدة‪ :‬قراءة فقرة حل المعادالت الجبرية‬

‫‪ .4‬قم بكتابة رماز برمجي لتعريف كثير حدود عمى الشكل‪:‬‬

‫ومن ثم قم بإيجاد جذوره‬


‫مساعدة‪ :‬قراءة فقرة كثيرات الحدود‬

‫‪ .5‬قم بكتابة رماز برمجي إليجاد نياية التابع التالي عند القيمة ‪ 1‬من اليمين واليسار ومن ثم رسمو عمى‬
‫المجال ]‪.[-5,5‬‬

‫|‬ ‫|‬
‫مساعدة‪ :‬قراءة فقرة النيايات‬

‫‪ .6‬قم بكتابة رماز برمجي إليجاد مشتق التابع التالي‬

‫ومن ثم إيجاد قيمة المشتق عند النقطة ‪.x=1‬‬


‫مساعدة‪ :‬قراءة فقرة االشتقاق‬

‫‪-257-‬‬
‫‪MATLAB for Numerical Computing-Ch6‬‬

‫‪ .7‬قم بكتابة رماز برمجي إليجاد تكامل التابع التالي‪:‬‬

‫مساعدة‪ :‬قراءة فقرة التكامل‬

‫‪ .8‬قم بكتابة رماز برمجي إليجاد قيمة تكامل التابع التالي عمى المجال ]‪[0,2*pi‬‬

‫مساعدة‪ :‬قراءة فقرة التكامل‬

‫‪-258-‬‬
MATLAB for Numerical Computing-Ch6

‫اإلجابات‬
s = solve('6*x + 10*y = 15','8*x - 6*y = 5'); .1

s.x
s.y

syms a b x .2
solve(a*x+b == 0)

syms x y real .3

syms f(x, y)
f(x, y) = x^2 + 12*y-5*x+1;

%% .4
p = [1 0 0 0 0 0 -17 0 -5 10];
r = roots(p);

syms x .5
f =(x -0)/abs(x-0);
ezplot(f,[-5,5])
L = limit(f,x,1,'left')
R = limit(f,x,1,'right')

syms x .6
f =5*x^2+2*x;
diff(f)
diff(f,1)

-259-
MATLAB for Numerical Computing-Ch6

syms x .7

int(5*x^3)

syms x .8
f = sin(x)+2*cos(x);
a =int(f,0,2*pi);

-260-
MATLAB for Numerical Computing-Ch7

Simulink® ‫ المحاكاة باستخدام‬:‫الفصل السابع‬


Simulation using Simulink®

-1-

-261-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫عنوان الموضوع‪:‬‬
‫المحاكاة باستخدام ®‪Simulink‬‬

‫®‪Simulation using Simulink‬‬

‫الكممات المفتاحية‪:‬‬
‫‪ ،Simulink ،MATLAB‬معادلة تفاضمية ‪ ،Solver ،Differential Equation‬مكاتب ‪ ،Libraries‬كتل‬
‫‪ ،Blocks‬مولد إشارة ‪ ،Signal Generator‬مكامل ‪ ،Integrator‬مفاضل ‪ ،Derivative‬منظار ‪،Scope‬‬
‫‪Transfer‬‬ ‫نواس بسيط ‪ ،Simple Pendulum‬تعديل مطالي ‪ ،Amplitude Modulation‬تابع تحويل‬
‫‪.Function‬‬

‫‪.‬ممخص‪:‬‬
‫سنتعرف في ىذا الفصل عمى جزء جديد ضمن برمجية ®‪ MATLAB‬يدعى ®‪ ، Simulink‬وىو عبارة عن بيئة‬
‫ال عمى مبدأ المحاكاة‬
‫بيانية تساعد المستخدم في إجراء عممية محاكاة ونمذجة األنظمة الديناميكية‪ ،‬سنتعرف أ و ً‬
‫ضمن ىذه البيئة‪ ،‬وسنعرض ميزاتيا‪ .‬سيتم بعدىا التعرف عمى مكاتب ى ذه البيئة والتي تتيح لممستخدم إنشاء‬
‫األنظمة انطالقاً من الكتل الموجودة ضمنيا‪ ،‬كما سنتطرق لمتعرف عمى إعدادات المحاكاة لضمان الحصول عمى‬
‫يحددىا المستخدم‪.‬‬
‫النتيجة الصحيحة ضمن حدود خطأ مقبولة ّ‬
‫سنعرض بعد ذلك عدداً من األمثمة التي تتناول مواضيع مختمفة بيدف توضيح آلية المحاكاة والتدرب عمى‬
‫استخدام البيئة‪ ،‬ستشمل األمثمة مواضيع الدا رات الكيربائية‪ ،‬التعديل المطالي‪ ،‬اإلشارات وبعض العمميات عمييا‪،‬‬
‫التعبير عن األنظمة بداللة المعادالت التفاضمية وتمثيل األنظمة باستخدام توابع التحويل‪.‬‬

‫أهداف تعميمية‪:‬‬
‫يتعرف الطالب يف هذا الفصل على‪:‬‬
‫‪ ‬يتعرف عمى بيئة ‪ Simulink‬ضمن ‪.MATLAB‬‬
‫يستخدم المعادالت التفاضمية لتمثيل ونمذجة األنظمة‪.‬‬ ‫‪‬‬
‫ينجز محاكاة لمعديد من األنظمة وبطرق مختمفة باستخدام ‪.Simulink‬‬ ‫‪‬‬
‫يمتمك أداة قوية لممحاكاة تفيده في فيم األنظمة المختمفة‪.‬‬ ‫‪‬‬
‫يستوعب مواضيع مختمفة عن طريق نمذجة المشكمة بطريقة رياضية ومعاينة نتائج المحاكاة‪.‬‬ ‫‪‬‬

‫‪-262-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Introduction on Simulink ® Environment‬‬ ‫مقدمة عن بيئة ®‪Simulink‬‬

‫®‪ ، MATLAB‬لغة الحوسبة التقنية‪ ،‬عبارة عن بيئة برمجية تيدف إلى تطوير الخوارزميات‪ ،‬تحميل المعطيات‪،‬‬
‫العددية‪.‬‬
‫التصور والحسابات ّ‬
‫ّ‬
‫أما ®‪ Simulink‬فيي عبارة عن بيئة بيانية تيدف إلى إج راء محاكاة وانشاء تصاميم ونماذج ‪ Models‬ألنظمة‬
‫مضمنة تغطي عدد كبير من المجاالت‪.‬‬
‫َّ‬ ‫ديناميكية و أنظمة‬
‫يدعم جزء ®‪ Simulink‬تصميم األنظمة‪ ،‬المحاكاة‪ ،‬توليد الرمازات البرمجية بشكل أوتوماتيكي‪ ،‬واجراء قياسات‬
‫واختبارات لألنظمة المنفذة عمميًا‪ ،‬لذلك فيو يستخدم في تصميم وتطوير مجال واسع من المنتجات المتقدمة عالية‬
‫المستوى‪ ،‬مثالً أنظمة ذاتية الحركة‪ ،‬أنظمة التحكم في الطيران والكترونيات الطيران‪ ،‬أنظمة االتصاالت‪،‬‬
‫التجييزات االلكترونية‪ ،‬اآلالت الصناعية واألجيزة الطبية‪.‬‬

‫‪-263-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫الميزات الرئيسية ل ـ ®‪:)Key Features( Simulink‬‬


‫محرر بياني ”‪ “Graphical editor‬من أجل بناء وتنظيم المخططات الصندوقية ‪.block diagrams‬‬ ‫ّ‬ ‫‪‬‬
‫‪ ‬مكاتب وكتل ”‪ “Blocks‬معرفة مسبقًا من أجل نمذجة األنظمة المستمرة والمتقطعة واليجينة‪.‬‬
‫‪ ‬محرك إلجراء المحاكاة باستخدام خطوات ثابتة أو متغيرة اعتمادًا عمى المعادالت التفاضمية ‪ODE‬‬
‫‪.Solvers‬‬
‫‪ ‬أدوات لعرض نتائج المحاكاة‪ ،‬مثل المنظار ‪.Scope‬‬
‫كتل وظيفية من أجل استيراد خوارزميات منجزة باستخدام لغة ‪ MATLAB‬إلى جزء ®‪.Simulink‬‬ ‫‪‬‬
‫®‬
‫يمكن االطالع عمى جميع المنتجات المتعمقة بجزء ‪ Simulink‬والمتوفرة ضمن برمجية ‪ ،MATLAB‬عن طريق‬
‫زيارة الموقع االلكتروني لشركة ®‪ MathWorks‬والدخول إلى ‪.Products‬‬
‫‪http://www.mathworks.com/‬‬

‫الصور التالية تعرض بعض المنتجات والخدمات المتعمقة ب ‪ Simulink‬التي تؤمنيا شركة ®‪MathWorks‬‬
‫متعددة‪.‬‬
‫وذلك ضمن مجاالت مختمفة وتطبيقات ّ‬

‫‪-264-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫®‪Start of using Simulink‬‬ ‫البدء في استخدام ®‪Simulink‬‬


‫إن بيئة ®‪ Simulink‬تمت مكاممتيا مع بيئة ®‪ MATLAB‬مما يتيح لممستخدم استخدام الخوارزميات المنجزة‬
‫ضمن ‪ MATLAB‬واضافتيا إلى التصاميم أو النماذج ‪ Models‬المنجزة باستخدام ®‪ ،Simulink‬إضافةً إلمكانية‬
‫تصدير نتائج المحاكاة ضمن ®‪ Simulink‬إلى ‪ MATLAB‬وفضاء العمل ‪ Workspace‬والتعامل معيا عمى‬
‫أنيا متحوالت مما يتيح خيا رات إضافية لممستخدم كإج راء تحميل لمنتائج‪.‬‬
‫ذكرنا أن ®‪ Simulink‬يؤمن تخاطبًا مع المستخدم عبر‪:‬‬
‫‪ Graphical Editor .1‬محرر بياني من أجل بناء النماذج ‪ Model‬لألنظمة‪ ،‬يتميز بسيولتو كما أنو‬
‫تفاعمي مع المستخدم وىو ما بعرف ب ‪ Simulink Editor‬يتم بناء النماذج ضمنو عن طريق سحب‬
‫الكتل المطموبة من المكاتب الخاصة بيا ووضعيا ضمنو‪.‬‬
‫‪ Block libraries .2‬مكاتب تحتوي عمى كتل كل منيا يؤدي وظيفة معينة تشكل العناصر األساسية في‬
‫نمذجة أي نظام وىي موجودة ضمن ما يعرف ب ‪.Simulink Library Browser‬‬

‫‪-265-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Open the Simulink Library Browser‬‬ ‫فتح متصفح المكاتب ضمن ‪Simulink‬‬
‫من أجل فتح جزء ®‪ Simulink‬يمكن كتابة ضمن ‪ Command Window‬التعميمة ‪.simulink‬‬
‫من أجل الوصول إلى ‪ Simulink Library Browser‬ضمن برمجية ‪ ،MATLAB‬يمكن استخدام ‪Toolstrip‬‬

‫ضمن ‪ Home‬الموجودة ‪ Toolstrip‬اضغط عمى ‪Simulink Library‬‬

‫ستجد الواجية التالية التي تحتوي عمى المكاتب الخاصة ب ـ‪ simulink‬والتي جرى تعريفيا مسبقاً من قبل مطوري‬
‫البرمجية‪.‬‬

‫‪-266-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Create a New Simulink Model‬‬ ‫إنشاء نموذج ‪ Simulink‬جديد‬


‫الموصف لو أو‬
‫ّ‬ ‫ويمكن أيضاً إنشاء ‪ Simulink Model‬من أجل تصميم النظام المراد إيجاد النموذج ‪Model‬‬
‫إجراء المحاكاة لو‪ ،‬وذلك ضمن ‪ Home‬الموجودة ‪ Toolstrip‬اضغط عمى ‪New‬‬

‫ستظير أمامك الئحة‪ ،‬اختر منيا ‪ ،Simulink Model‬سيظير أمامك الواجية التالية‪.‬‬
‫أو بعد فتح ‪ Simulink Library Browser‬اضغط عمى ‪ file‬ومن ثم ‪ New‬ومن ثم ‪ ،Model‬أو يمكن‬
‫‪.‬‬ ‫الضغط عمى الزر‬

‫أو من ‪ file‬ثم ‪ ،save‬عندىا لديك‬ ‫محرر ‪ Simulink‬من اجل حفظ الممف اضغط عمى زر ‪save‬‬
‫ضمن ّ‬
‫يفضل الحفظ باستخدام الالحقة ‪.mdl‬‬ ‫خيارين لمحفظ كممف ‪ Simulink Models‬إما بالحقة ‪ .slx‬أو ‪.mdl‬‬
‫حيث تظير الالحقة ‪ .slx‬بعض المشاكل نتيجةً لمنسخة المتوفرة لدينا‪.‬‬
‫من أجل فتح ممف موجود مسبقًا‪ ،‬يمكن من ‪ file‬ثم ‪.open‬‬

‫‪-267-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Principle of Simulink Work‬‬ ‫مبدأ عمل ‪Simulink‬‬


‫ذكرنا أن ‪ Simulink‬يستخدم في نمذجة ‪ ،Modeling‬محاكاة ‪ ،Simulation‬وتحميل ‪ Analysis‬األنظمة‬
‫الديناميكة حيث يكون الخرج متغير مع الزمن وأنظمة التحكم الخطية والالخطية منيا إضاف ًة ألنظمة معالجة‬
‫اإلشارة‪،‬‬
‫‪ Simulink‬إلى جزئين رئيسيين ‪،‬ألول‪ ،‬يقوم المستخدم خاللو بإنشاء مخطط‬ ‫تقسم عممية المحاكاة ضمن‬
‫صندوقي لمنظام الم راد محاكاتو وذلك باستخدام ‪ Simulink Editor‬وعن طريق كتل من المكاتب الموجودة‬
‫ضمن ‪ Simulink Library Browser‬يتم عبر ىذا الجزء توصيف العالقات الرياضية المعتمدة عمى الزمن بين‬
‫مداخل ‪ Inputs‬النظام‪ ،‬مخارجو ‪ outputs‬و حاالتو ‪ states‬المختمفة‪ .‬في المرحمة الثانية يعطي المستخدم‬
‫األوامر لمبرمجية ببدء المحاكاة بعد تحديد زمن البداية والنياية لممحاكاة إضاف ًة الختيار ‪ Solver‬مناسب لمحل‪.‬‬
‫ما ىو ‪ Solver‬؟؟؟‬
‫‪ Solover‬ىو عبارة عن عنصر ضمن بيئة ‪ ،Simulink‬يقوم بتحديد الزمن لمخطوة ‪ step‬الالحقة ضمن‬
‫عددية ما من أ جل حل مجموعة من المعادالت التفاضمية االعتيادية ‪Ordinary‬‬
‫المحاكاة وتطبيق طريقة ّ‬
‫‪ Differential Equations ODE‬والتي تعبر عن نموذج ‪ Model‬النظام المراد محاكاتو‪.‬‬
‫بعد ذلك يمكن المقايضة بين اختيار خطوة ثابتة ‪ Fixed-Step‬أو خطوة متغيرة ‪ Variable_Step‬وذلك من‬
‫أجل القيم التي يجري محاكاة عندىا‪ ،‬إضافةً الختيار ‪ Solver‬مناسب حيث تختمف وفقاً لدرجة المعادلة‬
‫التفاضمية أو المشاكل التي تسخدم لحميا‪.‬‬
‫يمكن لالطالع أكثر عمى ىذه المواضيع وفيم أكبر لمبدأ العمل الدخول إلى ‪ help‬وفق المسار التالي‪:‬‬
‫‪Simulink  Simulation  Configure Simulation  Choose a Solver‬‬
‫نجد مما سبق‪ ،‬أن الفكرة الرئيسية ىو حل المعادلة التفاضمية‪ ،‬أو المعادالت‪ ،‬الموصفة لمنظام‪ .‬تكمن الحاجة‬
‫العددي من حقيقية عدم وجود حل تحميمي لجميع المعادالت التفاضمية وخاصةً الالخطية منيا‪.‬‬
‫لمحل ّ‬
‫الفكرة األساسية في حل المع ادالت التفاضمية ىو تجزئة المعادلة إلى مجاالت زمنية صغيرة ومن ثم حساب الحل‬
‫العددي عمى المجاالت السابقة‪ ،‬ىذه المجاالت ىي حجم الخطوة ‪ step size‬التي يجري إجراء مقايضة ‪trade‬‬
‫ّ‬
‫‪ off‬عند اختيارىا بين ‪ fixed‬أو ‪ variable‬أي خطوة ثابتة أو متغيرة‪ ،‬يحتوي ‪ Simulink‬عمى عدد كبير من‬
‫العددية تقترن بوجود أخطاء لذلك فزيادة مرتبة المعادلة التفاضمية يساعد في‬
‫‪ ،solvers‬وننوه دومًا ان الحسابات ّ‬
‫العددي‪،‬‬
‫التقميل من األخطاء إال أنو يستيمك الكثير من الوقت إلنياء المحاكاة بسبب زيادة تعقيد خوارزمية الحل ّ‬
‫عمى المستخدم إجراء المقايضة بين الزمن الكبير لممحاكاة والدقة عند اختياره ‪.solver‬‬

‫‪-268-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪getting to know more about‬‬ ‫التعرف أكثر عمى مكاتب ‪Simulin‬‬


‫‪:simulink libraries‬‬
‫ما ىي الكتل ‪what are blocks‬؟؟‬
‫الكتل ىي العناصر التي نستطيع باستخداميا بناء النماذج والتصاميم ضمن بيئة ‪ ،Simulink‬حيث أن تمثيل‬
‫ا لنظام يكون عبارة عن إيجاد وصل بين كل كتمة بحيث تعبر كل كتمة عن وظيفة معينة أو مكون ما ضمن‬
‫النظام‪ .‬تحتوي غالبية الكتل عمى متحوالت يجري التحكم بيا من أجل تخصيصي سموك الكتمة‪ ،‬مثالً ضمن كتمة‬
‫مولد اإلشارة ‪ Signal Generator‬يمكن تحديد نمط اإلشارة كإشارة جيبية أو سن منشار أو مربعة‪ ،‬وتحديد‬
‫المولدة وبيذا نحصل عمى عمى العنصر المناسب إلجراء اختبارنا أو معرفة سموك النظام‬
‫ّ‬ ‫وتردد الغشارة‬
‫مطال ّ‬
‫وفق فرضية ما أو من أجل دخل معين‪.‬‬
‫يوجد ضمن ‪ Simulink Library Browser‬عدد كبير من المكاتب التي تقسم ضمنيا إلى مكاتب فرعية وكل‬
‫مكتبة ف رعية تحتوي عمى عدد كبير من الكتل‪ ،‬سنعرض بعض من الكتل المفيدة والمستخدمة في كثير من‬
‫األحيان‪.‬‬

‫توضح الصورة التالية المكاتب‪:‬‬

‫‪-269-‬‬
MATLAB for Numerical Computing-Ch7

:‫من اىم المكاتب‬


Simulink, Communication System Toolbox, SimRF, Control System Tollbox, DSP
.System Toolbox, Simscape

-270-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫تختص ‪ Communication System Toolbox‬بجميع الكتل المفيدة في مجال ىندسة االتصاالت وتشمل‬
‫عمى العديد من المكاتب الفرعية ىي‪:‬‬
‫‪ ‬القنوات ‪.Channels‬‬
‫‪ ‬المرشحات ‪.Comm Filters‬‬
‫‪.Comm Sources and Sinks‬‬ ‫‪ ‬منابع ورواسم خاصة مثل مخطط العين‬
‫مسويات ‪.Equalizer‬‬
‫ّ‬ ‫‪‬‬
‫‪ ‬التعديالت ‪ Modulations‬ح يث تحتوي المكاتب عمى التعديالت الرقمية ‪ digital‬والتمثيمية ‪.Analog‬‬
‫‪ ‬ترميز المنبع ‪.Source Coding‬‬
‫‪ ‬التزامن ‪.Synchronization‬‬
‫إضافةً إلى عدد من المكاتب الفرعية األخرى‪ ،‬يرجى األخذ بعين االعتبار أن ىذه الكتل ستساعدك كثي ًار في‬
‫إجراء محاكاة ألنظمة اتصاالت بطريقة سيمة وفعالة يرجى االستفادة منيا في المقررات والسنوات الالحقة‪.‬‬
‫أما من أجل الكتل الخاصة باإلشا رات الراديوية ‪ Radio Frequency‬وىندسة األمواج المكروية ‪Microwace‬‬
‫‪ Engineering‬فيذه الماكتب توجد ضمن ‪.SimRF‬‬
‫تفيد ‪ Simscape‬في محاكاة عدد كبير من المواضيع في مجاالت ىندسة ال نظم االلكترونية‪ ،‬النظم الييدروليكية‪،‬‬
‫النظم الميكانيكية وأنظمة القدرة ‪.Power Systems‬‬
‫سنتعامل كثي ًار مع ‪ ،Simulink‬تحتوي عمى عدد كبير من المكاتب الفرعية أيضًا والتي سنستخدميا سنعرض اىم‬
‫المكاتب الفرعية المستخدمة في محاكاة األنظمة المستمرة‪ ،‬والمتقطعة واليجينة‪.‬‬
‫‪:Commonly Used Block‬‬
‫تحتوي عمى عناصر تستخدم كثي ًار مثل المنظار ‪ ،scope‬قيمة ثابتة ‪ ،Constant‬مكامل ‪ ،Integrator‬وحدة‬
‫تأخير ‪ MUX ،Delay‬والتي تفيد في تحديد مجرى لإلشارات ‪ ،Signal Routing‬ربح ‪ ،Gain‬أرضي‬
‫‪ ،Ground‬جداء ‪ ،Product‬جمع ‪ ،Sum‬دخل ‪ ،In‬خرج ‪.Out‬‬

‫‪Continuos‬‬
‫‪Integrator‬‬ ‫مفاضل ‪ ،Derivative‬مكامل ‪ ،Integrator‬تابع تحويل ‪ ،Transfer Fcn‬مكامل محدود‬
‫‪Limited‬‬

‫‪-271-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Discrete‬‬
‫تأخير ‪ ،Delay‬مفاضل متقطع ‪ ، Discrete Derivative‬مرشح متقطع ‪ ، Discrete Filter‬تابع تحويل‬
‫متقطع ‪ ، Discrete Transfer Fcn‬مكامل متقطع بالزمن ‪ ،Discrete-Time Integrator‬ماسك ‪Zero-‬‬
‫‪Order‬‬

‫‪Math Operation‬‬
‫جميع العمميات ميمة ومفيدة نذكر منيا‪ :‬القيمة المطمقة‪ ،‬الجمع‪ ،‬الطرح‪ ،‬الجداء‪ ،‬القسمة‪ ،‬الربح‪ ،‬إشارة تابع‪ ،‬توابع‬
‫جيبية‪ ،‬توابع رياضية‪ ،‬جداء سممي‪ ،‬جذر‪.... ،‬‬

‫‪Sinks‬‬
‫تحتوي عمى كتل تفيد في اإلظيار النتائج‪ ،‬إضافةً لذلك تحتوي عمى كتمتين ميمتين ىما‪ To File :‬لتصدير نتائج‬
‫المحاكاة إلى ممف‪ To Workspace ،‬من اجل تصدير نتائج المحاكاة إلى فضاء العمل‪.‬‬

‫‪-272-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪Sources‬‬
‫تحتوي عمى المنابع من اىميا ‪.Signal Generator ،Step ،Sine Wave‬‬

‫تتيح لنا ‪ Simulink Library Browser‬خيار البحث عن العنصر‪ ،‬يكفي فقط معرفة جزء من االسم لمكتمة‪ ،‬كما‬
‫انو من المفيد كثي اًر استخدام ‪ help‬المرافق لكل عنصر لمعرفة توصيفو بشكل دقيق‪ .‬كما ىو موضح في الشكل‬
‫التالي‪ ،‬حدد الكتمة ومن ثم اضظ عمى الزر اليميني واختر ‪.help‬‬

‫‪Examples‬‬ ‫أمثمة‬
‫مثال‪ :‬سنقوم ضمن ىذا المثال بإنشاء نموذج بسيط حيث سيتم توليد إشارة جيبية ومن ثم يتم تضخمييا بمقدار‬
‫وسمو ‪.Sine_Wave‬‬
‫ربح معين يمكن التحكم بو ومن ثم عرض الخرج‪ .‬قم بإنشاء ممف جديد ‪ّ New Model‬‬
‫الشكل النيائي لمدا رة ىو‪:‬‬

‫‪-273-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫نحتاج إلى العناصر التالية‪:‬‬


‫‪ Sine Wave‬يستخدم من أجل توليد إشارة الدخل ضمن النموذج‪.‬‬ ‫‪‬‬
‫‪ Gain‬يستخدم من أجل تضخيم إشارة الدخل بمعامل ربح ما‪.‬‬ ‫‪‬‬
‫‪ Scope ‬يستخدم من أجل معاينة الخرج‪.‬‬
‫إلحضار كتمة ‪ ،Sine Wave‬من قائمة المكاتب اذىب إلى ‪ Simulink‬ثم ‪ Sources‬ومن ثم اعثر عمى ‪Sine‬‬
‫‪.Wave‬‬

‫إلحضار كتمة ‪ ،Gain‬من قائمة المكاتب اذىب إلى ‪ Simulink‬ثم ‪ Commonly Used Blocks‬ومن ثم‬
‫اعثر عمى ‪.Gain‬‬

‫‪-274-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫إلحضار كتمة ‪ ،Scope‬من قائمة المكاتب اذىب إلى ‪ Simulink‬ثم ‪ Commonly Used Blocks‬ومن ثم‬
‫اعثر عمى ‪.Scope‬‬

‫عند الضغط عمى الكتمة يمكن سحبيا إلى الممف المنشأ من أجل المحاكاة ووضع الكتمة ضمنو كما في الشكل‬

‫او اضغط عمى الكتمة بزر الفأرة اليميني واختر ‪ ،Add to Sine_Wave‬طبعًا ‪ Sine_Wave‬حسب اسم‬
‫الممف الذي قمت بتسميتو عند اإلنشاء‪ ،‬يوضح الشكل التالي ذلك‪.‬‬

‫‪-275-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫عند وضع الكتل بشكل كامل تحصل عمى الشكل‪:‬‬

‫مالحظة‪ :‬عند جمب كتمة من المكتبة نالحظ وجود سيمين عمى دخل وخرج (أحياناً سيم واحد فقط) تدل ىذه‬
‫األسيم عمى دخل ‪ Input‬الكتمة و خرجيا ‪.Output‬‬

‫من أجل الحصول عمى الخرج ومشاىدتو البد لنا من الوصل بين الكتل باستخدام خطوط اإلشارة ‪Signal‬‬
‫‪ ، Lines‬ببساطة يمكن رسم الخطوط عن طريق تحديد الكتمة ورسم الخط بين مخرج ‪ output‬الكتمة ومدخل‬

‫‪-276-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪ input‬الكتمة األخرى‪ ،‬أو عن طريق الضغط عمى الكتمة األولى ومن ثم الضغط عمى زر ‪ Ctrl‬باستمرار‬
‫والضغط عمى الكتمة الثانية لتحصل عمى خط إشارة يصل بين العنصرين‪.‬‬
‫قم ببناء النموذج لمحصول عمى الشكل النيائي التالي‪:‬‬

‫لنقم اآلن بمحاكاة النموذج التالي وعرض النتائج وذلك دون التغيير باإلعدادات حيث أن اإلعدادات االفتراضية‬
‫ىي‪:‬‬

‫‪-277-‬‬
MATLAB for Numerical Computing-Ch7

-278-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫من أجل تشغيل المحاكاة اضغط عمى زر ‪ Run‬كما في الشكل أو من الشريط اختر ‪ Simulation‬ثم ‪.Run‬‬

‫ثم اضغط عمى ‪ Scope‬مرتين لتفتح واجية جديدة وتحصل عمى النتيجة التالية‪:‬‬

‫‪-279-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫لمشاىدة الخرج بشكل أوضح‪ .‬سنقوم اآلن بتغيير قيمة التضخيم لإلشارة‪ ،‬اضغط‬ ‫استخدم ‪aotuscale‬‬
‫عمى كتمة ‪ Gain‬ستحصل عمى النافذة التالية‪:‬‬

‫قم بتغيير قيمة ‪ Gain‬إلى ‪ ،3‬ثم الحظ الخرج‪.‬‬


‫ال‬
‫يمكن أيضاً جعل القيمة تابعة لمتحول‪ ،‬ويجري تعريف المتحول ضمن ‪ ،MATLAB‬لنقم بكتابة المتحول ‪ G‬مث ً‬
‫ضمن الخانة عوضاً عن القيمة ‪ ،3‬ثم اذىب إلى ‪ MATLAB‬وقم ضمن ‪ Command Window‬أو ضمن‬
‫ال‪.‬‬
‫ممف ‪ .Script‬أسند ليذا المتحول القيمة ‪ 5‬مث ً‬

‫‪-280-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫ومن ثم أعد تشغيل المحاكاة والحظ الخرج‪.‬‬


‫تتميز غالبية كتل بيئة ‪ Simulink‬بأنيا تدعم األشعة ‪ ،vectors‬مثالً اضغط عمى كتمة ‪ Sine Wave‬ستحصل‬
‫عمى الشكل التالي‪:‬‬

‫‪-281-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫نالحظ وجود شرح مفصل عن الكتمة إضاف ًة لمعالقات التي توصف الخرج وفقًا لممتحوالت التي يجري إدخاليا‬
‫التردد‪ ،‬سندخل شعاع المطال التالي ضمن‬
‫ضمن الحقول‪ ،‬سنقوم بتوليد من اإلشارات بمطال كختمف وبنفس ّ‬
‫خانة ‪:Amplitude‬‬
‫]‪ [1 , 4 , 6‬ثم نعي د المحاكاة فنحصل عمى الشكل التالي‪:‬‬

‫‪-282-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫سنضيف إلى المثال السابق تعديالً بسيطًا‪ ،‬حيث سنقوم أوال بحذف كتمة التضخيم ومن ثم مكاممة اإلشارة وعرض‬
‫اإلشارة األصمية وناتج تكامميا لذلك نحتاج إلى الكتل اإلضافية التالية‪:‬‬
‫‪ Integrator ‬يستخدم من أجل القيام بعممية المكاممة‪.‬‬
‫‪ MUX ‬يستخدم من أجل ضم عدة إشا رات‪ ،‬في حالتنا سيقوم بضم اإلشارة األصمية وناتج المكاممة‪.‬‬
‫لمحصول عمى ‪ MUX‬و ‪ Integrator‬اذىب إلى ‪ Simulink‬ثم ‪.Commonly Used Blocks‬‬
‫ينصح بترتيب وتنظيم الكتل بشكل منطقي لجعل الخطوط بين الكتل مستقيمة قدر اإلمكان‪.‬‬
‫الشكل النيائي لمتصميم ىو‪:‬‬

‫‪-283-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫قم بتغيير إعدادات المحاكاة لتوافق التالية‪:‬‬

‫إضاف ًة لذلك ادخل إلى إعدادات كتمة ‪ Integrator‬وضع القيمة البدائية التالية‪:‬‬

‫‪-284-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫ثم قم بإجراء المحاكاة‪ ،‬اضغط عمى ‪ scope‬مرتين لمشاىدة المحاكاة‪ ،‬ستالحظ انو ال يعرض كامل مدة المحاكاة‬
‫لذلك اضغط ضمن الشريط عمى الزر الموضح بالشكل‬

‫تظير امامك الواجية التالية‪:‬‬

‫يمكن من خالل الواجية التالية تحديد عدد المحاور ضمن الشاشة أي عدد األشكال التي ترغب برسميا ‪.‬‬
‫اذىب إلى ‪ History‬واجعل الخيا رات متوافقة مع الشكل التالي‪ ،‬وذلك بيدف عرض جميع نقاط المحاكاة‪:‬‬

‫‪-285-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫يمكن ضمن النافذة ‪ Style‬التحكم بألوان وشكل وتنسيق الخرج‪ .‬قم بإج راء تغييرات مثل تغيير لون المحاور‬
‫ال‪.‬‬
‫والخرج مث ً‬

‫الخرج اليائي لممحاكاة ىو‪:‬‬

‫‪-286-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫سنقوم بإضافة تعديل آخر عمى التصميم‪ ،‬ليصبح عمى الشكل التالي‪:‬‬

‫‪-287-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫نحتاج إلى الكتل اإلضافية التالية‪:‬‬


‫‪ Constant‬إلضافة قيمة ثابتة ما‪.‬‬ ‫‪‬‬
‫‪ Derivative‬من أجل أخذ المشتق‪.‬‬ ‫‪‬‬
‫‪ Sum ‬لجمع اإلشارتين‪.‬‬
‫‪ Divide‬من أجل التقسيم عمى قيمة ما‪.‬‬ ‫‪‬‬
‫المحددات التالية ضمن الكتل‪:‬‬
‫ّ‬ ‫لنضع‬
‫تردد اإلشارة ‪ Frequency‬مساوي لمقيمة ‪.2*pi‬‬
‫‪ Sin Wave ‬يجب أخذ ّ‬
‫‪ Constant‬األول القيمة ‪ 1‬والثاني القيمة ‪.2*pi‬‬ ‫‪‬‬
‫‪ Gain‬القيمة لمتضخيم ىي ‪.2*pi‬‬ ‫‪‬‬
‫‪ Derivative‬إبقاء قيمة الثابت ‪ c‬عمى ‪.inf‬‬ ‫‪‬‬
‫‪ Integrator ‬جعل الشرط البدائي ىو ‪.-1‬‬
‫‪ MUX ‬يمكن التحكم بعدد مداخمو ويجب وضعيا ‪.4‬‬
‫إعدادات المحاكاة ىي ‪ stop time = 10‬و ‪.Max step size = 0.01‬‬
‫الخرج ىو عمى الشكل التالي‪:‬‬

‫‪-288-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫تفسير الخرج‪ :‬من الم خطط الصندوقي لمنظام نجد أننا قد أدخمنا إشارة ‪ Sin‬وقمنا بعرضيا‪ ،‬أما اإلشارة الثانية فقد‬
‫تم إضافة قيمة ثابتة (تكافئ إضافة جيد ‪ DC‬إلى اإلشارة) لذلك نجد اإلشارة متمركزة ومتناظرة حول القيمة ‪1‬‬
‫وىية القيمة الثابتة التي أضفناىا‪ .‬أما اإلشارة الثالثة فيي ناتج تكامل إشارة ‪ Sin‬وىي إشارة ‪ -Cos‬ومن أجل‬
‫الحفاظ عمى نفس المطال قمنا بالضرب بالقيمة ‪ 2*pi‬أما اإلشارة الرابعة فيي مشتق اإلشاةر ‪ Sin‬وىو ‪Cos‬‬
‫ومن أجل الحفاظ عمى نفس المطال قمنا بالتقسيم عمى القيمة ‪.2*pi‬‬
‫تذكر‪:‬‬

‫مثال‪:‬‬
‫موضح‬
‫ّ‬ ‫نرغب في ىذا المثال بإجراء محاكاة لحركة نواس بسيط باستخدام ‪ MATALB‬ومن ثم ‪ ،Simulink‬وىو‬
‫بالشكل التالي‪:‬‬

‫‪-289-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫سنقوم بحل سريع لممسألة الستنتاج المعادلة التفاضمية لحركة النواس‪ ،‬سنقوم ببناء حدود المعادلة التفاضمية‬
‫باستخدام الكتل ‪ blocks‬المعرفة مسبقًا ضمن ‪.Simulink‬‬
‫الحل‪:‬‬
‫نعمم أن مجموع العزوم = عزم العطالة مضروباً بالتسارع الزاوي‬
‫العزم يساوي القوة مضروبة بالذراع‪.‬‬
‫عزم العطالة يساوي الكتمة بمربع البعد وذلك من أجل نقطة مادية‪.‬‬
‫يوجد قوتين تؤثران عمى الجسم الثقل‪ ،‬وتوتر الخيط‪ ،‬حيث أن قوة توتر الخيط معدومة ألنيا موازية لمحور‬
‫الدو ارن‪.‬‬
‫بناء عمى ما سبق نكتب‬
‫ً‬
‫̈‬

‫̈‬

‫‪ ،‬عندىا تصبح المعادلة التفاضمية‬ ‫وعنيا يكون‬ ‫يمكن أخذ تقريب من أجل زوايا صغيرة أي‬
‫عمى الشكل‪:‬‬
‫̈‬

‫‪.‬‬ ‫ويكون الدور ‪ T‬معطى بالعالقة √‬

‫‪-290-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫ال باستخدام ‪ MATLAB‬ثم سنستخدم ‪.Simulink‬‬


‫سنستخدم المعادلة التفاضمية )‪ (1‬لمحل أو ً‬
‫الحل سيكون عمى الشكل التالي‪:‬‬
‫̈‬

‫̈‬

‫̇ عندىا يكون‬ ‫لنفترض أن‬

‫ومنو التابع سيحتوي عمى عنصرين أي الدخل ىو شعاع عمى الشكل‪:‬‬


‫̂‬ ‫] [‬

‫̂‬ ‫̇‬
‫] [‬
‫̇‬

‫نقوم أوالً بإنشاء ممف تابع ‪ function‬يحتوي عمى الرماز التالي‪ ،‬ال تنسى أن يكون التابع ضمن نفس مسار‬
‫العمل عند استعمالو وال تنسى أن يكون اسم الممف المحفوظ بو التابع ىو نفس اسم التابع‪.‬‬
‫) ‪function dxdt = pendulum_eq(t,x‬‬
‫‪% Pendulum Equations‬‬
‫;‪L =1‬‬
‫;)‪theta = x(1‬‬
‫;)‪gamma = x(2‬‬

‫;‪dtheta = gamma‬‬
‫;)‪dgamma= - (9.8/L)*sin(theta‬‬

‫;)‪dxdt = zeros(2,1‬‬
‫;‪dxdt(1)=dtheta‬‬
‫;‪dxdt(2)=dgamma‬‬
‫‪end‬‬

‫قم بإنشاء ممف ‪ script‬واكتبو ضمنو الرماز التالي‪:‬‬


‫‪%% ODE pendulum‬‬
‫‪% assume pendulum is almost horizontal‬‬

‫‪-291-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫;)]‪[t,x]=ode45('pendulum_eq',[0 10],[0.9*pi 0‬‬


‫;))‪plot(t,x(:,1‬‬
‫;‪hold on‬‬
‫;)'‪plot(t,x(:,2),'r‬‬
‫)'‪legend('Position','Velocity‬‬

‫الخرج المنحني األزرق ىو الموضع بمعنى الزاوية مقد ًار ب ـ ‪ ،rad‬والمنحني األحمر ىو السرعة مقدرًة ب ‪.m/s‬‬

‫‪8‬‬
‫‪Position‬‬
‫‪6‬‬ ‫‪Velocity‬‬

‫‪4‬‬

‫‪2‬‬

‫‪0‬‬

‫‪-2‬‬

‫‪-4‬‬

‫‪-6‬‬

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

‫من الممكن أيضاً رسم السرعة بداللة الموضع‪ ،‬نالحظ أن السرعة معدومة عندما تكون قيمة ‪ theta‬أعظمية‪،‬‬
‫وعندما تكون ‪ theta =0‬تكون السرعة أعظيمة‪.‬‬

‫‪-292-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪2‬‬
‫‪Velocity‬‬

‫‪0‬‬

‫‪-2‬‬

‫‪-4‬‬

‫‪-6‬‬

‫‪-8‬‬
‫‪-3‬‬ ‫‪-2‬‬ ‫‪-1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬
‫‪Position‬‬

‫سنقوم اآلن بتمثيل المعادلة التفاضمية )‪ (1‬باستخدام ‪ ،Simulink‬المخطط النيائي لمدارة ىو عمى الشكل التالي‪:‬‬
‫يجب البحث عن العناصر وتنفيذ النموذج التالي ضمن ممف جديد لممحاكاة‪ ،‬يجري حفظو باسم ‪.pendulum‬‬

‫مالحظة‪ :‬إلدراج كتابة يمكن الضغط مرتين بالزر اليساري لمفأرة عمى أي مكان ضمن النافذة ومن ثم الكتابة‪.‬‬

‫‪-293-‬‬
MATLAB for Numerical Computing-Ch7

theta_der0 ‫ إضاف ًة لمقيمة االبتدائية ضمن ال مكامل األول ىي‬- G/L ‫الربح ضمن المضخم ىو‬:‫مالحظة‬
‫ أو ضمن ممف‬Command Window ‫ يجب تعريف المتحوالت ضمن‬theta0 ‫وضمن المكامل الثاني‬
.script
%% Simulink Example
% Simple Pendulum
% Here we define variable and initial condition
G=9.8; % Gravity Acceleration Constant
L= 1;% Length of Pundulum = 1 m
theta_der0= 0;% Initial Value of speed = 0
theta0=3.14;% Initial Value of position

.Max step size = 0.001 ‫ و‬stop time = 100 ‫ قم بتغيير إعدادات المحاكاة واجعل‬:‫مالحظة‬
‫ قم بإجراء مقانة مع الخرج النتج عن الحل‬،‫الخرج عمى الشكل وىو يعبر عن السرعة إضاف ًة إلى الموضع‬
.MATLAB ‫باستخدام‬

.to file ‫ و‬to workspace ‫يوجد كتل عديدة ميمة أيضًا نذكر منيا‬

-294-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫اق أر ضمن ‪ help‬عمل كل منيما‪ ،‬سنستخدم ‪ to workspace‬من أجل الحصول عمى نتائج المحاكاة ومن ثم‬
‫نقوم برسميا ضمن ‪ ،MATLAB‬حيث يعتبر الحصول عمى النتائج أم ًار ميمًا بيدف إج راء معالجة الحقة عمييا‬
‫سنكتفي ىنا بالرسم فقط‪.‬‬
‫سم و‬
‫قم بوصل ىذه الكتل لمحصول عمى شعاع السرعة والموضع كما في الشكل‪ ،‬يوجد متحول ضمن كل كتمة ّ‬
‫‪ Speed‬في الكتمة األولى و ‪ Position‬في الكتمة الثانية‪.‬‬

‫‪-295-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫عند تشغيل المحاكاة نالحظ تعريف متحولين ‪ Position‬و ‪ Speed‬ضمن ‪ Workspace‬وكل منيما عبارة عن‬
‫‪ Timeseries‬وىي بنية معطيات تحتوي عمى حقمين األول شعاع الزمن والثاني حقل المعطيات لموصول إلى‬
‫المعطيات مثالً نستخدم ‪ ،Positon.Data‬يوجد خيارات أخرى لمحفظ سنتسخدميا في األمثمة الالحقة‪.‬‬

‫لنقم اآلن برسم السرعة بداللة الموضع كما ىية الحالة عند تنفيذ التمرين باستخدام ‪.MATLAB‬نكتب مايمي‪:‬‬
‫)‪plot(Position.Data,Speed.Data‬‬
‫نحصل عمى الشكل التالي‪:‬‬

‫‪8‬‬

‫‪6‬‬

‫‪4‬‬

‫‪2‬‬

‫‪0‬‬

‫‪-2‬‬

‫‪-4‬‬

‫‪-6‬‬

‫‪-8‬‬
‫‪-4‬‬ ‫‪-3‬‬ ‫‪-2‬‬ ‫‪-1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬

‫الشكل السابق يشابو الشكل الذي حصمنا عميو باستخدام ‪ ، MATLAB‬وبيذا نجد كيفية الوصول إلى المعطيات‬
‫ال‪.‬‬
‫ويمكن عندىا المقارنة بين النتائج مث ً‬

‫‪-296-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫سنقوم اآلن باالنتقال إلى المعادلة (‪ )2‬التي توصف الحركة ولكن مع أخذ تقريب وسنقوم ببناء نموذج محاكاة مع‬
‫النموذج السابق من أجل المقارنة‪ .‬الشكل النيائي لمنموذجين ىو كالتالي‪:‬‬

‫مالحظة‪ :‬يجب تعريف نفس القيم البدائية لذلك ينصح بنسخ الشكل الشابق وحذف كتمة ‪ sin‬فقط‪.‬‬
‫سنقوم أوالً بعرض السرعة فقط يمكن حذف الخطوط التي تمثل الموضع وجعل النموذج يشابو الشكل التالي‪:‬‬

‫‪-297-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫الخرج ىو‪:‬‬
‫نالحظ ان السرعة في الحالة الثانية ىي تابع جيبي‪ ،‬وىذا متوقع (انظر المعادلة رقم )‪ ) (2‬كما أننا اقتطعنا نافذة‬
‫زمنية لعرض النتائج ضمنيا‪.‬‬

‫‪-298-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫سنقوم اآلن بعرض الموضع فقط يمكن حذف الخطوط التي تمثل السرعة وجعل النموذج يشابو الشكل التالي‪:‬‬

‫‪-299-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫الخرج‪ :‬كما ىو متوقع الحالة الثانية لمموضع الحل ىو تابع جيبي‪ ،‬كما أننا قمنا بعرض النتائج عمى نافذة زمنية‪.‬‬

‫مثال‪ :‬سنقوم في ىذا المثال بتشكيل معادلة تفاضمية معبرة عن نظام ما وايجاد الحل ليا باستخدام ‪.Simulink‬‬
‫المعادلة ىي‪:‬‬
‫⃛‬ ‫̈‬ ‫̇‬

‫‪-300-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫و ‪ u‬ىو إشارة مربعة‪.‬‬ ‫̇‬ ‫̈‬ ‫الشروط البدائية ىي‪:‬‬


‫مالحظة‪ :‬عند وضع كتمة ‪ to workspace‬وعمى خالف المثال السابق سنستخدم خيار لحفظ المتحول وىو‬
‫‪.array‬‬

‫مالحظة‪ :‬من أجل توسيع عنصر ‪ add‬إلى ‪ 4‬مداخل قم بفتح العنصر وضع داخمو أربع إشارات ‪ +‬لمداللة عمى‬
‫أربع مداخل والعممية المرغوبة ىي الجمع كما في الشكل‪:‬‬

‫‪-301-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫الشكل النيائي لمنظام ىو‪:‬‬

‫قم برسم المتحول ‪ y‬بداللة الزمن ‪ t‬لنحصل عمى الشكل التالي‪:‬‬

‫‪-302-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪1.4‬‬

‫‪1.2‬‬

‫‪1‬‬

‫‪0.8‬‬

‫‪0.6‬‬

‫‪0.4‬‬

‫‪0.2‬‬

‫‪0‬‬
‫‪0‬‬ ‫‪5‬‬ ‫‪10‬‬ ‫‪15‬‬ ‫‪20‬‬ ‫‪25‬‬ ‫‪30‬‬

‫مثال‪ :‬سنقوم في ىذا المثال بإنشاء نظام يحاكي التعد يل المطالي في أبسط أشكالو‪ ،‬يعتمد التعديل المطالي عمى‬
‫تغيير في مطال ِ‬
‫اإلشارة ليكون موافقًا إلشارة المعمومات‪.‬‬
‫العناصر المطموبة ىي‪.Signal Generator, Constant, Scope, Add, Product :‬‬
‫سنقوم ببناء النظام عمى الشكل التالي‪:‬‬

‫‪-303-‬‬
MATLAB for Numerical Computing-Ch7

:‫إعدادات الكتل‬
1 ‫وبتردد‬
ّ 1 ‫ بمطال‬Sin ‫ ومن ثم توليد إشارة‬Message ‫ سيتم إعادة تسميتو ب‬Signal Generator 
.Hz

-304-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪ ‬الثابت قيمتو ‪.2‬‬


‫وبتردد ‪20 Hz‬‬
‫ّ‬ ‫‪ Signal Generator 1 ‬سيتم تسميتو ب ‪ carrier‬ومن ثم توليد إشارة ‪ Sin‬بمطال ‪1‬‬
‫تردد إشارة المعمومات)‪.‬‬
‫التردد الحامل أكبر بكثير من ّ‬
‫(يجب ان يكون ّ‬
‫‪ ‬المنظار ‪ Scope‬سنستخدم أكثر من منظار وكل منيم سيتم تسميتو وفق مخطط النظام المعروض‪.‬‬
‫‪ Product ‬سيتم تغيير ‪ Sample Time‬إلى القيمة ‪ 0.001‬كما في الشكل‪:‬‬

‫‪-305-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫نضبط اإلعدادات وفق ‪ stop time = 2‬و ‪.max step size = 0.001‬‬
‫معدلة مطاليًا سنعرض إشارة المعمومات واإلشارة الحاممة واإلشارة النيائية‪ ،‬نالحظ أن غالف‬
‫الخرج ىواشارة ّ‬
‫المعدلة ىو إشارة المعمموامت‪.‬‬
‫ّ‬ ‫اإلشارة‬

‫‪-306-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫ال اختر أن إشارة المعمومات ىي ‪ square‬ستحصل عمى الخرج التالي‪.‬‬


‫يمكن تغيير شكل إشارة المعمومات مث ً‬

‫‪-307-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫أو إشارة سن منشار مثالً لنحصل عمى الخرج التالي‪:‬‬

‫‪-308-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫مثال‪ :‬نرغب في ىذا المثال في نمذجة دارة كيربائية‪ ،‬الدارة ليا الشكل التالي‪:‬‬

‫سنقوم بإيجاد تابع التحويل لمدارة‪:‬‬


‫بكتابة حمقت كيرشوف لمجيد ضمن الحمقة نجد‪:‬‬

‫‪-309-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪di 1‬‬
‫‪dt C ‬‬
‫‪v  iR  L‬‬ ‫‪‬‬ ‫‪idt‬‬

‫باالشتقاق بالنسبة لمزمن نجد‪:‬‬


‫‪1 dv di R d 2i‬‬ ‫‪i‬‬
‫‪‬‬ ‫‪ 2‬‬
‫‪L dt dt L dt‬‬ ‫‪LC‬‬
‫بأخذ تحويل البالس نجد‪:‬‬
‫‪sV R‬‬ ‫‪I‬‬
‫‪ sI  s 2 I ‬‬
‫‪L‬‬ ‫‪L‬‬ ‫‪LC‬‬
‫‪sV‬‬ ‫‪ 2 R‬‬ ‫‪1 ‬‬
‫‪I‬‬ ‫‪‬‬ ‫‪s‬‬ ‫‪‬‬ ‫‪s‬‬ ‫‪‬‬
‫‪L‬‬ ‫‪‬‬ ‫‪L‬‬ ‫‪LC ‬‬

‫ومنو يمكن كتابة عالقة التيار عمى الشكل‪:‬‬


‫‪‬‬ ‫‪‬‬
‫‪‬‬ ‫)‪s (1 / L‬‬ ‫‪‬‬
‫‪I V ‬‬
‫‪R‬‬ ‫‪1 ‬‬
‫‪ s2  s ‬‬ ‫‪‬‬
‫‪‬‬ ‫‪L‬‬ ‫‪LC ‬‬

‫وبالتالي يمكن تمثيل الدارة عمى الشكل التالي‪:‬‬

‫ميكن متثيل النظام السابق بداللة إشارة دخل إضاف ًة لتابع تحويل ‪:‬‬
‫)‪s(1 / L‬‬
‫‪Tf ‬‬
‫‪R‬‬ ‫‪1‬‬
‫‪s2  s ‬‬
‫‪L‬‬ ‫‪LC‬‬

‫العددية نجد‪:‬‬
‫بالتعويض بالقيم ّ‬
‫)‪s(100‬‬
‫‪s  1000s  1106‬‬
‫‪2‬‬

‫شكل النظام ضمن ‪:Simulink‬‬

‫‪-310-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫إعدادات الكتل‪:‬‬
‫بتردد متغير سنجرب عدة قيم ىي ‪100, 200, 500, 800, 1000,‬‬
‫‪ ‬اإلشارة الجيبية بمطال ‪ 5‬و ّ‬
‫‪.1400, 1700, 2000‬‬
‫‪ Transfer Function‬وفقًا لمشكل التالي‪:‬‬ ‫‪‬‬

‫‪-311-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫تردد إشارة الدخل‪ ،‬والحظ من أجل أي قيمة يتم الحصول‬


‫قم بتشغيل المحاكاة وقم بتجريب كافة القيم من أجل ّ‬
‫عمى المطال األعظمي إلشا رة الخرج‪.‬‬

‫مثال‪:‬‬
‫نرغب في ىذا المثال‪ ،‬في تمثيل نظام بسيطة عبارة عن دارة مقاومة ‪ R‬و وشيعة ‪ ،L‬موصولتان عمى التسمسل‪،‬‬
‫ال‪ ،‬وخرجو التيار ‪.i‬‬
‫دخل النظام عبارة عن كمون (فرق جيد) ليكن اسمو ‪ U‬مث ً‬
‫اليدف من ىذا المثال ىو التأكيد عمى أن ‪ Simulink‬أداة قوية وفعالة من أجل المحاكاة‪ .‬حيث من الممكن‬
‫محاكاة نفس النظام بعدة طرق‪.‬‬
‫الطريقة األولى ىو التمثيل في المجال الزمني باستخدام المعادالت التفاضمية والتي تتيح لنا تمثيل األنظمة‬
‫الخطية والغير خطية‪.‬‬
‫عن طريق تحميل ا لدارة باستخدام قوانين كيرشوف‪ ،‬نجد ان العالقة التي تربط بين جيد الدخل وتيار الخرج ىي‬
‫التالي‪:‬‬

‫وىي معادلة تفاضمية من الدرجة األولى‪.‬‬

‫‪-312-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫في طرف والطرف اآلخر يحتوي عمى‬ ‫يمكن إعادة كتابة المعادلة السابقة بالشكل التالي بحيث نعزل المقدار‬
‫بقية الحدود‪:‬‬

‫ال سنقوم بإنشاء ممف ‪ script‬ونكتب ضمنو الرماز التالي‪:‬‬


‫أو ً‬
‫‪%% Simulink Example‬‬
‫;‪clear all;close all;clc‬‬
‫‪U=1;% Amplitude of the Sin wave‬‬
‫‪F=1;% Frequency of the input signal‬‬
‫‪R=5;% Resistor value‬‬
‫‪L=0.01;% Inductor value‬‬

‫شكل النظام باستخدام الطريقة األولى‪:‬‬

‫اإلعدادات‪:‬‬
‫وتردد ‪F‬‬
‫‪ ‬إشارة الدخل مطال ‪ّ U‬‬
‫‪ Integrator ‬يجب وضع القيمة البدائية ‪.0‬‬

‫‪-313-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫‪ Gain‬األول قيمتو ‪ R‬والثاني قيمتو ‪.1/L‬‬ ‫‪‬‬


‫الطريقة الثانية ىي التمثيل كدارة كيربائية أي وضع مقاومة ووشيعة (تمثيل فيزيائي لمعناصر) وىذا األمر متاح‬
‫من ‪.SimPower Systems‬‬
‫الشكل النيائي لمنظام‪:‬‬

‫إلحضار العناصر‪:‬‬
‫‪ AC Voltage Source‬وضع ضمنو ‪ Peak Amplitude = U‬و )‪Frequency = F/(2*pi‬‬ ‫‪‬‬

‫‪-314-‬‬
MATLAB for Numerical Computing-Ch7

‫ فقط‬RL ‫ اختر‬Branch Type ‫ ضمنيا يمكن تحديد العناصر المرغوبة من‬Series RLC Branch 
Inductance = L ‫ و‬Resistance = R ‫وضع قيمة‬

.Current Measurement ‫ و‬Volatge Measurement 

‫ وضع داخميا‬Configure parameters ‫ عند الضغط عمييا تفتح واجية اختر منيا‬power gui 
Sample time = 0.001 ‫ و‬Solver Type = Tusin ‫ و‬Simulation Type = Discrete

-315-
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫الطريقة الثالثة باستخدام تابع التحويل أي ضمن مستوي البال س‪ ،‬بتحميل بسيط لمدارة نجد أم تابع التحويل ىو‪:‬‬

‫شكل النظام ىو‪:‬‬

‫عند إجراء المحاكاة لألنظمة الثالث السابقة سنحصل عمى الخرج ذاتو وىو عمى الشكل‪:‬‬

‫‪-316-‬‬
‫‪MATLAB for Numerical Computing-Ch7‬‬

‫نالحظ أن الخرج ىو عبارة عن إشارة جيبية مختمفة في الصفحة والمطال عن إشارة الدخل نتيجةً لوجود الوشيعة‬
‫والمقاومة‪ ،‬كما أن المطال األعظمي لمتيار ىو المطال األعظمي لجيد الدخل مقسوماً عمى جذر مربع قيمة‬
‫المقاومة ومربع قيمة الوشيعة مضروبًا بمربع النبض ‪.w‬‬
‫| |‬
‫√‬
‫أوتردد إشارة الدخل أوقيمة ‪ L‬انخفاض في مطال إشارة الخرج‪( .‬قم بتجريب ذلك)‪.‬‬
‫ّ‬ ‫نالحظ كمما ازدادت قيمة ‪R‬‬

‫‪-317-‬‬
MATLAB for Numerical Computing-Ch8

GUI ‫ الواجهات البيانية التخاطبية‬:‫الفصل الثامن‬


Graphical User Interface GUI

-1-

-318-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫عنوان الموضوع‪:‬‬
‫الواجيات البيانية التخاطبية ‪GUI‬‬

‫‪Graphical User Interface GUI‬‬

‫الكممات المفتاحية‪:‬‬
‫‪ ،MATLAB‬واجية بيانية تخاطبية ‪ ،GUI‬مرشد ‪Button ،Panel ،Slider ،Push Button ،GUIDE‬‬
‫‪Pop-up ،Static Text ،Edit Text ،Toogle Button ،Radio Button ،Check Box ،Group‬‬
‫‪.Toolbar ،Axes ،Table ،List Box ،Menu‬‬

‫ممخص‪:‬‬
‫سنتعرؼ في ىذا الفصؿ عمى جزء تطبيقي جديد ضمف برمجية ®‪ MATLAB‬وىو بناء واجيات بيانية تخاطبية‬
‫‪.GUI‬‬
‫تعتبر ‪ GUI‬وسيمة ىامة جدًا لمتفاعؿ مع مستخدمي الحاسب بشكؿ عاـ‪ ،‬وكما نالحظ تزداد الحاجات لبناء برامج‬
‫فعالّة تخدـ المستخدـ وتوفر لو مزايا وخصائص جديدة‪ ،‬ليذا فإف برمجية ‪ MATLAB‬تؤمف لممبرمج إمكانية‬
‫إنشاء تطبيقات جديدة ضمف بيئة رسومية خصبة تسيؿ عمؿ المستخدـ وتوفر لو خيارات تصميمية واسعة عبر‬
‫تعريؼ مسبؽ لمجموعة مف العناصر والمتحكمات تمزـ في غالبية التطبيقات ومف ثـ يتاح لممبرمج بناء التطبيؽ‬
‫بالشكؿ الذي يرغب بو عف طريؽ تصميـ الواجيات وتوصيؼ عمميا عبر كتابة رماز برمجي وفقًا لمحاجات‬
‫والمتطمبات؛ كما اف برمجية ‪ MATLAB‬تتيح لمستخدـ بناء عناصر جديدة برمجيًا خاصة بو‪.‬‬
‫سنعرض في ىذا الفصؿ مقدمة تعريفية عف الواجيات البيانية التخاطبية‪ ،‬ونوضح آلية العمؿ وطريؽ بناء‬
‫الواجيات ضمف ‪ ،MATLAB‬ثـ سننتقؿ لتصميـ الواجيات باستخداـ مرشد ‪ GUIDE‬متاح مف ‪،MATLAB‬‬
‫حيث سنعرض بعض األمثمة اليامة بعد التعرؼ عمى العناصر المعرفة ضمف ‪ GUIDE‬وأىميتيا‪.‬‬

‫أهداف تعميمية‪:‬‬
‫يتعرؼ الطالب في ىذا الفصؿ عمى‪:‬‬
‫يتعرؼ عمى الوجيات البيانية التخاطبية ‪ GUI‬ضمف ‪.MATLAB‬‬ ‫‪‬‬
‫‪ ‬ينجز بعض التطبيقات البسيطة باستخداـ ‪.GUI‬‬
‫يمتمؾ أداة قوية لبناء تطبيقات فعالة ومعقدة‪.‬‬ ‫‪‬‬
‫يستخدـ جميع المعارؼ السابقة المكتسبة ضمف المقرر لتنجيز برامج مفيدة بمساعدة ‪.GUI‬‬ ‫‪‬‬

‫‪-3-‬‬

‫‪-319-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫‪Introduction on Graphical‬‬ ‫مقدمة عن الواجهات البيانية التخاطبية ‪GUI‬‬


‫‪User Interface GUI‬‬
‫تتميز برمجية ‪ ،MATLAB‬واعتمادًا عمى لغة ‪ MATLAB‬بأنيا تحتوي عمى األدوات األساسية والضرورية‬
‫لتشكيؿ تطبيؽ برمجي متكامؿ‪ ،‬بشكؿ بسيط وبعيد عف تعقيدات اإلظيا رات‪ ،‬وبحيث ال يشغؿ المبرمج أو‬
‫المستخدـ نفسو بحؿ مشاكؿ تأميف أزرار أوامر مثالً‪ ،‬وانما تكوف الميمة األساسية ىي االستفادة مف األدوات‬
‫الموجودة‪ ،‬وربطيا مع اإلجراءات الالزمة لتحقيؽ اليدؼ مف البرنامج أو التطبيؽ‪.‬‬
‫عند العمؿ عمى تطوير برنامج ‪ Program‬أو تطبيؽ ‪ Application‬يوجد عدد كبير مف المعايير الواجب‬
‫اتخاذىا مثؿ سي ولة االستخداـ‪ ،‬الوضوح‪ ،‬صحة الخرج‪ .... ،‬يمكف لممبرمج التعرؼ عمييا عف طريؽ تصفح‬
‫مقاالت مختصة في ىذا الموضوع‪ ،‬اليدؼ في ىذا الفصؿ ىو تعمـ بناء الواجيات التخاطبية طبعاً مع احتراـ‬
‫القواعد السابقة‪.‬‬

‫??‪What is a User Interface UI‬‬ ‫ما هي الواجهات التخاطبية ؟؟‬


‫تعتبر الواجية التخاطبية وسيمة بيانية متضمنة في نافذة أو أكثر‪ ،‬تحتوي كؿ منيا عمى متحكمات تدعى عناصر‬
‫‪ ،components‬تتيح لممستخدـ القياـ بمياـ تفاعمية‪.‬‬
‫ال يحتاج المستخدـ عند استخداـ الواجيات البيانية التخاطبية ‪ ، GUI‬مف أجؿ القياـ بالميمة المطموبة أو مف‬
‫أجؿ الحصوؿ عمى خرج ما‪ ،‬إلنشاء ممؼ ‪ script‬أو كتابة تعميمات ضمف ‪.Command Window‬‬
‫تتميز الواجيات التخاطبية ضمف ‪ MATLAB‬بسيولة التعامؿ معيا‪ ،‬إضافةً إلى اإلمكانيات اليائمة التي تتمتع‬
‫العدديةػ وتدعـ الق راءة والكتابة مف‪ /‬إلى ممفات معطيات‪،‬‬
‫بيا‪ ،‬كما انيا تتيح القياـ بأي نوع مف الحسابات ّ‬
‫التواصؿ مع واجيات تخاطبية أخرى‪ ،‬وعرض المعطيات سواء عف طريؽ الرسوـ والمنحنيات أو عف طريؽ‬
‫الجداوؿ‪.‬‬
‫يوجد عدد كبير مف العناصر األساسية ضمف أي واجية تخاطبية ‪ ،UI‬والتي طبعًا تحتمؼ حسب حاجة المستخدـ‬
‫أو التطبيؽ‪ ،‬يبيف الشكؿ التالي واجية بيانية بسيطة يمكف بناؤىا بسيولة باستخداـ ‪،MATLAB‬‬

‫‪-320-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫تتألؼ الواجية السابقة مف العناصر التالية‪:‬‬


‫‪ ‬عنصر محاور ‪.Axes Component‬‬
‫‪ ‬قائمة منسدلة ‪ pop-up menu‬تعرض ثالث مجموعات مف المعطيات تتوافؽ مع توابع ‪MATLAB‬‬
‫وىي‪:‬‬
‫‪.Peaks ‬‬
‫‪.Membrane ‬‬
‫‪.Sinc ‬‬
‫‪ ‬عنصر نص ثابت ‪ Static Text Component‬مف أجؿ توصيؼ القائمة المنسدلة أي توضيح‬
‫عمميا‪.‬‬
‫‪ ‬ثالثة أزرار ‪ Buttons‬تؤمف لممستخدـ أنواع مختمفة مف الرسومات ‪ plot‬وىي‪:‬‬
‫‪.Surface ‬‬
‫‪.Mesh ‬‬
‫‪.Contour ‬‬

‫‪-321-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫يتـ اختيار نوع مف أنواع المعطيات عف طريؽ الثائمة المنسدلة‪ ،‬وعند الضغط عمى زر ما مف ‪Push Button‬‬
‫يتـ عرض ىذا النوع مف المعطيات عف طريؽ أحد الرسومات ثالثية األبعاد ‪ 3-D Plot‬المختار عبر الزر‪.‬‬

‫?? ‪How does a User Interface UI work‬‬ ‫كيف تعمل الواجهات التخاطبية ؟؟‬
‫عادةً‪ ،‬تنتظر الواجيات البيانية أي حدث ‪ event‬يقوـ بو مف المستخدـ‪ ،‬وبعدىا تستجيب لكؿ مف األحداث‬
‫السابقة عمى حدى‪ .‬األحداث ىي ما يقوـ بو المستخدـ مف أفعاؿ عند استخداـ الواجية البيانية كالنقر بزر الفأرة‬
‫عمى زر أوامر ما أو النقر المزدوج أليقونة ما أو اختيار أمر مف قائمة أو الضغط عمى لوحة المفاتيح‪.‬‬
‫بعد وقوع حدث ما يقوـ نظاـ التشغيؿ بتنفيذ إجراء مرتبط مع الحدث الواقع ومع ا ألداة التي وقع عمييا الحدث‬
‫ضمف نافذة الواجية التخاطبية‪ ،‬لذلؾ توصؼ برمجة الواجيات بأنيا برمجة مسيرة بأحداث ‪.event-driven‬‬
‫إف المناقشة السابقة تدفعنا إلى النتيجة التالية‪ :‬يترتب عمى المبرمج تجزئة البرنامج (التطبيؽ‪ ،‬الواجية) إلى‬
‫إجراءات يستجيب كؿ إجراء منيا لحد ث معيف‪.‬‬
‫بشكؿ عاـ‪ ،‬تبنى الواجيات التخاطبية عف طريؽ ربط كؿ عنصر ( متحكـ ) مع تابع يدعى ‪ ،callbacks‬أو‬
‫عدة توابع‪ ،‬سميت ىذه التوبع ب ‪ callbacks‬مف حقيقة أنو يتـ الرجوع إلييا أو استدعائيا "‪ "call back‬لمعرفة‬
‫ما ىو الفعؿ الواجب تنفيذه عند إنشاء حدث ‪ event‬ما ناتج عف الضغط عمى عنصر ما‪.‬‬
‫محدد ضمف الواجية البيانية التخاطبية ‪ ،GUI‬يقوـ تابع‬
‫‪ Callback‬ىو تابع يتـ كتابتو وربطو مع عنصر ّ‬
‫ال‬
‫‪ Callback‬بالتحكـ بالواجية أوسموؾ العنصر عف طريؽ تطبيؽ فعؿ ما بعد وقوع حدث مرتبط بالعنصر‪ ،‬مث ً‬

‫‪-322-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫العدديف المراد جمعيا مف خالؿ حقميف‬


‫عف الضفط عمى زر يقوـ التابع بتنفيذ عممية الجمع بحيث يأخذ قيـ ّ‬
‫ضمف الواجية ومف ثـ ينفذ عممية الجمع ويعرض الناتج في حقؿ جديد‪.‬‬

‫‪Ways to build MATLAB‬‬ ‫طرق بناء واجهات بيانية ضمن ‪MATLAB‬‬


‫‪User Interfaces UIs‬‬
‫الواجية البيانية ضمف ‪ MATLAB‬ىي عبارة عف نافذة شكؿ ‪ figure window‬يتـ إضافة ليا عناصر وفقًا‬
‫لحاجة أو رغبة المستخدـ‪ ،‬المبرمج أو التطبيؽ‪ .‬يتـ تحديد حجـ‪ ،‬موضع‪ ،‬وشكؿ العنصر المضاؼ وفقاً لمخيا رات‬
‫المستخدـ التصميمية ومف ثـ يتـ توصيؼ عمؿ كؿ عنصر باستخداـ توابع ‪.Callbacks‬‬
‫يمكف بناء الواجيات البيانية ضمف ‪ MATLAB‬بطريقتيف ىما‪:‬‬
‫‪ .1‬إنشاء الواجية البيانية برمجياً‪.‬‬
‫باستخداـ ىذه الطريقة يتـ بناء الواجيات بالكامؿ برمجيًا‪ ،‬بحيث يعرؼ الرماز المكتوب خصائص‬
‫وسموؾ مكونات الواجية وىو عبارة عف ممؼ ذو الحقة ‪ ، .m‬ويمكف تشغيؿ الواجية عف طريؽ تنفيذ‬
‫‪ Run‬الرماز‪.‬‬
‫لف نقوـ بتطوير الواجيات باستخداـ ىذه الطريقة نظ ًار لصعوبتيا مقارتةً بالطريقة الثانية نسب ًة لطالب لـ‬
‫يستخدموا برمجية ‪ MATLAB‬مسبقاً أو بشكؿ كبير ولـ تتشكؿ ليـ الخبرة الواسعة في مجاؿ الواجيات‬
‫التخاطبية‪..‬‬
‫‪ .2‬إنشاء الواجية البيانية باستخداـ المرشد ‪.GUIDE‬‬
‫يتـ ضمف ىذه الطريقة البدء مع شكؿ ‪ figure‬فارغ يقوـ المستخدـ بإضافة العناصر إليو وذلؾ‬
‫بمحرر تصاميـ بيانية ىو المرشد ‪ ،GUIDE‬يقوـ ‪ GUIDE‬بإنشاء وربط رماز برمجي‬ ‫ّ‬ ‫باالستعانة‬
‫يحتوي عمى ‪ callbacks‬لمواجية البيانية وعناصرىا‪ ،‬يحفظ ‪ GUIDE‬الواجية عمى شكؿ ممفيف األوؿ‬
‫ىو الشكؿ يعبر عف الواجية الرسومية و يحتوي العناصر المكونة ليا (بممؼ ذو الحقة ‪ ).fig‬والثاني ىو‬
‫الرماز البرمجي أو األوامر البرمجية التي تؤدي إلى تنفيذ البرنامج التطبيقي المطموب تحقيقو (بممؼ ذو‬
‫الحقة ‪ .).m‬ويمكف تشغيؿ الواجية مف كال الممفيف‪.‬‬
‫جيب التنويه إىل إمكانية إنشاء ‪ UI‬باستخدام ‪ GUIDE‬ومن مث تعديلها برجمياً‪ ،‬إال أنه ال ميكن إنشاء ‪ UI‬برجمياً ومن مث‬
‫التعديل عليها باستخدام ‪.GUIDE‬‬

‫‪-323-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫بدء العمل مع الواجهات البيانية التخاطبية ‪Getting Start with GUI GUI‬‬
‫‪Open a New UI in the GUIDE‬‬ ‫محرر ‪GUIDE‬‬
‫فتح واجهة بيانية جديدة باستخدام ّ‬
‫‪Editor‬‬
‫‪Command‬‬ ‫يمكف الوثوؿ إلى ‪ GUIDE‬ضمف ‪ MATLAB‬عف طريؽ كتابة التعميمة ‪ guide‬ضمف‬
‫‪ ،Window‬أو يمكف استخداـ ‪Toolstrip‬‬

‫اضغط عمى ‪ New‬ستظير أمامؾ الئحة‪ ،‬اختر منيا ‪ ،Graphical User Interface‬سيظير أمامؾ الواجية‬
‫التالية‪.‬‬

‫عادة يتـ اختيار ‪ Blank GUI‬مف أجؿ البدء بواجي ة فارغة‪ ،‬بعد الضغط عمى ‪ OK‬نحصؿ عمى الواجية التالية‪:‬‬
‫ً‬

‫‪-324-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫تحتوي الواجية السابقة عمى جميع العناصر ‪ components‬الممكف إضافتيا إلى الواجية‪ ،‬مف أجؿ عرض‬
‫أسماء مكونات الواجية البيانية ضمف الواجية السابقة‪ ،‬نقوـ بما يمي‪:‬‬
‫‪File  Preferences  GUIDE‬‬ ‫‪ .1‬اختر‬
‫‪ .2‬اختر ‪Show names in component palette‬‬
‫‪ .3‬اضغط ‪OK‬‬
‫تحصؿ عندىا عمى الشكؿ التالي‪:‬‬

‫‪-325-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫التعرف عمى العناصر المتاحة لبناء واجهة بيانية‬


‫‪Getting to know available components to design a UI‬‬
‫يبيف الشكؿ التالي جميع العناصر المتاحة ضمف ‪ GUIDE‬مف أجؿ بناء واجية بيانية ‪ UI‬ضمف ‪،MATLAB‬‬
‫سنعرض ضمف جدوؿ ىذه العناصر إضاف ًة إلى األيقونة الخاصة بكؿ عنصر ووصؼ‬
‫لو‪.‬‬

‫‪-326-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫الوصف‬ ‫األيقونة‬ ‫العنصر‬


‫عند الضغط عمى مثؿ ىذا الزر يتـ توليد حدث ما‪ ،‬مثالً لنعتبر أنو‬ ‫‪Push Button‬‬

‫زر ‪ OK‬عند الضغط عميو يتـ تطبيؽ إعدادات معينة بعد اختيارىا أو‬
‫يتـ إغالؼ الواجية مثالً‬
‫ىو عبارة عف زر قابؿ لالنزالؽ بيف قيمتيف عدديتيف بخطوة معينة‪ ،‬يتـ‬ ‫‪Slider‬‬

‫ال يستفاد‬
‫تحريؾ المزالؽ ‪ Silder‬عند طريؽ الضغط عميو وسحبو‪ ،‬مث ً‬
‫منو في حالة الحاجة لتغيير قيمة عنصر ضمف الواجية لمعرفة أثره‬
‫ال عمى منحني تابع‪.‬‬
‫مث ً‬
‫ىي عبارة عف لوحة‪ ،‬تفيد في تنظيـ العناصر ضمف الواجية ضمف‬ ‫‪Panel‬‬

‫مجموعات‪ ،‬تفيد ‪ panel‬في جعؿ الواجية أبسط لمفيـ وأكثر وضوحًا‬


‫ويوجد لكؿ لوحة عنواف وحدود‪ ،‬مثالً عند تنفيذ واجية تقوـ عمؿ اآللة‬
‫الحاسبة يمكف تجميع عمميات الجمع والضرب والقسمة والطرح ضمف‬
‫مجموعة وتسميتيا العمميات الحسابية‪ ،‬ومف الممكف إنشاء لوحة جديدة‬
‫تحتوي عمى األزرار وتسميتيا أز ار إضافةً لموحة تحتوي عمى حقوؿ‬
‫إلدخاؿ األرقاـ مثالً كخيار إضافي إف عممية الفصؿ السابقة تجعؿ‬
‫الواجية أفضؿ لممستخدـ مف ناحية سيولة االستخداـ‪.‬‬
‫تشابو ‪ Panels‬إال أنيا تستخدـ لتنظيـ عممية اختيار ضمف عدة‬ ‫‪Button Group‬‬

‫خيارات متاحة مف عدد مف األزرار مثؿ ‪ radio buttons‬و ‪toogle‬‬


‫‪.buttons‬‬
‫يمكف ليذا النوع مف األزرار توليد حدث عندما يتـ اختياره‪ ،‬كما يمكف‬ ‫‪Check Box‬‬

‫معرفة حالتو أي إ از تـ اختياره أو لـ يتـ اختياره‪ ،‬يستفاد منو عندما يتـ‬


‫تزويد المستخدـ بعدد مف الخيا رات المستقمة ويطمب مف المستخدـ‬
‫ال اختيار المواد التي يرغب في دراستيا ضمف الفصؿ‬
‫اختيار منيا‪ ،‬مث ً‬
‫الحالي‪.‬‬
‫عادة ضمف عدد معيف مف‬
‫ً‬ ‫مشابية ؿ ‪ check box‬إال أنيا تستخدـ‬ ‫‪Radio Button‬‬

‫ال‬
‫األزرار مف نفس النوع ‪ Radio Buttons‬والمرتبطة مع بعضيا‪ ،‬مث ً‬
‫نرغب بجعؿ المستخدـ اختيار مجاؿ لسعر المنتج الذي يود بعرضو‪،‬‬
‫عند الضغط عمى أحد ىذه األزرار يتـ إلغاء اختيار أي زر آخر ضمف‬
‫نفس المجموعة‪ ،‬ينصح باستخداـ ‪ Button Group‬عند استخداـ‬
‫مجموعة مف ‪.Radio Buttons‬‬

‫‪-327-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫ىذا النوع مف ا ألزرار يقوـ بتوليد حدث ويؤشر إلى حالتو فيما إ از تـ‬ ‫‪Toogle Button‬‬

‫ضغطو أـ ال أي إ از كاف ‪ On‬أو ‪ ، Off‬يحافظ الزر عمى شكمو أنو‬


‫مضغوط أي حالتو ‪ On‬إلى حيف الضغط عميو مرة أخرى لينتقؿ عندىا‬
‫إلى الحالة ‪ ،Off‬ينصح باستخداـ ‪ Button Group‬عند استخداـ‬
‫مجموعة مف ‪.Toogle Buttons‬‬
‫ىو عبارة عف حقؿ يتيح لممستخدـ بكتابة نص ضمنو أو تعديؿ نص‬ ‫‪Edit Text‬‬

‫ما‪ ،‬يمكف استخدامو كدخؿ لمواجية مثالً يريد المستخدـ إدخاؿ رقـ‬
‫لحساب ناتج العاممي ‪ factorial‬لو‪ .‬تجدر المالحظة أنو يجب تحةيؿ‬
‫األعداد المدخمة داخؿ الرماز البرمجي إلى أعداد ألنو يفيـ الدخؿ عمى‬
‫أنو محرؼ ‪ char‬او سمسمة محرفية ‪string‬يمكف استخداـ توابع‬
‫‪.str2num‬‬
‫ىو عبارة عف حقؿ يقوـ بعرض نص ثابت‪ ،‬يستخدـ بيدؼ توضيح‬ ‫‪Static Text‬‬

‫ال‪.‬‬
‫عمؿ عنصر مف عناصر الواجية مث ً‬
‫ىي عبارة عف قائمة منسدلة عند الضغط عمى السيـ الموجود ضمنيا‬ ‫‪Pop-up Menu‬‬

‫ال نريد رسـ مجموعة مف‬


‫تفتح وتعرض لممستخدـ عدد مف الخيا رات‪ ،‬مث ً‬
‫التوابع نضع ضمنيا الخيارات يضغط المستخدـ الختيار التابع الم راد‬
‫رسمو‪.‬‬
‫تقوـ ىذه المجموعة بعرض قائمة م ف العناصر وتتيح لممستخدـ‬ ‫‪List Box‬‬

‫باختيار عنصر أو أكثر‪.‬‬


‫تستخدـ مف اجؿ إنشاء جدوؿ مف العناصر‪.‬‬ ‫‪Table‬‬

‫وجود ىذا العنصر ضمف الواجية بيانية التخاطبية ‪ GUI‬يتيح عممية‬ ‫‪Axes‬‬

‫ال منحني تابع ما أو صورة‪ .‬يمكف‬


‫إظيار بيانيات ‪ graphics‬مث ً‬
‫التحكـ بخصائص ىذا العنصر بشكؿ كبير لمتحكـ باإلظيار‪.‬‬
‫يتيح لؾ ىذا العنصر بإنشاء شريط أدوات خاص بالواجية أو‬ ‫‪Toolbar‬‬

‫التطبيؽ الذي تعمؿ عميو مف أجؿ إغنائو بخيا رات إضافية‪.‬‬


‫بعد ىذه المقدمة النظرية عف العناصر‪ ،‬سنقوـ برؤية شكؿ معظـ العناصر ضمف واجية إضاف ًة لتجريب عمميا‪،‬‬
‫ىذه الواجية عبارة عف مثاؿ تـ تنجيزه مسبقاً ضمف ‪ ،MATLAB‬لتشغيمو قـ بكتابة الرماز التالي‪:‬‬
‫‪copyfile(fullfile(docroot, 'techdoc','creating_guis',...‬‬
‫‪'examples','controlsuite*.*')),...‬‬
‫;)'‪fileattrib('controlsuite*.*', '+w‬‬
‫‪guide controlsuite.fig‬‬

‫‪-328-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫مالحظة‪ :‬يجب التأكد مف مسار العمؿ تجنبًا لألخطاء‪.‬‬


‫عند تنفيذ الرماز السابؽ ستفتح واجية كما في الشكؿ التالي‪:‬‬

‫مف أجؿ تشغيؿ الواجية‪ ،‬ضمف الشريط العموي اضغط عمى ‪ tools‬ومف ثـ اختر ‪ Run‬أو اضغط عمى أيقونة‬
‫‪ Run‬مباشرةً كما يوضح الشكؿ‪.‬‬

‫عند التشغيؿ تحصؿ عمى الشكؿ التالي‪:‬‬

‫‪-329-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫مف أجؿ معاينة الرماز البرمجي المنجز وتوابع ‪ CallBacks‬يمكف مف ‪ View‬اختيار ‪ Editor‬سيتـ فتح ممؼ‬
‫‪ .m‬يحتوي عمى الرماز‪ ،‬أو يمكف مف خالؿ األيقونة الخاصة ب ‪ ،Editor‬ىذه الخيا رات موضحة في الشكؿ‪.‬‬

‫قـ ب التعرؼ عمى الواجية أكثر اضغط عمى األزرار والحظ ماذا يتغير ضمف الواجية‪ ،‬يوجد ‪Action Panel‬‬
‫تقوـ بعرض لممستخدـ الحدث الذي قاـ بفعمو‪ ،‬مثالً عند الضغط عمى ‪ Push Button‬تجد‪:‬‬

‫‪-330-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫‪Getting‬‬ ‫التعرف أكثر عمى ‪ GUIDE‬واستخدامه في بناء واجهة بيانية تخاطبية‬


‫‪to know more about GUIDE and usre it to build a GUI‬‬
‫قبؿ التعرؼ بشكؿ أكبر عمى ‪ GUIDE‬والبدء ببناء مثاؿ توضيحي‪ ،‬سنعرض مراحؿ بناء واجية بيانية تخاطبية‬
‫‪ GUI‬لتطبيؽ أو برنامج ما ضمف ‪ ،MATLAB‬ىذه المراحؿ ىي‪:‬‬
‫‪ .1‬تصميـ واجية البرنامج أو التطبيؽ‪.‬‬
‫‪ .2‬ضبط الخصائص‪.‬‬
‫‪ .3‬برمجة توابع ‪.Callbacks‬‬

‫‪ .1‬تصميـ واجية البرنامج بشكؿ عاـ يتـ عبر وضع العناصر المرغوبة في المكاف المناسب‪ ،‬يتطمب ذلؾ‬
‫تفكير أولي ورسـ لمشكؿ النيائي الذي يرغب المستخدـ في الحصوؿ عميو قبؿ البدء بالتصميـ‪ ،‬إف‬
‫استخداـ العناصر الجاىزة ضمف ‪ GUIDE‬والتي تـ شرح لعمميا مسبقًا توفر عمى المستخدـ الوقت مف‬
‫حيث البداية في كتابة الرماز البرمجي المطموب مف الصفر ‪،‬إذا تومف لو‪ ،‬عمومًا‪ ،‬العديد مف إمكانيات‬
‫اإلظيار والعمميات البرمجية المختمفة ‪ ،‬يتـ توضيع العناصر عمى النافذة الرئيسية (‪ )figure‬إما بالنقر‬
‫المزدوج عمييا في صندوؽ األدوات حيث تتوضع في ال زاوية اليسرى ومف ثـ تحريكيا ضمف النافذة إلى‬
‫المكاف المرغوب (عف طريؽ السحب واإلفالت ) وتغيير حجميا عف طريؽ حوافيا ‪ ،‬أو بالنقر عمى‬
‫العنصر (مرة واحدة) ومف ثـ تشكييا (رسميا) ضمف النافذة بالحجـ والمكاف المطموبيف‪.‬‬
‫‪ .2‬لكؿ عنصر مف العناصر‪ ،‬بما في ذلؾ نافذة البرنامج‪ ،‬مجموعة محددة مف الخصائص تحدد مظير‬
‫وسموؾ العنصر‪ ،‬وعندما وضع عنصر ما ضمف الواجية يضع ‪ MATLAB‬قيماً افتراضية لخصائصيا‪،‬‬
‫ويمكف ضبط ىذه الخصائص إما أثناء التصميـ أو أثناء التنفيذ‪ .‬واحدة مف أىـ الخصائص ىي اسـ‬
‫العنصر‪ ،‬ينصح بتسمية العناصر بأسماء واضحة تعبر عف وظيفتي ا‪ ،‬وذلؾ لبناء رماز برمجي فعاؿ مف‬
‫السيؿ العودة إليو‪ ،‬كما انو مع زيادة عدد العناصر أو العودة لمواجية الحقًا ال يعود باإلمكانية تذكر اسـ‬
‫زر معيف‪ ،‬مثالً عند وضع أربعة ازرار مف نوع ‪ Push Button‬تكوف األسماء ‪،Push_Button_1‬‬
‫ال‬
‫‪ Push_Button_4 ،Push_Button_3 ،Push_Button_2‬وىنا احتماؿ الخطأ كبير لذلؾ مث ً‬
‫لنفترض أننا نريد االستفادة مف ىذىا األزرار مف أجؿ تنفيذ العمميات التالية جمع‪ ،‬طرح‪ ،‬ضرب وقسمة‬
‫عندىا ينصح بتسمية األزرار باألسماء التالية‪.myAdd, mySub, myMult, myDiv :‬‬
‫‪ .3‬أوضحنا في فق رات سابقة أف كؿ حدث ينتج عف فعؿ مف المستخدـ يجب أف يولد استجابة مف الواجية‬
‫البيانية تتـ ىذه االستجابة عف طريؽ توابع ‪ CallBacks‬والتي يكتب ضمنيا رماز برمجي لتوصيؼ‬
‫عمؿ الزر‪ ،‬المحور ‪ ... ،‬أو أي عنصر آخر‪.‬‬
‫يقوـ المصمـ أو المبرمج باستخداـ لغة ‪ MATLAB‬بإعداد تابع ‪ callback‬لكؿ حدث‪ ،‬يحدد ىذا التابع شكؿ‬
‫االس تجابة ليذا الحدث‪ ،‬يتـ الوصوؿ إلى ممؼ البرمجة ‪ .m‬الخاص بالواجية عف طريؽ النقر بالزر اليميني عمى‬

‫‪-331-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫العنصر ضمنالواجية واختيار ‪ view callbacks‬ومف ثـ اختيار ‪ callbacks‬وىنا يتـ االنتقاؿ إلى القسـ‬
‫البرمجي داخؿ ممؼ ‪ .m‬وتبدأ عممية برمجة التابع‪.‬‬
‫في واجيات ‪ MATLAB‬يتميز كؿ عنصر واجية عف أي متحوؿ بواسطة المقبض البرمجي ‪ handles‬وباسـ‬
‫برمجي يدعى ‪ tag‬وىو موجود ضمف خصائصو ويمكف تغييره ولكف يجب االنتباه إلى استخداـ االسـ الجديد‬
‫أثناء البرمجة‪.‬‬
‫التعامؿ بشكؿ أساسي مع العناصر يتـ عبر التوابع ‪ set‬و‪ set ، get‬يستخدـ لوضع قيمة ما أو فعؿ ما ضمف‬
‫العنصر مثالً لوضع نتيجة الجمع ضمف حقؿ ‪ text box‬يعبر عف الخرج‪ ،‬أما ‪ get‬يستخدـ لمحصوؿ عمى قيمة‬
‫ما أو حدث ما‪ ،‬مثالً الحصوؿ عمى الدخؿ مف مف مربع نصي ‪.edit text‬‬
‫لنبدأ التعرؼ أكثر عمى ‪ GUIDE‬بعد عرض الم راحؿ الخاصة ببناء الواجيات‪ ،‬يبيف الشكؿ الخيارات المتاحة مف‬
‫نافذة ‪:GUIDE‬‬

‫سنبدأ بإنشاء واجية بيانية تخاطبية تسمح لممستخدـ باختيار نوع مف المعطيات مف ضمف ثالثة مجموعات مف‬
‫المعطيات ومف ثـ عرضيا بأحد األشكاؿ الثالثة المتاحة ضمف الواجية‪ ،‬الشكؿ الن يائي ليا ىو‪:‬‬

‫‪-332-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫بعد فتح واجية بيانية جديدة‪ ،‬يمكف تحديد حجـ الواجية النيائية بشكؿ أولي عف طريؽ الزاوية اليمنى السفمية‬
‫يوجد مربع أسود الموف يتـ عبر تحريكو التحكـ بالحجـ‪.‬‬

‫بعد تحديد الحجـ في الواجية الفارغة السابقة سيتـ‪ ،‬عند التنفيذ‪ ،‬الحصوؿ عمى واجية بيانية بنفس الحجـ الذي‬
‫جرى تحديده كما أنيا ستكوف غير قابمة لتغيير حجميا ‪ ،‬يمكف أيضًا التحكـ بالقدرة عمى إعادة تعييف الحجـ عف‬
‫طريؽ شريط األدوات اختر مف ‪ Tools‬الخيار ‪ GUI Options‬ستظير أمامؾ الواجية التالية يمكف تغيير خيار‬
‫‪:Resize Behavior‬‬

‫‪-333-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫سنبدأ بتنسيؽ الشكؿ الخارجي (المظير) لمواجية البيانية أي تصميـ الواجية إضافةً لضبط خصائص األزرار‪.‬‬
‫سيتـ إضافة‪ ،‬إ زاحة ومحاذاة ‪ ،Align‬واإلشارة ‪ label‬إلى العناصر المكونة لمواجية التخاطبية‪.‬‬
‫‪ .1‬قـ بإضافة ثالثة أزرار مف نوع ‪ Push Button‬لتصبح الواجية كما في الشكؿ التالي‪:‬‬
‫بعد ذلؾ قـ بإضافة باقي العناصر المكونة لمواجية البيانية وىي‪:‬‬
‫‪Static text‬‬ ‫‪‬‬
‫‪Pop-up menu‬‬ ‫‪‬‬
‫‪Axes ‬‬
‫تصبح الواجية عمى الشكؿ التالي‬

‫‪-334-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫مف أجؿ تنظيـ أزرار ‪ Push Button‬بشكؿ أوضح وأكثر رتابة يمكف إحضار ‪ Panel‬ووضع األزرار ضمنيا‬
‫كما في الشكؿ‪:‬‬

‫‪-335-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫ال مجموعة مف األزرار‬


‫يمكف االستفادة مف أداة المحاذاة لمتحكـ بتموضع عناصر ليا نفس األب أو الجذر مث ً‬
‫ضمف ‪ ،Panel‬قـ بتحديد األزرار ‪ Push button‬الثالثة عف طريؽ المحافظة عمى الضغط عمى ‪ Ctrl‬والضغط‬
‫عمييـ جميعًا ومف ثـ قـ باختيار ‪ Tools  Align Object‬وقـ باختيار اإلعدادات التالية موضحة في الشكؿ‬
‫ومف ثـ اضغط عمى ‪.OK‬‬

‫‪-336-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫تحصؿ عمى الشكؿ التالي‪:‬‬

‫ويمكف التحكـ بتموضع األزرار‪ ،‬والحقوؿ النصية‪ ،‬والقوائـ‪ ،‬والمحاور بالشكؿ الذي يرغب بو المستخدـ‪.‬‬

‫‪-337-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫بعد ذلؾ سنقوـ باإلشارة ‪ Label‬إلى االزرار أو إعادة تسميتيا وذلؾ بيدؼ تسييؿ الوصوؿ إلييا عند الرغبة‬
‫ببرمجتيا واضافة أسماء زاضحة ليا تعبر عف عمميا‪.‬‬
‫محددة وىي رسـ إحدى الرسمات ثالثية األبعاد وىي ‪surf,‬‬
‫كؿ واحد مف األزرار ‪ Push Button‬سيقوـ بوظيفة ّ‬
‫‪ ،mesh, contour‬يمكف اختيار مف ‪ .View  Property Inspector‬ستفتح الواجية التالية‪:‬‬

‫ابحث عف ‪ string‬مف اجؿ اوؿ زر وقـ بتغيير االسـ الذي يتـ عرضو إلى ‪ surf‬ثـ لمزر الثاني اكتب ‪Mesh‬‬
‫ثـ ‪ contour‬لتحصؿ عمى الشكؿ التالي لمواجية‪:‬‬

‫‪-338-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫أعد العممية السابقة ؿ ‪ static text‬واكتب لو اسـ ىو ‪ ،Select Data‬و ؿ ‪ pop-up menu‬واكتب ضمف‬
‫‪string‬الكممات التالية‪:‬‬

‫تصبح الواجية عمى الشكؿ‪:‬‬

‫‪-339-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫ابحث عف ‪ tag‬مف أجؿ أوؿ زر ضمف ‪ Property Inspector‬قـ بتغيير ‪ tag‬لمعنصر إلى االسـ التالي‪:‬‬
‫‪surf_pushbutton_Callback‬‬
‫ومف ثـ أعد العممية لمزريف الباقييف‬
‫‪mesh_pushbutton_Callback‬‬
‫‪contour_pushbutton_Callback‬‬
‫و مف أجؿ ‪pop-up menu‬‬
‫‪plot_popup_Callback‬‬
‫بعد ذلؾ قـ بحفظ الواجية باسـ ‪ ، SimpleGUI‬بعد الحفط يـ توليد ممفيف األوؿ ‪ .fig‬والذي يحتوي عمى وصؼ‬
‫لمشكؿ الخارجي لمواجية وممؼ ‪ .m‬يحتوي عمى الرماز البرمجي الذي يتضمف التوابع التي تتحكـ بسموؾ الواجية‬
‫البيانية‪.‬‬
‫ستالحظ تمقائيًا فتح الرماز البرمجي التي تـ توليده تمقائيًا‪ .‬يرجى عدـ حذؼ أي سطر مف السطور البرمجية التي‬
‫تـ توليدىا‪.‬‬

‫قـ بتشغيؿ الواجية عف طريؽ زر ‪ Run‬تحصؿ عمى الشكؿ التالي‪:‬‬

‫‪-340-‬‬
MATLAB for Numerical Computing-Ch8

‫ نالحظ إ از قمنا بفتح الرماز البرمجي الم تولد وجود توابع عديدة إال أف الواجية ال تقوـ‬،‫سننتقؿ اآلف إلى البرمجة‬
.‫بأي عمؿ وذلؾ يرجع ألنو تـ فقط إنشاء التوابع دوف كتابة تعميمات توصؼ السموؾ عند وقوع حدث ما‬
:‫مثالً نالظ التوابع التالية‬
function plot_popup_Callback_Callback(hObject, eventdata, handles)
function surf_pushbutton_Callback_Callback(hObject, eventdata, handles)
function mesh_pushbutton_Callback_Callback(hObject, eventdata, handles)
function contour_pushbutton_Callback_Callback(hObject, eventdata, handles)

:‫ السابقة نالحظ إنشاء بعض التوابع مثل‬callbacks ‫إضاف ًة لتوابع‬


function SimpleGUI_OpeningFcn(hObject, eventdata, handles, varargin)

function plot_popup_Callback_CreateFcn(hObject, eventdata, handles)

‫ عند‬.... ‫ توصؼ لنا ما العمؿ الذي يقوـ بو الزر أو المحور أو‬OpeningFcn ‫ و‬CreateFcn ‫إف توابع‬
.‫تشغيؿ الواجية‬
‫الحظنا عند تشغيؿ الواجية اليوجد أي معطيات لمعرض لذلؾ سنقوـ اآلف فقط ببرمجة ماذا يجب أف يتـ عرضو‬
.‫عمى المحاور عند تشغيؿ الواجية دوف الخوض بتفاصيؿ عمؿ األزرار‬

-341-
MATLAB for Numerical Computing-Ch8

‫ المتولد عف التابع‬.m ‫يمكف البحث ضمف ممؼ‬


SimpleGUI_OpeningFcn
GO TO ‫ اختر‬Navigator ‫ يوجد قسـ لمبحث ىو‬EDITOR ‫أو يمكف ضمف‬
SimpleGUI_OpeningFcn

:‫نالحظ االنتقاؿ إلى التابع الذي يحتوي عمى السطور البرمجية التالية‬
function SimpleGUI_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 SimpleGUI (see VARARGIN)

% Choose default command line output for SimpleGUI


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes SimpleGUI wait for user response (see UIRESUME)


% uiwait(handles.figure1);

:‫سنقوـ بإنشاء المعطيات مف أجؿ رسميا باستخداـ الرماز التالي‬


‫بعد السطر البرمجي التالي‬
% varargin command line arguments to SimpleGUI (see VARARGIN)

:‫اكتب ما يمي‬
handles.peaks=peaks(35);
handles.membrane=membrane;
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x.^2+y.^2) + eps;

-342-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫;‪sinc = sin(r)./r‬‬
‫;‪handles.sinc = sinc‬‬
‫‪% Set the current data value.‬‬
‫;‪handles.current_data = handles.peaks‬‬
‫)‪surf(handles.current_data‬‬

‫األسطر الستة األولى مف الرماز السابؽ تقوـ بتوليد المعطيات باستخداـ التوابع المعرفة ضمف ‪ MATLAB‬وىي‬
‫‪ ، peaks, membrane and sinc‬يتـ حفظ المعطيات ضمف البنية ‪ ،handles‬ىذا الوسيط ‪ argument‬ىو‬
‫متاح لجميع توابع ‪ callbacks‬أي يمكف استدعائو ضمف جسـ أي تابع ‪ callbacks‬والحصوؿ عمى المعطيات‬
‫المخزنة ضمنو‪.‬‬
‫السطريف األخيريف تقوـ بإنشاء المعطيات الحالية ‪ current data‬وتسند ليا ‪ peaks‬ومف ثـ تعرض المنحني‬
‫‪ surf‬مف أجؿ المعطيات ‪ ،peaks‬عند تشغيؿ الواجية سنحصؿ عمى الشكؿ التالي‪:‬‬

‫لنقـ اآلف ببرمجة عمؿ ‪.pop-up menu‬‬


‫تعرض لنا القائمة المنسدلة ‪ pop-up menu‬في ىذا المثاؿ خيا رات المعطيات التي يرغب المستخدـ في‬
‫رسميا‪ .‬عندما يختار المستخدـ أحد خيارات الرسـ الثالث ‪ ،surf, ,mesh, contour‬تقوـ برمجية ‪MATLAB‬‬
‫بوضع (‪ )set‬القيمة )‪ (VALUE‬التي تؤشر عمى السمسمة المحرفية التي تـ اختيارىا‪ ،‬ىذه القيمة يمكف قرائتيا‬
‫ضمف ‪ Callbacks‬مف أجؿ تحديد نمط المعطيات الواجب عرضيا ومف ثـ يتـ وضع المعطيات الواجب‬
‫عرضيا ضمف ‪.handles.current_data‬‬

‫‪-343-‬‬
MATLAB for Numerical Computing-Ch8

‫ اضغط بالزر اليميني عمى العنصر ومف ثـ‬pop-up menu ‫ الخاصة بػ ػ‬callback ‫مف أجؿ الدخوؿ إلى‬
:‫ كما في الشكؿ‬View Callbacks  Callback ‫اضغط‬

‫يتـ عرض الرماز البرمجي التالي‬


% --- Executes on selection change in plot_popup_Callback.
function plot_popup_Callback_Callback(hObject, eventdata, handles)
% hObject handle to plot_popup_Callback (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

:‫ومف ثـ قـ يكتابة الرماز التالي‬


% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject,'Value');
% Set current data to the selected data set.
switch str{val};
case 'peaks' % User selects peaks.

-344-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫;‪handles.current_data = handles.peaks‬‬
‫‪case 'membrane' % User selects membrane.‬‬
‫;‪handles.current_data = handles.membrane‬‬
‫‪case 'sinc' % User selects sinc.‬‬
‫;‪handles.current_data = handles.sinc‬‬
‫‪end‬‬
‫‪% Save the handles structure.‬‬
‫)‪guidata(hObject,handles‬‬

‫يبيف لنا الرماز السابؽ خاصتيف ميمتيف مف خواص القائمة المنسدلة ‪ Pop-up menu‬وىي القيـ المعادة مف‬
‫ىذه القائمة وىي نوعاف‪:‬‬
‫‪ String ‬عبارة عف صفيفة خمية ‪ Cell Array‬تحتوي عمى محتوى القائمة‪.‬‬
‫‪ Value ‬يحتوي عمى الدليؿ ‪ index‬لمسطر المختار (نوع المعطيات المختار) داخؿ محتوى القائمة‪.‬‬
‫ثـ بعد ذلؾ نستخدـ تعميمة ‪ switch‬مف أجؿ إسناد المعطيات المختارة إلى المعطيات الحالية ‪cureent_data‬‬
‫وذلؾ حسب القيمة التي جرى اختيارىا‪.‬‬
‫لنقـ اآلف ببرمجة عمؿ ‪.push button‬‬
‫كؿ زر مف ىذه األزرار يقوـ برسـ نوع مختمؼ مف أنواع الرسوـ ‪ Plots‬وذلؾ عمى أحد انماط المعطيات التي‬
‫جرى اختيارىا مف قبؿ المستخدـ‪ ،‬تقوـ ‪ callbacks‬الخاص ب ‪ Push button‬بالحصوؿ عمى المعطيات مف‬
‫‪ handles‬ومف ثـ ترس ـ ىذه المعطيات عمى المحور‪.‬‬
‫مف أجؿ الدخوؿ إلى ‪ callback‬الخاصة بػ ػ ‪ Surf‬اضغط بالزر اليميني عمى العنصر ومف ثـ اضغط ‪View‬‬
‫‪ Callbacks  Callback‬كما في الشكؿ‪:‬‬

‫‪-345-‬‬
MATLAB for Numerical Computing-Ch8

:‫يتـ عرض الرماز البرمجي التالي‬


% --- Executes on button press in surf_pushbutton_Callback.
function surf_pushbutton_Callback_Callback(hObject, eventdata, handles)
% hObject handle to surf_pushbutton_Callback (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

:‫ومف ثـ قـ يكتابة الرماز التالي‬


% Display surf plot of the currently selected data.
surf(handles.current_data);

:‫ واكتب الرمازات التالية‬contour ‫ و‬mesh ‫قـ بعادة العممية السابقة لكؿ مف األزرار‬
mesh ‫مف أجؿ زر‬
% Display mesh plot of the currently selected data.
mesh(handles.current_data);

contour ‫مف أجؿ زر‬


% Display contour plot of the currently selected data.
contour(handles.current_data);

‫ وبعدىا قـ بتشغيؿ الواجية ستحصؿ عمى الشكؿ التالي‬.File  Save ‫قـ بعد ذلؾ بحفظ الرماز عف طريؽ‬

-346-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫قـ باختيار نوعي المعطيات الباقييف وقـ بتجريب تغيير الرسـ الذي تود بإظياره لمتاكد مف عمؿ الواجية‪ .‬مثالً‪:‬‬
‫اختيار ‪ membrane‬مع ‪ contour‬تحصؿ عمى‬

‫‪-347-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫‪Examples‬‬ ‫أمثمة‬
‫مثاؿ ‪ : 1‬ضمف ىذا المثاؿ سنقوـ بإنشاء واجية بيانية تسمح لممستخدـ باختيار أحد التاوبع ‪ sin, cos, exp‬ومف‬
‫‪.‬‬ ‫ثـ رسـ منحني التابع عمى مجاؿ زمني ثابت ىو ] ‪ [0 - 2‬وبخطوة مقدارىا‬
‫نحتاج إلى العناصر التالية‪:‬‬
‫‪ Pop-up menu‬قائمة منسدلة الختيار التابع الذي سيتـ رسـ المنحني المعبر عنو‪.‬‬ ‫‪‬‬
‫‪ Static Text‬نص ثابت يوضع فوؽ القائمة المندسمة يحتوي عمى عبارة توضيحية لعمؿ القائمة حيث‬ ‫‪‬‬
‫سنكتب ”‪.“Select a Function to Plot‬‬
‫‪ ‬عنصر ‪ Axes‬مف أجؿ رسـ منحني التابع ضمنو‪.‬‬
‫‪ Static Text‬يعرض لممستخدـ التابع الذي تـ اختياره‪.‬‬ ‫‪‬‬
‫الشكؿ األولي لمواجية ىو‪:‬‬

‫قـ بوضع العناصر السابقة‪ ،‬ضمف ‪ static text‬الواقعة فوؽ القائمة المنسدلة قـ بتغيير ‪ string‬واكتب الجممة‬
‫‪ Select a Function to Plot‬وابحث عف ‪ font size‬واجعمو يساوي ‪ 10‬عوضاً عف ‪ .8‬كذلؾ األمر بالنسبة‬
‫الخاص بيا إلى‬ ‫‪tag‬‬ ‫لحجـ الخط فقط بالنسبة ؿ ‪ static text‬الواقعة تحت ‪ axes‬وقـ بتغيير‬
‫‪ MessageToShow‬عوضاً عف ‪ text‬وغير االسـ ‪ string‬إلى ‪.Function Name‬‬

‫‪-348-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫ضمف ‪ Pop-up menu‬قـ بتغيير ‪ string‬وضع فيو خيا رات التوابع الممكف رسميا غضاف ًة لمخيار األوؿ ىو‬
‫… أي اننا لـ نختر أي تابع كما في الشكؿ‪ ،‬وقـ بتغيير ‪ tag‬إلى ‪pop_plot‬‬

‫عند تشغيؿ الواجية تجد الشكؿ التالي‪:‬‬

‫‪-349-‬‬
MATLAB for Numerical Computing-Ch8

pop_plot_Callback ‫ال التابع‬


ً ‫سننتقؿ اآلف إلى برمجة التوابع أو‬
% --- Executes on selection change in pop_plot.
function pop_plot_Callback(hObject, eventdata, handles)
% hObject handle to pop_plot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
t=0:pi/100:2*pi;
state=get(handles.pop_plot,'value');
str = get(handles.pop_plot, 'String');
switch state
case 1
errordlg('You Haven''t Choose any Function','Error');
case 2
set(handles.MessageToShow,'string','You Plot Sin Function')
y=sin(t);
case 3
set(handles.MessageToShow,'string','You Plot Cos Function')
y=cos(t);
case 4
set(handles.MessageToShow,'string','You Plot Exp Function')
y=exp(t);
end
axes(handles.axes1)
if state~=1
plot(t,y);grid on;title(strcat(str{state},' Function'));
end

-350-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫ال نقوـ بتعريؼ المجاؿ الزمني‪ ،‬ثـ نعرؼ المتحوؿ ‪ state‬سيأخذ القيمة المعادة لدى اختيار أحد القيـ الموجودة‬
‫أو ً‬
‫في عنصر ‪ pop_up menu‬حيث سيتـ تنفيذ إحدى الحاالت التالية بحسب القيمة المرجعة‪:‬‬
‫‪ .1‬عندىا يتـ إظيار رسالة خطأ عمى الشكؿ التالي تحتوي داخميا عمى العبارة الموضحة بالشكؿ‪.‬‬

‫‪ .2‬سيتـ تعريؼ التابع )‪ sin(t‬حيث الشعاع الزمني ‪ t‬معرؼ مسبقاً إضاف ًة لوضع سمسمة محرفية ضمف‬
‫‪ static text‬الموجودة أسفؿ محاور الرسـ‪.‬‬
‫‪ .3‬سيتـ تعريؼ التابع )‪ cos(t‬حيث الشعاع الزمني ‪ t‬معرؼ مسبقاً إضاف ًة لوضع سمسمة محرفية ضمف‬
‫‪ static text‬الموجودة أسفؿ محاور الرسـ‪.‬‬
‫‪ .4‬سيتـ تعريؼ التابع )‪ exp(t‬حيث الشعاع الزمني ‪ t‬معرؼ مسبقاً إضافةً لوضع سمسمة محرفية ضمف‬
‫‪ static text‬الموجودة أسفؿ محاور الرسـ‪.‬‬
‫ثـ سنقوـ بتحديد العنصر ‪ axes1‬لرسـ منحني التابع المحدد عف طريؽ التابع ‪axes‬‬
‫أخي ار نقوـ بالرسـ باستخداـ التابع ‪ plot‬واضافة عنواف في حالة كانت القيمة ‪ state‬ال تساوي الواحد‪ ،‬حيث انيا‬
‫توافؽ عدـ اختيار تابع‪ ،‬وسنضع أيضًا عنواف لمتابع نحصؿ عميو مف خالؿ المتحوؿ ‪ str‬والذي يعيد السمسمة‬
‫المحرفية المختارة مف القائمة المنسدلة ونستخدـ تابع ‪ strcat‬مف أجؿ دمج سمسمتيف محرفيتيف‪.‬‬
‫قم بالتنفيذ وتجريب الحاالت المختمفة‪ ،‬مثاؿ ألحد الحاالت‬

‫‪-351-‬‬
MATLAB for Numerical Computing-Ch8

-352-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫لجعؿ البرنامج أعقد وأكثر فاعمية سنجعؿ المستخدـ إما يحدد المجاؿ الزمني باستخداـ عنصر ‪radio button‬‬
‫ثـ يدخؿ حدود المجاؿ ضمف عنصريف مف ‪ edit text‬أو ال يقوـ بتحديد المجاؿ فيؤخذ المجاؿ الزمني المعرؼ‬
‫مسبقًا‪.‬‬
‫يصبح شكؿ الواجية كما يمي‪:‬‬
‫نحتاج إلى ‪ Panel‬لجعؿ مظير الواجية يبدو أكثر رتابةص ووضوحاً ولتنظيـ الحقوؿ ضمنيا‪ ،‬إضاف ًة ؿ‬
‫‪ radio button‬و ثالثة عناصر ‪ static text‬و ثالثة عناصر ‪.edit text‬‬
‫نغير اسـ ‪ Panel‬كما في الشكؿ وحجـ الخط إلى ‪.10‬‬
‫نغير اسـ ‪ Radio Button‬إلى ‪ Define Plot Range‬ونغير ‪ tag‬لو إلى ‪ ChooseOptions‬وحجـ الخط‬
‫إلى ‪.9‬‬
‫نغير أسماء ‪ static text‬كما ىو موضح في الشكؿ لمتعبير عف بداية المجاؿ والخطوة والنياية المجاؿ إضاف ًة‬
‫لتغيير حجـ الخط إلى ‪ 9‬ويرجى محاذاة العناصر لمحصوؿ عمى شكؿ أنيؽ‪ .‬كذلؾ نضع ليـ ‪ Tag‬ىو عمى‬
‫الترتيب ‪.start, step, stop‬‬
‫نغير اسـ كؿ مف ‪ edit text‬إلى ‪ null‬أي ال نضع أي قيمة‪ .‬ونغير ‪ tag‬إلى ‪ Start_Int‬ألوؿ عنصر‬

‫‪-353-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫نعيد األمر لمثانية الموافقة لمخطوة ونغير ‪ tag‬إلى ‪ Step_Int‬أما األخيرة فنغيرىا إلى ‪ End_Int‬ويرجى محاذاة‬
‫العناصر لمحصوؿ عمى شكؿ أنيؽ‪.‬‬

‫عند التشغيؿ نحصؿ عمى الشكؿ‪:‬‬

‫‪-354-‬‬
MATLAB for Numerical Computing-Ch8

Define Plot ‫ال في عدـ إظيار خي ارات إدخاؿ المجاؿ إال في حاؿ قاـ المستخدـ باختيار الخيار‬
ً ‫نرغب أو‬
.Range
‫أوالً مف أجؿ عدـ إظيار الجمؿ التوضيحية وصناديؽ إدخاؿ القيـ يمكف كتابة الرماز التالي ضمف التابع‬
PlotFunctions_OpeningFcn
:‫يصبح التابع‬
% --- Executes just before PlotFunctions is made visible.
function PlotFunctions_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 PlotFunctions (see VARARGIN)
set(handles.start,'Visible','off');
set(handles.step,'Visible','off');

-355-
MATLAB for Numerical Computing-Ch8

set(handles.stop,'Visible','off');
set(handles.Start_Int,'Visible','off');
set(handles.Step_Int,'Visible','off');
set(handles.End_Int,'Visible','off');
% Choose default command line output for PlotFunctions
handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

.'Visible','off' ‫ سطور برمجية تجعؿ العناصر مختفية مف خالؿ خيار‬6 ‫أضفنا فقط‬

:‫عند التشغيؿ يصبح الشكؿ‬

‫ أف تظير العناصر السابقة وعند عدـ اختياره يجب‬Define Plot Range ‫يجب اآلف عند الضغط عمى خيار‬
:‫ لذلؾ نضيؼ الرماز التالي‬،‫اختفاء العناصر‬
% --- Executes on button press in ChooseOptions.
function ChooseOptions_Callback(hObject, eventdata, handles)
% hObject handle to ChooseOptions (see GCBO)

-356-
MATLAB for Numerical Computing-Ch8

% eventdata reserved - to be defined in a future version of MATLAB


% handles structure with handles and user data (see GUIDATA)
s=get(handles.ChooseOptions,'value');
if s==0
set(handles.start,'Visible','off');
set(handles.step,'Visible','off');
set(handles.stop,'Visible','off');
set(handles.Start_Int,'Visible','off');
set(handles.Step_Int,'Visible','off');
set(handles.End_Int,'Visible','off');
else
set(handles.start,'Visible','on');
set(handles.step,'Visible','on');
set(handles.stop,'Visible','on');
set(handles.Start_Int,'Visible','on');
set(handles.Step_Int,'Visible','on');
set(handles.End_Int,'Visible','on');
end

:‫ في حاؿ كانت‬s ‫ في المتحوؿ‬radiobutton ‫حيث نختبر القيمة المعادة مف عنصر‬


‫ فيذا يعني أف الزر غير مضغوط وبالتمي سنحافظ عمى بقاء العناصر األخرى مختفية‬0 
.‫العددية الموصفة لممجاؿ‬
ّ ‫ فيذا يعني أف الزر مضغوط وبالتالي يجب إظيار العناصر إلدخاؿ القيـ‬1 
:‫عند التنفيذ والضغط عمى الزر نجد الشكؿ التالي‬

-357-
MATLAB for Numerical Computing-Ch8

.‫سنقوـ بمناقشة بعض الحاالت مف أجؿ دخؿ المربعات التي تمثؿ بداية ونياية المجاؿ والخطوة‬
‫ضمف التابع التالي‬
% --- Executes on selection change in pop_plot.
function pop_plot_Callback(hObject, eventdata, handles)
% hObject handle to pop_plot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
t=0:pi/100:2*pi;
state=get(handles.pop_plot,'value');
str = get(handles.pop_plot, 'String');

:‫بعد السطر السابؽ أضؼ الرماز التالي‬


s=get(handles.ChooseOptions,'value');
if s==1
startInt=str2double(get(handles.Start_Int,'string'));

-358-
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫;))'‪step=str2double(get(handles.Step_Int,'string‬‬
‫;))'‪endInt=str2double(get(handles.End_Int,'string‬‬
‫‪if isnan(startInt)==1 || isnan(step)==1 || isnan(endInt)==1 ...‬‬
‫‪|| isinf(startInt)==1 || isinf(step)==1 || isinf(endInt)==1‬‬
‫;)'‪errordlg('Invalid Arguments‬‬
‫)‪elseif step <=0 || step> (endInt-startInt‬‬
‫;)'‪errordlg('Invalid Step‬‬
‫‪else‬‬
‫;‪t=startInt:step:endInt‬‬
‫‪end‬‬
‫‪end‬‬

‫حيث نختبر القيمة المعادة مف عنصر ‪ radiobutton‬في المتحوؿ ‪ s‬في حاؿ كانت مساوية لمواحد أي أف الزر‬
‫مضغوط فيذا يعني أف المستخدـ قد اختار تحديد حدود المجاؿ الزمني حيث نختبرىما في البداية إذا كانت القيـ‬
‫المدخمة داخؿ عناصر ‪ edit text‬فارغة أو قيمة أي منيا النيائية أو في حاؿ كوف الخطوة أكبر مف المجاؿ أو‬
‫أف الخطوة سالبة فعندىا سنظير رسالة خطأ واال سيكوف المجاؿ الزمني تبعا لما قاـ المستخدـ بإدخالو‪.‬‬
‫يظير التنفيذ كما ىو موضح في الشكؿ التالي في إحدى الحاالت‪:‬‬
‫قم بتجريب الحاالت المختمفة‬

‫‪-359-‬‬
‫‪MATLAB for Numerical Computing-Ch8‬‬

‫يمكف إضافة العديد مف التفاصيؿ ومناقشة عدد كبير مف الحاالت لجعؿ برنامج السابؽ أكثر فاعمية‪.‬‬

‫‪-360-‬‬

You might also like