• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: c.cpp  

资源简介

计算方法--拉格朗日插值法与线性插值法等方法的c语言代码,附加注释

资源截图

代码片段和文件信息

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include

//拉格朗日插值法计算x处估计值
double lagrange(int ndouble *pxdouble *pydouble x)
{
int ij;
double fn=0.0k;
for(i=0;i<=n;i++)
{
k=1.0;
for(j=0;j<=n;j++)
{
if(j!=i)
k=k*(x-px[j])/(px[i]-px[j]);
else
k=k;

}
fn=fn+py[i]*k;
}
return fn;
}

//分段线性插值
double linear(int ndouble *pxdouble *pydouble x)
{
int i;
double ans=0.0;
for(i=0;i {
if(x>=px[i]&&x<=px[i+1])//判断x的位置
ans=py[i]*(x-px[i+1])/(px[i]-px[i+1])+py[i+1]*(x-px[i])/(px[i+1]-px[i]);//通过x左右节点值估计x处函数值
}
return ans;
}
//三样条插值法
double spline(int ndouble *pxdouble *pydouble x)
{
int i;
double *m*a*bans=0;
m=(double*)malloc(sizeof(double)*(n+10));
a=(double*)malloc(sizeof(double)*(n+10));
b=(double*)malloc(sizeof(double)*(n+10));
m[0]=-2.0;
m[n]=-2.0*exp(-12.0);
a[0]=0;b[0]=0;
for(i=1;i {
a[i]=-0.5/(2.0+0.5*a[i-1]);
b[i]=(n/4.0*(py[i+1]-py[i-1])-0.5*b[i-1])/(2+0.5*a[i-1]);

}
for(i=n-1;i>=0;i--)
{
m[i]=a[i]*m[i+1]+b[i];
}
for(i=0;i {
if(x>px[i]&&x<=px[i+1])
{
ans=py[i]*(1+2*(x-px[i])/(px[i+1]-px[i]))*pow((x-px[i+1])/(px[i]-px[i+1])2)
            +py[i+1]*(1+2*(x-px[i+1])/(px[i]-px[i+1]))*pow((x-px[i])/(px[i+1]-px[i])2)
            +m[i]*(x-px[i])*pow((x-px[i+1])/(px[i]-px[i+1])2)
            +m[i+1]*(x-px[i+1])*pow((x-px[i])/(px[i+1]-px[i])2);
}
}
return ans;
}
//计算差值最大误差
double maxerror(

评论

共有 条评论