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

112 阅读1分钟

1.算法描述

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

 

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

 

2.matlab算法仿真效果

matlab2022a仿真结果如下:

1.png

2.png

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) = Gmodo(ir,lc-1) + (1 - 2G)modo(ir,lc) + Gmodo(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`