一个免费的开源python包,用于快速精确地逼近费米-狄拉克积分。

fdint的Python项目详细描述


费米-狄拉克积分(fdint)

fdint是一个免费的开源python包,它提供了快速的 费米-狄拉克近似(64位浮点)逼近 整数阶和半整数阶的积分,基于 福岛教授[1-3]。fdint主要用Cython编写,其中 通过中间C源编译为本机代码,从而 在C类表演中。

[1]T. Fukushima, “Precise and fast computation of Fermi-Dirac integral of integer and half integer order by piecewise minimax rational approximation,” Applied Mathematics and Computation, vol. 259, pp. 708-729, May 2015. DOI: 10.1016/j.amc.2015.03.009
[2]T. Fukushima, “Precise and fast computation of inverse Fermi-Dirac integral of order 1/2 by minimax rational function approximation,” Applied Mathematics and Computation, vol. 259, pp. 698-707, May 2015. DOI: 10.1016/j.amc.2015.03.015
[3]T. Fukushima, “Precise and fast computation of generalized Fermi-Dirac integral by parameter polynomial approximation,” 2014. DOI: 10.13140/2.1.1094.6566

source codedocumentation(即将到来)受到隆重的接待 由Github提供。

安装

为了使用fdint,必须有一个工作的Python分布 安装。Python3的支持还没有测试,所以Python2.7是 建议。在继续之前,您还需要安装Numpy。如果 您不熟悉python,可以考虑安装 Python distribution那是用numpy预先包装的。

来自Pypi

这是安装fdint的推荐方法。PyPi是Python 包索引,其中包含许多可以轻松安装的python包 只有一个命令。要从PyPi安装fdint,请打开一个命令 提示并运行以下命令:

pip install fdint

来自github

要从github安装最新版本的fdint,请转到 FDINT releases page,下载最新的.zip.tar.gz 源包,提取其内容,然后运行python setup.py install 从提取的目录中。

测试

安装后,您可以运行以下命令来测试软件包:

python -m fdint.tests

如果安装了Matplotlib,还可以绘制 通过运行以下命令可使用的功能:

python -m fdint.examples.plot

教程

首先,从命令行启动一个交互式python shell:

$ python

接下来,从fdint包导入所有内容:

>>> from fdint import *

现在你可以方便地使用费米-狄拉克积分和导数了 函数,fdkdfdk

>>> fdk(k=0.5,phi=-10)
4.0233994366893939e-05
>>> fdk(0.5,-10)
4.0233994366893939e-05
>>> fdk(k=0.5,phi=5)
7.837976057293096
>>> fdk(k=0.5,phi=50)
235.81861512588432
>>> dfdk(k=0.5,phi=-10) # first derivative
4.0233348580568672e-05

也可以将numpy数组作为phi:

>>> import numpy
>>> fdk(k=0.5,phi=numpy.linspace(-100,10,3))
array([  3.29683149e-44,   2.53684104e-20,   2.13444715e+01])

如果您请求未实现的订单或衍生产品,则 引发了notimplementederror:

>>> fdk(1,0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "fdint/__init__.py", line 50, in fdk
    raise NotImplementedError()
NotImplementedError

对于半导体计算,parabolicdparaboliciparabolicnonparabolicdnonparabolic提供:

>>> parabolic(0)
0.7651470246254078
>>> dparabolic(0)
0.6048986434216304
>>> iparabolic(.7)
-0.11156326391089397
>>> nonparabolic(0,0)
0.7651470705342294
>>> nonparabolic(0,0.07) # InAs
1.006986898726782
>>> dnonparabolic(0,0.07) # InAs
0.8190058991462952

基准

下面是一些基准测试运行。首先,numpy.exp

$ python -m timeit -s "import numpy; from numpy import exp; x=numpy.linspace(-100,10,10000)" "exp(x)"
10000 loops, best of 3: 72.6 usec per loop

k=1/2,fdint.fd1h阶费米-狄拉克积分的相同参数, 只需要大约2.2倍的运行时间:

$ python -m timeit -s "from fdint import fd1h; import numpy; x=numpy.linspace(-100,10,10000)" "fd1h(x)"
10000 loops, best of 3: 158 usec per loop

类似地,k=1/2,fdint.ifd1h阶的逆费米-狄拉克积分, 只占用numpy.log

的大约2.4倍运行时间
$ python -m timeit -s "import numpy; from numpy import exp,log; x=numpy.linspace(-100,10,10000);y=exp(x)" "log(y)"
10000 loops, best of 3: 69.9 usec per loop
$ python -m timeit -s "from fdint import fd1h,ifd1h; import numpy; x=numpy.linspace(-100,10,10000);y=fd1h(x)" "ifd1h(y)"
10000 loops, best of 3: 178 usec per loop

广义费米-狄拉克积分也相当快。为了秩序 k=1/2,非分解性为零,fdint.gfd1h只需要大约3.7倍的运行时间 零非分解性:

$ python -m timeit -s "from fdint import gfd1h; import numpy; x=numpy.linspace(-100,10,10000);b=numpy.zeros(10000);b.fill(0.)" "gfd1h(x,b)"
1000 loops, best of 3: 266 usec per loop

但是,如果存在显著的非分解性,fdint.gfd1h可以 最长约10倍于numpy.exp

$ python -m timeit -s "from fdint import gfd1h; import numpy; x=numpy.linspace(-100,10,10000);b=numpy.zeros(10000);b.fill(0.1)" "gfd1h(x,b)"
1000 loops, best of 3: 467 usec per loop

$ python -m timeit -s "from fdint import gfd1h; import numpy; x=numpy.linspace(-100,10,10000);b=numpy.zeros(10000);b.fill(0.3)" "gfd1h(x,b)"
/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/timeit.py:6: RuntimeWarning: gfd1h: less than 24 bits of accuracy
1000 loops, best of 3: 696 usec per loop

非分解带的完整计算需要大约5-17倍于 numpy.exp,取决于非分解性的级别(注意:对于 由于某些原因,此命令的计时过高 从命令行。当在ipython内部计时时,它工作正常:

$ ipython
In [1]: from fdint import *

In [2]: import numpy

In [3]: phi = numpy.linspace(-100,10,10000)

In [4]: %timeit numpy.exp(phi)
10000 loops, best of 3: 72.9 µs per loop

In [5]: %timeit parabolic(phi)
10000 loops, best of 3: 165 µs per loop

In [6]: alpha = numpy.empty(10000); alpha.fill(0.0) # parabolic

In [7]: %timeit nonparabolic(phi, alpha)
1000 loops, best of 3: 346 µs per loop

In [8]: alpha = numpy.empty(10000); alpha.fill(0.07) # InAs

In [9]: %timeit nonparabolic(phi, alpha)
1000 loops, best of 3: 695 µs per loop

In [10]: alpha = numpy.empty(10000); alpha.fill(0.15) # InSb

In [11]: %timeit nonparabolic(phi, alpha)
/usr/local/bin/ipython:257: RuntimeWarning: nonparabolic: less than 24 bits of accuracy
1000 loops, best of 3: 1.26 ms per loop

文档

documentation(即将推出)由github优雅地主持。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava