天天看点

已知函数表达式,估计海塞矩阵(Hessian Matrix)一、参考资料出处二、matlab实例验证

文章目录

  • 一、参考资料出处
  • 二、matlab实例验证

一、参考资料出处

  1.Computing the elements of a Hessian matrix with finite difference

  2.Forward finite difference approximation for second order cross derivatives

  3.4-point-like central finite difference for second partial derivatives

二、matlab实例验证

%有限中心差分估算海塞矩阵
function hess = est_hess(fun, p, nvars, delta)
hess = zeros(nvars, nvars);
for i = 1 : nvars
    for j = 1 : nvars
        if i <= j
            p1 = p;
            p1(i) = p1(i) - delta(i);
            p1(j) = p1(j) - delta(j);
            f1 = fun(p1);
            
            p2 = p;
            p2(i) = p2(i) - delta(i);
            p2(j) = p2(j) + delta(j);
            f2 = fun(p2);
            
            p3 = p;
            p3(i) = p3(i) + delta(i);
            p3(j) = p3(j) - delta(j);
            f3 = fun(p3);
            
            p4 = p;
            p4(i) = p4(i) + delta(i);
            p4(j) = p4(j) + delta(j);
            f4 = fun(p4);
            
            hess(i,  j) = (f4 - f3 - f2 + f1) / (4.0 * delta(i) * delta(j));
        else
            hess(i,  j) = hess(j,  i);
        end
    end
end

end
           
clc
clear

syms x y z real
f = x*y*sin(z) + x*z*sin(y) + y*z*sin(x);
hess_syms = hessian(f,[x,y,z]);
x = 1;
y = 2;
z = 3;
hess = eval(hess_syms)

fun = @(p) p(1)*p(2)*sin(p(3)) + p(1)*p(3)*sin(p(2)) + p(2)*p(3)*sin(p(1));  % x  -> p(1),  y  -> p(2),  z  -> p(3)
delta = [0.01, 0.01, 0.01];
p = [x, y, z];
nvars = 3;
est_hess = est_hess(fun, p, nvars, delta)

           
已知函数表达式,估计海塞矩阵(Hessian Matrix)一、参考资料出处二、matlab实例验证

继续阅读