level 6
薛定谔那只该死的喵嗷
楼主
因为课题需要最近要解一个一阶含有11个函数的偏微分方程组,向学校解过这个方程组师兄和老师咨询了一下,他们是用的matlab,python,fotron等语言利用有限元或者有限差分法解的。了解到mathematica新增了一个NDSolve的函数功能,就想着尝试一下,因为这个方程组虽然函数多但是只是个一阶的,而且看到官方的帮助文档中有解耦合偏微分方程组的例子。Mathematica的解给出的是插值函数的形式,但是画图却是一片空白(因为函数中带有复数,所以最后画图时用了Abs函数;这个解是个光波的振幅项,最后需要取模平方)。
所以想请教下大家是NDSolve这个函数解不出这样的方程组还是说我的程序方面有问题,导致最后画出的图像是空白的。
以下是代码:
\[Theta] = 0; Subscript[N, A] = 6.022*10^23;
Subscript[r, 0] = 2.818/10^15;
\[Lambda] = 1.2398/20; f = 4.72;
Subscript[N, A] = 6.022*10^23;
Subscript[r, 0] = 2.818/10^13;
\[Lambda] = 1.2398/(19.5*10^7);
Subscript[f, 1] = 11.353;
Subscript[\[Rho], 1] = 2.33;
Subscript[A, 1] = (28.0855*1.66053886*10^3*Subscript[N, A])/10^27;
Subscript[\[Delta], 1] = (Subscript[N, A]/(2*Pi))*
Subscript[r, 0]*\[Lambda]^2*
Subscript[\[Rho], 1]*(Subscript[f, 1]/Subscript[A, 1]);
Subscript[f, 2] = 12.3246;
Subscript[\[Rho], 2] = 2.7;
Subscript[A, 2] = (26.981539*1.66053886*10^3*Subscript[N, A])/10^27;
Subscript[\[Delta], 2] = (Subscript[N, A]/(2*Pi))*
Subscript[r, 0]*\[Lambda]^2*
Subscript[\[Rho], 1]*(Subscript[f, 2]/Subscript[A, 2]);
Subscript[\[Mu], 1] = 2.9941*10^3; Subscript[\[Mu], 2] = 2.4456*10^3;
Subscript[bt, 1] = (\[Lambda]*Subscript[\[Mu], 1])/(4*Pi);
Subscript[bt, 2] = (\[Lambda]*Subscript[\[Mu], 2])/(4*Pi);
\[Chi]1 = -2*Subscript[\[Delta], 1] + 2*I*Subscript[bt, 1];
\[Chi]2 = -2*Subscript[\[Delta], 2] + 2*I*Subscript[bt, 2];
\[CapitalDelta]\[Chi] = \[Chi]1 - \[Chi]2;
Table[d1[f] = f*x^2 + 1, {f, 0, 5}];
Table[\[Beta][
b] = -2*((b*x)/f)*Sin[\[Theta]] - ((b*x)/(f*1000))^2, {b, -5, 5}];
Table[\[Chi][
a] = (\[CapitalDelta]\[Chi]/(2*I*a*Pi))*(1 - (-1)^
Abs[a]), {a, -10, -1}];
Table[\[Chi][
a] = (\[CapitalDelta]\[Chi]/(2*I*a*Pi))*(1 - (-1)^Abs[a]), {a, 1,
10}]; Table[\[Chi][a] = (\[Chi]1 + \[Chi]2)/2, {a, 0, 0}];
eqns = Join[
Table[(Sin[\[Theta]] + (h/(f*10^3))*x)*
D[Subscript[Y, h][x, z], x] +
Cos[\[Theta]]*D[Subscript[Y, h][x, z], z] ==
((I*Pi)/(\[Lambda]/10^4))*(\[Beta][h]*
Subscript[Y, h][x, z] +
Sum[\[Chi][h - l]*Subscript[Y, l][x, z], {l, -5,
5}]), {h, -5, 5}],
Table[Subscript[Y, h][x, 0] == 0, {h, -5, -1}],
Table[Subscript[Y, h][x, 0] == 0, {h, 1, 5}],
Table[Subscript[Y, h][x, 0] == 1, {h, 0, 0}]];
s = NDSolve[eqns,
Table[Subscript[Y, h][x, z], {h, -5, 5}], {x, 0, 30}, {z, 0, 30}]
Plot3D[Evaluate[Abs[Y[-1][x, z] /. s]], {x, 0, 30}, {z, 0, 30},
PlotLegends -> Automatic]





2020年12月31日 01点12分
1
所以想请教下大家是NDSolve这个函数解不出这样的方程组还是说我的程序方面有问题,导致最后画出的图像是空白的。
以下是代码:
\[Theta] = 0; Subscript[N, A] = 6.022*10^23;
Subscript[r, 0] = 2.818/10^15;
\[Lambda] = 1.2398/20; f = 4.72;
Subscript[N, A] = 6.022*10^23;
Subscript[r, 0] = 2.818/10^13;
\[Lambda] = 1.2398/(19.5*10^7);
Subscript[f, 1] = 11.353;
Subscript[\[Rho], 1] = 2.33;
Subscript[A, 1] = (28.0855*1.66053886*10^3*Subscript[N, A])/10^27;
Subscript[\[Delta], 1] = (Subscript[N, A]/(2*Pi))*
Subscript[r, 0]*\[Lambda]^2*
Subscript[\[Rho], 1]*(Subscript[f, 1]/Subscript[A, 1]);
Subscript[f, 2] = 12.3246;
Subscript[\[Rho], 2] = 2.7;
Subscript[A, 2] = (26.981539*1.66053886*10^3*Subscript[N, A])/10^27;
Subscript[\[Delta], 2] = (Subscript[N, A]/(2*Pi))*
Subscript[r, 0]*\[Lambda]^2*
Subscript[\[Rho], 1]*(Subscript[f, 2]/Subscript[A, 2]);
Subscript[\[Mu], 1] = 2.9941*10^3; Subscript[\[Mu], 2] = 2.4456*10^3;
Subscript[bt, 1] = (\[Lambda]*Subscript[\[Mu], 1])/(4*Pi);
Subscript[bt, 2] = (\[Lambda]*Subscript[\[Mu], 2])/(4*Pi);
\[Chi]1 = -2*Subscript[\[Delta], 1] + 2*I*Subscript[bt, 1];
\[Chi]2 = -2*Subscript[\[Delta], 2] + 2*I*Subscript[bt, 2];
\[CapitalDelta]\[Chi] = \[Chi]1 - \[Chi]2;
Table[d1[f] = f*x^2 + 1, {f, 0, 5}];
Table[\[Beta][
b] = -2*((b*x)/f)*Sin[\[Theta]] - ((b*x)/(f*1000))^2, {b, -5, 5}];
Table[\[Chi][
a] = (\[CapitalDelta]\[Chi]/(2*I*a*Pi))*(1 - (-1)^
Abs[a]), {a, -10, -1}];
Table[\[Chi][
a] = (\[CapitalDelta]\[Chi]/(2*I*a*Pi))*(1 - (-1)^Abs[a]), {a, 1,
10}]; Table[\[Chi][a] = (\[Chi]1 + \[Chi]2)/2, {a, 0, 0}];
eqns = Join[
Table[(Sin[\[Theta]] + (h/(f*10^3))*x)*
D[Subscript[Y, h][x, z], x] +
Cos[\[Theta]]*D[Subscript[Y, h][x, z], z] ==
((I*Pi)/(\[Lambda]/10^4))*(\[Beta][h]*
Subscript[Y, h][x, z] +
Sum[\[Chi][h - l]*Subscript[Y, l][x, z], {l, -5,
5}]), {h, -5, 5}],
Table[Subscript[Y, h][x, 0] == 0, {h, -5, -1}],
Table[Subscript[Y, h][x, 0] == 0, {h, 1, 5}],
Table[Subscript[Y, h][x, 0] == 1, {h, 0, 0}]];
s = NDSolve[eqns,
Table[Subscript[Y, h][x, z], {h, -5, 5}], {x, 0, 30}, {z, 0, 30}]
Plot3D[Evaluate[Abs[Y[-1][x, z] /. s]], {x, 0, 30}, {z, 0, 30},
PlotLegends -> Automatic]
















