时域有限差分算法的Matlab源程序
- 格式:pdf
- 大小:667.73 KB
- 文档页数:6
开题报告论文题目:基于matlab的时域有限差分法的电磁仿真研究(10分)学院:电气工程及其自动化学院学号:1103000105姓名:__杨志刚___一、论文选题的目的和意义(300字以内;15分)时域有限差分法,因具有多种优点被运用到电磁场理论研究的各个方面,而且其使用成效和应用领域还在迅速扩大和提高,在现代电磁场理论研究中具有很大的重要性和很强的可操作性。
但是同时这种方法也存在一定的缺陷,主要表现在对无边界问题需要吸收边界条件处理,有色散误差,消耗内存大等方面。
本课题在利用时域有限差分法对一些实际的算例进行实验仿真和验证,同时对这种方法在解决实际问题的缺陷进行一定程度的研究和分析。
Matlab作为一种工程仿真工具得到了广泛应用。
用于时域有限差分法,可以简化编程,使研究者的研究重心放在FDTD法本身上,而不必在编程上花费过多的时间。
二、国内外关于该论题的研究现状和发展趋势(500字以内;15分)时域有限差分方法作为一种典型的全波时域分析方法,因其原理直观、编程简便、实用性强在目前的计算电磁学领域内被人们广泛深入地研究,并取得巨大应用成功的方法。
时域数值技术的一个突出优点是可以给出关于问题空间的丰富的时域信息,而且经过简单的时频变换,即可得到宽带范围的频域信息,相对频域方法显著地节约了计算量。
最近几十年,是电磁场数值计算时域技术蓬勃发展的时期,各具优势和特色的新颖时域算法层出不穷。
但是到目前为止国内关于时域有限差分法中的PML 算法文献较少,其中绝大多数文献集中在综述和应用方面。
而在国际的学报和杂志上对于这方面的文献非常多。
时域有限差分法经过了三十年多年的高速发展之后,仍然还是计算电磁学制高点的研究热潮,而且其应用的范围和成效还在迅速的扩大和提高。
本课题正是利用时域有限差分法的基础理论,利用matlab对一些实际的电磁场问题进行仿真研究。
三、论文的主攻方向、主要内容、研究方法及技术路线(1000字左右;40分)通过对时域有限差分法理解基础之上,利用matlab仿真软件按照这种方法编程,实现对三种情况下的电磁场情况的仿真研究。
matlab有限差分法一、前言Matlab是一种广泛应用于科学计算和工程领域的计算机软件,它具有简单易学、功能强大、易于编程等优点。
有限差分法(Finite Difference Method)是一种常用的数值解法,它将微分方程转化为差分方程,通过对差分方程进行离散化求解,得到微分方程的数值解。
本文将介绍如何使用Matlab实现有限差分法。
二、有限差分法基础1. 有限差分法原理有限差分法是一种通过将微分方程转化为离散形式来求解微分方程的数值方法。
其基本思想是将求解区域进行网格划分,然后在每个网格点上进行逼近。
假设要求解一个二阶常微分方程:$$y''(x)=f(x,y(x),y'(x))$$则可以将其转化为离散形式:$$\frac{y_{i+1}-2y_i+y_{i-1}}{h^2}=f(x_i,y_i,y'_i)$$其中$h$为网格步长,$y_i$表示在$x_i$处的函数值。
2. 一维情况下的有限差分法对于一维情况下的常微分方程:$$\frac{d^2 y}{dx^2}=f(x,y,y')$$可以使用中心差分法进行离散化:$$\frac{y_{i+1}-2y_i+y_{i-1}}{h^2}=f(x_i,y_i,y'_i)$$这个方程可以写成矩阵形式:$$A\vec{y}=\vec{b}$$其中$A$为系数矩阵,$\vec{y}$为函数值向量,$\vec{b}$为右端项向量。
三、Matlab实现有限差分法1. 一维情况下的有限差分法假设要求解的方程为:$$\frac{d^2 y}{dx^2}=-\sin(x)$$首先需要确定求解区域和网格步长。
在本例中,我们将求解区域设为$[0,2\pi]$,网格步长$h=0.01$。
则可以通过以下代码生成网格:```matlabx = 0:0.01:2*pi;```接下来需要构造系数矩阵和右端项向量。
根据上面的公式,系数矩阵应该是一个三对角矩阵,可以通过以下代码生成:```matlabn = length(x)-2;A = spdiags([-ones(n,1), 2*ones(n,1), -ones(n,1)], [-1 0 1], n, n); ```其中`spdiags`函数用于生成一个稀疏矩阵。
时域有限差分法对平面TE波的MATLAB仿真姓名:王云璐学号:2011302021(西北工业大学电子信息学院08041103,陕西西安,710072)摘要:本文分析FDTD算法的基本原理及两种典型边界条件的算法特点,通过MATLAB程序对TE波进行了仿真,模拟了高斯制下完全匹配层中磁场分量瞬态分布。
得到了相应的磁场幅值效果图。
最后得出用Matlab语言对FDTD算法编程的几点结论。
关键词:FDTD;MATLAB;PML;平面TE波1引言电磁场的有限差分一般是在时域上进行的,随着计算机技术的发展和应用,近年来,时域计算方法越来越受到重视。
时域有限差分法具有简单、结果直观、网格剖分简单等优点。
近些年FDTD发展的十分迅速,在许多方面都有重要应用,包括天线设计,微波电路设计,电磁兼容分析,电磁散射计算,光子学应用等等。
时域有限差分(FDTD)算法是K.S.Yee于1966年提出的直接对麦克斯韦方程作差分处理,用来解决电磁脉冲在电磁介质中传播和反射问题的算法。
基本思想是:FDTD计算域空间节点采用Yee元胞的方法,同时电场和磁场节点空间与时间上都采用交错抽样;把整个计算域划分成包括散射体的总场区以及只有反射波的散射场区,这两个区域是以连接边界相连接,最外边是采用特殊的吸收边界,同时在这两个边界之间有个输出边界,用于近、远场转换;在连接边界上采用连接边界条件加入入射波,从而使得入射波限制在总场区域;在吸收边界上采用吸收边界条件,尽量消除反射波在吸收边界上的非物理性反射波。
本文主要简述了FDTD算法的基本原理,解的稳定性以及边界条件特点,并用Matlab语言进行对平面TE波进行了编程计算。
2FDTD基本原理时域有限差分法的主要思想是把Maxwell方程在空间、时间上离散化,用差分方程代替一阶偏微分方程,求解差分方程组,从而得出各网格单元的场值。
FDTD空间网格单元上电场和磁场各分量的分布如图1所示。
图1.Yee 氏网格及其电磁场分量分布电场和磁场被交叉放置,电场分量位于网格单元每条棱的中心,磁场分量位于网格单元每个面的中心,每个磁场(电场)分量都有4个电场(磁场)分量环绕。
有限差分 MATLAB简介有限差分方法(Finite Difference Method)是一种常用的数值计算方法,用于求解偏微分方程或者常微分方程的数值近似解。
MATLAB是一个功能强大的数值计算软件,可以很方便地实现有限差分方法。
本文将介绍有限差分方法在MATLAB中的应用。
首先,我们将简要介绍有限差分方法的原理和基本思想。
然后,我们将通过一个具体的例子来演示如何使用MATLAB进行有限差分计算。
最后,我们将总结本文内容,并提供一些相关资源供读者进一步深入学习。
有限差分方法原理有限差分方法是一种基于离散化思想的数值计算方法。
它通过将求解区域划分为网格点,并利用离散点上函数值之间的差商逼近导数来近似求解微分方程。
对于一维问题,我们可以将求解区域划分为等距离的网格点,记作x0, x1,x2, …, xn。
每个网格点上函数值记作u0, u1, u2, …, un。
我们希望通过已知边界条件和微分方程来求解其他未知函数值。
有限差分法的基本思想是使用差商逼近导数。
例如,对于一阶导数,我们可以使用前向差分、后向差分或者中心差分来逼近。
其中,前向差分定义为:f'(x) ≈ (f(x+h) - f(x)) / h后向差分定义为:f'(x) ≈ (f(x) - f(x-h)) / h中心差分定义为:f'(x) ≈ (f(x+h) - f(x-h)) / (2h)类似地,我们可以使用更高阶的有限差分来逼近更高阶的导数。
对于二维问题,我们可以将求解区域划分为二维网格点,并在每个网格点上计算函数值。
然后,我们可以使用类似的方法来逼近偏导数。
MATLAB实现在MATLAB中,我们可以很方便地使用矩阵运算和向量化操作来实现有限差分方法。
首先,我们需要定义求解区域和网格点。
假设我们要求解一个一维问题,在区间[0, 1]上进行离散化。
我们可以通过指定网格点个数n和步长h来确定网格点坐标:n = 100; % 网格点个数h = 1/n; % 步长x = linspace(0, 1, n+1); % 网格点坐标接下来,我们需要定义边界条件和微分方程。
时域有限差分法的M a tlab 仿真郭春波(华北电力大学电子与通信工程系 河北保定 071003)摘 要:介绍了时域有限差分法的基本原理,并利用M atlab 仿真,对矩形波导谐振腔中的电磁场作了模拟和分析。
关键词:时域有限差分法;M atlab ;矩形波导;谐振腔中图分类号:T P 937 文献标识码:B 文章编号:1004373X (2003)1106103Si m ula tion of F i n ite D ifference T i m e D oma i n M ethod Usi ng M a tlabGUO Chunbo(D epart m ent of E lectronic and Comm unicati on Engineering ,N o rth Ch ina E lectric Pow er U niversity ,B aoding ,071003,Ch ina )Abstract :T he basic p rinci p le of fin ite difference ti m e dom ain m ethod is in troduced 1A nd the electrom agnetic field in rectangle w avegu ide resonan t cavity is si m u lated and analyzed u sing M atlab 1Keywords :fin ite difference ti m e dom ain m ethod ;M atlab ;rectangle w avegu ide ;resonan t cavity收稿日期:20030325目前,电磁场的时域计算方法越来越引人注目。
时域有限差分(F in ite D ifference T i m e Dom ain ,FD TD )法[1]作为一种主要的电磁场时域计算方法,最早是在1966年由K 1S 1Yee 提出的。
matlab模拟的电磁学时域有限差分法 pdf电磁学时域有限差分法(FDTD)是一种基于数值模拟的电磁场计算方法,它使用有限差分来近似微分方程。
该方法广泛用于电磁学、电波传播、微波技术、光学等领域,以求解电磁场分布和场的辐射、散射等问题。
而在这个领域中,MATLAB是非常流行的工具之一。
本文将围绕“MATLAB模拟的电磁学时域有限差分法”这一主题,从以下几个方面进行阐述:1.时域有限差分法的基础概念在FDTD方法中,将时域中的Maxwell方程组转化为差分形式,使得可以在计算机上进行数值解法。
通过在空间和时间上的离散,可以得到电磁场在时域内的各种分布,进而求得特定情况下的电磁场变化。
2.MATLAB中的FDTD仿真在MATLAB中,我们可以使用PDE工具箱中的电磁学模块来实现FDTD仿真。
通过选择适当的几何形状和边界条件,可以利用该工具箱演示电磁场的传输、反射、折射、透射等现象。
同时,MATLAB中还提供了不同的场分量计算和可视化工具,以便用户可以更好地理解电磁场分布。
3.MATLAB代码实现以下是一些MATLAB代码示例,展示了FDTD模拟的基础实现方法。
代码中的示例模拟了平面波在一个矩形和圆形障碍物上的传播情况。
% 1. Square obstaclegridSize = 200; % Grid sizemaxTime = 600; % Maximum time (in steps)imp0 = 377.0; % Impedance of free spacecourantNumber = 0.5; % Courant numbercdtds = ones(gridSize,gridSize); % Courant number in space% (not variable in this example)Ez = zeros(gridSize, gridSize); % Define EzHy = zeros(gridSize, gridSize); % Define Hy% Simulation loopfor n = 1:maxTime% Update magnetic fieldHy(:,1:end-1) = Hy(:,1:end-1) + ...(Ez(:,2:end) - Ez(:,1:end-1)) .*cdtds(:,1:end-1) / imp0;% Update electric fieldEz(2:end-1,2:end-1) = Ez(2:end-1,2:end-1) + ...(Hy(2:end-1,2:end-1) - Hy(1:end-2,2:end-1)) .* cdtds(2:end-1,2:end-1) .* imp0;end% 2. Circular obstacleradius = 50;xAxis = [-100:99];[X,Y] = meshgrid(xAxis);obstacle = sqrt((X-50).^2 + (Y).^2) < radius;gridSize = length(xAxis); % Grid sizemaxTime = 500; % Maximum time (in steps)imp0 = 377.0; % Impedance of free space courantNumber = 0.5; % Courant numbercdtds = ones(gridSize,gridSize); % Courant number in space% (not variable in this example)Ez = zeros(gridSize, gridSize); % Define EzHy = zeros(gridSize, gridSize); % Define Hy% Simulation loopfor n = 1:maxTime% Update magnetic fieldHy(:,1:end-1) = Hy(:,1:end-1) + ...(Ez(:,2:end) - Ez(:,1:end-1)) .*cdtds(:,1:end-1) / imp0;% Update electric field, with obstacleEz(2:end-1,2:end-1) = Ez(2:end-1,2:end-1) + ...(Hy(2:end-1,2:end-1) - Hy(1:end-2,2:end-1)) .* cdtds(2:end-1,2:end-1) .* imp0;Ez(obstacle) = 0;end以上代码仅供参考,不同条件下的模拟需要适当修改,以便获得特定的模拟结果。
matlab模拟的电磁学时域有限差分法时域有限差分法(FDTD)是一种计算电磁波传播及散射的数值模拟方法。
它是基于麦克斯韦方程组进行仿真的一种方法,而且从计算电磁波传播的实质上来看,FDTD方法是一种求解时域麦克斯韦方程的有限差分方法。
在FDTD方法中,我们将区域空间离散化,并定义电场、磁场等量的格点值。
然后,根据麦克斯韦方程组的时域形式,在各个时刻进行场量的更新。
FDTD方法在实践应用中具有计算时间和空间复杂度低,且适用于复杂的结构和非线性介质等特点,所以在电磁学数值仿真中应用广泛。
我们可以用MATLAB来进行FDTD的电磁学仿真,下面详细介绍MATLAB的使用步骤:1. 建立空间离散化格点在仿真开始前,需要先根据空间大小和仿真目的来建立离散化格点。
对于一个一维的结构,我们可以用以下代码来建立:x = linspace(0,1,N); %建立离散化空间格点Ex = zeros(1,N); %电场,长度为N的全0数组Hy = zeros(1,N); %磁场,长度为N的全0数组其中N为获取离散化格点数量的参数,x为离散化空间格点,Ex和Hy为电场和磁场。
2. 定义电场和磁场边界条件在进行仿真时,需要了解仿真的边界情况并将其定义成特殊的边界条件。
例如,仿真空间内可能存在各种元件、环境等,这些都会对电场和磁场的性质产生影响。
所以,我们需要用特殊边界条件来约束仿真空间内电场和磁场的行为。
在FDTD中,通常采用数值反射边界条件(DNG Boundary)来进行仿真。
例如,在这个边界条件下,在仿真空间内部设置经典的电场边界条件:场强等于零;并在仿真空间外部添加一层基质,该基质的介电常数和磁导率均为负值,并且在该基质中场的强度和方向均反向。
相当于在仿真空间外设置一个虚拟折射界面,能够将场边界反射。
我们设定如下代码:M = 20; % 反射界面层数Ex_low_M1 = 0; %反射界面边界条件Ex_high_M1 = 0; %反射界面边界条件for i = 1:MEx_low_M2(i) = Ex_high_M2(i-1); %反转反射界面内的电场贡献Ex_high_M2(i) = Ex_low_M2(i-1); %反转反射界面内的电场贡献end3. 计算电场的场值FDTD仿真中最核心的内容就是判断时刻要计算的电场场值。
South China Normal University课程设计实验报告课程名称:计算电磁学指导老师:专业班级: 2014级电路与系统姓名:学号:FDTD算法的MATLAB语言实现摘要:时域有限差分(FDTD)算法是K.S.Yee于1966年提出的直接对麦克斯韦方程作差分处理,用来解决电磁脉冲在电磁介质中传播和反射问题的算法。
其基本思想是:FDTD计算域空间节点采用Yee元胞的方法,同时电场和磁场节点空间与时间上都采用交错抽样;把整个计算域划分成包括散射体的总场区以及只有反射波的散射场区,这两个区域是以连接边界相连接,最外边是采用特殊的吸收边界,同时在这两个边界之间有个输出边界,用于近、远场转换;在连接边界上采用连接边界条件加入入射波,从而使得入射波限制在总场区域;在吸收边界上采用吸收边界条件,尽量消除反射波在吸收边界上的非物理性反射波。
本文主要结合FDTD算法边界条件特点,在特定的参数设置下,用MATLAB语言进行编程,在二维自由空间TEz网格中,实现脉冲平面波。
关键词:FDTD;MATLAB;算法1 绪论1.1 课程设计背景与意义20世纪60年代以来,随着计算机技术的发展,一些电磁场的数值计算方法逐步发展起来,并得到广泛应用,其中主要有:属于频域技术的有限元法(FEM)、矩量法(MM)和单矩法等;属于时域技术方面的时域有限差分法(FDTD)、传输线矩阵法(TLM)和时域积分方程法等。
其中FDTD是一种已经获得广泛应用并且有很大发展前景的时域数值计算方法。
时域有限差分(FDTD)方法于1966年由K.S.Y ee提出并迅速发展,且获得广泛应用。
K.S.Y ee用后来被称作Y ee氏网格的空间离散方式,把含时间变量的Maxwell旋度方程转化为差分方程,并成功地模拟了电磁脉冲与理想导体作用的时域响应。
但是由于当时理论的不成熟和计算机软硬件条件的限制,该方法并未得到相应的发展。
20世纪80年代中期以后,随着上述两个条件限制的逐步解除,FDTD便凭借其特有的优势得以迅速发展。
有限差分法是一种数值方法,用于求解偏微分方程。
下面是一个使用MATLAB 实现有限差分法的简单示例。
这个示例使用有限差分法求解一维热传导方程:
matlab
% 参数设定
L = 10; % 空间长度
T = 1; % 时间长度
dx = 0.1; % 空间步长
dt = 0.01; % 时间步长
Nx = round(L/dx); % 空间网格点数
Nt = round(T/dt); % 时间网格点数
% 初始化
u = zeros(1, Nx); % 温度数组
u_old = u; % 上一步的温度数组
% 初始条件
u(1) = 1; % 初始温度在 x=0 处为 1
u(Nx) = 0; % 初始温度在 x=L 处为 0
% 时间循环
for n = 1:Nt
% 空间循环
for i = 2:Nx-1
u_old(i) = u(i); % 保存当前温度值
u(i) = u_old(i) + dt/dx*(u_old(i+1) - u_old(i)); % 有限差分法更新温度值
end
% 时间循环继续,更新下一步的温度值
end
% 绘图
plot(0:dx:L, u);
xlabel('x');
ylabel('u');。
差分方程的解法分析及MATLAB 实现(程序)摘自:张登奇,彭仕玉.差分方程的解法分析及其MATLAB 实现[J]. 湖南理工学院学报.2014(03) 引言线性常系数差分方程是描述线性时不变离散时间系统的数学模型,求解差分方程是分析离散时间系统的重要内容.在《信号与系统》课程中介绍的求解方法主要有迭代法、时域经典法、双零法和变换域法[1].1 迭代法例1 已知离散系统的差分方程为)1(31)()2(81)1(43)(-+=-+--n x n x n y n y n y ,激励信号为)()43()(n u n x n =,初始状态为21)2(4)1(=-=-y y ,.求系统响应. 根据激励信号和初始状态,手工依次迭代可算出2459)1(,25)0(==y y . 利用MATLAB 中的filter 函数实现迭代过程的m 程序如下:clc;clear;format compact;a=[1,-3/4,1/8],b=[1,1/3,0], %输入差分方程系数向量,不足补0对齐n=0:10;xn=(3/4).^n, %输入激励信号zx=[0,0],zy=[4,12], %输入初始状态zi=filtic(b,a,zy,zx),%计算等效初始条件[yn,zf]=filter(b,a,xn,zi),%迭代计算输出和后段等效初始条件2 时域经典法用时域经典法求解差分方程:先求齐次解;再将激励信号代入方程右端化简得自由项,根据自由项形式求特解;然后根据边界条件求完全解[3].用时域经典法求解例1的基本步骤如下.(1)求齐次解.特征方程为081432=+-αα,可算出41 , 2121==αα.高阶特征根可用MATLAB 的roots 函数计算.齐次解为. 0 , )41()21()(21≥+=n C C n y n n h (2)求方程的特解.将)()43()(n u n x n =代入差分方程右端得自由项为 ⎪⎩⎪⎨⎧≥⋅==-⋅+-1,)43(9130 ,1)1()43(31)()43(1n n n u n u n n n 当1≥n 时,特解可设为n p D n y )43()(=,代入差分方程求得213=D . (3)利用边界条件求完全解.当n =0时迭代求出25)0(=y ,当n ≥1时,完全解的形式为 ,)43(213 )41()21()(21n n n C C n y ⋅++=选择求完全解系数的边界条件可参考文[4]选)1(),0(-y y .根据边界条件求得35,31721=-=C C .注意完全解的表达式只适于特解成立的n 取值范围,其他点要用)(n δ及其延迟表示,如果其值符合表达式则可合并处理.差分方程的完全解为)(])43(213 )41(35)21(317[)1(])43(213 )41(35)21(317[)(25)(n u n u n n y n n n n n n ⋅+⋅+⋅-=-⋅+⋅+⋅-+=δ MATLAB 没有专用的差分方程求解函数,但可调用maple 符号运算工具箱中的rsolve 函数实现[5],格式为y=maple('rsolve({equs, inis},y(n))'),其中:equs 为差分方程表达式, inis 为边界条件,y(n)为差分方程中的输出函数式.rsolve 的其他格式可通过mhelp rsolve 命令了解.在MATLAB 中用时域经典法求解例1中的全响应和单位样值响应的程序如下.clc;clear;format compact;yn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=5/2,y(-1)=4},y(n))'),hn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(0)=1,y(1)=13/12},y(n))'),3 双零法根据双零响应的定义,按时域经典法的求解步骤可分别求出零输入响应和零状态响应.理解了双零法的求解原理和步骤,实际计算可调用rsolve 函数实现.yzi=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(-1)=4, y(-2)=12},y(n))'),yzs=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=1,y(-1)=0},y(n))'),4 变换域法设差分方程的一般形式为)()(00r n x b k n y a r Mr k N k -=-∑∑==.对差分方程两边取单边z 变换,并利用z 变换的位移公式得])()([])()([1010m r m r r M r l k l k k N k z m x z X z b z l y z Y z a ---=-=---=-=∑∑∑∑+=+整理成)()()()()()(00z X z X z B z Y z Y z A +=+形式有. )(, )(110110M M N N z b z b b z B z a z a a z A ----+++=+++=. )()(, )()(110110∑∑∑∑=--=--=--=--==M r r m m r r N k k l l k k z m x b s X zl y a s Y可以看出,由差分方程可直接写出 )(z A 和 )(z B ,系统函数)(/)()(z A z B z H =,将系统函数进行逆z 变换可得单位样值响应.由差分方程的初始状态可算出 )(0z Y ,由激励信号的初始状态可算出 )(0z X ,将激励信号进行z 变换可得 )(z X ,求解z 域代数方程可得输出信号的象函数 , )()()()()()(00z A z Y z X z X z B z Y -+= 对输出象函数进行逆z 变换可得输出信号的原函数)(n y .利用z 变换求解差分方程各响应的步骤可归纳如下:(1)根据差分方程直接写出 )(z A 、 )(z B 和)(z H ,)(z H 的逆变换即为单位样值响应;(2)根据激励信号算出 )(z X ,如激励不是因果序列则还要算出前M 个初始状态值;(3)根据差分方程的初始状态 )(, ),2( ),1(N y y y -⋅⋅⋅--和激励信号的初始状态 )(, ),2( ),1(M x x x -⋅⋅⋅--算出 )(0z Y 和 )(0z X ;(4)在z 域求解代数方程)()()()()()(00z X z X z B z Y z Y z A +=+得输出象函数 )(z Y , )(z Y 的逆变换即为全响应;(5)分析响应象函数的极点来源及在z 平面中的位置,确定自由响应与强迫响应,或瞬态响应与稳态响应;(6)根据零输入响应和零状态响应的定义,在z 域求解双零响应的象函数,对双零响应的象函数进行逆z 变换,得零输入响应和零状态响应.用变换域法求解例1的基本过程如下. 根据差分方程直接写出2181431 )(--+-=z z z A ,1311 )(-+=z z B .系统函数的极点为41,21. 对激励信号进行z 变换得)43/( )(-=z z z X .激励象函数的极点为3/4. 根据差分方程的初始状态算出102123 )(-+-=z z Y .根据激励信号的初始状态算出 0)(0=z X . 对z 域代数方程求解,得全响应的象函数)323161123/()83243125( )(2323-+-+-=z z z z z z z Y . 进行逆z 变换得全响应为)(])43(213 )41(35)21(317[)(n u n y n n n ⋅+⋅+⋅-= 其中,与系统函数的极点对应的是自由响应;与激励象函数的极点对应的是强迫响应. )(z Y 的极点都在z 平面的单位圆内故都是瞬态响应.零输入响应和零状态响应可按定义参照求解.上述求解过程可借助MATLAB 的符号运算编程实现.实现变换域法求解差分方程的m 程序如下: clc;clear;format compact;syms z n %定义符号对象% 输入差分方程、初始状态和激励信号%a=[1,-3/4,1/8],b=[1,1/3], %输入差分方程系数向量y0=[4,12],x0=[0], %输入初始状态,长度分别比a 、b 短1,长度为0时用[]xn=(3/4)^n, %输入激励信号,自动单边处理,u(n)可用1^n 表示% 下面是变换域法求解差分方程的通用程序,极点为有理数时有解析式输出 %N=length(a)-1;M=length(b)-1;%计算长度Az=poly2sym(a,'z')/z^N;Bz=poly2sym(b,'z')/z^M;%计算A(z)和B(z)Hz=Bz/Az;disp('系统函数H(z):'),sys=filt(b,a),%计算并显示系统函数hn=iztrans(Hz);disp('单位样值响应h(n)='),pretty(hn),%计算并显示单位样值响应Hzp=roots(a);disp('系统极点:');Hzp,%计算并显示系统极点Xz=ztrans(xn);disp('激励象函数X(z)='),pretty(Xz),%激励信号的单边z 变换Y0z=0;%初始化Y0(z),求Y0(z)注意系数标号与变量下标的关系for k=1:N;for l=-k:-1;Y0z = Y0z+a(k+1)*y0(-l)*z^(-k-l);endenddisp('初始Y0(z)'),Y0z,%系统初始状态的z 变换X0z=0;%初始化X0(z),求X0(z)注意系数标号与变量下标的关系for r=1:M;for m=-r:-1;X0z = X0z+b(r+1)*x0(-m)*z^(-r-m);endenddisp('初始X0(z)'),X0z,%激励信号起始状态的z 变换Yz=(Bz*Xz+X0z-Y0z)/Az;disp('全响应的z 变换Y(z)'),pretty(simple(Yz)),yn=iztrans(Yz);disp('全响应y(n)='),pretty(yn),% 计算并显示全响应Yziz=-Y0z/Az;disp('零输入象函数Yzi(z)='),pretty(Yziz),%零激励响应的z 变换yzin=iztrans(Yziz);disp('零输入响应yzi(n)='),pretty(yzin),% 计算并显示零输入响应 Yzsz=(Bz*Xz+X0z)/Az;disp('零状态象函数Yzs(z)='),pretty(Yzsz),%零状态响应的z 变换yzsn=iztrans(Yzsz);disp('零状态响应yzs(n)='),pretty(yzsn),% 计算并显示零状态响应该程序的运行过程与手算过程对应,显示在命令窗的运行结果与手算结果相同.。
matlab在有限差分法数值计算中的应用1.前言有限差分法是一种常用的数值计算方法,常用于求解偏微分方程。
Matlab是一种非常强大的数值计算软件,也被广泛应用于各种科学计算中。
本文将围绕有限差分法在Matlab中的应用进行讨论。
2.有限差分法有限差分法是一种数值计算方法,通常用于求解偏微分方程。
其基本思想是将偏微分方程中的导数用差分的形式进行近似。
这样就可以把偏微分方程转化为差分方程,进而用数值方法求解。
在有限差分法中,将求解区域离散化为网格,并在网格上通过差分近似来求解偏微分方程。
有限差分法的基本思想是将导数转化为差分形式。
由于导数的定义是极限形式的,因此我们可以通过极限的概念来推导差分近似。
例如,对于函数$f(x)$,它在$x=a$处的导数为$f'(a)$,则可以表示为:$$f'(a)=\lim_{h\to0}\frac{f(a+h)-f(a)}{h}$$如果我们取一个无穷小的$h$,则可以得到:$$f'(a)\approx\frac{f(a+h)-f(a)}{h}$$这就是一个一阶中心差分近似。
同样,我们还可以用其他的差分形式来表示导数。
有限差分法的核心就是建立差分方程。
在建立差分方程时,我们需要先将求解区域离散化为网格,然后在每个网格点上建立差分方程。
通常情况下,差分方程和原始的偏微分方程形式相同,只是将偏导数用差分近似来替代。
例如,对于泊松方程:$$\frac{\partial^2\phi}{\partialx^2}+\frac{\partial^2\phi}{\partial y^2}=f(x,y)$$我们可以将其离散化为网格上的差分方程:$$\frac{\phi_{i-1,j}-2\phi_{i,j}+\phi_{i+1,j}}{\Deltax^2}+\frac{\phi_{i,j-1}-2\phi_{i,j}+\phi_{i,j+1}}{\Deltay^2}=f_{i,j}$$其中,$\Delta x$和$\Delta y$表示网格的大小,$\phi_{i,j}$表示在网格点$(x_i,y_j)$处的解,$f_{i,j}$表示在网格点$(x_i,y_j)$处的源项。
南京理工大学课程考核论文课程名称:高等数值分析论文题目:有限差分法求解偏微分方程*名:**学号: 1成绩:有限差分法求解偏微分方程一、主要内容1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程:22(,)()u uf x t t xαα∂∂-=∂∂其中为常数具体求解的偏微分方程如下:22001(,0)sin()(0,)(1,)00u u x t x u x x u t u t t π⎧∂∂-=≤≤⎪∂∂⎪⎪⎪=⎨⎪⎪==≥⎪⎪⎩2.推导五种差分格式、截断误差并分析其稳定性;3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析;4.结论及完成本次实验报告的感想。
二、推导几种差分格式的过程:有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。
有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
推导差分方程的过程中需要用到的泰勒展开公式如下:()2100000000()()()()()()()......()(())1!2!!n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1)求解区域的网格划分步长参数如下:11k k k kt t x x h τ++-=⎧⎨-=⎩ (2-2) 2.1 古典显格式2.1.1 古典显格式的推导由泰勒展开公式将(,)u x t 对时间展开得 2,(,)(,)()()(())i i k i k k k uu x t u x t t t o t t t∂=+-+-∂ (2-3) 当1k t t +=时有21,112,(,)(,)()()(())(,)()()i k i k i k k k k k i k i k uu x t u x t t t o t t tuu x t o tττ+++∂=+-+-∂∂=+⋅+∂ (2-4)得到对时间的一阶偏导数1,(,)(,)()=()i k i k i k u x t u x t uo t ττ+-∂+∂ (2-5) 由泰勒展开公式将(,)u x t 对位置展开得223,,21(,)(,)()()()()(())2!k i k i k i i k i i u uu x t u x t x x x x o x x x x∂∂=+-+-+-∂∂ (2-6)当11i i x x x x +-==和时,代入式(2-6)得2231,1,1122231,1,1121(,)(,)()()()()(())2!1(,)(,)()()()()(())2!i k i k i k i i i k i i i i i k i k i k i i i k i i i iu uu x t u x t x x x x o x x x x u u u x t u x t x x x x o x x x x ++++----⎧∂∂=+-+-+-⎪⎪∂∂⎨∂∂⎪=+-+-+-⎪∂∂⎩(2-7) 因为1k k x x h +-=,代入上式得2231,,22231,,21(,)(,)()()()2!1(,)(,)()()()2!i k i k i k i k i k i k i k i ku uu x t u x t h h o h x xu u u x t u x t h h o h x x +-⎧∂∂=+⋅+⋅+⎪⎪∂∂⎨∂∂⎪=-⋅+⋅+⎪∂∂⎩ (2-8) 得到对位置的二阶偏导数2211,22(,)2(,)(,)()()i k i k i k i k u x t u x t u x t u o h x h+--+∂=+∂ (2-9) 将式(2-5)、(2-9)代入一般形式的抛物线型偏微分方程得21112(,)(,)(,)2(,)(,)(,)()i k i k i k i k i k i k u x t u x t u x t u x t u x t f x t o h h αττ++---+⎡⎤-=++⎢⎥⎣⎦(2-10)为了方便我们可以将式(2-10)写成11122k kk k k k i i i i i i u u u u u f h ατ++-⎡⎤--+-=⎢⎥⎣⎦(2-11) ()11122k k k k k k i i i i i i u u uu u f h τατ++----+= (2-12)最后得到古典显格式的差分格式为()111(12)k k k k k i i i i i u ra u r u u f ατ++-=-+++ (2-13)2r h τ=其中,古典显格式的差分格式的截断误差是2()o h τ+。
有限差分法的Matlab程序(椭圆型方程)function FD_PDE(fun,gun,a,b,c,d)% 用有限差分法求解矩形域上的Poisson方程tol=10^(-6); % 误差界N=1000; % 最大迭代次数n=20; % x轴方向的网格数m=20; % y轴方向的网格数h=(b-a)/n; % x轴方向的步长l=(d-c)/m; % y轴方向的步长for i=1:n-1x(i)=a+i*h;end % 定义网格点坐标for j=1:m-1y(j)=c+j*l;end % 定义网格点坐标u=zeros(n-1,m-1); %对u赋初值% 下面定义几个参数r=h^2/l^2;s=2*(1+r);k=1;% 应用Gauss-Seidel法求解差分方程while k<=N% 对靠近上边界的网格点进行处理% 对左上角的网格点进行处理z=(-h^2*fun(x(1),y(m-1))+gun(a,y(m-1))+r*gun(x(1),d)+r*u(1,m-2)+u(2,m-1))/s;norm=abs(z-u(1,m-1));u(1,m-1)=z;% 对靠近上边界的除第一点和最后点外网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(m-1))+r*gun(x(i),d)+r*u(i,m-2)+u(i+1,m-1)+u(i-1,m-1))/s;if abs(u(i,m-1)-z)>norm;norm=abs(u(i,m-1)-z);endu(i,m-1)=z;end% 对右上角的网格点进行处理z=(-h^2*fun(x(n-1),y(m-1))+gun(b,y(m-1))+r*gun(x(n-1),d)+r*u(n-1,m-2)+u(n-2,m-1))/s;if abs(u(n-1,m-1)-z)>normnorm=abs(u(n-1,m-1)-z);endu(n-1,m-1)=z;% 对不靠近上下边界的网格点进行处理for j=m-2:-1:2% 对靠近左边界的网格点进行处理z=(-h^2*fun(x(1),y(j))+gun(a,y(j))+r*u(1,j+1)+r*u(1,j-1)+u(2,j))/s;if abs(u(1,j)-z)>normnorm=abs(u(1,j)-z);endu(1,j)=z;% 对不靠近左右边界的网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(j))+u(i-1,j)+r*u(i,j+1)+r*u(i,j-1)+u(i+1,j))/s;if abs(u(i,j)-z)>normnorm=abs(u(i,j)-z);endu(i,j)=z;end% 对靠近右边界的网格点进行处理z=(-h^2*fun(x(n-1),y(j))+gun(b,y(j))+r*u(n-1,j+1)+r*u(n-1,j-1)+u(n-2,j))/s;if abs(u(n-1,j)-z)>normnorm=abs(u(n-1,j)-z);endu(n-1,j)=z;end% 对靠近下边界的网格点进行处理% 对左下角的网格点进行处理z=(-h^2*fun(x(1),y(1))+gun(a,y(1))+r*gun(x(1),c)+r*u(1,2)+u(2,1))/s;if abs(u(1,1)-z)>normnorm=abs(u(1,1)-z);endu(1,1)=z;% 对靠近下边界的除第一点和最后点外网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(1))+r*gun(x(i),c)+r*u(i,2)+u(i+1,1)+u(i-1,1))/s;if abs(u(i,1)-z)>normnorm=abs(u(i,1)-z);endu(i,1)=z;end% 对右下角的网格点进行处理z=(-h^2*fun(x(n-1),y(1))+gun(b,y(1))+r*gun(x(n-1),c)+r*u(n-1,2)+u(n-2,1))/s; if abs(u(n-1,1)-z)>normnorm=abs(u(n-1,1)-z);endu(n-1,1)=z;% 结果输出if norm<=tolfid = fopen('FDresult.txt', 'wt');fprintf(fid,'\n********用有限差分法求解矩形域上Poisson方程的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,' x的值 y的值 u的值 u的真实值 |u-u(x,y)|\n');for i=1:n-1for j=1:m-1fprintf(fid, '%8.3f %8.3f %14.8f %14.8f %14.8f\n',[x(i),y(j),u(i,j),gun(x(i),y(j)),abs(u(i,j)-gun(x(i),y(j)))]);endendfclose(fid);break; % 用来结束while循环endk=k+1;endif k==N+1fid = fopen('FDresult.txt', 'wt');fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);endclc[a1 a2 a3 a4] = textread('F:\aa.txt','%f %f %f %f');a = [a1 a2 a3];a=a';b=a4';[pa,mina,maxa,pb,minb,maxb]=premnmx(a,b);net =newrb(pa,pb,0,1.3,24,2);an =sim(net,pa);E = an - pb;m =sse(E)n = mse(E)[f1 f2 f3 f4]= textread('F:\bb.txt','%f %f %f %f');f = [f1 f2 f3];f=f';pf = tramnmx(f,mina,maxa);an2 = sim(net,pf);g =postmnmx(an2,minb,maxb);g= g';E2 = g- f4; mm =sse(E2) nn = mse(E2)欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。