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 "), केवल मशीन कोड उपलब्ध है। जटिल मानों के साथ या फ़्लोटिंग-पॉइंट अपवादों से परे जारी रखने में असमर्थ है"
इसलिए ऐसा लगता है कि गणितज्ञ वास्तविक संख्याओं की अपेक्षा करता है, लेकिन यह इसके बजाय जटिल संख्याओं का पता लगाता है। मैं अंतर समीकरण को कैसे हल कर सकता हूं?
जवाब
इस प्रश्न को पीडीए को उसके वास्तविक और काल्पनिक भागों में विभाजित करने के Z
बजाय हल करने S
और बाद में 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
विफल रहता है। दूसरा, ParametricNDSolveValue
इसके बजाय का उपयोग करके SetDelayed
और NDSolveValue
कर्नेल क्रैश होने का कारण बनता है।