ParametricNDSolveValue로 복잡한 미분 방정식 풀기
함수에 대한 복잡한 미분 방정식을 풀려고합니다. $S(u,v)$ 매개 변수에 따라 $\omega$. 코드는 다음과 같습니다.
ClearAll["Global`*"]
m = 100;
L = 2;
r[u_, v_] = 2 m (1 + ProductLog[- ((u v)/E)]);
F[u_, v_] = (32 m^3)/r[u, v]^3 Exp[-(r[u, v]/(2 m))];
Vz[u_, v_] = FullSimplify [-2 (D[F[u, v], u] D[F[u, v], v])/F[u, v] +
4 D[r[u, v], u, v]/r[u, v] + 2/F[u, v] D[F[u, v], u, v] +
2/F[u, v] D[F[u, v], u] D[r[u, v], v] +
2/F[u, v] D[F[u, v], v] D[r[u, v], u]];
Z[u_, v_] = Exp[-I (u + v)/2 ω] S[u, v];
sol = ParametricNDSolveValue[{D[Z[u, v], u, v] +
F[u, v] (L (L + 1))/r[u, v]^2 Z[u, v] + Z[u, v] Vz[u, v] == 0,
S[u, -1] == 1, S[1, v] == 1},
S, {u, 1, 100}, {v, -100, -1}, ω]
오류가 발생합니다
ParametricNDSolveValue :: mconly : "! ("IDA ") 메소드의 경우 기계 실제 코드 만 사용할 수 있습니다. 복잡한 값 또는 부동 소수점 예외 이상으로 계속할 수 없습니다."
따라서 Mathematica는 실수를 예상하지만 대신 복소수를 찾습니다. 미분 방정식을 어떻게 풀 수 있습니까?
답변
1 bbgodfrey
이 질문 은를 Z
대신 풀고 S
PDE를 실수와 허수 부분으로 나누고 나중에 S
원하는 경우 구성 하여 해결할 수 있습니다 .
solr[ω_] := NDSolveValue[{D[Z[u, v], u, v] +
F[u, v] (L (L + 1))/r[u, v]^2 Z[u, v] + Z[u, v] Vz[u, v] == 0,
Z[u, -1] == Cos[1/2 (-1 + u) ω], Z[1, v] == Cos[1/2 (1 + v) ω]},
Z, {u, 1, 2}, {v, -2, -1}]
soli[ω_] := NDSolveValue[{D[Z[u, v], u, v] +
F[u, v] (L (L + 1))/r[u, v]^2 Z[u, v] + Z[u, v] Vz[u, v] == 0,
Z[u, -1] == -Sin[1/2 (-1 + u) ω], Z[1, v] == -Sin[1/2 (1 + v) ω]},
Z, {u, 1, 2}, {v, -2, -1}]
zr = solr[1];
Plot3D[zr[u, v], {u, 1, 2}, {v, -2, -1}, PlotRange -> All,
ImageSize -> Large, AxesLabel -> {u, v, z}, LabelStyle -> {15, Black, Bold}]
zi = soli[1];
Plot3D[zi[u, v], {u, 1, 2}, {v, -2, -1}, PlotRange -> All,
ImageSize -> Large, AxesLabel -> {u, v, z}, LabelStyle -> {15, Black, Bold}]
두 개의 노트. 첫째, 솔루션이 기하 급수적으로 커지고 실패 하기 때문에 u
및 의 통합 범위 v
가 크게 감소했습니다 Plot3D
. 둘째, and ParametricNDSolveValue
대신 사용 하면 커널이 충돌합니다.SetDelayed
NDSolveValue