İndir / çöz vb. İle aptalca karmaşık parametrik doğrusal olmayan denklemi çözmenin en iyi yolu
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,e
ikisi 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
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, x
ne 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}]
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 p
ve e
olumludur. (Hepsi yapılabilir varsa) Bu adım, belirli bir sayısal değerler verilir dışında, zaman alır p
ve 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] == 0
daha iyi olabilir.