回 帖 发 新 帖 刷新版面

主题:拉格朗日插值函数的c++代码

#include<iostream>
#define N 4
using namespace std;
float upper(float ,int,float *);
float under(int,float *);
int main()
{
    int i;
    float a[N],b[N],l[N],L=0.0,u;
    cout<<"Please input a,b"<<endl;
    for(i=0;i<=N;i++)
        cin>>a[i];
    for(i=0;i<=N;i++)
        cin>>b[i];
    cout<<"Please input x"<<endl;
    cin>>u;
    for(i=0;i<=N;i++)
        l[i]=upper(u,i,a)/under(i,a);
    for(i=0;i<=N;i++)
        L+=l[i];
    cout<<"x:";
    for(i=0;i<=N;i++)
        cout<<"   "<<a[i];
    cout<<endl;
    cout<<"y:";
    for(i=0;i<=N;i++)
        cout<<"   "<<b[i];
    cout<<endl;
    cout<<"L("<<u<<")="<<L;
    return 0;
}
float upper(float x,int i,float *a)
{
    float z=1.0;
    int k;
    for(k=0;k<i;k++)
        z*=(x-*(a+k));
    k=i+1;
    for(k=i+1;k<=N;k++)
        z*=(x-*(a+k));
    return z;
}
float under(int i,float *a)
{
    float z=1.0;
    int k;
    for(k=0;k<i;k++)
        z*=(*(a+i)-*(a+k));
    k=i+1;
    for(k=i+1;k<=N;k++)
        z*=(*(a+i)-*(a+k));
    return z;
}
这是我写的拉格朗日插值函数的代码。输入一组x,y和所要求的x值,可以求出在拉格朗日插值函数中的近似值。
但是执行的时候,总是发现在输出那组计算的数时总是出错
cout<<"x:";
for(i=0;i<=N;i++)
    cout<<"   "<<a[i];
cout<<endl;
cout<<"y:";
for(i=0;i<=N;i++)
    cout<<"   "<<b[i];
cout<<endl;
而且貌似估计出的近似值也不对。
就算近似值不对是我的算法有问题,但输出x,y我总不见得会错吧。希望有高手能帮我找到我代码中的BUG.谢谢了

回复列表 (共3个回复)

沙发

没看算法,单说循环就有问题,终值不能=N,a[N]的数组里最大下标是N-1

板凳


谢谢,我居然连这么低级的错误都没有找出来。而且,经过修改,这段代码已经可以运算拉格朗日插值函数了。

3 楼

[quote]没看算法,单说循环就有问题,终值不能=N,a[N]的数组里最大下标是N-1[/quote]

绝对不是人眼。
   ---鉴定完毕

我来回复

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