資源簡介
計算方法--拉格朗日插值法與線性插值法等方法的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(
- 上一篇:用C語言實現稀疏矩陣的三元組轉置
- 下一篇:50道c++編程練習題只有題目
評論
共有 條評論