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
维护者
Kilian Kilger
贡献者 - 新
Igor Zhukov
贡献者 - 新
Tomato-in
贡献者 - 新
Paweł Stankowski
贡献者 - 新

依赖项

Boost 数学库

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

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

Math 库以现代 C++ 实现了众多高级数学函数。该库致力于在保持高性能的同时,提供最高级别的数值和语法正确性。

所有代码均为头文件形式,方便客户端在整个多样化的函数集合中进行设置和使用。

本库由几个相互关联的部分组成

浮点数实用工具

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

特定宽度浮点数类型

一组 typedef,类似于 C++20 的 <stdfloat> 提供的类型,但位于 namespace boost 中。

数学常数

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

这些常数当然可以从模板代码中使用,或者作为非模板使用,并提供简化的接口,如果这更合适的话。

统计分布

提供了一套相当全面的统计分布,在此基础上可以构建更高级的统计测试。

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

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

特殊函数

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

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

所有实现都是完全通用的,并支持使用任意“实数”类型,包括 Boost.Multiprecision 中的类型。然而,大多数函数都针对具有已知尾数(或小数部分)大小的类型进行了优化:通常是内置的 floatdoublelong 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 问题跟踪器(请参阅 未解决的问题已解决的问题)进行报告。

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

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