一维抛物线偏微分方程数值解法(附图及matlab程序)
一维偏微分方程的pdepe(matlab)函数 解法
![一维偏微分方程的pdepe(matlab)函数 解法](https://img.taocdn.com/s3/m/18193813cfc789eb172dc856.png)
本文根据matlab帮助进行加工,根据matlab帮助上的例子,帮助更好的理解一维偏微分方程的pdepe函数解法,主要加工在于程序的注释上。
ExamplesExample 1.This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.This equation holds on an intervalfor times.The PDE satisfies the initial conditionand boundary conditionsIt is convenient to use subfunctions to place all the functions required by pdepe in a single function.function pdex1m = 0;x = linspace(0,1,20);%linspace(x1,x2,N)linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。
%其中x1、x2、N分别为起始值、终止值、元素个数。
若缺省N,默认点数为100t = linspace(0,2,5);sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);% Extract the first solution component as u.u = sol(:,:,1);% A surface plot is often a good way to study a solution.surf(x,t,u)title('Numerical solution computed with 20 mesh points.')xlabel('Distance x')ylabel('Time t')% A solution profile can also be illuminating.figureplot(x,u(end,:))title('Solution at t = 2')xlabel('Distance x')ylabel('u(x,2)')% --------------------------------------------------------------function [c,f,s] = pdex1pde(x,t,u,DuDx)c = pi^2;f = DuDx;s = 0;% --------------------------------------------------------------function u0 = pdex1ic(x)u0 = sin(pi*x);% --------------------------------------------------------------function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)pl = ul;ql = 0;pr = pi * exp(-t);qr = 1;In this example, the PDE, initial condition, and boundary conditions are coded in subfunctions pdex1pde, pdex1ic, and pdex1bc.The surface plot shows the behavior of the solution.The following plot shows the solution profile at the final value of t (i.e., t = 2).我们再将该问题复杂化,比如在原方程右边加一项,对于标准形式,其余条件不变function pdex1m = 0;x = linspace(0,1,20);%linspace(x1,x2,N)linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。
一维抛物型偏微分方程初边值问题求解
![一维抛物型偏微分方程初边值问题求解](https://img.taocdn.com/s3/m/b555ca318f9951e79b89680203d8ce2f0066653f.png)
一维抛物型偏微分方程初边值问题求解摘要:一、引言二、一维抛物型偏微分方程1.定义与性质2.初边值问题三、求解方法1.紧差分格式2.追赶法3.有限元算法四、Matlab程序实现1.紧差分格式程序2.追赶法程序五、结论与展望正文:一、引言在数学、物理等领域,偏微分方程是一类重要的方程。
其中,一维抛物型偏微分方程在科学研究和实际应用中具有广泛的意义。
本文将探讨一维抛物型偏微分方程的初边值问题的求解方法,并介绍相应的Matlab程序实现。
二、一维抛物型偏微分方程1.定义与性质一维抛物型偏微分方程是指具有如下形式的方程:u_t = a * u_xx其中,u(x, t) 表示未知函数,t 表示时间,x 表示空间坐标,a 为常数。
2.初边值问题初边值问题是指在给定的初始条件和边界条件下求解偏微分方程的问题。
在一维抛物型偏微分方程中,初边值问题可以表示为:u(x, 0) = u_0(x)u(x, t) = u_t(x, t) 在边界x=0,x=L上三、求解方法1.紧差分格式紧差分格式是一种求解偏微分方程的方法,其精度为O(h^(1/2) * Δt),无条件稳定。
在这种方法中,我们首先需要建立离散的网格系统,然后通过数值积分求解离散化的偏微分方程。
2.追赶法追赶法是一种求解线性方程组的方法,也可以用于求解初边值问题。
在这种方法中,我们首先需要将偏微分方程转化为线性方程组,然后使用追赶法求解线性方程组。
3.有限元算法有限元算法是一种基于变分原理的求解方法,可以将偏微分方程问题转化为求解有限元空间的线性方程组。
这种方法在求解一维抛物型偏微分方程时具有较高的精度和可靠性。
(完整版)偏微分方程的MATLAB解法
![(完整版)偏微分方程的MATLAB解法](https://img.taocdn.com/s3/m/e957debd83c4bb4cf6ecd182.png)
引言偏微分方程定解问题有着广泛的应用背景。
人们用偏微分方程来描述、解释或者预见各种自然现象,并用于科学和工程技术的各个领域fll。
然而,对于广大应用工作者来说,从偏微分方程模型出发,使用有限元法或有限差分法求解都要耗费很大的工作量,才能得到数值解。
现在,MATLAB PDEToolbox已实现对于空间二维问题高速、准确的求解过程。
偏微分方程如果一个微分方程中出现的未知函数只含一个自变量,这个方程叫做常微分方程,也简称微分方程;如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。
常用的方法有变分法和有限差分法。
变分法是把定解问题转化成变分问题,再求变分问题的近似解;有限差分法是把定解问题转化成代数方程,然后用计算机进行计算;还有一种更有意义的模拟法,它用另一个物理的问题实验研究来代替所研究某个物理问题的定解。
虽然物理现象本质不同,但是抽象地表示在数学上是同一个定解问题,如研究某个不规则形状的物体里的稳定温度分布问题,由于求解比较困难,可作相应的静电场或稳恒电流场实验研究,测定场中各处的电势,从而也解决了所研究的稳定温度场中的温度分布问题。
随着物理科学所研究的现象在广度和深度两方面的扩展,偏微分方程的应用范围更广泛。
从数学自身的角度看,偏微分方程的求解促使数学在函数论、变分法、级数展开、常微分方程、代数、微分几何等各方面进行发展。
从这个角度说,偏微分方程变成了数学的中心。
一、MATLAB方法简介及应用1.1 MATLAB简介MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
1.2 Matlab主要功能数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真数字图像处理数字信号处理通讯系统设计与仿真财务与金融工程1.3 优势特点1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
最新偏微分方程的matlab解法
![最新偏微分方程的matlab解法](https://img.taocdn.com/s3/m/5921adecbd64783e08122b4d.png)
求解双曲型方程的例子
例24.2.1 用 MATLAB 求解下面波动方程定解问题并动态显示解的分布
2u (2u t 2 x2
2u ) 0 y 2
u
|x
1
u
|x1
0,
u y
y 1
u y
y1 0
π
π
u(x,
y, 0)
atan[ sin(
2
x)], ut
( x,
y,
0)
2
cos(πx)
保持在100 °C,板的右边热量从板向环境空气定常流动,
t t 其他边及内孔边界保持绝缘。初始
°C ,于是概括为如下定解问题;
是板的温度为0 0
d u u0 , t
u 1 0 0 ,在 左 边 界 上
u 1, 在 右 边 界 上 n u = 0, 其 他 边 界 上 n
u t to 0
区域的边界顶点坐标为(-0.5,-0.8), (0.5,-0.8), (-0.5,0.8), (0.5,0.8)。 内边界顶点坐标(-0.05,-0.4), (-0.05,0.4) ,(0.05,-0.4), (0.05,0.4)。
第七步:单击Plot菜单中Parameter选项,打开Plot Selection对话框,选中Color,Height(3D plot)和 Show mesh三项.再单击Polt按钮,显示三维图形解, 如图22.5所示.
第八步:若要画等值线图和矢量场图,单击plot菜单 中parameter 选项,在plot selection对话框中选中 contour 和arrow两选项。然后单击plot按钮,可显示 解的等值线图和矢量场图,如图2.6所示。
网格划分,细化
(完整版)偏微分方程的MATLAB解法
![(完整版)偏微分方程的MATLAB解法](https://img.taocdn.com/s3/m/e957debd83c4bb4cf6ecd182.png)
引言偏微分方程定解问题有着广泛的应用背景。
人们用偏微分方程来描述、解释或者预见各种自然现象,并用于科学和工程技术的各个领域fll。
然而,对于广大应用工作者来说,从偏微分方程模型出发,使用有限元法或有限差分法求解都要耗费很大的工作量,才能得到数值解。
现在,MATLAB PDEToolbox已实现对于空间二维问题高速、准确的求解过程。
偏微分方程如果一个微分方程中出现的未知函数只含一个自变量,这个方程叫做常微分方程,也简称微分方程;如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。
常用的方法有变分法和有限差分法。
变分法是把定解问题转化成变分问题,再求变分问题的近似解;有限差分法是把定解问题转化成代数方程,然后用计算机进行计算;还有一种更有意义的模拟法,它用另一个物理的问题实验研究来代替所研究某个物理问题的定解。
虽然物理现象本质不同,但是抽象地表示在数学上是同一个定解问题,如研究某个不规则形状的物体里的稳定温度分布问题,由于求解比较困难,可作相应的静电场或稳恒电流场实验研究,测定场中各处的电势,从而也解决了所研究的稳定温度场中的温度分布问题。
随着物理科学所研究的现象在广度和深度两方面的扩展,偏微分方程的应用范围更广泛。
从数学自身的角度看,偏微分方程的求解促使数学在函数论、变分法、级数展开、常微分方程、代数、微分几何等各方面进行发展。
从这个角度说,偏微分方程变成了数学的中心。
一、MATLAB方法简介及应用1.1 MATLAB简介MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
1.2 Matlab主要功能数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真数字图像处理数字信号处理通讯系统设计与仿真财务与金融工程1.3 优势特点1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
一维抛物型偏微分方程初边值问题求解
![一维抛物型偏微分方程初边值问题求解](https://img.taocdn.com/s3/m/37ea7d730a4c2e3f5727a5e9856a561253d3216a.png)
一维抛物型偏微分方程初边值问题求解摘要:一、引言二、一维抛物型偏微分方程初边值问题概述三、求解方法四、数值模拟与分析五、结论正文:一、引言一维抛物型偏微分方程在数学和物理等领域有着广泛的应用,比如热传导方程、波动方程等。
对于这种方程的初边值问题,人们进行了大量的研究,提出了多种求解方法。
本文将对这些方法进行综述和分析。
二、一维抛物型偏微分方程初边值问题概述一维抛物型偏微分方程形式为:$$frac{partial^2 u}{partial t^2} = c^2 frac{partial^2 u}{partial x^2}$$其中,$u(x,t)$ 是未知函数,$c$ 是常数。
初边值问题要求解该方程,并满足以下条件:1.$u(x,0) = f(x)$,即$t=0$ 时的函数值已知。
2.$frac{partial u}{partial t}(x,0) = g(x)$,即$t=0$ 时的导数值已知。
三、求解方法针对一维抛物型偏微分方程的初边值问题,目前主要有以下几种求解方法:1.分离变量法:适用于$c=1$ 的情况。
该方法将方程分解为两个独立的一阶线性微分方程,可以求得解析解。
2.矩方法:适用于$ceq 1$ 的情况。
该方法将方程转化为关于矩的递推关系式,可以求得数值解。
3.有限差分法:将方程离散化,通过差分方程求解。
该方法可以得到数值解,但可能会出现数值稳定性问题。
4.有限元法:将方程转化为有限个单元的积分方程,通过插值函数求解。
该方法可以得到较高质量的数值解,但计算复杂度较高。
四、数值模拟与分析为了比较不同方法的求解效果,我们取一维抛物型偏微分方程的一个具体例子,采用以上方法进行数值模拟。
通过对比分析,我们可以得出以下结论:1.分离变量法适用于$c=1$ 的情况,可以得到解析解,但求解范围有限。
2.矩方法对于$ceq 1$ 的情况有较好的适用性,可以得到数值解,但计算复杂度较高。
3.有限差分法易出现数值稳定性问题,求解精度较低。
一维抛物型偏微分方程初边值问题求解
![一维抛物型偏微分方程初边值问题求解](https://img.taocdn.com/s3/m/ec7f7650876fb84ae45c3b3567ec102de2bddf03.png)
一维抛物型偏微分方程初边值问题求解摘要:一、引言1.抛物型偏微分方程简介2.初边值问题的意义和重要性二、一维抛物型偏微分方程初边值问题的求解方法1.分离变量法2.紧差分法3.Crank-Nicolson 方法4.Richardson 外推法三、Matlab程序实现1.紧差分格式求解2.追赶法解线性方程组四、案例分析1.热传导方程的初边值问题求解五、结论与展望1.初边值问题求解的重要性2.未来研究方向和挑战正文:一、引言抛物型偏微分方程是一类重要的偏微分方程,其在物理、工程、数学等领域具有广泛的应用。
其中,一维抛物型偏微分方程的初边值问题更是研究的热点。
初边值问题是指在给定的边界条件下,求解方程在空间和时间上的演化过程。
本文将介绍一维抛物型偏微分方程初边值问题的求解方法,并以热传导方程为例进行具体分析。
二、一维抛物型偏微分方程初边值问题的求解方法1.分离变量法:这是一种常用的求解初边值问题的方法,主要思想是将偏微分方程分解为多个独立的常微分方程。
通过对每个常微分方程求解,最后得到偏微分方程的解。
2.紧差分法:这是一种求解偏微分方程的数值方法。
通过在空间和时间上进行离散化,将偏微分方程转化为线性代数方程组。
然后采用追赶法或迭代法求解线性方程组,从而得到偏微分方程的数值解。
3.Crank-Nicolson 方法:这是一种经典的有限差分法,用于求解一维抛物型偏微分方程。
通过在空间和时间上进行离散化,并采用中心差分公式,将偏微分方程转化为线性代数方程组。
然后求解线性方程组,得到偏微分方程的解。
4.Richardson 外推法:这是一种提高数值解精度的方法,通过多次迭代,逐渐减少空间和时间步长,使数值解接近真实解。
【精品】偏微分的MATLAB数值解法课件
![【精品】偏微分的MATLAB数值解法课件](https://img.taocdn.com/s3/m/9b1eeac35f0e7cd1842536e6.png)
方法一:pdepe函数实现
• x=0:1:40; • t=0:0.01:0.2; • m=0; • sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t); • b=sol(20,:); • plot(x,b); • title('the solution of u') • xlabel('x') • ylabel('y') • zlabel('u')
偏微分的MATLAB数值解法
偏微分的MATLAB数值解法
• 方法一:pdepe函数实现 • 方法二:pdetool实现 • 方法三:程序实现
方法一:pdepe函数实现
• @pdeic: • function u0=pdeic(x) • if x<10 • u0=0; • elseif x<30 • u0=1; • else • u0=0; • end
•
end
• end
方法三:程序实现
图 22.12 波动方程解析解的分布
偏微分的MATLAB数值解法
• 方法总结: • 1.pdede调用简单,但计算功能稍弱 • 2.pdetool使用方便,但限于四种方程类
型 • 3.程序编写较为繁琐
方法一:pdepe函数实现
方法二:pdetool实现
• 1.pdetool界面 • 2.选定求解微分方程类型(双曲线、抛物线、椭
圆、特殊值型)并设定参数 • 3.绘制求解区域 • 4.边界条件和初值条件(Dirichlet和Neumann) • 5.生成网格 • 6.求解方程并绘制图形
方法二:pdetool实现
• 应用实例:
u(ux,y)
x2 y x0
matlab求解最简单的一阶偏微分方程
![matlab求解最简单的一阶偏微分方程](https://img.taocdn.com/s3/m/ca669a02bf1e650e52ea551810a6f524ccbfcbf6.png)
matlab求解最简单的一阶偏微分方程一阶偏微分方程是指关于未知函数及其偏导数的方程,其中最简单的类型是一阶线性偏微分方程。
一阶线性偏微分方程是指未知函数及其偏导数之线性组合的方程。
在本文中,我们将介绍如何使用MATLAB求解最简单的一阶线性偏微分方程。
首先,我们考虑一维空间中的一阶线性偏微分方程。
形式为:a(x)u_x + b(x)u = f(x),其中u(x)是未知函数,u_x是u对x的偏导数,a(x)和b(x)是给定函数,f(x)是已知函数。
在MATLAB中,求解一阶线性偏微分方程涉及两个步骤:离散化和求解。
离散化是将一维空间离散为一系列格点,通过给定的差分格式将方程离散化为代数方程组。
求解是求解离散化的代数方程组,得到未知函数在格点上的值,进而得到整个区域上的解。
下面我们将详细介绍这两个步骤。
1.离散化:离散化的目的是将连续的变量离散化为有限个格点。
我们可以通过网格方法来实现离散化。
常用的网格方法有有限差分法、有限元法和特征线法。
其中,最简单的是有限差分法。
有限差分法将区域离散化为一系列的格点,并在每个格点处进行逼近。
具体来说,我们可以考虑使用中心差分来逼近一阶导数,例如使用二阶中心差分可以得到:u_x ≈ (u(i+1) - u(i-1))/(2*dx),其中,u(i)表示在第i个格点上的未知函数值,dx是网格的大小。
将这个逼近代入原方程,我们可以得到在每个格点上的代数方程。
例如,对于第i个格点,方程被离散为:a(i)*(u(i+1) - u(i-1))/(2*dx) + b(i)*u(i) = f(i),其中,a(i)和b(i)分别是在第i个格点上的给定函数,f(i)是已知函数。
2.求解:离散化后,我们可以将方程转化为代数方程组,从而可以使用MATLAB中的线性方程求解函数来求解。
具体来说,我们可以将代数方程组表示为矩阵形式:Au = b,其中,A是系数矩阵,u是未知函数在格点上的值构成的向量,b 是已知函数在格点上的值构成的向量。
偏微分方程数值解法的MATLAB源码
![偏微分方程数值解法的MATLAB源码](https://img.taocdn.com/s3/m/98ed9162e2bd960590c67754.png)
[原创]偏微分方程数值解法的MATLAB源码【更新完毕】说明:由于偏微分的程序都比较长,比其她的算法稍复杂一些,所以另开一贴,专门上传偏微分的程序谢谢大家的支持!其她的数值算法见:、、//Announce/Announce、asp?BoardID=209&id=82450041、古典显式格式求解抛物型偏微分方程(一维热传导方程)function [U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典显式格式求解抛物型偏微分方程%[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%%方程:u_t=C*u_xx 0 <= x <= uX,0 <= t <= uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t), u(uX,t)=psi2(t)%%输出参数:U -解矩阵,第一行表示初值,第一列与最后一列表示边值,第二行表示第2层……% x -空间变量% t -时间变量%输入参数:uX -空间变量x的取值上限% uT -时间变量t的取值上限% phi -初值条件,定义为内联函数% psi1 -边值条件,定义为内联函数% psi2 -边值条件,定义为内联函数% M -沿x轴的等分区间数% N -沿t轴的等分区间数% C -系数,默认情况下C=1%%应用举例:%uX=1;uT=0、2;M=15;N=100;C=1;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0');%[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C);%设置参数C的默认值if nargin==7C=1;end%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=C*dt/dx/dx;%步长比r1=1-2*r;if r > 0、5disp('r > 0、5,不稳定')end%计算初值与边值U=zeros(M+1,N+1);for i=1:M+1U(i,1)=phi(x(i));endfor j=1:N+1U(1,j)=psi1(t(j));U(M+1,j)=psi2(t(j));end%逐层求解for j=1:Nfor i=2:MU(i,j+1)=r*U(i-1,j)+r1*U(i,j)+r*U(i+1,j);endendU=U';%作出图形mesh(x,t,U);title('古典显式格式,一维热传导方程的解的图像') xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;古典显式格式不稳定情况古典显式格式稳定情况2、古典隐式格式求解抛物型偏微分方程(一维热传导方程)function [U x t]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典隐式格式求解抛物型偏微分方程%[U x t]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%%方程:u_t=C*u_xx 0 <= x <= uX,0 <= t <= uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t), u(uX,t)=psi2(t)%%输出参数:U -解矩阵,第一行表示初值,第一列与最后一列表示边值,第二行表示第2层……% x -空间变量% t -时间变量%输入参数:uX -空间变量x的取值上限% uT -时间变量t的取值上限% phi -初值条件,定义为内联函数% psi1 -边值条件,定义为内联函数% psi2 -边值条件,定义为内联函数% M -沿x轴的等分区间数% N -沿t轴的等分区间数% C -系数,默认情况下C=1%%应用举例:%uX=1;uT=0、2;M=50;N=50;C=1;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0');%[U x t]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C);%设置参数C的默认值if nargin==7C=1;end%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=C*dt/dx/dx;%步长比Diag=zeros(1,M-1);%矩阵的对角线元素Low=zeros(1,M-2);%矩阵的下对角线元素Up=zeros(1,M-2);%矩阵的上对角线元素for i=1:M-2Diag(i)=1+2*r;Low(i)=-r;Up(i)=-r;endDiag(M-1)=1+2*r;%计算初值与边值U=zeros(M+1,N+1);for i=1:M+1U(i,1)=phi(x(i));endfor j=1:N+1U(1,j)=psi1(t(j));U(M+1,j)=psi2(t(j));end%逐层求解,需要使用追赶法(调用函数EqtsForwardAndBackward)for j=1:Nb1=zeros(M-1,1);b1(1)=r*U(1,j+1);b1(M-1)=r*U(M+1,j+1);b=U(2:M,j)+b1;U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U';%作出图形mesh(x,t,U);title('古典隐式格式,一维热传导方程的解的图像')xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;此算法需要使用追赶法求解三对角线性方程组,这个算法在上一篇帖子中已经给出,为了方便,再给出来追赶法解三对角线性方程组function x=EqtsForwardAndBackward(L,D,U,b)%追赶法求解三对角线性方程组Ax=b%x=EqtsForwardAndBackward(L,D,U,b)%x:三对角线性方程组的解%L:三对角矩阵的下对角线,行向量%D:三对角矩阵的对角线,行向量%U:三对角矩阵的上对角线,行向量%b:线性方程组Ax=b中的b,列向量%%应用举例:%L=[-1 -2 -3];D=[2 3 4 5];U=[-1 -2 -3];b=[6 1 -2 1]';%x=EqtsForwardAndBackward(L,D,U,b)%检查参数的输入就是否正确n=length(D);m=length(b);n1=length(L);n2=length(U);if n-n1 ~= 1 || n-n2 ~= 1 || n ~= m disp('输入参数有误!')x=' ';return;end%追的过程for i=2:nL(i-1)=L(i-1)/D(i-1);D(i)=D(i)-L(i-1)*U(i-1);endx=zeros(n,1);x(1)=b(1);for i=2:nx(i)=b(i)-L(i-1)*x(i-1);end%赶的过程x(n)=x(n)/D(n);for i=n-1:-1:1x(i)=(x(i)-U(i)*x(i+1))/D(i);endreturn;古典隐式格式在以后的程序中,我们都取C=1,不再作为一个输入参数处理3、Crank-Nicolson隐式格式求解抛物型偏微分方程需要调用追赶法的程序function [U x t]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N)%Crank-Nicolson隐式格式求解抛物型偏微分方程%[U x t]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N)%%方程:u_t=u_xx 0 <= x <= uX,0 <= t <= uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t), u(uX,t)=psi2(t)%%输出参数:U -解矩阵,第一行表示初值,第一列与最后一列表示边值,第二行表示第2层……% x -空间变量% t -时间变量%输入参数:uX -空间变量x的取值上限% uT -时间变量t的取值上限% phi -初值条件,定义为内联函数% psi1 -边值条件,定义为内联函数% psi2 -边值条件,定义为内联函数% M -沿x轴的等分区间数% N -沿t轴的等分区间数%%应用举例:%uX=1;uT=0、2;M=50;N=50;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0');%[U x t]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N);%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=dt/dx/dx;%步长比Diag=zeros(1,M-1);%矩阵的对角线元素Low=zeros(1,M-2);%矩阵的下对角线元素Up=zeros(1,M-2);%矩阵的上对角线元素for i=1:M-2Diag(i)=1+r;Low(i)=-r/2;Up(i)=-r/2;endDiag(M-1)=1+r;%计算初值与边值U=zeros(M+1,N+1);for i=1:M+1U(i,1)=phi(x(i));endfor j=1:N+1U(1,j)=psi1(t(j));U(M+1,j)=psi2(t(j));endB=zeros(M-1,M-1);for i=1:M-2B(i,i)=1-r;B(i,i+1)=r/2;B(i+1,i)=r/2;endB(M-1,M-1)=1-r;%逐层求解,需要使用追赶法(调用函数EqtsForwardAndBackward) for j=1:Nb1=zeros(M-1,1);b1(1)=r*(U(1,j+1)+U(1,j))/2;b1(M-1)=r*(U(M+1,j+1)+U(M+1,j))/2;b=B*U(2:M,j)+b1;U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U';%作出图形mesh(x,t,U);title('Crank-Nicolson隐式格式,一维热传导方程的解的图像')xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;Crank-Nicolson隐式格式4、正方形区域Laplace方程Diriclet问题的求解需要调用Jacobi迭代法与Guass-Seidel迭代法求解线性方程组function [U x y]=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type) %正方形区域Laplace方程的Diriclet边值问题的差分求解%此程序需要调用Jacobi迭代法或者Guass-Seidel迭代法求解线性方程组%[U x y]=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type)%%方程:u_xx+u_yy=0 0<=x,y<=ub%边值条件:u(0,y)=phi1(y)% u(ub,y)=phi2(y)% u(x,0)=psi1(x)% u(x,ub)=psi2(x)%%输出参数:U -解矩阵,第一行表示y=0时的值,第二行表示第y=h时的值……% x -横坐标% y -纵坐标%输入参数:ub -变量边界值的上限% phi1,phi2,psi1,psi2 -边界函数,定义为内联函数% M -横纵坐标的等分区间数% type -求解差分方程的迭代格式,若type='Jacobi',采用Jacobi迭代格式% 若type='GS',采用Guass-Seidel迭代格式。
matlab解偏微分方程
![matlab解偏微分方程](https://img.taocdn.com/s3/m/63e9513c6d175f0e7cd184254b35eefdc8d315c3.png)
matlab解偏微分方程Matlab是一种非常强大的数学计算工具,它可以用于解决各种数学问题。
在本文中,我们将学习如何使用Matlab解偏微分方程。
偏微分方程是一类包含未知函数的偏导数的方程。
通常,解偏微分方程是困难的,需要使用复杂的数学方法。
然而,Matlab可以大大简化这个过程。
在Matlab中,我们可以使用pdepe函数来解偏微分方程。
pdepe函数采用一个偏微分方程的系统,并返回一个包含解的向量的矩阵。
下面是一个解二维扩散方程的示例程序:%定义二维扩散方程 function [c,f,s] = diffusionpde(x,t,u,DuDx)c = 1; %系数f = DuDx; %带有时间和空间导数的项s = 0; %不带导数的项end%定义边界条件(例)function [pl,ql,pr,qr] =diffusionbc(xl,ul,xr,ur,t)pl = 0; ql = 1; %左边界(u=0)pr = 0; qr = 1; %右边界(u=0)end%定义初始条件(例)function u0 = diffusionic(x)u0 = sin(pi*x); %sin(pi*x)是初始条件方程end%主程序x = linspace(0,1,50); %空间网格t = linspace(0,1,10); %时间网格sol =pdepe(0,@diffusionpde,@diffusionic,@diffusionbc,x,t );u = sol(:,:,1); %提取第一个解%绘制解surfc(x,t,u)xlabel('位置')ylabel('时间')title('二维扩散方程的解')从上述程序中,我们可以看到pdepe的使用方法。
在主程序中,我们选择了空间和时间网格,然后定义了偏微分方程、初始条件和边界条件的函数。
最后,我们调用pdepe函数,并将解存储在变量sol中。
偏微分方程(PDEs)的MATLAB数值解法
![偏微分方程(PDEs)的MATLAB数值解法](https://img.taocdn.com/s3/m/fc7504fbad51f01dc281f133.png)
偏微分方程的MATLAB求解精讲©MA TLAB求解微分/偏微分方程,一直是一个头大的问题,两个字,“难过”,由于MA TLAB对LaTeX的支持有限,所有方程必须化成MA TLAB可接受的标准形式,不支持像其他三个数学软件那样直接傻瓜式输入,这个真把人给累坏了!不抱怨了,还是言归正传,回归我们今天的主体吧!MA TLAB提供了两种方法解决PDE问题,一是pdepe()函数,它可以求解一般的PDEs,据用较大的通用性,但只支持命令行形式调用。
二是PDE工具箱,可以求解特殊PDE问题,PDEtool有较大的局限性,比如只能求解二阶PDE问题,并且不能解决偏微分方程组,但是它提供了GUI界面,从繁杂的编程中解脱出来了,同时还可以通过File->Save As直接生成M代码一、一般偏微分方程组(PDEs)的MA TLAB求解 (3)1、pdepe函数说明 (3)2、实例讲解 (4)二、PDEtool求解特殊PDE问题 (6)1、典型偏微分方程的描述 (6)(1)椭圆型 (6)(2)抛物线型 (6)(3)双曲线型 (6)(4)特征值型 (7)2、偏微分方程边界条件的描述 (8)(1)Dirichlet条件 (8)(2)Neumann条件 (8)3、求解实例 (9)一、一般偏微分方程组(PDEs)的MATLAB 求解1、pdepe 函数说明MA TLAB 语言提供了pdepe()函数,可以直接求解一般偏微分方程(组),它的调用格式为sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)【输入参数】@pdefun :是PDE 的问题描述函数,它必须换成下面的标准形式(,,)[(,,,)](,,,)()m m u u u uc x t x x f x t u s x t u x t x x x−∂∂∂∂∂=+∂∂∂∂∂式1 这样,PDE 就可以编写下面的入口函数 [c,f,s]=pdefun(x,t,u,du)m,x,t 就是对应于(式1)中相关参数,du 是u 的一阶导数,由给定的输入变量即可表示出出c,f,s 这三个函数@pdebc :是PDE 的边界条件描述函数,必须先化为下面的形式(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂+=∂ 于是边值条件可以编写下面函数描述为 [pa,qa,pb,qb]=pdebc(x,t,u,du)其中a 表示下边界,b 表示下边界@pdeic :是PDE 的初值条件,必须化为下面的形式00(,)u x t u =我们使用下面的简单的函数来描述为 u0=pdeic(x)m,x,t :就是对应于(式1)中相关参数【输出参数】sol :是一个三维数组,sol(:,:,i)表示u i 的解,换句话说u k 对应x(i)和t(j)时的解为sol(i,j,k)通过sol ,我们可以使用pdeval()直接计算某个点的函数值2、实例讲解试求解下面的偏微分2111222221220.024()0.17()u u F u u t xu u F u u tx ∂∂=−− ∂∂ ∂∂ =−− ∂∂ 其中, 5.7311.46()x x F x e e −=−,且满足初始条件12(,0)1,(,0)0u x u x ==及边界条件1221(0,)0,(0,)0,(1,)1,(1,)0u ut u t u t t x x∂∂====∂∂【解】(1)对照给出的偏微分方程,根据标注形式,则原方程可以改写为111222120.024()1.*1()0.17u u F u u x u u F u u t t x ∂−−∂∂∂=+ ∂−∂∂∂可见m=0,且1122120.024()1,,1()0.17u F u u x c f s u F u u x ∂−− ∂===∂−∂%% 目标PDE 函数function [c,f,s]=pdefun (x,t,u,du) c=[1;1];f=[0.024*du(1);0.17*du(2)]; temp=u(1)-u(2);s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp));(2)边界条件改写为12011010.*.*00000u f f u −+=+=下边界上边界%% 边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) %a 表示下边界,b 表示上边界 pa=[0;ua(2)];qa=[1;0]; pb=[ub(1)-1;0]; qb=[0;1];(3)初值条件改写为1210u u =%% 初值条件函数function u0=pdeic(x) u0=[1;0];(4)最后编写主调函数 clcx=0:0.05:1; t=0:0.05:2; m=0;sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t);figure('numbertitle','off','name','PDE Demo ——by Matlabsky') subplot(211)surf(x,t,sol(:,:,1)) title('The Solution of u_1') xlabel('X') ylabel('T') zlabel('U') subplot(212)surf(x,t,sol(:,:,2)) title('The Solution of u_2') xlabel('X') ylabel('T') zlabel('U')二、PDEtool 求解特殊PDE 问题MATLAB 的偏微分工具箱(PDE toolbox)可以比较规范的求解各种常见的二阶偏微分方程,但是惋惜的是只能求解特殊二阶的PDE 问题,并且不支持偏微分方程组!PDE toolbox 支持命令行形式求解PDE 问题,但是要记住那些命令以及调用形式真的很累人,还好MATLAB 提供了GUI 可视交互界面pdetool ,在pdetool 中可以很方便的求解一个PDE 问题,并且可以帮我们直接生成M 代码(File->Save As)。
偏微分数值解(2,MATLAB求解方法)
![偏微分数值解(2,MATLAB求解方法)](https://img.taocdn.com/s3/m/1af21358e518964bcf847c20.png)
初始条件:
u1 ( x,0) 1,
u2 ( x,0) 0
边界条件:
u1 (0, t ) 0, u1 (1, t ) 1 x u2 u2 (0, t ) 0, (1, t ) 0 x
方程来自电动力学中关于电磁场理论的一个 偏微分方程组。
2.1 用偏微分方程工具箱求解微分方程
直接使用图形用户界面( Graphical User Interface,简记作GUI)求解.
图22.1 所讨论定解问题的区域
第三步:选取边界 首先选择Boundary菜单中Boundary Mode命 令,进入边界模式.然后单击Boundary菜单中 Remove All Subdomain Borders选项,从而去掉子 域边界,如图22.2.单击Boundary菜单中Specify Boundary Conditions选项,打开Boundary Conditions对话框,输入边界条件.本例取默认条 件,即将全部边界设为齐次Dirichlet条件,边界显 示为红色.如果想将几何与边界信息存储,可选择 Boundary菜单中的Export Decomposed Geometry,Boundary Cond‟s命令,将它们分别存储 在g、b变量中,并通过MATLAB形成M文件.
第八步:若要画等值线图和矢量场图,单击 Plot 菜单中 Parameter 选项,在 Plot selection 对话框中选中 Contour 和 Arrows 两项.然后单击 Plot 按钮,可显示解的等值 线图和矢量场图,如图 2. 6 所示。
图 2.6 解的等值线图和矢量场图
(1) u1=hyperbolic(u0,ut0,tlist,b,p,e,t,c,a,f,d)
一维抛物线偏微分方程数值解法
![一维抛物线偏微分方程数值解法](https://img.taocdn.com/s3/m/724137e569dc5022abea0015.png)
一维抛物线偏微分方程数值解法(2)上一篇文章请参看一维抛物线偏微分方程数值解法(1)解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法)Ut-Uxx=0, 0<x<1,0<t<=1(Ut-aUxx=f(x,t),a>0)U(x,0)=e^x, 0<=x<=1,U(0,t)=e^t,U(1,t)=e^(1+t), 0<t<=1精确解为:U(x,t)=e^(x+t);Matlab程序:(此为向后差分法)function [u p e x t]=pwxywxh(h1,h2,m,n)%欧拉向后差分法解一维抛物线型偏微分方程%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m,n分别为空间,时间网格数%p为精确解,u为数值解,e为误差x=(0:m)*h1+0;t=(0:n)*h2+0;for(i=1:n+1)for(j=1:m+1)f(i,j)=0;endendfor(i=1:n+1)u(i,1)=exp(t(i));u(i,m+1)=exp(1+t(i));endfor(i=1:m+1)u(1,i)=exp(x(i));endr=h2/(h1*h1);for(i=2:n+1) %外循环,先固定每一时间层,每一时间层上解一线性方程组%a(1)=0;b(1)=1+2*r;c(1)=-r;d(1)=u(i-1,2)+h2*f(i,2)+r*u(i,1);for(k=2:m-2)a(k)=-r;b(k)=1+2*r;c(k)=-r;d(k)=u(i-1,k+1)+h2*f(i,k+1);%输入部分系数矩阵,为0的矩阵元素不输入%enda(m-1)=-r;b(m-1)=1+2*r;d(m-1)=u(i-1,m)+h2*f(i,m)+r*u(i,m+1);for(k=1:m-2) %开始解线性方程组消元过程a(k+1)=-a(k+1)/b(k);b(k+1)=b(k+1)+a(k+1)*c(k);d(k+1)=d(k+1)+a(k+1)*d(k);endu(i,m)=d(m-1)/b(m-1); %回代过程%for(k=m-2:-1:1)u(i,k+1)=(d(k)-c(k)*u(i,k+2))/b(k);endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j)+t(i)); %p为精确解e(i,j)=abs(u(i,j)-p(i,j));%e为误差endend[u p e x t]=pwxywxh(0.1,0.005,10,200);surf(x,t,e);xlabel('x');ylabel('t');zlabel('e');>> title('误差曲面');plot(t,e)误差较之前的欧拉向前差分格式增长了两倍[u p e x t]=pwxywxh(0.1,0.05,10,20); plot(t,e)[u p e x t]=pwxywxh(0.01,0.05,100,20); plot(t,e)[u p e x t]=pwxywxh(0.01,0.005,100,200);plot(x,e)[u p e x t]=pwxywxh(0.005,0.005,200,200); plot(x,e)X=1时,出现了误差??? 不是边界条件吗?不能理解这方法还是比前一种方法误差大呀不过可以随便改变时间、空间步长。
matlab求解偏微分方程
![matlab求解偏微分方程](https://img.taocdn.com/s3/m/a7edd85d8f9951e79b89680203d8ce2f0066659b.png)
matlab求解偏微分方程
Matlab求解偏微分方程的步骤:
1、首先,定义偏微分方程,并确定微分方程的种类;
2、然后,选择Matlab解决方案,所有内置微分方程求解器都支持基于初始值的手算方案;
3、接着,指定偏微分方程的解决参数,如函数、初始值、区间、边界
条件和终止条件;
4、之后,启动Matlab微分方程求解器,以计算偏微分方程的解决结果,如需要则可以绘制曲线图;
5、最后,检查偏微分方程的解决结果是否准确,可以利用MATLAB
自带的代数系统软件Maple来检查数值结果。
总体来说,使用Matlab求解偏微分方程非常容易,用户可以根据实际
情况,快速地完成偏微分方程的解决。
Matlab提供了一系列灵活的解
决方案,可以满足日常研究工作的所有需求。
另外,Matlab的可视化
绘图,可以帮助用户更好地理解偏微分方程的结果。
偏微分的MATLAB数值解法
![偏微分的MATLAB数值解法](https://img.taocdn.com/s3/m/88578108e2bd960590c677e4.png)
@pdefun(函数格式描述):
[c,f,s]=pdefun(x,t,u,du)
方法一:pdepe函数实现
u p ( x , t , u ) q ( x , t ) f x , t , u , 0 x
@pdebc(边界条件描述): [pa,qa,pb,qb]=pdebc(x,t,u,du)
方法三:程序实现
• 应用实例: • 波动方程
utt uxx 0 u(x,t) x0 0;u(x,t) xL 2sint u(x,t) t0 0;ut (x,t) t0 0
方法三:程序实现
• • • • • • • • • • • • • • • • • • • • 程序: function U=pianj(a,b,m,n) h = a/(m-1); k = b/(n-1); r = h/k r2=r^2; s2=2-2*r^2; for j=1:m U(1,j)=0; U(2,j)=0; end for i=1:n U(i,1)=0; U(i,m)=2*sin((i-1)*k); end for i=3:n for j=2:m-1 U(i,j) = s2*U(i-1,j)+r2*U(i-1,j-1)+r2*U(i-1,j+1)-U(i-2,j); end end
0 (x 1 0 ,x3 0 ) (x ) 1 ( 1 0x3 0 )
x 40
0
方法一:pdepe函数实现
• • • • • • • • • • • • 应用实例: @pdefun: function [c,f,s]=pdefun(x,t,u,du) c=1; f=400*du; s=0; @pdebc: function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) pa=ua; qa=0; pb=ub; qb=0;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维抛物线偏微分方程数值解法(4)
上一篇参看一维抛物线偏微分方程数值解法(3)(附图及matlab程序)
解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法)
Ut-Uxx=0, 0<x<1,0<t<=1(Ut-aUxx=f(x,t),a>0)
U(x,0)=e^x, 0<=x<=1,
U(0,t)=e^t,U(1,t)=e^(1+t), 0<t<=1
精确解为:U(x,t)=e^(x+t);
用紧差分格式:
此种方法精度为o(h1^2+h2^4),无条件差分稳定;
一:用追赶法解线性方程组(还可以用迭代法解)
Matlab程序为:
function [u p e x t]=JCHGS(h1,h2,m,n)
%紧差分格式解一维抛物线型偏微分方程
%此程序用的是追赶法解线性方程组
%h1为空间步长,h2为时间步长
%m,n分别为空间,时间网格数
%p为精确解,u为数值解,e为误差
x=(0:m)*h1+0; x0=(0:m)*h1;%定义x0,t0是为了f(x,t)~=0的情况%
t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;
syms f;
for(i=1:n+1)
for(j=1:m+1)
f(i,j)=0; %f(i,j)=f(x0(j),t0(i))==0%
end
end
for(i=1:n+1)
u(i,1)=exp(t(i));
u(i,m+1)=exp(1+t(i));
end
for(i=1:m+1)
u(1,i)=exp(x(i));
end
r=h2/(h1*h1);
for(i=1:n) %外循环,先固定每一时间层,每一时间层上解一线性方程组%
a(1)=0;b(1)=5/6+r;c(1)=1/12-r/2;d(1)=(r/2-1/12)*u(i+1,1)+... (1/12+r/2)*u(i,1)+(5/6-r)*u(i,2)+(1/12+r/2)*u(i,3)+...
h2/12*(f(i,1)+10*f(i,2)+f(i,3));
for(k=2:m-2)
a(k)=1/12-r/2;b(k)=5/6+r;c(k)=1/12-r/2;d(k)=h2/12*(f(i,k)+...
10*f(i,k+1)+f(i,k+2))+(1/12+r/2)*(u(i,k)+u(i,k+2))+(5/6-r)...
*u(i,k+1);
%输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性end
a(m-1)=1/12-r/2;b(m-1)=5/6+r;d(m-1)=(1/12+r/2)*(u(i,m-1)+u(i,m+1) )+...
(5/6-r)*u(i,m)+(r/2-1/12)*u(i+1,m+1)+ ...
h2/12*(f(i,m-1)+10*f(i,m)+f(i,m+1));
for(k=1:m-2) %开始解线性方程组消元过程
a(k+1)=-a(k+1)/b(k);
b(k+1)=b(k+1)+a(k+1)*c(k);
d(k+1)=d(k+1)+a(k+1)*d(k);
end
u(i+1,m)=d(m-1)/b(m-1); %回代过程%
for(k=m-2:-1:1)
u(i+1,k+1)=(d(k)-c(k)*u(i+1,k+2))/b(k);
end
end
for(i=1:n+1)
for(j=1:m+1)
p(i,j)=exp(x(j)+t(i)); %p为精确解
e(i,j)=abs(u(i,j)-p(i,j));%e为误差
end
end
[u p e x t]=JCHGS(0.1,0.005,10,200); surf(x,t,e)
>> title('误差');运行约43秒;
[u p e x t]=JCHGS(0.1,0.01,10,100);surf(x,t,e) 20多秒;[u p e x t]=JCHGS(0.2,0.04,5,25);surf(x,t,e) 3秒;
此方法精度很高;
二:g-s迭代法求解线性方程组
Matlab程序
function [u e p x t k]=JCFGS1(h1,h2,m,n,kmax,ep) % 解抛物线型一维方程格式(Ut-aUxx=f(x,t),a>0)
%用g-s(高斯-赛德尔)迭代法解
%kmax为最大迭代次数
%m,n为x,t方向的网格数,例如(2-0)/0.01=200;
%e为误差,p为精确解
syms temp;
u=zeros(n+1,m+1);
x=0+(0:m)*h1;
t=0+(0:n)*h2;
for(i=1:n+1)
u(i,1)=exp(t(i));
u(i,m+1)=exp(1+t(i));
end
for(i=1:m+1)
u(1,i)=exp(x(i));
end
for(i=1:n+1)
for(j=1:m+1)
f(i,j)=0;
end
end
a=zeros(n,m-1);
r=h2/(h1*h1); %此处r=a*h2/(h1*h1);a=1
for(k=1:kmax)
for(i=1:n)
for(j=2:m)
temp=((1/12+r/2)*(u(i,j-1)+u(i,j+1))+(5/6-r)*u(i,j)+...
h2/12*(f(i,j-1)+10*f(i,j)+f(i,j+1))+(r/2-1/12)*(u(i+1,...
j-1)+u(i+1,j+1)))/(5/6+r);
a(i+1,j)=(temp-u(i+1,j))*(temp-u(i+1,j));
u(i+1,j)=temp;%此处注意是u(i+1,j),,而不是u(i+1,j+1)% end
end
a(i+1,j)=sqrt(a(i+1,j));
if(k>kmax)
break;
end
if(max(max(a))<ep)
break;
end
end
for(i=1:n+1)
for(j=1:m+1)
p(i,j)=exp(x(j)+t(i));
e(i,j)=abs(u(i,j)-p(i,j));
end
end
[u e p x t k]=JCFGS1(0.1,0.005,10,200,100000,1e-12);k=67;运行速度1秒左右;surf(x,t,e)
[u e p x t k]=JCFGS1(0.01,0.001,100,1000,1000000,1e-12);k=5780;surf(x,t,e)。