计算数值导数
项目描述
为任意舍入误差和误差传播的解析函数提供快速的数值导数。
功能
稳健地计算任意实解析映射ℝⁿ → ℝⁱ¹ × … × ℝⁱⁿ的广义雅可比矩阵
导数可以计算到指定的精度(以节省计算时间)或直到函数的最大精度
基于John D’Errico的DERIVEST算法:即使对于具有大舍入误差的函数也能正常工作
比numdifftools在等效精度下快1000倍
返回导数的误差估计
支持任意辅助函数参数
基于数值计算的雅可比矩阵执行统计误差传播
轻量级软件包,仅依赖于numpy
计划中的功能
使用相同的算法数值计算Hessian矩阵
进一步泛化计算以支持形状为(N, K)的函数参数,在这种情况下,计算长度为N的K个向量的雅可比矩阵
示例
from matplotlib import pyplot as plt
import numpy as np
from jacobi import jacobi
# function of one variable with auxiliary argument; returns a vector
def f(x):
return np.sin(x) / x
x = np.linspace(-10, 10, 200)
fx = f(x)
# f(x) is a simple vectorized function, jacobian is diagonal
fdx, fdxe = jacobi(f, x, diagonal=True)
# fdxe is uncertainty estimate for derivative
plt.plot(x, fx, color="k", label="$f(x) = sin(x) / x$")
plt.plot(x, fdx, label="$f'(x)$ computed with jacobi")
scale = 14
plt.fill_between(
x,
fdx - fdxe * 10**scale,
fdx + fdxe * 10**scale,
label=f"$f'(x)$ error estimate$\\times \\, 10^{{{scale}}}$",
facecolor="C0",
alpha=0.5,
)
plt.legend()
from jacobi import propagate
import numpy as np
from scipy.special import gamma
# arbitrarily complex function that calls compiled libraries, numba-jitted code, etc.
def fn(x):
r = np.empty(3)
r[0] = 1.5 * np.exp(-x[0] ** 2)
r[1] = gamma(x[1] ** 3.1)
r[2] = np.polyval([1, 2, 3], x[0])
return r # x and r have different lengths
# fn accepts a parameter vector x, which has an associated covariance matrix xcov
x = [1.0, 2.0]
xcov = [[1.1, 0.1], [0.1, 2.3]]
y, ycov = propagate(fn, x, xcov) # y=f(x) and ycov = J xcov J^T
与numdifftools的比较
速度
Jacobi比numdifftools更好地利用了向量化计算,并且如果导数是平凡的,则收敛迅速。这导致在某些情况下速度显著加快。
运行时间越短越好(并且比率 > 1)。
精度
机器精度由虚线表示。Jacobi的精度与numdifftools相当。误差估计的量级正确,但略微低估了实际偏差。对于大多数应用来说,这并不重要。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
jacobi-0.9.2.tar.gz (998.3 kB 查看哈希值)
构建分发
jacobi-0.9.2-py3-none-any.whl (11.8 kB 查看哈希值)
关闭
jacobi-0.9.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c11f481663246ef1c2da915b9f9ab4ef229051fb14e0afc232d4668301320828 |
|
MD5 | 0525b2276da491eb7a22c12700cf3991 |
|
BLAKE2b-256 | 6ae5d851f71f1d7fa52212364242f763d1ef15c314beaa2761b5d0f0c88e40a1 |
关闭
jacobi-0.9.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7e57b2d9c62d47bce688ef4b3564adeb1def611cf5ed232ec39a6aa6083f7a8c |
|
MD5 | 4963d920921e1a6ac2785930e2fb6677 |
|
BLAKE2b-256 | b05c2d6a44da539db44820b1c053958bfc4ee011e33f4f110175bfc712520440 |