计算方法实验报告

更新时间:2024-03-21 15:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《计算方法》实验报告

学号 实验项目名称 一、实验名称 计算方法实验 姓名 班级 实验一 插值与拟合 二、实验目的: (1)明确插值多项式和分段插值多项式各自的优缺点; (2)编程实现拉格朗日插值算法,分析实验结果体会高次插值产生的龙格现象; (3)运用牛顿插值方法解决数学问题。 三、实验内容及要求 1(1) 对于f(x)?,?5?x?5 21?x要求选取11个等距插值节点,分别采用拉格朗日插值和分段线性插值,计算x为0.5, 4.5处的函数值并将结果与精确值进行比较。 输入:区间长度,n(即n+1个节点),预测点 输出:预测点的近似函数值,精确值,及误差 (2)已知1?1,4?2,9?3,用牛顿插值公式求5的近似值。 输入:数据点集,预测点。 输出:预测点的近似函数值 四、实验原理及算法描述 算法基本原理: (1)拉格朗日插值法

(2) 牛顿插值法 算法流程 五、程序代码及实验结果 (1) 输出: A.拉格朗日插值法 B.分段线性插值 X y(精确) y(拉格朗日) y(分段线性) 误差(拉) 误差(分) 0.500000 0.800000 0.843407 0.750000 -0.054259 0.050000 4.500000 0.047059 1.578720 0.0486425 -32.547674 -0.033649 (2) 输出: X y(精确) y(牛顿插值) 误差(牛顿插值) 5.00000 2.236068 2.266670 -0.013686 源码: (1)A.拉格朗日插值法 #include #include #include using namespace std; double Lagrange(int N,vector&X,vector&Y,double x); int main(){ double p,b,c; char a='n'; do{ cout<<\请输入差值次数n的值:\ int N; cin>>N; vectorX(N,0); vectorY(N,0); cout<<\请输入区间长度(a,b):\ cin>>p; cin>>b; c=b-p; c=c/(N-1); for(int i=0;i>x;

double result=Lagrange(N,X,Y,x); cout<<\由拉格朗日插值法得出结果: \ cout<<\是否要继续?(y/n):\ cin>>a; }while(a=='y'); return 0; } double Lagrange(int N,vector&X,vector&Y,double x){ double result=0; for(int i=0;i #include #include using namespace std; double fenduan(int N,vector&X,vector&Y,double x,double c ); int main(){ double p,b,c; char a='n'; do{ cout<<\请输入差值次数n的值:\ int N; cin>>N; vectorX(N,0); vectorY(N,0); cout<<\请输入区间长度(a,b):\ cin>>p; cin>>b; c=b-p; c=c/(N-1); for(int i=0;i>x; double result=fenduan(N,X,Y,x,c); cout<<\由分段线性插值法得出结果: \ cout<<\是否要继续?(y/n):\ cin>>a; }while(a=='y'); return 0; } double fenduan(int N,vector&X,vector&Y,double x,double c){ double result=0; int b; b=0; while(x-X[b]>c) { b=b+1; } result=Y[b]*(1-(x-X[b])/c)+Y[b+1]*((x-X[b])/c); return result; }; (3) 牛顿插值法 #include #include #include using namespace std; double ChaShang(int n,vector&X,vector&Y); double Newton(double x,vector&X,vector&Y); int main(){ char a='n'; do{ int n; cout<<\请输入插值点个数:\ cin>>n; vectorX(n,0); vectorY(n,0); cout<<\请输入插值点对应的值及函数值(Xi,Yi):\ for(int i=0;i>X[i]>>Y[i]; } cout<<\请输入要求值x的值:\ double x; cin>>x; cout<<\由牛顿插值法得出结果: \ cout<<\是否要继续?(y/n):\ cin>>a; }while(a=='y'); return 0; } double ChaShang(int n,vector&X,vector&Y){ double f=0; double temp=0; for(int i=0;i&X,vector &Y){ double result=0; for(int i=0;i

本文来源:https://www.bwwdw.com/article/alb8.html

Top