Index-> contents reference index search external Previous Next Up-> ckbs utility ckbs_process_hes process_hes_ok.m ckbs-> license ckbs_t_general ckbs_nonlinear ckbs_L1_nonlinear ckbs_affine ckbs_affine_singular ckbs_L1_affine utility all_ok.m whatsnew wishlist bib utility-> ckbs_t_obj ckbs_t_grad ckbs_t_hess ckbs_diag_solve ckbs_bidiag_solve ckbs_bidiag_solve_t ckbs_blkbidiag_symm_mul ckbs_blkdiag_mul ckbs_blkdiag_mul_t ckbs_blkbidiag_mul_t ckbs_blkbidiag_mul ckbs_blktridiag_mul ckbs_sumsq_obj ckbs_L2L1_obj ckbs_sumsq_grad ckbs_process_grad ckbs_sumsq_hes ckbs_process_hes ckbs_tridiag_solve ckbs_tridiag_solve_b ckbs_tridiag_solve_pcg ckbs_newton_step ckbs_newton_step_L1 ckbs_kuhn_tucker ckbs_kuhn_tucker_L1 ckbs_process_hes-> process_hes_ok.m process_hes_ok.m Headings-> Source Code

ckbs_process_hes Example and Test

Source Code

function [ok] = process_hes_ok()
ok = true;
% --------------------------------------------------------
% You can change these parameters
m    = 1;   % number of measurements per time point
n    = 2;   % number of state vector components per time point
N    = 3;   % number of time points
% ---------------------------------------------------------
%  Define the problem
rand('seed', 123);
dg   = zeros(n, n, N);
qinv = zeros(n, n, N);
for k = 1 : N
dg(:, :, k)   = rand(n, n);
tmp           = rand(n, n);
qinv(:, :, k) = (tmp + tmp') / 2 + 2 * eye(n);
end
% ---------------------------------------------------------
% Compute the Hessian using ckbs_process_hes
[D, A] = ckbs_process_hes(dg, qinv);
% ---------------------------------------------------------
H    = zeros(n * N , n * N );
for k = 1 : N
index           = (k - 1) * n + (1 : n);
H(index, index) = D(:, :, k);
if k > 1
H(index - n, index) = A(:, :, k)';
H(index, index - n) = A(:, :, k);
end
end
%
% Use finite differences to check Hessian
x    = rand(n, N);
g    = rand(n, N);
%
step   = 1;
for k = 1 : N
for i = 1 : n
% Check second partial w.r.t x(i, k)
xm       = x;
xm(i, k) = xm(i, k) - step;
%
xp       = x;
xp(i, k) = xp(i, k) + step;
%