初探C++连续无奇点函数的积分算法

定积分算法概述

本文主要介绍一下积分算法。定积分可以理解为函数与x轴、指定的左右界围成的有符号的面积代数和。那么最简单的算法求a到b上,f(x)函数的积分,就是把[a,b]区间平均分割为无数多个divx模块,每个模块都看成长度为f(a+divx),宽度为divx的矩形,相乘后的有符号面积进行代数和后求出的即为定积分值,这种算法这里就不予实现了,网络上很多。今天将两种算法,起始还是属于积分中比较浅显的,给需要的同胞们解决一下燃眉之急。

自定义算法

我介绍的这种算法比较简单,是用梯形分割法进行反复迭代计算的。话不多说,po一下代码:

template<class C>
void my_Integral_trapzd(C& f1, const DB begin, const DB end, const int  num, const DB eps,DB& result)
/*************************************************
Function:		 my_Integral_trapzd
Description:	采用梯形迭代法的基本一重积分
Input:
*f1:			需要求积分的原始表达式
*begin:			定积分起点
*end:			定积分终点
*multiple:		对称分割的次数,为2^(num-1)次
*result:		存放积分结果
Output:
Return:
*ret:			void
*************************************************/
{
   
	DB x, tnm, sum, del;
	const DB EPS{
    eps };
	static DB s;
	DB olds = 0.0;
	int it, j;
	for (int multiple = 0; multiple < num; multiple++)
	{
   
		if (multiple == 1)//仅分割轴向区间1次
		{
   
			s = 0.5*(end - begin)*(f1(begin) + f1(end));//赋值静态变量,准备迭代,并且返回值
			result = s;
		}
		else
		{
   
			for (it = 1, j = 1; j < multiple - 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值