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

合集下载

非线性规划的MATLAB解法及其应用

非线性规划的MATLAB解法及其应用

题 目 非线性规划的MATLAB 解法及其应用(一) 问题描述非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。

非线性规划是20世纪50年代才开始形成的一门新兴学科。

70年代又得到进一步的发展。

非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。

在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。

例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存 费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。

对于静态的最优化 问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。

具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。

非线性规划研究一个n 元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。

目标函数和约束条件都是线性函数的情形则属于线性规划。

本实验就是用matlab 软件来解决非线性规划问题。

(二) 基本要求掌握非线性规划的MATLAB 解法,并且解决相关的实际问题。

题一 :对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?题二: 某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.符号说明:z(x 1,x 2)表示总利润;p 1,q 1,x 1分别表示甲的价格、成本、销量; p 2,q 2,x 2分别表示乙的价格、成本、销量; a ij ,b i ,λi ,c i (i ,j =1,2)是待定系数.题三:设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.(三) 数据结构题一:设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-;建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5题二:总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,λ1=0.015,c1=20, r2=100,λ2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量x1,x2,使总利润z 最大.为简化模型,先忽略成本,并令a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2的极值. 显然其解为x1 = b1/2a11 = 50, x2 = b2/2a22 = 70,我们把它作为原问题的初始值.题三:设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i(四) 源程序题一:编写M 文件fun0.m:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval题二:建立M-文件fun.m:function f = fun(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1); y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2); f=-y1-y2;输入命令:x0=[50,70];x=fminunc(‘fun ’,x0),z=fun(x)题三:建立M 文件 fun44.m,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));建立M 文件mycon1.m 定义非线性约束:function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0主程序youh4.m 为:x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')(五) 运行结果题一:运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.题二:运行结果为:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5.题三:运行结果为:x1=86.2;x2=104.2;x3=126.2;x4=152.8;z=43.1(六) 相关知识用Matlab 解无约束优化问题一元函数无约束优化问题21),(m in x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。

matlab数值薛定谔方程

matlab数值薛定谔方程

matlab数值薛定谔方程薛定谔方程是描述量子力学中粒子的行为的基本方程。

在数值计算中,我们可以使用数值方法来求解薛定谔方程。

下面我将从多个角度来回答关于在MATLAB中数值求解薛定谔方程的问题。

1. 数值方法的选择:在MATLAB中,我们可以采用多种数值方法来求解薛定谔方程,其中常用的方法包括有限差分法、有限元法和谱方法等。

选择合适的数值方法取决于问题的特点和计算资源的可用性。

2. 离散化:在数值计算中,我们需要将薛定谔方程离散化为有限个点上的代数方程。

通常,我们会将空间离散化为网格,并在每个网格点上计算波函数的值。

时间离散化则是通过迭代的方式逐步求解时间演化。

3. 有限差分法:有限差分法是一种常见的数值方法,它将导数近似为有限差分。

在薛定谔方程中,我们可以将二阶导数近似为中心差分,然后使用差分方程来求解离散化的薛定谔方程。

4. 有限元法:有限元法是一种广泛应用于偏微分方程求解的数值方法。

在薛定谔方程中,我们可以使用有限元法将波函数表示为一组基函数的线性组合,并通过求解线性方程组来确定系数。

5. 谱方法:谱方法是一种基于函数展开的数值方法,它使用一组特定的基函数来表示波函数。

在薛定谔方程中,我们可以使用傅里叶级数或其他正交多项式作为基函数,并通过求解线性方程组来确定系数。

6. 边界条件:在数值求解薛定谔方程时,我们需要指定合适的边界条件。

常见的边界条件包括固定边界条件和周期性边界条件,具体取决于问题的物理背景。

7. 算法实现:在MATLAB中,我们可以使用内置的数值计算函数和工具箱来实现数值求解薛定谔方程。

例如,可以使用MATLAB的PDE Toolbox来求解偏微分方程,或者使用MATLAB的FFT函数来进行傅里叶变换。

总结起来,数值求解薛定谔方程是一个复杂而重要的问题,需要根据具体情况选择合适的数值方法并进行适当的离散化和边界条件处理。

MATLAB提供了丰富的数值计算工具和函数,可以帮助我们实现数值求解薛定谔方程的算法。

Matlab中的非线性优化和非线性方程求解技巧

Matlab中的非线性优化和非线性方程求解技巧

Matlab中的非线性优化和非线性方程求解技巧在科学和工程领域中,我们经常会遇到一些复杂的非线性问题,例如最优化问题和方程求解问题。

解决这些问题的方法主要分为线性和非线性等,其中非线性问题是相对复杂的。

作为一种强大的数值计算工具,Matlab提供了许多专门用于解决非线性优化和非线性方程求解的函数和方法。

本文将介绍一些常用的Matlab中的非线性优化和非线性方程求解技巧。

非线性优化是指在给定一些约束条件下,寻找目标函数的最优解的问题。

在实际应用中,往往需要根据实际情况给出一些约束条件,如等式约束和不等式约束。

Matlab中的fmincon函数可以用于求解具有约束条件的非线性优化问题。

其基本语法如下:[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)其中,fun是目标函数,x0是初始值,A、b是不等式约束矩阵和向量,Aeq、beq是等式约束矩阵和向量,lb、ub是变量的上下边界。

x表示最优解,而fval表示最优解对应的目标函数值。

另外,非线性方程求解是指寻找使得方程等式成立的变量值的问题。

Matlab中提供的fsolve函数可以用于求解非线性方程。

其基本语法如下:x = fsolve(fun,x0)其中,fun是方程函数,x0是初始值,x表示方程的解。

除了fmincon和fsolve函数之外,Matlab还提供了一些其他的非线性优化和非线性方程求解函数,例如lsqnonlin、fminunc等,这些函数分别适用于无约束非线性优化问题和带约束非线性方程求解问题。

除了直接调用这些函数外,Matlab还提供了一些可视化工具和辅助函数来帮助我们更好地理解和解决非线性问题。

例如,使用Matlab的优化工具箱可以实现对非线性优化问题的求解过程可视化,从而更直观地观察到优化算法的收敛过程。

此外,Matlab还提供了一些用于计算梯度、雅可比矩阵和海塞矩阵的函数,这些函数在求解非线性问题时非常有用。

(完整版)基于MATLAB的快速傅里叶的非线性薛定谔方程

(完整版)基于MATLAB的快速傅里叶的非线性薛定谔方程

GP方程很好的描述BEC的行为
iht
r,t




h2 2m
2
Vext
r

g

r,t

2


r,t

非线性项
G-P方程是非线性薛定谔(Nonlinear Schrödinger)方程的一种, 这类方程大多都只能通过数值办法求解。
2020/2/14
理论物理
7/50
Outline
➢ Matlab程序的实现 ➢ Matlab实例
2020/2/14
理论物理
8/50
III. 算符劈裂算法
Gross-Pitaevskii (G-P)方程:
iht
r,
t




h2 2m
2
Vext
r


g r,t 2
非线性项


r,t

it r,t H Tˆ Vˆextnon r,t
2020/2/14
理论物理
5/50
Outline
➢ 玻色-爱因斯坦凝聚 (BECs) ➢ Gross-Pitaevskii (G-P) 方程 ➢ 算符劈裂算法 (Operator-Splitting methods)
虚时演化 实时演化
➢ 傅里叶变换(离散DFT和快速FFT)
离散傅里叶变换(DFT)算法 快速傅里叶变换(FFT)算法
➢ Matlab程序的实现 ➢ Matlab实例
2020/2/14
理论物理
6/50
II. Gross-Pitaevskii (G-P) 方程
薛定谔(Schrödinger)方程:

MATLAB求解非线性规划

MATLAB求解非线性规划

MATLAB求解非线性规划非线性规划是一类涉及非线性目标函数或非线性约束条件的数学规划问题。

MATLAB是一种强大的数学计算软件,可以用来求解非线性规划问题。

本文将介绍MATLAB中求解非线性规划问题的方法。

1. 目标函数和约束条件在MATLAB中,非线性规划问题可以表示为以下形式:minimize f(x)subject to c(x)≤0ceq(x)=0lb≤x≤ub其中f(x)是目标函数,c(x)和ceq(x)是不等式和等式约束条件,lb和ub是变量的下限和上限。

2. 求解器MATLAB提供了多种求解器可以用来求解非线性规划问题。

其中常用的有fmincon和lsqnonlin。

lsqnonlin可以用来求解非线性最小二乘问题。

它使用的是Levenberg-Marquardt算法,能够有效地求解非线性最小二乘问题,并且具有较好的收敛性。

3. 示例下面我们来看一个求解非线性规划问题的示例。

假设我们要求解以下非线性规划问题:首先,我们需要定义目标函数和约束条件。

在MATLAB中,我们可以使用anonymous function来定义目标函数和约束条件。

代码如下:f = @(x)x(1)^2+2*x(2)^2+3*x(3)^2;c = @(x)[x(1)+x(2)+x(3)-4, x(1)*x(2)+x(1)*x(3)+x(2)*x(3)-3];ceq = [];lb = [0,0,0];接下来,我们使用fmincon求解非线性规划问题。

代码如下:[x,fval,exitflag,output] = fmincon(f,[1,1,1],[],[],[],[],lb,[],@(x)c(x));其中,第一个参数是目标函数,第二个参数是变量的初值,第三个参数是不等式约束条件,第四个参数是等式约束条件,第五个参数是变量的下限,第六个参数是变量的上限,第七个参数是非线性约束条件,最后一个参数是opts,可以设置其他求解参数。

matlab数值薛定谔方程

matlab数值薛定谔方程

matlab数值薛定谔方程摘要:I.引言- 介绍薛定谔方程- 介绍matlab 数值求解方法II.薛定谔方程的数值求解方法- 有限差分法- 有限元法- 谱方法III.matlab 数值求解薛定谔方程的步骤- 准备薛定谔方程的数值模型- 选择数值求解方法- 编写matlab 代码- 运行代码,分析结果IV.结果与讨论- 结果展示- 结果分析- 结果验证V.结论- 总结matlab 数值求解薛定谔方程的方法- 展望未来的研究方向正文:I.引言薛定谔方程是量子力学中的一个基本方程,用于描述一个微观粒子在给定势能场中的运动状态。

然而,由于薛定谔方程本身是一个偏微分方程,它的求解在大多数情况下是非常困难的。

matlab 作为一种强大的科学计算软件,可以用于数值求解薛定谔方程。

本文将介绍薛定谔方程的数值求解方法,以及如何使用matlab 进行数值求解。

II.薛定谔方程的数值求解方法薛定谔方程的数值求解方法主要有以下几种:1.有限差分法:将薛定谔方程的解表示为离散的点,通过差分代替微分,将方程转化为一个线性代数方程组,从而求解薛定谔方程。

2.有限元法:将薛定谔方程的解表示为有限个基函数的线性组合,通过插值或逼近基函数,将方程转化为一个线性代数方程组,从而求解薛定谔方程。

3.谱方法:通过在一组基函数上将薛定谔方程进行投影,将方程转化为一个线性代数方程组,从而求解薛定谔方程。

III.matlab 数值求解薛定谔方程的步骤使用matlab 进行数值求解薛定谔方程的步骤如下:1.准备薛定谔方程的数值模型:首先需要根据实际问题建立薛定谔方程的数值模型,包括势能场、边界条件等。

2.选择数值求解方法:根据问题的特点和求解需求,选择合适的数值求解方法,如有限差分法、有限元法或谱方法。

3.编写matlab 代码:根据所选方法,编写matlab 代码,实现薛定谔方程的数值求解。

4.运行代码,分析结果:运行编写的matlab 代码,得到薛定谔方程的数值解。

matlab解非线性方程

matlab解非线性方程

matlab解非线性方程MATLAB求解非线性方程一、Matlab求解非线性方程的原理1. 非线性方程是指当函数中的变量出现不同的次方数时,得出的方程就是非线性的。

求解非线性方程的准确性决定于得出的解集是否丰富,以及解的精度是否符合要求。

2. Matlab是一款多功能的软件,可以快速求解工程中的数学方程和模型,包括一元非线性方程。

Matlab 具有非线性解析计算能力,可以极大地提高求解效率。

二、Matlab求解非线性方程的方法1. 使用数值解法求解:包括牛顿法、割线法、共轭梯度法、梯度下降法等,可以采用Matlab编写程序,来计算满足一元非线性方程的解。

2. 使用符号解法求解:在Matlab中,可以直接使用solve函数来解决一元非线性方程。

3. Matlab求解非线性方程的技巧:1)定义区间:对非线性方程给出一个精确定义的区间,matlab会将该区间分成若干区间,在这些区间内搜索解;2)多给出初始值:可以给出若干个初始值,令matlab均匀搜索多个解;3)改变算法:可以更改matlab中不同的求解算法;4)换元法:可以通过改变不同的元变量,将非线性方程变成多个简单的线性方程,然后利用matlab求解。

三、Matlab求解非线性方程的特点1. 高效:Matlab求解的方式高效有效,性能优异,可以节省大量的求解时间。

2. 准确:Matlab采用符号解法时,解的准确度精度更高,可以满足大部分要求。

3. 节省资源:Matlab求解非线性方程节省计算机资源,可以很好地利用资源,提高工作效率。

四、 Matlab求解非线性方程的步骤1. 对结构表达式编写程序;2. 设定相应的条件;3. 优化程序;4. 运行程序;5. 分析结果;6. 测试代码;7. 验证学习结果。

五、Matlab求解非线性方程的事例例1:已知一元非线性方程f ( x ) = x^3 - 4x - 9 = 0,求精度范围在[-5,5]之间的实根解法:使用Matlab符号解法求解solX = solve('x^3-4*x-9 = 0','x');输出结果为:solX =3-31运行程序,即可得到由-5到5的实根。

matlab数值薛定谔方程

matlab数值薛定谔方程

MATLAB数值薛定谔方程介绍薛定谔方程是量子力学中描述微观粒子行为的基本方程之一。

它描述了粒子的波函数随时间的演化。

在实际研究中,常常需要通过数值方法来求解薛定谔方程,特别是对于复杂的体系或无法通过解析方法求解的情况。

MATLAB作为一种强大的数值计算工具,提供了丰富的函数和工具箱,可以帮助我们求解薛定谔方程。

本文将介绍如何使用MATLAB进行数值求解,并给出一些示例代码和注意事项。

数值方法求解薛定谔方程通常需要使用数值方法,其中最常用的方法之一是有限差分法。

有限差分法将波函数离散化为网格点上的数值,通过近似微分来代替薛定谔方程中的导数项,从而转化为一个矩阵方程。

具体来说,我们可以将一维薛定谔方程表示为:iℏ∂Ψ(x,t)∂t=−ℏ22m∂2Ψ(x,t)∂x2+V(x)Ψ(x,t)其中,Ψ(x,t)是波函数,m是粒子的质量,V(x)是势能函数。

为了使用有限差分法求解,我们将空间坐标x离散化为网格点x i,时间t离散化为时间步长Δt,波函数Ψ(x,t)在网格点上的值用Ψi n表示,其中i表示网格点的索引,n表示时间步的索引。

将导数项用中心差分近似表示,我们可以得到:iℏΨi n+1−Ψi nΔt=−ℏ22mΨi+1n−2Ψi n+Ψi−1nΔx2+V i nΨi n其中,Δx是空间步长,V i n表示势能函数在网格点x i上的值。

通过这个差分方程,我们可以逐步更新波函数的值,从而得到波函数随时间的演化。

MATLAB代码示例下面是一个简单的MATLAB代码示例,演示如何使用有限差分法求解一维薛定谔方程。

% 定义参数hbar = 1; % 约化普朗克常数m = 1; % 粒子质量L = 10; % 空间范围N = 1000; % 网格点数dx = L/N; % 空间步长dt = 0.01; % 时间步长% 初始化波函数x = linspace(-L/2, L/2, N); % 空间坐标psi = exp(-x.^2); % 初始波函数% 求解薛定谔方程for n = 1:1000% 计算势能函数V = 0.5*x.^2;% 更新波函数psi = psi - 1i*dt*(hbar/(2*m))*(circshift(psi,-1,2)-2*psi+circshift(psi,1, 2))/(dx^2) - 1i*dt*V.*psi;% 绘制波函数随时间的演化plot(x, abs(psi).^2);xlim([-L/2, L/2]);ylim([0, 1]);xlabel('x');ylabel('|\psi|^2');title(['Time step ', num2str(n)]);drawnow;end在这个示例中,我们假设粒子质量m=1,空间范围L=10,网格点数N=1000。

基于matlab的非线性薛定谔方程的数值算法研究

基于matlab的非线性薛定谔方程的数值算法研究
首先, 可以将方程 (4­1) 归一化振幅:U A( z , T ) /
P0 ,P0 是入射脉冲的峰值功率,
此时方程(4­1)可改写为:
­ 2 ­

U i 2U U P0 i | U | 2 U 2 z 2 4 T
(4­2)
3. 分步傅立叶数值算法
目前, 采用分步傅立叶算法(Split step Fourier Method)求解非线性薛定谔方程的数值解应 用比较多。 分步傅立叶方法最早是在1937年开始应用的, 这种方法己经被证明是相同精度下 数值求解非线性薛定愕方程最快的方法,部分原因是它采用了快速傅立叶变换算法 (Fast Fourier Transform Algorithm)。基于MATLAB科学计算软件以及MATLAB强大的符号计算功 能,完全可以实现分步傅立叶数值算法来对脉冲形状和频谱进行仿真。
其中 F 和 F 分别表示傅立叶变换和反傅立叶变换运算。 Step2 非线性算符方程的求解
~
i z ~ U ( z , T ) F{exp[( 2 ) ] F [U (0, T )]} 2 2
Hale Waihona Puke (4­7)ˆ 的方程如下: 非线性部分 N
U P0 i | U | 2 U z
为了使用分步傅立叶法求解方程(4­2),将方程(4­2)写成以下形式:
U ˆN ˆ )U (D z
进一步,可以得出如下方程(4­3):
i 2U 2 T 2 ˆ D 2 ˆ P i | U | 2 N 0
(4­3)
然后,按照步骤 step1 和步骤 step2,依次计算方程(4­3)的线性算符和非线性算符。最后 在步骤 step3 中,运行步骤 step1 和步骤 step2 的 MATLAB 程序,得出线性算符和非线性算 符的精确数值解及其仿真曲线。 Step1 线性算符方程的求解

Matlab技术仿真方法

Matlab技术仿真方法

Matlab技术仿真方法引言:在科学研究和工程实践中,仿真方法已成为一种重要的手段。

Matlab作为一种强大的计算工具和开发环境,能够提供丰富的仿真技术和工具。

本文将介绍Matlab中常用的技术仿真方法,包括数值仿真、系统仿真和优化仿真。

一、数值仿真数值仿真是一种基于数值计算的仿真方法,它通过数值算法对特定问题进行求解,并获得数值结果。

Matlab具备强大的数值计算能力,提供了丰富的数值计算函数和工具箱。

在使用Matlab进行数值仿真时,可以按照以下步骤进行操作:1. 建立数学模型:首先需要分析仿真问题,建立数学模型。

模型可以是线性或非线性的,可以是连续或离散的,可以是时变或稳态的。

根据问题的特点,选择合适的数学模型进行描述。

2. 确定数值方法:根据数学模型的特点,选择合适的数值方法。

常见的数值方法包括差分法、插值法、数值积分法等。

Matlab提供了丰富的数值计算函数和工具箱,可以方便地使用这些数值方法。

3. 编写仿真程序:根据数值方法,使用Matlab编写仿真程序。

程序中需要包括数学模型的描述、数值方法的实现、参数的设置等内容。

4. 运行仿真程序:运行仿真程序,获得数值结果。

Matlab提供了直观的界面和交互式工具,可以方便地输入参数、运行程序,并查看仿真结果。

二、系统仿真系统仿真是一种基于建模和仿真的方法,用于研究和分析复杂系统的行为和性能。

Matlab提供了丰富的建模和仿真工具,可以方便地对系统进行建模和仿真。

1. 建立系统模型:根据实际系统的特点,选择合适的建模方法。

常见的系统建模方法包括系统方程法、状态空间法等。

Matlab提供了系统建模工具箱,可以方便地进行系统建模。

2. 确定仿真参数:确定仿真参数,包括系统初始条件、系统输入等。

在Matlab 中,可以通过设定初始条件和输入信号进行仿真参数的设置。

3. 进行仿真分析:运行仿真程序,对系统进行仿真分析。

Matlab提供了丰富的仿真工具和函数,可以对系统的行为和性能进行分析,并获得仿真结果。

matlab求解duffing方程

matlab求解duffing方程

matlab求解duffing方程使用MATLAB求解Duffing方程Duffing方程是一个非线性的二阶微分方程,广泛应用于物理学、力学、工程学等领域。

它描述了一个振动系统的运动规律,具有丰富的动力学特性。

本文将介绍如何使用MATLAB求解Duffing方程,并探讨其解的性质。

我们来回顾一下Duffing方程的形式:\[ \ddot{x} + \delta \dot{x} + \alpha x + \beta x^3 = \gamma \cos(\omega t) \]其中,\(x\) 表示系统的位移,\(\delta\) 是阻尼系数,\(\alpha\) 是线性刚度系数,\(\beta\) 是非线性刚度系数,\(\gamma\) 是外加驱动力的振幅,\(\omega\) 是外加驱动力的角频率。

为了使用MATLAB求解Duffing方程,我们需要将其转化为一阶微分方程组。

令 \(y_1 = x\) 和 \(y_2 = \dot{x}\),则方程可以表示为:\[ \dot{y_1} = y_2 \]\[ \dot{y_2} = -\delta y_2 - \alpha y_1 - \beta y_1^3 + \gamma \cos(\omega t) \]接下来,我们使用MATLAB的ode45函数进行数值求解。

ode45函数是MATLAB中常用的求解常微分方程初值问题的函数,它基于四阶五步的Runge-Kutta方法。

我们需要定义一个函数,输入参数为时间和状态变量,输出为状态变量的导数。

这个函数可以被ode45函数调用来求解微分方程。

下面是一个使用MATLAB求解Duffing方程的示例代码:```matlabfunction dxdt = duffingEquation(t, x)delta = 0.2;alpha = -1.0;beta = 1.0;gamma = 0.3;omega = 1.2;dxdt = zeros(2, 1);dxdt(1) = x(2);dxdt(2) = -delta * x(2) - alpha * x(1) - beta * x(1)^3 + gamma * cos(omega * t);endtspan = [0 100]; % 时间范围x0 = [0.5; 0]; % 初始状态[t, x] = ode45(@duffingEquation, tspan, x0); % 求解微分方程% 绘制位移随时间的变化曲线plot(t, x(:, 1));xlabel('时间');ylabel('位移');title('Duffing方程的解');```在上述代码中,我们定义了一个名为duffingEquation的函数,用于计算微分方程的导数。

如何用matlab解薛定谔方程?数值求解的无量纲化技术

如何用matlab解薛定谔方程?数值求解的无量纲化技术

如何用matlab解薛定谔方程?数值求解的无量纲化技术我前面讲了 matlab解二次微分方程的方法。

薛定谔方程当然是个二次微分方程. 所以,上一讲的matlab 的ode函数是可以解薛定谔方程的。

不过,在求解之前,我们还有个工作必须先做。

薛定谔方程中有个hbar,它的数值是如此之小,而且还要平方。

还有电子电荷e,光速c, 电子质量m 这样的数值也是如此。

这样的数值是不适合在计算程序中出现的。

凡是天文数值都不适合在计算程序中出现。

有个很优美的技术来消除它们,就是无量纲化。

这个技术是我们做计算的时候必须做的,所以,我在这里讲讲这个事情。

无量纲化,就是用一些特征的长度做长度单位,用一些特征的能量做能量单位。

假设我们研究的问题是原子,我们就可以用玻尔半径a = 0.529埃为长度单位,以氢原子基态能量的绝对值 13.6eV 为能量单位。

为了用它们做无量纲化,我们需要它们的公式形式:a = hbar^2 /me^2, |E0| = e^2/2a。

氢原子的径向波函数满足的薛定谔方程是[(-hbar^2/2m) (d^2/dr^2 + (2/r) d/dr) - e^2/r] R(r) = E R(r).把这方程两边除上述|E0|,得到 [a^2 (d^2/dr^2 + (2/r) d/dr) - 2a/r] R(r) = E R(r)。

这里的E 是以|E0| = 13.6eV 为单位的。

然后,把 a 除到导数下面的r上,方程就变成[(d^2/dr^2 + (2/r) d/dr) - 2/r] R(r) = E R(r),这里的r 是以a 为单位的。

这个方程里面的每个量都仅仅是一些无量纲的数了,方程大大简化了。

我们最后需要求解的方程是这个无量纲化的薛定谔方程:[(d^2/dr^2 + (2/r) d/dr) - 2/r] R(r) = E R(r)。

这方程怎么解,上一讲已经讲过了。

好不好懂,请给个意见。

数值分析中求解非线性方程的MATLAB求解程序(6种)

数值分析中求解非线性方程的MATLAB求解程序(6种)

数值分析中求解非线性方程的MATLAB求解程序(6种)数值分析中求解非线性方程的MATLAB求解程序(6种)1.求解不动点function [k,p,err,P]=fixpt(g,p0,tol,max1)%求解方程x=g(x) 的近似值,初始值为p0%迭代式为Pn+1=g(Pn)%迭代条件为:在迭代范围内满足|k|<1(根及附近且包含初值)k为斜率P(1)=p0;for k=2:max1P(k)=feval(g,P(k-1));err=abs(P(k)-P(k-1));relerr=err/(abs(P(k))+eps);p=P(k);if (err<tol)|(relerr<tol)< p="">break;endendif k==max1disp('超过了最长的迭代次数')endP=P';2.二分法function [c,err,yc]=bisect(f,a,b,delta)%二分法求解非线性方程ya=feval(f,a);yb=feval(f,b);if ya*yb>0break;max1=1+round((log(b-a)-log(delta))/log(2));for k=1:max1c=(a+b)/2;yc=feval(f,c);if yc==0a=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif b-a<delta< p="">break;endendc=(a+b)/2;err=abs(b-a);yc=feval(f,c);3.试值法function [c,err,yc]=regula(f,a,b,delta,epsilon,max1) %试值法求解非线性方程%f(a)和飞(b)异号ya=feval(f,a);yb=feval(f,b);if ya*yb>0disp('Note:f(a)*f(b)>0');for k=1:max1dx=yb*(b-a)/(yb-ya);c=b-dx;ac=c-a;yc=feval(f,c);if yc==0break;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;enddx=min(abs(dx),ac);if abs(dx)<delta|abs(yc)<epsilon< p="">break;endendc;err=abs(b-a)/2;yc=feval(f,c);4.求解非线性方程根的近似位置function R=approot(X,epsilon)%求解根近似位置%为了粗估算方程f(x)=0在区间[a,b]的根的位置,%使用等间隔采样点(xk,f(xk))和如下的评定准则:%f(xk-1)与f(xk)符号相反,%或者|f(xk)|足够小且曲线y=f(x)的斜率在%(xk,f(xk))附近改变符号。

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

非线性薛定谔方程数值解的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 强大的符号计算功能,完全可以实现分步傅立叶数值算法来对脉冲形状和频谱进行仿真。

如何通过MATLAB进行模拟与仿真

如何通过MATLAB进行模拟与仿真

如何通过MATLAB进行模拟与仿真引言:MATLAB(Matrix Laboratory)是一种用于数值分析和数据可视化的高级编程语言和环境。

它被广泛应用于科学研究、工程设计和教育培训等领域。

本文将介绍如何利用MATLAB进行模拟与仿真,从而加强理论学习、验证设计方案以及优化算法等方面发挥作用。

一、了解MATLAB的基本概念和功能MATLAB是一种多范式的编程语言,可进行数据分析、算法开发和数值计算等多种任务。

它具有强大的矩阵操作能力和丰富的函数库,可以进行各种数学运算、统计分析和信号处理等操作。

此外,MATLAB还支持快速绘图、动态可视化和图像处理等功能,有助于直观展示仿真结果。

二、建立仿真模型在进行仿真前,首先需要建立仿真模型。

仿真模型是指根据实际问题所设定的数学模型,并将其转化为MATLAB可以识别和处理的形式。

在建模过程中,可以利用MATLAB提供的各种函数和工具箱,如Simulink、Control System Toolbox等进行辅助。

确定好模型的输入、输出和参数等,以便后续的仿真和分析。

三、选择适当的仿真方法MATLAB提供了多种仿真方法,根据具体问题的特点选择合适的仿真方法非常重要。

常用的仿真方法包括Monte Carlo方法、有限元法和迭代求解等。

Monte Carlo方法适用于随机变量的模拟,有限元法用于解决结构、电磁和热力等问题,而迭代求解则适用于非线性方程组的求解。

根据问题的需求和复杂度,选择相应的仿真方法能够提高仿真的准确性和效率。

四、进行仿真实验在进行仿真实验前,需要根据仿真模型设定好实验参数和条件,如初始状态、仿真时间和外部输入等。

然后,利用MATLAB提供的仿真函数对模型进行仿真,并得到仿真结果。

仿真结果可以是一组数据、图形或动态模拟等形式,根据需要进行相应的处理和分析。

五、仿真结果的可视化与分析仿真结果的可视化与分析是评估仿真效果和提取有价值信息的重要环节。

MATLAB提供了丰富的绘图函数和工具,可以将仿真结果以直观、易理解的方式展示出来。

如何使用Matlab进行非线性优化问题求解

如何使用Matlab进行非线性优化问题求解

如何使用Matlab进行非线性优化问题求解概述:非线性优化问题在科学、工程和经济等领域中具有重要的应用价值。

Matlab作为一种有效的数值计算软件,提供了许多工具和函数可以用于解决非线性优化问题。

本文将介绍如何使用Matlab进行非线性优化问题求解,以帮助读者更好地利用这一强大的工具。

1. 定义非线性优化问题:非线性优化问题是指目标函数和约束条件中存在非线性函数的优化问题。

一般可表示为:min f(x)s.t. g(x) ≤ 0h(x) = 0其中,f(x)为目标函数,g(x)为不等式约束条件,h(x)为等式约束条件,x为待求解的变量。

2. 准备工作:在使用Matlab求解非线性优化问题之前,需要先准备好相应的工作环境。

首先,确保已安装了Matlab软件,并具备一定的编程基础。

其次,熟悉Matlab中的优化工具箱,该工具箱提供了各种用于求解优化问题的函数和工具。

3. 使用fmincon函数求解非线性优化问题:在Matlab中,可以使用fmincon函数来求解非线性优化问题。

该函数的基本语法如下:[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun为目标函数的句柄或字符串,x0为初始解向量,A、b为不等式约束条件的系数矩阵和常数向量,Aeq、beq为等式约束条件的系数矩阵和常数向量,lb、ub为变量的下界和上界,nonlcon为非线性约束条件的函数句柄或字符串,options为优化选项。

4. 设计目标函数和约束条件:在使用fmincon函数求解非线性优化问题之前,需要设计好目标函数和约束条件。

目标函数应根据实际问题进行建模,为求解问题提供一个优化目标。

约束条件则用于限制解的取值范围,可包括等式约束和不等式约束。

5. 设置初始解向量:在使用fmincon函数求解非线性优化问题时,需要设置一个合适的初始解向量x0。

初始解向量的选择可能对求解结果产生影响,因此可以根据问题的特点和求解经验来选择一个合适的初值。

非线性规划问题的Matlab实现求解

非线性规划问题的Matlab实现求解

本科毕业论文(设计)论文题目:非线性规划问题的建模与Matlab求解实现的案例分析学生:许富豪学号:1204180137专业:信息与计算科学班级:计科1201指导教师:王培勋完成日期:2015年6月25日非线性规划问题的建模与Matlab求解实现的案例分析容摘要非线性规划问题通常极其抽象,并且求解计算极其复杂,本文举个别非线性规划问题案例,通过对抽象的非线性规划问题先建立数学模型,再利用Matlab软件高效快捷的实现非线性规划问题的求解,最后分析利用Matlab软件得出的案例结果。

关键词:非线性规划建立数学模型Matlab目录(三号黑体居中)空一行空一行一、※※※※※※ (1)(一)※※※※※※ (1)1.※※※※※※※※※※※※※ (1)2.※※※※※※※ (4)(二)※※※※ (7)(三)※※※※※※※※ (12)二、※※※※ (16)(一)※※※※※ (16)(二)※※※※※ (24)1.※※※※ (24)2.※※※※※ (30)3.※※※※ (31)(三)※※※※ (33)三、※※※※ (36)(一)※※※※※ (38)(二)※※※※ (43)四、※※※※ (45)参考文献 (48)附录 (50)(标题顺序号、容及其开始页码均为四号宋体,一级标题为黑体四号)序 言非线性规划问题通常难以用人力计算,所以我们一般利用Matlab 软件代替人去计算抽象的非线性规划问题,解决了耗费时间、耗费精力的问题,快速准确的得出计算结果。

因此,善于利用Matlab 实现非线性规划问题的求解非常重要,而求解非线性规划问题之前必须先对问题进行建立数学模型,才能准确的理解题意并快速的运用Matlab 求解。

一、非现性规划的基本概念(一)定义如果目标函数或约束条件中至少有一个是非线性函数,则最优化问题就叫做非线性规划问题,简记为NP 。

(二)一般形式min (),n f x x E ∈,()=0(=1,2,..()0(j=1,2i jh x j m s t g x l ⋯≤⎩⋯⎧⎨),,)其中:1,2,n =()Tx x x x ⋯称为模型(NP )的决策变量,f 称为目标函数,(=1,...,)i h i m 和(=1,...,)j g j l 称为约束函数;()=0(=1,...,)i h x i m 称为等式约束;()0(=1,...,)j g x j l ≤称为不等式约束。

Matlab实例源码教程:如何用MATLAB求解非线性微分方程

Matlab实例源码教程:如何用MATLAB求解非线性微分方程

Matlab实例源码教程:如何用MATLAB求解非线性微分方程Matlab实例源码教程:如何用MATLAB求解非线性微分方程做一个最基本的假设:你们都看过高数。

一。

老湿发话了:童鞋们,求解一下这个方程,判断她是否稳定。

要是稳定,那么她是否存在极限环:一看明白了,这不就是传说中的范德普方程。

地球人都知道她稳定并有极限环。

现在我们就看看如何用MATLAB求解她的轨迹。

二。

一般的计算机求解方程的方法无外乎是这样:首先把该方程改写成一个规范的形式,一般使用状态空间表示法;而后调用已有的算法进行求解;最后对得出的结果进行处理,比如画图之类的。

接下来就对这三大步分别作出解释。

三。

输入待求解的方程。

首先我们知道,状态空间的标准形式(自由系统)是:这里X是列向量,F是作用于列向量的函数,可以是线性也可以是非线性。

范德普方程可以改写成这样的标准形式:MATLAB中关于输入输入待解方程的语句特别简单。

需要先定义一个普通函数,函数名任意,姑且叫做myFcn,格式如下 function xdot = myFcn (t, x) 需要注意的是,函数必须含有t, x两个参数,名称可以自己任意定。

xdot是这个函数本身的返回值,只出现在这个函数内部,因此也可以任意定。

定义中的x被视为是一个列向量,x(i)表示列向量中的第i个分量。

那么F函数的每一个分量即简单地用表达时给出即可。

其中的自变量可以引用x(i)。

以范德普方程为例:xdot = [x(2) ; u(1-x(1)^2)*x(2)-x(1)]于是,这两句话便构成了待解函数。

四。

调用MATLAB函数进行求解通常人工求解微分方程需要知道初始值,计算机求解也不例外。

另外,由于非线性方程一般只有数值解,故计算精度也可以调整。

这些都是可以自己调整的参数。

调用MATLAB计算求解常微分方程的模式很简单,格式为:[t, x] = ode45(@myFcn, [开始时间结束时间], [初始值列向量], options) 注意到求解出来的结果是[t, x]即一堆数,所以需要我们进行后处理比如画图之类的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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年开始应用的,这种方法己经被证明是相同精度下数值求解非线性薛定愕方程最快的方法,部分原因是它采用了快速傅立叶变换算法(Fast Fourier 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 实现
现待求解的非线性薛定谔方程如下:
22
2
024A i A A i A A z T αβγ∂∂+--=∂∂ 其中,A (z ,T )是光场慢变复振幅,z 是脉冲沿光纤传播的距离;1
T 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 )
此时方程(V)可改写为:
22
02
24U i U U P i U U z T αβγ∂∂=-++∂∂ 为了使用分步傅立叶法求解方程(VI ),将方程(VI )写成以下形式:
ˆˆ()U D
N U z
∂=+∂ 进一步,可以得出如下方程(VII ):
22
2
2ˆ2
ˆi U
T D
N P i U βαγ∂-+
∂==
然后,按照步骤1和步骤2,依次计算方程(VII )的线性算符和非线性算符。

最后在步骤3 中,运行步骤1和步骤2的MATLAB 程序,得出线性算符和非线性算符的精确数值解及其仿真曲线。

步骤1 线性算符方程的求解
线性算符的方程如下:
2222
i U
U
T U z
βα∂-+
∂∂=∂
用傅立叶变换方法,得到一个常微分方程(IX ):
2()24
U i i U U z αωβ
∂=--∂ 解方程(IX)得:
22(,)(0,)exp[]4
i U z U z βωαωω-=
式中(0,)U ω是初值(0,)U T 的傅立叶变换,将(,)U z ω进行反傅立叶变换就得到了
(,)U z T 。

方程(X)的求解公式为:
2(,){exp[()][(0,)]}22
i z
U z T F F U T βωα=-⋅
其中F 和F 分别表示傅立叶变换和反傅立叶变换运算。

步骤2 非线性算符方程的求解
(VI )
(VII )
(VIII )
(IX )
(X )
(XI )
非线性部分的方程如下:
2
0U P i U U z
γ∂=∂ 同Step1的方法,解方程(XII ),得到:
2
0(,)(0,)exp[(0,)]U z U Pi U T z ωωγ=
式中(0,)U ω是初值(0,)U T 的傅立叶变换,将(,)U z ω进行反傅立叶变换就得到了(,)U z T 。

方程(XIII)的求解公式为:
2
0(,){exp[(0,)][(0,)]}U z T F Pi U T z F U T γ=⋅
其中F 和F 分别表示傅立叶变换和反傅立叶变换运算。

步骤3 算法在MATLAB 中的实现
在Matlab 中,设有限时长序列()x n 的长度为(1)N n N ≤≤,它对应于一个频域内的长度为N 的有限长序列()(1)X k k N ≤≤,()X k 的角频2()(1)k
k k N NT
πω=
≤≤,其中T 是序列()x n 的采样时间间隔.
这种正反离散傅立叶变换的关系式为:
1
1
2()[()]()exp()(1)12()[()]()exp()(1)N
j N
j X k DFT x n x n j k n k N N
x n IDFT X k X k j k n n N N
N
π
π
====-⋅
⋅⋅ ≤≤==

⋅⋅ ≤≤∑∑ 然后用Matlab 中的离散傅立叶变换(DFT )函数fft 和离散傅立叶反变换(IDFT )的函数ifft 来实现方程(VIII),(XII)式中的傅立叶和反傅立叶变换运算。

进一步,得到方程(XI),(XIV) 的数值解及仿真曲线。

最后,通过测试一组参数,得到方程(V )在该算法下的MATLAB 运算结果。

MATLAB 总共用时34.26s ,求得的的结果曲线如下图所示。

结果表明,算法正确而且精度也比较高,能够在非线性薛定谔方程的求解中广泛应用。

(XII )
(XIII )
(XV )
(XIV )
附录MATLAB的脚本文件源代码:。

相关文档
最新文档