ParametricNDSolveValue ile karmaşık diferansiyel denklemi çözme
Fonksiyon için karmaşık bir diferansiyel denklemi çözmeye çalışıyorum $S(u,v)$ parametreye bağlı olarak $\omega$. Kod:
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}, ω]
Hatayı alıyorum
ParametricNDSolveValue :: mconly: "Yöntem için! (" IDA "), yalnızca makine gerçek kodu kullanılabilir. Karmaşık değerlerle veya kayan nokta istisnalarının ötesinde devam edilemiyor"
Öyle görünüyor ki Mathematica gerçek sayılar bekliyor, ancak onun yerine karmaşık sayılar buluyor. Diferansiyel denklemi nasıl çözebilirim?
Yanıtlar
Bu soru , PDE'yi gerçek ve hayali parçalarına ayırmak Z
yerine çözerek S
ve daha sonra S
istenirse inşa ederek ele alınabilir .
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}]

İki not. İlk olarak, entegrasyon aralığı u
ve v
çözelti, aksi katlanarak büyürse, çünkü büyük ölçüde azaltılmıştır Plot3D
başarısız olur. İkincisi, ParametricNDSolveValue
yerine kullanmak SetDelayed
ve NDSolveValue
çekirdeğin çökmesine neden olur.