【问题标题】:solution for basic integration of mathematical functions [closed]数学函数基本积分的解决方案
【发布时间】:2014-03-10 15:30:52
【问题描述】:

我想在给定的大小范围内集成一个数学函数(数字密度函数)。我要积分的函数一般由分数、指数、欧拉数和根组成。我可以为此使用什么代码?

例如,我找到了“数学”类,但在该类中找不到任何集成函数。此外,我不知道上述元素的语法(欧拉数...)

恭喜

【问题讨论】:

  • 数论工作通常需要处理 2^32 以上的整数。例如第 8 个欧拉数已经超过了这个限制。您是否需要无限精度数字,即 2^32 以上整数的精确表示?
  • 我不知道标准库中有任何数学类,有一个cmath 头文件,但它不包含任何进行数字或符号积分的函数。您要么需要编写一个数字积分例程,要么使用另一个库中的一个。
  • 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。 stackoverflow.com/help/on-topic
  • @Dmitri Chubarov:是的,通常我认为可能存在高于 2^32 的整数,因为这应该只需要大约 22,18 的欧拉数指数。不过,我不知道你所说的第 8 个欧拉数是什么意思。
  • 不确定您是在寻找数值积分还是符号积分。如果是数值:我认为 GSL(GNU 科学图书馆)具有数值积分功能(可能是 QUADPACK 的改编版本或其他东西)。如果是象征性的:总的来说这是一个非常非常困难的问题。如果您需要将它合并到 C++ 代码中,您可能会查看 Yacas(我认为您可以将其用作库),或者可能是 Maxima(您可以构建套接字接口)。祝你好运,玩得开心。

标签: c++ class math integration


【解决方案1】:

您可能正在寻找numerical integration
这是一种使积分的数值“足够接近”的方法,通常对于大多数应用程序来说已经足够了。

维基百科页面链接到 AlgLib 作为具有 C++ 实现的实现库。

【讨论】:

    【解决方案2】:

    这是我不久前开发的代码。它使用辛普森方法。

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    double NormSDist(double x);
    template <typename T> T SimpsonMethod(T (*pfunc)(T), float a, float b,int n=100);
    
    int main()
    {
        double area=SimpsonMethod<double>(&NormSDist,-5,1.2);
        cout << area << endl;
        return 0;
    }
    
    template <typename T> T SimpsonMethod(T (*pfunc)(T), float a, float b,int n)
    {
        T h,x,y,retVal;
        h=(b-a)/n;
    
        x=a;
        y=(*pfunc)(x);retVal=y;
        for(int i=1;i<n;i++)
        {
            x=a+i*h;
            if(i%2==0) y=2*(*pfunc)(x);
            if(i%2==1) y=4*(*pfunc)(x);
            retVal=retVal+y;
        }
        x=b;y=(*pfunc)(x);retVal=retVal+y;
    
        return retVal*h/3;
    }
    
    double NormSDist(double x)
    {
        return 1/sqrt(2*3.1415926536)*exp(-0.5*x*x);
    }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多