实验 一 .拉格朗日插值法C语言的实现
1.实验目的:
进一步熟悉拉格朗日插值法。
掌握编程语言字符处理程序的设计和调试技术。
2.实验要求:
已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标 。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值 。
3.程序流程:
(1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标;
(4)通过调用函数lagrange函数,来求某点所对应的函数值。
拉格朗日插值多项式如下:
Ln(xj)yklk(xj)yjj0,1,……n
k0n其中lk(x)
(xx0)……(x-xk-1)(x-xk+1)?…(x-xn)(xkx0)……(xk-xk-1)(xk-xk+1)?…(xk-xn)k0,1,……,n
程序流程图:
开始 ↓
输入已知点个数n ↓ 输入已知点的X坐标以及输Y坐标 入已知点的 (完整word版)拉格朗日插值法C语言的实现
↓ 调用函数lagrange函数
↓
输出结果 程序如下:
#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)的值。 运行结果如下: 因篇幅问题不能全部显示,请点此查看更多更全内容