繁体   English   中英

寻找多维函数的Hessian矩阵

[英]Finding Hessian matrix of multi dimensional function

我正在尝试创建 10 维凸函数。 我知道其 Hessian 矩阵的特征值必须为正,函数才能为凸函数。 我正在做下面的事情来找到hessian矩阵,但它的输入是一个数组,我不知道如何将一个函数表示为数组。

def hessian(x):
    """
    Calculate the hessian matrix with finite differences
    Parameters:
       - x : ndarray
    Returns:
       an array of shape (x.dim, x.ndim) + x.shape
       where the array[i, j, ...] corresponds to the second derivative x_ij
    """
    x_grad = np.gradient(x) 
    hessian = np.empty((x.ndim, x.ndim) + x.shape, dtype=x.dtype) 
    for k, grad_k in enumerate(x_grad):
        # iterate over dimensions
        # apply gradient again to every component of the first derivative.
        tmp_grad = np.gradient(grad_k) 
        for l, grad_kl in enumerate(tmp_grad):
            hessian[k, l, :, :] = grad_kl
    return hessian

x = np.random.randn(100,100)
t=hessian(x)

正如您从中获得此代码的问题所述, x是参数空间中均匀间隔网格节点处的函数值,而不是函数本身。

如果无法通过分析计算函数的 Hessian,则必须使用本示例代码中的有限差分公式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM