数值计算——拉格朗日插值方法(附代码)

一般拉格朗日插值多项式:

                                             

数值计算——拉格朗日插值方法(附代码)_第1张图片

2.1如图拉格朗日多项式插值结果,预测不准

数值计算——拉格朗日插值方法(附代码)_第2张图片

2.2如图,拟合曲线两端出现巨变,出现龙格现象。

数值计算——拉格朗日插值方法(附代码)_第3张图片

2.3此拉格朗日插值多项式不是数据的好模型,由于被插值区间数据较少,出现龙格现象。

2.4如图,前 4 个数据点的三次多项式估计 1998 年世界石油产量为74.258(桶/天),Runge 现象不会出现。

数值计算——拉格朗日插值方法(附代码)_第4张图片

c++程序源代码:

//拉格朗日多项式插值,龙格现象,高等数值计算
//开发人员:chenshuai  开发日期:2019.11.5  邮箱:[email protected] 

#include "pch.h"
#include 
#include 
using namespace std;
#define num  3   //拟合多项式次数
#include 
#include //文件输入/输出流 
#include  //参数化输入/输出 
double Lagrange(double x, vectorx_i, vectory_i);//定义拉格朗日插值函数
double Lagrange(double x,vectorx_i,vectory_i)
{
	int  n = size(x_i);
	double ln_x = 0, w_i = 1.0;
	for (int k = 0; k x_i = {1994, 1995,1996,1997,1998,1999,2000,2001,2002,2003 };
	vectory_i = { 67.052,68.008,69.803,72.024,73.4,72.063,74.669,74.487,74.065,76.777 };*/
	vectorx_i = { 1994, 1995,1996,1997 };
	vectory_i = { 67.052,68.008,69.803,72.024};
	double x=1998,y=0;
	int n = 50;//插值等分数
	y = Lagrange(x, x_i, y_i);
	cout << "1998年的石油产量=" << fixed << setprecision(4) << setw(8) << y << endl;
	ofstream out("插值结果.dat");
	for (int i = 0; i  <= num; i++)
	{
		out << fixed << setprecision(4) << setw(12) << x_i[i] << fixed << setprecision(4) << setw(15) << y_i[i] << endl;
	}
	for (int i = 0; i < n; i++)
	{
		x = 1994 + double(1997 - 1994) / (n - 1)*i;
		cout << x << endl;
		y= Lagrange(x, x_i, y_i);
		out << fixed << setprecision(4) << setw(12) << x<< fixed << setprecision(4) << setw(15) << y<< endl;
	}
	out.close();
}

 

你可能感兴趣的:(数值计算,研究生数学,c++,c++,数值计算,拉格朗日插值,龙格现象)