بحث عن استخدام الارقام العشوائية في الـ MAT LAB
الفصل الاول: مقدمة حول الارقام العشوائية
١,١ المقدمة :
نحن أمام موضوع مهم التي تلزم أي متخصص في الرياضيات او البرمجة ، هو الحصول على عدد ما بشكل عشوائي وبشروط معينة . هناك عمليات التي يتم تطبيقها باستخدام الأرقام العشوائية ، وهناك ارقام تتكرر بتفاصيلها في كل مرة ، وكم من الملل سيواجه المطبق حينها، تلك هي الأرقام العشوائية.
عندما نقول عدد عشوائي فهذا لا يعني بالضرورة انه عشوائي بالمعنى العام. العدد العشوائي هو العدد المولد من الطرف دالة مجهولة السلوك (نسبيا) عندما نقول نسبيا فأنا نقصد المستخدم أي ان المستخدم عندما نقوم بتشغيل دالة سنقوم بإرجاع عدد عشوائي كما يتصور هو ولكن في الحقيقة هذا العدد العشوائي يخضع لقانون معين ... المبرمج فقط هو من يعرفه اذ ان بعض التناقض في كلامنا السابق ، قلنا ان العدد العشوائي ثم قلنا بأنه يخضع لقانون معين كيف ؟ بداية ..... نحب أن نلفت الانتباه الى جدال الدائرة حول العدد العشوائي فالمبرمجون ارادوا برمجة دالة تمكن من توليد ارقام عشوائية وكانت المشكلة تمكن في برمجة الدالة العشوائية .... فنحن حين نقول دالة مبرمجة فهذا يعني أن الدالة تخضع لقانون محدد اما العدد العشوائي فلا يخضع لأي قانون .. والا فسيكون عددا محددا وسيفقد عشوائية ... تفيد الارقام العشوائية في مجموعة متنوعة للأغراض والاهداف ، مثل توليد مفاتيح لتشفير البيانات ، والنمذجة، ومحاكاه الظواهر المعقده ، واختيار عينات عشوائية من مجموعات البيانات الضخمة كما تم استخدامها من الناحية الجمالية في الأدب والموسيقى وبالطبع هي ايضا مشهورة الاستخدام في الالعاب الاليكترونية الرقم العشوائي هو احد الارقام التي يتم الحصول عليها من مجموعة من القيم الممكنة ، كل رقم من المجموعة له احتمال متساوي مع البقية للحصول عليه ، أي تتوزع احتمالاتها توزيعا منتظما . عند مناقشة سلسله من الارقام العشوائية ، يجب ان يكون كل عدد مستخرج مستقل احصائيا عن الآخرين ، أي ان الحصول على عدد ما لا يؤثر على احتمال الحصول على عدد آخر.
ومع ظهور الحاسوب ، احتاج المبرمجون الى وسيلة لاستحداث وتوليد العشوائية في برنامج الحاسوب وعلى الرغم من ذلك من الصعب ايجاد حاسوب يقوم بشيء مصادفه او عشوائية لان الحاسوب يمثل التعليمات بصوره عمياء محددة له مسبقا ، وبالتالي يمكن التنبأ بها تماما.
١,٢ مقدمة في MATLAB :
جاءت كلمة ماتلاب MATLAB من الأحرف الأولى للعبارة Matrix Laboratory أي مختبر المصفوفات ، الماتلاب هو برنامج هندسي متقدم يقوم بإجراء العمليات الحسابية ومحاكاة الانظمة المختلفة لذا يستخدم كوسيلة تحليل في عدة مجالات مثل العلوم والرياضيات المتقدمة وفي الصناعة كأداة بحث وتصميم ذات مردود عالي ويستعمل لغرض اجراء العمليات الحسابية ، واشتقاق اللوغاريتمات ، ومحاكاة وتصميم الانظمة في جميع فروع العلوم والصناعة ، وتحليل البيانات واستكشافها ، وكذلك لرسم المجسمات الهندسية والصناعية ذات الثلاثة ابعاد ويعتبر MATLAB من البرامج ذات الاستجابة السريعة حيث عنصر البيانات الاساسي فية عبارة عن مصفوفة بدون أبعاد قياسية ، لذلك يمكن استخدامة في حل معظم المسائل الحسابية المعقدة بسهولة وفي زمن قصير مقارنة باستخدام لغات البرمجة الأخرى مثل C او Fortran.
تتعامل لغة MATLAB مع الثوابت والمتحولات كمصفوفات رياضية ، وبناء على ذلك العمليات الرياضية الافتراضية في MATLAB هي عمليات على مصفوفات مثلا ab هي عملیات ضرب بين مصفوفتين الأولى a والثانية b.
١,٣ أغراض الـ MATLAB :
• اجراء العمليات الحسابية المعقدة بسرعة عالية.
• اشتقاق اللوغاريتم.
• محاكاة وتصميم الانظمة المختلفة في جميع فروع العلوم والصناعة.
• تحليل البيانات واستكشافها.
• رسم مجسمات ذات ابعاد ثلاثية هندسية وصناعية.
١.٤ مكونات نظام MATLAB :
١- لغة MATLAB: وهي لغة بشكل مصفوفة عالية المستوى وتحتوي على اوامر للادخال والاخراج وتحتوي ايضا على امكانية البرمجة الكائنية Object oriented Programming تستطيع بواسطة لغة MATLAB تطوير برامج بسيطة سريعة وتستطيع ايضا تطوير مجموعة برامج وتطبيقات كاملة وواسعة ومعقدة.
٢- بيئة عمل MATLAB: وهي مجموعة الادوات والامكانيات التي يتم استعمالها في MATLAB مثل سطح المكتب نافذة الأوامر ، نافذة الأوامر السابقة، مستعرضات محتويات ساحة العمل وغيرها.
٣- المخططات: يحتوي برنامج MATLAB على أوامر عالية المستوى من اجل اظهار المخططات ثنائية وثلاثية الابعاد ومعالجة الصور وتحريك الرسوم.
٤- مكتبة التوابع الرياضية ل MATLAB: وهي مجموعة من الالغورتيمات تتراوح من الالغورتيمات البسيطة مثل : الجمع ، الجيب ، الجيب تمام او العمليات على الاعداد العقدية أو التوابع المعقدة مثل مقلوب مصفوفة ، توابع بيزل تحويلات فوريية وتحويلات لابلاس.
٥- واجهة برامج التطبيقات MATLAB: وهي مكتبة تسمح بكتابة برامج بلغة البرمجة ++C او بلغة Fortran لاستعمالها في MATLAB كما تسمح لبرنامج MATLAB باستدعاء البرامج الفرعية .
الفصل الثاني: تطبيق الارقام العشوائية في الماتلاب
,٢,١ مقدمة :
ان الماتلاب يحوي عدد كبير من الاساليب المدمجة والتي تجعل جبر المصفوفات سهل جدا. كما استخدمت وظائف (rand, srand, randn, and randperm) لانشاء تسلسل ارقام عشوائية ، واستخدام وظيفة الـ rang للسيطرة على التكرارات في النتائج الحاصلة .
۲,٢ توليد الارقام العشوائية في الماتلاب :
تستخدم البرمجيات لانشاء ارقام عشوائية ، والنتائج ليست عشوائية بالمعنى الرياضي الصارم ، ومع ذلك فان تطبيقات البرمجيات مثل الخوارزميات التي تجعل النتائج الخاصة بك تبدو عشوائية ومستقلة النتائج ايضا بالاختبارات الاحصائية العشوائية والاستقلال هذه الارقام المستقلة العشوائية على ما يبدو غالبا ما توصف بأنها عشوائية. يمكن استخدام هذه الارقام كما لو هي عشوائية حقا ومستقلة كرقم عشوائي واحد، الارقام الزائفة مستقلة هي انه يمكن تكرار الحساب في اي وقت ، يمكن ان يكون هذا النهج مفيدا في الاختبارات او الحالات على الرغم من انه يمكن ان يكون من المفيد تكرار النتائج عن طريق الخطأ عندما كانت حقا النتائج مختلفة.
۲,۳ تكوين مصفوفة الارقام العشوائية :
هناك اربع وظائف عشوائية rand, srand, randn, and randperm وظيفتها هي ارجاع ارقام عشوائية.
وظيفة rand returns :
ان الارقام الحقيقية هي بين 0 و 1 فلإرجاع قيم بين هذين الحدين يكون كما في المثال التالي:
>> r1 = rand(10,1)
r1 =
0.6312
0.3551
0.9970
0.2242
0.6525
0.6050
0.3872
0.1422
0.0251
0.4211
هو متجه عمودي 1 - 10 - by يحتوي على ارقام حقيقية نقطة تم رسمها من توزيع موحد ، كافة القيم في r1 هي في الفترة المفتوحة بين (0,1) ، ان الرسم بياني لهذه القيم مسطح تقريبا مما يدل على اخذ العينات موحدة الى حد ما من الارقام.
وظيفة srand returns :
يعطي عشوائية أكثر حيث أتاح المجال للمستخدم بوضع حجر الأساس للعشوائية وغالبا ما تستعمل بذرة الوقت مع التابع ()srand لإعطاء عشوائية شبه مطلقه.
R2=srand(time(NULL))
x=rand
وظيفة randn returns :
التي تستعمل ارقام مصفوفة حقيقية مستمدة من توزيع عادي معياري فمثلا :
r3 randn(10,1)
r3 =
-0.4326
-1.6656
0.1253
0.2877
-1.1465
1.1909
1.1892
-0.0376
0.3273
0.1746
هو عمود متجه يحتوي على ارقام مرسومة من معيار حقيقي الرسم البياني R3 يشبه التوزيع العادي تقريبا البيائي هو 0 والانحراف المعياري هو 1 .
وظيفة randperm returns :
يمكنك استخدام الدالة randperm لانشاء مصفوفات من القيم الصحيحة العشوائية التي ليس لها قيم متكررة فمثلا :
r4 = randperm (15)
r4=
13 7 15 1 11 9 3 12 6 14 2 5 4 10 8
مجموعة تحتوي على قيم صحيحة مختارة عشوائيا على الفاصل الزمني مغلقة. على عكس rand والتي يمكن أن ترجع مصفوفة تحتوي على قيم متكررة .
٢,٤ توليد الاقام العشوائية ضمن نطاق معين :
يمكن توليد ارقام عشوائية ضمن نطاق معين ويوضح هذا المثال كيفية انشاء مصفوفات من ارقام النقطة العائمة العشوائية التي يتم رسمها من التوحيد الموحد ضمن الفاصل الزمني المفتوح (50,100) يقوم rand returns الافتراضي بارجاع القيم المعيارية بين (1-0) التي يتم رسمها من توزيع موحد لتغيير نطاق التوزيع الى نطاق جديد (a,b) ضرب كل قيمة من خلال عرض النطاق الجديد (b) ثم بتحويل كل قيمة بواسطتها.
اولا: قم بتهيئه مولد الارقام العشوائية لجعل النتائج كما في هذا المثال (rng(0, twister .
ثانيا: انشاء متجة من 100 قيمة عشوائية ، باستخدم الداله rand لرسم القيم من توزيع موحد في الفاصل الزمني المفتوح من (50,100).
>> a = 50
>> b = 100
>> r = (b-a).*rand(1000,1) + a
r=
52.2526
86.1587
67.3719
71.8987
تحقق من ان القيم في ٢ تقع ضمن النطاق المحدد
r_range = [min(r) max(r)]
r_range =
99.9746 50.0261
والنتيجة في الفاصل الزمني المفتوح (50,100).
٢,٥ لماذا تتكرر الارقام العشوائية بعد ان نبدأ بتوليدها :
جميع وظائف مولدات الرقم العشوائي rand, randn, srand, and randperm المشتركة في كل مره بتوليد ارقام عشوائية والمولد يعيد نفسه الى نفس الارقام مثل (22)rand تعود بنفس النتيجة في أي وقت تقوم بتنفيذه مباشرة بعد بدء التشغيل ، أي ان وظائف الرقم العشوائي returns لها نفس النتيجة كلما قمت باعادة تشغيل اذا كنت ترغب في تجنب تكرار نفس الرقم العشوائي للمصفوفة عند اعادة تشغيل ماتلاب ثم تنفيذ الأمر قبل اذا كنا نريد تكرار النتيجة التي ، rand, randn, srand, or randperm استدعاء الـ حصلت في بداية استخدام الماتلاب دون اعادة التشغيل ، يمكن اعادة تعيين المولد الى حاله بدء التشغيل في أي وقت باستخدام ;('rng('default أي المجال الافتراضي.
عند تنفيذ ;('rng(default سوف تكون المخرجات تطابق التنفيذ الاخير:
A = rand(2,2)
A =
0.8147 0.1270
0.9058 0.9134
القيم في A تطابق اخراج (22) rand كلما قمت باعادة تشغيل الماتلاب .
٢,٦ تولید ارقام عشوائية قابلة للتكرار :
يوضح هذا المثال كيفية تكرار مصفوفات الارقام العشوائية عن طريق تحديد seed first في كل مرة تقوم بتهيئة مولد باستخدام نفس البذره او القيمة الابتدائية ، وكنت دائما تريد الحصول على نفس النتيجه.
- تهيئة مولد الارقام العشوائية لجعل النتائج في هذا المثال قابله للتكرار .rng('default');
- تهيئه مولد باستخدام 1 seed of أي القيمة الافتراضية 1.
(1)rng ثم انشاء مجموعة من الارقام
مثال:
A = rand(3,3)
A =
0.1863 0.3023 0.4170
0.3456 0.1468 0.7203
0.3968 0.0923 0.0001
كرر نفس الامر
A = rand(3,3)
A =
0.1863 0.3023 0.4170
0.3456 0.1468 0.7203
0.3968 0.0923 0.0001
اول تنفيذ للـ rand لتغير حاله المشغل ، وبالتالي فان النتيجة الثانية تكون مختلفة. الان ان تنفيذ المشغل للأوامر باستخدام الـ seed ثم اعادة اول مصفوفة matrix A كما في التنفيذ التالي:
rng(1);
A = rand(3,3)
A =
0.4170
0.3023
0.1863
0.7203
0.1468
0.3456
0.0001
0.0923
0.3968
في بعض الحالات، وضع الـseed وحدها لن يضمن النتائج، ويرجع ذلك الى ان المشغل الذي يتم من خلاله استخدام وظائف الارقام العشوائية منه قد يكون مختلفا عما تتوقعه عند تنفيذ التعليمات البرمجية. فالتكرار على المدى الطويل عند تحديد seed ونوع المشغل معا.