回 帖 发 新 帖 刷新版面

主题:[原创]大虾们救救我!!!!!

为什么运行的时候总出现floating point error:domain
各位大虾帮帮忙 帮帮忙各位大虾
#include<stdio.h>
#include<math.h>
#define n 2
main()
{
    int k,j;
    float sum=0,z,x[n],y[n],p=1.0,q=1.0,r,L;
    scanf("%f",&z);
    for(k=0;k<=n;k++)
    p=p*(z-x[k]);
    scanf("%f,%f",&x[k],&y[k]);
    for(k=0;k<=n;k++)
    {
        for(j=0;j<=n;j++)
        {
        while(j!=k)
            {
                q=q*(x[k]-x[j]);
            }
        r=p/(q*(z-x[k]));
        sum=sum+y[k]*r;
        }
    L=sum;
    printf("%.6f",L);
    }    
}

回复列表 (共6个回复)

沙发

首先,scanf("%.4f",&z);
scanf一般不指定输入的小数位数吧……
其次,把n定义成2的话,所有的n都会被替换掉的……包括一些不该替换掉的n也会被替换掉

板凳

除了看到上面说的语法错误外,其余真是一头雾水,难道给出源代码外就不能再给点注释吗?
好吧,我承认还未高手到光看源码就看出所以然的地步。

3 楼

首先,非常感谢你的帮助,这个程序是用拉格朗日插值多项式求一个插值点近似值的C程序其中r为插值基函数,sum是插值多项式,其中p=(x-x0)(x-x1)...(x-xn),q=(xk-x0)...(xk-x(k-1))(xk-x(k+1))(xk-xn),r=yk*p/((x-xk)*q),为什么用while语句说明了j!=k还是会出现除数为0的情况呢。

4 楼

谢谢你提出的问题,由于我是第一次发帖请教没有经验,所以做得不好。
这是一个数值分析中拉格朗日插值求近似值的函数。。。。
#include<stdio.h>
#include<math.h>
#define n 2
main()
{
    int k,j;
    float sum=0,z,x[n],y[n],p=1.0,q=1.0,r,L;
    scanf("%f",&z);
    for(k=0;k<=n;k++)
    p=p*(z-x[k]);  /*想得到表达式(x-x0)(x-x1)...(x-xn)*/
    scanf("%f,%f",&x[k],&y[k]);
    for(k=0;k<=n;k++)
    {
        for(j=0;j<=n;j++)
        {
        while(j!=k)
            {
                q=q*(x[k]-x[j]);   /*得到表达式(xk-x0)...(xk-x(k-1))(xk-x(k+1))...(xk-xn)*/
            }
        r=p/(q*(z-x[k]));  /*插值基函数*/
        sum=sum+y[k]*r;    /*插值多项式*/
        }
    L=sum;
    printf("%.6f",L);
    }    
为什么说明了j!=k,还会出现除数q为0的情况啊麻烦你再帮我看看问题出在哪,另外定义数组n的值应该怎么改啊。

5 楼

首先你“想得到表达式XXX”的时候,x[n]还没有初始化过,为什么就拿来计算了

6 楼

其余真是一头雾水

我来回复

您尚未登录,请登录后再回复。点此登录或注册