c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 02:24:42
![c++编程问题 拉格朗日插值法这是我自己按照书上编的 算法// 拉格朗日插值法.cpp :定义控制台应用程序的入口点.//#include "stdafx.h"#include"iostream"#define N 4 //插值节点数目using namesp](/uploads/image/z/8367933-21-3.jpg?t=c%2B%2B%E7%BC%96%E7%A8%8B%E9%97%AE%E9%A2%98+%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E6%B3%95%E8%BF%99%E6%98%AF%E6%88%91%E8%87%AA%E5%B7%B1%E6%8C%89%E7%85%A7%E4%B9%A6%E4%B8%8A%E7%BC%96%E7%9A%84+%E7%AE%97%E6%B3%95%2F%2F+%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E6%B3%95.cpp+%3A%E5%AE%9A%E4%B9%89%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%85%A5%E5%8F%A3%E7%82%B9.%2F%2F%23include+%26quot%3Bstdafx.h%26quot%3B%23include%26quot%3Biostream%26quot%3B%23define+N+4+%2F%2F%E6%8F%92%E5%80%BC%E8%8A%82%E7%82%B9%E6%95%B0%E7%9B%AEusing+namesp)
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;
}