المصفوفات والدوال في ال Matlab

الناقل : elmasry | الكاتب الأصلى : بن العيد | المصدر : www.arabteam2000-forum.com

السلام عليكم
هذا الدرس مواصلة للدرس السابق
مقدمة عامة حول ال Matlab والهدف منه شرح كيفية تعريف المصفوفات ذات بعد وبعدين و التعامل مع الدوال وما يتعلق بمشاكل الترجمة

I. تعريف المصفوفات

المصفوفات ذات بعد واحد

للحصول على مصفوفة ذات بعد واحد يمكن إستعمال الرمز ":" بالكيفية التالية:

>> x = -5:5
والنتيجة هي مصفوفة ذات بعد واحد تحتوي الأعداد الموجودة بين الحدين اللذان تم تحديدهما ( 5-و 5 في مثالنا هذا ) والفارق بين عددين متواليان هو 1 وهو الفارق التلقائي الذي يحدده البرنامج. أي النتيجة :5-, 4-, 3-,..., 3, 4 , 5
يمكن تغير الفرق بين الأرقام المتتالية "الخطوة" عبر تحويل الكود السابق بالكود التالي:
>> x = -5:.5:5

النتيجة هنا مماثلة للكود السابق إلا أن الخطوة تساوي نصف وقد أضفت العدد 5. بين الرمزان ":" ولا يوجد فرق بين كتابة 0.5 و 5. حيث أن البرنامج يعتبر تلقائيا الرقم قبل الفاصلة يساوي صفر. إذا النتيجة هي كما يلي:

إقتباس

5.0000-, 4.5000-, 4.0000-,... ,0.5000-,... 0,... 4.0000, 4.5000, 5.0000
ملاحظة: الفاصلة في الأعداد ليست الرمز "," بل الرمز "." أي لكتابة العدد نصف مثلا نكتب 0.5 وليس 0,5. يفهم البرنامج الكتابة الثانية على أنهما رقمان مستقلان.

يمكن إستعمال كلتا الطريقتين السابقتن لتعريف المصفوفة بالشكل التالي ولكم الإطلاع على النتيجة:
x=[1:2:8,1:5]
يبين المثالان السابقان كيفية تعريف مصفوفتين ذوات بعد واحد, لكن ماذا لو أردنا تعريف واحدة نعرف نحن عناصرها؟ هناك إمكانية تعريفها بالكيفية التالية:
>> x = [3,5,8,9,8,9,8,0,0,2]

هذه الطرق الرئيسية المستعملة لتعريف مصفوفة ذات بعد واحد لكن ليست الوحيدة, يمكن أيضا تعريفها من تعريف مصفوفة ذات أكثر من بعد. كأخذ سطر أو عمود أو أرقام معينة من مصفوفة ذات بعدين المعرفة سابقا في شاشة التعليمات. كيفية تعريف المصفوفات ذات بعدين هو الهدف من العنصر اللاحق.

المصفوفات ذات بعدين

المصفوفات ذات بعدين مستعملة كثيرا في حل العديد من المعادلات الرياضية و معالجة الصور وغيرها من التطبيقات. أعد العدة اللازمة لذلك ووفر Matlab العديد من الدوال والوضائف التي تيسر ذلك وسأسعى في هذا الجزء من الدرس تبين بعض منها مبتدأ بإبراز كيفية تعريفها/تكوينها.
تعريف المصفوفة ذات بعدين يعتمد على جملة من القواعد أهمها كتابة الرمز ";" للفصل بين مختلف الأسطر وهذه الأخيرة يجب أن تكون متساوية الطول.في هذا المثال عرفت نفس المصفوفة بطريقتين مختلفين
>> A=[1,2,3;4,5,6], A1=[1:3;4:6]

يوفر Matlab عدة مصفوفات جاهزة مثل eye, magic, pascal, rand, zeros,...
للتعرف على هاته المصفوفات يكفي تجربة التعليمات التالية:
>> eye(4), pascal(4), magic(4), zeros(4), rand(4)

كما ذكرت سابقا من الممكن تعريف مصفوفة ذات بعد من أخرى ذات بعدين, هذا مثال لأخذ السطر الأول والعمود الأولى من magic(5)
M=magic(5), M_First_line=M(1,:), M_First_column=M(:,1), M_Element = M(2,2)


II. التعامل مع الدوال في ال Matlab
الآن وقد تعودنا التعامل مع شاشة التعليمات سننتقل لإستعمال نافذة أخرى يوفرها البرنامج وهي ال Editorحيث نصبح قادرين على كتابة برنامج متكامل يصل حتى إلى تصميم واجهة رسومية كما هو في باقي لغات البرمجة. لذك سنبدأ بكتابة ما يلي في نافذة التعليمات:
>> edit <option>

هنا "<option>"تعرف إسم الملف الذي نريد فتحه سوى كود سبق كتابته أو كود دالة يوفرها البرنامج. بالنسبة لنا سنترك إسم الملف فارغ لكي يتم إنشاء ملف جديد سنكتب فيه الكود الذي سأدرجه لا حقا. الآن وقد فتحت نافذة كتابة الكود, سنقوم بتسمية دالتنا الأولى Example1 وننسخ فيها الكود التالي:
function Example()
 clc
 M=magic(5)
 M_First_line=M(1,:)
 M_First_column=M(:,1)
 M_Element = M(2,2)


سبق و تعرفنا على هاته التعليمات لا تزال كلمة function. نلاحظ أن لون هذه الكلمة أزرق أي أنها كلمة محتجزة من قبل البرنامج وتستعمل لتعريف الدوال. الدوال في الMatlab تأخذ مدخلات وترجع مخرجات أيضا, سأفسر ذلك لاحقا.
الآن و قد عرفنا الدالة وأضفت لها التعليمةclc لتنظيف شاشة التعليمات قبل ترجمة التعليمات الرئيسية, سنقوم بالترجمة. هذه الأخيرة تكون بطرق مختلفة من بينها:

المرفقات run.jpg
الصورة رقم1: ترجمة كود Matlab

في الصورة رقم واحد قمت بإبراز كيفة ترجمة محتويات ال Editor. ويبقى الإختصار F5 الأيسر لذلك. طريقة أخرى في الترجمة تتمثل في كتابة إسم الملف الذي نريد ترجمت تعليماته, ومن الأفضل تسميت الملف بنفس إسم الدالة الرئيسية الموجودة فيه. نفهم من هذا أنه من الممكن كتابة أكثر من دالة في نفس الملف.
المرفقات
Example.rar
في الملف المرفق قمت بكتابة مثال حول مختلف طرق تعريف الدوال في نفس ملفm. و إستدعائها في دالة أخرى.عند الترجمة يتم مراجعة الأخطاء في كافة الدوال لكن يتم تنفيذ تعليمات الدالة الرئيسية فقط إذا لم يتم إستدعاء الدوال الأخرى داخلها, أو واحدة منها وبدورها تستدعي دوال أخرى.
إثر تسمية الدالة الرئيسية كتبت بعض التعليق. تلك الطريقة في التعليق هي الطريقة المعتمدة في البرنامج لإضافة نصوص المساعدة لمختلف الدوال ولتأكد من ذلك يكفي كتابة التعليمة التالية:
>> help Example

لا يجب أن يكون نص التعليق مفصولا بسطر فارغ لأن في هذا الحال لن يظهر نص التعليق الموجود بعد هذا السطر. إذا أردت ترك سطر فارغ في نص التعليق ينبغي بدأه بالرمز "%".

عند كتابة أكثر من دالة في نفس الملف يجب تحديد نهاية كل دالة عبر إستعمال الكلمة المفتاحend.

نلاحظ أني إستعملت التعليمة التالية:
sprintf('Example2 inputs are: out1=%d, out2=%d', out1, out2)

هذه التعليمة تمكن من إرجاع نص في شاشة التعليمات لتتبع سير الكود, هذه الدالة نعرفها في البرمجة باللغة سي في المكتبة stdio.h, هذه المكتبة موجودة في Matlabولا حاجة لإضافتها سوى للبرنامج أو للكود. كما يمكن إستعمال الدالة sscanf لقراءة قيمة ما و fscanf وfprintf للقراءة والكتابة/تحديث في ملفات خارجية.

عند إكتشاف خطأ ما في نص الكود, يرجع الMatlab تفاصيل حول الخطأ والسطر الموجود فيه. مثال:

إقتباس

 
??? Undefined command/function 'M5'.

Error in ==> Example at 11
M_Element = M5(2,2)

يمكن الذهاب الى مكان الخطأ لإصلاحه أو النقر على النص المسطر في رسالة الخطأ وسيحملك مباشرة الى السطر الذي يحتوي الخطأ.وبما أننا بصدد الحديث عن أخطاء الترجمة وتتبعها, سنواصل مع ما يعرف ب Debug. هذه الخاصية تمكن من توقيف الترجمة في نقطة معينة من الكود. عند الوصول الى النقطة التي تم تحديدها نشاهد ما تصوره الصورة رقم2 :

ارفق صورة : monthly_09_2007/post-91400-1188757251.jpg
الصورة رقم2: تتبع ترجمة الكود

السهم الأخضر يبرز عند وصول الترجمة الى النقطة التي تم تحديدها بالدائرة الحمراء, وتتوقف الترجمة وفي الآن ذاته يظهر لنا الحرف اللاتيني "K" في شاشة التعليمات. عندها نستطيع الإطلاع على نتائج الترجمة إلى حد تلك النقطة وما تم خزنه في مجال العمل.
 
ارفق صورة
 
  • ارفق صورة : monthly_09_2007/post-91400-1188693043.jpg
 
ملف مرفق(ملفات)