微积分求面积的方法就是无限切分(微分)、求和(积分)、取极限。而电脑程序最擅长的就是做机械化的重复工作。
定积分的物理意义是某个函数与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-