وزارة التعليم العالي والبحث العلمي البرمجة بلغة MATLAB
جامعة بغداد كلية العلوم قسم علوم الحاسوب
الربجمة بلغة
Dr. Ali
1
البرمجة بلغة MATLAB
لغة الربجمـــــــــــة :MATLAB ()The MATLAB programming language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1مقدمة عن لغة االحتساب التقني .MATLAB -2الثوابت والمتغيرات. -3المصفوفات والعمليات على المصفوفات. -4المصفوفات متعددة األبعاد. -5مصفوفات الخاليا. -6السالسل الرمزية. -7جمل اإلدخال واإلخراج. -8الجمل الشرطيـــــة. -9جمل الدوران والتكرار. -10ملفات البيانات الخاصة ببرنامج .MATLAB -11ايعازات المجموعات والبتات وااليعازات القاعدية. -12الدوال والبرامج الفرعية. -13الرسوم البيانية.
المصــــــــــادر: 2
البرمجة بلغة MATLAB
MATLAB 6.5 -1الدليل المرجعي والتعليمي ,المهندس عبد الكريم البيكو( ,دار شعاع للنشر). MATLAB Help Version 6.5 -2 -3
www.mathworks.com
لغة البرمجة The MATLAB Programming Language : MATLAB مقدمة يعتبر برنامج MATLABالبرنامج األشهر في األوساط العلمية ,إذ يستخدم هذا البرناامج فاي معظام المسائل العلمية والهندسية ,وبعد نمذجة أي مسألة أو ظاهرة يأتي بعدها دور هذا البرنامج ليتعامل مع تلك البرامج ويحللها بأبسط الطرق وأحدثها وأيسرها برمجة ,ومن الجدير ذكره بان هذا البرنامج يعلـــّــم أكثر من 200معهد وكلية في الواليات المتحدة األمريكية فقط ,عدا تلك المعاهد في أوربا وبقية العالم ,ويكفي أن تدخل إلى أحد محركات البحث على شبكة االنترنت وتكتب فقط ,MATLABفســـــتــُــذهل من عدد المواقع التي تتحدث عن هذا البرنامج. وتعتبر لغة MATLABلغة برمجية عالية األداء تستخدم إلجراء الحساابات التقنياة ,وتقاوم بعملياات الحساب واإلظهار ضمن بيئة سهلة البرمجة كما أنها ال تحتاج إلاى احتاراك كبيار .تمكناك هاذه اللغاة مان حل العديد من المسائل التقنياة حساابيا ,خاصاة التاي يعبار عنهاا بمصافوفات والتاي تحتااج إلاى جهاد كبيار لبرمجتها بلغات البرمجة األخرى مثل لغة Cو .FORTAN أتت تسمية هذه اللغة من اختصار التعبير ( MATrix LABoratoryمختبر المصفوفة) ,حياث إن البرنامج مصمم أساسا للتعامل مع العمليات على المصفوفات بشكل بسايط .كماا أرفقات بهاذه اللغاة أدوات لمعالجااة وحاال تطبيقااات علميااة خاصااة سااميت ( toolboxesوهااي أكثاار ماان عشاارين أداة) ,وتعتباار هااذه األدوات هامة جدا ً لمستخدمي هذه اللغة ,حيث تسام لهام باتعلم وتطبيان تقنياات حال متخصصاة لمعالجاة مشااكالت ومسااائل خاصااة ,مثاال معالجااة اإلشااارة ,ونظاام الااتحكم والمحاكاااة والشاابكات العصاابية والتحلياال العددي والكمي والمالي واإلحصاء ومسائل الجبر الخطي واالمثلية ...الخ.
3
البرمجة بلغة MATLAB
ياانمن برنااامج MATLABأدوات واجهااة التخاطااب الرسااومية Graphical Interface ) (GUIالتي تجعلك تتعامل مع البرنامج على انه أداة تطبيقية متطورة.
تشغيل برنامج MATLAB يتم تشغيل البرنامج بأحد الطرق التالية: -1بعد تنصيب برنامج MATLABعلى الحاسابة التاي تعمال عليهاا .ياتم إضاافة رماز أيقوناة البرناامج ويااتم فتحااة عنااد النقاار علااى األيقونااة بنقاارتين
علااى سااط مكتااب الحاساابة ويحماال الرمااز مزدوجتين .double click
-2أو عن طرين الذهاب إلى قائمة startومنها إلى برامج Programsثم أسام البرناامج MATLAB .6.5 start
Programs MATLAB 6.5 عندها سوك تظهر لنا شاشة تحمل أسم البرنامج MATLABونسخة اإلصادار وسانة النشار كماا فاي الشكل رقم ( .) 1ثم بعد ثواني قليلة تظهر نافذة البرنامج الرئيسية والتي تكون فاي بداياة التشاغيل كماا فاي الشكل رقم ( ) 2حيث تحتوي هذه النافذة كسائر البرمجيات التي تعمل تحت بيئة نظاام Windowsعلاى نوافذ فرعية.
Dr. Ali Computer Science
4
البرمجة بلغة MATLAB
سطح مكتب برنامج MATLAB عند تشغيل برنامج MATLABستظهر على شاشتك عدة نوافذ عناوان احادها MATLABوتسامى سط مكتب برناامج , MATLABتحاوي هاذه النافاذة وتاتحكم بجمياع النوافاذ األخارى المكوناة لبرناامج .MATLABوحسب خيارات تنصايب البرناامج ,فقاد تكاون بعا
هاذه النوافاذ مرئياة أو مخفياة ضامن
نافذة .MATLAB مكونات نافذة MATLAB تتكون نافذة MATLABمن األجزاء التالية-: -1شريط العنوان ويكون ذات لون مميز عن باقي األشرطة يوجد على يساره الرماز الصاوري للبرناامج وأسم البرنامج
وفي يمينه
-2شااريط قااوائم ) (Menu Barأو ) (Lists Barيباادأ بقائمااة ملااك ,Fileقائمااة تحرياار ,Editقائمااة عر
... ,Viewوحتى قائمة المساعدة .Help
-3شريط األدوات ) (Tools Barويضم رموز صورية لابع
االيعاازات الموجاودة فاي قاوائم الشاريط
السابن. هنااك فاي الجازء األخيار مان شاريط األدوات جازء مهام يادعى الادليل الحاالي )(Current Directory والذي يخبر المستخدم في أي جزء من الحاسب هو موجاود حالياا ً وكماا فاي الشاكل ( )2يعلمناا بأنناا علاى الدليل (المجلد) MATLAB6P5\workوعلى القرص C:
5
البرمجة بلغة MATLAB
-4هنالااك شااريط مهااام خاااص بنافااذة برنااامج MATLABوفيااه كلمتااان األولااى Startوعملهااا كطرياان مختصر لتنفيذ بع
االيعازات .بينما Readyتعلمك بأن البرنامج جاهز للعمال حساب التوجياه المعطاى
له . باإلضافة إلى األشرطة أعاله هناك مجموعة من النوافذ الفرعية التي يمكن تفعيلهاا أو إخفائهاا حساب الحاجة وذلك كما في الشكل ( )3حيث يتم تأشير أسم النافذة المرغاوب بعرضاها باشاارة (√) ,لكان هنااك نافذة أساسية للعمل هي نافذة األمر ,Command Windowوالتي من خاللها يتم التعامل بكتاباة وتنفياذ األوامر بصورة مباشرة أو غير مباشرة. -5تعتبر النوافذ الداخلية الظاهرة أسمائها في قائمة Viewكما في الشكل رقم ( )3هي من مكونات نافذة برنامج MATLABولكل نافذة منها عملها الخاص وكما يلي-:
شكل ( :)3النوافذ الداخلية في قائمة View أ -نافااذة األماار :Command Windowوهااي نافااذة ال يمكاان االسااتغناء عنهااا ألن بواسااطتها يااتم تنفيااذ األوامر وعر
النتائج التي نحصل عليها من تنفيذ تلك األوامر وتكتب بعد عالمة الحث (>>).
ب -نافذة ساحة العمل :Workspaceوهاي عان واجهاة تخاطبياة تسام لاك باساتعرا
وتحميال وحفاظ
متغيارات لغاة MATLABحياث تظهار قائمااة تضام أسام المتغيار وحجمااه وعادد بياناتاه وصانفه (جميااع متغيرات لغة MATLABهي من صنك مصفوفة) ,كما في الشكل (.)4
6
البرمجة بلغة MATLAB
ج -نافذة الدليل الحالي :Current Directoryوهاي أيضاا واجهاة رساومية تحادد الادليل الحااوي للملاك الذي يتعامل معه برنامج .MATLAB د -نافذة المساعدة :Helpوهاي نافاذة تخاطبياة (رساومية) تسام لاك بالبحاث واساتعرا
الوثاائن بشاكل
مباشر. و -لوح اة الباارامج التنفيذيااة :Launch Padوهااي عبااارة عاان نافااذة تسااتعر
بنيااة شااجرية لااودوات
والبرامج التنفيذية. هاـ -نافاذة األواماار الساابقة :Command Historyتمكناك هااذه النافاذة ماان إعاادة تنفيااذ األوامار السااابقة المنفذة في نافذة األمر بدالً من كتابتها مرة أخرى. والشكل ( )5يبين النوافذ الداخلية لنافذة البرنامج MATLABبعد تفعيلها .... شريط القوائم )(lists bar
شريط األدوات )(tools bar
7
البرمجة بلغة MATLAB
مالحظات: -1كال متغياار فااي MATLABعبااارة عان مصاافوفة ,لغااة MATLABموجهااة بالمصاافوفات حتى وان كانت المتغيرات أعدادا ً مفردة (.)scalar -2األمر clearضمن Workspaceيستخدم لحذك المتغيرات والدوال من الذاكرة . -3األمر clcضمن Workspaceيستخدم لمس نافذة األمر .Command Window -4يمكن إظهار النتائج العددية في لغة MATLABبتنسيقات أظهار مختلفة: …format short, long, short e, long e, hex, blank, +, rat, -5يمكن تنفيذ ( demo )demonstrationكايعازات جاهزة في MATLABمن خالل: أختر الموضوع المحدد (مثال )Toolboxes
Help
Demos
يمكن االستفادة منها في-: أ -تنفيذ .Demos
ب -تعليم أكثر حول الموضوع ( .)Helpج -عر
البرنامج .د -استنساخ شفرة البرنامج من Demoإلى مالحظـــــة :يمكن الدخول إلى Demosمن
شفرة
.M–file
Start
-6ثالث نقااط متتالياة ( )...فاي نهاياة الساطر مسابوقة بفارا للداللاة علاى اساتمرار االيعااز فاي السطر التالي. -7فارزة منقوطة بعد اإليعاز تمنع طباعة المتغيار أو النااتج فاي نافاذة Commandوكاذلك فاي نافذة .Editor -8إشارة النسبة المئوية ( )%تستخدم للتعلين فكل نص يأتي بعدها يعتبر نص تعلين ,مثل: % This Program Compute Area -9ملفات MATLABتسمى M–filesوتكون توسعها ( ,).mمثالً (.)examplel.m 8
البرمجة بلغة MATLAB
-10
االحتفاظ بكتابة االيعازات السابقة والالحقة في نافذة Commandبحركة الساهم لوعلاى
واألسفل. -11
نتيجة تنفيذ برنامج ( MATLABالنتائج واالخراجات) تظهار فاي شاشاة Command
Windowلذلك يجب االنتقال إليها بعد التنفيذ. -12
لغااة MATLABال تحتاااج إلااى اإلعااالن عاان المتغياارات والثواباات واألنااواع البيانيااة
األخرى المستخدمة بالبرنامج. -13
لتنفيااذ مقطااع ماان البرنااامج (تعليمااة أو مقطااع ماان البرنااامج) يااتم تأشاايرها ثاام النقاار أيماان
فتظهر القائمة المنسدلة:
لحساب الجزء المنشر وإظهار النتيجة في نافذة Command الذهاب إلى الدالة المنشرة الذهاب للـ Helpللجزء المنشر قص نسخ لصن تعلين رفع التعلين هيكلة المقطع
وبعد ذلك نختار Copyوننتقل إلى Command Windowونختار Pasteوننفذها. -14
إلنشاااء ملااك نصااي ,M-fileأنقاار علااى أيكونااة الصاافحة الفارغااة (البيضاااء) الموجااودة
ضامن شااريط أدوات سااط مكتاب ,MATLABأو اختاار Newماان القائماة Fileوماان ثاام اختر M-fileأو اختيار Openلفت ملك موجود مسبقا .يستدعي هذه األوامر نافاذة محارر النصوص التي يمكنك في كتابة أوامر ( MATLABنافذة كتابة البرامج) .كماا فاي األشاكال (.)8( ,)7( ,)6
9
البرمجة بلغة MATLAB
-15
يمكاان تنفيااذ الملااك المخاازون باختيااار أيكونااة Runالموجااودة فااي شااريط أدوات نافااذة
Editorأو عبار ضاغط المفتاا F5أو االختياار Runمان القائماة ,Debugأو كتاباة اسام الملك المخزون أمام عالماة الحاث >> فاي نافاذة .Commandبعاد انتهااء كتاباة البرناامج (الملك) يخزن هذا الملك كملك M-fileباسم معاين (ماثالً )example1.mعلاى قرصاك الصلب عبر اختيار االختياار Saveمان القائماة Fileأو الخازن ضامن شاريط أدوات ساط مكتب .)MATLABكما في الشكل (.)9 مالحظة: عند الخزن يحمل البرنامج اسم افتراضي ) (Untitle1فباإلمكان إعطااء االسام الاذي يرغاب فياه المبرمج أو البقاء عليه.
تنفيذ البرنامج
خزن البرنامج
شكل ( :)7نافذة كتابة البرامج (محرر الملفات النصية).
شكل ( :)6إنشاء ملك جديد.
شكل ( :)9تنفيذ البرنامج. رقم العمود رقم السطر
شريط الحالة
10 شكل ( :)8نافذة كتابة البرامج (محرر الملفات النصية).
البرمجة بلغة MATLAB
-16
عندما نريد إغالق برناامج MATLABعبار االختياار Exit MATLABمان القائماة
Fileالموجااودة فااي نافااذة سااط مكتااب MATLABأو عباار كتابااة األماار Exitفااي نافااذة ,Commandأو عالمة (×) في زاوية سط مكتب MATLABالعليا اليمنى. -17
اإليعاز globalلإلعالن عن متغير عالمي بين الدوال والبرنامج الرئيسي.
-18
لحساب زمن تنفيذ البرنامج نضع تعليمتي ( )ticو ( )tocبين االيعازات.
مثال: يفضل كتابتها في بداية أي برنامج رئيسي
;clc ;clear ;tic )(commands ;t = toc
-19
للبحث عن إيعاز في الـ Helpمن خالل: MATLAB Help
Help
هناك عدة طرق للبحث عن اإليعاز ,منها-: 1- Contents. 2- Index. 3- Search. 4- Demos.
11
البرمجة بلغة MATLAB
-20اإليعاز breakيقوم بايقاك تنفيذ البرناامج أو جازء مان البرناامج أو الدالاة (التعليماات التي بعد breakال تــُــنفذ). أمثـــــلــة: …….
if …….
…….
…….
…….
……. …….
else
;break .…….
function …….
…….
;break }توقك في حالة {else
;break
….….
ال تنفذ
}توقك تنفيذ الدالة فقط{
-21اإليعاز returnللخروج من الدالة. مثال:
…… function …….. ……. …… خروج من الدالة ال تنفذ
;return …….. .…...
-22رسالة الخطأ تحتوي على رقم السطر ونوع الخطأ. -23أي عملية حسابية غير منسبة إلى متغير تنسب تلقائيا إلى المتغير .ans -24أي متغير غير مستخدم ويدخل في العمليات فان البرنامج سوك يعطي خطأ.
12
البرمجة بلغة MATLAB
رموز لغة MATLAB Symbols : MATLAB تتكون لغة MATLABمن العناصر األساسية التالية: أ -حروك أبجدية إنكليزية :وهي: ب -أرقام حسابية:
A, B, … , Z, a, b, … , z
0, 1, 2, …, 9
ج -رموز خاصة مثل:
( ... , {, + , - ,= , > , < , ; , *, ) ,الخ.
الثوابت :Constants يوجد في لغة MATLABأنواع متعددة من الثوابت أهمها-: (أ) الثوابت العددية :Numerical Constants وتتكون من عدد من األرقام ولها عدة أشكال هي: ( )1الثوابت الصحيحة:
مثل:
0, +23, 472, -18
مالحظة :أكبر عدد صحي مستخدم. >> bitmax = ans 9.007199254740991e+015 والتي تقابل 253-1 13
البرمجة بلغة MATLAB
مثل0.0, 51.8, 472.5, -18.0 :
( )2الثوابت الحقيقية:
مالحظة:
>> realmin = ans 2.225073858507201e-308 >> realmax = ans 1.797693134862316e+308 >> pi = ans 3.146
( )3الثوابت الحقيقية المدونة تدوينا ً يائياً :حيث تحااول الصاايغة الجبريااة 10Nإلااى صاايغة MATLABيائيااة ENفمااثال تصااب 103 2.0فااي الجباار: 2.0E3أو 2.0E+3بالتدوين اليائي في MATLABوكذلك تصب -102 1.7في الجبر -1.7E2 :في التدوين اليائي وكذلك تصب : 0.0032 10-3 3.2E-3 : 3.2 ( )4الثوابت العقدية:
مثلsqrt (-2) , 6 + sin (0.5) * j , 6 - 9i , 1 - 2i :
حيثi = j = 1 : مثال :1إذا كان:
c = -7.7782 – 4.9497i
فالستخراج الجزء الحقيقي
)cr = real (c
cr = -7.7782
وإلستخراج الجزء التخيلي
)ci = imag (c
ci = -4.9497
مثال :2
6.000 – 9.000i
مثال :1
)c2 = 3 * (2 – sqrt (-1) * 3 مثال :2
;>> x = 100
;>> x = 100
;)>> x = uint8 (x
;)>> x = double (x ;>> y = x + 1
;>> y = x + 1 14
البرمجة بلغة MATLAB
101
Error
= y
(ب) الثوابت الرمزية :String Constants يسمى هذا النوع من "ثوابت" مجازا ً ألن الثابات هاذا يتكاون مان حاروك وأرقاام ورماوز توضاع باين عالمتي اقتبااس quotationsمفاردة أي ' ' ويساتخدم عاادة كعنااوين توضا القايم الناتجاة مان الحساابات ووحداتها ,تسمى العبارات التالية والموجودة بين الحاصرات العليا ثوابت رمزية. '= 'The speed of wind 'ُُ'I love Basrah ''My birthday = 1970 كل الثوابات الرمزياة أعااله ,وان اساتخدمت أرقاماا حساابية داخلهاا ,فهاي ال تحمال معناى حساابي ,ومان الجدير بالذكر أثناء استعمال الثوابت الرمزياة اناه ال يجاوز اساتخدام حاصارات علوياة داخال حاصاراتها, كما ينبغي التنبيه أي أن هناك قيما ً رمزية للحروك يعتبر الحرك Aاقل من الحرك Bويمكن كتابة ذلك بالصورة: ''A' < 'B (جـ) الثوابت المنطقية :Boolean Constants وهي الثوابت التي قيمتها العددية ) (1في حالة trueو ) (0في حالة .false مثال: 1
3>2
0
0>5
المتغيرات :Variables هناك بع
القواعد الواجب مراعاتها عند كتابة اسم المتغير وهي:
.1ال يمكن استخدام الكلمات المفتاحية (الكلمات المحجوزة) أو الدوال التي توفرها اللغاة كأساماء متغيرات ,مثال: … if, end, for, break, else, global, return, function, sin, log, .2أسماء المتغيرات حساسة لحالاة الحارك ( COST, CoST, cost, Costمتغيارات مختلفاة, وكذلك Aو .)a .3حرك )small letter( lفي لغة MATLABيشبه رقم .1 .4يمكن ألسماء المتغيرات أن تحوي 63رمزا وسيهمل أي رمز زائد عن .63 15
البرمجة بلغة MATLAB
. 5يجاااب أن تبااادأ أساااماء المتغيااارات بحااارك متبوعاااا باااأي عااادد مااان األرقاااام أو األحااارك أو .underscoreوال يجوز استخدام الرموز الخاصة أو الفرا . .6جميع أوامر MATLABتكتب بالحروك الصغيرة )… .(if, while, input, هناك عدة أنواع من المتغيرات في لغة MATLABوهي: (أ) المتغيرات العددية :Numerical Variables تتكون من حرك واحد أو مجموعة من الحروك من Aإلى Zو aإلى bويمكن أن يحتوي على أرقام ماان 0إلااى 9ويمكاان أن تكااون سلساالة ماان األرقااام والحااروك بشاارط أن يباادأ بحاارك (خلاايط ماان أرقااام وحروك مبدوءة بحرك) ويمكان كاذلك أن يحتاوي المتغيار علاى underscoreحتاى 63رمازاً .وتكاون قيمة المتغير عددية ( صحي ,حقيقي ,عقدي أو أسي). مثال: Ali_Ahmed, X2, S2, ks, K
التعبير الحسابي يتكون التعبير الحسابي من مجموعة من الثوابات والمتغيارات تجماع بينهماا عملياات حساابية ويساتخدم فيهاااا الرماااوز الحساااابية مثااال ^ ,* ,/ ,- ,واألم ثلاااة يالتياااة تعبااار عااان تعاااابير جبرياااة صااايغت بلغاااة .MATLAB التعبير بلغة MATLAB
التعبير الجبري a – 3b
a–3*b
c2 - 10
c ^ 2 – 10
a2 + b2 / 12
(a ^ 2 + b ^ 2) / 12 )m * (7 * d – 8 * g
)m (7d – 8g
قاعدة األسبقية (األولوية) Rule of Precedence وهذه القاعدة مهمة في فهم وترتيب أولويات العمليات الحسابية في التعابير والمعاامالت الحساابية ,كماا يجريها وينفذها الحاسب ,وتنص القاعدة على أن األولوية األولى تعطى للعمليات الموجاودة باين القوساين ومن اليسار إلى اليمين ,وبالنسبة للعمليات الحسابية فاالرفع إلاى األس أوال ,والضارب (أو القسامة) ثانياا, والجمع (أو الطر ) أخيرا ً والمثال التالي يوضع هذه القاعدة: التعبير: 16
البرمجة بلغة MATLAB
A + C B
A / B + Cيكافئ في الجبر 1 2
يكافئ في الجبر
بينما يكافئ التعبير (A / )B + C
A BC
1 2 الن الجمع داخل األقواس يجري أوالً حسب األولوية ثم يقسم ِ Aعلى نتيجة القوس. مثال :التعبير )A - B / (K * F - X ^ M
1
2 3 4 5
تنفيذ العمليات حسب الخطوات التالية:
تأخذ األقواس األولوية األولى ,وتنفذ العمليات داخلها حسب األولوية أيضا. العملية األولى :رفع Xإلى األس Mلتصب كمية واحدة. العملية الثانية :ضرب Kفي Fلتصب كمية واحدة. العملية الثالثة :طر نتيجة العملية األولى من نتيجة العملية الثانية وتصب النتيجة كمية واحدة. العملية الرابعة :تقسم Bعلى نتيجة العملية الثالثة وتصب النتيجة كمية واحدة. العملية الخامسة :تطر نتيجة العملية الرابعة من Aوتصب النتيجة كمية واحدة.
الجملة الحسابية Arithmetic Statement 17
البرمجة بلغة MATLAB
الجملة الحسابية في MATLABتكافئ المعادلاة الحساابية فاي الجبار إال أن MATLABتشاترط أن يكون اسم المتغير المراد حساب قيمته في الطرك األيسر وحده بدون أشارة بينما يكاون التعبيار الحساابي (بقية المعادلة) في الطرك األيمن ,كما في األمثلة التالية: 1( y = A * X + B 2) A = 3.14 * R ^ 2 مثال: أولوية العمليات الحسابية في الجمل الحسابية: Z=A–B/C 1
2 3
يمكاان مالحظااة أن إشااارة المساااواة تمثاال يخاار أولويااة حسااابية بعااد انتهاااء جميااع العمليااات الحسااابية فااي الطرك األيمن. (ب) المتغيرات الرمزية :String Variables تشبه في تركيبها المتغيرات العددية والفرق الوحيد بينهماا هاو أن قيماة المتغيار الرمازي تكاون رمزياة (محصورة بين عالمتي اقتباس).
الجملة الرمزية String Statement تشبه في تركيبها الجملة الحسابية والفرق الوحيد بينهما هو أن المتغير في طرفهاا األيمان يكاون رمزياا ً (محصورة بين عالمتي اقتباس) والتعبير في طرفها األيسر يكون متغير. واألمثلة التالية توض ذلك: ;'A = 'Hameed Abdul–Kareem ;'N = 'Number of Student ;'Dept = ُُ'Computer Science مالحظة :التعاابير فاي الطارك األيمان ال يكاون لهاا قايم حساابية لاو اساتخدمت فاي عملياات حساابية ألنهاا موضوعة داخل ' '.
االقترانات المكتبية :Library Functions 18
البرمجة بلغة MATLAB
يتااوفر فااي معظاام الحاساابات باسااتخدام لغااة MATLABاقترانااات رياضااية يكثاار اسااتعمالنا لهااا ,مثاال الدوال واالقترانات المثلثية واللوغارتيمية وغيرها ويمكن استدعائها في أي وقت ,ومنها: االقتران
المعـــــــــنى
Sqrt
الجذر التربيعي
abs
القيمة المطلقة
exp
المرفوع إلى قوة بأساس 10
log
اللوغاريتم الطبيعي
log 10
اللوغاريتم العشري
log 2
اللوغاريتم ذو األساس 2
sin
جيب الزاوية
Cos
جيب تمام الزاوية
tan
ظل الزاوية
atan
ظل معكوس الزاوية
fix
التدوير باتجاه الصفر
floor
التدوير باتجاه الالنهاية السالبة
ceil
التدوير باتجاه الالنهاية الموجبة
round
التدوير باتجاه أقرب عدد صحي
mod
الجزء الصحي من حاصل القسمة
rem
بقية القسمة
sign
إشارة العدد إذا كانت موجبة ,سالبة ,صفر
imag
القسم التخيلي
real
القسم الحقيقي
factor
العوامل األولية
isprime
يعيد trueإذا كان العدد أوليا
primes
ينشئ قائمة باألعداد األولية
gcd
القاسم المشترك األعظم 19
البرمجة بلغة MATLAB
المضاعك المشترك األصغر
lcm مثال:
;>> x = 2.6 ;)>> y1 = fix (x); y2 = floor (x); y3 = ceil (x); y4 = round (x y1 = 2 y2 = 2 y3 = 3 س /مالفرق بين الدوال األربعة أعاله؟
y4 = 3
مالحظة: تأخذ االقترانات المكتبية أولوية بعد األقواس عند تنفيذ العمليات الحسابية. )sin (a + b) – m / sqrt (d 1
3 4 يكون تنفيذ العمليات الحسابية كما يلي:
2
5
العملية األولى :إيجاد قيمة جمع aمع .b العملية الثانية :إيجاد قيمة جيب الزاوية لناتج العملية (.)1 العملية الثالثة :إيجاد قيمة الجذر التربيعي لــ .d العملية الرابعة :إيجاد ناتج قيمة ناتج قسمة mعلى ناتج العملية (.)3 العملية الخامسة :طر ناتج العملية ( )4من ناتج العملية ( )2وتصب النتيجة النهائية كمياة واحادة (عاددا ً واحدا ً). مثال :تمثل الجمل التالية إقترانات مكتبية في الجبر وإزائها قيمتها في :MATLAB
b a 2 10
) b = sqrt ( a ^ 2 + 10
20
البرمجة بلغة MATLAB
)z = ln (cx + ny
)z = log (c * x + n * y
)y = sin 3 (x + nk
y = (sin (x + n * k)) ^ 3
)s = tan-1 (y / x
)s = atan (y / x
)) r = 2 * sqrt (exp (x – 5
r 2 e x 5 x y
t
)(a m
c
5 ab
2
3
)t = abs (x – sqrt (y)) / (a + m
gp
)g = p ^ (3 / 2) + (a * b / c) ^ (1 / 5
المصفوفات والعمليات على المصفوفات لقد كانت جميع الحسابات التي أجريتها حتى اآلن منلفة من أعداد وحيدة البعاد سنساميها أعاداد مفاردة. وتعتبر العمليات المجراة على األعداد المفردة هي أساسيات علم الرياضيات .وبنفس الوقت ,وعندما يريد الشخص إجراء نفس العملية على عدد مفرد أو أكثر ,فسيحتاج إلى أكثر إعادة إجراء العملية عادة مارات, مما يعني هدر في الوقات والجهاد .ولحال هاذه المشاكلة ,عماد برناامج MATLABإلاى إجاراء العملياات الرياضية على مصفوفة من البيانات. المصفوفة البسيطة يتعامل برنامج MATLABمع المصفوفات بشكل مباشار وبطريقاة سلسالة ,إذ أن إنشااء المصافوفات يتم بطريقة سهلة جداً. مثال (:)1 مثال (:)2 0
]x = [1, 3, 7, 9, 20
)y = sin (x
حيث 0 x
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.31
0.59
0.81
0.95
1
0.95
0.81
0.59
0.31
0 0
](0.1 * pi) (.2 * pi) (.3 * pi) (.4 * pi) (.5 * pi) (.6 * pi) (.7 * pi) (.8 * pi) (.9 * pi) pi
21
x y
x = [0
البرمجة بلغة MATLAB
)y = sin (x يقتصر كل ما عليك إلنشاء مصفوفة في لغة MATLABعلى أن تبادأ بقاوس يسااري ثام تادخل القايم المطلوبة بفرا أو (فاارزة) ثام أغلان المصافوفة بقاوس يميناي .وعنادما ترياد كتاباة ) sin (xفاأن برناامج MATLABيعلم بأنك تريد حساب الجيب لكل قايم xويقاوم بوضاع النتاائج فاي مصافوفة أخارى هاي y وتجعل هذه اإلمكانية MATLABمختلفة عن لغات البرمجة األخرى.
عنونة المصفوفة أو الفهرسة المصفوفة أعاله تتكون من 11عنصر ,يمكن الوصول إلى أي عنصر منها باستخدام الفهرسة له. )>> x (3 = ans 0.6283 )>> y (5 = ans 0.9511
ولتعريك مجموعة من العناصار بانفس الوقات فاأن برناامج MATLABيساتخدم النقطتاين المتعامادتين (.): )>> x (1: 5 = ans 0 0.3142 0.6283 0.9425 1.2566 هذه هي العناصر الخمسة األولى من المصافوفة ,xويجبارك الرماز 1: 5باأن تبادأ باالرقم 1وتعا ّد حتاى الرقم .5 مثال: )>> x (7: end = ans 2.5133 2.8274 3.1416
1.885 2.1991
وهنا تكمل من العنصر السابع وحتى نهاية المصفوفة ,إذ تشير الكلمة endإلى يخر عنصار مان عناصار المصفوفة. مثال: )>> y (3: -1: 1 22
البرمجة بلغة MATLAB
= ans 0
0.5878 0.3090
هنا العنصر الثالث ثم الثاني ثم األول بترتيب عكسي ,ويخبرك الرمز 3: -1: 1بأن تبادأ باالرقم 3وتعا ّد نزوالً بقيمة 1وتقك عند الرقم .1 مثال: )>> x (2: 2: 7 = ans 0.3142 0.9425 1.5708 هنا العنصر الثاني والرابع والسادس من المصفوفة ,xويخبرك الرمز 2: 2: 7باأن تبادأ باالرقم 2وتعا ّد نحو األعلى بــ 2وتقك عندما تصل إلى الرقم .7 مثال: )]>> y ([8 2 9 1 = ans 0
0.8090 0.3090 0.5878
استخدمنا هنا مصفوفة أخرى ] [8 2 9 1لوضع عناصار المصافوفة yبالترتياب الاذي نرغاب فياه, حيث وضع العنصر الثامن أوالً والعنصر الثاني ثانيا ,بينماا وضاع العنصار التاساع ثالثاا ً والعنصار األول رابعا .في الواقع تدل المصفوفة ] [8 2 9 1عناوين العناصر المرغوبة من المصفوفة .y مثال: )]>> y ([1 1 3 4 2 2 = ans 0 0 0.5878 0.8090 0.3090 0.3090 مثال: توض األمثلة التالية بأن برنامج MATLABال يقبل الدليل كرقم غير صحي حيث يعطي رسالة خطأ. )>> y (3.2 Error )>> y (3.7 Error 23
البرمجة بلغة MATLAB
)>> y (11.6 خطأ بسبب تجاوز الدليل طول المصفوفة
Error
إنشاء المصفوفة لقد قمنا سابقا ً بادخال قيم مصفوفة xعبر كتابة كل العناصر ضمن المصفوفة ,وهنا األمار مقباول الن المصفوفة xتحوي احد عشر عنصرا ً فقط ,ماذا لو احتوت 111عنصراً؟ هناك طريقتان إلدخال عناصر المصفوفة ,xوذلك باستخدام النقطتين المتعامدتين. أمثلة: 1) >> x = (0: 0.1: 1) * pi ) 2) >> x = linspace (0, pi, 11
عدد القيم
مثال:
القيمة النهائية
القيمة االبتدائية ]>> a = [1: 7 =a
1 2 3 4 5 6 7 مثال: ])>> b = [linspace (1, 7, 5 =b 1 2.5 4 5.5 7 مثال: )>> a = (1: 7 =a 1 2 3 4 5 6 7 مثال: , b = 1: 2: 9
>> a = 1: 5 =a
1 2 3 4 5 24
البرمجة بلغة MATLAB
=b 1 3 5 7 9 مالحظة: هنااا تاام إنشاااء مصاافوفتين ,ولكاان تااذكر بأنااك تسااتطيع دمااج التعبياارين ضاامن سااطر واحااد إذا لاام تفصاال بفواصل: ]>> c = [b a =c 1 3 5 7 9 1 2 3 4 5 وبذلك تم إنشاء مصفوفة cمنلفة من عناصر bمتبوعة بعناصر .a
تكييف المصفوفة باالعتماد على المثال السابن ,فان فصل العناصر بفراغات أو بفواصل عادية يحدد عناصر فاي أعمادة مختلفة ,في حين أن استخدام الفاصلة المنقوطة يجعل العناصر واقعة في أسطر مختلفة. مثال: ]>> c = [1 2 3 4 5 =c مصفوفة أفقية
1 2 3 4 5
مثال: ]>> c = [1; 2; 3; 4; 5 =c مصفوفة عمودية (كل عنصر في سطر)
1 2 3 4 5
مثال: >> a = 1: 5 25
البرمجة بلغة MATLAB
=a 1 2 3 4 5 مثال: '>> b = a لقد استخدمنا هنا إشارة المنقول (المدور) لتحويل السطر aإلى العمود .b
=b 1 2 3 4 5
مثال: (تنسيب المصفوفات)
;>> k = b
مثال: ]6 7 8
; 5
>> g = [1 2 3 4
تنزيل سطر يخر =g مصفوفة متكونة من سطرين وأربعة أعمدة
1 2 3 4 5 6 7 8
مثال: >> g = [1 2 3 4 5 6 7 8 ]9 10 11 12 كذلك فأن ضغط مفتا Enterأو Returnيخبرنا برنامج MATLABبأن ينتقل إلى سطر جدياد أثنااء إدخال قيم المصفوفة. مثال: ]>> h = [1 2 3 ; 4 5 6 7 26
البرمجة بلغة MATLAB
عدد األعمدة غير متساوية
Error
مالحظة: ; )half = g (2, 2
عنصر
; full = g
مصفوفة
مثال: ]>> c = [1: 5; 2: 2: 10; 7: -1: 3 =c 1 2 3 4 5 2 4 6 8 10 7 6 5 4 3 )>> c (1, 2 = ans 2 مالحظة: تقدم لغة MATLABطريقة أخرى لإلشارة إلى عناصر المصفوفة باستخدام رقم واحاد فقاط ,ولفهام هااذه الطريقااة يجااب التخياال بااأن جميااع عناصاار المصاافوفة مرتبااة بشااكل عمااود واحااد مكااون ماان أعماادة المصفوفة من األعلى إلى األسفل (أي عناصر العمود األول ثم الثاني ثم الثالث وهكذا). )>> c (12 = ans 4
العمليات الحسابية بين المصفوفة والعدد المفرد تجري العديد من العمليات الحسابية كعملية اإلضافة والطر والضرب والقسمة بين العدد المفرد وباين جميع عناصر المصفوفة. مثال: المصفوفة gالمعرفة سابقا ً %
>> g – 2 = ans -1 0 1 2
27
البرمجة بلغة MATLAB
3 4 5 6 7 8 9 10 وهنا ُ طر من كل عنصر من عناصر المصفوفة gالعدد .2 مثال: >> 2 * g – 1 = ans أما هنا فضرب كل عنصر من عناصر المصفوفة g
1 3 5 7
بالعدد ,2ثم ُ طر من كل عنصر من العناصر
9 11 13 15
الناتجة الرقم .1
17 19 21 23
مثال: >> 2 * g / 5 + 1 = ans 1.4 1.8 2.2 2.6 3.4 3.8 4.2
3
5
4.6
5.4 5.8
سم الناتج علاى العادد 5 ضرب كل عنصر من عناصر المصفوفة gبالعدد ,2ثم قُ ّ أما في هذه الحالة ,فقد ُ وبعدها أُضيك لها الواحد.
العمليات الحسابية بين المصفوفات ال تعتبااار العملياااات الحساااابية باااين المصااافوفات بسااايطة تماماااا ً مثااال العملياااات الحساااابية المجاااراة باااين المصفوفات واألعداد المفردة .وبشكل أوض ,فالعمليات الحسابية المجراة بين مصافوفات مختلفاة األبعااد والحجوم تعد عمليات صعبة التحديد ,وتعد العمليات الحسابية على المصفوفات متساوية األبعاد مان جماع وطر وضرب وقسمة من العمليات األساسية في لغة MATLABواليك األمثلة التالية: إعادة استخدام المصفوفة السابقة %
>> g =g
1 2 3 4 5 6 7 8 9 10 11 12 28
البرمجة بلغة MATLAB
]>> h = [1 1 1 1 ; 2 2 2 2 ; 3 3 3 3 =h 1 1 1 1 2 2 2 2 3 3 3 3 >> g + h = ans 2 3 4
5
7
8 9 10
12 13 14 15 >> ans – h = ans 3 4
1 2
7
5 6
8
9 10 11 12 >> 2 * g – h = ans 3 5 7
1
8 10 12 14 15 17 19 21 )>> 2 * (g – h = ans 2
0
4 6
8 10 12
6
12 14 16 18 الحظ أيضا ً بأن العمليات الحساابية باين المصافوفات تعتماد نفاس تسلسال أسابقية العملياات المعتماد عناد إجراء العمليات الحسابية على األعداد المفردة ,ويمكن أيضاا ً اساتخدام األقاواس لكسار تلاك األولوياة .كماا 29
البرمجة بلغة MATLAB
ويمكن ضرب كل عنصر بالعنصر المناظر لاه مان المصافوفة األخارى أو قسامته شارط إن تُسابن إشاارة الضرب أو القسمة بنقطة كما في الشكل: >> g .* h = ans 3
4
1
2
10 12 14 16 27 30 33 36 ولقد قمنا هنا بضرب المصفوفة gبالمصفوفة hعنصر بعنصر عبر استخدام إشارة الضارب المسابوقة بنقطة. مالحظة :يجعل وجود النقطاة أماام إشاارة الضارب القياساية برناامج MATLABيضارب المصافوفتين عنصرا بعنصر ,بينما تخبر إشارة الضرب لوحدها البرنامج بان يقوم بضرب مصفوفات عادية. >> g * h Error الن عدد األسطر للمصفوفة g
عدد األعمدة للمصفوفة h
كما إن قسمة مصفوفتين عنصرا ً بعنصر ممكناة عان طريان كتاباة إشاارة القسامة مسابوقة بنقطاة كماا فاي المثال التالي: >> g ./ h = ans 4.0000
2.0000 3.0000
1.0000
4.0000
3.0000 3.5000
2.5000
4.0000
3.3333 3.6667
3.0000
مالحظااة :إذا ساابقت إحاادى إشااارة القساامة بنقطااة)( .عناادها ساايقوم برنااامج
MATLABبتقساايم
المصفوفتين عنصرا بعنصر .أما إذا كانت القسمة بدون نقطة ,فاننا ستحدد قسمة مصفوفات عادية. >> g .^ 2 = ans 16 64 30
9
4
1
25 36 49
البرمجة بلغة MATLAB
81 100 121 144 ولقد وجدنا هنا مربع كل عنصر من عناصر المصفوفة .g
المصفوفات القياسية يم ّكنااك برنااامج MATLABماان إنشاااء مصاافوفات قياسااية ,وذلااك لتمتااع تلااك المصاافوفات بخااواص وميااازات خاصاااة ,وتتضااامن أيضاااا ً المصااافوفات التاااي جمياااع عناصااارها صااافرية أو مسااااوية للواحاااد, ومصفوفات األعداد العشوائية والمصفوفات القطرية والمصفوفات التي عناصرها أعداد ثابتة. (مصفوفة واحديه)
)>> ones (3 = ans 1 1 1 1 1 1 1 1 1
(مصفوفة صفرية)
)>> zeros (2, 4
األعمدة
األسطر
= ans
0 0 0 0 0 0 0 0 (تحديد أبعاد مصفوفة)
)>> size (g = ans 3 4 ))>> ones (size (g = ans 1 1 1 1 1 1 1 1 1 1 1 1
مالحظة :عندما يتباع اسام المصافوفة القياساية بارقم مفارد مثال ) ones (nأو ) zeros (nفاأن برناامج MATLABينشىء مصفوفات مربعة n nتحتوي على أصفارا أو واحديه على الترتيب. (مصفوفة الوحدة) 31
)>> eye (4
MATLAB البرمجة بلغة
ans = 1
0 0 0
0
1 0 0
0
0 1 0
0
0 0 1 )(مصفوفة عشوائية
>> rand (3)
ans = 0.9501
0.4860
0.4565
0.2311
0.8913
0.0185
0.6068
0.7621
0.8214
>> rand (1, 5) ans = 0.4447
0.6154
0.7919
0.9218
0.7382 :مثال
>> d = pi; >> d * ones (3, 4) ans = 3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
>> d + zeros (3, 4) ans = 3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
>> repmat (d, 3, 4)
(3 4 باألبعادd (تكرار القيمة 32
البرمجة بلغة MATLAB
= ans 3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
3.1416
مالحظة :يمكن ان تكون dمصفوفة فتكون حينئذ تكرر مصفوفات وليس قيم.
التعامل مع المصفوفة لقد امتلك برنامج MATLABالعديد من الطرق للتعامل مع المصفوفات ,وكانت هاذه الخاصاية هاي أهم مميزات البرنامج ,فما إن تُحدّد المصفوفة حتاى يازودك البرناامج باأقوى طارق اإلدخاال ,التوساعة أو إعادة ترتيب بع
أجزاء المصفوفة عبر استعمال تعابير أو تعليمات محددة وممتعة ,وتعتبر معرفاة هاذه
التعليمات مفتا االستعمال الفعال لبرنامج .MATLABولشار التعامال ماع المصافوفات نأخاذ األمثلاة التالية: ]>> A = [1 2 3; 4 5 6; 7 8 9 =A 1 2 3 4 5 6 7 8 9 >> A (3, 3) = 0 =A جعل العنصر في الموقع ) (3, 3صفراً.
1 2 3 4 5 6 7 8 0 >> A (2, 6) = 1 =A
جعل العنصر في الموقع ) (2, 6تكون 1وبما ان المصفوفة ِ Aال حسب الضرورة تمتلك ستة أعمدة ,لذلك سيقوم البرنامج بتوسيعها 33 ويضع بقي العناصر صفرا ً وتكون مستطيلة.
1 2 3 0 0 0
البرمجة بلغة MATLAB
4 5 6 0 0 1 7 8 0 0 0 0 >> A (:, 4) = 4 =A 1 2 3 4 0 0
جعل جميع عناصر العمود الرابع تكون 4
4 5 6 4 0 1 7 8 0 4 0 0 ]>> A (:, 4) = [4; 4; 4 =A 1 2 3 4 0 0
جعل جميع عناصر العمود الرابع تكون 4
4 5 6 4 0 1 7 8 0 4 0 0 ]>> A (:, 4) = [4 4 4
بسبب عدم وجود فارزة منقوطة
Error
مثال: ]>> B = [7 8 9; 4 5 6; 1 2 3 =B 7 8 9 4 5 6 1 2 3 ]>> A = [1 2 3; 4 5 6; 7 8 9 =A 1 2 3 4 5 6 7 8 9 ])]>> C = [A B(:, [1 3 =C 34
البرمجة بلغة MATLAB
حصلنا على المصفوفة Cعبر توسيع المصفوفة Aباضافة
1 2 3 7 9
العمودين األول والثالث من المصفوفة .B
4 5 6 4 6 7 8 9 1 3 )>> B = A (1: 2, 2: 3 =B 2 3 5 6
مثال :تشكيل المصفوفة Bبجعل المصفوفة Aكمصفوفة عمود واخذ أعمدتها عمود بعد عمود. )>> B = A (: =B 1 4 7 2 5 8 3 6 9 مثال: ;]>> B = [1 2 3; 4 5 6; 7 8 9 )>> B = reshape (A, 1, 9 =B 1 4 7 2 5 8 3 6 9 ;)]>> B = reshape (A, [1 9 =B 1 4 7 2 5 8 3 6 9 35
البرمجة بلغة MATLAB
في المثال أعاله إيعاز تحويل أبعاد المصفوفة الثنائية 3*3إلى مصفوفة أحادية 1*9 مثال: >> A = B =A 1 2 3 4 5 6 7 8 9 ] [ = )>> B (:, 2 =B
تمت إعادة صياغة المصفوفة Bعبر حذك كل اسطر العمود الثاني من المصفوفة Bاألصلية ,وعندما تضع أي عنصر مساويا ً للمصفوفة الفارغة ] [,
1 3
فهذا يعني انك تريد حذفها من المصفوفة وتقليصها لتحافظ على العناصر المتبقية
4 6
بعد الحذك. مثال :إيجاد منقول (مدور) المصفوفة وإعادة تشكيلها بالتعليمة
7 9 .reshape '>> C = B =C 1 4 7 3 6 9 )>> reshape (B, 2, 3 = ans 1 7 6 4 3 9
مالحظااة :تعماال تعليمااة reshapeعمااود بعااد عمااود وللحصااول علااى سااطر بعااد سااطر نعماال الماادور ).(transport مثال :هنا حذفنا السطر الثاني في المصفوفة .C ] [ = )>> C (2, : =C 1 4 7 36
البرمجة بلغة MATLAB
مثال :استبدلنا عناصر السطر الثاني من المصفوفة Aبعناصر .C >> A (2, :) = C =A 3
1 2
7
1 4
9
7 8
مثال: >> x = -3: 3 =x -3 -2 -1 0 1 2 3 هناااك المصاافوفات المنطقيااة الناتجااة عاان العمليااات المنطقيااة .كمااا يمكاان أيض اا ً اسااتخدام المصاافوفات المنطقية إذا كان حجمها مساويا لحجم المصافوفات المعنوناة ,وياتم فاي هاذه الحالاة اإلبقااء علاى العناصار ذات القيمااة ) (1أي trueوهااي العناصاار المحققااة للشاارط بينمااا يتجاهاال العناصاار ) (0أي falseوهااي العناصر غير المحققة الشرط .ولنأخذ المثال التالي: >> abs (x) > 1 = ans 1 1 0 0 0 1 1 )>> y = x (abs (x) > 1 هنا تم إنشاء المصفوفة yمن تلك العناصر من المصفوفة xالتي قيمتها اكبر من الواحد. =y -3 -2 2 3 ويمكن العمل مع المصفوفات الثنائية المنطقية كما عملنا مع األحادية المنطقية ,كما في المثال التالي: ]>> B = [5 -3; 2 -4 =B 5 -3 2 -4 >> x = abs (B) > 2 37
البرمجة بلغة MATLAB
=x
1 1 0 1 )>> y = B (x =y 5 -3 -4
ترتيب المصفوفة عندما تعطى متجه من البيانات فان أهم عملياة يمكان إن نحتاجهاا وتاود تطبيقهاا هاي الترتياب ,ويانمن االيعاز sortعملية الترتيب في لغة ,MATLABكما هو واض في المثال التالي: (إيعاز ترتيب األرقام بصورة عشوائية)
)>> x = randperm (8 =x 7 5 2 1 3 6 4 8 )>> [y, indx] = sort (x المواقع القديمة الترتيب الجديد =y 1 2 3 4 5 6 7 8 = indx 1 8
4 3 5 7 2 6
وعندما تكون المصفوفة ثنائية البعد فان عملية الترتيب تتم بشكل مختلك وكما يلي: (عمود بعد عمود) ])>> A = [randperm (6); randperm (6); randperm (6); randperm (6
38
البرمجة بلغة MATLAB
=A 1 2 5 6 4 3 4 2 6 5 3 3 2 3 6 1 4 5 3 5 1 2 4 6 )>> [As, idx] = sort (A = As 1 2 1 1 3 1 2 2 5 2 4 3 3 3 6 5 4 5 4 5 6 6 4 6 = idx 1 1 4 3 2 2 3 2 1 4 1 1 4 3 2 2 3 3 2 4 3 1 4 4
البحث عن مصفوفة جزئية من المفيد في بع
األحياان إن تعارك موقاع أو دليال العناصار التاي تحقان شارطا معيناا ,والموجاودة
ضمن مصفوفة معينة .يقوم برنامج MATLABبتحقين هذه الغاية عبر االيعاز ,findوالذي يعياد لاك دليل أو موقع العنصر الذي تكون نتيجة تحقيقه لشرط ما ,trueواليك المثال التالي: >> x = -3: 3 =x -3 -2 -1 0 1 2 3 )>> k = find (abs (x) > 1 (الموقع)
=k
1 2 6 7 39
البرمجة بلغة MATLAB
)>> y = x (k =y -3 -2 2 3 )>> y = x (abs (x) > 1 =y -3 -2 2 3 ويستطيع االيعاز findأن يعمل في المصفوفات الثنائية البعد أيضا (عمود بعد عمود) ,فمثال: ]>> A = [1 2 3; 4 5 6; 7 8 9 =A 1 2 3 4 5 6 7 8 9 )>> [i, j] = find (A > 6 =i 3 3 3 =j 1 2 3 مالحظة :االيعاز diagيوجد عناصر القطر الرئيسي للمصفوفة. 8 9 9 8 9 9 5 8 6 8 9 9
7 7 A= 4 7
)>> diag (A 40
البرمجة بلغة MATLAB
= ans 7 8 8 9 مالحظة: ياوفر برناامج MATLABالادالتين min , maxالاذين يوجادان اكبار واصاغر عنصار فاي المصافوفة ومواقعهما. في حالة المصفوفة األحادية: )>> v = rand (1, 6 =v 0.3046 0.1897 0.1934 0.6822 0.3028 0.5417 )>> max (v = ans 0.6822 )>> [mx, i] = max (v = mx 0.6822 =i 4 )>> min (v = ans 0.1897 )>> [mn, j] = min (v = mn 0.1897 =j 41
البرمجة بلغة MATLAB
2 في حالة كون المصفوفة ثنائية البعد: )>> A = rand (4, 6 =A 0.1509 0.8537 0.8216 0.3420 0.7271 0.3704 0.6979 0.5936 0.6449 0.2897 0.3093 0.7027 0.3784 0.4966 0.8180 0.3412 0.8385 0.5466 0.8600 0.8998 0.6602 0.5341 0.5681 0.4449 )>> [mx, r] = max (A = mx 0.8600 0.8998 0.8216 0.5341 0.8385 0.7027 =r 4 4 1 4 3 2 مالحظة: (اكبر عنصر لكل سطر)
;)'>> max (A )>> [mn, r] = min (A = mn
0.1509 0.4966 0.6449 0.2897 0.3093 0.3704 =r 1 3 2 2 2 1 مالحظة: (اصغر عنصر لكل سطر)
;)'>> min (A
>>مالحظااة :اكباار عنصاار فااي مصاافوفة ثنائيااة البعااد. )mmx = max (mx = mmx 0.8998 ))>> [mmx, i] = max (A (: 42
البرمجة بلغة MATLAB
= mmx 0.8998 =i 8 مالحظة :توجد طريقة أخرى: ;))>> z = max (max (A ;))>> z = min (min (A مالحظة :نفس الشيء لحساب المجموع .sum ;))>> z = sum (sum (A
توابع التعامل مع المصفوفة يزودك برنامج ,MATLABباإلضافة إلى عنونة المصفوفات والمقدرة على التعامل مع المصفوفات التي شرحناها سابقا ً ,بعمليات التعامل مع المصفوفات ,وهي سهلة التطبين مثل: ]>> A = [1 2 3; 4 5 6; 7 8 9 =A 1 2 3 4 5 6 7 8 9 قلب المصفوفة باتجاه up-down
)>> flipud (A = ans 7 8 9 4 5 6 1 2 3
قلب المصفوفة باتجاه left-right
)>> fliplr (A = ans 3 2 1 6 5 4 9 8 7
43
البرمجة بلغة MATLAB
استخالص الجزء المثلية العليا )(upper
)>> triu (A = ans 1 2 3 0 5 6 0 0 9
استخالص الجزء المثلية السفلى )(lower
)>> tril (A = ans 1 0 0 4 5 0 7 8 9
حساب محدد المصفوفة (قيمة)
;)>> g = det (A
حساب معكوس المصفوفة (مصفوفة)
;)>> h = inv (A
حساب القيم الذاتية للمصفوفة حساب مصفوفة الوحدة
;)>> i = eig (A )>> j = eye (3 =j 1 0 0 0 1 0 0 0 1
حساب مجموع عناصر القطر الرئيسي
;)>> trace (A
حجم المصفوفة إذا أردت أن تعرك حجم أو بعد مصفوفة أحادية أو ثنائية أو ثالثية البعد غير معاروفين وكنات بحاجاة لحجمها إلجراء بع
العمليات الرياضية ,فان برنامج MATLABيمكنك مان خاالل االيعااز length
و sizeو numelواليك األمثلة التالية: ]>> A = [1 2 3 4; 5 6 7 8 =A 1 2 3 4 5 6 7 8 44
البرمجة بلغة MATLAB
)>> S = size (A =S 2 4 يعبر العنصر األول عن عدد األسطر ) (2بينما يعطي العنصر الثاني عدد األعمدة ).(4 )>> [r, c] = size (A =r 2 =c 4 )>> r = size (A, 1 =r 2 )>> c = size (A, 2 =c 4 يعيد االيعاز numelالعدد الكلي لعناصر مصفوفة فمثالً: )>> numel (A = ans 8 بينما يعيد االيعاز lengthعدد العناصر الموجودة ضمن البعد األطول للمصفوفة ,كما يلي: )>> length (A = ans 4 >> B = -3: 3 =B -3 -2 -1 0 1 2 3 )>> length (B 45
البرمجة بلغة MATLAB
= ans 7 Aمصفوفة ثنائية
))>> min (size (A = ans 2
مالحظة :طريقة توليد مصفوفة بالدمج. ;]>> x = [1 2; 3 4 ;]>> y = [x x .^ 2; x .^ 3 x .^ 4
المصفوفات متعددة اإلبعاد لقد شرحنا في الفصل السابن المصفوفات أحادياة وثنائياة األبعااد والعملياات التاي تجاري عليهاا .يادعم برنامج MATLABالمصفوفات متعددة األبعاد (أي (n-D arraysوذلك نفس االيعاازات وتقنياات العنونااة المطبقااة علااى المصاافوفات أحاديااة وثنائيااة البعااد .وبشااكل عااام ,ياارقم البعااد الثالااث عباار صافحات ) , (pagesولذلك تمتلك المصفوفات ثالثية البعد اسطرا وأعمدة وصافحات ,حياث تتاألك كال صافحة مان مصفوفة ثنائية البعد ذات اسطر وأعمدة ,ويجب أن تمتلك كل صفحة عددا متساويا من األسطر واألعمادة والعكس بالعكس في كل صفحة. ليس هناك حد لعدد األبعاد في المصفوفات ,ولكننا سنستخدم مصافوفات ثالثياة األبعااد فاي هاذا الفصال بسبب سهولة تخيلها وإظهارها.
تركيب المصفوفة يمكن إنشاء المصفوفة المتعددة األبعاد بطرق مختلفة ,واليك بعضها: )>> A = zeros (4, 3, 2 = )A (:, :, 1 0 0 0 0 0 0 0 0 0 0 0 0 = )A (:, :, 2 46
البرمجة بلغة MATLAB
0 0 0 0 0 0 0 0 0 0 0 0 تتألك هذه المصفوفة الصفرية من أربعة اسطر وثالثة أعمدة وصفحتين ,ولقد ظهرت الصفحة األولى ثام الصفحة الثانية. مثال: ;)>> B (:, :, 1) = zeros (2, 3 ;)>> B (:, :, 2) = ones (2, 3 ;>> B (:, :, 3) = 4 >> B = )B (:, :, 1 0 0 0 0 0 0 = )B (:, :, 2 1 1 1 1 1 1 = )B (:, :, 3 4 4 4 4 4 4 يمكن استخدام االيعاز reshapeلتحويل المصفوفة من مصفوفة ثنائية األبعاد إلى مصفوفة ثالثية األبعاد وكاالتي: ])>> C = [B (:, :, 1), B (:, :, 2), B (:, :, 3 =C 0 0 0 1 1 1 4 4 4 0 0 0 1 1 1 4 4 4 )>> reshape (C, 2, 3, 3 47
البرمجة بلغة MATLAB
= )ans (:, :, 1 0 0 0 0 0 0 = )ans (:, :, 2 1 1 1 1 1 1 = )ans (:, :, 3 4 4 4 4 4 4
حجم المصفوفة االيعاز sizeيعيد بعد المصفوفة وفن كل أبعادها كما شرحنا سابقاً. )>> [r, c, p] = size (C =r 2 =c 3 =p 3 وإذا لم نعرك عدد إبعاد المصفوفة أو كانت ابعادها متغيرة ,عندما نستطيع استخدام االيعاز ndimsكما يلي: )>> ndims (C = ans 3 إيجاد عدد عناصر المصفوفة
)>> numel (C = ans 18
إيجاد طول اكبر بعد بالمصفوفة 48
))>> length (size (C
البرمجة بلغة MATLAB
= ans 3
مصفوفة الخاليا Cell Arrays تعتبر مصفوفات الخاليا مصفوفات في لغة MATLABتكون عناصرها عبارة عن خاليا ,وتتضمن كل خلية نوعا ً من البيانات قد تكاون مصافوفات عددياة أو رمزياة أو كائناات بسايطة أو مصافوفات خالياا أخرى .فمثالً قد تحوي خلية من مصفوفة الخلية مصفوفة عددية وتحوي الخلية األخرى مصفوفة رمزية, بينما تحوي الثالثة على أعداد عقدية (يسم باساتخدام مصافوفات باأنواع بيانياة مختلفاة (غيار متجانساة)) كما ويمكن إنشاء مصفوفات الخاليا بأي بعاد كاان كماا هاي الحاال ماع المصافوفات العددياة ,ولكان معظام مصفوفات الخاليا تكون عبارة عن مصفوفات أحادية البعد. تنشأ مصفوفات الخاليا عبر استخدام تعابير اإلسناد أو عبر إعادة تقسايم المصافوفة باإليعااز ,cellثام نقوم باسناد البيانات إلى الخاليا. هناك طريقتان مختلفتان للوصول إلى الخاليا .وإذا أردت استخدام رموز مصفوفة قياساية للداللاة علاى المصفوفة ,يجب عليك أن تحيط الخلية بأقواس مجموعة } { ,إذ إن برنامج
MATLABيستخدم
هذه األقواس لتعريك مصفوفات الخاليا ,واليك األمثلة التالية: ;}]>> A (1, 1) = {[1 2 3; 4 5 6; 7 8 9 ;}>> A (1, 2) = {2 + 3i ;}'>> A (2, 1) = {'Ali Ahmed ;}>> A (2, 2) = {12: -2: 0 >> A =A ][2.0000 + 3.0000i
49
][3 3 double
البرمجة بلغة MATLAB
][1 7 double
''Ali Ahmed
الحظ إن برناامج MATLABيظهار المصافوفة كمصافوفة خلياة بعاداها 2 2ولكان ذلاك ال يظهار محتويات الخلية ,وإنما يظهر البرنامج محتويات الخلية بشاكل أساساي إذا لام تأخاذ هاذه المحتوياات حجماا ً كبيراً ,كما ويوصك محتويات الخلية إذا أخذت حجما ً معقوالً .إن وجاود أقاواس مجموعاات علاى الجاناب
األيمن من المساواة يدل على إن المشار إليه هاو خلياة ولايس قيماا عددياة وهاذا ماا يسامى بفهرساة الخلياة ) ,(cell indexingوسينشئ التعابير التالية مصفوفة الخلية نفسها. مالحظة: يخبر كال التعبيرين }A (i, j) = {x
و A {i, j} = xبرنامج MATLABبأن يضع المتغير
xفي العنصر ) (i, jمن مصفوفة الخلية .A
يادعى التعبيار ) A (i, jبفهرساة الخلياة ) , (cell indexingبينماا يادعى التعبيار } A {i, jبعنوناة المحتوى ) (content addressingأي تادل أقاواس المجموعاة } { علاى محتاوى الخلياة ,بينماا تعارك األقواس العادية ( ) الخاليا دون النظر إلى محتواها. مثال: }>> y = {1, 'hello', 1 > 5 =y ][1] 'hello' [0 }>> y {1 = ans 1 }>> y {2 = ans hello }>> y {3 = ans 0 مثال: 50
MATLAB البرمجة بلغة
>> ce = {[1 2 3; 5 6 7], 'yes', 3 > 2}; >> ce {1}(2, 2) ans = 6 :مثال >> x = rand (3, 3); >> y = rand (3, 3); >> z = rand (3, 3); >> w {1} = x; >> w {2} = y; >> w {3} = z; >> w ans = [3 3 double]
[3 3 double]
[3 3 double] :مثال
>> x {1} = rand (3, 3); >> x {2} = rand (3, 3); >> x {3} = rand (3, 3); . . . . . >> x {9} = rand (3, 3); >> x {1} ans = 0.8462 0.6721 0.6813 51
البرمجة بلغة MATLAB
0.5252 0.8381 0.3795 0.2026 0.0196 0.8318 العنصر الموجود في السطر الثاني والعمود الثاني في مصفوفة (الخلية) األولى (>> x {1} (2, 2 = ans 0.8381 مثال :برنامج لجمع المصفوفات التسعة في المثال السابن في مصفوفة واحدة. ;)>> L = length (x ;>> sum1 = 0 >> for i = 1: L ;}b = x {i ;sum1 = sum1 + b ;end يجبر اإليعاز celldispبرنامج MATLABعلى إظهار محتوى الخاليا باالنموذج العاادي ,والياك المثال التالي الذي يوض ذلك: )>> celldisp (A = )A (1, 1 1 2 3 4 5 6 7 8 9 = )A (2, 1 Ali Ahmed = )A (1, 2 2.0000 + 3.0000i = )A (2, 2 12 10 8 6 4 2 0 كما ي ُُِ ظ هر البرنامج محتوى الخلية المفردة عبر طلب محتوى الخلية باستخدام عنونة المحتوى ,وهذا 52
البرمجة بلغة MATLAB
يتم بشكل مختلك عن فهرسة الخلية التي تعّرك الخلية فقط دون الدخول إلى محتوى الخلية ,فمثال: }>> A {2, 2 = ans 12 10 8 6 4 2 0 )>> A (2, 2 = ans ][1 7 double )>> A (1, : = ans ][2.0000 + 3.0000i
][3 3 double
الحظ بأن البرنامج استخدم لجميع الخاليا السابقة االسم ,ansوذلك الن خاليا البيانات المخزوناة لايس لها اسم محدد. لقد استخدمنا سابقا ًًُ األقواس المربعة إلنشاء المصفوفات العددية ,وتعمل أقواس المجموعة نفس العمل بالنسبة للخاليا ,وتفصل األعمدة بفواصل بينما تفصل األسطر بفواصل منقوطة .واليك المثال التالي: }2], 'John Smith'; 2 + 3i, 5
>> B = {[1 =B
''John Smith ][5
][1 2 double ][2.0000 + 3.0000i
من المألوك عند استخدام المصافوفات العددياة أن ت ُماو المصافوفة بعناصار صافرية ثام ت ُماو مان جدياد بالبيانات الالزمة ,ويمكن استخدام نفس المنهج في مصفوفات الخالياا ,حياث ينشاأ االيعااز cellمصافوفة خلية ويملنها بمصفوفات عددية فارغة ] [ ولنأخذ المثال التالي: )>> C = cell (2, 3 =C ][ ][ ][ ][ ][ ][ ما إن يتم تعريك مصفوفة الخلية فأنة يمكن تعميم الخاليا عن طرين عنونة المحتوى وفهرسة الخاليا, كما يبينه المثال التالي: 53
البرمجة بلغة MATLAB
'>> C (1, 1) = 'The does n't work Error لقد استخدمنا هنا في الجانب األيسر دليل الخلية وبالتالي ,يجب أن يكون الطرك األيمن خلياة وهاذا ماا سبب ظهور الخطأ ,وليس كوننا لم نُخط محتوياتها بأقواس مجموعة. }'>> C (1, 1) = {'The does n't work =C ] [ ] [ ''The does n't work ][ ][
][
}'>> C (2, 3) = {'This works too =C ][ ''This works too
][
''This does work
][
][
وبسبب وجود أقواس المجموعة فاي الجاناب األيسار مان العباارة األخيارة ,فاان برناامج MATLAB سيضع الخيط الرمزي في الخلياة المعنوناة .ويوجاد هناا مارة أخارى عنوناة محتاوى ,بينماا تعتبار العباارة األصلية مثاالً عن فهرسة المصفوفة.
التعامل مع مصفوفة الخلية يمكن أن نستخدم األقواس المربعة أيضا ً لضم مصفوفات الخاليا ضمن مصفوفات اكبر ,كما هو الحاال للمصفوفة العددية ,واليك المثال التالي: >> A =A ][2.0000 + 3.0000i
][3 3 double
][1 7 double
''Ali Ahmed
>> B =B
54
''John Smith
][1 2 double
][5
][2.0000 + 3.0000i
البرمجة بلغة MATLAB
(متساوية األبعاد)
]>> C = [A; B =C
][2.0000 + 3.0000i
][3 3 double
][1 7 double
''Ali Ahmed
''John Smith
][1 2 double
][5
][2.0000 + 3.0000i
يمكن تحديد خاليا جزئية إلنشاء خاليا جديدة عبر استخدام تقنيات مناسابة لعنوناة مصافوفة الخلياة كماا في المثال التالي: )>> D = C ([1 3], : =D ][2.0000 + 3.0000i
][3 3 double
''John Smith
][1 2 double
ويمكن حذك سطر مصفوفة الخلية عبر استخدام الخلية الفارغة. ] [ = )>> C (3, : =C ][2.0000 + 3.0000i
][3 3 double
][1 7 double
''Ali Ahmed
][5
][2.0000 + 3.0000i
ويستخدم االيعاز reshapeلتغير مواضع الخاليا ,ولكنه ال يستطيع إضافة أو حذك الخاليا وليبان ذلك, نأخذ المثال التالي: ;)>> x = cells (3, 4 )>> size (x = ans 3 4 ;)>> y = reshape (x, 6, 2 )>> size (y = ans 55
البرمجة بلغة MATLAB
2
6
أي إن االيعاز reshapeيعيد تشكيل أية مصفوفة بدون تغير نوعها ,وكذلك يعيد االيعاز sizeحجام أي نوع من المصفوفات. كذلك يعيد االيعاز repmatبالتعامال ماع مصافوفات الخالياا حياث يعمال علاى تكرارهاا وفقاا ً للتكارار المطلوب. مثال: >> y =y ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ )>> z = repmat (y, 1, 3 =z ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][
56
البرمجة بلغة MATLAB
السالسل الرمزية تكمن قوة برنامج MATLABالحقيقية في القدرة على التعامل مع األرقاام ,ولكناه يحتااج أحياناا ً إلاى التعامل مع النصوص كما في حالة وضع العناوين وأسماء المحاور على الرسومات.
تركيب السلسة الرمزية تتألك السالسل الرمزية في لغة MATLABمن مصافوفات عددياة خاصاة مان قايم ASCIIوالتاي تعيد أظهار السلسة الرمزية ,فمثالً: '?>> t = 'How about this character string =t ?How about this character string )>> size (t = ans 1 32 إيعاز عر
أسماء المتغيرات وحجومها وعدد بياناتها وصنفها
>> whos
Class
Bytes
Size
Name
double array
16
1 2
ans
character array
64
1 32
t
Grand total is 34 elements using 80 bytes إن السالسل الرمزية ببسااطة هاي ناص محاطاة بفاصالة علوياة مفاردة .ويعتبار كال حارك فاي السلساة عنصرا ً من مصفوفة ,والتي نحتاج إلى بايتين لتخزين كل حرك ,ونختلك بذلك عن 8بايات المخصصاة لكل عنصر مان عناصار المصافوفة العددياة أو مضااعفة الدقاة .ولرنياة التمثيال ASCIIلسلسالة رمزياة 57
البرمجة بلغة MATLAB
نحتاج فقط إلجراء بع
العمليات الرياضية على السلسلة أو استخدام االيعاز ,doubleوكما فاي المثاال
التالي: )>> u = double (t =u Columns 1 through 12 72 111 119 32 97 98 111 117 116 32 116 104 Columns 13 through 24 116 101 114
99
97
99 104 97 114
105 115 32
Columns 25 through 32 32 115 116 114 105 110 103 63 )>> char (u = ans ?How about this character string ))>> char (u (1 = ans H وبما إن السالسل هي مصفوفات ,لذلك يمكن التعامل معها بكل أدوات التعامل مع المصفوفات المتوفرة في لغة ,MATLABفمثالً: )>> u = t (16: 24 =u character وتعنون السالسل تماماا ً كماا تعناون المصافوفات ,وتحاوي العناصار مان 16إلاى 24فاي المثاال أعااله الكلمة character )>> u = t (24: -1: 16 =u retcarahc وهنا تمت تهجئة الكلمة characterبشكل عكسي. 58
البرمجة بلغة MATLAB
')>> u = t (16: 24 =u c h
a r a c t e r وتم هنا تحويل كلمة characterإلى مصفوفة عمود عبر عملية مدور(منقول). يمكن دمج المصفوفات الرمزية وكاالتي: ;' >> u = 'Hameed ;'>> v = 'Aiad ]>> w = [u v =w Hameed Aiad ويسم لنا االيعاز dispإظهار السلسلة بدون طباعة اسم المتغير كما في المثال التالي: )>> disp (u Hameed ويمكن أن تتملك السالسل الرمزية (كما في باقي المصفوفات) عدة اساطر ,ولكان يجاب أن يحاوي كال سطر عددا ً متساويا ً من األعمدة ,لذلك يجب استخدام الفراغات لجعل طول كل األساطر متسااوية كماا فاي المثال التالي: ' >> v = ['character strings having more than ''one row must have the same number 59
البرمجة بلغة MATLAB
!'of columns just like arrays
]'
=v character string having more than one row must have the same number !of columns just like array وينشئ االيعاز charمصفوفة نصية متعددة األسطر انطالقاا ً مان سالسال مساتقلة مختلفاة الطاول ,كماا في المثال التالي: )'>> legends = char ('Wilt', 'Russel', 'Kareem', 'Bird', 'Magic', 'Jordan = legends Wilt Russel Kareem Bird Magic Jordan )>> size (legends = ans 6
6
تحويل األعداد إلى سالسل رمزية وبالعكس قد نرغب في العديد من الحاالت بتحويل النتائج العددية إلى سالسل رمزية واستخراج البيانات العددياة ماان السالساال الرمزيااة .ياازودك برنااامج MATLABباإليعاااز num2strو int2strو fprintf وغيرها لتحويل النتائج العددية إلى سالسل رمزية ,واليك األمثلة التالية على التحويل: )>> int2str (35 = ans 35 )>> class (ans = ans 60
MATLAB البرمجة بلغة
char >> num2str (3.5) ans = 3.5 >> class (ans) ans = char >> fprintf ('% 4.3f\n', sqrt (2)) 1.414 >> size (fprintf ('% 4.3f\n' , sqrt (2)) ans = 1
1 :مثال
>> radius = sqrt (2); >> area = pi * radius ^ 2; >> fprintf ('A circle of radius% 6.4f has an area of % 6.4f', radius, area) A circle of radius 1.4142 has an area of 6.2832 .area والمتغيرradius ست خانات إلظهار المتغير% 6.4f تحدد هنا الصيغة :)مثال (طريقة أخرى >> S = ['A circle of radius ', (num2str (radius)), 'has an of ', (num2str (area)) '.'] S= A circle of radius 1.4121 has an area of 6.2832.
تحويل السالسل الرمزية إلى عددية >> S = str2num ('3.5') ▼ فراغات
S= 3.5 >> t = ['3.5▼'
'sqrt(2)' ;'▼1.5' '▼▼▼▼9.5'] 61
البرمجة بلغة MATLAB
يجب إن تكون أطوال األسطر متساوية =t )3.5 sqrt(2
مصفوفة رمزية
9.5
1.5
)>> str2num (t = ans 3.5000 1.4142
مصفوفة عددية يمكن أن تكون أطوال األسطر غير متساوي
1.5000 9.5000 ']>> t = '[3.5▼sqrt(2);▼1.5▼9.5 =t
مصفوفة رمزية
][3.5▼sqrt(2);▼1.5▼9.5 )>> str2num (t = ans 3.5000 1.4142 1.5000 9.5000
يعيد االيعاز findstrأدلة البداية لسلسلة رمزية موجودة ضمن سلسلة أخرى. ;'>> b = 'Peter Piper picked a peck of pickled peppers )'▼' >> findstr (b, = ans 6 12 1 9 21 26 29 37 )'>> findstr (b, 'p حرك صغير
= ans
9 13 22 30 38 40 41 )'>> findstr (b, 'cow = ans ][
مصفوفة الخاليا للسالسل الرمزية 62
البرمجة بلغة MATLAB
يبدو شرط تساوي عدد األعمدة فاي جمياع اساطر المصافوفات النصاية متعبااً ,خاصاة إذا اختلاك عادد الفراغات المضافة من سطر آلخر ,ويمكن حل هذه المشكلة عبر استخدام مصفوفات الخاليا ,حيث يمكننا وضع كل أنواع البيانات ضمن مصفوفة الخاليا ,ويتجلى االستخدام األكبر لمصفوفة الخاليا مع السالسال الرمزية. تعتبر مصفوفة الخلية ببساطة نوعا ً من البيانات التي تسم للمستخدم بتسمية مجموعة من البيانات ذات األنواع والحجوم المختلفة ,وذلك كما يبينه المثال التالي: }'?>> C = {'How'; 'about'; 'this for a'; 'cell array of strings =C ''How ''about ''this for a '?'cell array of strings )>> size (C = ans 1
4
تستخدم أقواس المجموعة } { إلنشاء مصفوفة الخاليا ,وذلك استخدمناها في حصر السلسلة الرمزية بأكملها ,وتملك المصفوفة Cفي هذا المثال أربعة اسطر وعمودا ً واحداً ,ويحوي كل عنصر من مصفوفة الخلية سلسلة رمزية مختلفة الطول. وتعنون مصفوفات الخاليا كما تعنون بقية المصفوفات ,وذلك كما يلي: )>> C (2: 3 = ans ''about ''this for a )]>> C ([4 3 2 1 = ans '?'cell array of strings ''this for a 63
البرمجة بلغة MATLAB
''about ''How )>> C (1 = ans ''How ))>> size (C (1 = ans 1
1
ما زالت النتائج حتى أالن عبارة عن مصفوفات خاليا ,وذلك الن التعبير ) C (indicesيعنون الخاليا المعطاااة ولكناه ال يحاادد محتااوى هااذه الخاليااا .والسااترجاع محتويااات خليااة جزئيااة محا ّددة عليااك اسااتخدام أقواس مجموعة كما في المثال التالي: }>> S = C {4 =S ?cell array of strings )>> size (s = ans 1 22 كما ويمكن عنونة جزء من محتويات مصفوفة الخلية الجزئية كما يلي: )>> C {4} (1: 10 = ans cell array يحول االيعاز charمحتويات مصفوفة الخلية إلى مصفوفة نصية مناسبة ,كما يبينه المثال التالي: )>> S = char (C =S How about this for a 64
MATLAB البرمجة بلغة
cell array of strings? >> size (S) ans = 4
22
: باجراء التحويل العكسي ويعيد صياغة السالسل الرمزية بشكل جيد كما يليcellstr ويقوم االيعاز >> cellstr (S) ans = 'How' 'about' 'this for a' 'cell array of strings?'
65
البرمجة بلغة MATLAB
جمل اإلدخال واإلخراج جمل اإلدخال هناك عدة صيغ لإلدخال باإلضافة إلى عملية التنسيب منها: input -1 مثال (:)1 )' >> x = input ('enter x: enter x: مثال ( :)2إدخال األعداد. ;)'n = input ('enter n: ;)'m = input ('enter m: for i = 1: n for j = 1: m ;result (i, j) = i ^ j ;end ;end مثال ( :)3إدخال أسماء رمزية. ;clc ;clear ;)'z = input ('enter name', 's 66
للداللة على إدخال string
البرمجة بلغة MATLAB
-2صيغة ثابتة لإلدخال (على شكل مربع حوار): مثال: ;}'prompt = {'enter x ;}'def = {'20 ;'dlgTitle = 'Input for my program عدد السطور المدخلة %
;lineNo = 1
;)answer = inputdlg (prompt, dlgTitle, lineNo, def تحويل stringإلى numفي حالة التعامل مع رقم %
;)}x = str2num (answer {1
القيمة األولى من مصفوفة الخاليا
جمل اإلخراج هناك عدة صيغ لإلخراج منها: disp -1 مثال (:)1 ;>> d = 15 ;)>> disp (d 15 مثال (:)2 ;'>> a = 'ali ;)>> disp (a ali مثال (:)3 67
البرمجة بلغة MATLAB
;>> sum = 9.8 ;)])>> disp (['sum = ', num2str (sum sum = 9.8 مثال (:)4 ;)'>> disp ('computer computer مالحظة (:)1 يجب أن يكون محتويات dispقيمة ذات نوع بياني واحد ضمن الجملة الواحدة (كال جملاة ناوع بيااني واحد). مالحظة (:)2 في حالة كون محتويات dispأكثر من قيمة ذات نوع بيانية مختلفاة ضامن الجملاة الواحادة (يجاب ان تجمع القيم في قوسين كبيرين ] [ (مثال (.)))3 msgbox -2 )'>> msgbox ('ok', 'result عنوان الصندوق الشيء المطلوب طباعته ( نوع بياني رمزي)
(fprintf )3 مثال (:)1 ;>> y = 1.2 ;>> x = 100.5 ;)>> fprintf ('variable x is % 6.3f\n', x 68
البرمجة بلغة MATLAB
;)>> fprintf ('variable y is % 6.3f\n', y variable x is 1.200 variable y is 100.500 وهذا يعني بأنه تم حجز 6مراتب منها 3مراتب بعد الفارزة العشرية. مثال (:)2 ;))>> fprintf ('% 8.3f\n', round (3.8 4.000 مالحظة (:)1 يمكن استخدام صيغ مختلفة للطباعة وكما يلي: رمز واحد تدوين عشري تدوين يائي تدوين النقطة الثابتة
%c %d %e %f
تدوين عشري
%i
تدوين ثماني
%o
تدوين رمزي
%s
تدوين سداسي عشر
%x
مالحظة (:)2 يمكن طباعة األعداد واألسماء والنتائج من خالل كتابة االيعازات بدون فارزة منقوطة وستظهر النتائج في نافذة األمر .Command Window
69
البرمجة بلغة MATLAB
الجمل الشرطية ياادعم برنااامج MATLABالعمليااات المنطقيااة والمقارنااة مثلمااا ياادعم العمليااات الرياضااية ,وتهاادك العملياااات والمعاااامالت المنطقياااة الحصاااول علاااى أجوباااة لوسااائلة التاااي يجااااب عنهاااا بصااا أو خطاااأ ).(True/False تعتبر لغاة MATLABفاي تعاملهاا ماع جمياع التعاابير المنطقياة وعملياات المقارناة إن أي عادد غيار صفري هو Trueويعتبر الصفر ,Falseكما ويكون إخراج جمياع التعاابير المنطقياة وعملياات المقارناة عبارة عن مصفوفات منطقية تحوي العدد واحد من اجل Trueوالعدد صفر من اجل .False وتعتبر المصفوفات المنطقية نوعا ًخاصا ً من المصفوفات العددية ,كما يمكن عنونة المصفوفة المنطقية بنفس طريقة عنونة باقي المصفوفات التي استخدمها سابقا ً ضمن التعابير العددية.
معامالت المقارنة (العوامل العالئقية) Relational Operators : تتضمن معامالت المقارنة كل اإلشارات المقارنة الشائعة والمدرجة في الجدول التالي: معامل المقارنة
الوصف
<
أصغر من
=<
أصغر أو يساوي
>
أكبر من
=>
أكبر أو يساوي
==
إشارة المساواة (لكي نميزها عن =)
=~
اشارة عدم المساواة 70
البرمجة بلغة MATLAB
يمكن استخدام معامالت المقارنة للمقارناة باين مصافوفتين لهاا نفاس الحجام ,أو للمقارناة باين مصافوفة وعدد مفرد وتتم هذه الحالة مقارنة كل عنصر من المصفوفة مع العدد المفارد ,وتكاون المصافوفة الناتجاة بنفس حجم المصفوفة التي تمت مقارنتها كما يبينه المثال التالي: مثال (:)1 ;>> a = 1; b = 5 >> x = a > b =x 0 >> A = 1: 9, B = 9 - A =A 1 2 3 4 5 6 7 8 9 =B 8 7 6 5 4 3 2 1 0 >> tf = A > 4 = tf 1
1
1
1
0 0 0 0 1
لقد أوجدنا العناصر من Aالتاي هاي أكبار مان ,4وتظهار االصافار فاي المصافوفة الناتجاة فاي مواقاع العناصر عندما ,A ≤ 4بينما يظهر الرقم 1عندما .A > 4 )>> tf = (A == B = tf 0 0 0 0 0 0 0 0 0 لقد تم هنا إيجاد عناصر Aالتي تساوي العناصر في المصفوفة .B مالحظة: الحظ بان اإلشارتين (=) و (==) تعنيان شيئا ً مختلفاً ,حيث يقوم (==) بمقارنة متغيرين وتعياد العادد واحااد إذا كانااا متساااويين وصاافرا ً إذا لاام يكوناا متساااويين ,بينمااا تسااتخدم (=) إلسااناد إخااراج العمليااة إلااى متغير. 71
البرمجة بلغة MATLAB
مثال ( :)1لتوليد مصفوفة أحادية منطقية عناصرها واحدات (في حالة اكبر من )thrواصفارا ً (في حالاة اصغر من أو تساوي .)thr ;]>> inddent = [10 17 22 0 7 3 2 ;>> thr = 7 )>> y = (indent > thr =y 0 0
1 1 0 0
1
مثال ( :)2لتوليد مصفوفة أحادية عناصرها نفس العناصر (في حالاة اكبار مان )thrواصافارا ً (فاي حالاة اصغر من أو تساوي .)thr )>> z = inddent .* (inddent > thr =z 22 0 0 0 0
10 17
المعامالت المنطقية (العوامل المنطقية) Logical Operators: تااوفر المعااامالت المنطقيااة طريقااة لاادمج أو نفااي تعااابير المقارنااة ,ويظهاار الجاادول التااالي المعااامالت المنطقية الموجودة في لغة :MATLAB
وسنقدم لك فيما يلي بع
المعامل المنطقي
الوصف
&
( andو)
|
( orأو)
~
( notنفي)
األمثلة على استخدام المعامالت المنطقية: ;>> a = 1 ;>> b = 5 >> x = a ~= b =x 1 )>> b = (1 == 1) & (2 ~= 3
72
البرمجة بلغة MATLAB
=b 1 )>> b = (1==1) | (2 ~= 3 =b 1 ))>> b = (1==1) & not ((2 ~= 3 =b 0
;>> A = 1: 9; B = 9 - A >> tf = A > 4 = tf 0 0 0 1 1 1 1 1
0
حيث قام بايجاد عناصر Aالتي قيمها اكبر من 4 )>> tf = ~ (A > 4 = tf 0 0 0 0 0
1 1 1 1
لقد قام البرنامج بقلب النتيجة السابقة ,وتعني استبدال مواقع االصفار والواحدات. )>> tf = (A > 2) & (A < 6 = tf 0 0 1 1 1 0 0 0 0 حيث تعيد هذه العبارة العدد واحد عندما يكون العنصر من Aاكبر من 2واقل من .6
أسبقية المعامل يقااوم برنااامج MATLABبايجاااد قيمااة تعبياار مسااتندا ً إلااى مجموعااة ماان القواعااد الناظمااة ألساابقية المعامل ,وتحسب المعامالت ذات األسبقية العليا قبل المعامالت ذات األسبقية الدنيا ,وتقيم المعامالت ذات
73
البرمجة بلغة MATLAB
األسبقية المتساوية من اليسار إلى اليمين .ويشر الجدول التالي قواعد أسبقية المعامل التي يعتدها برامج .MATLAB
المعامل
مستوى األسبقية
األقواس ( )
األعلى
المدور(') ,القوة (^).^ , إشارة النفي (~) الضرب ( * ,).* ,القسمة ()./ ,/ الجمع ( ) ,والطر ()- معامل النقطتين المتعامدتين (): أصغر من (<) ,واصغر أو يساوي(=<) ,اكبر من (>), اكبر من أو يساوي(=>) ,المساواة (==),عدم المساواة (=~) الجمع المنطقي(&) and المعامل المنطقي (|) or
األدنى
الصيغة if-else-end قد نحتاج إلى حساب مجموعة من أوامر استنادا ً إلى إخراج ناتج عن اختبار شرطي .وتنفذ هذه التعليمة في لغة MATLABعبر استخدام الصيغة if-else-endوكما يلي: if expression )(commands end
74
MATLAB البرمجة بلغة
إذا كاناااات قيمااااة التعبياااارend وif
) الواقعااااة بااااين العبااااارتينcommands( وسااااتنفذ األواماااار : واليك المثال التالي.true ( تكونexpression)
>> x = 10; >> if x == 10 disp ('ok') end; : كما يليif-else-end فتصب الصيغة,وإذا كان لدنيا خياران
if expression (commands evaluated if True) else (commands evaluated if False) end بينما تنفاذ,true القيمةexpression حيث ستنفذ المجموعة األولى من األوامر في حال امتلك التعبير .false القيمةexpression المجموعة الثانية إذا امتلك التعبير : الشكل التاليif-else-end فستأخذ التعبير,وإذا كانت هناك عدة حاالت if expression1 (commands evaluated if expression1 is true) elseif expression2 (commands evaluated if expression2 is true) elseif expression3 (commands evaluated if expression3 is true) elseif expression4 (commands evaluated if expression4 is true) . . . 75
MATLAB البرمجة بلغة
else (commands evaluated if no other expression is true) end :واليك األمثلة التالية :)1( مثال >> x = 10; >> if x == 10 msgbox ('ok', 'result'); :)2( مثال >> if x == 10 msgbox ('ok', 'result'); else msgbox ('no', 'result'); end; :)3( مثال >> x = 11; >> if x == 1 disp ('1'); elseif x == 2 disp ('2'); else disp ('3'); end; اإلخراج 3
switch-case الصيغة
76
البرمجة بلغة MATLAB
عندما يتوجب علينا تنفيذ أوامر اعتمادا ً على استخدام متكرر الختيار كمي لوسط ما ,عندها من الساهل استخدام الصيغة switch-caseالتي لها الصيغة العامة التالية: switch expression case test-expression1 )(commands1 case test-expression2 )(commands2 otherwise )(commands3 end يجااب أن يكااون expressionهنااا أمااا عااددا ً مفااردا ً أو سلساالة رمزيااة .يقااارن التعبياار expression الموجود في الصيغة السابقة بالتعبير test-expression1الموجود في عبارة caseاألولى .وإذا تساوى التعبيران ,سيتم تنفيذ األوامر ) (commands1وتخطي التعليمات الواقعة بعادها حتاى العباارة .endأماا إذا لم يتحقن الشرط األول ,فسايختبر الشارط الثااني ,حياث سايقارن expressionفاي المثاال الساابن ماع العبااارات test-exoression2الموجااودة فااي عبااارة caseالثانيااة .وإذا تساااوى التعبيااران ,ساايتم تنفيااذ ) )commands2وتهماال بقيااة العبااارات حتااى عبااارة .endإذا لاام تحقاان أي عبااارة caseالمساااواة مااع التعبير ,expressionعندها ستنفذ األوامر ) )commands3التي تلي العبارة .otherwise الحظ من الشر الذي أوردناه عن صايغة switch-caseبأناه سايتم تنفياذ أحادى مجموعاات األوامار المكونة للصيغة switch-caseواليك األمثلة التالية: مثال (:)1 ;x = 1 switch x }case {1, 2, 3, 4, 5 ;)'disp ('1..5 }case {9, 10 ;)'disp ('9..10 otherwise 77
MATLAB البرمجة بلغة
disp ('this is impossible'); end; 1..5 اإلخراج
:)2( مثال
clc; clear; n = 3; switch n case {0} m = n + 3; case {2} m = 'ali'; case {3} m = magic (n); otherwise disp ('error'); end; disp (m); اإلخراج 8
1
6
3
5
7
4
9
2 :)3( مثال
x = 2.7; units = 'm'; switch units case {'inch', 'in'} 78
MATLAB البرمجة بلغة
y = x * 2.54; case {'meter', 'm'} y = x / 100; case {'feed', 'ft'} y = x * 2.54 / 12; case {'millimeter', 'mm'} y = x * 10; case {'centimeter', 'cm'} y = x; otherwise disp (['unknown units:' units]); end; اإلخراج y = 0.027
79
البرمجة بلغة MATLAB
جمل الدوران والتكرار توفر لغة MATLABمجموعة من جمل الدوران والتكرار وهي:
جملة for تقوم حلقات forباعادة تنفيذ مجموعاة مان األوامار لعادد معاين مان المارات وبخطاوة معيناة ,وتعطاى الصيغة العامة لحلقة forكما يلي: for i = x1: x3: x2 )(commands ;end حيث يعاد تنفيذ األوامر ) (commandsالواقعة بين عبارتي forو endمان القيماة االبتدائياة x1إلاى القيمة النهائية x2وبزيادة مقدارها .x3كما في المثال التالي: مثال: >> for n = 1: 10 ;)x (n) = sin (n * pi / 10 ;end >> x =x Columns 1 through 7 80
البرمجة بلغة MATLAB
0.9511 1.0000 0.9511 0.8090
0.8090
0.3090 0.5878
Columns 8 through 10 0.5878 0.3090 0.0000 ويمكن تفسير الدوارة أعاله كما يلي: من اجل كل قيمة لـ nمن 1إلى 10يجب حساب قيمة العبارة الموجودة حتاى عباارة endالتالياة ,تكاون قيمة nفي الدورة األولى ,n = 1وتكون في الدورة الثانية n = 2وهكذا حتى تصل إلى .n = 10 مثال :توليد 10أعداد عشوائية قيمتها (.)1..10 )>> array = randperm (10 = array 8 2 10 7 4 3 6 9 5 1 >> for n = array ;)x (n) = sin (n * pi / 10 ;end >> x =x Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 سيأخذ متغير الحلقة nهنا قيما ً عشوائية بين ( )1و ( )10معطاة بالمصفوفة .array مالحظة: يمكن إنشاء عدة حلقات forمتداخلة ,كما في المثال التالي: >> for n =1: 5 for m = 5: -1: 1 ;A (n, m) = n ^ 2 + m ^ 2 ;end ;)disp (n 81
البرمجة بلغة MATLAB
;end اإلخراج 1 2 3 4 5
>> A =A 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 51 أمثلة: >> for i = 1: 10 ;)disp (i ;end اإلخراج 1 2 3 . . 10
82
MATLAB البرمجة بلغة
>> for i = 0: 2: 10 disp (i); اإلخراج
end;
0 2 4 6 8 10 >> for i = 10: -2: 1 disp (i); end; اإلخراج 10 8 6 4 2 >> for i =1: 10 for j = 1: 10
)(طبع جدول الضرب
mult (i, j) = i * j; end; end;
1
2
3
4
2
4
6
8 10 12 14 16 18 20
3 4
6
5
6
7
8
9
10
9 12 15 18 21 24 27 30
8 12 16 20 24 28 32 3 6 40 .
.
.
.
.
. 83
.
.
.
.
البرمجة بلغة MATLAB
.
.
.
.
.
.
.
.
.
.
10 20 30 40 50 60 70 80 90 100
جملة while ت ُجري حلقات whileعمليات الحساب عددا ً غير محدد من المرات على عكس حلقات forالتي تندي عددا ً معينا ً من التمريرات ,ويمكن كتابة الصيغة العامة لحلقة whileكما يلي: while expression )(commands ;end ستنفذ مجموعة األوامر) (commandsالواقعاة باين العباارتين whileو endطالماا أن كال العناصار ضمن expressionتمتلك قيما ً صحيحة ) ,(trueوعادة ً ما تكون نتيجة expressionعددا ً مفردا ً. مثال (:)1 ;>> x = 1 >> while x < 25 ;)disp (x
x
;= x + 1 اإلخراج
;end
1 2 3 . . 24 مثال (:)2 ;>> num = 0; EPS = 1 >> while (1 + EPS) > 1 ;EPS = EPS / 2 ;num = num + 1 84
البرمجة بلغة MATLAB
;end >> num = num 53
مالحظة: هناك طريقة قانونية للخروج من حلقة forو whileوكاالتي: (في حال تحقن الشرط يتم الخروج من الدوارة forوكذلك )while ;s = 0
;s = 0
for i = 1: 100
;x = 1 while x < 100
;s = s + i
;s = s + x
if s > 250
if s > 250
;break ;end
;break
;end
;end ;x = x + 5 ;end اإلخراج
اإلخراج x = 51
i = 22
s = 286
s = 253
مالحظة:
85
البرمجة بلغة MATLAB
أذا وجدت االيعاز breakضمن حلقة داخلية واقعة ضمن حلقات اكبر فان البرنامج يخارج مان الحلقاة التي صادك فيها االيعاز وال يخرج من الحلقات األكبر.
ملفات البيانات الخاصة ببرنامج MATLAB يمكاان تخاازين المتغياار الموجااود فااي ساااحة عماال برنااامج ,MATLABوفاان صاايغة خاصااة ببرنااامج ,MATLABوذلك عن طرين استخدام األمر saveكما يلي: >> save وبذلك يتم خزن جميع المتغيرات الموجودة في ساحة العمل ) (Workspaceفي ملك ذي صيغة ثنائية باساام matlab.matيوضااع فااي المجلااد الحااالي .وتحااافظ هااذه الملفااات ذات صاايغة الثنائيااة ,والخاصااة ببرنامج ,MATLABعلى كامل القيم وبدقة مضاعفة ,كماا وتخازن أساماء المتغيارات بانفس الدقاة ,وال تعتبر ملفات MAT-filesذات أصول مستقلة ,إنما هي متوافقة تماما ً مع بقية أناواع الملفاات الموجاودة في برناامج ,MATLABإذ نساتطيع تخازين أي متغيار وفان ناوع مان الملفاات وفتحاة مان قبال األناواع األخرى دون إجراء أية معالجة خاصة للملك. ويمكن أن يستخدم األمر saveلتخزين متغيرات معينة كما في المثال التالي: >> save var1 var2 var3 أي قام بتخازين المتغيارات var1و var2و var3ضامن الملاك ,matlab.matويمكان أن نحادد اسام الملك كوسيط أول لومر saveكما يلي: >> save filename var1 var2 var3
86
البرمجة بلغة MATLAB
وتفسااار التعليماااة الساااابقة كماااا يلاااي :خا ّ اازن المتغيااارات var1, var2, var3ضااامن ملاااك اسااامه .filename.mat ويعاكس األمر loadاألمر saveإذ يفت هذا األمر ملفات البيانات التي تم إنشانها بااألمر saveكماا يلي: >> load وهي تعني حم ّل كل المتغيرات التاي تجادها ضامن الملاك matlab.matحيثماا وجدتاه أوال ساوا ًء فاي المجلد الحالي أو في مسار البحث لبرناامج .MATLABوياتم تخازين أساماء المتغيارات المخزوناة فاي الملااك matlab.matفااي ساااحة العماال ,وسااتح ّمل فااوق المتغياارات ذات األسااماء المطابقااة لهااا فااي حااال وجودها. ولتحميااال متغيااارات معيناااة مااان ملاااك ذي الحقاااة ) (MAT-fileيجاااب ان ناااذكر اسااام الملاااك وقائماااة المتغيرات كما يلي: >> load filename var1, var2, var3 لقد تم هنا فت الملك filename.matوحملت المتغيرات var1, var2, var3إلى ساحة العمل.
87
البرمجة بلغة MATLAB
ايعازات المجموعات والبتات وااليعازات القاعدية ايعازات المجموعات نستطيع تقييم المصفوفات على إنها مجموعات ألنها تجميع منتظم لعدد من القيم وانطالقا ً من هذا الفهم, يق ّدم لاك برناامج MATLABعادة تواباع الختباار ومقارناة المجموعاات ,ويقادم لاك المثاال التاالي ابساط اختبار للمساواة: ;)>> a = rand (2, 5 ;)>> b = rand (2, 5 )>> isequal (a, b = ans 0 )>> isequal (a, a = ans 1 ويقدم لك المثال التالي االيعاز uniqueبحذك العناصر المتكررة من وسط اإلدخال: ]>> a = [2: 2: 8; 4: 2: 10
88
البرمجة بلغة MATLAB
=a 2 4 6 8 4 6 8 10 )>> unique (a = ans 2 4 6 8 10 ويمكن تحديد مجموعة العناصر المشتركة بين وسيطين عبر استخدام االيعاز ismemberكما يلي: >> a = 1: 9 =a 9
1 2 3 4 5 6 7 8 >> b = 2: 2: 9 =b 2 4 6 8 )>> ismember (a, b = ans
0 1 0 1 0 1 0 1 0 )>> ismember (b, a = ans 1 1 1 1 كذلك االيعاز unionالتحاد مجموعتين. )>> union (a, b = ans 1 2 3 4 5 6 7 8 9 89
البرمجة بلغة MATLAB
كذلك إيعاز intersectلتقاطع مجموعتين. )>> intersect (a, b = ans 2 4 6 8 كذلك إيعاز setdiffللفضلة بين مجموعتين. )>> setdiff (a, b = ans 1 3 5 7 9 مالحظة: يمكن إجراء العمليات السابقة على مصفوفات رمزية أو مصفوفات خاليا.
إيعاز البت إضااافة إلااى المعااامالت المنطقيااة التااي ذكرناهااا سااابقاً ,ياانمن الباارامج توابع اا ً تساام باااجراء العمليااات المنطقية على بتات منفصلة من األعداد الصحيحة. )>> bitand (3, 4 = ans 0 )>> bitor (3, 4 = ans 7 )>> bitxor (13, 27 = ans 22 متمم العدد 20لخمس بتات
)>> bitcmp (20, 5 = ans 11
جعل البت األولى من 30يكون 1 90
)>> bitset (30, 1
البرمجة بلغة MATLAB
= ans الموقع جلب البت األولى من 30
31
)>> bitget (30, 1 = ans الموقع العدد
إزاحة لليسار (موقعين)
0
)>> bitshift (3, 2 = ans 12
إزاحة لليمين (موقعين)
)>> bitshift (12, -2 = ans 3
;]>> z = [7 5 4 ; 3 8 9 )>> circshift (z, 1 = ans 3 8 9 7 5 4
االيعازات القاعدية ينمن برنامج MATLABالعديد مان األوامار التاي تحاول األعاداد العشارية إلاى قواعاد أخارى وفان صااايغ سالسااال رمزياااة ونساااتطيع التحويااال باااين األعاااداد العشااارية واألعاااداد الثنائياااة عبااار االيعاااازين dec2bin ,bin2decكما يلي: )>> a = dec2bin (17 = ans 10001 )>> class (a = ans char )>> bin2dec (a 91
البرمجة بلغة MATLAB
= ans 17 )>> class (ans = ans
عدد الخانات
double )>> dec2bin (17, 6 = ans 01001
ويتم التحويل بين األعداد العشرية والستة عشرية (يكاون أسااس العاد فيهاا العادد )16عبار االيعاازين hex2decو dec2hexكما يلي: )>> a = dec2hex (2047
=a عدد الخانات
7FF )>> dec2hex (2047, 4 = ans 07FF )>> class (a = ans char )>> hex2dec (a رمزي
= ans 2047 )>> class (ans = ans double
92
البرمجة بلغة MATLAB
الدوال والبرامج الفرعية تستخدم الدوال بشكل واسع في لغة .MATLABوالصيغة العامة للدوال هي: المدخالت
المخرجات
;)[out1, out2,…, outn] = function_name (input1, input2,...,inputn اسم الدالة كما في األمثلة التالية: مثال (:)1 ;]>> x = [1, 2, 3, 4, 5, 6, 7, 8 البرنامج الرئيسي
;]>> y = [11, 12, 13, 2, 9, 70 ;)>> avgx = average1 (x ;)>> avgy = average1 (y
;)function result = average1 (z البرنامج الفرعي (الدالة) 93
;)L = length (z ;)sum1 = sum (z
MATLAB البرمجة بلغة
result = sum1 / L;
>> avgx avgx = 4.5000 >> avgy avgy = 19.5000
اإلخراج
اإلدخال
>> res1 = mult2 (x); >> res2 = mult2 (y);
function result = mult2 (x); result = 2 * x;
:)2( مثال البرنامج الرئيسي
)البرنامج الفرعي (الدالة
>> res1 res1 = 2 4 6 8 10 12 14 16 >> res2 res2 = 22 24 26 4 18 140 :)3( مثال >> [sin_x, cos_x, x_2] = multf (x); >> [sin_y, cos_y, y_2] = multf (y);
البرنامج الرئيسي 94
البرمجة بلغة MATLAB
;)function [x1, x2, x3] = multf (x ;)x1 = sin (x
البرنامج الفرعي (الدالة)
;)x2 = cos (x ;x3 = 2 * x لرسم النقاط
)>> plot (sin_x
مالحظات: -1الدالة التي تكاون علاى شاكل ملاك مفصاول اليمكان تنفياذها مباشارة إال بعاد اساتدعائها بالبرناامج الرئيسي. -2تكون اسم الدالة المخزون في القرص الصالب واسام الدالاة بعاد عالماة (=) الموجاود فاي الساطر األول يجب ان يكونا متطابقين. مثال: ;)function y = myfunction (a, b ------95
البرمجة بلغة MATLAB
------------فيكون الخزن myfunction.m -3ال تحتوي نهاية الدالة على ).(end -4تخزن البرامج بعد كل تعديل وخاصة الدوال. -5اسم الدالة المخزون يجب أن تبدأ بحرك. -6يمكن أن تستدعي دالة من قبل دالة أخرى.
الرسوم البيانية ياازودك برنااامج MATLABبالعديااد ماان االيعااازات التااي تظهاار البيانااات ثنائيااة األبعاااد وثالثي اة األبعاااد ,حيااث يرساام بعضااها منحنيااات ثنائيااة األبعاااد وثالثيااة األبعاااد بينمااا يرساام بعضااها سااطوحا ً وإطارات ,كما يمكن استخدام اللون كبعد رابع.
االيعاز plot يقوم هذا االيعاز باظهار البيانات على شكل ثنائي األبعاد. مثال (:)1 ;]x = [1: 0.5: 10 الحتساب مجموعة قيم للـ( yمصفوفة) لرسم قيم بيانية للمحورين
;)y = exp (x x, y
)plot (x, y
مثال (:)2 ;x = 1: 10 )plot (x مالحظة: في حالة وجود إحداثي واحد (قائمة واحدة) يقوم االيعاز plotبرسم قيم بيانية متناظرة باالمحورين أي ( )x, xلكل عناصر القائمة. 96
MATLAB البرمجة بلغة
:)3( مثال y = [ ]; for i = 1: 10 y (i) = exp (i); end; plot (y); :)4( مثال y = [ ]; for i = 1: 10 y = [y exp (i)]; end; plot (y); :)5( مثال .(graph) ارسم مخطط بياني clc; clear; x = 0: pi / 100: 2 * pi; y = sin (x); plot (x, y); legend ('sin (x)');
دليل المخطط
xlabel ('x = 0: 2: pi');
x عنوان المحور
ylabel ('sin (x) cos (x)');
y عنوان المحور
title ('plot sin cos function');
)عنوان المخطط الرئيسي (أعلى المخطط
97
البرمجة بلغة MATLAB
مثال (:)6 لرسم منحنيين
;))plot (x, sin (x), x, cos (x
مثال (:)7 ;)'* plot (x, sin (x), 'r: +', x, cos (x), 'b: عالمة المخطط ) cos (xلون ازرق عالمة المخطط )sin (x
98
لون احمر
البرمجة بلغة MATLAB
مالحظة: يمكن كتابة أي نص على المخطط باستخدام االيعاز: ;)'text (x, y, 'string النص المطلوب كتابته
إيعاز plot3
االحداثي الصادي
االحداثي السيني
لقد تم تمديد االيعاز plotإلى ثالثي األبعاد وأصب ,plot3وصيغته لها نفس صيغة plotثنائي البعد عدا كون البيانات لها ثالث مساقط بدالً من مسقطين .والصيغة العامة لها: ;)…plot3 (x1, y1, z1, s1, x2, y2, z2, s2, االحداثي االحداثي االحداثي اللون الثالث الصادي السيني (خيط رمزي) مثال: ;)t = linspace (0, 10 * pi, 100 ;)plot3 (sin (t), cos (t), t ;)')xlabel ('sin (t ;)')ylabel ('cos (t ;)'zlabel ('t 99
البرمجة بلغة MATLAB
;)'text (0, 0, 0, 'origin لرسم الشبكة
grid on
الرسوم البيانية الجزئية تستطيع نافذة figureواحدة ان تمسك باكثر من مجموعة محاور أو صور ,حيث يقسم subplot (m, ) n, pنافذة الشكل الحالية الى مصفوفة m*nلرسم المناطن ويختار المساحة pلتصب فعالة .لقد رسمت الرسومات البيانية الجزئية من اليسار الى اليمين وعلى طول الصك العلوي ,ثم على طول الصك السفلي وهكذا ,وذلك كما يلي: مثال: ;)x = linspace (0, 2 * pi, 30 ;)y = sin (x ;)z = cos (x ;)a = 2 * sin (x) .* cos (x ;)b = sin (x) ./ (cos (x) + eps ;)subplot (2, 2, 1 plot (x, y); axis ([0 2 * pi
;)'1]); title ('Figure1
-1
;)'1]); title ('Figure2
-1
2 * pi
;)'1]); title ('Figure3
-1
2 * pi
;)subplot (2, 2, 2 plot (x, z); axis ([0 ;)subplot (2, 2, 3
100
plot (x, a); axis ([0
البرمجة بلغة MATLAB
;)subplot (2, 2, 4 ;)'20]); title ('Figure4
-20
2 * pi
plot (x, b); axis ([0
الرسوم البيانية السطحية تشبه الرسوم البيانية السطحية تلك الرسوم البيانية عدا انها تعبر عن المساحات الواقعة ,عبر اساتخدام االيعاز surfكما يلي: مثال (:)1 ;)[x y z] = peaks (30 ;)surf (x, y, z ;)'xlabel ('x-axis ;)'ylabel ('y-axis ;)'zlabel ('z-axis
101
البرمجة بلغة MATLAB
مثال (:)2 for i = 1: 10 for j =1: 10 ;mult (i, j) = i * j ;end ;end شكل مجسم (ثالثي االبعاد( )surf (mult مالحظة: هناك من االيعازات لرسم أشكال هندسية منها:
االيعاز bar يستخدم لرسم bar chart مثال: ;x = -2.9: 0.2: 2.9 ;))bar (x, exp (-x .* x
االيعاز hist يستخدم لرسم histogram مثال:
102
MATLAB البرمجة بلغة
x = -2.9: 0.1: 2.9; y = randn (10000, 1); hist (y, x);
pie االيعاز pie chart يستخدم لرسم :مثال x = [1 3 0.5 2.5 2]; explode = [0 1 0 0 0]; pie (x, explode);
. لرسم مخطط بياني:مثال clear; clc; corr = [0.0012, 0.0208, 0.0633, 0.1391]; 103
MATLAB البرمجة بلغة
amount = [1, 2, 3, 4]; subplot (211); plot (amount, corr, '--rs'); title ('Cipher-image VS Amount of Encrypted Data');
xlabel ('Amount of Encrypted Data'); ylabel ('Cipher-image Correlation');
104