我有一个函数,我知道它的雅可比行列式的显式表达式,我想通过与有限元近似比较来检查这个雅可比行列式的正确性,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])
...
但这个解并没有简单地推广到高维函数。
1条答案
按热度按时间gorkyyrv1#
SciPy不是最好的工具,你应该使用一个可以自动升级的数字库。
JAX具有NumPy API的紧密实现,并添加了autograd functionality。
PyTorch和Tensorflow等其他深度学习框架也能做到这一点,但没有NumPy接口的简单性。