文章目录
- 一、参考资料出处
- 二、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)