Cara terbaik untuk menyelesaikan persamaan non linier parametrik yang sangat rumit dengan mengurangi / menyelesaikan dll
Saya memiliki fungsi nonlinier parametrik yang secara harfiah merupakan mimpi buruk. Saya tahu akar itu ada, mereka nyata dan dua parameternya, p,e
keduanya positif. Apa yang saya harapkan dari mathematica adalah mendapatkan solusi (dalam bentuk root, tidak ada bentuk tertutup) tetapi bahkan membiarkan program bekerja sepanjang malam saya menyerah. Saya tidak mengerti jika saya membingkai masalah bukan dengan cara yang efisien, itu adalah pc saya yang memerlukan peningkatan serius atau masalah yang terlalu sulit untuk metode seperti Kurangi atau Selesaikan. Jika kasusnya yang terakhir, saya rasa saya ditakdirkan ... Ada petunjuk tentang dua lainnya? Terima kasih untuk bantuannya.
Upaya saya dan persamaannya:
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*)
Jawaban
Jika Anda puas dengan jawaban perkiraan, maka Anda dapat mencoba menggunakan NDSolveValue. Fungsi Anda:
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)])
Untuk menggunakannya NDSolveValue, kita perlu mengetahui syarat batas. Sebagai contoh, inilah nilai x
saat p
ini 1
:
x1 = x /. Block[{p=1}, First @ Solve[f[x] == 0, x]]
Akar [256006399839996 + 1023948800640 e + (255942399200020 - 3071999998080 e) # 1 + (511955203840004 + 2304217598880 e) # 1 ^ 2 + (1279846402079976 - 2048025605760 e) # 193 ^ 3 + (-9602799842 (192129617159615 + 4095897593600 e) # 1 ^ 5 + (-384151995680463 - 512486397600 e) # 1 ^ 6 + (-3455678391520375 + 2047846414080 e) # 1 ^ 7 + (2880427177039798 - 332788480 e) # 1 ^ 7 + (2880427177039798 - 332788480 e) # 1 ^ 7 + (2880427177039798 - 332788480 e) # 1 ^ 7 + (2880427177039798 - 332788480 e) # 1 ^ 7 + 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]
Sekarang, kita bisa menggunakan 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, Null}
Periksa beberapa sampel acak:
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
Visualisasi:
Plot3D[sol[p,e], {p,.1,100}, {e,.1,10000}]

FWIW, ini solusi setengahnya: Ambil pembilangnya, rasionalkan sehingga menjadi polinomial, dan temukan akarnya. Apa yang tersisa untuk dilakukan adalah memilih mana yang positif kapan p
dan e
positif. Langkah ini membutuhkan waktu lama (jika bisa dilakukan sama sekali), kecuali jika nilai numerik tertentu diberikan kepada p
dan 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)) *)
Periksa ada dua istilah (yang pertama jelas mengandung akar):
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> *)
Akar ini berisi solusi asing, dan tampaknya perlu mengganti nilai numerik agar parameter dapat bekerja dengannya. Jika pendekatan seperti itu berguna, maka mungkin lebih baik mengganti parameter f[x]
dan menangani persamaan yang dihasilkan f[x] == 0
.