VS2017/c语言-求积分算法

用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*/
}

运行结果:
在这里插入图片描述

四、总结
该算法虽较为冗长,但简单易懂,方便修改与扩充功能。在主函数中代码长度短,调用方便,适合在复杂程序中使用。
编写仓促,望多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blablabla...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值