main.c

来自「Lagrange插值算法」· C语言 代码 · 共 68 行

C
68
字号
/*
 * Created on 2005-2-26	by 可冰(k.b)
 *
 * 此算法实现了Lagrange插值.
 * 
 */
 
/**
 * @author k.b
 * 
 * TODO 2005-2-26:
 * 		不过现在还没有实现截断误差的分析
 * 		还可以添加一些功能,如给定一组值后算出所有可能组合的值(有一定
 * 	上限),并可根据截断误差的比较可得出最好的一组数据.
 */


#include <stdio.h>
#include <stdlib.h>


//求Lagrange插值:
//输入: ( x[i], y[i] ) 已知的n+1组值; n 多项式次数; x 将求的自变量
//输出: y 求得的函数值
void Lagrange( double* xi, double* yi, const int n,
				double x, double* y )
{
	int i, j;
		
	double tmp = 1.0;	//连乘积
	*y = 0.0;
		
	for( i = 0; i < n+1; i++ )
	{
		for( j = 0, tmp = 1.0; j < n+1; j++ )
		{
			//跳过x[i] - x[i]
			if( j == i ) continue;
			tmp *= ( x - xi[j] ) / ( xi[i] - xi[j] );
		}
		
		*y += tmp * yi[i];
	}
}
//end Lagrange


//初始值:
const int n = 2;	//多项式次数
double xi[] = { 0.5, 0.6, 0.7 };
double yi[] = { 0.47943, 0.56464, 0.64422 };

double x = 0.57891;

//结果值:
double y = 0.0;


int main()
{
	Lagrange( xi, yi, n, x, &y );
	
	printf( "%f", y );
	
	system( "Pause" );
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?