我只求一个x的值

#include<iostream>
#include<conio.h>
#include<iomanip>
#define N 10
using namespace std;
double lagrange(double a[],double b[],double x );
int main()
{int n;
double x;
double y;
double a[N];
double b[N];
cout<<"输入x0,y0的个数"<<endl;
cin>>n;
cout<<"输入x0的值"<<endl;
for(int i=0;i<=n-1;i++)
cin>>a[i];
cout<<"输入y0的值"<<endl;
for(int i=0;i<=n-1;i++)
cin>>b[i];

cout<<"输入x的值"<<endl;
cin>>x;

y=lagrange(a,b,x);
cout<<setprecision(3)<<y<<endl;

getch();}
double lagrange(double a[],double b[],double x)

{int n=sizeof a/sizeof a[0];

double y=0.0;

for(int k=0;k<=n-1;k++)
{double p=1.0;
for(int j=0;j<=n-1;j++)
{if(j!=k)
p=p*(x-a[j])/(a[k]-a[j]);
y=p*b[k]+y;}
return y; }}
我改了一下程序,只求一个x的值,但是输出结果为什么始终都是6.95e305.。。。还请赐教啊

这是拉格朗日插入程序吧 我运行了下 x的值没问题输入多少就是多少 ,但是返回的y值貌似有问题 也就是最终的结果不对追问

对啊,不管怎么输入,结果都一样,不知道哪里出问题了。

追答

有两个问题 : 第一个 int n = sizeof a / sizeof a[0]; 这条语句不对,我也是调了半天,这条输出总是0;改进: 把main函数里的n改成全局变量,省着在测数组长度;

                 第二个问题: double lagrange(double a[], double b[], double x){...}这里面的return y 后面只能有一个大括号,要不然成多次反回了,返回没问题 关键是没人收。。。。。。

运行结果:

这个组数实在网上找的 ,结果是对的!

程序不放不下了  太长

追问

改了后我用书上的例子代入计算,计算结果要偏大一点

追答

#include
#include
#include
#include
#define N 10
using namespace std;
double lagrange(double a[], double b[], double x);
int n;
int main()
{

double x;
double y;
double a[N];
double b[N];
cout > n;
cout > a[i];
cout > b[i];
cout > x;
y = lagrange(a, b, x);
cout << setprecision(3) << y << endl;
return 0;
//getch();
}
double lagrange(double a[], double b[], double x)
{
//int n = sizeof a / sizeof a[0];
double y = 0.0;
for (int k = 0; k <= n - 1; k++)
{
double p = 1.0;
for (int j = 0; j <= n - 1; j++)
{
if (j != k)
p = p*(x - a[j]) / (a[k] - a[j]);

}
y = p*b[k] + y;
}
return y;
}

试试这个.... 改的地方可能没说全

温馨提示:答案为网友推荐,仅供参考
相似回答