牛顿—科茨公式 C++代码实现

问题的引入

​ 在实际生活中我们常遇到数值积分的求积问题,虽然我们也学过求数值积分的一些方法,但是由于用插值多项式L(x)近似表达函数f(x)时存在截断误差,即有插值余项,因此插值型求积公式也有相应的余项。存在求函数f(x)在区间[a,b]上的定积分,以及f(x)在给定点上的值的数值方法,为了克服求f(x)的原函数可能遇到的困难和便于计算,我们利用牛顿——科茨来计算。其中还推导它的两种特殊形式——梯形求积公式和辛普森求积公式,并对这三种求积公式(梯形公式、辛普森公式和柯茨公式)进行了分析和比较。

代码的实现

Newton-Cotes.h

#include <iostream>
#include <cmath>

using namespace std;

class Newton_Cotes{
public:
	double a, b, h, core[100], f[100];
	int n;
	//牛顿——科茨公式的求积系数
	double c[7][9] = { {2, 1,1}, {6, 1, 4,1}, {8, 1, 3,3,1}, {90, 7, 32, 12,32,7}, {288, 19, 75, 50,50,75,19}, {840, 41, 216, 27, 272,27,216,41},
	{17280, 751, 3577,1323, 2989,2989,1323,3577,751} };

	Newton_Cotes(){}

	void input() {
		cout << "输入积分区间:" << endl;
		cin >> a >> b;
		cout << "需要将区间n等分    n=" << endl;
		cin >> n;

		h = (b - a) / n;
		//输入纵坐标的对应值
		cout << "输入横坐标x对应的纵坐标y的值:" << endl;
		for (int i = 0; i <= n; i++) {
			cout << "x[" << i << "] = " << a + i * h << "   y[" << i << "] = ";
			cin >> f[i];
		}
	}

	double run() {
		double sum = 0;
		for (int i = 0; i <= n; i++) {
			double x = c[n - 1][i + 1];
			sum += x * f[i];
		}
		sum = sum / c[n - 1][0] * (b - a);
		return sum;
	}


private:

};

Newton-Cotes.cpp

#include <iostream>
#include "Newton-Cotes.h"

using namespace std;

int main() {
	Newton_Cotes nw;
	nw.input(); //输入区间和纵坐标的值
	double result = nw.run();
	cout << "输出结果:" << result << endl;
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值