zoukankan      html  css  js  c++  java
  • 求任意函数的定积分 分类: 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;
    }


  • 相关阅读:
    Promise小结 ES6异步编程
    XLNet模型
    BERT模型
    Transformer模型
    注意力机制(Attention Mechanism)
    序列到序列模型(seq2seq)
    【Pandas-附件2】查询手册
    【Pandas-附件1】读取excle和csv具体函数
    【pandas-21】实践-同比和环比指标
    【pandas-20】实践(泰坦尼克沉船事件)-特征处理
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687150.html
Copyright © 2011-2022 走看看