دورات هندسية

 

 

البرمجة - الخوارزميات - إيجاد جذور تابع مستمر

صفحة 1 من 3 12 3 الأخيرةالأخيرة
النتائج 1 إلى 10 من 27
  1. [1]
    عبد الجواد
    عبد الجواد غير متواجد حالياً

    عضو متميز

    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0

    البرمجة - الخوارزميات - إيجاد جذور تابع مستمر

    السلام عليكم:

    أرسلت منذ مدة مشاركة بعنوان الخوارزميات وتحدثت فيها عن معنى الخوارزمية وفائدتها بالنسبة للمهندس المبرمج.
    وأدرجت مثالاً عن خوارزمية حل معادلة من الدرجة الثانية، وهي خوارزمية بسيطة جميعنا يعرفها.
    الموضوع هنا.

    وفي هذه المشاركة سأعرض خوارزمية أخرى في مجال الرياضيات العددية يستخدمها المهندس المبرمج بكثرة في برامجه وهي خوارزمية إيجاد الجذور الحقيقية لتابع مستمر معقد (f(x ، أي إيجاد مجموعة قيم x التي تجعل المعادلة f(x)=0 محققة.

    سأستعين بكتاب (الرياضيات العددية) للدكتور المهندس سامح جزماتي (منشورات جامعة حلب) لعرض الفكرة ولكن سأعرضها بأسلوبي الخاص ولن أتطرق إلى جميع الطرق المشروحة في الكتاب فالمقصود من هذه المشاركة هو وضع القدم على الطريق، ومن أراد الاستزادة عليه الرجوع إلى الكتاب السابق أو إلى كتب مشابهة.

  2. [2]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    مقدمة:
    لنفرض أن المطلوب إيجاد جذور التابع :
    f(x) = 2 Cos(x)-e^x
    أي إيجاد قيم x التي تحقق المعادلة f(x)=0

    من الواضح أن المعادلة معقدة ومن الصعب حلها تحليلياً لذلك نلجأ إلى الحل العددي.

    قد يكون للمعادلة أكثر من حل (كما في المعادلة السابقة) لذلك نلجأ إلى ما يلي:
    1- بما أن الخوارزمية -كما قلنا سابقاً- يجب أن تحوي قيماً ابتدائية فإنه يجب تحديد المجال الذي سيتم البحث عن الجذور ضمنه حتى لا يستمر البحث إلى ما لانهاية، مثلاً نريد البحث عن جذور المعادلة السابقة في المجال [-10,+10]
    2- الفصل بين الجذور ، أي إيجاد المجالات الموجودة فيها الجذور بحيث يتضمن كل مجال جذراً واحداً فقط، كما في الشكل في الأسفل.

    3- إيجاد القيم الحقيقية لهذه الجذور بدقة محددة من قبل المهندس، مثلاً بدقة أربعة أرقام بعد الفاصلة.


    1- تحديد المجال المراد البحث ضمنه:
    هذا المجال يعود إلى خبرة المهندس وإلى طبيعة المسألة والمعادلة.

    مثلاً يحدد المهندس البحث من x = -5 إلى x = 5

    سنصطلح تسمية نقطة البداية x0 ونقطة النهاية xf وعلى هذا يكون المجال هو [x0,xf]


    يتبع...

    0 Not allowed!



  3. [3]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    2- الفصل بين الجذور:
    في هذه المرحلة يجب البحث عن مجال [x1,x2] بحيث يحوي جذراً حقيقياً واحداً.

    نظرية:
    إذا أخذ التابع المستمر (f(x في ذروتي المجال [a,b] القيمتين (f(a),f(b وكانت هاتان القيمتان بإشارتين مغايرتين أي إذا تحققت المتراجحة f(a).f(b)<0 فإن المجال [a,b] يحوي على الأقل جذراً واحداً للمعادلة f(x)=0 إن كان التابع f مستمراً على المجال [a,b]


    يقوم المهندس بافتراض طول لهذا المجال بحيث يضمن وجود جذر واحد فقط ضمنه أثناء البحث وهذا يتبع لخبرة المهندس وطبيعة المعادلة ، وسنصطلح تسمية طول المجال بالرمز dx.
    نقسم المجال الأساسي [x0,xf] إلى مجالات صغيرة طول الواحد منها هو dx فنحصل على:
    [x0,x1] , [x1,x2] , ... , [xi,x(i+1)] , ... , [...,xf]

    حيث:
    x1=x0+dx
    x2=x1+dx
    xi=x(i-1)+dx

    ثم نحسب قيمة التابع f في بداية ونهاية كل مجال ونضرب الناتجين معاً:
    1- إذا كان ناتج الجداء موجباً فلا يوجد جذر حقيقي ، وننتقل للمجال الذي يليه.
    2- إما إذا كان سالباً فهذا يعني وجود جذر حقيقي لأن التابع غير إشارته أي أنه تقاطع مع المحور x (على فرض أنه مستمر) لذلك نلجأ إلى إحدى طرق البحث الدقيق عن الجذر ضمن هذا المجال، كما في الفقرة التالية.



    يتبع...

    0 Not allowed!



  4. [4]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    3- إيجاد القيم الحقيقية:
    بعد معرفة المجالات التي تحوي جدوراً نبحث عن القيمة الحقيقية للجذر في كل مجال على حدى، وهناك العديد من الطرق (الخوارزميات) لإيجاد هذا الحل منها (المذكورة في الكتاب السابق):
    طريقة التنصيف ، طريقة التوسط الداخلي ، طريقة القاطع ، طريقة نيوتون رافسون ، طريقة نيوتون من الدرجة الثانية.
    وسأشرح طريقة التنصيف لسهولتها وهي تفي بالمطلوب.

    ويجب التنويه أنه على المهندس اعتماد الدقة المطلوبة قبل البدء في الحل ولتكن مثلاً 0.0001 ولنسمها eps

    طريقة التنصيف:
    بعد أن تأكدنا من وجود جذر حقيقي ضمن المجال [(xi,x(i+1] كما سبق فإننا نلجأ لهذه الطريقة للبحث عن هذا الجذر.

    نقوم بتقسيم المجال [(xi,x(i+1] إلى مجالين متساويين هما:

    [(xi,x(i+1/2)] , [x(i+1/2),x(i+1]

    حيث أن:
    x(i+1/2) = (xi + x(i+1))/2

    أي أننا قمنا بتنصيف المجال.

    ثم نحسب قيمة التابع عند النقطة الوسطية:
    إن كانت القيمة المطلقة لقيمة التابع عند هذه النقطة أصغر من eps فإن هذا هو الجذر المطلوب وننتقل للبحث عن جذر آخر في مجال آخر.
    أما إن كانت القيمة أكبر من eps فإننا نحدد المجال الذي يحوي الجذر من بين المجالين الجديدين بأن نختبر الجداء التالي:

    ((f(xi) . f(x(i+1/2

    فإن كان الجداء سالباً فإن الجذر يقع ضمن هذا المجال وإلا فإنه يقع في المجال الآخر.

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



    يتبع...

    0 Not allowed!



  5. [5]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    مثال يدوي:
    هذا المثال منقول من كتاب الرياضيات العددية للدكتور المهندس سامح جزماتي.

    المطلوب إيجاد جذور المعادلة:

    cos(x) * 2 - e^x = 0

    في المجال [0,1] بدقة eps=0.0002

    الحل:
    1- تحديد المجال الصغير الذي يحوي الجذر:
    نعتمد قيمة dx=0.1 للتفتيش عن الجذور ونضع قيم التابع في الجدول التالي:

    x ====ا==== (f(x
    0,0 ====== 1
    0.1 ====== 0.88484
    0.2 ====== 0.73873
    0.3 ====== 0.56081
    0.4 ======0.35030
    0.5 ====== 0.10644
    0.6 ====== 0.17145-

    نلاحظ أنه لدينا جذر في المجال [0.5,0.6] لأن إشارة التابع تغيرت.

    نلجأ الآن إلى طريقة التنصيف للبحث عن الجذر بدقة.

    - منتصف المجال [0.5,0.6] هي 0.55:

    f(0.55) = -0.02820 > eps

    وبما أن f(0.5) = 0.10644 و f(0.6) = -0.17145 فإن الجذر يقع ضمن المجال [0.5 , 0.55] ، نأخذ منتصف هذا المجال : 0.525 فيكون:
    f(0.525) = 0.04019 > eps
    فالجذر يقع ضمن المجال [0.525,0.55] ، نأخذ منتصفه : 0.5375 فيكون:
    f(0.5375) = 0.00626 > eps
    فالجذر يقع ضمن المجال [0.5375,0.55] ، نأخذ منتصفه : 0.54375 فيكون:
    f(0.54375) = -0.01090 > eps
    فالجذر يقع ضمن المجال [0.5375,0.54375] ، نأخذ منتصفه : 0.54063 فيكون:
    f(0.54063) = -0.00232 > eps
    فالجذر يقع ضمن المجال [0.5375,0.54063] ، نأخذ منتصفه : 0.53907 فيكون:
    f(0.53907) = 0.00196
    فالجذر يقع ضمن المجال [0.53907,0.54063] ، نأخذ منتصفه : 0.53985 فيكون:
    f(0.53985) = -0.00018

    وبما أن القيمة المطلقة للتابع عند 0.53985 أصغر من eps فإننا نعتمد هذا الجذر.

    أرجو أن يكون الدرس واضحاً وبانتظار أي استفسار

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

    ويا حبذا لو تم تقييم الموضوع من الأمر الموجود في أعلى الصفحة، لأعلم مدى فائدته.

    انتهى

    0 Not allowed!


    الملفات المرفقة

  6. [6]
    مهندس محمد الظبياني
    مهندس محمد الظبياني غير متواجد حالياً
    عضو فعال جداً


    تاريخ التسجيل: Feb 2006
    المشاركات: 185
    Thumbs Up
    Received: 2
    Given: 0

    Smile

    جزاك الله خير اخي عبدالجواد


    وربنا يعينك على الخير

    0 Not allowed!



  7. [7]
    zzz
    zzz غير متواجد حالياً
    عضو فعال


    تاريخ التسجيل: Nov 2006
    المشاركات: 66
    Thumbs Up
    Received: 0
    Given: 0
    جزاك الله كل خير و شكراً لك

    0 Not allowed!



  8. [8]
    محمود الصقار
    محمود الصقار غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Sep 2006
    المشاركات: 718
    Thumbs Up
    Received: 509
    Given: 21
    السلام عليكم و رحمة الله و بركاته

    جزاك الله خيرا أخى و أستاذى مهندس عبد الجواد

    أظن أن هذه المشكله تقابلنا كل يوم فى البرمجة , و هى إمتداد لطريقة ال trail and error

    و كم أنا معجب بعلمك العالى , و طريقة توصيلك للمعلومة , فجزاك الله خيرا

    و ننتظر منك التفاضل و التكامل العددى-نطمع فى أهل الكرم-

    محمود الصقار

    0 Not allowed!



  9. [9]
    HISHAM"
    HISHAM" غير متواجد حالياً
    عضو فعال جداً


    تاريخ التسجيل: May 2009
    المشاركات: 183
    Thumbs Up
    Received: 93
    Given: 15
    أخي عبد الجواد بارك الله فيك أرجو منك أن تتابع في طرح هذه المواضيع المهمة

    0 Not allowed!



  10. [10]
    عبد الجواد
    عبد الجواد غير متواجد حالياً
    عضو متميز


    تاريخ التسجيل: Aug 2006
    المشاركات: 507
    Thumbs Up
    Received: 10
    Given: 0
    السلام عليكم:

    شكراً لكم على المتابعة.

    بالنسبة للطريقة السابقة، لا أحب تسميتها التجربة والخطأ (Trial and Error)، لأن هذا المصطلح يعني وجود تدخل من المستخدم، أي يفرض قيمة على أنها حل، فإن تحقق كان هو، وإلا يفرض قيمة أخرى بناءً على افتراضاته السابقة ثم يتحقق وهكذا.
    أما طريقة التنصيف مثلاً (أو الطرق الأخرى التي أشرت إلى أسمائها) فهي طرق تتقارب من الحل وفق منهج معين، وتختلف فيما بينها في سرعة التقارب، فبعضها يعطي الحل بعد محاولتين مثلاً وبعضها بعد ست محاولات من أجل نفس المجال، ولكن هذه المحاولات لا نسميها تجربة وخطأ أو هكذا أظن.
    وربما أقوم بشرح إحدى الطرق الأخرى وهي طريقة نيوتون رافسون فهي طريقة فعالة جداً وتقترب من الحل بسرعة بعد تحديد مجال الجذر، ولكن أحد سيئاتها أنها أحياناً تبتعد عنه!! وهذه السيئة غير موجودة في طريقة التنصيف المذكورة أعلاه.

    بالنسبة للتفاضل والتكامل، سأحاول إن شاء الله أن أقوم بشرحهما في مواضيع لاحقة، مع أمثلة وبرنامج أيضاً.

    0 Not allowed!



  
صفحة 1 من 3 12 3 الأخيرةالأخيرة
الكلمات الدلالية لهذا الموضوع

عرض سحابة الكلمة الدلالية

RSS RSS 2.0 XML MAP HTML