数值分析是一门十分有用的课程,趁着假期,有幸来整理一下.PS:强烈推荐简聪海老师的那本数值分析,个人认为是十分受用的
拉格朗日插值,计算f(x)=1/(1+x²)的插值
代码
#include<stdio.h> //拉格朗日插值
int main()
{
int i,j,a,b,n;
double xa,h,x[100],f[100],ff=0,s;
printf("n="); scanf("%d",&n);
printf("左端点:"); scanf("%d",&a);
printf("右端点:"); scanf("%d",&b);
printf("预测点xa="); scanf("%lf",&xa);
h=(b-a)/n;
x[0]=a;x[n]=b;
for(i=1;i<n;i++)
x[i]=x[i-1]+h;
for(j=0;j<=n;j++)
f[j]=1/(1+x[j]*x[j]);
f[n+1]=1/(1+xa*xa);
for(i=0;i<=n;i++)
{
s=1;
for(j=0;j<=n;j++)
{
if(i!=j)
s=s*(xa-x[j])/(x[i]-x[j]);
}
ff=ff+s*f[i];
}
printf("The p(%lf)=%.8lf\n",xa,ff);
printf("The f(%lf)=%.8lf\n",xa,f[n+1]);
printf("误差=%.8lf",f[n+1]-ff);
return 0;
}
效果图