Professional Documents
Culture Documents
ماتلاب للحوسبة العددية
ماتلاب للحوسبة العددية
ماتلاب للحوسبة العددية
ISSN: 2617-989X
ماتالب للحوسبة العددية
اﻟﻤﮭﻨﺪس سيمون طربوش
هذا الكتاب منشور تحت رخصة المشاع المبدع – النسب للمؤلف – حظر االشتقاق ()CC– BY– ND 4.0
https://creativecommons.org/licenses/by-nd/4.0/legalcode.ar
يحق للمستخدم بموجب هذه الرخصة نسخ هذا الكتاب ومشاركته وإعادة نشره أو توزيعه بأية صيغة وبأية وسيلة للنشر وألية غاية تجارية
أو غير تجارية ،وذلك شريطة عدم التعديل على الكتاب وعدم االشتقاق منه وعلى أن ينسب للمؤلف األصلي على الشكل اآلتي حصرا:
م .سيمون طربوش ،اإلجازة في تقانة االتصاالت ،BACTمن منشورات الجامعة االفتراضية السورية ،الجمهورية العربية السورية،
2020
https://creativecommons.org/licenses/by-nd/4.0/legalcode
-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
-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
-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
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
عنوان الشكل :تحميل واظيار المعطيات باستخدام برمجية .MATLABإن بيئة MATLABتتيح لممستخدم كتابة
الرمازات البرمجية والبرامج وتطوير الخوارزميات والتطبيقات.
-11-
MATLAB for Numerical Computing-Ch1
-12-
MATLAB for Numerical Computing-Ch1
صورة عمى استخراج شكل منحني من مجموعة من المعطيات باستخدام Cubic Interpolation
-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
)(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
-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
-19-
MATLAB for Numerical Computing-Ch1
-20-
MATLAB for Numerical Computing-Ch1
ثم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
-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
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
مالحظة في حال استخدام نسخة أحدث من النسخة الحالية ،وىي ،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
الموجود ضمن command windowمن أجل الحصول عمى يمكن أيضًا الضغط عمى الرمز
مساعدة helpحول التوابع الموجودة ضمن البرمجية
-35-
MATLAB for Numerical Computing-Ch1
من اجل فتح نافذة منفصمة تحتوي عمى function documentationيمكن استخدام التعميمة docضمن
ال command windowعمى الشكل
من أجل عرض مساعدة وتنويو hintحول التابع ،يمكن كتابة اسم التابع في command windowثم فتح
قوس من أجل بارمترات دخل التابع واالنتظار عمى الشكل التالي
-36-
MATLAB for Numerical Computing-Ch1
Workspace .3يتم في ىذه النافذة عرض أسماء المتحوالت التي جرى تعريفيا ،قيمتيا ،القيمة الصغرى
،Minالقيمة الكبرى ،Maxإضافةً لخيارات إضافية يمكن استعراضيا كما في الشكل التالي ،عن طريق
الضغط بالزر اليميني عمى الشريط ،فتظير الخيارات وىي )(Name, Value, …, Max
-37-
MATLAB for Numerical Computing-Ch1
كما يمكن مسح المتحوالت المعرفة ضمن workspaceعن طريق خيار clear workspaceكما في
الشكل التالي
-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يتيح لممستخدم البحث عن الممفات التي جرى توثيقيا عن التوابع
والتعميمات.
-40-
MATLAB for Numerical Computing-Ch1
-41-
MATLAB for Numerical Computing-Ch1
File .a
عند الضغط عمى New Scriptيتم إنشاء Scriptجديدة (سيتم شرح معنى scriptفي الفصل القادم)
كما في الشكل
-42-
MATLAB for Numerical Computing-Ch1
نقوم بعدىا بالحصول عمى النتيجة ضمن workspaceحيث جرى تخزين قيمة المتحوالت
حيث يمكن تعريف ،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
-51-
MATLAB for Numerical Computing-Ch1
اإلجابا ت
.1ىي اختصار ل .Matrix Laboratory
-52-
MATLAB for Numerical Computing-Ch2
-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
-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
قم بعدىا بتنفيذ العممية الحسابية 9+8ثم عرف المتحول xعمى أنو خرج العممية أيضاً 8+9نالحظ أمو احتفظ
بقيمة ansلمعممية األولى واحتفظ بقيمة العممية الثانية ضمن المتحول ،xيمكن إجراء عممية مثالً 4*5
ومالحظة تغيير قيمة .ans
Eps -2وىو اختصار ل epsilonأي عدد موجب تمامًا وقيمتو العددية صغيرة جدًا وىي ىنا تعبر عن الدقة
النسبية عند تمثيل األعداد باستخدام .floating-point
i -3أو jىو العدد التخيمي ،مالحظة في اإلصدا رات القديمة المن البرمجية يجري تعريف ىذا العدد عمى الشكل
التالي 1*iأو 1*j
inf -5لمداللة عمى الالنياية الموجبة ،عند ظيور –infيكون لمداللة عمى الالنياية السالبة
عددية ،وىي عبارة عن النتيجة
NAN -6وىي اختصار ل Not-a-Numberلمداللة عمى أنيا ليست قيمة ّ
من عمميات غير معرفة نتيجتيا نذكر منيا:
-58-
MATLAB for Numerical Computing-Ch2
ال
يمكن استخدام ىذه القيم في الرمازات البرمجية مث ً
r = 2 * pi
r = 6.2832
]B = [1+2i 5-6i
-59-
MATLAB for Numerical Computing-Ch2
-60-
MATLAB for Numerical Computing-Ch2
-61-
MATLAB for Numerical Computing-Ch2
.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
سؤال كيف نقوم بتغيير الصف (أو نمط المتحول)؟؟
-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الرئيسي ضمن البرمجية
صورة 2
-64-
MATLAB for Numerical Computing-Ch2
-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
لتعريف متحول سممي 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قم بقراءة وتجريب األنماط المختمفة.
-70-
MATLAB for Numerical Computing-Ch2
ويمكن أيضًا دمج سمستين محرفيتين عن طريق التعميمة (strcatاطمع عمى helpلمعرفة المزيد عن ىذه
التعميمة) مثال
قم بتعريف المتحوالت التالية
'B='Hello
'C='World
)D=strcat(B,C
الخرج ىو
-71-
MATLAB for Numerical Computing-Ch2
-72-
MATLAB for Numerical Computing-Ch2
-73-
MATLAB for Numerical Computing-Ch2
linspaceو .logspace
-74-
MATLAB for Numerical Computing-Ch2
جرب ذلك عن طريق توليد مصفوفة مالحظة :يمكن لتابع … cos, sin , tan,أن تاخذ دخل ىو مصفوفةّ ،
سميا MATثم أخذ ) sin(MATو كذلك األمر لمتعميمات السابقة .ويوجد أيضاً عدد من التعميمات المفيدة اطمّ ع
ّ
عمى التعميمة .sort
مالحظة :يوجد عدد كبير من التعميمات والتوابع التي تسيل عمل المستخدم مع المصفوفات يمكن االطالع عمييا
عن طريق helpوفيم معناىا ،قمنا بعرض عدد قميل وقميل جدًا من التعميمات ونترك لممستخدم التعمم عند
الحاجة.
-75-
MATLAB for Numerical Computing-Ch2
-76-
MATLAB for Numerical Computing-Ch2
يمكن أيضاً اعتماداً عمى تعريف كل مسقط لمصفيفة تعريف صفيفات بأبعاد مختمفة أكبر من بعدين
ويمكن تعريف أيضًا مصفوفة مصفوفات عمى الشكل التالي:
تمرين :قم بتعريف المصفوفات التالية
]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
-78-
MATLAB for Numerical Computing-Ch2
-79-
MATLAB for Numerical Computing-Ch2
-80-
MATLAB for Numerical Computing-Ch2
تقوم بقراءة جميع عناصر المتحول وتحويمو إلى شعاع عمود سواء كان المتحول ىو سطر أو عمود أو
مصفوفة.
كما في المثال التالي:
عرف ) B1= A1(:و )B2=A2=(:
عرف ;] A1=[1, 2, 3, 4; 5, 6, 7,8]; A2=[1 2 3 4ثم ّ
ّ
-81-
MATLAB for Numerical Computing-Ch2
-82-
MATLAB for Numerical Computing-Ch2
مالحظة ىامة :العمميات التالية صحيحة من أجل صفيفات بنفس البعد (.)equal dimensions
+ .1مؤثر الجمع - ،مؤثر الطرح:
-83-
MATLAB for Numerical Computing-Ch2
-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وىو
المثال التالي لمتوضيح :لدينا أو ً
ومنو يمكن تنفيذ عممية الضرب.
العنصر األول في المصفوفة الناتجة ىو حاصل الجداء السممي لمسطر األول من المصفوفة األولى مع العمود
األول من المصفوفة الثانية حيث يتم ضرب كل عنصر بمقابمو وجمع النتيجة وىكذا من أجل باقي عناصر
المص فوفة الناتجة والتي تكوت بأبعاد ىي األول ىو عدد أسطر المصفوفة األولى و الثاني ىو عدد أعمدة
المصفوفة الثانية.
-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
-89-
MATLAB for Numerical Computing-Ch2
يمكن التعرف أكثر عمى التوابع المتوفرة ضمن 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
-91-
MATLAB for Numerical Computing-Ch2
مالحظة :يرجى دمج ىذه الصورة مع الصورة السابقة ألنيا نتيجة الخرج.
عمميات عمى المجموعات 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
مالحظة يرجى دمج ىذه الصورة مع الصورة السابقة ألنيا خرج لمتنفيذ.
-93-
MATLAB for Numerical Computing-Ch2
ىنالك طريقة أخرى لموصول إلى عنصر حيث ان 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؟؟
مساعدة :قراءة فقرة محارف وقيم خاصة
وسمو xوأسند لو القيمة 10وأضف تعميق إلى جانبو وىو this variable is
.5قم بتعريف متحول سممي ّ
the answer of question 4وضمن التعريف ال يجب عند تنفيذ التعميمة أن تظير النتيجة في
.command window
مساعدة :قراءة فقرة كيف نعرف متحول سممي
يحتوي عمى كافة األعداد الفردية ضمن المجال ] [1-60بحيث .6قم بتعريف شعاع باسم vectببعد
عند تنفيذ التعميمة يتم عرض القيم في command windowكيف يمكن معرفة طول الشعاع اكتب
التعميمة الالزمة لذلك
مساعدة :قراءة فقرة كيف نعرف شعاع
-97-
MATLAB for Numerical Computing-Ch2
.8كيف ممكن معرفة بعد ىذه المصفوفة وحاصل جمع ع ناصر ىذه المصفوفة اكتب الرماز البرمجي الالزم،
المصفوفة ىي
;]A= [2 5 6; 1 1 3
مساعدة :قراءة فقرة كيف نعرف مصفوفة
.11اكتب الرماز البرمجي االلذي يقوم بتنفيذ ما يمي :في حال قمنا بتعريف المصفوفة التالية
]A = [ 0 3 3 4; 4 2 1 7; 7 4 9 0; 47 86 19 10
ال من المصفوفة
كيف يمكن قراءة العمود الثالث كام ً
كيف يمكن قراءة السطر الثالث كامالً من المصفوفة
كيف يمكن قراءة العنصر األول والثاني ضمن السطر الرابع من المصفوفة
مساعدة :قراءة فقرة المؤثرات ضمن MATLABوتحديدًا المؤثر .colon
-98-
MATLAB for Numerical Computing-Ch2
مساعدة :قراءة فقرة المؤثرات ضمن 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
.4األولى clcتقوم بمسح التعميمات الموجودة ضمن command windowدون مسح المتحوالت أي تبقى
ضمن workspaceالثانية clear allتقوم بمسح جميع المتحوالت التي تم تعريفيا
-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'
-101-
MATLAB for Numerical Computing-Ch3
-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 figure .fig
-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
.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
-108-
MATLAB for Numerical Computing-Ch3
edit FirstScript
إن التعميمة السابقة ستقوم بإنشاء ،new scriptوذلك حسب االسم الذي تم كتابتو كما في الشكل التالي:
مالحظة :في حالة عدم تحديد اسم لممف Scriptفإن MATLABيولد ممفًا جديدًا باسم .Untitled
-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
Saveضمن Editor عمى زر مالحظة :يمكن أيضاً حفظ الممف عن طريق عن طريق الضغط
الموجود ضمن .Toolstrip
-112-
MATLAB for Numerical Computing-Ch3
-113-
MATLAB for Numerical Computing-Ch3
الحظ أنو عند تنفيذ أي Scriptيتم تعريف المتحوالت الموجودة ضمنيا في .Work Space
التعميقات مفيدة في حاالت تطوير برامج أو اختبارىا ،حيث يمكن منع بعض التعميمات من التنفيذ عن
طريق جعميا كتعميق مثالً عند إجراء اختبار عمى جزء محدد من البرنامج ،يمكن استخدام { %و }%
من أجل جعل كتمة كاممة من التعميمات عمى أنيا تعميق.
مثالً:
-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
-116-
MATLAB for Numerical Computing-Ch3
-117-
MATLAB for Numerical Computing-Ch3
يكون لمتابع أال يعيد أي خرج ويتم التصريح عنو كما يمي:
newثم من أجل إنشاء تابع جديد ،من خالل شريط Toolstripثم نافذة Homeقم بالضغط عمى الزر
اختر function
عند إنشاء تابع جديد ستصبح الواجية األساسية ل MATLABعمى الشكل التالي.
-118-
MATLAB for Numerical Computing-Ch3
نالحظ إنشاء ممف جديد ولكن ال يكون فارغاً blankكما الحال عند إنشاء scriptجديدة ،إنما يحتوي عمى
الترويسة األساسية التي تحتوي عمى المعمومات األساسية لمتصريح عن تابع.
مالحظة :يتم حفظ التابع بنفس الطريقة التي يتم حفظ ممفات .Scriptكما يجب التذكير بأن يكون اسم التابع
مطابقاً السم الممف التي يتم حفظه.
-119-
MATLAB for Numerical Computing-Ch3
قم ضمن Command windowبإنشاء شعاع يحتوي عمى القيم من 1إلى 99واسمو zثم قم استدعاء التابع
كما يمي ،ستحصل عمى النتيجة التي تعبر عن المتوسط وىي .50
-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يكونيا أكثر عمومية ،لنوضح الفكرة السابقة من خالل المثال
التالي:
إن ممف 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
مثال:
-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
مالحظة :يعتبر ىذا النمط من التوابع ىو الوحيد القادر عمى إنشاء توابع بسيطة دون الحاجة إلى إنشاء
ممفات خاصة ليم ،وىذه الخاصية مفيدة حيث أن كثرة الممفات أحيانًا قد تتسبب ببعض المشاكل مثل
ال ،أو حذف أحدىا مما يعطل عمل خوارزمية بأكمميا !!!
ضياعيا مث ً
مثال:
سنقوم بإنشاء تابع يقوم بحساب العالقة التالية:
-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
مثال:
لنقم بكتابة تابع يسمى 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
-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)
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
-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
-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
-136-
MATLAB for Numerical Computing-Ch4
>if <expression
-137-
MATLAB for Numerical Computing-Ch4
الوصؼ:
تتألؼ ىذه العبا رة مف تعميمة 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
مثاؿ :2
إف الرماز السابؽ يولد عدد عشوائي ثـ يقوـ بفحصو إ از كاف زوجيًا يظير رسالة أف العدد زوجي ،ثـ يقوـ
بتقسيمو عمى 2ويظير نتيجة القسمة ،أما في حاؿ كاف فردياً فيظير رسالة لذلؾ عند التنفيذ يكوف الخرج عمى
شكميف ىما:
-142-
MATLAB for Numerical Computing-Ch4
><statements
><statements
><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
end
end
وىو نفس الشكؿ القواعدي الستخداـ elseif …elseمتداخمة.
ال واكتب الرماز التالي ،وحاوؿ فيـ التعميمات ضمنو:
مثاؿ :قـ بإنشاء ممؼ scriptباسـ nested_ifمث ً
-145-
MATLAB for Numerical Computing-Ch4
الخرج ىو
الوصؼ:
تقوـ كتمة تعميمات 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
اخلرج هو:
مالحظة :قـ بتغيير قيمة ،gradeودعو يأخذ القيـ التالية عمى الترتيب A,C,Q,D,R,F,Zوالحظ الخرج لفيـ
الرماز بشكؿ أكبر.
مثاؿ:
-147-
MATLAB for Numerical Computing-Ch4
مالحظة :ضمف switch blockعند ما يتـ تحقؽ أوؿ حالة caseأي أف تصبح صحيحة trueيتـ تنفيذ
التعميمات الخاصة بيا دوف النظر إلى الحاالت التالية حتى لو أف الشرط ضمنيا محقؽ.
مثاؿ:
الخرج
-148-
MATLAB for Numerical Computing-Ch4
Loops الحمقات
في معظـ األحياف يحتاج المبرمج إلى تنفيذ مجموعة مف التعميمات عدد معيف مف المرات ،يؤمف لنا MATLAB
تنفيذ العممية السابقة عف طريؽ الحمقات ،Loopsيوجد نوعاف مف الحمقات ضمف :MATLAB
الحمقات المعدودة :باستخداـ تعميمة ، forتقوـ ىذه التعميمة بتفيذ سمسمة مف التعميمات عدة مرات اعتمادًا
يحدد عدد مرات التكرار .يمكف التعبير عف ىذه الحمقة بجممة
عمى دليؿ الحمقة ،loop indicatorالذي ّ
بسيطة:
كرر ىذه التعميمات عشريف مرة"
" ّ
-149-
MATLAB for Numerical Computing-Ch4
الحمقات الشرطية :باستخداـ تعميمة ،whileتستمر ىذه التعميم ة بتفيذ سمسمة مف التعميمات طالما أف
ال ثـ تقوـ بتنفيذ التعميمات داخؿ الحمقة .يمكف
الشرط المعطى محقؽ ،حيث تقوـ باختبار الشرط أو ً
التعبير عف ىذه الحمقة بجممة بسيطة:
كرر ىذه التعميمات حتى يصبح ىذا الشرط خاطئًا"
" ّ
الوصؼ:
طالما أف الشرط الموجود ضمف 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_fileمثالً ،واكتب المثاؿ التالي:
قـ بإنشاء ممؼ ّ script
مثاؿ :1يبيف لنا حمقة تقوـ بعرض مجموعة مف القيـ بخطوة .1
for a = 2 : 1 : 9
)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
-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
الخرج ىو:
-156-
MATLAB for Numerical Computing-Ch4
مالحظة :عند استخداـ الحمقة مف أجؿ حساب مجموع لمتحوؿ ما (قيمة سممية ،شعاع ،مصفوفة) ،أي إضافة
مجموعة مف القيـ لممتحوؿ ،يجب عدـ نسياف إعطاء قيمة بدائية لممتحوؿ وىي 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مث ً
النصيحة األخيرة ىي تغيير نمط المتحوؿ ،عند إجراء بعض الحسابات ال نحتاج دائماً إلى دقة كبيرة في التمثيؿ
لذلؾ مف الممكف عند إج راء عمميتا حسابية عادية أو أننا ال نحتاج إلى دقة كبيرة في النتيجة يمكف استخداـ أنماط
لممتحوالت تتطمب حجمًا أصغر في الذاكرة ،تؤثر العممية السابقةة عمى زمف الحسابات وعمى الذاك رة المستخدمة (
المحجوزة) عند تنفيذ الرماز.
-158-
MATLAB for Numerical Computing-Ch4
ونذكر بأف التعريؼ السابؽ ينشئ متحوؿ عبارة عف شعاع سطر مف النمط 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
قـ باستخداـ helpوفؽ المسار التالي لمتعرؼ أكثر عمى stringوكيفية دمج concatenateأكثر مف محرؼ:
MATLAB Language Fundamentals Data Types Characters and Strings
Create and Concatenate Strings
مالحظة :يتـ التعامؿ مع السالسؿ المحرفية في MATLABعمى انيا أشعة أي يمكف تطبيؽ كافة العمميات
والتوابع المستعممة مع األشعة عمى السالسؿ المحرفية مثالً يمكف الحصوؿ عمى منقوؿ الشعاع ،او استخداـ
التابع lengthمثالً.
يمتمؾ MATLABمجموعة مف التوابع المفيدة كثي ًار عند التعامؿ مع السالسؿ المحرفية والتي تسيؿ عمؿ
المبرمج وتفيد في عدـ ضياع الوقت في إعادة برمجة مثؿ ىذه التوابع الضرورية واألساسية نذكر منيا:
الوصؼ Description التعميمة Command
-159-
MATLAB for Numerical Computing-Ch4
قـ باستخداـ 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
مثاؿ:
عمى المجاؿ ] [-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
-164-
MATLAB for Numerical Computing-Ch4
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
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
-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
-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
تستخدـ تعميمة 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
30
25
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)');
5 300
20 4
3
200
2
10 1
100
0
0 5 0
12345 10 -5 0 5
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
0.4
0.2
-0.2
0 1 2 3 4 5 6 7 8 9 10
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
-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)')
20
15 0
10
5 -5
5 10 15 20 25 30
-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)')
-1
40
30 40
20 30
10 20
0 0 10
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
-1
2 3
0 1 2
-1 0
-2 -3 -2
-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
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
-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
يوجد ضمن برمجية MATLABالعديد من انماط المعطيات المتنوعة ،أو ما يعرف بالصفوف ،Classesوالتي
يستطيع المبرمج استخداميا ،حيث يمكن بناء مصفوفات وصفيفات من معطيات صحيحة ،integerباستخدام
الفاصمة العائمة ،floating pointمحارف ،charactersسالسل محرفية ،stringsأو متحوالت منطقية ( true
.)or falseإضاف ًة لما سبق يمكن استخدام structأو خمية صفيفات cell arraysمن أجل تخزين المعطيات
المتباينة (غير المتشابية) مثالً اسم الموظف ،رقمو ،عمره ،أيام عممو.
-188-
MATLAB for Numerical Computing-Ch5
ال
يجب عمى الطالب قراءة التوابع السابقة ومعرفة عمميا بشكل دقيق فيي مفيدة جداً في الكثير من التطبيقات مث ً
ال من الضروري فحص
عند تطوير برامج ،أو بناء واجيات تخاطبية أو حتى بناء توابع تحل مشكمة معينة ،فمث ً
الدخل قبل البدء بالعمميات.
مثال :اليدف ىو استخدام بعض من التوابع السابقة .قم بكتابة الرماز التالي ،وفسر نتيجة خرجو.
;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
-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
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
-197-
MATLAB for Numerical Computing-Ch5
الخرج ىو:
-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
الخرج ىو:
والحظ الخرج.
التعامل مع ممفات دخل /خرج بتعميمات منخفضة المستوى 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
سنقوم باستيراد المعطيات من الممف ومن ثم عرض ىذه المعطيات ،وذلك باتباع الخطوات التالية:
.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
-204-
MATLAB for Numerical Computing-Ch5
-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
-207-
MATLAB for Numerical Computing-Ch5
نقوم بتسجيل المقطع الصوتي ،ثم نقوم بتشغيمو بعد تضخيمو 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
-210-
MATLAB for Numerical Computing-Ch5
يمكن رؤية كافة Toolboxesالمتاحة لك ضمن نسخة البرمجية ،وفتحيا عم طريق الضغط عمى السيم
الموضح في الصورة التالية
-211-
MATLAB for Numerical Computing-Ch5
سي
سيس
-212-
MATLAB for Numerical Computing-Ch5
األسئمة
.1اذكر خمسة من توابع التعرف عمى أنماط المعطيات مع ذكر عمميا ( )Data Type Identification
مساعدة :قراءة فقرة التعرف عمى أنماط المعطيات
.3اذكر خمسة من توابع التحوبل بين أنماط المعطيات مع ذكر عمميا ()Data Type Conversion
مساعدة :قراءة فقرة التحويل عمى أنماط المعطيات
-213-
MATLAB for Numerical Computing-Ch5
مفصل:
.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ليذه
النقطة وىو ما يقوم بو السطر الخامس
السطر السادس يتم إغالق الممف.
.7ييدف ىذا الرماز لتسجيل مفطع صوتي مدتو خمسة ثواني ومن ثم تشغيمو
تردد التقطيع بقيمة 12 KHzفي السطر الثاني تعريف عدد النقاط وىو خمسة
السطر األول تعريف ّ
تردد التقطيع ومن ثم تسجيل مقطع صوتي باستخدام التعميمة wavrecordيمرر ليا عدد أضعاف ّ
وتردد التقطيع ومن ثم تشغيل المقطع الصوتي بعد تضخميو 30مرة.
النقاط ّ
-217-
MATLAB for Numerical Computing-Ch6
-1-
-218-
MATLAB for Numerical Computing-Ch6
عنوان الموضوع:
تمارين رياضية باستخدام ®( MATLABجبر خطي ،حل جممة معادالت ،اشتقاق ،تكامل ،تحويالت ،كثيرات
حدود)
الكممات المفتاحية:
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التي تسيل عمل
المستخدم في معظم الحاالت ،وفي بعض األحيان ،عندما يصبح إيجاد الحل أو الحصول عمى عالقة تحميمية
معقداً أومستحيالً ،تكون مثل ىذه البرمجيات الطريقة الوحيدة لمحصول عمى اليدف المطموب.
-220-
MATLAB for Numerical Computing-Ch6
الخرج ىو:
-221-
MATLAB for Numerical Computing-Ch6
ويمكن أيضًا تحديد نمط المتحولين كما في الرماز السابق حيث تم تحديد النمط عمى أنو حقيقي .real
-222-
MATLAB for Numerical Computing-Ch6
من أجل رسم التواب ع التي تم تعريفيا باستخدام الرموز يمكن استخدام التابع ezplotإن المجال االفتراضي الذي
ىو تابع لممتحول xفقط ،يوجد ولكن يجب االنتباه لكون التابع يتم الرسم عميو ىو
خيارات إضافية تسمح لنا بتحديد مجال الرسم أو تحديد رسم تابع لمتحولين يمكن االطالع عمييا عن طريق
.help
مثال:
اكتب الرماز التالي:
)'h = ezplot('x^2
;)'set(h, 'Color', 'm
الخرج:
-223-
MATLAB for Numerical Computing-Ch6
-224-
MATLAB for Numerical Computing-Ch6
:الخرج
-225-
MATLAB for Numerical Computing-Ch6
وقد وجدنا كيفية إيجاد الحل عبر إيجاد مقموب مصفوفة ،أو باستخدام عممية القسمة ،سنستخدم في ىذه الفقرة
التعميمة solveلحل مجموعة من المعادالت.
مثال:
قم بحل المعادالت التالية:
-226-
MATLAB for Numerical Computing-Ch6
تعميمة rankتفيد في إيجاد رتبة مصفوفة أي عدد السطور أو األعمدة المستقمة خطيًا وىي تعطي
معيا اًر لوجود مقموب مصفوفة من عدمو.
المحدد يجب أن تكون المصفوفة مربعة ،وفي حال
تعميمة detتفيد في إيجاد محدد مصفوفة ،لوجود ّ
المحدد ال يساوي الصفر ومنو يوجد مقموب لممصفوفة.
ّ كان
تعميمة invتفيد في إيجاد مقموب مصفوفة.
-227-
MATLAB for Numerical Computing-Ch6
تعميمة eigتفيد في إيجاد تحميل لممصفوفة السابقة بداللة القيم الذاتية ،يوجد عدد كبير من من طرق
تحميل المصفوفات والتي تم برمجتيا ضمن MATLABومن الممكن استخداميا بسيولة.
ننصح بالتعرف عمى البعض التعميمات المفيدة مثل ،cross ،dot ،eye ،null ،norm ، linsolve
.kron
فعالة مثالً يمكن باستخدام تعميمة detأو rank
يمكن االستفادة من التعميمات السابقة لبرمجة رمازات ّ
معرفة مسبقًا أن المصفوفة ليا مقموب أم ال ومن ثم إظيار رسالة خطأ أو تحذير لممستخدم.
مثال:
الخرج:
-228-
MATLAB for Numerical Computing-Ch6
-229-
MATLAB for Numerical Computing-Ch6
))simplify((x^4-16)/(x^2-4
-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حيث ّ
الخرج هو:
-234-
MATLAB for Numerical Computing-Ch6
عند بعض قيم المتحول ،حيث مثال :سنناقش في ىذا المثال حالة وجود انقطاع في التابع ما وليكن
تكون النياية غير موجودة عند نقاط االنقطاع تمك ،أي تكون النياية من اليمين (من أجل قيم لممتحول أكبر من
قيمة نقطة انقطاع) ال تساوي النياية من اليسار(من أجل قيم لممتحول أصغر من قيمة نقطة انقطاع).
لنعرف التابع التالي:
| |
-235-
MATLAB for Numerical Computing-Ch6
:الخرج ىو
(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
إليجاد مشتق التابع التالي:
يمكن كمثال التأكد من خواص االشتقاق (الخطية ،مشتق جمع وطرح تابعين ،مشتق جداء )... ،أو من الممكن
أيضًا إيجاد المشتقات لبعض التوابع األساسية ،نعرض في الجدول التالي بعض التوابع األساسية مع مشتقاتيا
ومن ثم سنقوم بإيجادىا باستخدام .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
مثال :سنقوم ضمن ىذا المثال بإيجاد القيمة العظمى والدنيا لتابع ما.
،ىذا يعني أننا نبحث عن النقاط التي تحقق البحث عن قيمة عظمى محمية أو صغرى لتابع ما
المعادلة التالية:
-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
.5تتفق النتيجة السابقة مع رسم التابع ،بعد ذلك نقوم بحساب قيمة التابع fعند النقاط x=1, -2ويمكن
ذلك باستخدام التعميمة .subs
)subs(y,1), subs(y,-2
-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ثابت اختياري ،ىو يجب التنبيو أن التكامل غير المحدود ليس وحيدًا ،حيث أن مشتق التابع
.أي نكتب: أيضًا التابع
∫
-243-
MATLAB for Numerical Computing-Ch6
الخرج
مثال :سنقوم أيضًا في حساب بعض التكامالت لتوابع شييرة ومستخدمة كثي اًر لكن اإلضافة في ىذا التمرين ىو
استخدام تعميمة prettyالتي تساعد في جعل النتيجة أسيل لمق راءة عمى المستخدم ،قم بتنفيذ الرماز التالي والحظ
الخرج.
∫
-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إلجراء ىذه
ً إن حساب التكامل بالتجزئة يتطمب عدداً إضافياً من الحسابات
الحسابات ،نرغب في حساب التكامل:
∫
-245-
MATLAB for Numerical Computing-Ch6
;))z=trapz(x,sin(x
الدخل:
.1اسم التابع الذي يحتوي عمى المعادلة التفاضمية االعتيادية ،ODEأو استخدام تابع من نمط
،anonymousيحتوي التابع عمى دخمين مثالً ) (t,yويعيد القيمة .dy/dtويجب االنتباه أن جممة
المعادلة التفاضمية يجب أن تكون من المرتبة األولى حتى نستطيع استخدام ODE Solversوحتى لو
كانت غير خطية.
-246-
MATLAB for Numerical Computing-Ch6
نقوم أوالً بإنشاء ممف تابع 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
-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
-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
مالحظة :يمكن ضمن MATLABالحصول عمى حمول المعادلة التفاضمية بداللة الرموز وذلك باستخدام التعميمة
،dsolveالش كل القواعدي لمتعميمة ىو:
)'dsolve( 'eqn
تعيد التعميمة الحل بداللة الرموز 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
الخرج ىو:
exp(t)/2 - (3*exp(-t))/2
Transforms التحويالت
يحتوي MATLABعمى عدد من التحويالت المشيورة ،والتي من الممكن تطبيقيا بسرعة باستخدام تعميمة وحيدة
مثل تحويل البالس Laplaceوتحويل فورييو .Fourierسيتم التعرف عمى ىذه التحويالت بشكل أكبر ضمن
مقررات أخرى لذلك لن ندخل بالتفاصيل الرياضية ووجود التحويل وتقاربو ،اليدف ىو استخدام التعميمات
لمحصول عمى التحويالت.
.1تحويل البالس :Laplcae Transform
سنذكر فقط عالقة تحويل البالس:
الخرج ىو:
-251-
MATLAB for Numerical Computing-Ch6
:الخرج ىو
-252-
MATLAB for Numerical Computing-Ch6
:الخرج ىو
-253-
MATLAB for Numerical Computing-Ch6
)exp(-2 x 2
1
0.8
0.6
0.4
0.2
0
(2^(1/2)*pi^(1/2)*exp(-w^2/8))/2
-254-
MATLAB for Numerical Computing-Ch6
1.2
1
0.8
0.6
0.4
0.2
0
الخرج ىو:
))f = -2/(pi*(x^2 + 1
-255-
MATLAB for Numerical Computing-Ch6
-256-
MATLAB for Numerical Computing-Ch6
األسئمة
Command .1قم بكتابة رماز برمجي لحل جممة المعادالت التالية ومن ثم أظير الحل ضمن
.Window
.2نرغب في حل المعادلة التالية بشكل يكون الخرج بداللة الرمز ،اكتب الرماز البرمجي الالزم
المعادلة:
.3قم بكتابة رماز برمجي لتعريف تابع لنحتولين بداللة المتحوالت كما في دروس النظري ،التابع:
.5قم بكتابة رماز برمجي إليجاد نياية التابع التالي عند القيمة 1من اليمين واليسار ومن ثم رسمو عمى
المجال ].[-5,5
| |
مساعدة :قراءة فقرة النيايات
-257-
MATLAB for Numerical Computing-Ch6
.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
-1-
-261-
MATLAB for Numerical Computing-Ch7
عنوان الموضوع:
المحاكاة باستخدام ®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
® ، MATLABلغة الحوسبة التقنية ،عبارة عن بيئة برمجية تيدف إلى تطوير الخوارزميات ،تحميل المعطيات،
العددية.
التصور والحسابات ّ
ّ
أما ® Simulinkفيي عبارة عن بيئة بيانية تيدف إلى إج راء محاكاة وانشاء تصاميم ونماذج Modelsألنظمة
مضمنة تغطي عدد كبير من المجاالت.
َّ ديناميكية و أنظمة
يدعم جزء ® Simulinkتصميم األنظمة ،المحاكاة ،توليد الرمازات البرمجية بشكل أوتوماتيكي ،واجراء قياسات
واختبارات لألنظمة المنفذة عمميًا ،لذلك فيو يستخدم في تصميم وتطوير مجال واسع من المنتجات المتقدمة عالية
المستوى ،مثالً أنظمة ذاتية الحركة ،أنظمة التحكم في الطيران والكترونيات الطيران ،أنظمة االتصاالت،
التجييزات االلكترونية ،اآلالت الصناعية واألجيزة الطبية.
-263-
MATLAB for Numerical Computing-Ch7
الصور التالية تعرض بعض المنتجات والخدمات المتعمقة ب Simulinkالتي تؤمنيا شركة ®MathWorks
متعددة.
وذلك ضمن مجاالت مختمفة وتطبيقات ّ
-264-
MATLAB for Numerical Computing-Ch7
-265-
MATLAB for Numerical Computing-Ch7
Open the Simulink Library Browser فتح متصفح المكاتب ضمن Simulink
من أجل فتح جزء ® Simulinkيمكن كتابة ضمن Command Windowالتعميمة .simulink
من أجل الوصول إلى Simulink Library Browserضمن برمجية ،MATLABيمكن استخدام Toolstrip
ستجد الواجية التالية التي تحتوي عمى المكاتب الخاصة ب ـ simulinkوالتي جرى تعريفيا مسبقاً من قبل مطوري
البرمجية.
-266-
MATLAB for Numerical Computing-Ch7
ستظير أمامك الئحة ،اختر منيا ،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
-268-
MATLAB for Numerical Computing-Ch7
-269-
MATLAB for Numerical Computing-Ch7
-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
إلحضار كتمة ،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ستحصل عمى النافذة التالية:
-280-
MATLAB for Numerical Computing-Ch7
-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
-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
الحل:
نعمم أن مجموع العزوم = عزم العطالة مضروباً بالتسارع الزاوي
العزم يساوي القوة مضروبة بالذراع.
عزم العطالة يساوي الكتمة بمربع البعد وذلك من أجل نقطة مادية.
يوجد قوتين تؤثران عمى الجسم الثقل ،وتوتر الخيط ،حيث أن قوة توتر الخيط معدومة ألنيا موازية لمحور
الدو ارن.
بناء عمى ما سبق نكتب
ً
̈
̈
،عندىا تصبح المعادلة التفاضمية وعنيا يكون يمكن أخذ تقريب من أجل زوايا صغيرة أي
عمى الشكل:
̈
-290-
MATLAB for Numerical Computing-Ch7
̈
̂ ̇
] [
̇
نقوم أوالً بإنشاء ممف تابع 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
-291-
MATLAB for Numerical Computing-Ch7
الخرج المنحني األزرق ىو الموضع بمعنى الزاوية مقد ًار ب ـ ،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
مالحظة :من أجل توسيع عنصر addإلى 4مداخل قم بفتح العنصر وضع داخمو أربع إشارات +لمداللة عمى
أربع مداخل والعممية المرغوبة ىي الجمع كما في الشكل:
-301-
MATLAB for Numerical Computing-Ch7
-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
-305-
MATLAB for Numerical Computing-Ch7
نضبط اإلعدادات وفق stop time = 2و .max step size = 0.001
معدلة مطاليًا سنعرض إشارة المعمومات واإلشارة الحاممة واإلشارة النيائية ،نالحظ أن غالف
الخرج ىواشارة ّ
المعدلة ىو إشارة المعمموامت.
ّ اإلشارة
-306-
MATLAB for Numerical Computing-Ch7
-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
ميكن متثيل النظام السابق بداللة إشارة دخل إضاف ًة لتابع تحويل :
)s(1 / L
Tf
R 1
s2 s
L LC
العددية نجد:
بالتعويض بالقيم ّ
)s(100
s 1000s 1106
2
-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
في طرف والطرف اآلخر يحتوي عمى يمكن إعادة كتابة المعادلة السابقة بالشكل التالي بحيث نعزل المقدار
بقية الحدود:
اإلعدادات:
وتردد F
إشارة الدخل مطال ّ U
Integrator يجب وضع القيمة البدائية .0
-313-
MATLAB for Numerical Computing-Ch7
إلحضار العناصر:
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 وضع قيمة
وضع داخميا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
-1-
-318-
MATLAB for Numerical Computing-Ch8
عنوان الموضوع:
الواجيات البيانية التخاطبية 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
-320-
MATLAB for Numerical Computing-Ch8
-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
-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
-326-
MATLAB for Numerical Computing-Ch8
زر OKعند الضغط عميو يتـ تطبيؽ إعدادات معينة بعد اختيارىا أو
يتـ إغالؼ الواجية مثالً
ىو عبارة عف زر قابؿ لالنزالؽ بيف قيمتيف عدديتيف بخطوة معينة ،يتـ Slider
ال يستفاد
تحريؾ المزالؽ Silderعند طريؽ الضغط عميو وسحبو ،مث ً
منو في حالة الحاجة لتغيير قيمة عنصر ضمف الواجية لمعرفة أثره
ال عمى منحني تابع.
مث ً
ىي عبارة عف لوحة ،تفيد في تنظيـ العناصر ضمف الواجية ضمف Panel
ال
األزرار مف نفس النوع Radio Buttonsوالمرتبطة مع بعضيا ،مث ً
نرغب بجعؿ المستخدـ اختيار مجاؿ لسعر المنتج الذي يود بعرضو،
عند الضغط عمى أحد ىذه األزرار يتـ إلغاء اختيار أي زر آخر ضمف
نفس المجموعة ،ينصح باستخداـ Button Groupعند استخداـ
مجموعة مف .Radio Buttons
-327-
MATLAB for Numerical Computing-Ch8
ىذا النوع مف ا ألزرار يقوـ بتوليد حدث ويؤشر إلى حالتو فيما إ از تـ Toogle Button
ما ،يمكف استخدامو كدخؿ لمواجية مثالً يريد المستخدـ إدخاؿ رقـ
لحساب ناتج العاممي factorialلو .تجدر المالحظة أنو يجب تحةيؿ
األعداد المدخمة داخؿ الرماز البرمجي إلى أعداد ألنو يفيـ الدخؿ عمى
أنو محرؼ charاو سمسمة محرفية stringيمكف استخداـ توابع
.str2num
ىو عبارة عف حقؿ يقوـ بعرض نص ثابت ،يستخدـ بيدؼ توضيح Static Text
ال.
عمؿ عنصر مف عناصر الواجية مث ً
ىي عبارة عف قائمة منسدلة عند الضغط عمى السيـ الموجود ضمنيا Pop-up Menu
وجود ىذا العنصر ضمف الواجية بيانية التخاطبية GUIيتيح عممية Axes
-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
.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
-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يحتوي عمى الرماز البرمجي الذي يتضمف التوابع التي تتحكـ بسموؾ الواجية
البيانية.
ستالحظ تمقائيًا فتح الرماز البرمجي التي تـ توليده تمقائيًا .يرجى عدـ حذؼ أي سطر مف السطور البرمجية التي
تـ توليدىا.
-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)
عند.... توصؼ لنا ما العمؿ الذي يقوـ بو الزر أو المحور أوOpeningFcn وCreateFcn إف توابع
.تشغيؿ الواجية
الحظنا عند تشغيؿ الواجية اليوجد أي معطيات لمعرض لذلؾ سنقوـ اآلف فقط ببرمجة ماذا يجب أف يتـ عرضو
.عمى المحاور عند تشغيؿ الواجية دوف الخوض بتفاصيؿ عمؿ األزرار
-341-
MATLAB for Numerical Computing-Ch8
:نالحظ االنتقاؿ إلى التابع الذي يحتوي عمى السطور البرمجية التالية
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)
:اكتب ما يمي
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عند تشغيؿ الواجية سنحصؿ عمى الشكؿ التالي:
-343-
MATLAB for Numerical Computing-Ch8
اضغط بالزر اليميني عمى العنصر ومف ثـpop-up menu الخاصة بػ ػcallback مف أجؿ الدخوؿ إلى
: كما في الشكؿView Callbacks Callback اضغط
-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
: واكتب الرمازات التاليةcontour وmesh قـ بعادة العممية السابقة لكؿ مف األزرار
mesh مف أجؿ زر
% Display mesh plot of the currently selected data.
mesh(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
-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;
.'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
-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');
-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-