matlab产生光脉冲,【资源】分享一个脉冲的光线中传输的matlab程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
好多研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程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...相关推荐
- matlab求距离判别函数,求MATLAB的逐步判别程序 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
somomo91 你不觉得信息量太少了么? 摸不着头脑, zhouxiaobo 是啊,信息量太少,LZ能详细描述一下你的问题吗 或者直接给出你的数据和要求 2012jxyl 引用回帖: zhouxia ...
- comsol matlab 循环,comsol保存为m文件,怎样在m文件里面加入for循环 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
我利用comsol做好一个案例后,需要大量改变一个参数值,于是我将mph文件保存为m文件,加入了一个for循环,利用comsol with matlab运行,但是显示错误,哪位大神晓得怎样在comso ...
- matlab 非线性常微分方程,Matlab数值求解非线性常微分方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
我最近也在用牛顿迭代解一个非线性方程组 Newton迭代有程序 我拷给你你 编写Newton迭代法的M文件NewtonIterate.如下: function s=NewtonIterate(x,ep ...
- matlab求解非线性常微分方程组,Matlab数值求解非线性常微分方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
我最近也在用牛顿迭代解一个非线性方程组 Newton迭代有程序 我拷给你你 编写Newton迭代法的M文件NewtonIterate.如下: function s=NewtonIterate(x,ep ...
- matlab热应力计算,不同温度下热应力的计算 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
这个问题不难做,如果做 3D 分析,大致过程是: 1 几何建模 - 按照名义尺寸创建两个圆筒:最好在建模时使两个圆筒的轴线与总体直角坐标系的 z 轴一致: 2 划分网格:一般情况最好使用 3D 实 ...
- matlab比Excel好在哪,matlab计算结果和excel完全不一样 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
请教各位: 我有一段程序通过matlab计算出的结果和用Excel中VB计算的结果完全不一样,跪求指导.....(已经确定是程序中这段的问题,实在找不出2者的区别) 两种语言中中Ndata=n, i ...
- matlab曲面方程,如何用Matlab拟合数据求解曲面方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
我不知道你的方程,我粗略得到一个R2 = 0.99以上的方程,代码及结果如下 高次多项式拟合代码 : load shuju.mat B=fit([Dotx,Dotx],Dotz,'poly43') 结 ...
- qpsk的matlab平方根升余,【求助】求助:【QPSK功率谱密度的matlab的代码】 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
CODE: clear; %随机产生长度大于1000的'0'.'1'信号序列,对其进行QPSK调制 %定义待仿真序列的维数 N global N N=2000; %定义产生'1'的概率为 p glob ...
- matlab 复数方程,新人求助解MATLAB超越方程,方程中含有复数 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
patpat~ 不要哭. %%%%%%%%%%%%%%%%%%% %不知道对不对,妹妹先试试看 clear; close; clc; n1 = 1.445; n2 = 3.445; n3 = 0.14 ...
最新文章
- java XmlDocument
- linux开机自动启动(自启动)脚本、程序(初始化脚本)(海康摄像头自启动程序)
- MySQL中的ORDER BY field
- Git的基本概念/常用命令及实例
- opencv中,c和c++版本区别体验
- XML NameSpace
- 深入理解SQL Server的规划和安装
- java 鼠标拖拽_JavaScript DOM 鼠标拖拽
- sql server系统表详细说明(2)
- CVTE2019春招校招笔试、面试经验(硬件测试岗)
- iOS开发 - 使用IJKPlayer时,关于需求要边下边播的缓存功能,退回来后播放缓存不再耗流量
- 【赛码网 牛客网】输入输出总结(python版)
- 语义分割评估指标MIOU
- 读书百客:《四时田园杂兴·其一》鉴赏
- Groovy(Java笨狗)系列--datatypes
- 开放接口API(开发者的福利)
- 芯片开发必读 | 什么是IP设计?为什么它很重要?
- 用EXCLE制作抽奖客户名单操作步骤
- redis集群方式及高可用架构
- Selenium 实现淘宝自动化添加购物车