• 求任意函数的定积分 分类: C/C++ 2015-04-28 08:43 41人阅读 评论(0) 收藏


    1)本程序采用最原始的积分求解方法:面积逼近法;
    2)fun为被积函数,fintegration为积分,积分默认区间为[-1000,1000],可以自己指定;
    3)积分区间分段数N关乎精度,N越大,精度越高,但计算量越大;

    #include<iostream>
    #include<math.h>
    
    using namespace std;
    typedef double (*fpoint)(double x);// 函数指针用法
    
    double fun1(double x)//标准正态分布
    {
    	const int u=0;
    	const int b=1;
    	const double Pi=3.14159;
    	double coefficient=1/(sqrt(2*Pi)*b);
    	double index=-((x-u)*(x-u)/(2*b*b));
    	return coefficient*exp(index);
    }
    
    double fun2(double x)//二次函数
    {
    	return 3*x*x+4*x;
    }
    
    double fun3(double x)//指数函数
    {
    	return exp(x);
    }
    double fintegration(fpoint f,const int N=5000,const double minvalue=-1000,const double maxvalue=1000)
    {//默认分段数为5000,默认积分区间为[-1000,1000],被积函数为f,此处f只能是参数为double,返回值为double的一元函数
    //如果要让程序可移植性更强,可以采用仿函数
    	double distance=(maxvalue-minvalue)/N;//区间大小
    	double sum(0);
    	for(int i=0;i<N;++i)
    	{
    		double length;//矩形长
    		double x1,x2;//横坐标
    		x1=minvalue+i*distance;
    		x2=minvalue+(i+1)*distance;
    		length=(f(x1)+f(x2))/2;//计算值时有重复,可以考虑优化
    		sum+=length*distance;
    	}
    	return sum;
    }
    
    int main()
    {	
    	cout<<fintegration(fun1)<<endl;
    	cout<<fintegration(fun2,1000,0,10)<<endl;
    	cout<<fintegration(fun3,1000,0,200)<<endl;
    	return 0;
    }


  • 相关阅读:
    python对打印出中文乱码问题的解决方案
    git常用操作
    如何创建git开发环境
    对自然界的三种花进行分类
    创建第一个简单的AI分类器
    使用TensorFlow创建第变量定义和运行方式
    MySQL的left,substr,instr截取字符串函数使用实例
    构建之法阅读笔记05
    找水王2
    第十二周学习进度
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687150.html
Copyright © 2020-2023  润新知