- 论坛徽章:
- 0
|
已知函数f(x)在如下点的函数值,求其插值多项式的代数表达式:
f(0.40244 =11.696911,
f(0.513871)=14.314712,
f(0.135929)=7.591531,
f(0.835719)=31.572442,
f(0.233406)=8.844833,
f(0.465011)=13.068839,
f(0.249397)=9.073717,
f(0.698263)=21.378525,
f(0.726432)=22.984531,
这是我写的程序:
#include <math.h>
#include <stdio.h>
#define N 9
double x[N]={0.135929,0.233406,0.249397,0.402448,0.465011,0.513871,0.698263,0.726432,0.835719};
double fx[N]={7.591531,8.844833,9.073717,11.696911,13.068839,14.314712,21.378525,22.984531,31.572442};
double f[N][N],fn[N],a[N][N];
void jc()
{
int i,j;
for (i=0;i<N;i++)
{
f[i][0]=fx[i];
for (j=1;j<=i;j++)
f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]);
}
}
void xishu()
{
int i,j,m,n;
for(n=0;n<N-1;n++)
{
a[n][0]=-x[0];
a[n][1]=1;
for(m=1;m<=n;m++)
{
a[n][m+1]=a[n][m];
for(i=m;i>0;i--)
a[n][i]=a[n][i-1]-a[n][i]*x[m];
a[n][0]=-x[m]*a[n][0];
}
}
fn[0]=fx[0];
for(j=0;j<N;j++)
{
for(i=0;i<N-1;i++)
fn[j]+=(f[i+1][i+1]*a[i][j]);
}
}
void main()
{
int i,j;
double s;
jc();
xishu();
for(j=N-1;j>0;j--)
printf("(%f)*X^%d+",fn[j],j);
printf("(%f)\n",fn[0]);
}
结果正确,但有人说执行效率不高,具体的就是不带均差系数的那部分程序执行效率不高,
请明白的高手们指点一下小弟,谢谢!!!
是牛顿插值多项式 |
|