Lagrange插值及Newton插值Word文档格式.docx
- 文档编号:19891375
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:9
- 大小:31.46KB
Lagrange插值及Newton插值Word文档格式.docx
《Lagrange插值及Newton插值Word文档格式.docx》由会员分享,可在线阅读,更多相关《Lagrange插值及Newton插值Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
0.34
0.36
sinxi
0.314567
0.333487
0.352274
构造一个抛物插值多项式P2(x)及N2(x),计算sinO.3367的近似值并估计误差。
实验步骤及程序:
1、
Lagrange插值公式算法流程图
开始
输入.二」二丿…冲
0=
ny
=>
k
—气
t=^t
\-xj
1=0j****k-ljk+1/-fn
输出y
结束
k+Ink
2、Lagrange插值源程序
importjava.util.Scanner;
/*拉格朗日插值*/
publicclassLagrange_interpolation{
/*拉格朗日插值法*/
privatestaticdouble[]Lag_method(doubleX[],doubleY[],doubleX0[]){intm=X.length;
intn=X0.length;
doubleY0[]=newdouble[n];
for(inti1=0;
i1<
n;
i1++){//遍历X0
doublet=0;
for(inti2=0;
i2<
m;
i2++){//遍历Y
doubleu=1;
for(inti3=0;
i3<
i3++){//遍历X
if(i2!
=i3){
u=u*(X0[i1]-X[i3])/(X[i2]-X[i3]);
}
u=u*Y[i2];
t=t+u;
Y0[i1]=t;
returnY0;
publicstaticvoidmain(String[]args){
/*输入插值点横纵坐标*/
System.out.println("
Inputnumberofinterpolationpoint:
"
);
Scannerscan=newScanner(System.in);
intm=scan.nextInt();
Inputnumberoftestpoint:
intn=scan.nextInt();
doubleX[]=newdouble[m];
doubleY[]=newdouble[m];
doubleX0[]=newdouble[n];
System.out.println("
lnputtheelementsofX:
〃已知插值点
for(inti=0;
i<
i++){
X[i]=sean.nextDouble();
InputtheelementsofY:
〃已知插值点的函数值
Y[i]=sean.nextDouble();
InputtheelementsofX0:
〃需要求的插值点的横坐标标值
X0[i]=scan.nextDouble();
doubleY0[]=Lag_method(X,Y,X0);
〃使用拉格朗日插值法求解得到需求插值点的纵坐标值
拉格朗日插值法求解得:
System.out.println(Y0[i]+"
System.out.println();
Newton插值源程序
publicclassNewton_interpolation{
/*拷贝向量*/
privatestaticvoidcopy_vector(doublefrom[],doubleto[]){
intk=from.length;
intk2=to.length;
if(k!
=k2){
System.out.println("
thetwovector'
slengthisnotequal!
System.exit(O);
for(inti=O;
i<
k;
i++){
to[i]=from[i];
doubleX0[]){
/*牛顿插值法*/
privatestaticdouble[]Newton_inter_method(double[]X,double[]Yintm=X.length;
intn=X0.length;
double[]Y0=newdouble[n];
double[]cp_Y=newdouble[m];
for(inti1=0;
i1<
n;
i1++){〃遍历X0
doublet=0;
intj=0;
copy_vector(Y,cp_Y);
intkk=j;
/*求各级均差*/
while(kk<
m-1){
kk=kk+1;
for(inti2=kk;
i2<
m;
i2++){
cp_Y[i2]=(cp_Y[i2]-cp_Y[kk-1])/(X[i2]-X[kk-1]);
/*求插值结果*/
doubletemp=cp_Y[0];
for(inti=1;
=m-1;
doubleu=1;
intjj=O;
while(jj<
i){
u*=(XO[i1]-X[jj]);
jj++;
temp+=cp_Y[i]*u;
Y0[i1]=temp;
lnputnumberofinterpolationpoint:
Scannerscan=newScanner(System.in);
intm=scan.nextInt();
lnputnumberoftestpoint:
intn=scan.nextInt();
doubleX[]=newdouble[m];
doubleY[]=newdouble[m];
doubleX0[]=newdouble[n];
InputtheelementsofX:
for(inti=0;
X[i]=scan.nextDouble();
lnputtheelementsofY:
Y[i]=scan.nextDouble();
lnputtheelementsofX0:
i<
n;
X0[i]=scan.nextDouble();
doubleY0[]=Newton」nter_method(X,Y,X0);
〃使用拉格朗日插值法求解得到需
求插值点的纵坐标值
结果分析与讨论:
拉格朗日插值法求解得
0.3303743620375
牛顿法解得
1、Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点
岀的函数值,是插值法的基本思路。
2、实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。
3、实验所得结果精确度并不高,一方面是因为所给数据较少,另一方面也是主要方面在Win32中C++中数据类型double精度只有7位,计算机在进行浮点运算时截断运算会导致误差。
实际问题中,测量
数据也可能导致误差。
4、在解决实际问题中,更多是利用精确且高效的计算机求解。
所以解决问题时不仅要构造可求解的算法,更重要是构造合理的可以编写成程序由计算机求解的算法,而算法的优化不仅可以节省时间空间,更能得到更为精确有价值的结果。
实验报告评分标准
评分项目
满分
得分
实验步骤及程序
10
运行结果
5
结果分析与讨论
合计
20
【本文档内容可以自由复制内容或自由编辑修改内容期待
你的好评和关注,我们将会做得更好】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lagrange Newton