非线性薛定谔方程快速傅里叶变换解法(基于matlab)

 

 

无量纲化非线性薛定谔方程基本形式:

                                                             

 

Step1:对方程性质分析,将待求解方程改写为含线性算符与非线性算法形式如下:

                                                                    

Step2:两项在光传播时同时作用,在编程上,假设取一小段距离,在这小段距离上线性项与非线性项分别作用,可将方程化为分别独立的的两端分别求解:

                                                                                  

以光纤为例:

线性算符含:色散系数,光纤损耗系数      非线性算符含:非线性系数

                                                                                

       此处同样通过matlab对其进行数值仿真,快速傅里叶变换与逆变换可直接通过matlab内置函数fftifft实现。输入的各项常数与初值来源于引用的他人已发表的相关领域结论。

       输入的相关值包括:光纤损耗值、光前非线性参数、初始脉冲宽度、二阶色散与二阶色散长度等。

输入参考值:

Po=0.00064; %输入瓦功率
alpha=0;  %光纤损耗值,单位dB/km
alph=alpha/(4.343);  %光纤损耗值,单位dB/km
gamma=0.003;  %光纤非线性参数
to=125e-12;  %初始脉冲宽度,单位秒
C=-2;  %第一次计算输入的啁啾参数
b2=-20e-27; %波数的倒数
Ld=(to^2)/(abs(b2)); %二阶色散长度,单位是m
pi=3.1415926535;
Ao=sqrt(Po); %光振幅
tau =- 4096e-12:1e-12: 4095e-12;dt=1e-12;
rel_error=1e-5;
h=1000;% 光步长

完整代码:

clc; clear all; close all; clf;
cputime=0;
tic;
ln=1;
i=sqrt(-1);
Po=0.00064; %输入瓦功率
alpha=0;  %光纤损耗值,单位dB/km
alph=alpha/(4.343);  %光纤损耗值,单位dB/km
gamma=0.003;  %光纤非线性参数
to=125e-12;  %初始脉冲宽度,单位秒
C=-2;  %第一次计算输入的啁啾参数
b2=-20e-27; %波数的倒数
Ld=(to^2)/(abs(b2)); %二阶色散长度,单位是m
pi=3.1415926535;
Ao=sqrt(Po); %光振幅
tau =- 4096e-12:1e-12: 4095e-12;dt=1e-12;
rel_error=1e-5;
h=1000;% 光步长
for ii=0.1:0.1:1.5 %不同的光纤长度不同,这个量可变
    z=ii*Ld;
    u=Ao*exp(-((1+i*(-C))/2)*(tau/to).^2);
    figure(1)
    plot(abs(u),'r');
    title('输入方程'); xlabel('Time'); ylabel('振幅');
    grid on;
    hold on;
    l=max(size(u));
    fwhm1=find(abs(u)>abs(max(u)/2));
    fwhm1=length(fwhm1);
    dw=1/l/dt*2*pi;
    w=(-1*l/2:1:l/2-1)*dw;
    u=fftshift(u);%零延迟对中的谱
    w=fftshift(w); %零延迟对中的谱
    spectrum=fft(fftshift(u)); %快速离散傅立叶变换
    for jj=h:h:z
        spectrum=spectrum.*exp(-alph*(h/2)+i*b2/2*w.^2*(h/2)) ;   %括号里为线性算符e的指数表达式
        f=ifft(spectrum);%快速离散反傅立叶变换
        f=f.*exp(i*gamma*((abs(f)).^2)*(h)); %括号里为非线性算符e的指数表达式
        spectrum=fft(f); %快速离散傅立叶变换
        spectrum=spectrum.*exp(-alph*(h/2)+i*b2/2*w.^2*(h/2)) ;  
    end
    f=ifft(spectrum);%快速离散反傅立叶变换
    op_pulse(ln,:)=abs(f);%保存在所有间隔点上的输出脉冲
    fwhm=find(abs(f)>abs(max(f)/2));
    fwhm=length(fwhm);%比最大值一半还大的元素的个数,超短光脉冲传输前后的展宽因子
    ratio=fwhm/fwhm1; %每一个值是PBR
    pbratio(ln)=ratio;%保存每一步的PBR
    dd=atand((abs(imag(f)))/(abs(real(f))));
    phadisp(ln)=dd;%保存脉冲相位

    ln=ln+1;
end
toc;
cputime=toc;
figure(2);
mesh(op_pulse(1:1:ln-1,:));
title('脉冲演化');
xlabel('时间'); ylabel('长度'); zlabel('振幅');

figure(3);
plot(pbratio(1:1:ln-1),'k');
xlabel('步数');
ylabel('脉冲展宽g比');
grid on;

figure(4);
plot(phadisp(1:1:ln-1),'k');
xlabel('距离里程');
ylabel('相变');
grid on;
disp('CPU time:'), disp(cputime);

结果图:

发布了8 篇原创文章 · 获赞 8 · 访问量 2412

猜你喜欢

转载自blog.csdn.net/qq_33689250/article/details/103112564