好多研1的同学,开始用matlab进行模拟的时候都没有学过matlab,下面这个程序为光脉冲在光纤中传输时程序,其中用到了傅里叶分步法,要用傅里叶分步法的同学也可以参考借鉴一下,还有这个程序也可以用来作为锁模的机理的前序,大家参考上面的程序很容易编出锁模的程序,希望对大家有帮助,最后用的是3D输出,大家也可以参考一下3D输出的具体写法!

%===== Solving NLSE Using Split-step Fourier Method  (SSFM) =======

%  The NLSE is like thie:

%  Uz   =  i/2*Uxx - i*beta*U/(1+|U|^2)

%  U(z=0)= sqrt(0.11)*exp(-x.^2/0.85^2);  Gauss pulse

%******************************************************************

% Split-step fast foruier method

%                U(z+dz)=(L+N)U(z)     L and N are operators

%                L=i/2 * d/dx^2        Linear operator

%                N=-i*beta/(1+|U|^2)   Nonlinear operator

% Linear operator computation with fft in Fourier domain for speed

% Nonlinear operator computation in space domain

% step: 1.  U-->fft(U)   = ans

%       2.  L(dz/2).*ans

%       3.  ifft(ans)

%       4.  N(dz).*ans

%       5.  fft(ans)

%       6.  L(dz/2).*ans

%       7.  ifft(ans)     =U(z+dz)

% Calculate two times L(dz/2) can get a accuracy of  O(dz^3)

%******************************************************************

clear;

clc;

beta=1;  gamma=0;

%******************************************************************

% Set Space & Frequency Windows

%******************************************************************

nz = 3000;

dz = 0.001;

Nstep = nz/10;  % For drawing waterfall lines

xmax = 10;  % x domain [-5,5]

nx = 2^9;

dx = 2*xmax/nx;

x = (-xmax:dxxmax-dx))';

fk = 2*pi/dx;

xl = length(x)/2;

k = (-xl*fk:fkxl-1)*fk)'/nx;  % frequency domain [-fk/2,fk/2]

%******************************************************************

% Initialization

%******************************************************************

u0 =sech(x);

u  = u0;

%******************************************************************

% Preplot

%******************************************************************

iplot = 1;

zplot(iplot) = 0;

Uplot(:,iplot) = u.*conj(u);

%******************************************************************

% Linear & Nonlinear Operators

%******************************************************************

% in fourier domain

%******************************************************************

% Split-Step Fourier Method For NLS

%******************************************************************

L=exp(i*dz/4*k.^2);

for m = 1:1:nz

%%%%%%%%%%% test for self-delfection%%%%%%%

absu2=u.*conj(u);

%u2xtemp=diff(absu2)./diff(x);

%u2x(1)=u2xtemp(1);u2x(2:nx,1)=u2xtemp(1:nx-1);

Na=i*dz*beta*u.*conj(u); % in space domain

%Nb=-Na/beta*gamma.*u2x; % in space domain

%N=exp(Na+Nb);

N=exp(Na);

%%%%%%%%%%%%%%% end test%%%%%%%

f = fftshift(fft(u));

f = L.*f;

uhalf = ifft(fftshift(f));

ua = N.*uhalf;

f = fftshift(fft(ua));

f = L.*f;

uend = ifft(fftshift(f));

% 梯形规则积分 两次迭代

u2 = exp(i/2*dz*beta*(u.*conj(u)+uend.*conj(uend))).*uhalf;

f = fftshift(fft(u2));

f = L.*f;

uend1 = ifft(fftshift(f));

u3 = exp(i/2*dz*beta.*(u.*conj(u)+uend1.*conj(uend1))).*uhalf;

f = fftshift(fft(u3));

f = L.*f;

u = ifft(fftshift(f));

er=1e-4;

u2a=uend1.*conj(uend1);

u2b=u.*conj(u);

if(abs(max(u2b-u2a))/max(u2b)) > er;

disp('Reduce step length please');break;

end

% For drawing 3-D graphic

if (rem(m,Nstep) == 0)

iplot=iplot+1;

Uplot(:,iplot)=u.*conj(u);

zplot(iplot) = m*dz;

end

end

waterfall(x,zplot,Uplot');

hidden off;

view(50,30);

title('Soliton Evolution');

xlabel('s','FontSize',18);

ylabel('\xi','FontSize',18);

zlabel('|U|^2','FontSize',14,'Rotation',0,'Position',[-xmax/1.5,-.1,max(u0)^2]);

matlab产生光脉冲,【资源】分享一个脉冲的光线中传输的matlab程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...相关推荐

  1. matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    somomo91 你不觉得信息量太少了么? 摸不着头脑, zhouxiaobo 是啊,信息量太少,LZ能详细描述一下你的问题吗 或者直接给出你的数据和要求 2012jxyl 引用回帖: zhouxia ...

  2. comsol matlab 循环,comsol保存为m文件,怎样在m文件里面加入for循环 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我利用comsol做好一个案例后,需要大量改变一个参数值,于是我将mph文件保存为m文件,加入了一个for循环,利用comsol with matlab运行,但是显示错误,哪位大神晓得怎样在comso ...

  3. matlab 非线性常微分方程,Matlab数值求解非线性常微分方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我最近也在用牛顿迭代解一个非线性方程组 Newton迭代有程序 我拷给你你 编写Newton迭代法的M文件NewtonIterate.如下: function s=NewtonIterate(x,ep ...

  4. matlab求解非线性常微分方程组,Matlab数值求解非线性常微分方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我最近也在用牛顿迭代解一个非线性方程组 Newton迭代有程序 我拷给你你 编写Newton迭代法的M文件NewtonIterate.如下: function s=NewtonIterate(x,ep ...

  5. matlab热应力计算,不同温度下热应力的计算 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    这个问题不难做,如果做 3D 分析,大致过程是: 1  几何建模 - 按照名义尺寸创建两个圆筒:最好在建模时使两个圆筒的轴线与总体直角坐标系的 z 轴一致: 2  划分网格:一般情况最好使用 3D 实 ...

  6. matlab比Excel好在哪,matlab计算结果和excel完全不一样 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    请教各位: 我有一段程序通过matlab计算出的结果和用Excel中VB计算的结果完全不一样,跪求指导.....(已经确定是程序中这段的问题,实在找不出2者的区别) 两种语言中中Ndata=n,  i ...

  7. matlab曲面方程,如何用Matlab拟合数据求解曲面方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我不知道你的方程,我粗略得到一个R2 = 0.99以上的方程,代码及结果如下 高次多项式拟合代码 : load shuju.mat B=fit([Dotx,Dotx],Dotz,'poly43') 结 ...

  8. qpsk的matlab平方根升余,【求助】求助:【QPSK功率谱密度的matlab的代码】 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    CODE: clear; %随机产生长度大于1000的'0'.'1'信号序列,对其进行QPSK调制 %定义待仿真序列的维数 N global N N=2000; %定义产生'1'的概率为 p glob ...

  9. matlab 复数方程,新人求助解MATLAB超越方程,方程中含有复数 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    patpat~ 不要哭. %%%%%%%%%%%%%%%%%%% %不知道对不对,妹妹先试试看 clear; close; clc; n1 = 1.445; n2 = 3.445; n3 = 0.14 ...

最新文章

  1. java XmlDocument
  2. linux开机自动启动(自启动)脚本、程序(初始化脚本)(海康摄像头自启动程序)
  3. MySQL中的ORDER BY field
  4. Git的基本概念/常用命令及实例
  5. opencv中,c和c++版本区别体验
  6. XML NameSpace
  7. 深入理解SQL Server的规划和安装
  8. java 鼠标拖拽_JavaScript DOM 鼠标拖拽
  9. sql server系统表详细说明(2)
  10. CVTE2019春招校招笔试、面试经验(硬件测试岗)
  11. iOS开发 - 使用IJKPlayer时,关于需求要边下边播的缓存功能,退回来后播放缓存不再耗流量
  12. 【赛码网 牛客网】输入输出总结(python版)
  13. 语义分割评估指标MIOU
  14. 读书百客:《四时田园杂兴·其一》鉴赏
  15. Groovy(Java笨狗)系列--datatypes
  16. 开放接口API(开发者的福利)
  17. 芯片开发必读 | 什么是IP设计?为什么它很重要?
  18. 用EXCLE制作抽奖客户名单操作步骤
  19. redis集群方式及高可用架构
  20. Selenium 实现淘宝自动化添加购物车

热门文章

  1. Deepin升级内核后无法启动的问题
  2. 图像的几种变换简单介绍
  3. 客服对于Kindle电子书的退货、倒闭、VR等问题的回答
  4. 海亮DAY8 关于Tarjan算法用于割点割边相关感受
  5. 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】
  6. (科软)高级软件工程课程总结
  7. 全球顶尖人工智能专家陶大程加入京东,出任京东探索研究院院长
  8. 一体化模拟器部署以及IOS操作基础
  9. Flutter开始支持Windows了
  10. 微信公众号支付宝授权