Boost
arrow_drop_down
Boost.Math
M
D
C++ 14 新增于 Boost 1.23.0
类别:   数学

Boost.Math 在数学领域包含多项贡献:浮点数工具、特定宽度浮点数类型、数学常数、统计分布、特殊函数、求根和函数最小化、多项式和有理函数、插值以及数值积分和微分。其中许多特性都使用了模板,支持内置类型和扩展宽度类型(例如 Boost.Multiprecision)。

本次发布

各种
作者
John Maddock
John Maddock
维护者
Christopher Kormanyos
Christopher Kormanyos
维护者
NAThompson
NAThompson
维护者
Matt Borland
Matt Borland
维护者
mzhelyez
贡献者 - 新
Maksym Zhelyeznyakov
贡献者 - 新
Maksym Zhelyeznyakov
贡献者 - 新
Maksym Zhelyeznyakov
贡献者 - 新
Romain Geissler
Romain Geissler
贡献者 - 新
Andrew Johnson
Andrew Johnson
贡献者
warren
warren
贡献者

依赖项

Boost 数学库

公告:本库需要兼容 C++14 的编译器。

主分支 开发分支
Drone Build Status Build Status
Github Actions Build Status Build Status
Codecov codecov codecov

数学库使用现代 C++ 实现,提供了众多高级数学函数。本库力求在确保高性能的同时,达到最高的数值和语法正确性。

所有代码均为头文件,方便客户在各种函数集合中进行轻松设置和使用。

本库分为几个相互关联的部分

浮点数工具

用于处理浮点数算术的实用函数,包括浮点数分类(fpclassify、isnan、isinf 等)、符号操作、舍入、比较以及计算浮点数之间距离的函数。

特定宽度浮点数类型

一组 `typedef`,类似于 C++20 的 `` 提供的类型,但在 `namespace boost` 中。

数学常数

提供各种各样的常数,从分数到 $\pi$ 的各种倍数、欧拉常数等。

当然,这些都可以从模板代码中使用,或者在不太复杂的情况下使用简化接口作为非模板使用。

统计分布

提供了一套相对全面的统计分布,可以在其上构建更高级别的统计测试。

最初的重点是中心单变量分布。提供了连续分布(如正态分布和 Fisher 分布)和离散分布(如二项分布和泊松分布)。

提供了一份全面的教程,以及一系列示例,说明如何使用本库进行统计测试。

特殊函数

提供了一系列高质量的特殊函数;最初这些函数集中在统计应用中使用的函数以及 C++ 库扩展技术报告中的函数。

当前实现的函数族包括伽马函数、贝塔函数和误差函数,以及不完全伽马函数和不完全贝塔函数(每种有四种变体),以及它们的各种逆函数,再加上 digamma 函数、各种阶乘函数、贝塞尔函数、椭圆积分、超几何函数、正弦基函数(及其双曲变体)、反双曲函数、勒让德/拉盖尔/埃尔米特/切比雪夫多项式以及各种特殊的幂函数和对数函数。

所有实现都是完全通用的,并支持使用任意“实数”类型,包括 Boost.Multiprecision 中的类型。然而,大多数函数都针对具有已知尾数(或小数)大小的类型进行了优化:通常是内置的 `float`、`double` 或 `long double`。

这些函数也为 TR1 特殊函数提供了支持基础,其中许多函数已标准化为 C++17

求根

在实线上提供了一套全面的求根算法,包括使用导数和不使用导数的方法。

优化

通过 Brent 方法和微分进化来最小化成本函数。

多项式和有理函数

用于处理多项式以及高效评估有理式或多项式的工具。

插值

通过重有理插值、紧支撑二次、三次和五次 B 样条、切比雪夫变换、三角多项式、Makima、pchip、三次 Hermite 样条以及双线性插值进行函数插值。

数值积分和微分

一套相对全面的例程,用于积分(梯形、高斯-勒让德、高斯-克朗罗德、高斯-切比雪夫、双指数和蒙特卡洛)和微分(切比雪夫变换、有限差分、复步微分和前向模式自动微分)。

积分例程可用于返回复数的函数,因此也可用于计算路径积分。

四元数和八元数

四元数和八元数是类似于 std::complex 的类模板。

完整的文档可在 boost.org 上找到。

独立模式

定义 `BOOST_MATH_STANDALONE` 允许 Boost.Math 在没有任何 Boost 依赖的情况下使用。在此模式下,部分功能会受到限制。如果某个特定功能因独立模式而被禁用,则会收到 static_assert 消息。独立模式并非旨在与 Boost 的其余部分一起使用,并且可能会导致编译器错误。

支持的编译器

CI 系统会测试以下编译器,并且已知它们可以正常工作。目前,使用 Boost.Math 需要一个完全符合 C++14 标准的编译器。

  • g++ 5 或更高版本
  • clang++ 5 或更高版本
  • Visual Studio 2015 (14.0) 或更高版本

支持、错误和功能请求

可以通过 GitHub 问题跟踪器(请参阅 未解决的问题已解决的问题)报告 Bug 和功能请求。

您可以通过 拉取请求 提交您的更改。

Boost Math 没有专门的邮件列表,但您可以使用通用 Boost 邮件列表,并在主题中加上 [math] 标签。

开发

克隆整个 boost 项目,其中包含各个 Boost 项目作为子模块(参见 boost+git 文档)。

$ git clone https://github.com/boostorg/boost
$ cd boost
$ git submodule update --init

Boost Math Library 位于 `libs/math/` 目录下。

运行测试

首先,请确保您位于 `libs/math/test` 目录下。您可以运行 `Jamfile.v2` 中列出的所有测试,或者运行单个测试。

test$ ../../../b2                        <- run all tests
test$ ../../../b2 static_assert_test     <- single test
test$ # A more advanced syntax, demoing various options for building the tests:
test$ ../../../b2 -a -j2 -q --reconfigure toolset=clang cxxflags="--std=c++14 -fsanitize=address -fsanitize=undefined" linkflags="-fsanitize=undefined -fsanitize=address"

持续集成

PR 或提交到 PR 的默认操作是 CI 运行全部测试。您可以在提交消息末尾添加以下内容来修改行为。

* [ci skip] to skip all tests
* [linux] to test using GCC Versions 5-12 and Clang Versions 5-14 on Ubuntu LTS versions 18.04-22.04.
* [apple] to test Apple Clang on the latest version of MacOS.
* [windows] to test MSVC-14.0, MSVC-14.2, MSVC-14.3, CYGWIN, and mingw on the latest version of Windows.
* [standalone] to run standalone mode compile tests
 

构建文档

完整说明可在 此处找到,但在此略作重申。

libs/math/doc$ brew install docbook-xsl # on mac
libs/math/doc$ touch ~/user-config.jam
libs/math/doc$ # now edit so that:
libs/math/doc$ cat ~/user-config.jam
using darwin ;

using xsltproc ;

using boostbook
    : /usr/local/opt/docbook-xsl/docbook-xsl
    ;

using doxygen ;
using quickbook ;
libs/math/doc$ ../../../b2

全部时间

Paul A. Bristow
Paul A. Bristow
贡献者
Nick
Nick
贡献者
Jeremy W. Murphy
Jeremy W. Murphy
贡献者
Beman Dawes
Beman Dawes
贡献者
Daryle Walker
Daryle Walker
贡献者
sguazt
sguazt
贡献者
AntonBikineev
AntonBikineev
贡献者
nobody
贡献者
tk-yoshimura
tk-yoshimura
贡献者
Hubert Holin
贡献者
Matt Pulver
Matt Pulver
贡献者
Kolya Matteo
Kolya Matteo
贡献者
Daniel James
Daniel James
贡献者
Douglas Gregor
Douglas Gregor
贡献者
akumta
akumta
贡献者
Brian Wignall
Brian Wignall
贡献者
Peter Dimov
Peter Dimov
贡献者
Evan Miller
Evan Miller
贡献者
Rose
Rose
贡献者
Jens Maurer
Jens Maurer
贡献者
Vladimir Prus
Vladimir Prus
贡献者
Marshall Clow
Marshall Clow
贡献者
Thijs van den Berg
Thijs van den Berg
贡献者
Ryan
Ryan
贡献者
Victor Ananyev
Victor Ananyev
贡献者
Benjamin Sobotta
贡献者
Stephen Kelly
Stephen Kelly
贡献者
Bruno Lalande
Bruno Lalande
贡献者
Gennaro Prota
贡献者
Rene Rivera
Rene Rivera
贡献者
Gennadiy Rozental
Gennadiy Rozental
贡献者
pulver
pulver
贡献者
Nikhar Agrawal
Nikhar Agrawal
贡献者
Darin Adler
贡献者
Troy D. Straszheim
Troy D. Straszheim
贡献者
Bryce Adelstein-Lelbach
Bryce Adelstein-Lelbach
贡献者
Felix von Drigalski
Felix von Drigalski
贡献者
Kilian Kilger
贡献者
Igor Zhukov
贡献者
Dave Abrahams
Dave Abrahams
贡献者
Suyash Patil
Suyash Patil
贡献者
inkstink
inkstink
贡献者
Misha Bergal
贡献者
Edward Diener
Edward Diener
贡献者
Michael A. Jackson
Michael A. Jackson
贡献者
Steven Watanabe
Steven Watanabe
贡献者
Alexander Grund
Alexander Grund
贡献者
Aleksey Gurtovoy
贡献者
Kohei Takahashi
Kohei Takahashi
贡献者
zerotypos-found
zerotypos-found
贡献者
Robin Eckert
Robin Eckert
贡献者
Brian Kuhl
Brian Kuhl
贡献者
Lakshay Garg
Lakshay Garg
贡献者
Matheus Castanho
Matheus Castanho
贡献者
Alejandro Baranek
Alejandro Baranek
贡献者
Jürgen Hunold
Jürgen Hunold
贡献者
Pavel P
贡献者
Daniel Scharrer
Daniel Scharrer
贡献者
Jeremiah Willcock
Jeremiah Willcock
贡献者
Matthias Koeppe
Matthias Koeppe
贡献者
Tomato-in
贡献者
Jan Blumschein
Jan Blumschein
贡献者
Nicholas McKibben
Nicholas McKibben
贡献者
RL-S
RL-S
贡献者
Markus Schöpflin
贡献者
Samuel Rowlinson
Samuel Rowlinson
贡献者
Conor Jackson
Conor Jackson
贡献者
Joaquin M. López Muñoz
Joaquin M. López Muñoz
贡献者
Björn Karlsson
贡献者
Andrew Sutton
Andrew Sutton
贡献者
sdarwin
sdarwin
贡献者
Jeremy Murphy
贡献者
ambrish
ambrish
贡献者
Jimmy Lu
Jimmy Lu
贡献者
Nikita Kniazev
Nikita Kniazev
贡献者
Rosen Penev
Rosen Penev
贡献者
Katrin Leinweber
Katrin Leinweber
贡献者
Märt Laak
Märt Laak
贡献者
William Ledbetter
William Ledbetter
贡献者
Youssef LAKHAL
贡献者
Joachim Wuttke
Joachim Wuttke
贡献者
PRATIK AWASTHI
PRATIK AWASTHI
贡献者
Marcel Raad
Marcel Raad
贡献者
Oleg Alexandrov
Oleg Alexandrov
贡献者
Stephan T. Lavavej
Stephan T. Lavavej
贡献者
kojiynet
kojiynet
贡献者
Gregory Lee
Gregory Lee
贡献者
James Folberth
James Folberth
贡献者
Stefan Slapeta
贡献者
Drew Risinger
Drew Risinger
贡献者
Jonathan Turkanis
Jonathan Turkanis
贡献者
Tomasz Kalisiak
Tomasz Kalisiak
贡献者
Rasmus Henningsson
Rasmus Henningsson
贡献者
Madiyar
Madiyar
贡献者
Lukas Riebel
Lukas Riebel
贡献者
Paweł Stankowski
贡献者
Lucas Colley
Lucas Colley
贡献者
dschmitz89
dschmitz89
贡献者
Vassil Vassilev
Vassil Vassilev
贡献者
K. Noel Belcourt
K. Noel Belcourt
贡献者
Casey Carter
Casey Carter
贡献者
Eric Niebler
Eric Niebler
贡献者
Daniela Engert
Daniela Engert
贡献者
Axel Huebl
Axel Huebl
贡献者
Alex Henrie
Alex Henrie
贡献者
Ralf W. Grosse-Kunstleve
贡献者
Antony Polukhin
Antony Polukhin
贡献者
Jonathan Wakely
Jonathan Wakely
贡献者
Madhur Chauhan
Madhur Chauhan
贡献者
Boris Gubenko
贡献者
Hans Dembinski
Hans Dembinski
贡献者
Jessica Hamilton
Jessica Hamilton
贡献者
EugeneZelenko
EugeneZelenko
贡献者
Fredrik Blomqvist
贡献者
Alisdair Meredith
Alisdair Meredith
贡献者
Rogier van Dalen
Rogier van Dalen
贡献者
Lauri Nurmi
Lauri Nurmi
贡献者
Adam Wulkiewicz
Adam Wulkiewicz
贡献者
Denis Kolodin
Denis Kolodin
贡献者
Kartik Mohta
Kartik Mohta
贡献者
Michael Krasnyk
Michael Krasnyk
贡献者
NickelWenzel
贡献者
Reimar Döffinger
贡献者
Jie
Jie
贡献者
Nick
贡献者
Jeff Garland
Jeff Garland
贡献者
Jeremy Nelson
Jeremy Nelson
贡献者
Gattag
Gattag
贡献者
Eduardo García-Portugués
Eduardo García-Portugués
贡献者
markklik
markklik
贡献者
Joel de Guzman
Joel de Guzman
贡献者