Neville算法

Neville算法在数值分析计算某一点的插值时,还是很不错的。

#include <stdio.h>
#include <math.h>
#include <string.h>
void main()
{  
    double x=2;
    double x0[]={0,1,3};
    double y0[]={1,3,2};
    int i,j,n;
    double dx[3],d[3][3],p1[3],p2[1];
    n=sizeof(x0);
    for(i=0;i<=2;i++)
        for(j=0;j<=2;j++)
            d[i][j]=x0[i]-x0[j];
        for(i=0;i<=2;i++)
        dx[i]=x-x0[i];
    for(i=0;i<=1;i++)
        p1[i]=(dx[i]*y0[i+1]-dx[i+1]*y0[i])/d[i][i-1];
    p2[0]=(dx[0]*p1[1]-dx[2]*p1[0])/d[2][0];
    printf("由所给点所得到的%d次插值多项式在x=%lf处函数值为\n%lf\n",n/sizeof(double)-1,x,p2[0]);
    }
/*这是老师要求的Neville's的代码,供信二兄弟姐妹参考。时间有限,随手编写,有极大的普遍化改进空间。希望有心人多去琢磨*/

另附上计算班上有同学生日在同一天概率的代码。主要体会较小数做分母带来的较大舍入误差和优良的计算顺序带来的减小误差和加大计算速度上的便利。

#include <stdio.h>
void main()
{double s=1;
int i,n=60;
    for(i=365;i>=365-n+1;i--)
    {
        s=s*i/365;
    }
printf("一个数量为%d人的班级里,至少有两个人在同一天生日的概率为%lf\n",n,1-s);
}


你可能感兴趣的:(算法)