سؤال

لدي المعادلة التالية:

f(N):  N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2));

أحتاج إلى إنشاء وظيفة تجدها lam للمحددة N.

الآن أفعل ذلك باستخدام حلقة بسيطة:

lam = 0.9999;
n = f(lam);
pow = 0;
delta = 0.1;
while(abs(N - n)) > 0.1 & pow < 10000)
    lam = lam - 0.001;
    n = f(lam)
    pow = pow+1;
end

كيف يمكنني حلها أكثر دقة وبدون استخدام الحلقات؟

هل كانت مفيدة؟

المحلول

اذا كنت تمتلك

N = ((1+lam)^3 )/ ((1-lam)*(1+lam^2))

ثم تعرف ذلك

(1+lam)^3 = N*(1-lam)*(1+lam^2)

لنفترض أنك كنت لتوسيع هذه الشروط؟ تتجمع في معادلة مكعب بسيطة ، مع معاملات حقيقية ، تساوي الصفر؟ هل هناك وظيفة ستحلها لك؟

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

نصائح أخرى

فيما يلي حل لـ N = 10 بواسطة Wolfram Alpha:

http://www.wolframalpha.com/input/?i=(1%2Bx^3)/((1-x)*(1%2Bx^2))%3D10

سيعمل الحل الجبري لحالتك الخاصة ، لأنه ليس من الصعب للغاية. المشكلة هي أنه ، بشكل عام ، تتطلب المعادلات غير الخطية حلاً تكراريًا: ابدأ بتخمين ، خطوة في اتجاه معين ، ونأمل أن تتقارب مع الحل. لا يمكنك حل المعادلات غير الخطية بشكل عام بدون التكرار والحلقات.

إعادة ترتيب المعادلة 0 = f(x)/g(x) (أين f و g هي كثير الحدود). ثم حل ل 0 = f(x). يجب أن يكون هذا سهلاً بما يكفي f سيكون مكعب (http://en.wikipedia.org/wiki/cubic_function#roots_of_a_cubic_function). في الواقع ، MATLAB لديه roots() وظيفة للقيام بذلك.

يشير التآمر إلى أنه بالنسبة إلى N إيجابي ، هناك حل واحد بالضبط في الفاصل الزمني [-1،1). يجب ان تراعي طريقة نيوتن, ، سوف تتلاقى مع صفر تخمين أولي بسرعة إلى حد ما.

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

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

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

هناك حل جبري لمشكلتك لمعظم قيم N. هنا هو الحل ، كما تم حلها بواسطة ولفرام ألفا:

if N+1!=0
   x = (20 N^3+18 N^2+3 sqrt(3) sqrt(16 N^6+32 N^5-20 N^4-72 N^3-9 N^2+54 N+27)-27 N-27)^(1/3)/(3 2^(1/3) (N+1))-(2^(1/3) (2 N^2+3 N))/(3 (N+1) (20 N^3+18 N^2+3 sqrt(3) sqrt(16 N^6+32 N^5-20 N^4-72 N^3-9 N^2+54 N+27)-27 N-27)^(1/3))+N/(3 (N+1))

نعم ، إنه قبيح.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top