c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/06 09:59:54
c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp
c++编程问题 拉格朗日插值法
这是我自己按照书上编的 算法
// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.
//
#include "stdafx.h"
#include"iostream"
#define N 4 //插值节点数目
using namespace std;
void main()
{
\x05float x[N]; //差值节点横坐标
\x05float y[N]; //差值节点纵坐标
\x05float a; //所求点横坐标
\x05float fx=0,tmp=1;
\x05int i,j;
\x05
\x05cout<<"输入插值点的坐标:"<<endl;
\x05for(i=0;i<N;i++)
\x05{
\x05\x05cin>>x[i];
\x05\x05cin>>y[i];
\x05}
\x05cout<<"输入所求点的横坐标:"<<endl;
\x05cin>>a;
\x05for(i=0;i<N;i++)
\x05{
\x05\x05{
\x05\x05\x05for(j=0;j<N;j++)
\x05\x05\x05\x05if(i!=j)
\x05\x05\x05\x05\x05tmp=tmp*(a-x[j])/(x[i]-x[j]);
\x05\x05}
\x05\x05fx=fx+tmp*y[i];
\x05}
\x05cout<<"所求值为:"<<endl;
\x05cout<<fx<<endl;
}
这是运算的求正弦 的结果
书上答案为0.199369
标准值为0.199368
这明显有很大误差
我想问一下是我的算法出现了错误 还是本来没错 而是程序运行产生的误差 这误差又是怎么来的 ?
c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp
代码问题,改一句就好了:
#include<iostream>
#define N 3 //插值节点数目
using namespace std;
void main()
{
float x[N]; //差值节点横坐标
float y[N]; //差值节点纵坐标
float a; //所求点横坐标
float fx=0,tmp=1;
int i,j;
cout<<"输入插值点的坐标:"<<endl;
for(i=0;i<N;i++)
{
cin>>x[i];
cin>>y[i];
}
cout<<"输入所求点的横坐标:"<<endl;
cin>>a;
for(i=0;i<N;i++)
{
tmp = 1;//加上这句,开始前还原tmp
{
for(j=0;j<N;j++)
if(i!=j)
tmp=tmp*(a-x[j])/(x[i]-x[j]);
}
fx=fx+tmp*y[i];
}
cout<<"所求值为:"<<endl;
cout<<fx<<endl;
}