用复化梯形求积公式求圆周率
复化梯形求积公式是数值积分的时候用的。因此要思考:在什么区间内对什么样的函数积分能计算得到圆周率一种求圆周率的数值积分:Π4=∫0111+x2dx\frac{Π}{4}=∫_0^1\frac{1}{1+x^2}dx4Π=∫011+x21dx复化梯形求积公式进行数值积分的具体计算步骤如下:1).给出被积函数f(x)f(x)f(x)、区间[a,b][a,b][a,b]端点aaa,b...
复化梯形求积公式是数值积分的时候用的。
因此要思考:在什么区间内对什么样的函数积分能计算得到圆周率
一种求圆周率的数值积分:Π4=∫0111+x2dx\frac{Π}{4}=∫_0^1\frac{1}{1+x^2}dx4Π=∫011+x21dx
复化梯形求积公式进行数值积分的具体计算步骤如下:
1).给出被积函数f(x)f(x)f(x)、区间[a,b][a,b][a,b]端点aaa,bbb和等分数nnn;
2).求出xk=a+kh,h=b−anx_k=a+kh,h=\frac{b-a}{n}xk=a+kh,h=nb−a ;
3).计算f(a)、f(b)、∑k=1n−1f(xk)f(a)、f(b)、∑_{k=1}^{n-1}f(x_k)f(a)、f(b)、∑k=1n−1f(xk);
4). 得Tn=h2[f(a)+2∑k=1n−1f(xk)+f(b)]T_n=\frac{h}{2}[f(a)+2∑_{k=1}^{n-1}f(x_k)+f(b)]Tn=2h[f(a)+2∑k=1n−1f(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;
}
运行结果:
小提示:用复化梯形求积公式求解数值积分时,分的区间越多,越接近准确值。
更多推荐
所有评论(0)