ParametricNDSolveValue ile karmaşık diferansiyel denklemi çözme

Aug 18 2020

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

1 bbgodfrey Aug 20 2020 at 03:56

Bu soru , PDE'yi gerçek ve hayali parçalarına ayırmak Zyerine çözerek Sve daha sonra Sistenirse 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ığı uve vçözelti, aksi katlanarak büyürse, çünkü büyük ölçüde azaltılmıştır Plot3Dbaşarısız olur. İkincisi, ParametricNDSolveValueyerine kullanmak SetDelayedve NDSolveValueçekirdeğin çökmesine neden olur.