JWDStructure

خوارزميات

خوارزميات - مقدمة + حل معادلة من الدرجة الثانية

مقدمة

بدايةً أود أن أقول أني ترددت قليلاً في وضع هذه المشاركة في ملتقى المهندسين المدنيين (قمت بكتابة هذا الموضوع في ملتقى المهندسين العرب) لأنها تخص جميع المهندسين، ولكن لكوني مهندساً مدنياً وسيكون تواصلي مع المهندسين المدنيين أكثر لذلك آثرت وضعها هنا، ولكن يبقى للمشرفين القرار النهائي في ترتيب المواضيع.

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

لماذا اخترت الخوارزميات؟

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

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

ماذا أقصد بالرياضيات العددية؟

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

ما هي الخوارزميات؟

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

يعود اسم الخوارزمية إلى عالم الرياضيات محمد بن موسى الخوارزمي الذي ابتكر مفهوم الخوارزمية وهو عالم مسلم أصله من خوارزم في خراسان.

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

مثال عن خوارزمية (إيجاد جذور معادلة من الدرجة الثانية):

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

1- نعيد ترتيب المعادلة لتصبح من الشكل:

a.x^2 + b.x + c = 0

حيث x هو المتحول و a,b,c ثوابت المعادلة.

ملاحظة: الرمز ^ يعني الرفع إلى قوة.

2- نحسب delta من المعادلة:

delta = b^2 - 4.a.c

3- نختبر قيمة delta:

  • إذا كانت delta أصغر من الصفر فليس للمعادلة جذور حقيقية (يمكن أن نتابع لإيجاد الجذور العقدية ولكن ليس هذا مجاله)
  •  أما إذا كانت delta = 0 فإن للمعادلة جذر مضاعف يحسب من العلاقة:

x1 = x2 = -b/2a

  • أما إذا كانت delta > 0 فإن للمعادلة جذران حقيقيان يحسبان من العلاقة.

x1 = (-b - sqr(delta)) / 2a
x2 = (-b + sqr(delta)) / 2a

حيث أن sqr يشير إلى الجذر التربيعي في لغة Visual Basic.

باتباعنا للخطوات السابقة أو الخوارزمية السابقة نستطيع حل معادلة من الدرجة الثانية.

وكما نلاحظ:

1- الخوارزمية يجب أن تكون واضحة وخالية من التعقيد.

2- يجب وجود قيم ابتدائية للخوارزمية وهي هنا ثوابت المعادلة a,b,c

برنامج بلغة فيجيوال بيسيك

يمكن كتابة برنامج بلغة فيجيوال بيسيك (في المرفق) لحل هذه المعادلة (يمكن تحويله بسهولة إلى أي لغة أخرى):

Public Type QuadraticSolution
    X1 As Single
    X2 As Single
End Type

Public Function QuadraticEquation(a As Single, b As Single, c As Single) _
                                    As QuadraticSolution

    Dim delta As Single, Result As QuadraticSolution
    delta = b ^ 2 - 4 * a * c
    If delta < 0 Then
        Err.Raise 1000, , "No real roots"
    ElseIf delta = 0 Then
        Result.X1 = -b / (2 * a)
        Result.X2 = Result.X1
    Else
        Result.X1 = (-b - Sqr(delta)) / (2 * a)
        Result.X2 = (-b + Sqr(delta)) / (2 * a)
    End If
    QuadraticEquation = Result

End Function

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

ملاحظة 2: يمكن دمج الشرطين الأخيرين في الخوارزمية في شرط واحد وهو إن كانت delta>=0 وتطبيق علاقات delta>0، والجواب نفسه.

تحميل