FDTD Script 命令学习-pinch

参考FDTD官网pinch命令介绍:
1、pinch命令功能:
(1)第一个语法out=pinch(x):对多维度矩阵进行降低维度操作,删除原始矩阵变量中变量数为1的维度,并进行赋值;例子:y=pinch(x) 假如原始x为一个四维矩阵(1*1*1*M),前三个维度的变量数都是1,经过pinch命令后,矩阵的维度降为M*1阶矩阵,并对新的矩阵y进行赋值,对应关系如下 y(i)=x(1,1,1,i);
(2)第二个语法pinch(x,i):对多维度矩阵x进行第i个维度的删除操作,并进行赋值;
例子:y=pinch(x,2) 假如原始x为一个四维N*M*K*P阶矩阵,经过pinch(x,2)命令,将x矩阵的第二个维度(变量数为M)进行删除,并对新的矩阵y进行赋值,y矩阵为三维N*K*P阶矩阵,对应关系y(i,j,k)=x(i,1,j,k) (备注:赋值时x矩阵中被删除的第二个维度,均以1替代,即以该维度下的首个变量来进行赋值);
思考:如果N,K,P中某一个或几个为1,那么进过pinch(x,2)进行y矩阵赋值后,新矩阵y是几维矩阵?
(3)第三个语法pinch(x,i,j):该语法算是第二个语法的补充;与语法2相同点均可以对矩阵x进行第i个维度的删除操作,并进行赋值;不同点在于语法2进行赋值时对于被删除的维度上的变量默认采用第一个变量进行赋值,而语法3在赋值时对于被删除的维度上的变量可以低j个变量来进行赋值;
例子:y=pinch(x,2,4)假如原始x为一个四维N*M*K*P阶矩阵,经过pinch(x,2,4)命令,将x矩阵的第二个维度(变量数为M)进行删除,并对新的矩阵y进行赋值,y矩阵为三维N*K*P阶矩阵,对应关系y(i,j,k)=x(i,4,j,k) (备注:赋值时x矩阵中被删除的第二个维度,均以4替代,即以该维度下的第四个变量来进行赋值);
2. pinch命令官网例子解读:
“ the powernamed "field" is a 2Din the XY plane set toand . In this case, theEx will be a 4D , where theare (X) by (Y) by (Z) by (F). Since this is a 2Din the XY plane, there will be only one Z , which means theof the third(Z) will be 1.”
翻译:假设名称为field的功率监视器是一个在XY平面上的2D监视器,用来到频率间多个频率下的功率值 。在该情况下,变量Ex将会是一个四维变量,维度是(x)长度*(y)长度*(z)长度*(f)长度 。由于该监视器是在XY平面的2D监视器,所以只有一个Z位置值,即第三个维度Z变量数为1.
“With the pinch and find , we canato be . First, the findis used tothe index of thevalueto . Next, the pinchis used tothe data in Exto that . Apinchis used totheZ . The endis the 2DEx(x,y) at avalue of z and f.”
翻译:使用pinch和find命令,我可以选择特定频率下的数据来进行成像 。第一,find命令用来确定频率接近的频率索引值(即为在f矩阵中变量所处位置) 。第二,使用pinch命令来选择频率下的Ex结果 。第三,第二个pinch命令用来删除单变量的Z维度 。最终结果是在特定的z位置和频率下的2D矩阵Ex(x,y) 。
m="field";# 监视器名称,该监视器为xy平面的2Dx=getdata(m,"x");# 获取监视器中x的数据y=getdata(m,"y");z=getdata(m,"z");f=getdata(m,"f");Ex=getdata(m,"Ex");fi=find(f,250e12);# 在矩阵f中找到最接近250e12的值,并将其索引(即第几个变量)赋予fiEx=real(Ex);# 取Ex的实部?"Size of x: "+num2str(length(x)); # 显示x矩阵的变量数?"Size of y: "+num2str(length(y));?"Size of z: "+num2str(length(z));?"Size of f: "+num2str(length(f));?"Size of Ex: "+num2str(size(Ex));to_plot=pinch(Ex,4,fi);# select frequency. Size will be length(x) by length(y) by length(z) 将Ex矩阵中第四个维度(f)进行删除,赋值时该维度变量取第fi个变量,该命令功能为选取出频率接近250e12时的其他维度变量并赋值给to_plotto_plot=pinch(to_plot);# remove singleton z dimension. Size will be length(x) by length(y) 再次采用pinch命令将单变量的维度z消除,新的to_plot矩阵维度为(x)长度*(y)长度image(x*1e6,y*1e6,to_plot, "x (um)","y (um)","Ex at "+num2str(f(fi)/1e12)+ " THz" ); # 以x和y为轴(单位um),对变量Ex(x,y)做图;图表名称Ex at 250 THz