优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++小程序|用无限切分后求和来无限逼近的方法来近似定积分及PI

nanyue 2024-08-10 18:34:38 技术文章 12 ℃

微积分求面积的方法就是无限切分(微分)、求和(积分)、取极限。而电脑程序最擅长的就是做机械化的重复工作。

定积分的物理意义是某个函数与x轴围成的区域的面积。定积分可以通过将这块面积分解成一连串的小矩形,计算各小矩形的面积的和而得到,如图下图所示,曲线函数f(x)=x^2+5x+1,小矩形的宽度可由用户指定,高度就是对应于这个x的函数值f(x)。区间[a, b]的a、b及小矩形的宽度在程序执行时由用户输入。

如果小矩形的宽度是delt,起点坐标是x,则矩形的近似面积为delt*f(x+delt/2)。

计算定积分只需要沿着x轴将一个个小矩形的面积相加即可。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double x, a, b, s = 0, h, delt; // s为积分值

	cout << "请输入f(x)=x^2+5x+1的积分区域(a b): ";
	cin >> a >> b;
	cout << "请输入小矩形的宽度: ";
	cin >> delt;
	for ( x = a + delt / 2; x <= b; x += delt) {
		h = x * x + 5 * x + 1;
		s += h * delt;
	}
	cout << "粗略分割计算的函数的定积分是:" << s << endl;
	cout << "x^2+5x+1的原函数是:1/3*x^3+5/2*x^2+x" << endl;
	double s1 = 1.0/3+5.0/2+1;
	double s2 = (1.0/3)*pow(12,3)+(5.0/2)*pow(12,2)+12;
	cout << "按微积分公式计算的函数的定积分是:" << s2-s1 << endl;
	cin.get();cin.get();
	return 0;
}
/*
运行效果:
请输入f(x)=x^2+5x+1的积分区域(a b): 1 12
请输入小矩形的宽度: 0.1
粗略分割计算的函数的定积分是:944.157
x^2+5x+1的原函数是:1/3*x^3+5/2*x^2+x
按微积分公式计算的函数的定积分是:944.167
*/

用类似的方法可以求π 的近似值,具体思想如下:

在平面坐标系中有一个圆心在原点,半径为1的圆,用矩形法计算第一象限的面积S,4 * S就是整个圆的面积。圆面积也可以通过π*r^2来求,因此可得π = 4 * S。尝试不同的小矩形宽度,以得到不同精度的π 值。

在第一象限中,x的值从0变到1。圆上的每个点的坐标为(x, sqrt(1-x^2 )。如果矩形的宽度为delt,计算第一象限中的圆面积就是沿着x轴,从delt/2到1计算每个小矩形面积并相加。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double x, s = 0, delt;
	cout << "请输入小矩形的宽度: ";
	cin >> delt;
	for ( x = delt / 2; x <= 1; x += delt) // 计算第一象限内的圆面积
		s += sqrt(1 - x * x) * delt;
	cout << "π 的近似值是:" << 4 * s << endl;
	cin.get();cin.get();
	return 0;
}
/*
请输入小矩形的宽度: 0.01
π 的近似值是:3.14194
*/

-End-

Tags:

最近发表
标签列表