축소 / 해결 등으로 어리석게 복잡한 파라 메트릭 비선형 방정식을 해결하는 가장 좋은 방법
말 그대로 악몽 인 파라 메트릭 비선형 함수가 있습니다. 나는 뿌리가 존재한다는 것을 압니다. 그것들은 실제이고 두 매개 변수 p,e
는 모두 긍정적입니다. 내가 mathematica에서 기대했던 것은 해결책을 얻는 것이었지만 (근본 형태, 폐쇄 형태가 아님) 프로그램이 밤새도록 작동하도록 내버려 두었습니다. 문제를 효율적으로 구성하지 않는지, 심각한 업그레이드가 필요한 내 PC인지, 축소 나 해결 같은 방법으로는 너무 어려운 문제인지 이해할 수 없습니다. 후자의 경우라면 나는 운명이 아닐까 ... 다른 두 사람에 대한 힌트는? 도와 주셔서 감사합니다.
나의 시도와 방정식 :
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*)
답변
대략적인 답변에 만족한다면을 사용해 볼 수 NDSolveValue있습니다. 귀하의 기능 :
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)])
를 사용하려면 NDSolveValue경계 조건을 알아야합니다. 예를 들어, 다음의 값의 x
경우 p
이다는 1
:
x1 = x /. Block[{p=1}, First @ Solve[f[x] == 0, x]]
루트 [256006399839996 + 1023948800640 e + (255942399200020-3071999998080 e) # 1 + (511955203840004 + 2304217598880 e) # 1 ^ 2 + (1279846402079976-2048025605760 e) # 1 ^ 3 + (-960279984200093 + 1024166395840 e) # 1 ^ 4 + (192129617159615 + 4095897593600 e) # 1 ^ 5 + (-384151995680463-512486397600 e) # 1 ^ 6 + (-3455678391520375 + 2047846414080 e) # 1 ^ 7 + (2880427177039798-332788480 e) # 1 ^ 8 + (-576225624399594- 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]
이제 다음을 사용할 수 있습니다 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}
무작위 샘플 확인 :
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
심상:
Plot3D[sol[p,e], {p,.1,100}, {e,.1,10000}]
FWIW, 여기에 절반의 해결책이 있습니다. 분자를 가져다가 다항식이되도록 합리화하고 근을 찾습니다. 무엇을 위해 남아있는 것은 때 긍정적 인 사람을 선택하는 것입니다 p
및 e
긍정적입니다. 이 단계는 특정 숫자 값이 p
및에 제공되는 경우를 제외하고는 시간이 걸립니다 (아예 수행 할 수있는 경우) 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)) *)
두 개의 용어가 있는지 확인하십시오 (첫 번째 용어는 분명히 급진적).
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> *)
이러한 근에는 외부 솔루션이 포함되어 있으며 매개 변수가 작동하도록 숫자 값을 대체해야하는 것 같습니다. 이러한 접근 방식이 유용하다면 매개 변수를에서 대체 f[x]
하고 결과 방정식을 처리하는 f[x] == 0
것이 더 좋을 수 있습니다.