برنامج الماتلاب لمادة التقنيات العددية


(theblack_x) #1

[CENTER][SIZE=“4”]السلام عليكم ورحمة الله وبركاته

اخواني أعضاء المنتدى و طلاب البوليتكنك الغراء … أتمنى ألا تتطلعو على موضوعي هذا الا و أنتم بأفضل حال وصحة …

لاحظت أن العديدين من طلاب مادة التقنيات العددية لدى المهندس ياسين الشبول يعانون من صعوبة كتابة برنامج الماتلاب المطلوب منهم … لذا … أحببت أن أطرح هنا برنامجا متواضعا قمت بكتابته مؤخرا … حيث يقوم البرنامج بحل النظام المدخل باستخدام احدى الطرق :
1 - تنصيف الفترة
2 - نيوتن رافسون
3 - القاطع
وذلك تبعا لاختيار المستخدم

لذا … أتمنى منكم الاطلاع عليه و الاستفادة منه، كما أتمنى ألا يكون الأوان متأخرا لطرحي له

و أرجو من الأخ مفيد الاطلاع عليه … و إبداء رأيه بالبرنامج ونقده بما بضمن افادتي وزملائي مستقبلا[/size][/center]


(AnasD) #2

رائع اخي … الله يبارك بجهودك
اعجبني حبك للمساعده وطرح البرنامج …
رغم اني حتى هذا الفصل لم اسجل ماده التقنيات العدديه بس عجبني برنامجك…

المهم نبدأ بالجد …
البرنامج فيه اخطاء للاسف … في مشكله باستخدام الامر break فقمت بحذفها جميعها أصلا ما في داعي لاستخدام هذا الامر بعد استخدام error فالامر الاخير يظهر رساله تحذيريه (باللون الاحمر ) ثم يخرج من تنفيذ البرنامج دون استخدام break … وبعد حذف جمل التوقف رجعت جربت طلع في خطأ اخر عند تنفيذ الامر subs(fx,a)…1 …

أه وفي ملاحظة ثانيه بشأن عمله القلب swap
طريقتك هذه ذكرتني بطريقه للقيام بعملية القلب دون استخدام متغيير ثالث , وهي كالتالي
a=a xor b
b=a xor b
a=a xor b

مثال
a=1101 (ثنائي)
b=1001 (ثنائي)
a=(1101 XOR 1001)=0100
b=(0100 XOR 1001)=1101
a=(0100 XOR 1101)=1001
بالنتيجه
a=1001
b=1101

يلا اخي شد حيلك خليني اشوف برنامج شغال منيح من كتابتك…
وسلامي


(mu5eed) #3

بارك الله فيك يا اخي the black_x على مجهودك الطيب والمثمر باذن الله ، واشكرك اخي انس على متابعتك الطيبة للموضوع ، انا لم اعلق على برنامج الشحنات لانني اقوم بتتبعه حاليا واتاكد من عمله بس ما شاء الله استخدامك للمنطق والقواعد استخدام راااائع بارك الله فيك وانشاء الله بالقريب العاجل سوف اقوم بالرد على برنامجك باذن الله ، واخي بلاك اكس باذن الله سوف اقوم بتتبع برنامجك بعد انس لرؤية جهودك الطيبة بالكتابة وباااارك الله فيكم جميعا

مفيد الترك


(AnasD) #4

مشكور مهندس مفيد على جهودك وبارك الله فيك


(theblack_x) #5

[SIZE=“4”][B]أخي مفيد … وأخي أنس

أشكركم جزيل الشكر على تفاعلكم، زجزاكم الله كل خير

أخي أنس : أخذت ملاحظاتك بعين الاعتبار، و أشكرك جداًعليها[/b][/size]


(AnasD) #6

في المره السابقة لم اجد الكثير من الوقت ع شان اوضح طريقة عمل القلب دون متغيير ثالث باستخدام الماتلاب ،

بس خليني بالبدايه اعرفكم على ( dec2binvec ) و (binvec2dec)
نبدأ بـ dec2binvec
هذا الاجراء يقوم بتحويل العدد بالنظام العشري( decimal ) إلى متجه (vector ) يحتوي الرقم لكن بالنظام الثنائي ( binary ).
لمعرفة المزيد عن هذا الاجراء اذهب الى المساعدة في برنامج الماتلاب بالضغط على المفتاح F1 عندما تكون في البرنامج ثم من النافذه اليسرى للمساعد اختر “بحث” ثم اكتب نص البحث وهو dec2binvec ثم انقر على "اذهب " لتجد المزيد وهو مهم جداً يجب عليك قراءته

ثانياً binvec2dec
هذا الاجراء يقوم بعكس ما يقوم به الاجراء السابق … كذلك انصحك بشده للذهاب الى المساعد وقراء المزيد

المهم مثال لعملة القلب



>> a=18;b=31;
>> av=dec2binvec(a,5);
>> bv=dec2binvec(b,5);
>> av=xor(av,bv);
>> bv=xor(av,bv);
>> av=xor(av,bv);
>> a=binvec2dec(av);
>> b=binvec2dec(bv);
>> a,b

a =

    31


b =

    18

>> 



(theblack_x) #7

[SIZE=“4”][B]أخي أنس … أشكر جهودك وملاحظاتك البناءة

لكن لي تعليق صغير على الطريقة التي طرحتها، حيث أنني لا أفضل استخدامها في برنامج الذي قمت بكتابته لسبب رئيس، ألا وهو أن الدالة " dec2binvec " لا تتعامل الا مع أرقام صحيحة موجبة، وفي برنامجي … قد تكون الفترات المراد تبديلها اما سالبة أو تحوي أعدادا كسرية … لهذا ؛ فطريقتك المطروحة أعلاه اقتصرت على حالات خاصة فقط بحسب اعتقادي

فعد الرغبة لاستخدامها للتعامل مع الاعداد السالبة و الكسرية، يتوجب القيام بعمليات اضافية تستهلك وقتا كبيرا من المعالج، إضافة لذاكرة أكبر من التي تحجزها الطريقة التقليدية

شاكرا لك متابعتك لبرنامجي ونقده [/b][/size]


(mu5eed) #8

ممتاز اخي the black فعلا قضية استخدام الاعداد الثنائية binary no تستهلك في الذاكرة عملياتها اقل من ال dec وبارك الله فيك على فكرتك ، وايضا بارك الله فيك انس ايضا على ملاحظتك القيمة:)


(AnasD) #9

نعم اخي كلامك صحيح بشأن الاعداد السالبه … وكذلك انت كاتب البرنامج وانت من يختار الطريقة المناسبة … اما بشأن حاجتها لجهد اكثر من المعالج فأنا اشاركك الرأي بذلك لكنني اخالفك في انها تحتاج لذاكره اكثر فمن المعلوم انه كلما قل عدد المتغييرات قلت الحجم المستخدم من الذاكرة …

ولي عوده للموضوع ان شاء الله راح احاول اكتب برنامج يقوم بتحويل الاعداد العشرية إلى متجه ثنائي بحيث يقبل الاعداد السالبة والموجبه بشرط ان تكون صحيحة … وياريت لو يزبط معي اني اسويها بحيث تصير كـ إجراء


(theblack_x) #10

[SIZE=“4”]بارك الله فيك أخي أنس …

بداية … أشاطرك الرأي بشأن الذاكرة المستهلكة من قبل البرنامج بالاعتماد على عدد المتغيرات

ثانيا … يسرني أن أضع يدي بيدك في محاولة بسيطة لتنفيذ هذا الاجراء البسيط و المعقد في آن !!
لكن أعتقد أن فكرته بسيطة نوعا ما
فبالنسبة للاعداد السالبة : يمكن وضع شرط يتحقق من كون العدد سالبا أم لا، وفي حال تحقق الشرط، يقوم بضربه بالعدد (1-) قبل البدء بعملية التحويل و التبديل … ومن ثم ضرب العدد بعد تبديله مرة أخرى بعد الانتها من عملية التبديل

أما الأعداد الكسرية : فيمكن ضرب العدد المراد تحويله بالعدد (10) أو مضاعفاته؛ بناءً على الدقة المطلوبة، ثم القسمة على نفس العدد بعد الانتهاء من عملية التبديل

أعتقد أن هذه هي الطريقة الأنسب حاليا - وهي ما طرأ على ذهني في هذه اللحظة - لكن يتوجب التقيق فيها وتنقيحها

فقط امنحمي بعض الوقت لحين انتهائي من امتحاناتي في الفترة القادمة[/size]


(AnasD) #11

شكرا اخي وانا ارحب بمساعدتك اشد الترحيب …
لكن لا تزعلني منك وتحكي انه معقد بالعكس هو بسيط كثييييير
اقتراحاتك بشأن الاعداد السالبة وبشأن الاعداد العشرية جميلة وقابلة للتطبيق
اما إذا انك متعقد من شغلت التحويل فدعني اخبرك انها بسيطة كل ما عليك اتباع هذه الخوارزمية

  1. ادخل العدد المراد تحويله decN
  2. اوجد الوغاريتم للاساس 2 للعدد السابق log2 (decN)=ans
    3 ) إذا كان الجواب عدد صحيح إذا العدد في الصيغة الثنائية يكون يبدأ بـ ans صفر ثم 1 ثم نكون قد انتهينى
    4 ) إذا لم يكن ans عدد صحيح نأخذ صحيحه ونقوم بالخطوه السابقة لكن الجواب لم ينتهي بعد
    5 ) نجد الوغاريتم للاساس 2 لناتج طرح 2^(صحيح ans) من decN أي
    ans=log2(decN - 2^floor(ans))…1
    ونعيد من النقطة 3 بحيث لا نلغي الناتج السابق بل نعدل عليه

مثال للتوضيح

decN=4
log2(4)=2
إذا العدد الثنائي هو 100

مثال أخر
decN=5
log2(5)=2.3219
إذا مبدئيا 100
log2(5 - 2^2)=0
إذا الجواب 101

شو لسى بتحكي عن الموضوع انه صعب …
وع شان الوقت كمان انا زي حالاتك مشكلتنا الامتحانات …
و في عندي سوال إلك : انت بتكتب برامج حاسوب بأي لغة ؟؟؟ لانه أعجبني انه اجت ببالك زي هيك افكار بالنسبة للاعداد السالبة والاعداد العشرية وبشكل سريع … تفكيرك نفكير برمجي …


(theblack_x) #12

[SIZE=“4”][CENTER]أهلين أخي أنس … وأشكرك مرة أخرى على مرورك

وخلص … ما رح زعلك مني، لأنو الفكرة بسيطة، و الدليل الأفكار اللي طلعت معنا متل ما انت شايف

وماشاء الله عليك … أهنئك على فكرتك اللامعة … الصراحة عجبتني كتير، وخلص … حصير أستخدمها في حال استدعت الحاجة

والبنسبة لسؤالك الأخير ؛
أنا حاليا ما بكتب برامج بلغة محددة، لأني كل ما أحتاج تطبيق معين، بكتب البرنامج بإحدى اللغات اللي بعرفها، حسب الحاجة والوظيفة
يعني لو بدي برنامج بسيط جدا بستخدم الفيجوال بيسك، ولو بدي برنامج للأجهزة الذكية أو متقدم نوعا ما، بستخدم Net.
لكن في الفترة الحالية مركز جهودي على 4 لغات برمجة … وهي اللي ححتاجها في الفترة القادمة
MATLAB / ASSEMBLY / C++ / C++.Net
وممكن أركز على (C++.Net) أكتر من (++C) لكون الأولى أشمل و أقوى …

وعلى العموم … لنا جلسات مطولة بعد الامتحانات

موفق ان شاء الله

وبارك الله فيك[/center][/size]


(system) #13

يا إخوان
الدكتور ياسين الشبول طالب منا برنامج عالماتلاب لحساب مصفوفة معينةin general باستخدام طريقةgausian elemination بشرط إظهار خطوات الحل خطوة بخطوة عند تنفيذ البرنامج…
نرجو منكم المساعدة
ولكم جزيل الشكر

(mu5eed) #14

يا عجارمة عملوا دورة بالماتلاب بالجامعة وببلاش عشان تعرف تعمل برنامج لحالك واي واحد بكتبلك البرنامج والله بضرك ما بنفعك


(system) #15

thank you


(system) #16


يا أخ مفيد الدورة كانت بأيام عطلتي… وما كان في مجال أحضرها… وشكراً لك عالدورة على كل حال.
نطلب منكم المساعدة مرة أخرى فنحن بأمس الحاجة لها…ولا تهكل هم بندرس البرنامج وبنفهمو…
مشكــــــــــــــــور

(system) #17

يا اخوان ممكن تعطوني برنامج ماتلاب لنيوتن رافسون كامل عشان اقدمو للدكتور ياسين الشبول
ضروري يكون بسرعه او تبعتولي الرابط الي بدي انزل منو المشروع