طريقة برنت

في التحليل العددي ، تُعدّ طريقة برنت خوارزمية هجينة لإيجاد الجذور، تجمع بين طريقة التنصيف ، وطريقة القاطع ، والاستيفاء التربيعي العكسي . تتميز هذه الطريقة بموثوقية التنصيف، ولكنها قد تكون سريعة كبعض الطرق الأقل موثوقية. تحاول الخوارزمية استخدام طريقة القاطع أو الاستيفاء التربيعي العكسي، نظرًا لتقاربهما السريع، إن أمكن، ولكنها تعود إلى طريقة التنصيف الأكثر موثوقية عند الضرورة. تُنسب طريقة برنت إلى ريتشارد برنت [ 1 ] ، وهي مبنية على خوارزمية سابقة لثيودوروس ديكر [ 2 ] . ولذلك، تُعرف هذه الطريقة أيضًا باسم طريقة برنت-ديكر .

تشمل التحسينات الحديثة على طريقة برنت طريقة تشاندرباتلا، وهي أبسط وأسرع للدوال المسطحة حول جذورها؛ [ 3 ] [ 4 ] طريقة ريدرز ، التي تقوم بعمليات استيفاء أسية بدلاً من التربيعية مما يوفر صيغة مغلقة أبسط للتكرارات؛ وطريقة ITP وهي طريقة هجينة بين regula-falsi و bisection والتي تحقق ضمانات مثلى في أسوأ الحالات والتقارب.

طريقة ديكر

تعود فكرة الجمع بين طريقة التنصيف وطريقة القاطع إلى ديكر (1969) .

لنفترض أننا نريد حل المعادلة f ( x ) = 0. كما هو الحال في طريقة التنصيف، نحتاج إلى تهيئة طريقة ديكر بنقطتين، ولتكن a₀ و b₀ ، بحيث تكون إشارات f ( a₀ ) و f ( b₀ ) متعاكسة. إذا كانت f متصلة على الفترة [ a₀ , b₀ ]، فإن نظرية القيمة المتوسطة تضمن وجود حل بين a₀ و b₀ .

تتضمن كل عملية تكرار ثلاث نقاط:

  • b k هو التكرار الحالي، أي التخمين الحالي لجذر f .
  • النقطة a <sub>k</sub> هي "النقطة المقابلة"، أي النقطة التي يكون فيها لكل من f ( a <sub>k</sub> ) و f ( b<sub> k</sub> ) إشارتان متعاكستان، وبالتالي فإن الفترة [ a <sub>k</sub> , b<sub> k</sub> ] تحتوي على الحل. علاوة على ذلك، يجب أن تكون القيمة المطلقة لـ f ( b<sub> k </sub> ) أقل من أو تساوي القيمة المطلقة لـ f ( a <sub>k</sub> )|، مما يجعل b <sub>k</sub> تخمينًا أفضل للحل المجهول من a <sub>k</sub> .
  • b k 1 هو التكرار السابق (بالنسبة للتكرار الأول، يتم تعيين b k 1 = a 0 ).

يتم حساب قيمتين مؤقتتين للتكرار التالي. يتم الحصول على القيمة الأولى عن طريق الاستيفاء الخطي، المعروف أيضًا باسم طريقة القاطع:

s={بك-بك-بك-1و(بك)-و(بك-1)و(بك)،لو و(بك)و(بك-1)مخلاف ذلك {\displaystyle s={\begin{cases}b_{k}-{\frac {b_{k}-b_{k-1}}{f(b_{k})-f(b_{k-1})}}f(b_{k}),&{\mbox{if }}f(b_{k})\neq f(b_{k-1})\\m&{\mbox{otherwise }}\end{cases}}}

أما الثانية فتُعطى بطريقة التنصيف.

م=أك+بك2.{\displaystyle m={\frac {a_{k}+b_{k}}{2}}.}

إذا كانت نتيجة طريقة القاطع، s ، تقع تمامًا بين b k و m ، فإنها تصبح التكرار التالي ( b k +1 = s )، وإلا يتم استخدام نقطة المنتصف ( b k +1 = m ).

ثم، تُختار قيمة النقطة المقابلة الجديدة بحيث يكون لكل من f(ak+1) و f(bk+1) إشارتان متعاكستان. إذا كان لكل من f(ak ) و f ( bk + 1 ) إشارتان متعاكستان ، فإن النقطة المقابلة تبقى كما هي : ak + 1 = ak . وإلا ، فإن لكل من f ( bk + 1 ) و f ( bk ) إشارتان متعاكستان، فتصبح النقطة المقابلة الجديدة ak + 1 = bk .

وأخيرًا، إذا كان | f ( a k +1 )| < | f ( b k +1 )|، فمن المحتمل أن يكون a k +1 تخمينًا أفضل للحل من b k +1 ، وبالتالي يتم تبديل قيم a k +1 و b k +1 .

بهذا ينتهي وصف دورة واحدة من طريقة ديكر.

تُحقق طريقة ديكر أداءً جيدًا إذا كانت الدالة f ذات سلوك جيد نسبيًا. مع ذلك، توجد حالات تستخدم فيها كل تكرار طريقة القاطع، لكن التكرارات b<sub> k</sub> تتقارب ببطء شديد (على وجه الخصوص، قد تكون قيمة | b <sub>k</sub> - b <sub>k</sub> - 1 | صغيرة جدًا). ​​في هذه الحالة، تتطلب طريقة ديكر عددًا أكبر بكثير من التكرارات مقارنةً بطريقة التنصيف.

طريقة برنت

اقترح برنت (1973) تعديلًا بسيطًا لتجنب مشكلة طريقة ديكر. أضاف اختبارًا إضافيًا يجب تحقيقه قبل قبول نتيجة طريقة القاطع كقيمة تكرارية تالية. يجب تحقيق متباينتين في آن واحد:

مع مراعاة التفاوت العددي المحدددلتا{\displaystyle \delta }إذا استخدمت الخطوة السابقة طريقة التنصيف، فإن المتباينة|دلتا|<|بك-بك-1|{\textstyle |\delta |<|b_{ك}-b_{k-1}|}يجب تثبيت الشرط لإجراء الاستيفاء، وإلا فسيتم تنفيذ طريقة التنصيف واستخدام نتيجتها في التكرار التالي.

إذا كانت الخطوة السابقة قد أجرت عملية استيفاء، فإن المتباينة|دلتا|<|بك-1-بك-2|{\textstyle |\delta |<|b_{k-1}-b_{k-2}|}يتم استخدامها بدلاً من ذلك لتنفيذ الإجراء التالي (لاختيار) الاستيفاء (عندما تكون المتباينة صحيحة) أو طريقة التنصيف (عندما لا تكون المتباينة صحيحة).

أيضًا، إذا استخدمت الخطوة السابقة طريقة التنصيف، فإن المتباينة|s-بك|<12|بك-بك-1|{\textstyle |s-b_{ك}|<{\begin{matrix}{\frac {1}{2}}\end{matrix}}|b_{k}-b_{k-1}|} يجب أن يتحقق الشرط، وإلا فسيتم تطبيق طريقة التنصيف واستخدام نتيجتها في التكرار التالي. إذا تم إجراء الاستيفاء في الخطوة السابقة، فإن المتباينة|s-بك|<12|بك-1-بك-2|{\textstyle |s-b_{k}|<{\begin{matrix}{\frac {1}{2}}\end{matrix}}|b_{k-1}-b_{k-2}|} يتم استخدام بدلاً من ذلك.

يضمن هذا التعديل أنه في التكرار رقم k ، سيتم تنفيذ خطوة التنصيف في أكثر من2سجل2(|بك-1-بك-2|/دلتا){\displaystyle 2\log _{2}(|b_{k-1}-b_{k-2}|/\delta )}تكرارات إضافية، لأن الشروط المذكورة أعلاه تجبر أحجام خطوات الاستيفاء المتتالية على الانخفاض إلى النصف كل تكرارين، وبعد ذلك على الأكثر2سجل2(|بك-1-بك-2|/دلتا){\displaystyle 2\log _{2}(|b_{k-1}-b_{k-2}|/\delta )}في عدد التكرارات، سيكون حجم الخطوة أصغر مندلتا{\displaystyle \delta }وهذا يستدعي خطوة التنصيف. أثبت برنت أن طريقته تتطلب على الأكثر تكرارًا ، حيث N يرمز إلى عدد التكرارات لطريقة التنصيف. إذا كانت الدالة f منتظمة، فإن طريقة برنت ستعتمد عادةً على الاستيفاء التربيعي العكسي أو الاستيفاء الخطي، وفي هذه الحالة ستتقارب بشكل أسرع من الخطي .

علاوة على ذلك، تستخدم طريقة برنت الاستيفاء التربيعي العكسي بدلاً من الاستيفاء الخطي (كما هو مستخدم في طريقة القاطع). إذا كانت f ( k ) و f ( ak ) و f ( bk - 1 ) قيمًا مختلفة، فإن ذلك يزيد الكفاءة قليلاً. ونتيجة لذلك، يجب تغيير شرط قبول s (القيمة المقترحة إما عن طريق الاستيفاء الخطي أو الاستيفاء التربيعي العكسي): يجب أن تقع s بين ( 3ak + bk ) / 4 و bk .

الخوارزمية

أدخل a و b و (مؤشر إلى) دالة لـ  ثم احسب f ( a ). احسب f ( b ) إذا كانت f ( a ) + f ( b )  0 دالة الخروج لأن الجذر غير محاط بأقواس. إذا كان | f ( a )| < | f ( b )|، فقم بتبديل ( a , b ). إذا كان c := فقم بتعيين mflag. كرر حتى f ( b أو s ) = 0 أو | b - a | صغير بما يكفي (التقارب). إذا كان f ( a )f ( c ) و f ( b ) ≠ f ( c ) ،s:=أو(ب)و(ج)(و(أ)-و(ب))(و(أ)-و(ج))+بو(أ)و(ج)(و(ب)-و(أ))(و(ب)-و(ج))+جو(أ)و(ب)(و(ج)-و(أ))(و(ج)-و(ب)){\textstyle s:={\frac {af(b)f(c)}{(f(a)-f(b))(f(a)-f(c))}}+{\frac {bf(a)f(c)}{(f(b)-f(a))(f(b)-f(c))}}+{\frac {cf(a)f(b)}{(f(c)-f(a))(f(c)-f(b))}}}( استيفاء تربيعي عكسي ) وإلاs:=ب-و(ب)ب-أو(ب)-و(أ){\textstyle s:=b-f(b){\frac {b-a}{f(b)-f(a)}}}( طريقة القاطع ) نهاية الشرط إذا ( الشرط 1) s ليس بين(3أ+ب)/4{\displaystyle (3a+b)/4}و ب أو (الشرط 2) ( تم تعيين mflag و | s b | ≥ | b c |/2) أو (الشرط 3) ( تم مسح mflag و | s b | ≥ | c d |/2) أو (الشرط 4) ( تم تعيين mflag و | b c | < | δ |) أو (الشرط 5) ( تم مسح mflag و | c d | < | δ |) ثمs:=أ+ب2{\textstyle s:={\frac {a+b}{2}}}( طريقة التنصيف ) عيّن mflag وإلا امسح mflag نهاية الشرط احسب f ( s ) d : = c (يتم تعيين d لأول مرة هنا؛ لن يتم استخدامه أعلاه في التكرار الأول لأن mflag مُعيّن) c := b إذا كان f ( a ) f ( s ) < 0 فإن b := s وإلا a := s نهاية الشرط إذا كان | f ( a )| < | f ( b )| فإن تبديل ( a , b ) نهاية الشرط نهاية التكرار أخرج b أو s (أرجع الجذر)

مثال

لنفترض أننا نبحث عن صفر للدالة المعرفة بواسطة f ( x ) = ( x + 3)( x 1) 2 .

نأخذ [ a 0 , b 0 ] = [ 4, 4/3] كفترة أولية لدينا.

لدينا f ( a 0 ) = 25 و f ( b 0 ) = 0.48148 (جميع الأرقام في هذا القسم مقربة)، لذلك يتم استيفاء الشروط f ( a 0 ) f ( b 0 ) < 0 و | f ( b 0 )| ≤ | f ( a 0 )|.

رسم بياني للدالة f ( x ) = ( x + 3)( x - 1) 2
  1. في التكرار الأول، نستخدم الاستيفاء الخطي بين ( b - 1 , f ( b - 1 ) ) = ( a₀ , f ( a₀ ) ) = ( -4 , -25 ) و( b₀ , f ( b₀ )) = ( 1.33333 , 0.48148 ) ، ما ينتج عنه s = 1.23256. تقع هذه القيمة بين (3a₀ + b₀ ) / 4 و b₀ ، لذا فهي مقبولة. علاوة على ذلك، f ( 1.23256 ) = 0.22891، لذا نُعيّن a₁ = a₀ و b₁ = s = 1.23256 .
  2. في التكرار الثاني ، نستخدم الاستيفاء التربيعي العكسي بين ( a1 , f ( a1 ) ) = ( -4 , -25 ) و( b0 , f ( b0 ) ) = (1.33333, 0.48148) و( b1 , f ( b1 ) ) = ( 1.23256 , 0.22891). ينتج عن ذلك القيمة 1.14205، وهي تقع بين (3a1 + b1 ) / 4 و b1 . علاوة على ذلك، تتحقق المتباينة |1.14205 - b1 | ≤ | b0 - b - 1 | / 2 ، لذا تُقبل هذه القيمة. علاوة على ذلك، f (1.14205) = 0.083582، لذلك نضع a 2 = a 1 و b 2 = 1.14205.
  3. في التكرار الثالث ، نستخدم الاستيفاء التربيعي العكسي بين ( a₂ , f ( a₂ ) ) = ( -4 , -25 ) و( b₁ , f ( b₁ ) ) = (1.23256, 0.22891) و( b₂ , f ( b₂ ) ) = ( 1.14205 , 0.083582). ينتج عن ذلك القيمة 1.09032، والتي تقع بين (3a₂ + b₂ ) / 4 و b₂ . ولكن هنا يتدخل شرط برنت الإضافي: المتباينة |1.09032 b₂ | ≤ | b₁ b₀ | / 2 غير محققة، لذا تُرفض هذه القيمة. بدلاً من ذلك، يتم حساب نقطة المنتصف m = 1.42897 للفترة [ a 2 , b 2 ]. لدينا f ( m ) = 9.26891، لذا نضع a 3 = a 2 و b 3 = 1.42897.
  4. في التكرار الرابع ، نستخدم الاستيفاء التربيعي العكسي بين ( a₃ , f ( a₃ ) ) = (-4, -25) و(b₂, f ( b₂ ) ) = ( 1.14205 , 0.083582 ) و ( b₃, f(b₃ ) ) = ( -1.42897 , 9.26891 ). ينتج عن ذلك القيمة 1.15448، وهي ليست ضمن الفترة بين (3a₃ + b₃ ) / 4 و b₃ . لذا ، نستبدلها بنقطة المنتصف m = -2.71449 . لدينا f ( m ) = 3.93934، لذلك نُعيّن a₄ = a₃ و b₄ = -2.71449 .
  5. في التكرار الخامس، ينتج عن الاستيفاء التربيعي العكسي القيمة −3.45500، والتي تقع ضمن الفترة المطلوبة. مع ذلك، كان التكرار السابق خطوة تنصيف، لذا يجب أن تتحقق المتباينة |−3.45500 − b₄| ≤ |b₄ − b₃ | / 2. هذه المتباينة خاطئة ، لذا نستخدم نقطة المنتصف m = −3.35724 . لدينا f ( m ) = −6.78239 ، لذا تصبح m نقطة التقابل الجديدة ( a₅ = −3.35724 ) ويبقى التكرار كما هو ( b₅ = b₄ ) .
  6. في التكرار السادس، لا يمكننا استخدام الاستيفاء التربيعي العكسي لأن b₅ = b₄ . لذا، نستخدم الاستيفاء الخطي بين ( a₅ , f ( a₅ ) ) = ( -3.35724 , -6.78239 ) و( b₅ , f ( b₅ ) ) = ( -2.71449 , 3.93934 ) . والنتيجة هي s = -2.95064 ، والتي تحقق جميع الشروط . ولكن بما أن قيمة التكرار لم تتغير في الخطوة السابقة، فإننا نرفض هذه النتيجة ونعود إلى طريقة التنصيف. نقوم بتحديث s = -3.03587 ، و f ( s ) = -0.58418 .
  7. في التكرار السابع، يمكننا استخدام الاستيفاء التربيعي العكسي مرة أخرى. والنتيجة هي s = −3.00219 ، والتي تحقق جميع الشروط. الآن، f ( s ) = −0.03515 ، لذا نضع a₇ = b₆ و b₇ = −3.00219 ( يتم تبديل a₇ و b₇ بحيث يتحقق الشرط |f ( b₇ ) | ≤ | f(a₇ ) | ) . ( صحيح : الاستيفاء الخطي ) s=-2.99436،و(s)=0.089961{\displaystyle s=-2.99436,f(s)=0.089961})
  8. في التكرار الثامن، لا يمكننا استخدام الاستيفاء التربيعي العكسي لأن a b6. الاستيفاء الخطي يعطي s = 2.99994، وهو مقبول. ( صحيح  : s=-2.9999،و(s)=0.0016{\displaystyle s=-2.9999,f(s)=0.0016})
  9. في التكرارات التالية، يتم الاقتراب بسرعة من الجذر x = − 3: b 9 = 3 + 6 × 10 8 و b 10 = 3 3 × 10 15. ( صحيح  : التكرار 9  : f ( s ) = −1.4 × 10 −7 ، التكرار 10  : f ( s ) = 6.96 × 10 −12 )

التطبيقات

مراجع

  1. برنت 1973
  2. ديكر 1969
  3. تشاندرباتلا، تيروباتي ر. (1997). "خوارزمية هجينة جديدة تربيعية/تنصيفية لإيجاد صفر دالة غير خطية دون استخدام المشتقات". التقدم في برمجيات الهندسة . 28 (3): 145-149 . doi : 10.1016/S0965-9978(96)00051-8 .
  4. "عشر خوارزميات صغيرة، الجزء 5: الاستيفاء التربيعي للقيم القصوى وطريقة تشاندرباتلا - جيسون ساكس" .
  • برنت، آر بي (1973)، "الفصل 4: خوارزمية ذات تقارب مضمون لإيجاد صفر دالة"، خوارزميات للتصغير بدون مشتقات ، إنجلوود كليفس، نيوجيرسي: برنتيس هول، ISBN 0-13-022335-2
  • ديكر، تي جيه (1969)، "إيجاد الصفر باستخدام الاستيفاء الخطي المتتالي"، في ديجون، ب.؛ هنريسي، ب. (محرران)، الجوانب البنائية للنظرية الأساسية للجبر ، لندن: وايلي-إنترساينس، ISBN 978-0-471-20300-1

للمزيد من القراءة

  • أتكينسون، كيندال إي. (1989). "القسم 2.8". مقدمة في التحليل العددي (  الطبعة الثانية). جون وايلي وأولاده. ISBN 0-471-50023-2.
  • بريس، دبليو إتش؛ تيوكولسكي، إس إيه؛ فيترلينغ، دبليو تي؛ فلانيري، بي بي (2007). "القسم 9.3. طريقة فان وينغاردن-ديكر-برنت" . وصفات عددية: فن الحوسبة العلمية (  الطبعة الثالثة). نيويورك: مطبعة جامعة كامبريدج. ISBN 978-0-521-88068-8أُرشف من المصدر الأصلي بتاريخ 11 أغسطس 2011. تم الاطلاع عليه بتاريخ 28 فبراير 2012 .
  • ألفيلد، جنرال إلكتريك؛ بوترا، FA؛ شي ، ييكسون (سبتمبر 1995). "الخوارزمية 748: إحاطة أصفار الدوال المستمرة" . معاملات ACM على البرامج الرياضية . 21 (3): 327-344 . دوى : 10.1145 / 210089.210111 . S2CID 207192624 .