刘盼 计算方法实验

上传人:M****1 文档编号:558378782 上传时间:2023-06-10 格式:DOC 页数:6 大小:141.50KB
返回 下载 相关 举报
刘盼 计算方法实验_第1页
第1页 / 共6页
刘盼 计算方法实验_第2页
第2页 / 共6页
刘盼 计算方法实验_第3页
第3页 / 共6页
刘盼 计算方法实验_第4页
第4页 / 共6页
刘盼 计算方法实验_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《刘盼 计算方法实验》由会员分享,可在线阅读,更多相关《刘盼 计算方法实验(6页珍藏版)》请在金锄头文库上搜索。

1、.计算方法实验报告学号 2015216772刘盼班级计算机一班实验项目名称插值与拟合一、实验名称实验一 插值与拟合二、 实验目的:1. 明确插值多项式和分段插值多项式各自的优缺点;2. 编程实现拉格朗日插值算法,分析实验结果体会高次插值产生的龙格现象;3. 理解最小二乘拟合,并编程实现线性拟合,掌握非线性拟合转化为线性拟合的方法4. 运用常用的插值和拟合方法解决实际问题。三、 实验内容及要求(1)对于要求选取11个等距插值节点,分别采用拉格朗日插值和分段线性插值,计算x为0.5, 4.5处的函数值并将结果与精确值进行比较。输入:区间长度,n(即n+1个节点),预测点输出:预测点的近似函数值,精

2、确值,及误差(2)已知用牛顿插值公式求的近似值。输入:数据点集,预测点。输出:预测点的近似函数值四、 实验原理及算法描述1. Lagrange插值法的基本原理:当精确函数 y = f(x) 非常复杂或未知,在一系列节点 x0 xn 处测得函数值 y0 = f(x0), yn = f(xn), 希望由此构造一个简单易算的近似函数 g(x) f(x),满足条件g(xi) = f(xi) (i = 0, n)。这里的 g(x) 称为f(x) 的插值函数,由插值函数可以去近似估计f(x)在一些未知点处的函数值。最常用的插值函数是多项式插值。 所谓多项式插值即求 n 次多项式使得基于基函数的拉格朗日插值

3、是构造多项式插值最基本方法。也是推导数值微积分和微分方程数值解的公式的理论基础。拉格朗日插值公式为: 其中2. Lagrange插值算法描述:(也可以是算法流程图)步骤1: 构造处的插值基函数,其中,插值节点处的插值基函数为;步骤2:以作为的系数,使得通过插值点;步骤3:把所有的线性叠加,得到通过所有插值点的插值函数。Lagrange插值伪代码:给定个插值点的情况下,求插值函数在点处的函数值。/*输入参数*x=(x0,x1,.,xn), 插值节点*y=(y0,y1,yn); 被插函数f(x)在插值节点处的函数值*t 求插值函数Ln (x)在t处的函数值*返回值 插值函数Ln (x)在t处的函数

4、值 */五、 程序代码及实验结果1 主程序int main() double x11 = -5,-4,-3,-2,-1,0,1,2,3,4,5,y11 = 0.038461,0.058823,0.100000,0.200000,0.500000,1.000000,0.500000,0.200000,0.100000,0.058823,0.038461; double u1,u2; double m1,l1,p1,m2,l2,p2;printf(请输入要计算的x的值:);scanf(%lf,&u1); m1=1/(1+u1*u1);printf(x=%lf时的精确值为:%fn,u1,m1);pr

5、intf(x=%lf时的拉格朗日差值近似值为:%fn,u1,Lagrange(x,y,u1);/拉格郎日插值 printf(x=%lf时的分段线性差值近似值为:%fn,u1,PiecewiseLinear(x,y,u1); /分段线性插值 l1=m1-Lagrange(x,y,u1);p1=m1-PiecewiseLinear(x,y,u1);printf(x=%lf时的拉格朗日误差为:%fn,u1,l1);printf(x=%lf时的分段线性误差为:%fn,u1,p1);printf(请再输入要计算的x的值:);scanf(%lf,&u2); m2=1/(1+u2*u2);printf(x=

6、%lf时的精确值为:%fn,u2,m2);printf(x=%lf时的拉格朗日差值近似值为:%fn,u2,Lagrange(x,y,u2);/拉格郎日插值 printf(x=%lf时的分段线性差值近似值为:%fn,u2,PiecewiseLinear(x,y,u2); /分段线性插值 l2=m2-Lagrange(x,y,u2);p2=m2-PiecewiseLinear(x,y,u2);printf(x=%lf时的拉格朗日误差为:%fn,u2,l2);printf(x=%lf时的分段线性误差为:%fn,u2,p2);newton(); return 0;2 Lagrange插值子程序:dou

7、ble Lagrange(double *x, double *y, double *) /拉格郎日插值 int i,j; double *a,yy=0.000; a=new double11; for(i=0;i11;i+) ai=yi; for(j=0;j11;j+) if(j!=i) ai*=(*-xj)/(xi-xj); yy+=ai; delete a; return yy; 3. 分段线性插值子程序double PiecewiseLinear(double *x, double *y, double input) /分段线性插值 double output; int i; for

8、(i=0;i10;i+) if (xi = input) output=yi +(yi+1-yi)*(input-xi)/(xi+1-xi); break; return output; 4. 牛顿插值子程序void newton() /牛顿插值 float x100,y100,c100100,x1,xp,wx; int n,i,j; cout输入数据组的个数n; for(i=0;in;i+) cout当前输入第i组数据xi; cinyi; for(j=0;j0) for(i=0;in-j;i+) cij=(ci+1j-1-cij-1)/(xi+j-xi); else for(i=0;in;i

9、+) ci0=yi; xp=y0; char m=y; while(m=y) cout请输入你要求的点的X值:x1; for(i=1;in;i+) wx=1; for(j=0;j=i-1;j+) wx=wx*(x1-xj); xp=xp+c0i*wx; coutnewton插值的结果为:xpendl; cout是否想继续计算(Y/N)m; 实验结果:.。如图一所示。 图1 2 六、 实验总结1. 拉格朗日插值在高次插值时同原函数偏差大、存在龙格现象,高次插值多项式不收敛。2. 牛顿插值和拉格朗日插值的区别和联系: Ln(x)与NN(x)均是n次多项式,且均满足插值条件:Ln(x)=Nn(x)=f(xk),k=0,1,n 由插值多项式的唯一性,两个公式的余项相等。 当插值多项式从n-1次增加到n次时,拉格朗日型插值必须重新计算所有的插值基函数;而对于牛顿型插值,只需用表格再计算一个n阶差商,然后加上一项即可。 牛顿型插值余项公式对由离散点给出或导数不存在时均适用。五、教师评语(或成绩) 教师签字 : . v

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号