两点边值差分算法

合集下载

直接法求两点边值问题

直接法求两点边值问题

课程设计(论文)任务书数学与计算科学学院学院信息与计算科学专业班课程名称科学仿真实验五题目直接法求解两点边值问题(一)任务起止日期:2014 年 6 月23 日~2014年7月 6 日学生姓名学号指导教师教研室主任年月日审查课程设计(论文)任务注:1. 此任务书由指导教师填写。

如不够填写,可另加页。

2. 此任务书最迟必须在课程设计(论文)开始前下达给学生。

学生送交全部材料日期学生(签名)指导教师验收(签名)直接法求解两点边值问题(二)摘要线性方程组的数值解法可以分为直接法和迭代法两类。

所谓直接法,就是不考虑舍入误差,通过有限步骤四则运算即能求得线性方程组准确解的方法。

如克莱姆法则,但通过第一章的分析,我们知道用克莱姆法则来求解线性代数方程组并不实用,因而寻求线性方程组的快速而有效的解法是十分重要的。

本章讨论计算机上常用而有效的直接解法――高斯消去法和矩阵的三角分解等问题。

为方便计,设所讨论的线性方程组的系数行列式不等于零。

高斯消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。

关键词:线性方程组;直接解法;高斯消去法DIRECT METHOD SOLVING TWO-POINT BOUNDARY VALUE PROBLEMS(2)ABSTRACTNumerical algorithm of linear equations can be divided into two categories, direct method and iterative method. The so-called direct method, is not considered rounding error, through limited steps arithmetic which can obtain the accurate solution of linear equations method. Such as cramer's rule, but through the analysis of the first chapter, we know that cramer's rule is used to solve the linear algebraic equations is not practical, thus seeking quick and effective solutions of systems of linear equations solution is very important.This chapter discuss computer commonly used and effective direct solution - gaussian elimination and triangle decomposition of matrices. For the convenience of meter, discussed the coefficient determinant of linear equations is not equal to zero.Gauss elimination method is one of the most commonly used method of solving linear equations, the basic idea is to pass a gradual elimination, to coefficient matrix of the triangular matrix equations with solutions of the equations, then by back substitution method solving the triangle equations to the solution of the original equations.Key words:linear equations; Direct method; Gaussian elimination目录1问题的提出 (1)2 理论基础 (1)2.1 高斯消去法 (2)2.2 列主元消去法 (5)2.3 矩阵的三角分解法 (6)2.3.1 算法介绍 (6)2.3.2 定理结论 (7)2.3.3 计算公式 (9)2.4解三对角方程组的追赶法 (10)3 问题的求解 (12)3.1顺序消去法 (12)3.2 列主元消去法 (13)3.3Doolittle分解法 (14)3.4 追赶法 (15)4 计算结果 (16)参考文献 (20)附录 (21)1 问题的提出考虑两点边值问题:()()⎪⎩⎪⎨⎧==<<=+.11,00,10,22y y a a dx dy dx y d ε 容易知道它的精确解为:.1111ax e e a y x +⎪⎪⎭⎫ ⎝⎛---=--εε为了把微分方程离散,把[]1,0区间n 等分,令nh 1=,ih x i =,,1,,2,1-=n i 得到差分方程:,21211a h y y hy y y ii i i i =-++-++-ε简化为:()(),2211ah y y h y h i i i =++-+-+εεε从而离散后得到的线性方程组的系数矩阵为:()()()()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡+-++-++-++-=h h h h h h h A εεεεεεεεεε2222对1=ε,21=a ,100=n ,分别用顺序消去法、列主元消去法、Doolittle 分解法和追赶法求解线性方程组,然后比较与精确解的误差,对结果进行分析。

微分方程的边值问题

微分方程的边值问题

微分方程边值问题的数值方法本部分内容只介绍二阶常微分方程两点边值问题的的打靶法和差分法。

二阶常微分方程为(,,),y f x y y a x b '''=≤≤(1.1)当(,,)f x y y '关于,y y '为线性时,即(,,)()()()f x y y p x y q x y r x ''=++,此时(1.1)变成线性微分方程()()(),y p x y q x y r x a x b '''--=≤≤(1.2)对于方程(1.1)或(1.2),其边界条件有以下3类: 第一类边界条件为(),()y a y b αβ==(1.3)当0α=或者0β=时称为齐次的,否则称为非齐次的。

第二类边界条件为(),()y a y b αβ''==(1.4)当0α=或者0β=时称为齐次的,否则称为非齐次的。

第三类边界条件为0101()(),()()y a y a y b y b ααββ''-=+=(1.5)其中00000,0,0αβαβ≥≥+>,当10α=或者10β=称为齐次的,否则称为非齐次的。

微分方程(1.1)或者(1.2)附加上第一类,第二类,第三类边界条件,分别称为第一,第二,第三边值问题。

1 打靶法介绍下面以非线性方程的第一类边值问题(1.1)、(1.3)为例讨论打靶法,其基本原理是将边值问题转化为相应的初值问题求解。

【原理】假定()y a t '=,这里t 为解()y x 在x a =处的斜率,于是初值问题为(,,)()()y f x y y y a y a t α'''=⎧⎪=⎨⎪'=⎩(1.6)令z y '=,上述二阶方程转化为一阶方程组(,,)()()y zz f x y z y a z a tα'=⎧⎪'=⎪⎨=⎪⎪=⎩ (1.7)原问题转化为求合适的t ,使上述初值问题的解(,)y x t 在x b =的值满足右端边界条件(,)y b t β=(1.8)这样初值问题(1.7)的解(,)y x t 就是边值问题(1.1)、(1.3)的解。

两点边值差分算法

两点边值差分算法
if(scanf("%lf",&A)) printf("输入区间右端点的值B(输入0结束程序):\n");
while(scanf("%lf",&B)&&B&&n)
{
h=(B-A)/(n+1);
b[1]=(exp(A+1.5*h)+exp(A+0.5*h))/(h*h)+(A+h)*(A+h);
c[1]=2.0*(A+h)/h-exp(A+1.5*h)/(h*h);
n为10时最大误差:0.000937
误差2-范数e[0]:0.000696
输入划分区间的点数n(输入0结束程序):
20
输入区间左端点的值A:
0
1
xi u(x)的准确值差分法得到的近似值u(i)误差err[i]
0.047619 1.048771 1.048961 0.000190
0.095238 1.099921 1.100161 0.000240
}
a[n]=-exp(A-0.5*h+n*h)/(h*h)-2*(A+n*h)/h;
b[n]=(exp(A+0.5*h+n*h)+exp(A-0.5*h+n*h))/(h*h)+(A+n*h)*(A+n*h);
f[1]=(h*h+(2.0*A+4.0)*h+A*A+4.0*A-2.0*exp(A+h))*exp(A+h)+
void catchup() //用追赶法解对角占优的三对角线方程组

差分方法的原理和应用

差分方法的原理和应用

差分方法的原理和应用1. 原理介绍差分方法是一种数值计算方法,通过利用函数在某点附近的导数来近似计算函数的值。

差分方法主要基于以下两个原理:1.1 前向差分前向差分是通过计算函数在某点和其前面一个点的差值来近似计算函数的导数。

假设函数 f(x) 在点 x 处的导数为f’(x),则前向差分的公式可以表示为:f'(x) ≈ (f(x+h) - f(x))/h其中,h 是一个小的正数,表示所选取的差分步长。

1.2 中心差分中心差分是通过计算函数在某点前后两个点的差值来近似计算函数的导数。

假设函数 f(x) 在点 x 处的导数为f’(x),则中心差分的公式可以表示为:f'(x) ≈ (f(x+h) - f(x-h))/(2h)同样,h 是一个小的正数,表示所选取的差分步长。

2. 应用案例差分方法在许多科学和工程领域中都有广泛的应用。

以下列举了几个常见的应用案例:2.1 数值求导差分方法可以用于数值求导,即通过差分近似计算函数在某点处的导数。

通过选择合适的差分步长,可以获得足够高的精度。

数值求导在计算机图形学、数值分析等领域中被广泛使用。

2.2 数值积分差分方法还可以用于数值积分,即通过将函数离散化为一系列的差分点,然后计算这些差分点的和来近似计算函数的积分。

差分方法在求解常微分方程、偏微分方程等问题中也有重要的应用。

2.3 数据平滑差分方法可以用于数据平滑,即通过计算数据点之间的差分来减小数据的噪声。

通过选择合适的差分步长和平滑算法,可以过滤掉数据中的噪声,并提取出数据的趋势。

2.4 图像处理差分方法在图像处理中也有广泛的应用。

例如,图像边缘检测算法就是基于差分方法的。

通过计算图像中像素之间的差分,可以检测出图像中的边缘。

2.5 数值优化差分方法还可以用于数值优化,即通过利用函数在某点附近的差分信息来搜索函数的最优解。

差分方法在机器学习、优化算法中有重要的应用。

3. 总结差分方法是一种常见的数值计算方法,通过利用函数在某点附近的导数来近似计算函数的值。

两点中心差分公式推导

两点中心差分公式推导

两点中心差分公式推导
两点中心差分公式是数值分析中的一种重要公式,用于计算两个连续变量之间的差分。

该公式可以表示为:
Δy = (y2 - y1) / (x2 - x1)
其中,Δy表示两点之间的纵向差分,y1和y2分别表示两点中的纵坐标值,x1和x2分别表示两点中的横坐标值。

下面是两点中心差分公式的推导过程:
1. 首先,设点1的坐标为(x1, y1),点2的坐标为(x2, y2)。

2. 计算两点之间的纵向差分Δy = y2 - y1。

3. 计算两点之间的横坐标差分Δx = x2 - x1。

4. 将Δy和Δx代入公式Δy = (y2 - y1) / (x2 - x1),得到两点中心差分公式。

另外,两点中心差分公式也可以用于计算平均变化率。

当Δx不为零时,两点中心差分公式可以表示为:
Δy/Δx = (y2 - y1) / (x2 - x1)
这表示了变量y在两点间的平均变化率。

注意,当Δx为零时,两点中心差分公式不适用,因为分母不能为零。

在这种情况下,可以采用其他方法(如前后差分法)来计算变化率。

差分运算方法[003]

差分运算方法[003]

差分运算方法差分运算方法是一种常用的数学工具,可用于求解差分方程或对数据序列进行分析和预测。

本文将详细介绍差分运算方法的原理、步骤以及应用范围。

通过学习本文,读者将能够掌握差分运算方法的基本概念和使用技巧。

差分运算方法是通过计算数据序列的差分值来实现的。

一阶差分表示相邻两个数据之间的差值,二阶差分表示一阶差分的差值。

差分运算方法可以将原始数据转化为差分序列,从而揭示数据序列的变化趋势和规律。

1. 收集数据:首先,我们需要收集相关的原始数据。

这些数据可以是时间序列数据、统计数据或其他有规律的数据。

2. 计算一阶差分:将收集到的原始数据按照时间先后顺序排列,然后计算相邻两个数据之间的差值。

具体计算方法为当前数据减去前一个数据。

得到一阶差分序列。

3. 计算二阶差分:将一阶差分序列按照相同的方法计算得到二阶差分序列。

4. 分析差分序列:通过对差分序列的统计分析、图表展示等方法,可以识别出其中的规律、趋势和异常点。

5. 预测或还原原始数据:根据对差分序列的分析结果,可以进行数据的预测或还原。

预测时可以使用差分序列的规律进行推断,还原时则利用差分序列与原始数据之间的关系进行计算。

三、差分运算方法的应用范围差分运算方法广泛应用于各个领域,包括但不限于以下几个方面:1. 经济学:差分运算方法可用于经济数据的趋势分析和预测,如GDP增速、股票价格变化等。

2. 自然科学:差分运算方法可用于分析自然现象,如气象数据的周期性变化、地震活动的趋势等。

3. 信号处理:差分运算方法可用于信号处理领域,如音频、视频的差分编码等。

4. 金融工程:差分运算方法可用于金融数据的建模和预测,如股票收益率的变化趋势、利率曲线的形态等。

5. 数据挖掘:差分运算方法可用于数据挖掘中的特征提取和异常检测,如时间序列数据的周期性分析、离群点识别等。

差分运算方法是一种实用的数学工具,能够帮助我们从数据中找到有用的信息和规律。

通过计算一阶差分和二阶差分,我们可以获得差分序列,进而进行数据的分析和预测。

用差分方法求解两点边值问题

用差分方法求解两点边值问题

用差分方法求解两点边值问题
许芝卉;王凤艳
【期刊名称】《山西大同大学学报(自然科学版)》
【年(卷),期】2009(025)004
【摘要】In this paper, I use finite difference method to solve two-peint boundary value, and get the system of linear equations. At the same time I use ultra-relaxation iteration method (ie, SOB method) to solve the system, and finally use algorithms to realize it.%采用有限差分方法求解两点边值问题,得到线性方程组,并利用超松驰迭代法(SOR)解该方程组,并利用算法实现.
【总页数】3页(P10-11,29)
【作者】许芝卉;王凤艳
【作者单位】山西大同大学数学与计算机科学学院,山西,大同,037009;山西大同大学数学与计算机科学学院,山西,大同,037009
【正文语种】中文
【中图分类】O242.1
【相关文献】
1.用差分方法求解一类二阶两点边值问题 [J], 邹序焱
2.两点边值问题的一种高阶隐式紧致差分方法 [J], 金涛;马廷福;葛永斌
3.两点边值问题的差分方法及快速求解 [J], 赵秉新;郑来运
4.两点边值问题的一种高精度差分方法 [J], 刘明会
5.两点边值问题的一种高精度差分方法 [J], 田振夫
因版权原因,仅展示原文概要,查看原文内容请购买。

中心差分解两点边值问题

中心差分解两点边值问题

Lhui
(
p
i
1
(ui
)
x
)
x
qiui
fi
2
~
ui ui ui , i I h
…………(2.1)
其中 u i 满足
~
而 u i 满足
(ui ) 0, i Ih , u0 u0, uN uN xx
…………(2.2)
~
~
~
Lh ui fi Lh ui , i Ih ,u0 u N 0
.
.
Ri (u) Lhu(xi ) Lhui Lh (u(xi ) ui )
…………(1.10)
当网格均匀,即 hi h(i 1, 2, , N ) 时差分方程(1.9)简化为
Lhui
1 h2
[
p
i
1
ui1
2
(
p i
1 2
p i
1
)ui
2
p
i
1
ui1
]
ri
2
ui1 ui1 2h
qiui
Lhu(xi )
hi
2 hi1
[
p
i
1
2
u(xi1) u(xi ) hi1
p
i
1
2
u(xi ) u(xi1)] hi
…………(1.9)
hi
ri hi1
[u ( xi 1 )
u(
xi 1 )]
qiu ( xi
)
fi
i=1,2,…,N-1,
u0 , uN
由方程(1.7)(1.9),截断误差 Ri (u) 可表示为
…………(2.3)
~
先估计 u h ,由

两点边值问题的不同迭代法比较及matlab实现

两点边值问题的不同迭代法比较及matlab实现

两点边值问题的不同迭代法比较及matlab实现问题:考虑两点边值问题:2,dydyaa,,,0,,1,,2 dxdx,,yy(0),0,(1),1.,x,1,a,容易知道它的精确解为: y,(1,e),ax1/,,1,ex,ih,i,1,2,...n,1为了将微分方程离散,把[0,1]区间n等分,令h=1/n,,得到差分方程 i2(,,h)y,(2,,h)y,,y,ah,从而得到迭代方程组的系数矩阵A。

i,ii,11 对=1,a=1/2,n=100,分别用jacobi,G-S,超松弛迭代法分别求线性方程组的解,要求,4位有效数字,然后比较与精确解的误差。

对=0.1,=0.01,=0.001,考虑同样问题。

,,,思想:利用书上的迭代公式即可。

注意问题:迭代矩阵是n-1阶的,不是n阶;等号右端向量b的最后一项,不是ah^2,而是ah^2-eps-hx,1,a,精确解: y,(1,e),ax1/,,1,e带入a=1/2,=1 ,代码:>> clear>> x=linspace(0,1); truy=(1-0.5)/(1-exp(-1/1))*(1-exp(-x./1))+x.*0.5;figure;plot(x,truy,'g','LineWidth',1.5); hold on;Grid图:三种方法的实现Jacobi法:代码见附录Eps=1结果:迭代次数k:22273结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1结果:迭代次数k:8753结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果) Eps=0.01结果:迭代次数k:661结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)G-S迭代法:代码见附录Eps=1结果:迭代次数k:11125结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1结果:迭代次数k:4394结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.01结果:迭代次数k:379结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)超松弛法:代码见附录Eps=1 w=1.56结果:迭代次数k:3503结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.1 w=1.56结果:迭代次数k:1369结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)Eps=0.01 w=1.56结果:迭代次数k:131结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果) 结果:Jacobi、G-S、超松弛法,三者都能够取得对精确解的良好逼近,但是,在相同的精度条件下,三者的收敛速度是不一样的,jacobi<G-S<超松弛,也就是说,在迭代次数相同的条件下,精度:jacobi<G-S<超松弛。

求解两点边值问题的有理插值galerkin法

求解两点边值问题的有理插值galerkin法

求解两点边值问题的有理插值galerkin法Galerkin法,也称作分子法,是一种用于求解两点边值问题的有理插值方法。

Galerkin法可以用来解决插值方法,拟合数据的关系,和求得自变量的取值(如拟合函数的极值)。

在本文中,将会介绍Galerkin 法如何在求解两点边值问题中发挥重要作用,并说明什么情况下Galerkin法更为有效。

一、什么是两点边值问题两点边值问题(Boundary Value Problem)是指一类特定的非线性问题,通常用来描述在一个定义域内满足现实条件下数学模型的求解/拟合过程。

大致可以分为初值问题和边值问题两类,前者是解决带有初始函数的初值问题的拟合(如求解ODE),而边值问题指的是描述定义域内间断函数满足边界条件的不等式系统(如求解PDE)。

二、Galerkin法的基本原理基于Galerkin法的变分原理,首先需要对两点边值问题的求解模型进行一定的定义和代数处理。

具体步骤如下:(1)首先根据问题及定义域内数学模型,确定一系列未知函数作为待求解变量;(2)构造一个能够捕获定义域及边界条件的函数类;(3)对函数空间进行 Galerkin正交展开,用有理函数作为基函数,通过矩阵运算把边值问题转换为矩阵有关的二次模型(要求基函数的数量大于待求解的未知函数的数量)。

(4)根据所构造出的二次模型,求解出未知函数及边界条件。

三、Galerkin法与常规插值法对比Galerkin法以有理函数作为基函数构建二次模型,从而更好地捕获定义域内的特征,更有效地描述二维数据的格式关系;而常规插值法,虽然也能够解决边值问题,但是很难实现高维数据的有效拟合,无论是精准度还是效率都很难达到Galerkin法的标准。

四、总结Galerkin法是用于求解两点边值问题的有理插值方法,它在变分原理的基础上,构造一个基于有理函数的函数空间,从而捕获边界条件及局部变化信息,更有效地拟合二维数据,并有助于求解未知函数及其边界条件。

数值方法——两点边值问题

数值方法——两点边值问题

数值方法13——两点边值问题
1. 打靶法
打靶法的积分过程是从x1到x2,并且努力使积分结果在积分的终点和边界条件匹配。

在一个边界x1上选择了所有因变量的值,这些值必须和该边界的边界条件保持一致。

而另一个边界x2上的因变量依赖于随机猜测的参数。

在迭代过程中,渐渐地接近真实值,就像打靶一样。

打靶法适合于解震荡的很厉害的情况,精确地运用了多维全局收敛Newton-Raphs on,设法零化n2个变元的n2个函数,这些函数通过从x1到x2积分N个微分方程得到。

1. 打靶法
打靶法的积分过程是从x1到x2,并且努力使积分结果在积分的终点和边界条件匹配。

在一个边界x1上选择了所有因变量的值,这些值必须和该边界的边界条件保持一致。

而另一个边界x2上的因变量依赖于随机猜测的参数。

在迭代过程中,渐渐地接近真实值,就像打靶一样。

打靶法适合于解震荡的很厉害的情况,精确地运用了多维全局收敛Newton-Raphs on,设法零化n2个变元的n2个函数,这些函数通过从x1到x2积分N个微分方程得到。

2. 对拟合点打靶
有时,由于错误严重的起始条件,初始解从x1到x2要碰到某些不可计算的,或是灾难性的结果。

拟合点打靶首先从x1积分到x1和x2之间的一个点x f,然后再从x2反向积分到x f。

3. 松弛法
松弛法用了另外一种逼近方法,微分方程由覆盖积分限的一系列有限个差分方程来替代,试验解由各个网格点上的因变量的值组成,并不满足所需的有限个差分方程和边界条件。

迭代调整所有在网格上的值,使他们满足各个联系的差分方程,也满足边界条件。

适用于解平滑的情况,需要良好的初始预测值。

应用差分格式计算导数边界值问题

应用差分格式计算导数边界值问题

应用差分格式计算导数边界值问题一.问题应用差分格式计算如下两点边值问题二.求解过程已知该定解问题的精确解为.将区间作m等分,记 ,差分格式为(1)(2)将式(1)两边同时乘以得其中,, , .写成矩阵向量形式:然后用追赶法求解,得出数值解,同时考虑所得数值解的误差以及最大误差.一、结果其中,作出了取步长时的数值解曲线,如下图图 1.5xu精确解曲线和取步长h= /160所得数值解曲线图 1.6二、小结从表1.7可以看出,当步长h 缩小到原来的1/2时,最大误差约缩小到原来的1/2. 这表明这种差分格式的截断误差为 .三、提高精度为了提高导数边界条件的逼近程度,注意到原方程有于是,类似上面的方法,将区间 作m 等分,记 , 差分格式为(3)(4)将式(3)两边同时乘以 ,可得其中, , , . 于是(3)(4)可写为0.511.522.533.5x|u (x )-u h (x )|取不同步长时所得数值解的误差曲线利用追赶法求解该三对角方程组。

其中,作出了取步长 时的数值解曲线,如下图图 1.7xu精确解曲线和取步长h= /10所得数值解曲线从表1.9可以看出,当步长h 缩小到原来的1/2时,此时最大误差约缩小到原来的1/4. 这表明这种差分格式的截断误差为 .四、程序第一部分程序 1、函数文件 (1) f.mfunction fx = f(x)fx = exp(x)* ( sin(x) - 2*cos(x) ); end (2) q.mfunction qx = q(x) qx = 1; end (3) vx.mfunction vx = v(x)vx = exp(x)* sin(x); end2、命令文件main.m% Au=b 0 1 2 ... m clearformat longx|u (x )-u h (x )|取不同步长时所得数值解的误差曲线n=[160 320 640 1280];for l=1:length(n)alpha=-1;beta=-exp(pi);m=n(l);h=pi/m;i=0;for x=0:h:pii=i+1;qx(i)=q(x);fx(i)=f(x);vx(i)=v(x); %精确解endA(1,1)=1; A(1,2)=-1; %系数矩阵for i=2:mA(i,i-1)=-1;A(i,i+1)=-1;A(i,i)=2+h*h*qx(i-1);endA(m+1,m)=-1;A(m+1,m+1)=1;b(1)=h*alpha;b(m+1)=h*beta; %右端向量for i=2:mb(i)=h*h*fx(i);endu=inv(A)*b'; %数值解C=[vx' u abs(vx'-u)] ;ME(l)=max(C(:,3));%画图if l==1E1=C(:,3); % 记录误差j=0:m;plot(j*h,E1,'k.-')hold onelse if l==2E2=C(:,3);j=0:m;plot(j*h,E2,'k-')hold onelse if l==3E3=C(:,3);j=0:m;plot(j*h,E3,'k:')hold onelse if l==4E4=C(:,3);j=0:m;plot(j*h,E4,'k--')legend('h=\pi/160','h=\pi/320','h=\pi/640','h=\pi/1280') xlabel('x');ylabel('|u(x)-uh(x)|');title('取不同步长时所得数值解的误差曲线') endendendendfor i=1:4 %选出表中的几个值k=i*(m/5)+1;U(i,:)=C(k,:);endV=U';N(l,:)=V(2,:);E(l,:)=V(3,:);endV=V(1,:)NE=[E ME']for i=1:3EE(i)=ME(i)/ME(i+1);endEE=EE'。

两点边值问题的差分求解

两点边值问题的差分求解
称之为(局部)截断误差。这里关于 的阶为 。
注意
所以
由此知:(局部)截断误差可视为差分格式,将数值解换成相应真解值后,左端减右端,再做Taylor展式获得的(可作为计算公式)。
方程的联立形式(中心差分格式)
矩阵形式 (其中 是三对角矩阵)
又因为A是三对称矩阵,而且符合追赶法的使用条件,故可用追赶法求解U的解。
3.对浮点数求绝对值时,应使用fabs()函数,而不是abs()。
4.注意乘除的计算,不能直接写成2x等,必须加上符号,2*x。
五、运行输出结果及分析:
上述程序在Visual C++ 6.0环境下加以实现。经过多次测试,程序运行正确。例如:分别输入n值:20 ,40,运行结果如图所示,图中显示了每一步的值及端点误差。
u[n-1]=y[n-1];
for(i=n-2;i>=1;i--)
u[i]=y[i]-m[i]*u[i+1];
for(i=1;i<n;i++)
{ printf("请输出u[%d]的值:%f;",i,u[i]);
printf("——精确解为%f",f[i]);
printf("误差为%f",fabs(u[i]-f[i]));
三、主要程序代码或命令:
#include<stdio.h>
#include<math.h>
#define MAX 200/*预定义数组大小*/
void main()
{ int n,i; /*初始化阶数n*/
float u[MAX],y[MAX];
float F[MAX],f[MAX],m[MAX];

差分计算公式范文

差分计算公式范文

差分计算公式范文
(一)定义
差分是指两个变量的变化量之差,也就是一个变量减去另一个变量的值。

(二)公式
对于变量x和y,它们的差分可以表示为Δx-Δy,其中Δx表示x 的变化量,Δy表示y的变化量。

因此,差分公式可以写成Δx-
Δy=x(t)-y(t),其中t表示时间点。

(三)应用
差分可以应用于不同时刻的观测值。

例如,在测量水位时,可以使用差分公式确定不同时刻水位变化量,即ΔH(t)=H(t1)-H(t2),其中H(t1)和H(t2)分别表示不同时刻的水位。

(四)总结
通过以上内容,可知差分公式可以用来衡量变量的变化,它可以帮助我们准确地计算不同时刻的变量变化量。

因此,差分公式是很重要的统计分析工具,可以帮助我们理解变量变化趋势以及有效预测变量的变化。

第5章---两点边值问题求解方式

第5章---两点边值问题求解方式

i 1, 2, , N 1
y0 A, yN B
yi1 yi1 2 yi h2
2
xi
yi1 yi1 2h

2 xi2
yi

sin(ln xi2
xi
)
y0 1, yN 2
xi 1 ih, i 1, 2, , N 1
2019/11/19
2019/11/19
航空航天中的计算方法
Page 5
5.2 打靶法
5.2 打靶法 以二阶系统为例,考虑边值问题:
y(x) f (x, y(x), y(x)), x a,b
y(a) A,
变换:
y1 y
y2 y 考虑初值问题:
y(b) B
y1(x) y2 (x)
微分方程 y(x) f (x, y(x), y(x)), x a,b
y(a) A, y(b) B
离散化,将区间 xa,b 等分为N个子区间:
h ba, N
xi a ih,
i 0,1, 2,
,N
在节点上应用中心差分公式,得到代数方程组:
yi1
yi1 2 yi h2
h ba, N
xi a ih,
i 0,1, 2,
,N
将 y(x)在xi处Taylor展开:
y( x)

y( xi )
y( xi ) x

xi

1 2
y( xi ) x

xi
2

1 3!
y( xi ) x

xi
3

2019/11/19
航空航天中的计算方法

用差分法求解边值问题

用差分法求解边值问题

用差分法求解边值问题咱来唠唠用差分法求解边值问题,这事儿啊,就像在走钢丝,得小心翼翼,还得有技巧。

我刚开始接触这差分法求解边值问题的时候,那真是脑袋都大了。

看着那些个方程和边界条件,就像看着一堆乱麻,不知道从哪儿开始捋。

我坐在那书桌前,桌上堆满了书和草稿纸,灯光照在上面,有点晃眼。

我就盯着那些式子,眉头皱得能夹死苍蝇。

这时候,我的导师来了。

他戴着副眼镜,镜片后的眼睛总是透着股精明劲儿。

他瞅了瞅我,笑着说:“咋啦?被这差分法难住啦?” 我苦着脸说:“导师,这太难了,我都不知道该咋用差分法把这边值问题解开。

” 导师拉了把椅子坐下,拿起笔,在纸上边写边说:“你看啊,这差分法呢,就像把一整块地分成一个个小格子,每个格子都有它的作用。

” 我凑过去看,他写的字很工整,那式子在他笔下好像有了生命。

我就试着按导师说的做,把区间分成一个个小部分,就像切蛋糕似的。

可这计算量也太大了,我算了半天,算得头晕眼花。

旁边有个同学,头发卷卷的,他看我这样,笑着说:“你这是要和这差分法死磕啊?” 我无奈地说:“没办法,不弄明白不行啊。

” 我又接着算,那些数字在草稿纸上跳来跳去,就像调皮的小鬼。

有一次,我好不容易算出了一步,兴奋得不得了。

我跑去和另一个同学说:“我好像有点思路了,这差分法好像也没那么难。

” 那同学看了看我的计算过程,摇摇头说:“你这里有个地方算错了,你看这个边界条件你没处理好。

” 我一听,心又凉了半截,就像刚燃起的小火苗被浇灭了。

我拿过纸,仔细一看,还真是,我懊恼得直拍脑袋。

不过,我可没放弃。

我重新算,一遍又一遍。

这差分法求解边值问题啊,就像爬山,虽然累得气喘吁吁,但每向上一步,就离山顶近一点。

当我终于算出正确结果的时候,那感觉就像登上了山顶,能看到一片新天地。

我高兴得在屋里转了好几圈,就像个孩子得到了心爱的玩具。

这差分法啊,真是个奇妙又折磨人的东西,可一旦掌握了,就像拥有了一把打开宝库的钥匙,里面有无尽的乐趣呢。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(exp(A+0.5*h)/(h*h)+2.0*(A+h)/h)*exp(A);
for(i=2;i<n;i++)
{
f[i]=(i*i*h*h+(2.0*A+4.0)*i*h+A*A+4.0*A-2.0*exp(A+i*h))*exp(A+i*h);
}
f[n]=(n*n*h*h+(2.0*A+4.0)*n*h+A*A+4.0*A-2.0*exp(A+n*h))*
0.363636 1.438551 1.438916 0.000365
0.454545 1.575457 1.575847 0.000390
0.545455 1.725392 1.725784 0.000391
0.636364 1.889597 1.889966 0.000368
0.727273 2.069429 2.069750 0.000321
}
x[n]=y[n];
for(i=n-1;i>=1;i--)
{
x[i]=y[i]-beta[i]*x[i+1];
}
}
int main(int argc,char *argv[]) //椭圆型方程两点边值问题!在此我们假设u(x)是给定的函数,因此我们可以求得准确的
{ //误差估计来加深我们对这一方法及其理论准确性的理解。令u(x)=exp(x),q(x)=x^2
1
xi u(x)的准确值差分法得到的近似值u(i)误差err[i]
0.047619 1.048771 1.048792 0.000021
0.095238 1.099921 1.099960 0.000040
0.142857 1.153565 1.153620 0.000055
0.190476 1.209826 1.209894 0.000069
0.818182 2.266375 2.266621 0.000245
0.909091 2.482065 2.482205 0.000140
n为10时最大误差:0.000391
误差2-范数e[0]:0.000291
输入划分区间等份的点数n(输入0结束程序):
20
输入区间左端点的值A:
0
输入区间右端点的值B(输入0结束程序):
}
a[n]=-exp(A-0.5*h+n*h)/(h*h)-2*(A+n*h)/h;
b[n]=(exp(A+0.5*h+n*h)+exp(A-0.5*h+n*h))/(h*h)+(A+n*h)*(A+n*h);
f[1]=(h*h+(2.0*A+4.0)*h+A*A+4.0*A-2.0*exp(A+h))*exp(A+h)+
其中步长 。记h =x - x ,称h = maxh 为网格最大步长。取相邻节点x ,x 的中点x = x +x )( i = 1 , 2 ,…, N),称为半整数点。
三.离散格式
1.直接差分化
将方程(1)在节点 离散化,当 足够小时,得到逼近方程(1)的差分方程:
(3) ,
式中 。
差分方程(3)当 时成立,加上边值条件 ,得到关于 的线性代数方程组:
if(scanf("%lf",&A)) printf("输入区间右端点的值B(输入0结束程序):\n");
while(scanf("%lf",&B)&&B&&n)
{
h=(B-A)/(n+1);
b[1]=(exp(A+1.5*h)+exp(A+0.5*h))/(h*h)+(A+h)*(A+h);
c[1]=2.0*(A+h)/h-exp(A+1.5*h)/(h*h);
return 0;
}
例2令函数u(x)=exp(x),函数q(x)=exp(x),函数r(x)=0,函数p(x)=x,其中区间端点A=0,B=1。
程序结果如下:
输入划分区间的点数n(输入0结束程序):
10
输入区间左端点的值A:
0
输入区间右端点的值B(输入0结束程序):
1
xi u(x)的准确值差分法得到的近似值u(i)误差err[i]
0.380952 1.463678 1.463940 0.000262
0.428571 1.535063 1.535315 0.000252
0.476190 1.609930 1.610170 0.000240
0.523810 1.688448 1.688674 0.000227
0.571429 1.770795 1.771006 0.000211
n为10时最大误差:0.000937
误差2-范数e[0]:0.000696
输入划分区间的点数n(输入0结束程序):
20
输入区间左端点的值A:
0
1
xi u(x)的准确值差分法得到的近似值u(i)误差err[i]
0.047619 1.048771 1.048961 0.000190
0.095238 1.099921 1.100161 0.000240
for(i=2;i<n;i++)
{
b[i]=(exp(A+0.5*h+i*h)+exp(A-0.5*h+i*h))/(h*h)+(A+i*h)*(A+i*h);
a[i]=-exp(A-0.5*h+i*h)/(h*h)-2*(A+i*h)/h;
c[i]=2.0*(A+i*h)/h-exp(A+0.5*h+i*h)/(h*h);
exp(A+n*h)-(2.0*(A+n*h)/h-exp(A+n*h+0.5*h)/(h*h))*exp(B);
catchup();
printf("xi u(x)的准确值差分法得到的近似值u(i)误差err[i]\n");
tem=0;
T=0;
for(i=1;i<=n;i++)
{
temp=exp(A+i*h);
void catchup() //用追赶法解对角占优的三对角线方程组
{
int i;
beta[1]=c[1]/b[1];
for(i=2;i<n;i++)
{
beta[i]=c[i]/(b[i]-a[i]*beta[i-1]);
}
y[1]=f[1]/b[1];
for(i=2;i<=n;i++)
{
y[i]=(f[i]-a[i]*y[i-1])/(b[i]-a[i]*beta[i-1]);
(4) ,

2.积分插值法
用中心差分格式来代替方程(1)中函数导数在x 的值得到它的差分方程:
(5) ,

四.数值例子
例1令函数u(x)=exp(x),函数q(x)=x^2,函数r(x)=4x,函数p(x)=exp(x),其中区间端点A=0,B=1。
程序结果如下:
输入划分区间等份的点数n(输入0结束程序):
0.090909 1.095169 1.095915 0.000746
0.181818 1.199396 1.200299 0.000903
0.272727 1.313542 1.314479 0.000937
0.363636 1.438551 1.439466 0.000915
0.454545 1.575457 1.576314 0.000857
0.476190 1.609930 1.610038 0.000108
0.523810 1.688448 1.688556 0.000108
0.571429 1.770795 1.770901 0.000106
0.619048 1.857158 1.857262 0.000103
0.666667 1.947734 1.947832 0.000098
0.714286 2.042727 2.042818 0.000090
0.761905 2.142353 2.142434 0.000081
0.809524 2.246838 2.246908 0.000070
0.857143 2.356418 2.356475 0.000056
0.904762 2.471343 2.471383 0.000040
0.952381 2.591873 2.591895 0.000021
n为20时最大误差:0.000108
误差2-范数e[1]:0.000080
log(e[0]/e[1]):1.290559
以上数值结果是通过直接差分方法用C++编程求得的。
附录1:
#include<stdio.h>
#include<stdlib.h>
k++;
printf("\n");
printf("输入划分区间等份的点数n(输入0结束程序):\n");
if(scanf("%d",&n)) printf("输入区间左端点的值A:\n");
if(scanf("%lf",&A)) printf("输入区间右端点的值B(输入0结束程序):\n");
相关文档
最新文档