الرياضيات:أخطاء FindRoot
-
27-10-2019 - |
سؤال
FindRoot[
27215. - 7.27596*10^-12 x + 52300. x^2 - 9977.4 Log[1. - 1. x] == 0
,
{x, 0.000001}
]
يتقارب إلى الحل {x -> -0.0918521}
ولكن كيف يمكنني جعل Mathematica يتجنب رسالة الخطأ التالية قبل الحل:
FindRoot::nlnum: The function value {Indeterminate} is not a list of numbers with dimensions {1} at {x} = {1.}. >>
أنا أستخدم FindRoot لحل بعض التعبيرات الفوضوية جدًا.أحيانًا أتلقى أيضًا الخطأ التالي، على الرغم من أن Mathematica ستظل تقدم إجابة، لكنني أتساءل عما إذا كانت هناك طريقة لتجنب ذلك أيضًا:
FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances. >>
المحلول
الحل الذي تحصل عليه ليس هو الحل الفعلي.تشير الرسالة إلى وجود خطأ ما و FindRoot
إرجاع القيمة الأخيرة لـ x
.هذا هو العنصر الأخير ضمن "مزيد من المعلومات" لـ FindRoot
:
- إذا لم ينجح FindRoot في إيجاد حل للدقة التي تحددها داخل
MaxIterations
الخطوات، تقوم بإرجاع أحدث تقريب للحل الذي تم العثور عليه.يمكنك بعد ذلك تطبيق FindRoot مرة أخرى، مع هذا التقريب كنقطة بداية.
على سبيل المثال، في هذه الحالة أيضًا لا يوجد حل:
FindRoot[x^2 + 1 == 0, {x, 1}]
سوف تحصل على FindRoot::jsing
تحذير و الرياضيات عائدات {x -> 0.}
(وهو التقريب الأحدث).
حالة مماثلة مثل هذه، ولكن مع Log
وظيفة:
FindRoot[1 + Log[1 + x]^2 == 0, {x, 2}]
يعطي FindRoot::nlnum
على غرار ما تراه والعودة {x -> 0.000269448}
(وهو أحدث تقريب في هذه الحالة).
هذه مؤامرة لنفس الوظيفة، لأغراض التوضيح:
إذا كنت تريد تضمين جذور معقدة، ففكر في هذا الجزء من الوثائق الخاصة بـ FindRoot
(ضمن "مزيد من المعلومات" أيضًا):
- يمكنك دائمًا إخبار FindRoot بالبحث عن الجذور المعقدة عن طريق إضافة 0.I إلى قيمة البداية.
لذا، على سبيل المثال، يمكنك أخذ قيمة ابتدائية بالقرب من جذر مركب واحد، كما يلي:
FindRoot[x^2 + 1 == 0, {x, 1 + 1. I}]
الذي يتقارب (بدون رسائل) ل {x -> 8.46358*10^-23 + 1. I}
(لذلك في الأساس I
).
أو بقيمة بداية بالقرب من الجذر المعقد الآخر:
FindRoot[x^2 + 1 == 0, {x, 1 - 1. I}]
سوف تحصل على الأساس -I
(على وجه الدقة تحصل عليه {x -> 8.46358*10^-23 - 1. I}
).
نصائح أخرى
لا يوجد حل حقيقي لهذه المعادلة.ينتهي الأمر بماثيماتيكا بالوصول إلى مكان قريب من الحد الأدنى للوظيفة ، ويبلغ عن هذا لأن هذا هو المكان الذي تتقارب فيه الخوارزمية. Genacodicetagpre
تحذرك ماثيماتيكا من هذا: Genacodicetagpre