非线性薛定谔方程数值解的MATLAB仿真

非线性薛定谔方程数值解的MATLAB仿真
非线性薛定谔方程数值解的MATLAB仿真

admin

[非线性薛定谔方程数值解的MATLAB仿真]——利用分步快速傅里叶变换对光纤中光信号的传输方程进行数值求解

1、非线性薛定谔方程

非线性薛定谔方程(nonlinear Schrodinger equation ,NLSE)是奥地利物理学家薛定谔于1926 年提出的,应用在量子力学系统中。由于量子力学主要研究粒子的动力学运动状态,所以不能运用牛顿力学公式来表示。通常在量子力学中,研究系统的状态一般通过波函数(x ,t)来表示。而对波函数的研究主要是求解非线性薛定谔方程。本文主要研究光脉冲在光纤中传输状态下的演变。

一般情况下,光脉冲信号在光纤中传输时,同时受到光纤的色散和非线性效应的影响。通过Maxwell 方程,考虑到光纤的色散和非线性效应,可以推导出光信号在光纤中的传输方程,即非线性薛定谔方程。NLSE 是非线性偏微分方程,一般很难直接求出解析解,于是通过数值方法进行求解。具体分为两大类:(1)分布有限差分法(split-step finite differencemethod ,SSFD);(2)分步傅里叶变换法(split-step Fourier transform method ,SSFT)。一般情况,在达到相同精度,由于分步傅里叶变换法采用运算速度快的快速傅里叶变换,所以相比较有限差分法运算速度快一到两个数量级。于是本文介绍分步傅里叶变换法来对光纤中光信号的传输方程,即非线性薛定谔方程进行数值求解。并通过MATLAB 软件对结果数值仿真。

非线性薛定谔方程的基本形式为:

22||t xx iu u u u =+

其中u 是未知的复值函数.

目前,采用分步傅立叶算法(Split step Fourier Method)求解非线性薛定谔方程的数值解应用比较多。分步傅立叶方法最早是在1937年开始应用的,这种方法己经被证明是相同精度下数值求解非线性薛定愕方程最快的方法,部分原因是它采用了快速傅立叶变换算法(FastFourier Transform Algorithm)。基于MATLAB 科学计算软件以及MATLAB 强大的符号计算功能,完全可以实现分步傅立叶数值算法来对脉冲形状和频谱进行仿真。

一般情况下,光脉冲沿光纤传播时受到色散和非线性效应的共同作用,假设当传输距离 很小的时候,两者相互独立作用,那么,根据这种思想可建立如下分步傅立叶数值算法的数 学模型:

把待求解的非线性薛定谔方程写成以下形式:

??()U D N U z ?=+? (I )

(II )

其中?D

是线性算符,代表介质的色散和损耗,?N 是非线性算符,它决定了脉冲传输过程中光纤的非线性效应。

一般来讲,沿光纤的长度方向,色散和非线性是同时作用的。分步傅立叶法假设在传输 过程中,光场每通过一小段距离h ,色散和非线性效应可以分别作用,得到近似结果。也就 是说脉冲从z 到z +h 的传输过程中分两步进行。第一步,只有非线性作用,方程(II)式中的 ?D

=0;第二步,再考虑线性作用,方程(II)式中的?N =0 这样方程(2)在这两步中可分别简化为:

??U D U z U N U z ?=???=?? 得到了上面两个方程(III ),就可以分别求解非线性作用方程和线性作用方程,然后讨论分步傅立叶法的数值算法。

由于方程(III )是一个偏微分方程,需要通过傅立叶变换把偏微分方程转换为代数方 程,进行运算。傅立叶变换的定义如下:

1[(,)](,)(,)exp()1[(,)](,)(,)exp()2F U z T U z U z T i T dT F U z U z T U z i T dT ωωωωωπ+∞-∞+∞--∞??==???==-??

?? 在计算[(,)]F U z T 时一般采用快速傅立叶变换(FFT )算。为了保证精度要求,一般还需要反复调整纵向传输步长z 和横向脉冲取样点数T 来保证计算精度。

2、分步傅立叶数值算法的MATLAB 实现

现待求解的非线性薛定谔方程如下:

222024A i A A i A A z T αβγ??+--=?? 其中,A (z ,T )是光场慢变复振幅,z 是脉冲沿光纤传播的距离;1T t z β=-,11/g v β=,v g 是群速度;(/)ps km β是色散系数;(1/)w km γ?是非线性系数;(1/)km α是光纤损耗系数,它与用分贝表示的损耗系数(/)dB dB km α的关系为: 4.343dB αα=.

首先,可以将方程(V )

归一化振幅:(,)/U A z T =0P 是入射脉冲的峰值功率, (III )

(IV ) (V )

推荐-Broyden方法求解非线性方程组的Matlab实现 精品

Broyden方法求解非线性方程组的Matlab实现 注:matlab代码来自网络,仅供学习参考。 1.把以下代码复制在一个.m文件上 function [sol, it_hist, ierr] = brsola(x,f,tol, parms) % Broyden's Method solver, globally convergent % solver for f(x) = 0, Armijo rule, one vector storage % % This code es with no guarantee or warranty of any kind. % % function [sol, it_hist, ierr] = brsola(x,f,tol,parms) % % inputs: % initial iterate = x % function = f % tol = [atol, rtol] relative/absolute % error tolerances for the nonlinear iteration % parms = [maxit, maxdim] % maxit = maxmium number of nonlinear iterations % default = 40 % maxdim = maximum number of Broyden iterations % before restart, so maxdim-1 vectors are % stored % default = 40 % % output: % sol = solution % it_hist(maxit,3) = scaled l2 norms of nonlinear residuals % for the iteration, number function evaluations, % and number of steplength reductions % ierr = 0 upon successful termination % ierr = 1 if after maxit iterations % the termination criterion is not satsified. % ierr = 2 failure in the line search. The iteration % is terminated if too many steplength reductions % are taken. % % % internal parameter: % debug = turns on/off iteration statistics display as % the iteration progresses

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

MatLab求解线性方程组

MatLab解线性方程组一文通 当齐次线性方程AX=0,rank(A)=r

最新薛定谔方程及其解法

关于薛定谔方程 一.定义及重要性 薛定谔方程(Schrdinger equation)是由奥地利物理学家薛定谔提 出的量子力学中的一个基本方程,也是量子力学的一个基本假定, 其正确性只能靠实验来检验。是将物质波的概念和波动方程相结合 建立的二阶偏微分方程,可描述微观粒子的运动,每个微观系统都 有一个相应的薛定谔方程式,通过解方程可得到波函数的具体形式 以及对应的能量,从而了解微观系统的性质。 薛定谔方程是量子力学最基本的方程,亦是量子力学的一个基 本假定,它的正确性只能靠实验来检验。 二.表达式 三.定态方程 ()() 2 2 2 V r E r m η ψψ + ?? -?= ?? ?? 所谓势场,就是粒子在其中会有势能的场,比如电场就是一个带电粒子的势场;所谓定态,就是假设波函数不随时间变化。 其中,E是粒子本身的能量;v(x,y,z)是描述势场的函数,假设不随时间变化。

2 2 22222 z y x ??????++=? 可化为 d 0)(222 =-+ψψv E h m dx 薛定谔方程的解法 一. 初值解法;欧拉法,龙格库塔法 二. 边值解法;差分法,打靶法,有限元法 龙格库塔法(对欧拉法的完善) 给定初值问题 ). ()()((3) ) ,(),()( ,,(2) )(),( 311212 2111021h O t y t y hk y h t f k y t f k k c k c h y y y c c a y b t a y t f dt dy i i i i i i i i =-???????++==++==?????=≤≤=++的局部截断误差使以下数值解法的值及确定常数ββα βα

Matlab求解线性方程组非线性方程组

求解线性方程组 solve,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B) diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式 diff(F); %matlab区分大小写 pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 非线性方程求解 fsolve(fun,x0,options) 为待解方程或方程组的文件名;fun其中 x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件fun.m: function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve')) 注: ...为续行符 m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。Matlab求解线性方程组 AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如: X=A\B表示求矩阵方程AX=B的解; 的解。XA=B表示矩阵方程B/A=X. 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; m

MATLAB解线性方程组的直接方法

在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法. 3.1 方程组的逆矩阵解法及其MATLAB 程序 3.1.3 线性方程组有解的判定条件及其MATLAB 程序 判定线性方程组A n m ?b X =是否有解的MATLAB 程序 function [RA,RB,n]=jiepb(A,b) B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB ,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果为 请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB 工作窗口输入 >>X=A\b, 运行后输出结果为 X =(0 0 0 0)’. (2) 在MATLAB 工作窗口输入程序 >> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b)

薛定谔方程与提出背景

薛定谔方程 在一维空间里,一个单独粒子运动于位势中的含时薛定谔方程为 ;(1) 其中,是质量,是位置,是相依于时间的波函数,是约化普朗克常数,是位势。类似地,在三维空间里,一个单独粒子运动于位势中的含时薛定谔方程为 。(2) 假若,系统有个粒子,则波函数是定义于 -位形空间,所有可能的粒子位置空间。用方程表达, 。 其中,波函数的第个参数是第个粒子的位置。所以,第个粒子的位置是。 不含时薛定谔方程 不含时薛定谔方程不相依于时间,又称为本征能量薛定谔方程,或定态薛定谔方程。顾名思义,本征能量薛定谔方程,可以用来计算粒子的本征能量与其它相关的量子性质。 应用分离变量法,猜想的函数形式为 ; 其中,是分离常数,是对应于的函数.稍回儿,我们会察觉就是能量. 代入这猜想解,经过一番运算,含时薛定谔方程 (1) 会变为不含时薛定谔方程: 。 类似地,方程 (2) 变为

。 历史背景与发展 爱因斯坦诠释普朗克的量子为光子,光波的粒子;也就是说,光波具有粒子的性质,一种很奇奥的波粒二象性。他建议光子的能量与频率成正比。在相对论里,能量与动量之间的关系跟频率与波数之间的关系相同,所以,连带地,光子的动量与波数成正比。 1924年,路易·德布罗意提出一个惊人的假设,每一种粒子都具有波粒二象性。电子也有这种性质。电子是一种波动,是电子波。电子的能量与动量决定了它的物质波的频率与波数。1927年,克林顿·戴维和雷斯特·革末将缓慢移动的电子射击于镍晶体标靶。然后,测量反射的强度,侦测结果与X射线根据布拉格定律 (Bragg's law) 计算的衍射图案相同。戴维森-革末实验彻底的证明了德布罗意假说。 薛定谔夜以继日地思考这些先进理论,既然粒子具有波粒二象性,应该会有一个反应这特性的波动方程,能够正确地描述粒子的量子行为。于是,薛定谔试着寻找一个波动方程。哈密顿先前的研究引导著薛定谔的思路,在牛顿力学与光学之间,有一种类比,隐蔽地暗藏于一个察觉里。这察觉就是,在零波长极限,实际光学系统趋向几何光学系统;也就是说,光射线的轨道会变成明确的路径,遵守最小作用量原理。哈密顿相信,在零波长极限,波传播会变为明确的运动。可是,他并没有设计出一个方程来描述这波行为。这也是薛定谔所成就的。他很清楚,经典力学的哈密顿原理,广为学术界所知地,对应于光学的费马原理。借着哈密顿-雅可比方程,他成功地创建了薛定谔方程。薛定谔用自己设计的方程来计算氢原子的谱线,得到了与用玻尔模型计算出的能级相同的答案。 但是,薛定谔对这结果并不满足,因为,索末菲似乎已经正确地计算出氢原子光谱线精细结构常数的相对论性的修正。薛定谔试着用相对论的能量动量关系式,来寻找一个相对论性方程(现今称为克莱因-高登方程),可以描述电子在库仑位势的量子行为。薛定谔计算出这方程的定态波函数。可是,相对论性的修正与索末菲的公式有分歧。虽然如此,他认为先前非相对论性的部分,仍旧含有足够的新结果。因此,决定暂时不发表相对论性的修正,只把他的波动方程与氢原子光谱分析结果,写为一篇论文。1926年,正式发表于物理学界[2]。从此,给予了量子力学一个新的发展平台。 薛定谔方程漂亮地解释了的行为,但并没有解释的意义。薛定谔曾尝试解释代表电荷的密度,但却失败了。1926年,就在薛定谔第四篇的论文发表之后几天,马克斯·玻恩提出概率幅的概念,成功地解释了的物理意义[3]。可是,薛定谔本人一直不承认这种统计或概率的表示方法,和它所伴随的非连续性波函数坍缩。就像爱因斯坦的认为量子力学是基本为确定性理论的统计近似,薛定谔永远无法接受哥本哈根诠释。在他有生最后一年,他写给马克斯·玻恩的一封信,薛定谔清楚地表明了这看法。 含时薛定谔方程导引

薛定谔方程

第一章 薛定谔方程 §1.1.波函数及其物理意义 1. 波函数: 用波函数描述微观客体的运动状态。 例:一维自由粒子的波函数 推广 :三维自由粒子波函数 2. 波函数的强度——模的平方 3. 波函数的统计解释 用光栅衍射与电子衍射对比的方式理解波函数的统计解释。 t 时刻,出现在空间(x,y,z )点附近单位体积内的粒子数与总粒子数之比。 t 时刻,粒子出现在空间(x,y,z )点附近单位体积内的概率。 t 时刻,粒子在空间分布的概率密度 4、 波函数的归一化条件和标准条件 归一化条件 粒子在整个空间出现的概率为1 标准条件:一般情况下, 有关特殊情况波函数所满足的条件参看曾谨言教程。 对微观客体的数学描述: 脱离日常生活经验,避免借用经典语言引起的表观矛盾 §1.2. 薛定谔方程 是量子力学的基本假设之一,只能建立,不能推导,其正确性由实验检验。 1. 建立 (简单→复杂, 特殊→一般) 一维自由粒子的振幅方程 非相对论考虑 2. 一维定态薛定谔方程 2 |),,,(|t z y x ψ1d d d d d ||2===?=ψ???N N N N V V N N V V V . 是单值、有限、连续的ψ0)(2d )(d 222=ψ+ψx mE x x 0)()(2d )(d 222=ψ-+ψx U E m x x

3. 三维定态薛定谔方程 4. 一般形式薛定谔方程 5. 多粒子体系的薛定谔方程 讨论: 1、薛定谔方程也称波动方程,描述在势场U 中粒子状态随时间的变化规律。 2 、建立方程而不是推导方程,正确性由实验验证。薛定谔方程实质上是一种基本假设,不能从其他更基本原理或方程推导出来,它的正确性由它解出的结果是否符合实验来检验。 3、薛定谔方程是线性方程。是微观粒子的基本方程,相当于牛顿方程。 4、自由粒子波函数必须是复数形式,否则不满足自由粒子薛定谔方程。 5、薛定谔方程是非相对论的方程。 量子力学的中心任务就是求解薛定谔方程。 求解问题的思路: 1. 写出具体问题中势函数U (r )的形式代入方程 2. 用分离变量法求解 3. 用归一化条件和标准条件确定积分常数 4. 讨论解的物理意义, 薛定谔的另一伟大科学贡献 《What is life ?》 薛定谔(Schroding,1897-1961)奥地利人,因发现原子理论的有效的新形式一波动力学与狄拉克(Dirac,1902-1984)因创立相对论性的波动方程一狄拉克方程,共同分享了1933年度诺贝尔物理学奖 定态薛定谔方程 一.定态薛定谔方程条件:V (r,t )=V(r), 与t 无关。用分离变量法, 令Ψ=φ(r)f(t),代入薛定谔方程,得两个方程: 此称定态薛定谔方程 整个定态波函数形式: ),,,(),,,()],,,(2[),,,(2121212221t r r t r r V t r r m t r r t i i i i ψ+ψ?-=ψ??∑)t (Ef t )t (f i =?? Et i ce )t (f -=)r (E )r ()r (V )r (m ?=?+??-222Et i e )r ( -?=ψ

线性方程组求解matlab实现

3.1 方程组的逆矩阵解法及其MATLAB 程序 3.1.3 线性方程组有解的判定条件及其MATLAB 程序 判定线性方程组A n m ?b X =是否有解的MATLAB 程序 function [RA,RB,n]=jiepb(A,b) B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB ,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果为 请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB 工作窗口输入 >>X=A\b, 运行后输出结果为 X =(0 0 0 0)’. (2) 在MATLAB 工作窗口输入程序 >> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果 请注意:因为RA=RB> A=[4 2 -1;3 -1 2;11 3 0]; b=[2;10;8]; [RA,RB,n]=jiepb(A,B) 运行后输出结果 请注意:因为RA~=RB ,所以此方程组无解. RA =2,RB =3,n =3 (4)在MATLAB 工作窗口输入程序

遗传算法解非线性方程组的Matlab程序

遗传算法解非线性方程组的Matlab程序 程序用MATLAB语言编写。之所以选择MATLB,是因为它简单,但又功能强大。写1行MATLAB程序,相当于写10行C++程序。在编写算法阶段,最好用MATLAB语言,算法验证以后,要进入工程阶段,再把它翻译成C++语言。 本程序的算法很简单,只具有示意性,不能用于实战。 非线性方程组的实例在函数(2)nonLinearSumError1(x)中,你可以用这个实例做样子构造你自己待解的非线性方程组。 %注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解 %程序的流程如下: %程序初始化,随机生成一组可能解(第一批染色体) %1: 由可能解的序号寻找解本身(关键步骤) %2:把解代入非线性方程计算误差,如果误差符合要求,停止计算 %3:选择最好解对应的最优染色体 %4:保留每次迭代产生的最好的染色体,以防最好染色体丢失 %5: 把保留的最好的染色体holdBestChromosome加入到染色体群中 %6: 为每一条染色体(即可能解的序号)定义一个概率(关键步骤) %7:按照概率筛选染色体(关键步骤) %8:染色体杂交(关键步骤) %9:变异 %10:到1 %这是遗传算法的主程序,它需要调用的函数如下。 %由染色体(可能解的2进制)顺序号找到可能解: %(1)x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum); %把解代入非线性方程组计算误差函数:(2)functionError=nonLinearSumError1(x); %判定程是否得解函数:(3)[solution,isTrue]=isSolution(x,funtionError,solutionSumError); %选择最优染色体函数: %(4)[bestChromosome,leastFunctionError]=best_worstChromosome(fatherChromosomeGroup,functionError); %误差比较函数:从两个染色体中,选出误差较小的染色体 %(5)[holdBestChromosome,holdLeastFunctionError]... % =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,... % bestChromosome,leastFuntionError) %为染色体定义概率函数,好的染色体概率高,坏染色体概率低 %(6)p=chromosomeProbability(functionError); %按概率选择染色体函数: %(7)slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p); %父代染色体杂交产生子代染色体函数 %(8)sonChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2); %防止染色体超出解空间的函数 %(9)chromosomeGroup=checkSequence(chromosomeGroup,solutionSum) %变异函数 %(10)fatherChromosomeGroup=varianceCh(sonChromosomeGroup,0.8,solutionN); %通过实验有如下结果: %1。染色体应当多一些

实验一用matlab求解线性方程组

实验1.1 用matlab 求解线性方程组 第一节 线性方程组的求解 一、齐次方程组的求解 rref (A ) %将矩阵A 化为阶梯形的最简式 null (A ) %求满足AX =0的解空间的一组基,即齐次线性方程组的基 础解系 【例1】 求下列齐次线性方程组的一个基础解系,并写出通解: 我们可以通过两种方法来解: 解法1: >> A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; >> rref(A) 执行后可得结果: ans= 1 -1 0 0 0 0 -1 1 0 0 0 0 由最简行阶梯型矩阵,得化简后的方程 ??? ??=+--=+--=-+-0 22004321 43214321x x x x x x x x x x x x

取x2,x4为自由未知量,扩充方程组为 即 提取自由未知量系数形成的列向量为基础解系,记 所以齐次方程组的通解为 解法2: clear A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; B=null(A, 'r') % help null 看看加个‘r’是什么作用, 若去掉r ,是什么结果? 执行后可得结果: B= 1 0 1 0 0 1 0 1 ?? ?=-=-0 04321x x x x ?????? ?====4 4432221x x x x x x x x ??? ??? ??????+????????????=????? ???????1100001142 4321x x x x x x , 00111????? ? ??????=ε, 11002????? ???????=ε2 211εεk k x +=

3-7变量非线性方程组的逆Broyden解法matlab程序

3-7变量非线性方程组的逆Broyden解法 matlab程序 function n_broyden clear all %清内存 clc %清屏 format long i=input('请输入非线性方程组个数(3-7)i='); switch i case 3 syms x y z x0=input('请输入初值(三维列向量[x;y;z])='); eps=input('请输入允许的误差精度eps='); f1=input('请输入f1(x,y,z)='); f2=input('请输入f2(x,y,z)='); f3=input('请输入f3(x,y,z)='); F=[f1;f2;f3]; J=jacobian(F,[x,y,z]); %求jacobi矩阵 Fx0=subs(F,{x,y,z},x0); Jx0=subs(J,{x,y,z},x0); H=inv(Jx0); x1=x0-H*Fx0; k=0; while norm(x1-x0)>eps %用2范数来做循环条件 p=x1-x0; q=subs(F,{x,y,z},x1)-subs(F,{x,y,z},x0); H=H-((H*q-p)*p'*H)*(p'*H*q)^-1; x0=x1; Fx0=subs(F,{x,y,z},x0); x1=x1-H*Fx0; k=k+1; end x1 k case 4 syms a b c d x0=input('请输入初值(列向量[a;b;c;d])=');

eps=input('请输入允许的误差精度eps='); f1=input('请输入f1(a,b,c,d)='); f2=input('请输入f2(a,b,c,d)='); f3=input('请输入f3(a,b,c,d)='); f4=input('请输入f4(a,b,c,d)='); F=[f1;f2;f3;f4]; J=jacobian(F,[a,b,c,d]); %求jacobi矩阵 Fx0=subs(F,{a,b,c,d},x0); Jx0=subs(J,{a,b,c,d},x0); H=inv(Jx0); x1=x0-H*Fx0; k=0; while norm(x1-x0)>eps %用2范数来做循环条件 p=x1-x0; q=subs(F,{a,b,c,d},x1)-subs(F,{a,b,c,d},x0); H=H-((H*q-p)*p'*H)*(p'*H*q)^-1; x0=x1; Fx0=subs(F,{a,b,c,d},x0); x1=x1-H*Fx0; k=k+1; end x1 k case 5 syms a b c d e x0=input('请输入初值(列向量[a;b;c;d;e])='); eps=input('请输入允许的误差精度eps='); f1=input('请输入f1(a,b,c,d,e)='); f2=input('请输入f2(a,b,c,d,e)='); f3=input('请输入f3(a,b,c,d,e)='); f4=input('请输入f4(a,b,c,d,e)='); f5=input('请输入f5(a,b,c,d,e)='); F=[f1;f2;f3;f4;f5]; J=jacobian(F,[a,b,c,d,e]); %求jacobi矩阵 Fx0=subs(F,{a,b,c,d,e},x0); Jx0=subs(J,{a,b,c,d,e},x0); H=inv(Jx0); x1=x0-H*Fx0;

MATLAB应用 求解非线性方程

第7章 求解非线性方程 7.1 多项式运算在MATLAB 中的实现 一、多项式的表达 n 次多项式表达为:n a +??++=x a x a x a p(x )1-n 1-n 1n 0,是n+1项之和 在MATLAB 中,n 次多项式可以用n 次多项式系数构成的长度为n+1的行向量表示 [a0, a1,……an-1,an] 二、多项式的加减运算 设 有 两 个 多 项 式 n a +??++=x a x a x a p1(x )1-n 1-n 1n 0和 m b +??++=x b x b x b p2(x )1-m 1-m 1m 0。它们的加减运算实际上就是它们的对应系 数的加减运算。当它们的次数相同时,可以直接对多项式的系数向量进行加减运算。当它们的次数不同时,应该把次数低的多项式无高次项部分用0系数表示。 例2 计算()()1635223-+++-x x x x a=[1, -2, 5, 3]; b=[0, 0, 6, -1]; c=a+b 例3 设()6572532345++-+-=x x x x x x f ,()3532-+=x x x g ,求f(x)+g(x) f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; g1=[0, 0, 0, g];%为了和f 的次数找齐 f+g1, f-g1 三、多项式的乘法运算 conv(p1,p2) 例4 在上例中,求f(x)*g(x) f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; conv(f, g) 四、多项式的除法运算 [Q, r]=deconv(p1, p2) 表示p1除以p2,给出商式Q(x),余式r(x)。Q,和r 仍为多项式系数向量 例4 在上例中,求f(x)/g(x) f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; [Q, r]=deconv(f, g) 五、多项式的导函数 p=polyder(P):求多项式P 的导函数 p=polyder(P,Q):求P·Q 的导函数

非线性薛定谔方程数值解的MATLAB仿真

[键入作者姓名] [键入文档标题] ——利用分步快速傅里叶变换对光纤中光信号的传输方程进行数值求解

1、非线性薛定谔方程 非线性薛定谔方程(nonlinear Schrodinger equation ,NLSE)是奥地利物理学家薛定谔于1926 年提出的,应用在量子力学系统中。由于量子力学主要研究粒子的动力学运动状态,所以不能运用牛顿力学公式来表示。通常在量子力学中,研究系统的状态一般通过波函数(x ,t)来表示。而对波函数的研究主要是求解非线性薛定谔方程。本文主要研究光脉冲在光纤中传输状态下的演变。 一般情况下,光脉冲信号在光纤中传输时,同时受到光纤的色散和非线性效应的影响。通过Maxwell 方程,考虑到光纤的色散和非线性效应,可以推导出光信号在光纤中的传输方程,即非线性薛定谔方程。NLSE 是非线性偏微分方程,一般很难直接求出解析解,于是通过数值方法进行求解。具体分为两大类:(1)分布有限差分法(split-step finite differencemethod ,SSFD);(2)分步傅里叶变换法(split-step Fourier transform method ,SSFT)。一般情况,在达到相同精度,由于分步傅里叶变换法采用运算速度快的快速傅里叶变换,所以相比较有限差分法运算速度快一到两个数量级。于是本文介绍分步傅里叶变换法来对光纤中光信号的传输方程,即非线性薛定谔方程进行数值求解。并通过MATLAB 软件对结果数值仿真。 非线性薛定谔方程的基本形式为: 22||t xx iu u u u =+ 其中u 是未知的复值函数. 目前,采用分步傅立叶算法(Split step Fourier Method)求解非线性薛定谔方程的数值解应用比较多。分步傅立叶方法最早是在1937年开始应用的,这种方法己经被证明是相同精度下数值求解非线性薛定愕方程最快的方法,部分原因是它采用了快速傅立叶变换算法(Fast Fourier Transform Algorithm)。基于MATLAB 科学计算软件以及MATLAB 强大的符号计算功能,完全可以实现分步傅立叶数值算法来对脉冲形状和频谱进行仿真。 一般情况下,光脉冲沿光纤传播时受到色散和非线性效应的共同作用,假设当传输距离 很小的时候,两者相互独立作用,那么,根据这种思想可建立如下分步傅立叶数值算法的数 学模型: 把待求解的非线性薛定谔方程写成以下形式: ??()U D N U z ?=+? (I ) (II )

matlab程序设计实践-牛顿法解非线性方程

中南大学 MATLAB程序设计实践学长有爱奉献,下载填上信息即可上交,没有下载券 的自行百度。所需m文件照本文档做即可,即新建(FILE)→脚本(NEW-Sscript)→复制本文档代码→运行(会跳出 保存界面,文件名默认不要修改,保存)→结果。第 一题需要把数据文本文档和m文件放在一起。全部测 试无误,放心使用。本文档针对做牛顿法求非线性函 数题目的同学,当然第一题都一样,所有人都可以用。 ←记得删掉这段话 班级: 学号: 姓名: 一、《MATLAB程序设计实践》Matlab基础

表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散空间函数值来表示取向分布函数,是三维取向分布函数的一个实例。由于数据量非常大,不便于分析,需要借助图形来分析。请你编写一个matlab程序画出如下的几种图形来分析其取向分布特征:(1)用Slice函数给出其整体分布特征; (2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);

(3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。

备注:数据格式说明 解: (1)将文件内的数据按照要求读取到矩阵f(phi1,phi,phi2)中,代码如下: fid=fopen(''); for i=1:18 tline=fgetl(fid); end phi1=1;phi=1;phi2=1;line=0; f=zeros(19,19,19); while ~feof(fid) tline=fgetl(fid); data=str2num(tline); line=line+1; if mod(line,20)==1 phi2=(data/5)+1; phi=1; 数据说明部分,与作图无关 此方向表示f 随着φ1从0,5,10,15, 20 …到90的变化而变化 此方向表示f 随着φ从0,5,10,15, 20 …到90的变化而变化 表示以下数据为φ2=0的数据,即f (φ1,φ,0)

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

非线性薛定谔方程的孤子解和怪波解

非线性薛定谔方程的孤子解和怪波解 摘要:光纤中光波的传输模型一直是当前研究的热点理论模型之一,从非线性薛定谔方程到金格堡-朗道方程,都试图对其进行更好的阐释,其次对于非线性动力学系统中,非线性薛定谔方程的解有呈现出非常多有趣的特征,对于其中特定解的研究能够让我们了解脉冲演化的本质,所以本文主要从孤子解的传输入手,并且简单介绍了怪波解的解形式。 薛定谔方程又称薛定谔波动方程,是量子力学的一个基本方程,同时又是量子力学的基本假设之一,由奥地利物理学家薛定谔1926年在《量子化就是本征值问题》中提出的,它在量子力学中的地位非常重要,相当于牛顿定律对于经典力学一样。 随着人们对世界的不断探索,非线性现象逐渐走进人们的视野,这种现象一般大都用非线性偏微分方程的数学模型来描述,显然线性方程已经不能满足人们的需求。 1973年,Hasegawa从含有非线性项的色散方程中推导出了非线性薛定谔方程。非线性薛定谔方程(NLS)是普适性很强的一个基本方程,最简单的形式是: 其中为常数。因为这个方程在几乎所有的物理分支及其他科学领域得到了广泛的应用,如超导,光孤子在光纤中传播,光波导,等离子体中的Langnui波等,所以许多学者对此方程的研究投入了很大的热情,至今还在生机勃勃的向前发展着。 1 分步傅里叶法计算演化过程 对于处理非线性性薛定谔方程,常用的数值仿真方式为分步傅里叶方法,为了简单起见,只考虑二阶色散和自相位调制,不考虑高阶色散、自陡以及四波混频等高阶非线性效应。上述方程中做 2 β为二阶色散,γ表示Kerr效应系数,g和α分别代表光纤中的增益和损耗。对上述方程转化到频域,先不考虑增益和损耗。可以得到 2 k k k k k dA i A i a a dz βγ =?+F. 其中2 2 2 k i β β ?=Ω 令() exp k k A B i z β =?可以得到 () 2exp k k k k dB i a a i z dz γβ =-? F 以上方程可以用四阶龙格库塔直接求解,但是速度较慢,所以我们需要做差分处理。 ()() ()()() 2 exp k k k k k B z z B z i a z a z i z z γβ +?- =-? ? F 再利用() exp k k A B i z β =?可以得到 ()()()() ()()() 2 2 exp exp exp k k k k k k k k A z z A i a z a z z i z a z i a z z i z γβ γβ ?? +?=+??? ?? ?? ?? ≈????? ?? F F 然后做傅里叶反变换就可以得到最终的结果 ()()()() 2 1exp exp - k k k k a z z a z i a z z i z γβ ?? +?=????? ?? F F

相关文档
最新文档