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

更新时间:2023-05-21 17:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数值分析,拉格朗日插值法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

程序流程图:

数值分析,拉格朗日插值法C语言的实现

程序如下:

#include <iostream>

#include <conio.h>

#include <malloc.h>

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];

}

free(a);

return yy;

}

int main()

{

int i;

int n;

float x[20],y[20],xx,yy;

printf("Input n:");

scanf("%d",&n);

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++)

{

数值分析,拉格朗日插值法C语言的实现

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

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

}

printf("\n");

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

{

printf("y[%d]:",i);scanf("%f",&y[i]); }

printf("\n");

printf("Input xx:");

scanf("%f",&xx);

yy=lagrange(x,y,xx,n);

printf("x=%f,y=%f\n",xx,yy);

getch();

}

举例如下:

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

本文来源:https://www.bwwdw.com/article/ntm4.html

Top