用复化梯形求积公式求圆周率

复化梯形求积公式是数值积分的时候用的。
因此要思考:在什么区间内对什么样的函数积分能计算得到圆周率

一种求圆周率的数值积分: Π 4 = ∫ 0 1 1 1 + x 2 d x \frac{Π}{4}=∫_0^1\frac{1}{1+x^2}dx 4Π=011+x21dx

复化梯形求积公式进行数值积分的具体计算步骤如下:
1).给出被积函数 f ( x ) f(x) f(x)、区间 [ a , b ] [a,b] [ab]端点 a a a b b b和等分数 n n n
2).求出 x k = a + k h , h = b − a n x_k=a+kh,h=\frac{b-a}{n} xk=a+kh,h=nba
3).计算 f ( a ) 、 f ( b ) 、 ∑ k = 1 n − 1 f ( x k ) f(a)、f(b)、∑_{k=1}^{n-1}f(x_k) f(a)f(b)k=1n1f(xk)
4). 得 T n = h 2 [ f ( a ) + 2 ∑ k = 1 n − 1 f ( x k ) + f ( b ) ] T_n=\frac{h}{2}[f(a)+2∑_{k=1}^{n-1}f(x_k)+f(b)] Tn=2h[f(a)+2k=1n1f(xk)+f(b)]

代码:

#include <iostream>
#include <iomanip>		//setprecision()所在的头文件
using namespace std;

//积分函数
double f(double x)
{
	return (4 / (1 + x * x));
}

//复化梯形求积公式计算圆周率
double fuHuaTiXing(double a, double b, int n)
{
	double h = (b - a) / n; //每一份小区间的长度
	double s = 0;

	for (int k = 1; k <= n - 1; k++)
	{
		s += f(a + k * h);
	}

	double T = (f(a) + f(b) + 2 * s)*h / 2;
	return T;
}

int main()
{
	char Is = 'n';
	do
	{
		cout << "请输入积分区间(a,b):";
		double a, b;
		cin >> a >> b;

		cout << "请输入等分份数n:";
		int n;
		cin >> n;

		cout << "由复化梯形求积公式所求结果为:" << setprecision(10) << fuHuaTiXing(a, b, n) << endl;//setprecision(n):控制浮点数的有效数字位数为n

		cout << "是否要继续(y/n):";
		cin >> Is;
	} while (Is == 'y');

	return 0;
}

运行结果:在这里插入图片描述
小提示:用复化梯形求积公式求解数值积分时,分的区间越多,越接近准确值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值