1.算法描述 对传统的有限差分光束传播法(FD-BPM)进行修正,通过对亥姆赫兹方程进行更准确的推导展开,提出一种修正后的新算法,并将新算法和传统算法应用于平板波导的计算实例,最后通过计算用来衡量算法精度的参量以及计算所花费的总体时间,将新算法与传统算法进行比较,验证了新算法在精度上有所提高,而计算时间并没有受到影响,有一定的实用价值.
改进了传统的有限差分光束传播法(FD-BPM),实现了一种新的基于近似传播常数的FD-BPM.该算法与传统方法相比,无论是在计算精度、收敛速度,还是在计算稳定性方面都得到了有效的提高;在传统解析求解方法失效的情况下,该方法在求解复杂折射率分布光波导的传播常数也具有较高的理论参考价值.
2.matlab算法仿真效果 matlab2022a仿真结果如下:
3.MATLAB核心程序
% ------------ Generacion del pulso -------------------
modo = exp (-(xx/W0).^2-(yy/W0).^2); % Pulso Gaussiano en 3D
% ---------- Constantes para metodo ADI -----------------
B = j/(2*k0); % Constante de difusion
G = B*dz/(dx^2); % Parametro de ganancia
d = zeros(1,num_samples); % Terminos Independientes
matrix = zeros(num_samples); % Inicializa Matriz
% --------- Generacion de la matriz tridiagonal ---------
for m = 1:1:num_samples,
if ((m>1) && (m<num_samples))
matrix(m,m-1) = -G;
matrix(m,m) = 1 + 2*G;
matrix(m,m+1) = -G;
else
matrix(1,1) = 1 + 2*G;
matrix(1,2) = -G;
matrix(num_samples,num_samples-1) = -G;
matrix(num_samples,num_samples) = 1 + 2*G;
end
end
matrix=sparse(matrix); %la convierte a matriz escasamente poblada
% -------------- Posiciona la grafica --------------
scrsz = get(0,'ScreenSize');
figure('Position',[1 scrsz(4)/2 scrsz(3)/2 scrsz(4)/2]);
for ir = 1:1:num_samples,
for lc = 1:1:num_samples,
if ((lc>1) && (lc<num_samples))
d(lc) = G*modo(ir,lc-1) + (1 - 2*G)*modo(ir,lc) + G*modo(ir,lc+1);
else
if (lc == 1)
d(1) = eps;
else
d(num_samples) = eps;
end
end
end
modo(:,ir) = matrix\d.'; % Resuelve la i-esima columna
end
A81
标签:Guevara,Codina,de,BPM,Edgar,算法,num,FD,samples
From: https://blog.51cto.com/matworld/6024964