📄 main.c
字号:
/*
* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -