比如求解\[\int_0^\pi {x{{\sin }^3}x = \frac{2}{3}} \pi \approx {\rm{2}}{\rm{.0943951}}\]
代码:
注意,这里用了一个委托类型的形参f,以便对不同的函数进行求解,n为可选参数(即具有默认值的参数)。
using System;namespace DefiniteIntegral{class Program{static void Main(string[] args){Console.WriteLine(GetDefiniteIntegral(0,Math.PI,Function.Fun_xPow_sinx_3));}//主体部分就是这个函数,其他可以不看static double GetDefiniteIntegral(double floorValue ,double upValue, Func<double, double> f, int n = 1000){double dx = (upValue - floorValue) / n;//(上限-下限)/总的划分区间数double sum = 0;double x = floorValue;for (int i = 1; i <= n; i++){// x = (xi-1 + xi)/2;x = (floorValue + dx * (i - 1) + floorValue + dx * i) / 2.0;sum += f(x) * dx;//f(x)*dx就是一个小区间的长方形面积,所有小长方形面积求和后就是积分值}return sum;}}class Function{public static double Fun_xPow_sinx_3(double x){return x * Math.Pow(Math.Sin(x), 3);}}}
代码运行结果:
前面划分区间后选择εi的时候采用了中间点,也可以统一采取右端点,即εi=xi= a + (b-a)i/n。对for循环做如下修改:
for (int i = 1; i <= n; i++){// 取右端点xi;x = floorValue + dx * i;sum += f(x) * dx;}