解决一个或多个变量中的自动数值微分问题。
numdifftools的Python项目详细描述
numdifftools
" rel="nofollow"> >> >>>>>>>>>> >> >> >>/a>>>/a>>>>/a>><<
numdifftools库是一套用python编写的工具 求解一个或多个变量的自动数值微分问题。 有限差分是以一种自适应的方式使用的,与richardson相结合 外推法,以提供最精确的结果。 用户可以配置许多选项,如更改方法的顺序或 外推,甚至允许用户指定是否复杂的步骤, 使用中央、向前或向后差异。
提供的方法是:
- 导数 :计算任何标量函数上1到10阶的导数。
- 方向差异 :计算n个变量函数的方向导数
- 梯度 :计算一个或多个变量的标量函数的梯度向量。
- 雅可比矩阵 :计算一个或多个变量的向量值函数的雅可比矩阵。
- hessian :计算一个或多个变量的标量函数的所有二阶偏导数的hessian矩阵。
- hessdiag :仅计算hessian矩阵的对角元素
所有这些方法都会对结果产生误差估计。
numdifftools还提供了一个易于使用的接口来计算派生 在 \u algopy 。algopy代表算法 python中的差异。 algopy的目的是评估 函数的算法微分模式 作为python程序实现的。
入门
可视化tanh函数的高阶导数
< Buff行情>>>> 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()
在x==1时,计算exp(x)的第一和第二导数:
>>> 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
求和梯度(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
求和梯度(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.导数
文档和代码
numdifftools在python 2.7+和python 3.0+上工作。
官方版本可在以下网址获得:http://pypi.python.org/pypi/numdifftools" rel="nofollow">http://pypi.python.org/pypi/numdifftools
官方文档可在以下网址获得: http://numdifftools.readthedocs.io/en/latest/
出血边缘:https://github.com/pbrod/numdifftools" rel="nofollow">https://github.com/pbrod/numdifftools
安装
如果安装了pip,只需键入:
< Buff行情> $pip安装numdifftools以获得最新的稳定版本。使用pip还有一个优点 要求将自动安装。
单元测试
若要测试工具箱是否正在工作,请将以下内容粘贴到交互式 python会话:
import numdifftools as nd nd.test('--doctest-modules', '--disable-warnings')
确认
numdifftools包 python 由per a.brodtkorb编写 基于 由john d'errico编著的Matlab
numdifftools从0.9版起已经扩展了一些功能 在josef perktell编写的statsmodels.tools.numdiff模块中找到 [perktold2014] 和 [verheyleweghen2014] 的项目报告中
参考文献
< COL/> < COL/> <正文> < > <表>[Derrico2006] | d'errico,J.R.(2006年), 自适应鲁棒数值微分 http://www.mathworks.com/matlabcentral/fileexchange/13490自适应鲁棒数值微分 |
[Perktold2014] | Perktell,J(2014),Numdiff套餐 http://statsmodels.sourceforge.net/0.6.0//u modules/statsmodels/tools/numdiff.html |
[Lantoine2010] | 格雷戈里·兰托因(2010年), 一种低推力弹道鲁棒优化方法 多体环境,乔治亚理工学院博士论文 |
[Lantoineetal2012] | Gregory Lantoine、R.P.Russell和T.Dargent(2012年) 用多复变量自动计算高阶 衍生品,数学软件上的ACM交易, 第38卷,第3期,第16条,2012年4月,21页, http://doi.acm.org/10.1145/2168773.2168774 |
[Luna-Elizarrarasetal2012] | M.E.Luna Elizarraras,M.Shapiro,D.C.Struppa1, A.Vajiac(2012年) 双复数及其初等函数, 一本数学杂志, 第14卷,第2期,(61-80)。2012年6月。 |
更改日志
版本0.9.39 2019年6月10日
< DL>版本0.9.38 2019年6月10日
< DL>0.9.20版,2017年1月11日
< DL>版本0.9.192017年1月11日
< DL>0.9.18版,2017年1月11日
< DL>版本0.9.17,2016年9月8日
< DL> 安德鲁·福莉(1):版本0.9.15,2016年5月10日
< DL> 科迪(2):版本0.9.14,2015年11月10日
< DL>版本0.9.13,2015年10月30日
< DL>版本0.9.12,2015年8月28日
PBrod(12):
< Buff行情>- 更新文档。
- conf.py.中的更新版本
- 更新的更改。重新开始。
- 重新实现离群点检测,使其更加健壮。
- 通过测试添加了limits.py。
- 更新了主测试文件夹。
- 将Richardson和Dea3移至外推.py.
- 制作新版本以便上载到PYPI。
版本0.9.11,2015年8月27日
< DL>版本0.9.10,2015年8月26日
< DL>0.9.4版,2015年8月26日
< DL>版本0.9.3,2015年8月23日
< DL>版本0.9.2,2015年8月20日
< DL>版本0.9.1,2015年8月20日
< DL>0.7.7版,2014年12月18日
< DL>0.7.3版,2014年12月17日
< DL>版本0.6.0,2014年2月8日
< DL>0.5.0版,2014年1月10日
< DL>版本0.4.0,2012年5月5日
< DL>版本0.3.5,2011年5月19日
< DL>版本0.3.4,2011年2月24日
< DL>0.3.1版,2009年5月20日
< DL>版权所有(c)2009-2018,根据A.Brodtkorb,John D'Errico 保留所有权利。
以源和二进制形式重新分配和使用,有无 如果满足以下条件,则允许修改:
- 重新发布源代码必须保留上述版权声明 条件列表和以下免责声明。
- 二进制形式的再分配必须复制上述版权声明, 文件中的条件列表和以下免责声明 和/或分发时提供的其他材料。
- 无论是著作权人的名字还是它的名字 贡献者可用于支持或推广来自 此软件未经事先书面许可。
本软件由版权所有者和贡献者"按原样"提供。 以及任何明示或默示保证,包括但不限于 对适销性和特定用途适用性的默示保证是 否认的在任何情况下,版权持有人或贡献者均不承担责任 对于任何直接的、间接的、偶然的、特殊的、惩戒性的或间接的 损害赔偿(包括但不限于购买替代货物或 但是 根据任何责任理论,无论是在合同中,严格责任, 或因使用而引起的侵权行为(包括疏忽或其他) 即使已被告知可能会发生此类损坏,也不例外。
[verheyleweghen2014] | 阿德里安·verheyleweghen(2014) 用多复步法计算高阶导数, 项目报告,NTNU |