数值分析上机实验报告.docx
- 文档编号:30233028
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:21
- 大小:127.09KB
数值分析上机实验报告.docx
《数值分析上机实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析上机实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
数值分析上机实验报告
数值分析上机实验报告
班级:
材料工程
学号:
2013730069
姓名:
张明杰
日期:
2013.12.31
昆明理工大学
13工科硕士《数值分析》上机实验报告
专业:
材料工程姓名:
张明杰学号:
2013730069
任课教师:
李玉兰作业完成实验室:
实验成绩:
理论描述(10)
数值公式(10)
程序流程图和程序结构(20)
数据和结果(20)
讨论(20)
源程序(20)
总分(100)
实验内容:
1.题目/要求:
1、利用Lagrange插值公式
编写出插值多项式程序;
2、给出插值多项式或分段三次插值多项式的表达式;
3、根据节点选取原则,对问题
(2)用三点插值或二点插值,其结果如何;
对此插值问题用Newton插值多项式其结果如何
2.作业环境(包括选用的程序语言、运行环境)
VisualC++6.0
3.数学(理论背景)描述
1.Lagrange插值多项式定义:
若n次多项式
:
当
其中
,就称这
个次多项式
为节点
上的
次插值基函数。
插值多项式可
表示为:
,称为Lagrange插值多项式。
2.分段线形插值就是通过插值点用折线段连接起来逼近
设已知节点
上的函数值
,记
求一折线函数
满足:
4.数值计算公式
Lagrange插值多项式
;
分段线形插函数,在每个小区间
上可表示为:
(
)
在整个区间
上为:
其中基函数
,其形式是:
5.算法程序流程图
Lagrange插值算法程序流程图
分段低次插值算法程序流程图
6.程序结构(程序中的函数调用关系图
6.实验数据和实验结果(打印或用屏幕图形拷屏表示,可加为附页)
(1)
0.4
0.55
0.65
0.80
0.95
1.05
0.41075
0.57815
0.69675
0.90
1.00
1.25382
Lagrange插值算法
分段低次插值算法
(2)
1
2
3
4
5
6
7
0.368
0.135
0.050
0.018
0.007
0.002
0.001
Lagrange插值算法
分段低次插值算法
7.讨论(包括题目要求的讨论和方法的适用性讨论)
对于插值多项式L
(x),当
时,L
(x)不一定收敛到f(x),此时需用分段线性插值比L
(x)逼近f(x)好得多,题
(2)就是一例。
计算
时,用分段线性插值算法的结果比用Lagrange插值算法的结果更接近题目所给数据0.00213348。
另一种情况,当用拉格郎日插值多项式L
(x)计算函数近似值,如精度不满足要求需增加插值节点,原来算出的数据均不能利用时,可用埃特金逐次线形插值算法。
牛顿插值多项式较Lagrange插值多项式更有一般性,它对
是由离散点给出的情形或
导数不存在时均适用。
且比Lagrange值计算量省,且便于程序设计。
8.附—源程序(打包邮件)
题一
(Ⅰ)Lagrange插值算法源程序
#include
#include
#include
doubleLAG(intn,doublet,double*x,double*y)
{inti,j;
doublep,s;
s=0;
for(i=0;i<=n-1;i++)//外循环,累和
{
p=1;
for(j=0;j<=n-1;j++)//内循环,累积
{
if(i!
=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句
}
s+=p*y[i];
}
return(s);
}
doubleLAG(intn,doublet,double*x,double*y);
voidmain()
{
intn;
double*x,*y,t;
n=6;
t=0.99;//或t=0.596
x=(double*)calloc(n,sizeof(double));
if(x==NULL)
printf("error");
y=(double*)calloc(n,sizeof(double));
if(y==NULL)
printf("error");
x[0]=0.4;
x[1]=0.55;
x[2]=0.65;
x[3]=0.80;
x[4]=0.95;
x[5]=1.05;
y[0]=0.41075;
y[1]=0.57815;
y[2]=0.69675;
y[3]=0.90;
y[4]=1.00;
y[5]=1.25382;
printf("%10.8f\n",LAG(n,t,x,y));
free(x);
free(y);
}
(Ⅱ)分段低次插值算法程序
#include
#include
#include
doubleLAG(intn,doublet,double*x,double*y)
{inti,j;
doublep,s;
s=0;
for(i=0;i<=n-1;i++)//外循环,累和
{
p=1;
for(j=0;j<=n-1;j++)//内循环,累积
{
if(i!
=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句
}
s+=p*y[i];
}
return(s);
}
doubleLAG(intn,doublet,double*x,double*y);
voidmain()
{
intn;
double*x,*y,t;
n=6;
t=0.99;//或t=0.596
x=(double*)calloc(n,sizeof(double));
if(x==NULL)
printf("error");
y=(double*)calloc(n,sizeof(double));
if(y==NULL)
printf("error");
x[0]=0.4;
x[1]=0.55;
x[2]=0.65;
x[3]=0.80;
x[4]=0.95;
x[5]=1.05;
y[0]=0.41075;
y[1]=0.57815;
y[2]=0.69675;
y[3]=0.90;
y[4]=1.00;
y[5]=1.25382;
printf("%10.8f\n",LAG(n,t,x,y));
free(x);
free(y);
}
题二
(Ⅰ)Lagrange插值算法源程序
#include
#include
doubleLAG(intn,doublet,double*x,double*y)
{
intk,i;
doublep,s;
s=0;
for(k=0;k<=n-1;k++)//外循环,累和
{
p=1;
for(i=0;i<=n-1;i++)//内循环,累积
{
if(i!
=k)p*=(t-x[i])/(x[k]-x[i]);//循环语句
}
s+=(p*y[k]);
}
return(s);
}
doubleLAG(intn,doublet,double*x,double*y);
voidmain()
{
intn;
double*x,*y,t;
n=7;
t=1.8;//或t=6.15
x=(double*)calloc(n,sizeof(double));
if(x==NULL)
printf("error");
y=(double*)calloc(n,sizeof(double));
if(y==NULL)
printf("error");
x[0]=1;
x[1]=2;
x[2]=3;
x[3]=4;
x[4]=5;
x[5]=6;
x[6]=7;
y[0]=0.368;
y[1]=0.135;
y[2]=0.050;
y[3]=0.018;
y[4]=0.007;
y[5]=0.002;
y[6]=0.001;
printf("%10.8f\n",LAG(n,t,x,y));
free(x);
free(y);
}
(Ⅱ)分段低次插值算法程序
#include
#include
doubleLIP(intn,doublet,double*x,double*y)
{
inti=0;
doubleu,f;
for(i=0;i { if(t>=x[i]&&t<=x[i+1]) { u=(t-x[i])/(x[i+1]-x[i]); f=y[i]+u*(y[i+1]-y[i]); } } return(f); } doubleLIP(intn,doublet,double*x,double*y); voidmain() { intn; double*x,*y,t; n=7; t=6.15;//或1.8 x=(double*)calloc(n,sizeof(double)); if(x==NULL) printf("error"); y=(double*)calloc(n,sizeof(double)); if(y==NULL) printf("error"); x[0]=1; x[1]=2; x[2]=3; x[3]=4; x[4]=5; x[5]=6; x[6]=7; y[0]=0.368; y[1]=0.135; y[2]=0.050; y[3]=0.018; y[4]=0.007; y[5]=0.002; y[6]=0.001; printf("%10.8f\n",LIP(n,t,x,y)); free(x); free(y); } #include #include #include doubleLAG(intn,doublet,double*x,double*y) {inti,j; doublep,s; s=0; for(i=0;i<=n-1;i++)//外循环,累和 { p=1; for(j=0;j<=n-1;j++)//内循环,累积 { if(i! =j)p*=(t-x[j])/(x[i]-x[j]);//循环语句 } s+=p*y[i]; } return(s); } doubleLAG(intn,doublet,double*x,double*y); voidmain() { intn; double*x,*y,t; n=6; t=0.99;//或t=0.596 x=(double*)calloc(n,sizeof(double)); if(x==NULL) printf("error"); y=(double*)calloc(n,sizeof(double)); if(y==NULL) printf("error"); x[0]=0.4; x[1]=0.55; x[2]=0.65; x[3]=0.80; x[4]=0.95; x[5]=1.05; y[0]=0.41075; y[1]=0.57815; y[2]=0.69675; y[3]=0.90; y[4]=1.00; y[5]=1.25382; printf("%10.8f\n",LAG(n,t,x,y)); free(x); free(y); } Lagrange插值算法源程序 #include #include #include doubleLAG(intn,doublet,double*x,double*y) {inti,j; doublep,s; s=0; for(i=0;i<=n-1;i++)//外循环,累和 { p=1; for(j=0;j<=n-1;j++)//内循环,累积 { if(i! =j)p*=(t-x[j])/(x[i]-x[j]);//循环语句 } s+=p*y[i]; } return(s); } doubleLAG(intn,doublet,double*x,double*y); voidmain() { intn; double*x,*y,t; n=6; t=0.99;//或t=0.596 x=(double*)calloc(n,sizeof(double)); if(x==NULL) printf("error"); y=(double*)calloc(n,sizeof(double)); if(y==NULL) printf("error"); x[0]=0.4; x[1]=0.55; x[2]=0.65; x[3]=0.80; x[4]=0.95; x[5]=1.05; y[0]=0.41075; y[1]=0.57815; y[2]=0.69675; y[3]=0.90; y[4]=1.00; y[5]=1.25382; printf("%10.8f\n",LAG(n,t,x,y)); free(x); free(y); } 分段低次插值算法程序 #include #include doubleLIP(intn,doublet,double*x,double*y) { inti=0; doubleu,f; for(i=0;i { if(t>=x[i]&&t<=x[i+1]) { u=(t-x[i])/(x[i+1]-x[i]); f=y[i]+u*(y[i+1]-y[i]); } } return(f); } doubleLIP(intn,doublet,double*x,double*y); voidmain() { intn; double*x,*y,t; n=6; t=0.596;//或t=0.99 x=(double*)calloc(n,sizeof(double)); if(x==NULL) printf("error"); y=(double*)calloc(n,sizeof(double)); if(y==NULL) printf("error"); x[0]=0.4; x[1]=0.55; x[2]=0.65; x[3]=0.80; x[4]=0.95; x[5]=1.05; y[0]=0.41075; y[1]=0.57815; y[2]=0.69675; y[3]=0.90; y[4]=1.00; y[5]=1.25382; printf("%10.8f\n",LIP(n,t,x,y)); free(x); free(y); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 上机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)