p.s 文末附试验测试工程下载链接
拉格朗日插值法(封装函数)
函数接口
double LagrangeInterPol(double arrX[],double arrY[], int n, double x)
其中arrX和arrY表示待插值数据点,n表示数据点个数,x表示待求点,return返回所求点的值。
实现代码
#include "LagrangeInterPol.h"
#include "vetMtxBase.h"
double LagrangeInterPol(double arrX[], double arrY[], int n, double x)
{
double yResult = 0.0;
double *LValue = newVector(n); //LValue[n]存放的是每次求解的插值基函数的在x处的值
int k, m; //循环上下标变量k,m
double temp1, temp2; //插值基函数中的上下累乘temp1,temp2
//计算各基函数的值
for (k = 0; k < n; k++)
{
temp1=1.0;
temp2=1.0;
for(m=0;m<n;m++)
{
if(m==k)
continue;
temp1*=(x-arrX[m]);
temp2*=(arrX[k]-arrX[m]);
}
LValue[k]=temp1/temp2;
}
//基函数值与y各元素相乘再求和
for (int i = 0; i < n; i++)
{
yResult+=arrY[i]*LValue[i];
}
deleteVector(LValue);
return yResult;
}
牛顿插值法(封装函数)
函数接口
double NewtonInterPol(double arrX[], double arrY[], int n, double x)
其中arrX和arrY表示待插值数据点,n表示数据点个数,x表示待求点,return返回所求点的值。
实现代码
#include "NewtonInterPol.h"
#include "vetMtxBase.h"
double NewtonInterPol(double arrX[], double arrY