跳转到主要内容

解决一维或多维变量的自动数值微分问题。

项目描述

numdifftools

pkg_img tests_img Documentation Maintainability Test Coverage versions_img PyPI - Downloads

numdifftools库是使用_Python编写的工具集,用于解决一维或多维变量的自动数值微分问题。采用有限差分法,结合Richardson外推法,以提供最大精度。用户可以配置许多选项,如更改方法的阶数或外推,甚至允许用户指定是否使用复步、中心、前向或后向差分。

提供的方法有

  • 导数:计算任何标量函数的一阶到十阶导数。

  • directionaldiff:计算n变量函数的方向导数

  • 梯度:计算一维或多维变量标量函数的梯度向量。

  • Jacobian:计算一维或多维变量向量值函数的雅可比矩阵。

  • Hessian:计算一维或多维变量标量函数所有二阶偏导数的Hessian矩阵。

  • Hessdiag:仅计算Hessian矩阵的对角元素

所有这些方法还会对结果产生误差估计。

Numdifftools还提供了一个易于使用的接口,用于在_AlgoPy中计算的导数。Algopy代表Python中的算法微分。AlgoPy的目的是在算法微分(AD)的前向和反向模式下评估作为Python程序实现的函数的高阶导数。

入门指南

可视化tanh函数的高阶导数

>>> import numpy as np
>>> import numdifftools as nd
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(-2, 2, 100)
>>> for i in range(10):
...    df = nd.Derivative(np.tanh, n=i)
...    y = df(x)
...    h = plt.plot(x, y/np.abs(y).max())
>>> plt.show() # doctest: +SKIP
https://raw.githubusercontent.com/pbrod/numdifftools/master/examples/fun.png

计算exp(x)在x == 1处的1阶和2阶导数

>>> fd = nd.Derivative(np.exp)        # 1'st derivative
>>> fdd = nd.Derivative(np.exp, n=2)  # 2'nd derivative
>>> np.allclose(fd(1), 2.7182818284590424)
True
>>> np.allclose(fdd(1), 2.7182818284590424)
True

非线性最小二乘法

>>> xdata = np.reshape(np.arange(0,1,0.1),(-1,1))
>>> ydata = 1+2*np.exp(0.75*xdata)
>>> fun = lambda c: (c[0]+c[1]*np.exp(c[2]*xdata) - ydata)**2
>>> Jfun = nd.Jacobian(fun)
>>> np.allclose(np.abs(Jfun([1,2,0.75])), 0) # should be numerically zero
True

计算sum(x**2)的梯度

>>> fun = lambda x: np.sum(x**2)
>>> dfun = nd.Gradient(fun)
>>> np.allclose(dfun([1,2,3]), [ 2.,  4.,  6.])
True

使用易于使用的AlgoPy接口进行相同的计算

>>> import numdifftools.nd_algopy as nda
>>> import numpy as np
>>> fd = nda.Derivative(np.exp)        # 1'st derivative
>>> fdd = nda.Derivative(np.exp, n=2)  # 2'nd derivative
>>> np.allclose(fd(1), 2.7182818284590424)
True
>>> np.allclose(fdd(1), 2.7182818284590424)
True

非线性最小二乘法

>>> xdata = np.reshape(np.arange(0,1,0.1),(-1,1))
>>> ydata = 1+2*np.exp(0.75*xdata)
>>> fun = lambda c: (c[0]+c[1]*np.exp(c[2]*xdata) - ydata)**2
>>> Jfun = nda.Jacobian(fun, method='reverse')
>>> np.allclose(np.abs(Jfun([1,2,0.75])), 0) # should be numerically zero
True

计算sum(x**2)的梯度

>>> fun = lambda x: np.sum(x**2)
>>> dfun = nda.Gradient(fun)
>>> np.allclose(dfun([1,2,3]), [ 2.,  4.,  6.])
True

另请参阅

scipy.misc.derivative

文档和代码

Numdifftools适用于Python 2.7+和Python 3.0+。

官方发布版可在以下地址获取:http://pypi.python.org/pypi/numdifftools pkg_img

官方文档可在以下地址获取:http://numdifftools.readthedocs.io/en/latest/ Documentation

尖端技术:https://github.com/pbrod/numdifftools

安装

如果您已安装pip,则只需键入

$ pip install numdifftools

以获取最新稳定版本。使用pip的优点是所有要求都会自动安装。

单元测试

为了测试工具箱是否正常工作,请将以下内容粘贴到交互式Python会话中

import numdifftools as nd
nd.test('--doctest-modules', '--disable-warnings')

致谢

Python编写的numdifftools包由Per A. Brodtkorb编写,基于John D’Errico在Matlab中编写的自适应数值微分工具箱[DErrico06]

后来,该包扩展了一些在[JPerktold14]编写的statsmodels.tools.numdiff模块中找到的功能,该模块基于[Rid09]。双复数的实现基于[Ver14]的项目报告中的Matlab实现,该实现基于[GLD12]。为了完整性,还添加了[For98]方法,用于计算一般有限差分公式中的权重和点,以及[For81]方法,用于使用FFT计算复分析函数的泰勒系数。

参考文献

[Ver14]

Adriaen Verheyleweghen, (2014) “使用多复数步长法计算高阶导数”,项目报告,NTNU

[GLD12]

Gregory Lantoine, R.P. Russell, and T. Dargent (2012) “使用多复数变量进行自动计算高阶导数”,ACM Transactions on Mathematical Software, Vol. 38, No. 3, Article 16, April 2012, 21 pages, http://doi.acm.org/10.1145/2168773.2168774

[MELEV12]

M.E. Luna-Elizarraras, M. Shapiro, D.C. Struppa1, A. Vajiac (2012), “双复数及其初等函数”,CUBO A Mathematical Journal, Vol. 14, No 2, (61-80). June 2012.

[Lan10]

Gregory Lantoine (2010), “在多体环境中进行低推力轨迹鲁棒优化的方法”,Phd论文,乔治亚理工学院

[Rid09]

Ridout, M.S. (2009) “数值微分复步法的统计应用”,《美国统计学家》,63,66-74

[DErrico06]

D’Errico, J. R. (2006),“自适应鲁棒数值微分”,[链接](http://www.mathworks.com/matlabcentral/fileexchange/13490-adaptive-robust-numerical-differentiation)

[KLLK05]

K.-L. Lai, J.L. Crassidis, Y. Cheng, J. Kim (2005),“应用于二阶卡尔曼滤波的新复步导数近似”,AIAA 导航、导航和控制会议,加利福尼亚州旧金山,2005年8月,AIAA-2005-5944。

[For98]

B. Fornberg (1998) “有限差分公式中权重和点的计算”,SIAM Review 40,第 685-691 页。

[For81]

Fornberg, B. (1981)。 “解析函数的数值微分”,ACM 数学软件事务(TOMS),7(4),512-526. [链接](http://doi.org/10.1145/355972.355979)

[JML69]

Lyness, J. M., Moler, C. B. (1969)。 “导数积分的推广Romberg方法”,《数值数学》。

[JML66]

Lyness, J. M., Moler, C. B. (1966)。 “范德蒙德系统和数值微分”,《数值数学》。

[NAG]

NAG 库。NAG Fortran 库文档:D04AAF

更改日志

版本 0.9.41 2022年11月10日

Fabian Joswig (5)
  • ci:仅在推送到master和拉取请求时执行测试动作。

  • ci:将测试需求添加到ci工作流。

  • ci:添加了github actions ci的第一个版本。

  • 修复:将from scipy.ndimage.filters导入替换为from scipy.ndimage

  • 修复:将np.info(float).machar.tiny替换为np.info(float).tiny

Jonas Eschle (6)
  • 删除Python 3.6

  • 从appveyor CI中删除Python 2.7和3.6

  • 更新.travis.yml

  • 更新setup.cfg

  • 更新.travis.yml

  • 更新到Python310

Per A Brodtkorb (19)
  • 在setup.cfg中注释掉废弃的pep8ignore和pep8maxlinelength

  • 修复问题#59:numpy对machar.tiny的弃用警告

  • 删除过时的travis_install.sh

  • 在test_multicomplex.py中将废弃的np.MachAr().eps(NumPy 1.22)替换为np.finfo(float).eps

  • 添加requirements.tests.txt

  • 更新.github/workflows/test.yml以使用requirements.tests.txt

  • 删除过时的.travis.yml和appveyor.yml。

  • 现在使用Github-actions。

  • 在README.rst、info.py和index.rst中将appveyor徽标和travis徽标替换为github-actions徽标

  • 从setup.cfg中的分类器中删除python 2.7

  • 更新.travis.yml

  • 修复doctest,使其在travis上不会崩溃:在文档字符串中将“# doctest + SKIP”替换为“# doctest: +SKIP”

  • 更新README.rst和info.py中的下载徽标

  • 更新README.rst中的test_img

  • 更新travis中的tests_img路径。

  • 在info.py中的doctest字符串中添加“# doctest + SKIP”

  • 在docs/index.rst中将“version|”替换为“release|”

  • 在requirements.txt中添加matplotlib,从appveyor.yml中删除失败的python 3.8

Per A. Brodtkorb (4)
  • 合并pull request #65 from fjosw/feat/github_actions_ci

  • 合并pull request #66 from jonas-eschle/patch-1

  • 合并pull request #60 from peendebak/performance/percentile

  • 合并pull request #63 from fjosw/feat/numpy_deprecation

Pieter Eendebak (2)
  • 针对np.nanpercentile已知问题的解决方案

  • 通过合并百分位数计算提高性能

版本 0.9.40 2021年6月2日

Per A Brodtkorb (109)
  • 在.travis.yml中将Python 3.5替换为3.9

  • 从appveyor.yml中移除了Python 3.5

  • 在docs/conf.py中添加了bibtex_bibfiles = …

  • 修复了以下文件中的doctest失败问题
    • docs/src/numerical/derivest.rst

    • docs/tutorials/getting_started.rst

    • numdifftools.core.py

    • numdifftools.limits.py

    • numdifftools.nd_algopy.py

    • numdifftools.nd_scipy.py

    • numdifftools.nd_statsmodels.py

  • 在if __name__ ==’__main__’子句中隔离了click的导入。

  • 在appveyor.yml中添加了activate

  • 在extrapolation.py中为Epsilon算法添加了https://mathworld.net.cn/WynnsEpsilonMethod.html引用。

  • 禁用了LogJacobianRule中对n必须为1的限制。

  • 向JacobianDifferenceFunctions添加了complex_even和central_even方法。

  • 更新了core.py中Derivative的文档。

  • 更新了Richardson的文档。

  • 从test_nd_scipy.py中删除了过时的测试。

  • 修复了test_nd_scipy.py中TestJacobian.test_scalar_to_vector的bug,针对method="complex"。

  • 将core.py中的代码重构到finite_difference.py中。

  • 将LogJacobianRule、LogHessdiagRule、LogHessianRule添加到finite_difference.py中。

  • 修复了Richardson._estimate_error中的bug:复数规则错误地导致了复数误差值。

  • 添加了netlib.org/quadpack引用。

  • 更新Dea以符合Quadpack。

  • 将Brezinski的引用替换为Quadpack的引用。

  • 在extrapolation.py中的Dea中降低了循环复杂性。

  • 从profile_numdifftools.py中删除了注释掉的代码。

  • 更新setup.cfg中的pycodestyle忽略部分。

  • 在run_benchmark.py中删除了注释掉的代码,将get_nominal_step连续化为x的函数。

  • 在run_benchmark.py中使datetime调用与Python 2.7兼容。

  • 简化了core.py中Derivative._step_generator函数。

  • 使run_benchmark.py生成的图表更美观。

  • 在step_generators.py中,步进生成器的默认step_ratio为n=1时为2,其他情况下为1.6。

  • 修复了core.py和nd_statsmodels.py中的失败doctests。

  • 在setup.cfg中添加了doctests。

  • 在test_example_functions.py中重新排序了导入。

  • 修复了.travis.yml,以便在sonar.sources文件夹下可发现coverage.xml中的文件路径。问题在于SonarQube正在分析检出的源代码(在src/numdifftools中),但实际上单元测试和coverage.py是对安装的代码(在build/lib/numdifftools中)运行的。因此,安装代码的绝对文件路径是

  • 从test_numdifftools.py中删除了注释代码。

  • 当Python版本为3.7时,只运行coverage xml。

  • 更新.travis.yml,从extrapolation.py和nd_statsmodels.py中删除了注释代码。

  • 最终完成了XXXDifferencdFunctions从core.py到finite_difference.py的迁移。

  • 在step_generators.py中为default_scale函数添加了缺失的docstring。

  • 在_find_default_scale.py中删除了未使用的itertools导入。

  • 当n=1时,将复数/多复数方法的默认比例从1.35改为1.06。

  • 在extrapolation.py中添加了richardson_demo,简化了extrapolation.py中的EpsAlg类。

  • 修复了dea3的小错误:现在dea3和Dea(limexp=3)给出相同的结果!

  • 在appveyor.yml中添加了Python 3.8,在setup.cfg中添加了Python 3.9。

  • 修复了如何/index的引用。

  • 在docs.conf.py中添加了doctests配置。

  • 通过将函数值f(x)添加到info.f_value中修复了问题#50。

  • 更新README.rst。

  • 在这里和那里添加了@UnusedVariable。

  • 通过添加设置正确顺序的__init__来在Hessian中静默警告。

  • 更新了Richardson._r_matrix方法,以在step_ratio为复数时生成复数矩阵。

  • 修复了profile_numdifftools.py中的profile_hessian,使其再次工作。

  • 在test_nd_algopy.py中的test_derivative_on_sinh和test_scalar_to_vector中添加了with np.errstate(all='ignore')以静默警告。

  • 更改引用样式为alpha。

  • 用refs1.bib和zreferences.rst替换了bibliography.rst。

  • 删除了latex徽章。

  • 更改了sonar插件令牌。

  • 添加了CC_TEST_REPORTER_ID。

  • 修复了docs/numdifftools.rst中的拼写错误。

  • 添加了docs/make.bat。

  • 从.travis.yml中删除了Python 2.7。

  • 将test_requires从setup.cfg移动到setup.py。

  • 在setup.py中添加了Latex。

  • 将默认半径更改为0.0059,这在fornberg.py中的Taylor函数中似乎会导致更少的失败。

  • 更新了MANIFEST.in文件。

  • 修复问题#49:具有标量输入的向量值函数(长度为n)的雅可比矩阵的维度应为n X 1。

  • 更新了build_package.py文件。

  • 尝试消除除以零和无效警告。

  • 修复问题#52:梯度尝试在包含结果和full_output对象的输出元组上应用squeeze操作。

  • 由于包含斜杠,将docstring更改为rawdocstring。

  • 在适当的位置添加了“# pylint: disable=unused-argument”。

  • API更改:将“python setup.py doctests”替换为“python setup.py doctest”。

  • 移除了未使用的导入。

  • 修复了test_low_order_derivative_on_example_functions中的错误:在内外循环中都使用了相同的变量(i)。

  • 更新了pypi徽标和fornberg.py的文档。

  • 修复了失败的测试。

  • 更新了文档并添加了一个测试。

  • 由于在python2.7 32位上存在包冲突,将“python -m pip install –upgrade pytest”添加到appveyor.yml中。

  • 将“python -m pip install –upgrade setuptools”添加到appveyor.yml中,以避免构建错误。

  • 在appveyor.yml中尝试“python setup.py bdist_wheel”和“pip install numdifftools –find-links=dist”。

  • 在appveyor.yml中对“python -m pip install –upgrade pip”加上引号。

  • 将“python setup.py install”更改为
    • “python setup.py bdist_wheel”

    • pip install numdifftools –find-links=dist

  • 将“pip install –upgrade pip”添加到appveyor.yml中。

  • 更新了详细包文档。

  • 将缺少的pytest-pep8添加到安装中。

  • 更新徽标和appveyor.yml。

  • 正在进行的工作以协调approx_fprime和approx_fprime_cs的输出。

  • 将Taylor类添加到nd_algopy.py中。修复了fornberg.py中_get_best_taylor_coefficient的错误。

  • 更新了引用。将test_mod_c函数添加到test_multicomplex.py中。

  • 修复了一个错别字。

  • 移除了–strict-markers。

  • 修复了问题#39 TypeError:不支持的操作类型(/): ‘float’和‘Bicomplex’。

  • 修复了文档中的错别字。关闭问题#51。

  • 为nd_scipy添加了单独的测试。

  • 如果未安装LineProfiler,则在测试中跳过。

  • 从approx_hess1的调用中移除了过时的centered参数 + pep8。

  • 将Jacobian._increment方法移动到_JacobianDifferenceFunctions。

  • 在CStepGenerator.__init__中step_nom未使用。在setup.cfg中添加pytest.markers.slow。

  • 为了防止在travis上失败,使两个测试更加宽容。

  • 将nominal_step和base_step分别重命名为get_nominal_step和get_base_step。

  • 移除了从hypothesis导入的示例的过时导入。

  • 更新了测试。

  • 更新了覆盖率调用:coverage run -m py.test src/numdifftools/tests。

  • 删除了过时的conftest.py。

版本0.9.39,2019年6月10日

Robert Parini(1)
  • 修复问题#43:numpy future警告

版本0.9.38,2019年6月10日

Andrew Nelson(1)
  • MAINT:使用special.factorial而不是misc.factorial

Dougal J. Sutherland(1)
  • 在分发中包含LICENSE.txt

Per A Brodtkorb(140)
  • 调整hypothesis测试的运行时间以避免失败,并修复了pep8失败。

  • 修复了setup.cfg中的错误。

  • 在step_generators.py中将valarray函数替换为numpy.full。

  • 在导入algopy时添加了try except。

  • 更新了README.rst中使用的徽标。

  • 将numpy.testing.Tester替换为pytest。

  • 移除了对pyscaffold的依赖。

  • 简化了setup.py和setup.cfg。

  • 更新了.travis.yml配置。

  • 重新组织了文档。

  • 正在进行简化类的工作。

  • 将unittest替换为pytest。

  • 添加了finite_difference.py。

  • 将,替换为。

  • 恢复到coverage=4.3.4。

  • 新的尝试

  • 修复了冲突的导入

  • 缺少EPS的导入

  • 添加了缺少的FD_RULES = {}

  • 移除了固定的coverage,移除了对pyscaffold的依赖

  • 更新了.travis.yml和.appveyor.yml

  • 将conda通道omnia替换为conda-forge

  • 删除了注释掉的代码。在appveyor.yml中将pyqt设置为5

  • 更新了codeclimate检查

  • 停止支持Python 3.3和3.4。添加了对Python 3.6和3.7的支持

  • 简化了代码。

  • 将IPython固定在5.0版本,以防止测试服务器崩溃。

  • 在appveyor.yml中添加了line_profiler

  • 从requirements.txt中删除了line_profiler

  • 修复问题#37:无法在Python 2.7上安装

  • 在nd_statsmodels.py中添加了method='backward'方法

  • 跳过测试_profile_numdifftools_profile_hessian和TestDoProfile

  • 添加了缺失的import warnings

  • 为profile_numdifftools.py、_find_default_scale.py和run_benchmark.py中的脚本添加了测试

  • 为unittest.skipIf添加了原因

  • 将line_profiler添加到requirements中

  • 修复了缺失import warnings的问题

  • 重命名测试,因为我认为这个测试会搞乱覆盖率统计

  • 重新排列了测试

  • 添加了更多测试。

  • 清理了_find_default_scale.py

  • 删除了到depsy的链接

  • 回滚:安装cython和pip install setuptools

  • 由于崩溃,禁用了python 3.5的sonar-scanner -X

  • 回滚 [options.packages.find] 以再次排除测试

  • 添加了cython,并回滚到pip install setuptools

  • 更新sphinx到1.6.7

  • 尝试使用conda安装setuptools。

  • 将hypothesis和pytest添加到requirements.readthedocs.txt中

  • 设置setuptools版本为37.0

  • 将algopy、statsmodels和numpy添加到requirements.readthedocs.txt中

  • 希望文档能生成,限制了sphinx

  • 从测试覆盖率中删除了tests/目录的排除

  • 将依赖项添加到setup.cfg中

  • 重新添加six作为依赖项

  • 重构并删除了注释掉的代码。

  • 修复了文档字符串示例中的bug:确保传递给zeros的形状是整数。

  • 修复了c_abs,使其在Python 3.6上与algopy一起工作。

  • 修复了易变测试,并使其更健壮。

  • 修复了.travis.yml中的bug

  • 将taylor函数重构为Taylor类,以简化代码。

  • 修复了问题#35并添加了测试

  • 尝试简化复杂性

  • 使doctests更健壮

  • 更新了项目路径

  • 更改了algopy的安装

  • 修复了小错误

  • 更新了文档字符串

  • 将docstrings中的Example和Reference更改为Examples和References,以符合numpydoc样式。

  • 将CHANGES.rst重命名为CHANGELOG.rst

  • 重命名源路径

  • 由于algopy的bug或行为改变而进行的Hack。

  • 小修复。

  • 尝试减少复杂性

  • 减少了min_num_steps的认知复杂性

  • 简化了Jacobian中的代码

  • 合并了来自https://github.com/pbrod/numdifftools的master分支

  • 修复了问题#34 许可证说明。

  • 由于coverage中的bug导致code-climate测试报告失败,将coverage锁定为4.3.4。

  • 添加了查找默认缩放因子的脚本

  • 从sonarcube更新到sonarcloud

  • 确保形状是整数。

  • 将make_step_generator重构为step属性

  • 当在Hessian中将顺序设置为不同于1或2时,向用户发出警告消息

  • 更新了Gradient中的示例

  • 由于运行时间过长,回滚了-timid选项到coverage

  • 回滚了-pep8选项

  • pep8 + 在.travis.yml中添加了-timid的覆盖率运行,以增加未覆盖的覆盖率。

  • 重构taylor以减少复杂性

  • 不支持Python 3.3。添加了Python 3.6

  • 修复了一个小错误并更新了测试。

  • 删除了不必要的括号。减少了do_profile的复杂性

  • 使其与python3兼容

  • 删除了assert False

  • 使unittests更宽容。

  • 在nd_scipy.py和profiletools.py中更新了doctest,并在travis上安装了line_profiler

  • 使其与python 3兼容

  • 更新了测试

  • 添加了test_profiletools.py和testing.py中的capture_stdout_and_stderr

  • 优化了numdifftools.core.py以提高速度:fd_rules现在只计算一次。

  • 仅保留分发中的html文档。

  • 添加了doctest并更新了.pylintrc和requirements.txt

  • 减少测试时间,希望能在Travis CI上通过。

  • 优先使用静态方法而不是实例方法

  • 更好的内存管理:修复了问题 #27

  • 将statsmodels添加到requirements.txt

  • 添加了nd_statsmodels.py

  • 简化输入

  • 合并了来自https://github.com/pbrod/numdifftools的master分支

  • 更新了文档链接。

Robert Parini (4)
  • 避免在_get_logn中产生RuntimeWarning

  • 允许fd_derivative接受复数值函数

solarjoe (1)
  • doc: 添加了nd.directionaldiff示例

版本 0.9.20,2017年1月11日

Per A Brodtkorb (1)
  • 更新了作者电子邮件地址,以便twine能够上传到pypi。

版本 0.9.19,2017年1月11日

Per A Brodtkorb (1)
  • 更新了setup.py,尝试再次使上传到pypi工作。

版本 0.9.18,2017年1月11日

Per A Brodtkorb (38)
  • 更新了setup

  • 在帮助标题示例中添加了导入语句。

  • 使用hypothesis添加了更严格的测试。

  • 被迫使用wxagg后端

  • 将matplotlib.pyplot的导入移动到主函数中,以避免在travis上产生导入错误。

  • 添加了fd_derivative函数

  • 更新了引用。

  • 尝试自动化sonarcube分析

  • 将testcoverage添加到sonarqube和codeclimate

  • 简化了代码

  • 添加了.pylintrc + pep8

  • API的重大更改:将class成员变量self.f更改为self.fun

  • 修复了问题 #25(自0.9.15以来Jacobian损坏)

版本 0.9.17,2016年9月8日

Andrew Fowlie (1)
  • 修复了ReadTheDocs链接,如#21中提到的

Per A Brodtkorb (79)
  • 添加了对MinMaxStepgenerator的测试

  • 从core.py中删除了过时的文档

  • 更新了appveyor.yml

  • 修复了逆矩阵中的符号错误

  • 简化了代码

  • 添加了appveyor徽章,并将info.py与README.rst同步。

  • 从帮助标题中删除了plot

  • 添加了编程语言 :: Python :: 3.5

  • 简化了代码

  • 将bicomplex重命名为Bicomplex

  • 简化了example_functions.py

  • 将MinStepGenerator、MaxStepGeneretor和MinMaxStepGenerator移动到step_generators.py
    • 统一了步生成器

    • 将步生成器测试移动到test_step_generators.py

    • 简化了step_generators.py

  • 删除了重复的代码 + pep8

  • 将fornberg_weights移动到fornberg.py,并添加了taylor和derivative

  • 修复了print语句

  • 用range替换xrange

  • 添加了示例,并使计算更健壮。

  • 在nd_algopy.py中将‘backward’和‘reverse’的别名简化

  • 扩展了测试,并在testing.py中添加了test_docstrings

  • 用format()替换字符串插值

  • 删除了过时的参数

  • Fornberg方法的起始半径更小

  • 简化了“n”和“order”属性

  • 简化了default_scale

  • 删除了不必要的括号和代码。

  • 修复了Dea中的bug,并进行了一些小的重构。

  • 添加了对EpsAlg的测试

  • 避免使用可变默认参数,并优先使用静态方法而不是实例方法

  • 重构以减少循环复杂度

  • 将一些实例方法更改为静态方法

  • 重命名非Pythonic变量名

  • 打开xvfb(X虚拟帧缓冲区)以模拟显示。

  • 添加了对Jacobian的额外测试

  • 用def替换lambda函数

  • 删除了未使用的导入

  • 添加了对epsalg的测试

  • 修复了test_scalar_to_vector

  • 更新了test_docstrings

版本 0.9.15,2016年5月10日

Cody (2)
  • 迁移 % 字符串格式化

  • 迁移 % 字符串格式化

Per A Brodtkorb (28)
  • 更新了README.rst + setup.cfg

  • 用静态方法替换了实例方法 + pep8

  • 合并了来自https://github.com/pbrod/numdifftools的master分支

  • 修复了一个bug:替换了缺失的三重引号

  • 添加了depsy徽章

  • 添加了.quantificode的.checkignore

  • 添加了.codeclimate.yml

  • 修复了失败的测试

  • 将实例方法更改为静态方法

  • 使未类型化的异常处理更具体

  • 用静态方法替换了局部函数

  • 简化了测试

  • 删除了重复的代码,简化了_Derivative._get_function_name

  • 从testclimate中排除测试

  • 将test_functions.py重命名为example_functions.py,并添加了test_example_functions.py

Per A. Brodtkorb (2)
  • 合并了来自pbrod/autofix/wrapped2_to3_fix的pull request #17

  • 合并了来自pbrod/autofix/wrapped2_to3_fix-0的pull request #18

pbrod (17)
  • 更新了 conf.py

  • 如果使用 sphinx,则在 setup_requires 中添加了 numpydoc>=0.5, sphinx_rtd_theme>=0.1.7

  • 更新了 setup.py

  • 添加了 requirements.readthedocs.txt

  • 更新 README.rst,包含使用 conda 在 anaconda 包中安装的信息。

  • 更新了 conda 安装描述

  • 调整了参数数量,使其与覆盖的 ‘_default_base_step’ 方法一致

  • 将 codecov 添加到 .travis.yml

  • 尝试移除测试文件的覆盖范围

  • 添加了 directionaldiff 函数,用于计算方向导数。修复了 issue #16。还添加了支持测试和示例到文档中。

  • 修复了 issue #19,在雅可比矩阵中未正确处理多个观测值。

  • 将 rosen 函数移动到 numdifftools.testing.py

  • 从 numdifftools.testing 更新了 rosen 函数的导入

  • 简化代码 + pep8 + 添加了 TestResidue

  • 更新了 readme.rst,并用 format() 替换了字符串插值

  • 清理了 Dea 类 + pep8

  • 更新了 Wynn 外推法的参考信息。

版本 0.9.14,2015 年 11 月 10 日

pbrod (53)
  • 更新了 setup.py 的文档

  • 更新README.rst。

  • 更新了版本

  • 添加了更多文档

  • 更新了示例

  • 添加了 .landscape.yml,更新了 .coveragerc、.travis.yml

  • 在 README.rst 中添加了 coverageall。

  • 更新了 docs/index.rst

  • 删除了未使用的代码并添加了 tests/test_extrapolation.py

  • 更新了测试

  • 添加了更多测试

  • 重新添加了 c_abs c_atan2

  • 移除了对 wheel、numpydoc>=0.5 和 sphinx_rtd_theme>=0.1.7 的依赖(仅用于构建文档)

  • 更新了 .travis.yml 中的 conda 路径

  • 在 .travis.yml 中添加了 omnia 频道

  • 添加了 conda_recipe 文件,在 limits.py 中过滤了警告

版本 0.9.13,2015 年 10 月 30 日

pbrod (21)
  • 更新了 README.rst 和 CHANGES.rst。

  • 更新了 Limits。

  • 使其能够对复函数进行微分,并允许零阶导数。

  • BUG:向 Gradient、Hessian、Jacobian 添加了缺失的导数阶数 n。

  • 使测试更加健壮。

  • 根据 pyscaffold 版本 2.4.2 更新了 setup 结构。

  • 更新了 setup.cfg 并删除了重复的测试文件夹。

  • 删除了未使用的代码。

  • 添加了 appveyor.yml。

  • 添加了所需的 appveyor 安装脚本

  • 修复了 appveyor.yml 中的错误。

  • 在 requirements.txt 中添加了 wheel。

  • 更新了 appveyor.yml。

  • 删除了 import matplotlib。

Justin Lecher (1)
  • 修复了 numpy 的最小版本。

kikocorreoso (1)
  • 修复了 run_benchmark.py 中的一些打印语句,使其与 py3 兼容

版本 0.9.12,2015 年 8 月 28 日

pbrod (12)

  • 更新了文档。

  • 更新了 conf.py 中的版本。

  • 更新了 CHANGES.rst。

  • 重新实现了异常值检测,并使其更加健壮。

  • 添加了 limits.py 及其测试。

  • 更新了主要的测试文件夹。

  • 将 Richardson 和 dea3 移动到 extrapolation.py。

  • 发布新版本以上传到 PyPI。

版本 0.9.11,2015 年 8 月 27 日

pbrod (2)
  • 修复了 sphinx-build 并更新了文档。

  • 修复了 issue #9,反向微分法在附加参数的情况下失败。

版本 0.9.10,2015 年 8 月 26 日

pbrod (7)
  • 修复了 sphinx-build 并更新了文档。

  • 向 nd_algopy 添加了更多测试。

  • 不再支持 Python 2.6。

版本 0.9.4,2015 年 8 月 26 日

pbrod (7)
  • 修复了 sphinx-build 并更新了文档。

版本 0.9.3,2015 年 8 月 23 日

Paul Kienzle (1)
  • 添加了更有用的基准图。

pbrod (7)
  • 修复了错误并更新了文档。

  • 对 Algopy 的易于使用的接口进行了重大重构。

  • 在 nd_algopy 中添加了计算 n 阶导数的可能性,而不仅仅是 n=1。

  • 向易于使用的 Algopy 接口添加了测试。

版本 0.9.2,2015 年 8 月 20 日

pbrod (3)
  • 更新了文档

  • 在调用 print 函数时添加了括号

  • 为了通过 Travis 上 Python 2.6 和 3.2 的测试,使测试变得不那么严格。

版本 0.9.1,2015 年 8 月 20 日

Christoph Deil (1)
  • 修复了 Sphinx 构建

pbrod (47)
  • 使用略微不同的调用语法对 numdifftools 进行了彻底的重构。
    • 可以计算函数和使用的方法的阶数在 10-14 之间的导数。

    • 更新了文档和测试。

    • 修复了dea3中的错误。

    • 将StepsGenerator添加为自适应选项的替代品。

    • 添加了bicomplex类,用于测试复数的二阶导数的步进。

    • 添加了fornberg_weights_all,以稳定地计算最优有限差分规则。

    • 添加了高阶复数步进导数方法。

版本0.7.7,2014年12月18日

pbrod (35)
  • 使travis-ci工作,以自动运行测试。

  • 修复了Dea类中的错误。

  • 修复了Hessian更好的误差估计。

  • 修复了python 2.6的测试。

  • 将测试添加为子包。

  • 重构了numdifftools的文件夹。

版本0.7.3,2014年12月17日

pbrod (5)
  • 小的外观修复。

  • pep8和一些重构。

  • 通过重构简化了代码。

版本0.6.0,2014年2月8日

pbrod (20)
  • 更新并重命名README.md为README.rst。

  • 简化了Derivative的调用:删除了step_fix。

  • 删除了未使用的代码。

  • 简化并重构。现在可以选择step_num=1。

  • 将默认的step_nom从max(abs(x0), 0.2)更改为max(log2(abs(x0)), 0.2)。

  • pep8化代码并确保所有测试通过。

版本0.5.0,2014年1月10日

pbrod (9)
  • 更新了Gradient类和info.py中的示例。

  • 添加了vec2mat的测试和文档字符串以及外观修复。

  • 将代码重构为私有方法。

  • 修复了问题#7:Derivative(fun)(numpy.ones((10,5)) * 2)失败。

  • 使打印语句与python 3兼容。

版本0.4.0,2012年5月5日

pbrod (1)
  • 修复了inf和nan值的错误。

版本0.3.5,2011年5月19日

pbrod (1)
  • 修复了inf和nan值的错误。

版本0.3.4,2011年2月24日

pbrod (11)
  • 使步长自动选择的更健壮。

  • 添加了对algopy和scientificpython模块的易于使用的接口。

版本0.3.1,2009年5月20日

pbrod (4)
  • numdifftools的第一个版本发布在google.code上

版权所有 (c) 2009-2022,Per A. Brodtkorb,John D’Errico。保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:

  • 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。

  • 二进制形式的重新分发必须在不修改的情况下复制上述版权声明、本条件列表和以下免责声明,并在随同分发的文档和/或其他材料中提供。

  • 未经事先书面许可,不得使用版权所有者或其贡献者的姓名来认可或推广由此软件衍生出的产品。

本软件由版权所有者和贡献者“按原样”提供,任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证,均予以否认。在任何情况下,版权所有者或贡献者不应对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这种损害是否因本软件的使用或本软件的使用而引起,即使已被告知此类损害的可能性。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

numdifftools-0.9.41.tar.gz (6.7 MB 查看哈希值)

上传时间

构建分发

numdifftools-0.9.41-py2.py3-none-any.whl (100.2 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持