数值分析报告上机实验报告(插值)
- 格式:doc
- 大小:403.00 KB
- 文档页数:6
实验报告:牛顿差值多项式&三次样条问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1. 认真分析问题,深刻理解相关理论知识并能熟练应用;2. 编写相关程序并进行实验;3. 调试程序,得到最终结果;4. 分析解释实验结果;5. 按照要求完成实验报告。
实验原理:详见《数值分析 第5版》第二章相关内容。
实验内容:(1)牛顿插值多项式1.1 当n=10时:在Matlab 下编写代码完成计算和画图。
结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.^2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p ;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x^2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0202e-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值分析第一次上机练习实验报告——Lagrange 插值与三次样条插值一、 问题的描述设()2119f x x =+, []1,1x ∈-,取15iix =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,()S x .二、 方法描述——Lagrange 插值与三次样条插值我们取15i ix =-+,0,1,2,...,10i =,通过在i x 点的函数值()2119i i f x x =+来对原函数进行插值,我们记插值函数为()g x ,要求它满足如下条件:()()21,0,1,2,...,1019i i ig x f x i x ===+ (1) 我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数()2119f x x=+进行插值,看两种方法的插值结果,并进行结果的比较。
10次的Lagrange 插值多项式为:()()10100i i i L x y l x ==∑ (2)其中:()21,0,1,2,...,1019i i i y f x i x ===+以及()()()()()()()()()011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----==----我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。
理论上我们根据区间[]1,1-上给出的节点做出的插值多项式()n L x 近似于()f x ,而多项式()n L x 的次数n 越高逼近()f x 的精度就越好。
但实际上并非如此,而是对任意的插值节点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
武汉理工大学学生实验报告书实验课程名称数值分析开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级2010—2010学年第一学期实验课程名称:数值分析第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)用拉格朗日插值法计算时,输入及运行结果如下:拉格朗日插值法牛顿插值法(2)利用二次插值计算时,输入及运行结果如下:拉格朗日插值法牛顿插值法(3)用艾尔米特插值法计算时,f(x)的插值多项式H5(x)=(1+4*x)*(x-0.5)*(x-0.5)*(x-2)*(x-2)+(3.90807-6.03838*x)*(x-2)*(x-2)*x*x+(2.34573-4.16674*x)*x*x*(x-0.5)*(x-0.5)(4)各插值算法的精度差异比较经过比较,拉格朗日插值法要比牛顿插值法算法的计算量多一些,拉格朗日插值法后一次计算时用到了前一次计算的结果,提高了运算的效率,但拉格朗日插值法在构造艾尔米特插值法时很方便,将坐标点和对应的导数结合起来的精度比线性插值的精度又要高一些。
但从实验数据来看,在坐标不是很多的情况下,已知的点越多精度也就相对较高。
对于实验要求的第二组数据用拉格朗日插值法(或者牛顿插值法)实验结果如下:一下分别是二阶、三阶、四阶、五阶插值得到的结果以上只是实验结果的一部分,改变插值的位置时,得到的实验结果精度也是有所不同的。
由以上结果分析可知,插值次数并不是越多越好,多了反而会让结果更加偏离真实结果,这充分说明了高次插值存在“病态性质”,在已知点很多的情况下应该采用分段低次插值,将拉格朗日插值法和牛顿插值法运用到分段低次插值法当中,这样得到的结果可能胡更加精确。
数值分析插值实验报告引言插值是数值分析中常用的一种技术,通过已知点的函数值来推测未知点的函数值。
在实际应用中,我们经常需要根据有限的数据点来估计连续函数的值,这时插值就起到了关键作用。
本实验旨在通过插值方法来推测未知数据点的函数值,并对比不同插值方法的精度和效果。
实验目的1.了解插值的基本概念和方法;2.掌握常见的插值方法,如拉格朗日插值、牛顿插值等;3.对比不同插值方法的精度和效果,分析其优缺点。
实验步骤1.数据采集:选取一组已知数据点,作为插值的基础。
这些数据点可以是从实际场景中测量得到的,也可以是人为设定的。
2.插值方法选择:根据实验要求和数据特点,选择适合的插值方法。
常见的插值方法包括拉格朗日插值、牛顿插值、分段线性插值等。
3.插值计算:根据选定的插值方法,利用已知数据点进行计算,并得到插值结果。
4.结果分析:比较插值结果与实际数据的差异,并评估插值方法的精度和效果。
可以使用误差分析等方法进行评估。
5.优化调整:根据实验结果和需求,对插值方法进行优化调整,以提高插值的准确性和可靠性。
实验结果与讨论通过实验,我们得到了不同插值方法的结果,并进行了对比和分析。
根据实验数据和误差分析,我们可以得出以下结论:1.拉格朗日插值方法具有较高的插值精度,在一定程度上能够准确地模拟实际数据。
2.牛顿插值方法相对于拉格朗日插值方法而言,对于大量数据点的计算速度更快,但在少量数据点的情况下,两者的精度差异较小。
3.分段线性插值方法适用于数据点较为离散的情况,能够提供较为平滑的插值结果。
4.插值方法的选择应根据具体需求和数据特点进行,没有一种插值方法适用于所有情况。
实验总结通过本次实验,我们对插值方法有了更深入的了解,并掌握了常见的插值方法的原理和应用。
实验结果表明,插值方法在数值分析中起到了重要的作用,能够准确地推测未知点的函数值。
然而,在实际应用中,我们还需要考虑数据的特点、插值方法的适用性以及计算效率等因素。
数值分析实验报告(插值法)武汉理⼯⼤学学⽣实验报告书实验课程名称数值分析开课学院计算机科学与技术学院指导⽼师姓名学⽣姓名学⽣专业班级2010—2010学年第⼀学期实验课程名称:数值分析第⼆部分:实验调试与结果分析(可加页)⼀、调试过程(包括调试⽅法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)⽤拉格朗⽇插值法计算时,输⼊及运⾏结果如下:拉格朗⽇插值法⽜顿插值法(2)利⽤⼆次插值计算时,输⼊及运⾏结果如下:拉格朗⽇插值法⽜顿插值法(3)⽤艾尔⽶特插值法计算时,f(x)的插值多项式(x)=(1+4*x)***(x-2)*(x-2)+(4)各插值算法的精度差异⽐较H5经过⽐较,拉格朗⽇插值法要⽐⽜顿插值法算法的计算量多⼀些,拉格朗⽇插值法后⼀次计算时⽤到了前⼀次计算的结果,提⾼了运算的效率,但拉格朗⽇插值法在构造艾尔⽶特插值法时很⽅便,将坐标点和对应的导数结合起来的精度⽐线性插值的精度⼜要⾼⼀些。
但从实验数据来看,在坐标不是很多的情况下,已知的点越多精度也就相对较⾼。
对于实验要求的第⼆组数据⽤拉格朗⽇插值法(或者⽜顿插值法)实验结果如下:⼀下分别是⼆阶、三阶、四阶、五阶插值得到的结果以上只是实验结果的⼀部分,改变插值的位置时,得到的实验结果精度也是有所不同的。
由以上结果分析可知,插值次数并不是越多越好,多了反⽽会让结果更加偏离真实结果,这充分说明了⾼次插值存在“病态性质”,在已知点很多的情况下应该采⽤分段低次插值,将拉格朗⽇插值法和⽜顿插值法运⽤到分段低次插值法当中,这样得到的结果可能胡更加精确。
对于分段低次插值本实验没有给出实验结果,但从实践上来看,分段低次插值的精度要⽐线性插值精度⾼,但当插值阶数⽐较少的时候没有必要采⽤分段低次插值。
⼆、实验⼩结、建议及体会各种插值法都有⾃⼰的利与弊,拉格朗⽇插值法运算过程相对复杂,但当和导数结合起来,组成抛物插值的时候,精度就可以提⾼很多。
⽜顿插值法、拉格朗⽇插值法等线性插值法只能适合在已知点不多的情况下使⽤,当已知的坐标点很多时候应该将区间分成⼩段进⾏分段线性插值或者分段抛物插值。
数值分析实验报告线性插值和二次插值计算ln0.54的近似值数值分析实验报告线性插值和二次插值计算ln0.54的近似值篇一:数值分析-用线性插值及二次插值计算数值分析上机报告习题:给出f(x)?lnx的数值表,用线性插值及二次插值计算ln0.54的近似值。
解:(1)用线性插值计算 Matla b程序 x=0.54; a=[0.5,0.6];b=[-0.693147,-0.510826]; l1=b (1)*((x-a(2))/(a(1)-a (2))); l2=b(2)*((x-a(1))/(a(2)-a(1))); y=l1+l2 y = -0.6202(2)用抛物插值计算 Ma tlab程序 x=0.54; a=[0.4,0.5,0.6]; b=[-0.916291,-0.693147,-0.510826]; A=b(1)*(x-a(2))*(x-a(3))/((a (1)-a(2))*(a(1)-a(3))); B=b(2)*(x-a (1))*(x-a(3))/((a(2)-a(1))*(a(2)-a(3))); C=b(3)*(x-a(1))*(x-a(2))/((a(3)-a(1))*(a(3)-a(2)));y=A+B+C y= -0.6153篇二:数值分析上机实验报告二实验报告二题目:如何求解插值函数摘要:在工程测量和科学实验中,所得到的数据通常都是离散的,如果要得到这些离散点意外的其他点的数值,就需要根据这些已知数据进行插值。
这里我们将采用多种插值方法。
前言:(目的和意义)掌握Lagrange,Netn,Hermi te,线性,三次样条插值法的原理及应用,并能求解相应问题。
数学原理:主要的插值法有:多项式插值法、拉格朗日插值法、线性插值法、牛顿插值法,H ermite插值法三次样条插值法等。
数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。
实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。
在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。
一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。
我们将选择几个常见的函数进行迭代求根的实验。
(1)二分法二分法是一种简单而有效的迭代求根法。
通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。
(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。
通过不断迭代更新逼近值,可以较快地求得零点。
实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。
但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。
二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。
本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。
(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。
该多项式经过离散数据点,并且是唯一的。
该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。
(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。
与拉格朗日插值相比,牛顿插值的计算过程更加高效。
但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。
实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。
插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。
三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。
本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。
(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。
数值分析上机实习报告随着现代科学技术的迅猛发展,计算机科学的应用日益广泛,数值分析作为计算机科学中重要的分支之一,其在工程、物理、生物学等领域的应用也越来越受到重视。
本学期,我们在数值分析课程的学习中,进行了多次上机实习,通过实习,我们对数值分析的基本方法和算法有了更深入的理解和掌握。
在实习过程中,我们使用了MATLAB软件作为主要的工具,MATLAB是一种功能强大的数学软件,它提供了丰富的数值计算函数和图形显示功能,使我们能够更加方便地进行数值计算和分析。
第一次实习是线性插值和函数逼近。
我们学习了利用已知数据点构造插值函数的方法,并通过MATLAB软件实现了线性插值和拉格朗日插值。
通过实习,我们了解了插值的基本原理,掌握了插值的计算方法,并能够利用MATLAB软件进行插值计算。
第二次实习是解线性方程组。
我们学习了高斯消元法、列主元高斯消元法和克莱姆法则等解线性方程组的方法,并通过MATLAB软件实现了这些算法。
在实习过程中,我们通过实际例子了解了这些算法的应用,掌握了它们的计算步骤,并能够利用MATLAB软件准确地求解线性方程组。
第三次实习是求解非线性方程和方程组。
我们学习了二分法、牛顿法、弦截法和迭代法等求解非线性方程的方法,以及雅可比法和高斯-赛德尔法等求解非线性方程组的方法。
通过实习,我们了解了非线性方程和方程组的求解方法,掌握了它们的计算步骤,并能够利用MATLAB软件求解实际问题。
通过这次上机实习,我们不仅深入学习了数值分析的基本方法和算法,而且锻炼了利用MATLAB软件进行数值计算和分析的能力。
同时,我们也认识到了数值分析在实际问题中的应用价值,增强了解决实际问题的能力。
总之,这次上机实习使我们受益匪浅,对我们学习数值分析课程起到了很好的辅助作用。
数值分析上机实验报告实验报告插值法与数值积分实验(数值计算方法,3学时)一实验目的1.掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。
2.掌握复化的梯形公式、辛扑生公式、牛顿-柯特斯公式计算积分。
3. 会用龙贝格公式和高斯公式计算积分。
二实验内容用拉格朗日插值公式计算01.54.1==y x 以及所对应的近似值。
用牛顿插值公式求)102(y 的近似值。
三实验步骤(算法)与结果1拉格朗日插值法:(C 语言版)#include "Stdio.h" #include "Conio.h"int main(void) {float X[20],Y[20],x; int n;void input(float *,float *,float *,int *); float F(float *,float *,float,int); input(X,Y,&x,&n);printf("F(%f)=%f",x,F(X,Y,x,n));getch(); return 0; }void input(float *X,float *Y,float *x,int *n) {int i;printf("Please input the number of the data:");scanf("%d",n);printf("\nPlease input the locate of each num:\n");for(i=0;i<*n;i++){scanf("%f,%f",X+i,Y+i);}printf("\nPlease input the chazhi:"); scanf("%f",x);}float F(float *X,float *Y,float x,int n){int i,j;float Lx,Fx=0;for(i=0;i<n;i++)< p="">{Lx=1;for(j=0;j<n;j++)< p="">{if(j!=i) Lx=Lx*((x-*(X+j))/(*(X+i)-*(X+j))); } Fx=Fx+Lx*(*(Y+i));}return Fx;}得出结果如图:所以Y(1.4)=3.7295252#include#define N 10double X[N], Y[N], A[N][N];int n;double Newton(double x);double f(double x);void main() {printf("请输入已知x与对应y=f(x)的个数: n = "); scanf("%d", &n);getchar();if(n>N||n<=0) {printf("由于该维数过于犀利, 导致程序退出!"); return;}printf("\n请输入X[%d]: ", n);for (int i=0; i<="" p="">scanf("%lf", &X[i]);getchar();printf("\n请输入Y[%d]: ", n);for (i=0; i<="" p="">scanf("%lf", &Y[i]);getchar();double x;printf("\n请输入所求结点坐标x = ");scanf("%lf", &x);getchar();printf("\nf(%.4lf)≈%lf\n\n", x, Newton(x));}double Newton(double x) {int i, j;// 求均差for (i =0; i<="" p="">A[i][0] = Y[i];for (i=1; i<="" p="">for (j =1; j<=i; j++)A[i][j] = (A[i][j-1] - A[i-1][j-1]) / (X[i] - X[i-j]); // 求结点double result = A[0][0];for (i=1; i<="">double tmp = 1.0;for (int j=0; j<="" p="">tmp *= (x - X[j]);result += tmp * A[i][i];}return result;}四实验收获与教师评语</n;j++)<></n;i++)<>。
课题一:拉格朗日插值法1.实验目的1.学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程作出插值点(,),(,),(,)二、算法步骤已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
3.程序流程:(1)输入已知点的个数;(2)分别输入已知点的X坐标;(3)分别输入已知点的Y坐标;程序如下:#include <iostream>#include <>#include <>拉格朗日float lagrange(float *x,float *y,float xx,int n) /*插值算法*/{int i,j;float *a,yy=; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);return yy;}int main(){int i;int n;float x[20],y[20],xx,yy;printf(Input n:);scanf(%d,&n);if(n<=0){printf(Error! The value of n must in (0,20).);getch();return 1;}for(i=0;i<=n-1;i++){牰湩晴尨學搥???※scanf(%f,&x[i]);}printf(\);for(i=0;i<=n-1;i++) {printf(y[%d]:,i);scanf(%f,&y[i]); } printf(\);printf(Input xx:);scanf(%f,&xx);yy=lagrange(x,y,xx,n);牰湩晴尨?春礬┽屦湜?硸礬? getch();}运的值。
数值计算插值法实验报告
一、实验目标
本实验的目标是学习和掌握插值法的基本原理,通过实际操作,验证插值法的有效性,并利用插值法解决实际问题。
二、实验原理
插值法是一种数学方法,用于通过已知的离散数据点,构造一个连续的函数来近似地表示未知的函数值。
常用的插值法包括线性插值、多项式插值、样条插值等。
其中,多项式插值是一种常用的方法,其基本思想是选择一个多项式来逼近已知的数据点,从而得到未知点的近似值。
三、实验步骤
1.准备数据:收集一组已知的数据点,并将其整理成表格形式。
2.选择插值方法:根据实际情况选择适当的插值方法,如线性插值、多项式插值或样条插值等。
3.计算插值函数:根据选择的插值方法,利用已知的数据点计算插值函数的系数。
4.验证插值函数:利用已知的数据点对插值函数进行验证,检查其精度和误差。
5.应用插值函数:利用插值函数计算未知点的近似值,并将结果与实际值进行比较。
四、实验结果及分析
下面是本次实验的结果及分析:
1.已知数据点:。
数值分析上机实验报告题目:插值法学生姓名学院名称计算机学院专业计算机科学与技术时间一. 实验目的1、掌握三种插值方法:牛顿多项式插值,三次样条插值,拉格朗日插值2、学会matlab提供的插值函数的使用方法二.实验内容1、已知函数在下列各点的值为试用4次牛顿插值多项式P4(x)及三次样条函数S(x)(自然边界条件)对数据进行插值。
用图给出{(x i,y i),x i=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)。
2、在区间[-1,1]上分别取n=10,20用两组等距节点对龙格函数f(x)=1/(1+25x2)作多项式插值及三次样条插值,对每个n值,分别画出插值函数及f(x)的图形。
3、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9个点作8次多项式插值L8(x)(2)用三次样条(第一边界条件)程序求S(x)从得到结果看在[0,64]上,哪个插值更精确,在区间[0,1]上。
两种插值哪个更精确?三.实现方法1. 进入matlab开发环境2. 依据算法编写代码3. 调试程序4. 运行程序5. (1)牛顿插值多项式:P n=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+…+f[x0,x1,…,x n] (x-x0)(x-x n-1)三次样条插值:用三次样条插值函数由题目分析知,要求各点的M值:6.实验代码如下:(1)牛顿插值多项式程序:function varargout=newton(varargin)clear,clcx=[0.2 0.4 0.6 0.8 1.0]; fx=[0.98 0.92 0.81 0.64 0.38]; newtonchzh(x,fx);function newtonchzh(x,fx)n=length(x);FF=ones(n,n); FF(:,1)=fx';for i=2:nfor j=i:nFF(j,i)=(FF(j,i-1)-FF(j-1,i-1))/(x(j)-x(j-i+1));endendfor i=1:nfprintf('%4.2f',x(i)); for j=1:ifprintf('%10.5f',FF(i,j)); endfprintf('\n');end三次样条插值程序:function sanciyangtiao(n,s,t)x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];n=5for j=1:1:n-1h(j)=x(j+1)-x(j);endfor j=2:1:n-1r(j)=h(j)/(h(j)+h(j-1));endfor j=1:1:n-1u(j)=1-r(j);endfor j=1:1:n-1f(j)=(y(j+1)-y(j))/h(j);endfor j=2:1:n-1d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));endd(1)=0d(n)=0a=zeros(n,n);for j=1:1:na(j,j)=2;endr(1)=0;u(n)=0;for j=1:1:n-1a(j+1,j)=u(j+1);a(j,j+1)=r(j);endb=inv(a)m=b*d'p=zeros(n-1,4);for j=1:1:n-1p(j,1)=m(j)/(6*h(j));p(j,2)=m(j+1)/(6*h(j));p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j);p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j);endend图程序:x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];plot(x,y)hold onfor i=1:1:5y(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)*(x(i)-0.8)endk=[0 1 10 11]x0=0.2+0.08*kfor i=1:1:4y0(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)*(x(i)-0.8)endplot( x0,y0,'o',x0,y0 )hold ony1=spline(x,y,x0)plot(x0,y1,'o')hold ons=csape(x,y,'variational')fnplt(s,'r')hold ongtext('Èý´ÎÑùÌõ×ÔÈ»±ß½ç')gtext('Ô-ͼÏñ')gtext('4´ÎÅ£¶Ù²åÖµ')(2)多项式插值程序:function [C,D]=longge(X,Y)n=length(X);D=zeros(n,n)D(:,1)=Y'for j=2:nfor k=j:nD(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));endendC=D(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)))m=length(C);C(m)= C(m)+D(k,k);endend三次样条插值程序:function S=longgesanci(X,Y,dx0,dxn)N=length(X)-1;H=diff(X);D=diff(Y)./H;A=H(2:N-1);B=2*(H(1:N-1)+H(2:N));C=H(2:N);U=6*diff(D);B(1)=B(1)-H(1)/2;U(1)=U(1)-3*(D(1));B(N-1)=B(N-1)-H(N)/2;U(N-1)=U(N-1)-3*(-D(N));for k=2:N-1temp=A(k-1)/B(k-1);B(k)=B(k)-temp*C(k-1);U(k)=U(k)-temp*U(k-1);endM(N)=U(N-1)/B(N-1);for k=N-2:-1:1M(k+1)=(U(k)-C(k)*M(k+2))/B(k);endM(1)=3*(D(1)-dx0)/H(1)-M(2)/2;M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2;for k=0:N-1S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1));S(k+1,2)=M(k+1)/2;S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1);endend(3)三次样条函数程序代码:function sanci3(n,s,t)y=[0 1 2 3 4 5 6 7 8];x=[0 1 4 9 16 25 36 49 64];n=9for j=1:1:n-1h(j)=x(j+1)-x(j);endfor j=2:1:n-1r(j)=h(j)/(h(j)+h(j-1));endfor j=1:1:n-1u(j)=1-r(j);endfor j=1:1:n-1f(j)=(y(j+1)-y(j))/h(j);endfor j=2:1:n-1d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));endd(1)=0d(n)=0a=zeros(n,n);for j=1:1:na(j,j)=2;endr(1)=0;u(n)=0;for j=1:1:n-1a(j+1,j)=u(j+1);a(j,j+1)=r(j);endb=inv(a) m=b*d' t=ap=zeros(n-1,4);p(j,1)=m(j)/(6*h(j));p(j,2)=m(j+1)/(6*h(j));p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j);p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j); end拉格朗日插值程序:function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endend四.实验结果1.牛顿插值多项式结果:所以有四次插值牛顿多项式为: P4(x)=0.98-0.3(x-0.2)-0.62500(x-0.2)(x-0.4)-0.20833(x-0.2)(x-0.4)(x-0.6)-0.52083(x-0.2)(x-0.4)(x-0.6)(x-0.8)三次样条插值结果:得到m=(0 -1.6071 -1.0714 -3.1071 0),则可得:图形为:2.多项式插值,n=10时:n=20时:三次样条插值,n=10时:n=20时:3.三次样条插值程序结果:解得:M0=0;M1=-0.5209;M2=0.0558;M3=-0.0261;M4=0.0006;M5=-0.0029;M6=-0.0008;M7=--0.0009;M8=0;则三次样条函数:图形:[0,64]:在区间[0,64]上从图3-2中可以看出蓝色虚线条和绿色线条是几乎重合的,而红色线条在[30,70]之间有很大的起伏,所在在区间[0,64]三次样条插值更精确。
数值分析上机实验报告数值分析上机实验报告一、引言数值分析是一门研究利用计算机进行数值计算的学科。
通过数值分析,我们可以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积分等。
本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。
二、实验目的本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析理论的理解,并通过实际应用提高编程能力。
三、实验内容1. 数值求解方程首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。
通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。
2. 数值插值和逼近接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。
通过编写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插值曲线和逼近曲线。
3. 数值积分然后,我们使用梯形法和辛普森法进行定积分的数值计算。
通过编写程序,输入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。
四、实验步骤1. 数值求解方程(1)使用二分法求解非线性方程的根。
根据二分法的原理,编写程序实现二分法求解方程的根。
(2)使用牛顿迭代法求解非线性方程的根。
根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。
2. 数值插值和逼近(1)使用拉格朗日插值法进行数据的插值。
根据拉格朗日插值法的原理,编写程序实现数据的插值。
(2)使用最小二乘法进行数据的逼近。
根据最小二乘法的原理,编写程序实现数据的逼近。
3. 数值积分(1)使用梯形法进行定积分的数值计算。
根据梯形法的原理,编写程序实现定积分的数值计算。
(2)使用辛普森法进行定积分的数值计算。
根据辛普森法的原理,编写程序实现定积分的数值计算。
五、实验结果与分析1. 数值求解方程通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。
结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。
数值分析第一次上机练习实验报告
——Lagrange 插值与三次样条插值
一、 问题的描述
设()2119f x x =+, []1,1x ∈-,取15
i
i
x =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,
()S x .
二、 方法描述——Lagrange 插值与三次样条插值
我们取15i i x =-+
,0,1,2,...,10i =,通过在i x 点的函数值()21
19i i
f x x =+来对原函数进行插值,我们记插值函数为()
g x ,要求它满足如下条件:
()()2
1
,0,1,2,...,1019i i i
g x f x i x ==
=+ (1) 我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数
()2
1
19f x x
=
+进行插值,看两种方法的插值结果,并进行结果的比较。
10次的Lagrange 插值多项式为:
()()10
100
i i i L x y l x ==∑ (2)
其中:
()2
1
,0,1,2,...,1019i i i y f x i x ==
=+
以及
()()()()()()()()()
011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----=
=----
我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。
理论上我们根据区间[]1,1-上给出的节点做出的插值多项式()n L x 近似于()f x ,而多
项式()n L x 的次数n 越高逼近()f x 的精度就越好。
但实际上并非如此,而是对任意的插值节点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近
会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。
因此用高次插值多项式()n L x 近似()f x 的效果并不总是好的,
因而人们通常在选择插值方式的时候不用高次多项式插值,而用分段低次插值,而这样的插值效果往往是非常好的,能够克服高次多项式插值的弱点,达到令人满意的效果。
分段低次插值包括分段线性插值、分段三次Hermite 插值、三次样条插值等。
前两种插值函数都具有一致收敛性,但是光滑性较差,而在实际问题中我们往往要求函数具有二阶光滑度,即有二阶连续导数。
而对第三种插值方式,我们得到的是一个样条曲线,它是由分段三次曲线拼接而成,在连接点(即样点)上二阶导数连续。
我们记三次样条插值函数为()S x ,它在每个小区间1,,0,1,2,...,9j j x x j +⎡⎤=⎣⎦上是三次函数,因此在每个区间上需要确定4个参数,总共有10个小区间,因此共需确定40个未知
参数。
首先我们有插值条件:
()2
1
,0,1,2,...,1019j j j
S x y j x ==
=+ (3)
其次在每个节点,1,2,...,9j x j =上满足连续性条件:
()()()()()()00,'0'0,''0''0j j j j j j S x S x S x S x S x S x -=+-=+-=+ (4)
此外在端点处满足自然边界条件:
()()()()010''''10,''''10S x S S x S =-=== (5)
我们假设()
'',0,1,2,...,10j j S x M j ==。
则在每个小区间1,,0,1,2,...,9j j x x j +⎡⎤=⎣⎦上:
()()
()
3
3
221111
16666j j
j j j j j
j j
j j j j
j
j j
x x x x M h x x M h x x S x M M y y h h h h +++++--⎛⎫⎛⎫--=++-+- ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭(6) 其中:
1,,
0,1,2,...,9j j x x x j +⎡⎤∈=⎣⎦
及
1j j j h x x +=-
我们利用边界条件(3)(4)(5)可以得到:
112,1,2,...,9j j j j j j M M M d j μλ-+++== (7)
其中:
111,j j j j j j
j j
h h h h h h μλ---=
=
++
以及
11111,,66,,j j j j j j j j j j
f x x f x x d f x x x h h +--+-⎡⎤⎡⎤-⎣⎦⎣⎦⎡⎤==⎣⎦+ 两端点处的边界条件为:
0100M M == (8)
将边界条件写成矩阵形式为:
000111199991010102222M d M d M d M d λμλμλμ⎛⎫⎛⎫⎛⎫
⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪=
⎪⎪ ⎪
⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪⎝
⎭⎝⎭⎝⎭
(9)
其中根据自然边界条件(8)有:
0100100,0d d λμ====
我们解方程(9)就可以得到,0,1,...,10j M j =,将他们代入(6)就可以得到各段区间上的()S x 的值。
三、 方案设计
我们通过编写Matlab 程序来进行10次Lagrange 插值与三次样条插值的工作。
在我们的程序文件中interplotion.m 文件是主程序文件;L10.m 文件是计算10次Lagrange 插值多项式
()10L x 的子程序文件,给它任一个[]1,1x ∈-,此程序将返回()10L x 的值;Mspline.m 是根
据(9)计算各节点二阶导数值,0,1,2,...,10j M j =的子程序文件,它将会返回在自然边界条件下的各节点的二阶导数值j M ;然后spline.m 是根据j M 以及(6)计算三次样条插值函数
()S x 的子程序文件。
然后运行主程序将给出三幅曲线图,分别是()f x 与()10L x 曲线,
()f x 与()S x 曲线,以及()f x 、()10L x 与()S x 三条曲线共同画在一幅图上得到的图象。
解决这个问题的思路很简单,按部就班的来就可以。
首先我们计算各节点i x 上的函数值()i i y f x =以备后用,然后调用Mspline.m 计算,0,1,2,...,10j M j =。
随后我们给出一系列x 的值,计算()f x ,并分别调用L10.m 与spline.m 分别计算()10L x 与()S x 。
然后根据我们得到的数据绘图观察插值结果。
具体程序的实现可参见所给程序的相关注释。
四、 计算结果及其分析
下面是我们根据程序计算结果得到的数据,其中分别给出了在各典型x 处的的原函数的值()f x 、Lagrange 插值结果()10L x 与样条插值结果()S x ;以及绝对误差()()10L x f x -和
()()S x f x -,相对误差
()()()10L x f x f x -,()()
()
S x f x f x -。
由于在两端点处进行Lagrange 插值
尽管从数据可以看出一些端倪,但是通过图象我们更能清楚地看到最终插值结果的定性情况。
首先我
们给出
()f x 与()10L x 曲线:
其中蓝色的曲线代表()f x 曲线,绿色的曲线代表()10L x 曲线。
可见此时两者之间具有很大的差别,尤其在端点附近会出现严重的()10L x 偏离()f x 的现象,即出现了所谓的Runge 现象。
而此时()f x 曲线与我们用样条插值得到的()S x 的曲线为:
其中蓝色的曲线代表()f x 曲线,绿色的曲线代表()S x 曲线,可见两条曲线几乎完全重合,
()S x 与()f x 符合的很好。
上面我们由曲线定性看到的结论也可以通过表中的数据定量的看出。
五、 结论
插值方法中最基本的是多项式插值,而我们可以通过Lagrange 多项式来方便的实现这种插值方式。
理论上我们根据给定区间上的给定的节点做出的插值多项式()n L x 近似于
()f x ,而多项式()n L x 的次数n 越高逼近()f x 的精度就越好。
但实际上对任意的插值节
点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。
因此用高次插值多项式()n L x 近似()f x 的效果并不总是好的,而我们通过本次试验中的实际计算发现对本次试验中的函数确实出现了Runge 现象,插值结果很不令人满意;我们转而采用分段的三次样条插值,得到了非常好的插值效果。