İndir / çöz vb. İle aptalca karmaşık parametrik doğrusal olmayan denklemi çözmenin en iyi yolu

Aug 16 2020

Kelimenin tam anlamıyla bir kabus olan parametrik doğrusal olmayan bir işleve sahibim. Köklerin var olduğunu biliyorum, bunlar gerçek ve iki parametrenin p,eikisi de pozitif. Mathematica'dan beklediğim şey bir çözüm bulmaktı (bir kök şeklinde, kapalı bir formda değil), ancak programın bütün gece çalışmasına izin vermekti bile. Sorunu verimli bir şekilde değil, benim bilgisayarımın ciddi yükseltmelere ihtiyacı olup olmadığını veya Reduce veya Solve gibi yöntemler için çok zor olan problemi anlayamıyorum. Eğer durum ikincisi ise, sanırım mahkumum ... Diğer ikisine dair bir ipucu var mı? Yardım için teşekkürler.

Girişimlerim ve denklem:

f[x_]:=(1/(8 (p^2+x^2)^3))p^2 (-2 p^6+p^5 (4-8 x)+2 p^3 (3-8 x) x^2-6 p x^4+p^4 (80000+2 x-9 x^2)+2 p^2 x (40000+60000 x+x^2-5 x^3)-3 x^3 (-80000+40000 x+x^3)+(4 Sqrt[10] e x (p^2+x^2)^2 (2 p x^3+p^4 (-2+3 x)+2 p^3 x (-3+4 x)+x^2 (-80000+40000 x+x^3)+2 p^2 (40000-60000 x-x^2+2 x^3)))/Sqrt[-e p^2 (-1+x) x^2 (p^2+x^2)^2 (-40000+p^2+2 p x+x^2)])
Reduce[f[x]==0 && x>=0 &&p>=0 && e>=0,x,Reals] (*stuck running*)
Solve[f[x]==0 && x>=0 &&p>=0 && e>=0,x,Reals] (*stuck running*)

Yanıtlar

2 CarlWoll Aug 18 2020 at 04:31

Yaklaşık bir cevaptan memnunsanız, kullanmayı deneyebilirsiniz NDSolveValue. İşleviniz:

f[x_] := (1/(8 (p^2+x^2)^3))p^2 (-2 p^6+p^5 (4-8 x)+2 p^3 (3-8 x) x^2-6 p x^4+p^4 (80000+2 x-9 x^2)+2 p^2 x (40000+60000 x+x^2-5 x^3)-3 x^3 (-80000+40000 x+x^3)+(4 Sqrt[10] e x (p^2+x^2)^2 (2 p x^3+p^4 (-2+3 x)+2 p^3 x (-3+4 x)+x^2 (-80000+40000 x+x^3)+2 p^2 (40000-60000 x-x^2+2 x^3)))/Sqrt[-e p^2 (-1+x) x^2 (p^2+x^2)^2 (-40000+p^2+2 p x+x^2)])

Kullanmak için NDSolveValuebir sınır koşulu bilmemiz gerekir. Örneğin, xne zaman değerinin pşu şekildedir 1:

x1 = x /. Block[{p=1}, First @ Solve[f[x] == 0, x]]

Kök [256006399839996 + 1023948800640 e + (255942399200020 - 3071999998080 e) # 1 + (511955203840004 + 2304217598880 e) # 1 ^ 2 + (1279846402079976 - 2048025605760 e) # 1 ^ 342 + (-9602799) (192129617159615 + 4095897593600 e) # 1 ^ 5 + (-384151995680463 - 512486397600 e) # 1 ^ 6 + (-3455678391520375 + 2047846414080 e) # 1 ^ 7 + (28804271770594992 - 332788480 e) # 125 ^ 8 + [[[397600] e) # 1 ^ 6 1024102385280 e) # 1 ^ 9 + (43199520578 + 256064008800 e) # 1 ^ 10 + (-14402879738 - 25598080 e) # 1 ^ 11 + (-359829 + 12802240 e) # 1 ^ 12 + 360087 # 1 ^ 13 + ( 9 + 160 e) # 1 ^ 14 + 9 # 1 ^ 15 &, 1]

Şimdi kullanabiliriz NDSolveValue:

sol = NDSolveValue[
    {
    D[f[x[p,e]]==0, p], x[1, e] == x1},
    x,
    {p,.1,100},
    {e,.1,10000},
    MaxStepFraction->.0005,
    PrecisionGoal->10
]; //AbsoluteTiming

{19.2292, Boş}

Bazı rastgele örnekleri kontrol edin:

Block[{p = 50, e = 200}, f[sol[p, e]]]
Block[{p = 10, e = 2000}, f[sol[p, e]]]

6,42413 * 10 ^ -9

8.0893 * 10 ^ -9

Görselleştirme:

Plot3D[sol[p,e], {p,.1,100}, {e,.1,10000}]

2 MichaelE2 Aug 17 2020 at 04:15

FWIW, işte yarım çözüm: Payı alın, bir polinom olması için rasyonelleştirin ve kökleri bulun. Ne yapmaya bırakıldığında olumlu olanları seçmektir pve eolumludur. (Hepsi yapılabilir varsa) Bu adım, belirli bir sayısal değerler verilir dışında, zaman alır pve e.

num = Simplify[ff, x >= 0 && p >= 0 && e >= 0] // Together // 
      Numerator // Simplify[#, x >= 0 && p >= 0 && e >= 0] & // 
    FactorList // #[[-1, 1]] & // Simplify
(*
p Sqrt[-e (-1 + x) (-40000 + p^2 + 2 p x + x^2)] (2 p^6 + 6 p x^4 + 
    p^5 (-4 + 8 x) + 2 p^3 x^2 (-3 + 8 x) + 
    p^4 (-80000 - 2 x + 9 x^2) + 3 x^3 (-80000 + 40000 x + x^3) + 
    2 p^2 x (-40000 - 60000 x - x^2 + 5 x^3)) - 
 4 Sqrt[10]
   e (2 p x^5 + 4 p^3 x^3 (-1 + 2 x) + p^6 (-2 + 3 x) + 
    2 p^5 x (-3 + 4 x) + p^2 x^3 (-80000 - 2 x + 5 x^2) + 
    x^4 (-80000 + 40000 x + x^3) + 
    p^4 (80000 - 120000 x - 4 x^2 + 7 x^3))
*)

İki terim olup olmadığını kontrol edin (ilki açıkça kökü içerir):

Length@num
(*  2  *)
rat = num*MapAt[-# &, num, 1] // Expand // Simplify
(*
e (p^2 (-1 + x) (-40000 + p^2 + 2 p x + x^2) (2 p^6 + 6 p x^4 + 
      p^5 (-4 + 8 x) + 2 p^3 x^2 (-3 + 8 x) + 
      p^4 (-80000 - 2 x + 9 x^2) + 3 x^3 (-80000 + 40000 x + x^3) + 
      2 p^2 x (-40000 - 60000 x - x^2 + 5 x^3))^2 + 
   160 e (2 p x^5 + 4 p^3 x^3 (-1 + 2 x) + p^6 (-2 + 3 x) + 
      2 p^5 x (-3 + 4 x) + p^2 x^3 (-80000 - 2 x + 5 x^2) + 
      x^4 (-80000 + 40000 x + x^3) + 
      p^4 (80000 - 120000 x - 4 x^2 + 7 x^3))^2)
*)
Solve[rat == 0, x]
(* <15 Root objects> *)

Bu kökler, gereksiz çözümler içerir ve bunlarla çalışmak için parametrelerin sayısal değerleri ikame etmesi gerektiği görülmektedir. Böyle bir yaklaşım yararlıysa, o zaman belki de parametreleri ikame etmek f[x]ve ortaya çıkan denklemle uğraşmak f[x] == 0daha iyi olabilir.