c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 11:37:02

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;
    
}