基于Edgar-Guevara-Codina的有限差分光束传输法matlab仿真模拟

1.算法描述

对传统的有限差分光束传播法(FD-BPM)进行修正,通过对亥姆赫兹方程进行更准确的推导展开,提出一种修正后的新算法,并将新算法和传统算法应用于平板波导的计算实例,最后通过计算用来衡量算法精度的参量以及计算所花费的总体时间,将新算法与传统算法进行比较,验证了新算法在精度上有所提高,而计算时间并没有受到影响,有一定的实用价值.


改进了传统的有限差分光束传播法(FD-BPM),实现了一种新的基于近似传播常数的FD-BPM.该算法与传统方法相比,无论是在计算精度、收敛速度,还是在计算稳定性方面都得到了有效的提高;在传统解析求解方法失效的情况下,该方法在求解复杂折射率分布光波导的传播常数也具有较高的理论参考价值.


2.matlab算法仿真效果

matlab2022a仿真结果如下:


3.MATLAB核心程序

[xx,yy] = meshgrid ([x1:dx:x2-dx],[x1:dx:x2-dx]);


% ------------ 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容