我可以用scipy来检查函数的雅可比行列式吗?

eulz3vhy  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(116)

我有一个函数,我知道它的雅可比行列式的显式表达式,我想通过与有限元近似比较来检查这个雅可比行列式的正确性,Scipy有一个function that does a similar check on the gradient of a function,但我还没有找到雅可比行列式的等价表达式(如果它存在于Scipy中,我假设它会在这个清单中)。我想要一个类似地接受两个可调用对象的函数(函数和雅可比行列式)和ndarray(检查雅可比行列式近似值的点),并返回两者之间的误差。
函数的雅可比行列式可以写成函数分量的梯度形式,所以scipy.optimize.check_grad函数在这方面可能是有用的,但我不知道在实践中如何实现。
说我有功能

def fun(x, y):
    return y, x

用雅可比行列式

from numpy import ndarray, zeros
def jac(x, y):
    result = zeros((2, 2))
    result[0, 1] = 1
    result[1, 2] = 1
    return result

为了使用scipy函数,我应该如何分离这些变量呢?解必须是可推广到n维函数的,或者是否存在一个现有的函数来完成这个任务?
如果我局限于二维函数,我可能会

from scipy.optimize import check_grad

def fun1(x, y):
    return fun(x, y)[0]

def grad1(x, y):
    return jac(x, y0)[0]

check_grad(fun1, grad1, [1.5, -1.5])

...

但这个解并没有简单地推广到高维函数。

gorkyyrv

gorkyyrv1#

SciPy不是最好的工具,你应该使用一个可以自动升级的数字库。
JAX具有NumPy API的紧密实现,并添加了autograd functionality
PyTorch和Tensorflow等其他深度学习框架也能做到这一点,但没有NumPy接口的简单性。

相关问题