搜索
您的当前位置:首页正文

(完整word版)拉格朗日插值法C语言的实现

来源:爱够旅游网
(完整word版)拉格朗日插值法C语言的实现

实验 一 .拉格朗日插值法C语言的实现

1.实验目的:

进一步熟悉拉格朗日插值法。

掌握编程语言字符处理程序的设计和调试技术。

2.实验要求:

已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标 。

输出:根据给定的点求出其对应的拉格朗日插值多项式的值 。

3.程序流程:

(1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标;

(4)通过调用函数lagrange函数,来求某点所对应的函数值。

拉格朗日插值多项式如下:

Ln(xj)yklk(xj)yjj0,1,……n

k0n其中lk(x)

(xx0)……(x-xk-1)(x-xk+1)?…(x-xn)(xkx0)……(xk-xk-1)(xk-xk+1)?…(xk-xn)k0,1,……,n

程序流程图:

开始 ↓

输入已知点个数n ↓ 输入已知点的X坐标以及输Y坐标 入已知点的 (完整word版)拉格朗日插值法C语言的实现

↓ 调用函数lagrange函数

输出结果 程序如下:

#include #include #include

float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/ {

int i,j;

float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) {

a[i]=y[i];

for(j=0;j<=n-1;j++)

if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; }

(完整word版)拉格朗日插值法C语言的实现

free(a);

return yy;

}

int main() { int i; int n;

float x[20],y[20],xx,yy; printf(\"Input n:\"); scanf(\"%d\ if(n>=20) {

printf(\"Error!The value of n must in (0,20).\"); getch();return 1; } if(n<=0) {

printf(\"Error! The value of n must in (0,20).\"); getch(); return 1; }

for(i=0;i<=n-1;i++) {

printf(\"x[%d]:\ scanf(\"%f\ }

printf(\"\\n\");

(完整word版)拉格朗日插值法C语言的实现

for(i=0;i<=n-1;i++) {

printf(\"y[%d]:\ }

printf(\"\\n\"); printf(\"Input xx:\"); scanf(\"%f\ yy=lagrange(x,y,xx,n); printf(\"x=%f,y=%f\\n\ getch(); }

举例如下:

已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。 运行结果如下:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top