主题:[原创]大虾们救救我!!!!!
talenthz
[专家分:0] 发布于 2010-05-28 16:18:00
为什么运行的时候总出现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);
}
}
最后更新于:2010-05-31 14:29:00
回复列表 (共6个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-05-28 16:49:00
首先,scanf("%.4f",&z);
scanf一般不指定输入的小数位数吧……
其次,把n定义成2的话,所有的n都会被替换掉的……包括一些不该替换掉的n也会被替换掉
板凳
perpanish [专家分:120] 发布于 2010-05-28 18:24:00
除了看到上面说的语法错误外,其余真是一头雾水,难道给出源代码外就不能再给点注释吗?
好吧,我承认还未高手到光看源码就看出所以然的地步。
3 楼
talenthz [专家分:0] 发布于 2010-05-30 16:56:00
首先,非常感谢你的帮助,这个程序是用拉格朗日插值多项式求一个插值点近似值的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 楼
talenthz [专家分:0] 发布于 2010-05-30 17:05:00
谢谢你提出的问题,由于我是第一次发帖请教没有经验,所以做得不好。
这是一个数值分析中拉格朗日插值求近似值的函数。。。。
#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 楼
雪光风剑 [专家分:27190] 发布于 2010-05-31 07:27:00
首先你“想得到表达式XXX”的时候,x[n]还没有初始化过,为什么就拿来计算了
6 楼
起名叫忸怩 [专家分:0] 发布于 2010-06-05 08:00:00
其余真是一头雾水
我来回复