DSolve를 사용한 ODE 해결 문제
Sep 02 2020
첨부 된 코드로 2 차 비선형 ODE를 해결하려고합니다. DSolve에 대한 설명서를 살펴본 후 내가 뭘 잘못하고 있는지 모르겠습니다. 최상위 수준에서 Shift+ Enter를 수행하면 Mathemeatica는 입력 한 코드 만 반환합니다.
DSolve[
-x Derivative[1][y][x] - x Derivative[1][y][x]^3 +
y[x]* (1 + Derivative[1][y][x]^2) +
y[x]^2 y''[x] + (x^2 - R Sqrt[x^2 + y[x]^2]) y''[x] == 0,
y[x], x]
답변
2 MichaelE2 Sep 02 2020 at 06:30
이것이 도움이 될지 모르겠지만 변수를 극좌표로 변경하면 ODE DSolve가 처리 할 수 있습니다.
subs = Simplify@NestList[ (* change of variables *)
D[First@#, x] -> Dt[Last@#]/Dt[r[t] Cos[t]] &,
y[x] -> r[t] Sin[t], 2]~Join~
{x -> r[t] Cos[t]};
(* new ode *)
ode = -x*Derivative[1][y][x] - x*Derivative[1][y][x]^3 +
y[x]*(1 + Derivative[1][y][x]^2) +
y[x]^2*y''[x] + (x^2 - R*Sqrt[x^2 + y[x]^2])*y''[x] /. subs //
Together // Numerator // Simplify[#, r[t] > 0] &;
odes = FactorList[ode][[2 ;;, 1]] == 0 // Thread
(* the process yielded a spurious factor r[t] {r[t] == 0, r[t] (r[t] - R) r''[t] + (2 R - r[t]) r'[t]^2 + R r[t]^2 == 0} *)
dsol = DSolve[Last@odes, r, t]
(* {{r -> Function[{t}, InverseFunction[-I (ArcTanh[(R - #1)/Sqrt[ R^2 - 2 R #1 - C[1] #1^2]] - ArcTan[(-R - C[1] #1)/( Sqrt[C[1]] Sqrt[R^2 - 2 R #1 - C[1] #1^2])]/Sqrt[C[1]]) & ][t + C[2]]]}, {r -> Function[{t}, InverseFunction[ I (ArcTanh[(R - #1)/Sqrt[R^2 - 2 R #1 - C[1] #1^2]] - ArcTan[(-R - C[1] #1)/( Sqrt[C[1]] Sqrt[R^2 - 2 R #1 - C[1] #1^2])]/Sqrt[C[1]]) & ][t + C[2]]]}} *)
(저의 대칭 주석과 연결하기 위해 변수 변경은 t -> t + t0극좌표의 회전 인에서 시스템이 불변함을 보여줍니다 .)