用c语言计算积分
一、积分计算原理
先把积分区域划分为n个曲边梯形,每个求值点为曲边梯形的两个底边中点,求得每个曲边梯形的面积即为积分值
用近似法求得积分:当n为无穷大时,可将该曲边梯形近似看成矩形,求出求值点的值,将求值点处函数值乘区域长度,得到近似矩形的面积(底乘高),再将所有矩形面积求和,得到近似积分值
当满足某一精度要求时,n可为有限个。
二、算法分析
为了程序的可读性,尽量使用模块化函数来编写。
求得积分值需要以下步骤:
1.设定被积函数
2.设定积分上下限
3.设定分度
4.求出步长(即划分分度区间)
5.求出当前分度区间的求值点(每个分度区间的中点)
6.求出求值点的函数值
7.计算近似举行的面积
8.将所有近似举行的面积求和
根据以上步骤,在程序中设定了6个函数,分别是:
划分区间函数 [seek_devLenth(double a, double b)]
求求值点函数 [seek_current_x(double l,double a,double n)]
求函数值函数 [fun(double x)]
求值点值函数 [seek_height(double l, int a, int n)]
求面积函数 [seek_area(double h,double l)]
面积求和函数(即求积分函数)[integrate(double a, double b)]
最后在主函数中设定积分上下限,再调用积分函数即可
三、实现部分
取n为100,求出sin(x)在(0,Π/2)上的积分
/*编程软件:Visual Studio 2017 */
#include <iostream>
#include<math.h>
using namespace std;
double seek_devLenth(double a, double b); //划分区间
double seek_height(double l, int a, int n); //求值点的值
double seek_area(double h,double l); //小矩形面积
double fun(double x); //求方程值
double seek_current_x(double l,double a,double n);//求当前的横坐标
double integrate(double a, double b);// 求积分
double seek_devLenth(double a,double b)
{
double Lenth,Division;
Division = 100; //设置分度
Lenth = (b - a) / Division;
return Lenth;
}
double seek_current_x(double l, double a, double n)
{
double Currentx;
Currentx = a + n * l + l / 2; //求当前求值点坐标
return Currentx;
}
double fun(double x)
{
double y;
y = sin(x); //在此处设置被积函数
return y;
}
double seek_height(double l,int a,int n) //求第n个矩形的高度
{
double Height;
Height = fun(seek_current_x(l, a, n));
return Height;
}
double seek_area(double h,double l)
{
double Area;
Area = h * l;
return Area;
}
double integrate(double a, double b)
{
double Lenth,Height,Area,AddArea=0;
int i;
Lenth = seek_devLenth(a,b);
for (i = 0; i < 100; i++)
{
Height = seek_height(Lenth, a, i);
Area = seek_area(Height, Lenth);
AddArea += Area;
}
return AddArea;
}
int main()
{
double start, end, out;
start = 0;
end = 3.14159 / 2;
out=integrate(start, end);
cout << out << endl;
/*Blablabla在CSDN发布2020-12-21*/
}
运行结果:
四、总结
该算法虽较为冗长,但简单易懂,方便修改与扩充功能。在主函数中代码长度短,调用方便,适合在复杂程序中使用。
编写仓促,望多指教!