level 6
薛定谔那只该死的喵嗷
楼主
我定义了一个分段函数Lens[x_,y_],其中包含了一个Subscript[Y, i ],i取不同值时Y[]是不同的函数。但是某些Y[]的计算数值会产生一个很小的虚部 0.000000i,在运行我的分段函数时会提示我 “Less::nord: 尝试使用 37344.8 -3240.47 I 进行无效的比较.”
之后我将我的分段函数Lens[x_,y_]化为了数组Lensarray然后用MatrixPlot函数画图。画的图是正常的。 虚部按理来说是个及其小的值,如果我将Y[]前面加上Abs[]或者用Chop[]函数最后画出来的图应该是没有影响的,但是实际上画出来的图差别很大。所以我猜测在某些点虚部是很大的影响到了分段函数的判断,但是单独对Y[]进行Plot画函数能画出来,这就说明Y[]的虚部小到可以忽略它。所以现在我不太清楚为什么分段函数在进行类似这种比较:Yrange[[i]] <= y < Yrange[[i + 1]]会提示是无效的比较。
之后我查看了Lensarray的矩阵,发现矩阵很正常,但是当我用Lensarray这个矩阵进行离散傅里叶傅里叶变换时就会提示我 "Lensarray不是一个非空列表,也不是由数值量组成的矩形数组"。我查看了报错的堆栈追踪,发现是数组中有的地方是一个分段函数的形式,所以进行傅里叶变换才会出错,但是我查看过Lensarray这个矩阵它确确实实是一个数值的数组,没有分段函数。就感觉很邪门,有人知道怎么解决这个问题么?
Lens[x_, y_]函数:
Lens[x_, y_] = Piecewise[ Join[{Len1}, Table[{χ, Subscript[Y, i] + Apcie[[i]] <= y < Subscript[Y, i + 1] + Apcie[[i + 1]] && Yrange[[i]] <= y < Yrange[[i + 1]] && -50 <= x <= 50}, {i, 1, 61, 2}]]];
Lensarray数组函数和画图:
\[Delta] = 1.2
13122680501
3586 10^-6;
\[Beta] = 4.75349804 10^-8;
\[Chi] = -2 \[Delta] + 2 I \[Beta];
\[Delta]1 = -1.2
13122680501
3586 10^-6;
\[Delta]2 = (1.2
13122680501
3586 10^-6)/(1 - 1.2
13122680501
3586 10^-6);
f = 5151736.70155;
LensLength = Yrange[[62]];
Table[Subscript[Axr,
i] = ((-1)/9) (q1[[i]]^2 - q1[[i]] q2[[i]] + q2[[i]]^2), {i, 1,
62}];
Table[Subscript[Bxr, i] =
Module[{\[Delta]s}, \[Delta]s =
If[OddQ[i], \[Delta]1, \[Delta]2]; ((-(q1[[i]] -
q2[[i]]))/(4 \[Delta]s)) x^2 + (1/54) (q1[[i]] +
q2[[i]]) (9 q1 [[i]] q2[[i]] - 2 (q1[[i]] + q2[[i]])^2)], {i,
1, 62}];
Table[Subscript[\[Beta], i] =
ArcCos[Subscript[Bxr, i]/(-Subscript[Axr, i])^((3/2))], {i, 1, 62}];
Table[Subscript[Y,
i] = -(2 Sqrt[-Subscript[Axr, i]] Cos[
Subscript[\[Beta], i]/3] - (1/3) (q1[[i]] + q2[[i]])), {i, 1,
62}];
(*Plot[-Subscript[Y, 83],{x,-37,37}]*)
Len1 = {\[Chi],
0 <= y < (Sqrt[x^2 + f^2] - f)/\[Delta] + 10 &&
0 < y < Yrange[[1]] && -50 <= x <= 50};
Lens[x_, y_] =
Piecewise[
Join[{Len1},
Table[{\[Chi],
Subscript[Y, i] + Apcie[[i]] <= y <
Subscript[Y, i + 1] + Apcie[[i + 1]] &&
Yrange[[i]] <= y < Yrange[[i + 1]] && -50 <= x <= 50}, {i, 1,
61, 2}]]];
(*Lens[x_,y_]=Piecewise[Join[{Len1},Table[{\[Chi],Subscript[Y, \
i]+Apcie\[LeftDoubleBracket]i\[RightDoubleBracket]\[LessEqual]y<\
Subscript[Y, \
i+1]+Apcie\[LeftDoubleBracket]i+1\[RightDoubleBracket]&&Yrange\
\[LeftDoubleBracket]i\[RightDoubleBracket]\[LessEqual]y<Yrange\
\[LeftDoubleBracket]i+1\[RightDoubleBracket]&&-50\[LessEqual]x\
\[LessEqual]50},{i,1,61,2}]]];*)
Lensarray = Array[Lens, {Nx, Nz}, {{xStart, xEnd}, {0, Maxz}}];
MatrixPlot[Abs[Lensarray], ColorFunction -> "Monochrome",
PlotLegends -> Automatic]
AbsoluteTime[] - time
2021年04月14日 06点04分
1
之后我将我的分段函数Lens[x_,y_]化为了数组Lensarray然后用MatrixPlot函数画图。画的图是正常的。 虚部按理来说是个及其小的值,如果我将Y[]前面加上Abs[]或者用Chop[]函数最后画出来的图应该是没有影响的,但是实际上画出来的图差别很大。所以我猜测在某些点虚部是很大的影响到了分段函数的判断,但是单独对Y[]进行Plot画函数能画出来,这就说明Y[]的虚部小到可以忽略它。所以现在我不太清楚为什么分段函数在进行类似这种比较:Yrange[[i]] <= y < Yrange[[i + 1]]会提示是无效的比较。
之后我查看了Lensarray的矩阵,发现矩阵很正常,但是当我用Lensarray这个矩阵进行离散傅里叶傅里叶变换时就会提示我 "Lensarray不是一个非空列表,也不是由数值量组成的矩形数组"。我查看了报错的堆栈追踪,发现是数组中有的地方是一个分段函数的形式,所以进行傅里叶变换才会出错,但是我查看过Lensarray这个矩阵它确确实实是一个数值的数组,没有分段函数。就感觉很邪门,有人知道怎么解决这个问题么?
Lens[x_, y_]函数:
Lens[x_, y_] = Piecewise[ Join[{Len1}, Table[{χ, Subscript[Y, i] + Apcie[[i]] <= y < Subscript[Y, i + 1] + Apcie[[i + 1]] && Yrange[[i]] <= y < Yrange[[i + 1]] && -50 <= x <= 50}, {i, 1, 61, 2}]]];
Lensarray数组函数和画图:
\[Delta] = 1.2
13122680501
3586 10^-6;
\[Beta] = 4.75349804 10^-8;
\[Chi] = -2 \[Delta] + 2 I \[Beta];
\[Delta]1 = -1.2
13122680501
3586 10^-6;
\[Delta]2 = (1.2
13122680501
3586 10^-6)/(1 - 1.2
13122680501
3586 10^-6);
f = 5151736.70155;
LensLength = Yrange[[62]];
Table[Subscript[Axr,
i] = ((-1)/9) (q1[[i]]^2 - q1[[i]] q2[[i]] + q2[[i]]^2), {i, 1,
62}];
Table[Subscript[Bxr, i] =
Module[{\[Delta]s}, \[Delta]s =
If[OddQ[i], \[Delta]1, \[Delta]2]; ((-(q1[[i]] -
q2[[i]]))/(4 \[Delta]s)) x^2 + (1/54) (q1[[i]] +
q2[[i]]) (9 q1 [[i]] q2[[i]] - 2 (q1[[i]] + q2[[i]])^2)], {i,
1, 62}];
Table[Subscript[\[Beta], i] =
ArcCos[Subscript[Bxr, i]/(-Subscript[Axr, i])^((3/2))], {i, 1, 62}];
Table[Subscript[Y,
i] = -(2 Sqrt[-Subscript[Axr, i]] Cos[
Subscript[\[Beta], i]/3] - (1/3) (q1[[i]] + q2[[i]])), {i, 1,
62}];
(*Plot[-Subscript[Y, 83],{x,-37,37}]*)
Len1 = {\[Chi],
0 <= y < (Sqrt[x^2 + f^2] - f)/\[Delta] + 10 &&
0 < y < Yrange[[1]] && -50 <= x <= 50};
Lens[x_, y_] =
Piecewise[
Join[{Len1},
Table[{\[Chi],
Subscript[Y, i] + Apcie[[i]] <= y <
Subscript[Y, i + 1] + Apcie[[i + 1]] &&
Yrange[[i]] <= y < Yrange[[i + 1]] && -50 <= x <= 50}, {i, 1,
61, 2}]]];
(*Lens[x_,y_]=Piecewise[Join[{Len1},Table[{\[Chi],Subscript[Y, \
i]+Apcie\[LeftDoubleBracket]i\[RightDoubleBracket]\[LessEqual]y<\
Subscript[Y, \
i+1]+Apcie\[LeftDoubleBracket]i+1\[RightDoubleBracket]&&Yrange\
\[LeftDoubleBracket]i\[RightDoubleBracket]\[LessEqual]y<Yrange\
\[LeftDoubleBracket]i+1\[RightDoubleBracket]&&-50\[LessEqual]x\
\[LessEqual]50},{i,1,61,2}]]];*)
Lensarray = Array[Lens, {Nx, Nz}, {{xStart, xEnd}, {0, Maxz}}];
MatrixPlot[Abs[Lensarray], ColorFunction -> "Monochrome",
PlotLegends -> Automatic]
AbsoluteTime[] - time
