- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基于此处提供的解释 1 ,我正在尝试使用相同的想法来加速以下积分:
import scipy.integrate as si
from scipy.optimize import root, fsolve
import numba
from numba import cfunc
from numba.types import intc, CPointer, float64
from scipy import LowLevelCallable
def integrand(t, *args):
a = args[0]
c = fsolve(lambda x: a * x**2 - np.exp(-x**2 / a), 1)[0]
return c * np.exp(- (t / (a * c))**2)
def do_integrate(func, a):
return si.quad(func, 0, 1, args=(a,))
print(do_integrate(integrand, 2.)[0])
根据前面的引用资料,我尝试使用numba/jit,并按照以下方式修改前面的 block :
import numpy as np
import scipy.integrate as si
from scipy.optimize import root
import numba
from numba import cfunc
from numba.types import intc, CPointer, float64
from scipy import LowLevelCallable
def jit_integrand_function(integrand_function):
jitted_function = numba.jit(integrand_function, nopython=True)
@cfunc(float64(intc, CPointer(float64)))
def wrapped(n, xx):
return jitted_function(xx[0], xx[1])
return LowLevelCallable(wrapped.ctypes)
@jit_integrand_function
def integrand(t, *args):
a = args[0]
c = fsolve(lambda x: a * x**2 - np.exp(-x**2 / a), 1)[0]
return c * np.exp(- (t / (a * c))**2)
def do_integrate(func, a):
return si.quad(func, 0, 1, args=(a,))
do_integrate(integrand, 2.)
但是,这个实现给了我错误
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Failed in nopython mode pipeline (step: convert make_function into JIT functions)
Cannot capture the non-constant value associated with variable 'a' in a function that will escape.
File "<ipython-input-16-3d98286a4be7>", line 20:
def integrand(t, *args):
<source elided>
a = args[0]
c = fsolve(lambda x: a * x**2 - np.exp(-x**2 / a), 1)[0]
^
During: resolving callee type: type(CPUDispatcher(<function integrand at 0x11a949d08>))
During: typing of call at <ipython-input-16-3d98286a4be7> (14)
During: resolving callee type: type(CPUDispatcher(<function integrand at 0x11a949d08>))
During: typing of call at <ipython-input-16-3d98286a4be7> (14)
错误是因为我在被积函数中使用了 scipy.optimize 中的 fsolve。
我想知道是否有解决此错误的方法,以及是否可以在此上下文中将 scipy.optimize.fsolve 与 numba 一起使用。
最佳答案
我为 Minpack 编写了一个小的 python 包装器,称为 NumbaMinpack
,它可以在 numba 编译函数中调用:https://github.com/Nicholaswogan/NumbaMinpack .你可以用它来 @njit
被积函数:
import scipy.integrate as si
from NumbaMinpack import hybrd, minpack_sig
from numba import njit, cfunc
import numpy as np
@cfunc(minpack_sig)
def f(x, fvec, args):
a = args[0]
fvec[0] = a * x[0]**2.0 - np.exp(-x[0]**2.0 / a)
funcptr = f.address # pointer to function
@njit
def integrand(t, *args):
a = args[0]
args_ = np.array(args)
x_init = np.array([1.0])
sol = hybrd(funcptr,x_init,args_)
c = sol[0][0]
return c * np.exp(- (t / (a * c))**2)
def do_integrate(func, a):
return si.quad(func, 0, 1, args=(a,))
print(do_integrate(integrand, 2.)[0])
在我的电脑上,上述代码耗时 87 µs,而纯 python 版本耗时 2920 µs
关于scipy - 有没有办法将 scipy.optimize.fsolve 与 jit_integrand_function 和 scipy.integrate.quad 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62924588/
为什么下面的代码会返回 ValueError? from scipy.optimize import fsolve import numpy as np def f(p,a=0): x,y =
我没有太多使用 Python 的经验,但我决定尝试用它来求解以下方程组: x = A * exp (x+y) y = 4 * exp (x+y) 我想求解这个系统并绘制 x 和 y 作为 A 的函数。
我用 Python 编写了一个脚本,它使用 fsolve 找到一个相当复杂的函数的零。它的工作方式如下。有一个类只是简单地存储函数的参数。该类有一个 evaluate 方法,它根据存储的参数返回一个值
有没有办法在 MATLAB 中使用 fsolve,指定解的边界?即所有解决方案变量 > 0 最佳答案 不是直接的,但解决这个问题的一个方法是在你的方程式中添加一个项来约束你的问题。 我没有优化工具箱,
每当 fsolve 完成时,它都会给出输出 Equation solved. fsolve completed because the vector of function values is nea
我正在求解一个包含许多常数的非线性方程。 我创建了一个函数来解决这样的问题: def terminalV(Vt, data): from numpy import sqrt ro_p,
我有下面的工作功能。我有一个函数,可以从中计算一阶和二阶导数。然后我需要找到一阶导数为零而第二个导数为负的 theta 值。我必须为大量点计算这个。点数等于K1和K2的长度。使用 sympy 我计算一
我想使用 fsolve 求解 alpha 和 beta(来自 Beta 发行版) import numpy as np from scipy.optimize import fsolve def me
我一直在尝试找到一种方法,使用另一个已知变量来求解函数的一个变量。例如。 def f(x,y): return x+y sol=scipy.optimize.fsolve(f(x,1),0)
有了函数 f(x,y,z),我需要求解限制 f(x,y,z) = 0,然后绘制它。我试图为每一对 (y,z) 找到 f(x,y,z) = 0 的值 x: from numpy import * fro
我试图通过在 python 2.7 中使用 scipy.optimize.fsolve 找到方程组的解。目标是计算化学系统的平衡浓度。由于问题的性质,一些常量非常小。现在对于某些组合,我确实得到了适当
我试图找到一个二维优化问题的根,形式如下(下面不是实际的方程,因为它很长,这只是问题类型的一个例子)。 def my_function(a,b): c = exp(a) + b d =
我目前正在尝试从我的代码(粘贴在下面)中找到 2 个方程的截距。我正在使用 fsolve 并且在一部分中成功地使用了它,但我无法让它在第二部分工作。 令人困惑的是,它没有显示错误,如果您将此代码粘贴到
根据我得到的帮助here我一直在尝试在我的脚本中实现它,但我未能巧妙地运行它。 我需要对 4072x3080 图像的每个像素使用此算法,整个过程大约需要 1 小时 30 秒,所以我尝试以某种方式强制它
scipy.optimize.fsolve 似乎不适用于调用自身的函数。这是一个 MWE from scipy.optimize import fsolve def f(x): if f.n=
我想使用 Python 求解 6 个非线性方程组。我发现我可以很容易地使用 scipy 的 fsolve 来求解 3 个非线性方程组。然而,当我将其扩展到更大的系统时,我发现该解并不能解决方程组。有什
我有以下功能: Eq = @(x1, x2) [x1-6, x2+3]; fsolve(Eq, [4 1]) 但出现以下错误: ??? Input argument "x2" is undefined
fsolve 从起始估计中找到非线性方程(系统)的解。我可以对我的函数调用进行矢量化,以在多个起点上使用 fsolve 并可能找到多个解决方案,如 here 所解释的那样。在 this问题描述了如何使
我正在使用此代码获取非线性函数的零点。最肯定的是,该函数应该有 1 个或 3 个零 import numpy as np import matplotlib.pylab as plt from sci
我在 matlab 上有一个程序,但我想在 python 中转换,我的 matlab 代码是: function [f]=equation1(x) %options = optimoptions('f
我是一名优秀的程序员,十分优秀!