计算机数值方法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011级4班雷小慧(2011060115)计算机数值方法
实验报告成绩册
姓名:雷小慧
学号:201106115
成绩:
数值计算方法与算法实验报告
学期:2012 至2013_ 第 2 学期时间:2013年 5月22日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号: 1 实验项目:lagrange插值多项式指导教师_孙峪怀姓名:雷小慧学号: 2011060115 实验成绩:
一、实验目的及要求
实验目的:
体会使用Lagrange插值基函数构造插值多项式的特点,熟悉使用一次或二次Lagrange插值多项式近似函数y=f(x)的算法。掌握Lagrange插值多项式近似函数f(x)的误差表达式,并会熟练应用。
实验要求:
1. 给出一次、二次Lagrange插值算法
2. 用C语言实现算法
二、实验内容
用下列插值节点数据,构造一次和二次Lagrange插值多项式,并计算f(11.5),f(12.5)
三、实验步骤(该部分不够填写.请填写附页)
1.算法分析:
下面用伪码描述Lagrange插值多项式的算法:
Step1 输入:插值节点控制数n,插值点序列(xi,yi),i=0,1,……n,,要计算的函数点x.
Step2 for i=0to n /*控制Lagrange基函数序列*/
{{
for j=0 to n
/*对于给定x,计算Lagrange函数li(x)=∏
≠
≤
≤
-
-
i
j
n
j
xj
xi
xj
x
))
/(
)
((
*/
if(j<>i) li(x)=li(x)*(x-xj)/(xi-xj); }
Ln(x)=Ln(x)+li(x)*yi/*计算Ln(x)=∑
=
n
i
yi
x
li
)
(
*/
}
2.用C语言实现算法的程序代码
#include
#define MAX_N 20 /*定义点的最大个数为20*/
typedef struct tagPOINT /*对点的结构化定义,一个点包括x和y*/ {
double x;
double y;
}POINT;
int main(void)
{
int n; /*n表示输入的点的个数,大于0小于20*/
int i,j,k;
POINT points[MAX_N+1];
double x,temp,Lagrange=0;
clrscr();
printf("\nPlease input n value:");
scanf("%d",&n);
if(n>MAX_N)
{
printf("The input n is larger than MAX_N,please redfine the MAX_N.\n");
return 1;
}
if(n<=0)
{
printf("Please input a number between 1 and %d.\n",MAX_N);
return 1;
}
printf("Now input the (x_i,y_i),i=0,...,%d:\n",n);/*输入每个点的x和y*/ for(i=0;i { scanf("%lf,%lf",&points[i].x,&points[i].y); } printf("Now input the x value:");/*输入要求的x值*/ scanf("%lf",&x); for(k=0;k { temp=1; for(j=0;j { if(k!=j) { temp=temp*(x-points[j].x)/(points[k].x-points[j].x); } } Lagrange=Lagrange+temp*points[k].y; } printf("Lagrange(%lf)=%lf\n",x,Lagrange);/*输出结果*/ return 0; } 3.在TC环境中运行如下: 4.运行结果: F(11.5)的结果是: F(12.5)的结果是: 数值计算方法与算法实验报告 学期:2012 至2013_ 第 2 学期时间:2013年 5月22日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号: 2 实验项目:Newton插值多项式指导教师__孙峪怀姓名:雷小慧学号: 2011060115 实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 1. 用下列插值节点数据,构造Newton插值多项式,并计算N2(0.9),N3(0.9)的 2. 用下列插值节点数据,构造一个三次Newton插值多项式,并计算f(1.2)的值。 1.算法分析: 下面用伪码描述Lagrange插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)/(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp/*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)*/ Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 5.用C语言实现算法的程序代码 #include #define MAX_N 20 /*点的最大个数为20*/ typedef struct tagPOINT /*结构化定义点包括x和y*/