标题:验证一次正确,验证二次不正确,请版主指点
只看楼主
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
 问题点数:0 回复次数:4 
验证一次正确,验证二次不正确,请版主指点
#include
#define maxsize 100
int main(void)
{
    double x[maxsize],y[maxsize],aa,sum,p,a,b;
    int i,k,n;

    printf("please input a and b:\n");
    scanf("%lf %lf",&a,&b);

    printf("please input aa=\n");
    scanf("%lf",&aa);

    printf("please input n=\n");
    scanf("%d",&n);

    printf("please input x[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("x[%d]=",k);
        scanf("%lf",&x[k]);
    }

    printf("please input y[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("y[%d]=",k);
        scanf("%lf",&y[k]);
    }

    if(x[0]b)
    {
        printf("输入错误,请重新输入!");
        return 0;
    }
    sum=0;               
    for(k=0;k<=n;k++)
    {
        p=1;
        for(i=0;i<=n;i++)
        {
            if(i!=k)
            {
                p=p*(aa-x[i])/(x[k]-x[i]);
                    sum+=p*y[k];
            }
        }
    }
    printf("sum=%lf\n",sum);
    return 0;
}
拉格朗日插值法     
x0=0   x1=1  x2=2  x3=3   x4=4
y0=1   y1=0.95   y2=0.82   y3=0.71   y4=0.43
sum(x)=((x-x1)/(x0-x1))*y0+((x-x0)/x1-x0))*y1
sum(1.5)=((1.5-2)/(1-2))*0.95+((1.5-1)/(2-1))*0.82=0.885

二次插值:
sum(x)=((x-x1)*(x-x2))/((x1-x1)*(x0-x2))*y0+((x-x0)*(x-x2))/((x1-x0)*(x1-x2))*y2+((x-x0)*(x-x1))/((x2-x0)*(x2-x1))*y2

sum(1.5)=((1.5-1)*(1.5-2))/((0-1)*(0-2))*1+((1.5-0)*(1.5-2))/((1-0)*(1-2))*0.95+((1.5-0)*(1.5-1))/((2-0)*(2-1))*0.82=0.895

问题:验证一次插值的时候得到了0.885跟计算的一样,可是验证二次插值的时候结果跟0.895不一样,那么我的问题又会出现在那里?



搜索更多相关主题的帖子: include please 
2012-11-03 15:52
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
得分:0 
怎么没人给我解答的

菜鸟也疯狂
2012-11-04 18:22
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:0 
你这个程序有错误吧。
if(x[0]b)



编程之路定要走完……
2012-11-04 18:32
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:0 
你把数组初始化一下试试。

编程之路定要走完……
2012-11-04 18:33
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
得分:0 
#include
#define maxsize 100
int main(void)
{
    double x[maxsize],y[maxsize],aa,sum,p,a,b;
    int i,k,n;

    printf("please input a and b:\n");
    scanf("%lf %lf",&a,&b);

    printf("please input aa=\n");
    scanf("%lf",&aa);

    printf("please input n=\n");
    scanf("%d",&n);

    printf("please input x[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("x[%d]=",k);
        scanf("%lf",&x[k]);
    }

    printf("please input y[k]=\n");
    for(k=0;k<=n;k++)
    {
        printf("y[%d]=",k);
        scanf("%lf",&y[k]);
    }

    if(x[0]<a||x[n]>b)
    {
        printf("输入错误,请重新输入!");
        return 0;
    }
    sum=0;               
    for(k=0;k<=n;k++)
    {
        p=1;
        for(i=0;i<=n;i++)
        {
            if(i!=k)
            {
                p=p*(aa-x[i])/(x[k]-x[i]);
                    sum+=p*y[k];
            }
        }
    }
    printf("sum=%lf\n",sum);
    return 0;
}
拉格朗日插值法     
x0=0   x1=1  x2=2  x3=3   x4=4
y0=1   y1=0.95   y2=0.82   y3=0.71   y4=0.43
sum(x)=((x-x1)/(x0-x1))*y0+((x-x0)/x1-x0))*y1
sum(1.5)=((1.5-2)/(1-2))*0.95+((1.5-1)/(2-1))*0.82=0.885

二次插值:
sum(x)=((x-x1)*(x-x2))/((x1-x1)*(x0-x2))*y0+((x-x0)*(x-x2))/((x1-x0)*(x1-x2))*y2+((x-x0)*(x-x1))/((x2-x0)*(x2-x1))*y2

sum(1.5)=((1.5-1)*(1.5-2))/((0-1)*(0-2))*1+((1.5-0)*(1.5-2))/((1-0)*(1-2))*0.95+((1.5-0)*(1.5-1))/((2-0)*(2-1))*0.82=0.895

问题:验证一次插值的时候得到了0.885跟计算的一样,可是验证二次插值的时候结果跟0.895不一样,那么我的问题又会出现在那里?

菜鸟也疯狂
2012-11-04 19:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-385776-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.895095 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved