插值法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二插值法

1、实验目的:

1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。

2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。

2、实验要求:

1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;

2)编写上机实验程序,作好上机前的准备工作;

3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);

4)分析和解释计算结果;

5)按照要求书写实验报告;

3、实验内容:

1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。

已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。

2) 求满足插值条件的插值多项式及余项

1)

4、题目:插值法

5、原理:

拉格郎日插值原理:

n次拉格朗日插值多项式为:L

n (x)=y

l

(x)+y

1

l

1

(x)+y

2

l

2

(x)+…+y

n

l

n

(x)

n=1时,称为线性插值,

L 1(x)=y

(x-x

1

)/(x

-x

1

)+y

1

(x-x

)/(x

1

-x

)=y

+(y

1

-x

)(x-x

)/(x

1

-x

)

n=2时,称为二次插值或抛物线插值,

L 2(x)=y

(x-x

1

)(x-x

2

)/(x

-x

1

)/(x

-x

2

)+y

1

(x-x

)(x-x

2

)/(x

1

-x

)/(x

1

-x

2

)+y

2

(x

-x

0)(x-x

1

)/(x

2

-x

)/(x

2

-x

1

)

n=i时,

Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)

(X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)

6、设计思想:

拉格朗日插值法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)的函数值f (x0), f (x1) , ... , f (x n)推出n次多項式p(x),然后n次多項式p (x)求出任意的点x对应的函数值f (x)的算法。

7、对应程序:

1 ) 三次拉格朗日插值多项式求x=0.5635时函数近似值

#include"stdio.h"

#define n 5

void main()

{

int i,j;

float x[n],y[n];

float x1;

float a=1;

float b=1;

float lx=0;

printf("\n请输入想要求解的X:\n x=");

scanf("%f",&x1);

printf("请输入所有点的横纵坐标:\n");

for(i=1;i

{

printf("x[%d]=",i);

scanf("%f",&x[i]);

printf("y[%d]=",i);

scanf("%f",&y[i]);

}

for(i=0;i

{

for(j=0;j

{

if(j!=i)

{

b=b*(x1-x[j]);

a=a*(x[i]-x[j]);

}

}

lx=lx+b*y[i]/a;

a=b=1;

}

printf("\n求得的解是l(%f)=%f",x1,lx);

}

2 ) 满足插值条件的插值多项式及余项

#include

#define m 0

#define n 1

float L0(float a,float x1,float x0)

{

return (a-x1)/(x0-x1);

}

float L1(float a,float x1,float x0)

{

return (a-x0)/(x1-x0);

}

float H(float x0,float x1,float y0,float y1,float m0,float m1,float a) {

float b;

b=y0*(1-2*(a-x0)/(x0-x1))*L0(a,x1,x0)*L0(a,x1,x0)+y1*(1-2*(a-x1)/ (x1-x0))*L1(a,x1,x0)*L1(a,x1,x0)+m0*(a-x0)*L0(a,x1,x0)*L0(a,x1,x0)+m1 *(a-x1)*L1(a,x1,x0)*L1(a,x1,x0);

return b;

}

void main()

{

float x0=1,x1=2,y0=2,y1=3,m0=0,n1=-1,a1=1.5,a2=1.7;

float k1,k2;

printf("input a1: \n");

printf(" %f\n",a1);

k1=H(x0,x1,y0,y1,m0,n1,a1);

printf("%f的函数值为:%f\n\n\n",a1,k1);

printf("input a2: \n");

相关文档
最新文档