Index-> contents reference index search external Previous Next Up-> ckbs utility ckbs_process_grad process_grad_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_grad-> process_grad_ok.m process_grad_ok.m Headings-> Source Code

Source Code ``` function [ok] = process_grad_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); % Measurement terms are fixed at zero z = zeros(m, N); h = zeros(m, N); dh = zeros(m, n, N); rinv = zeros(m, m, N); % Initialization of process terms x = rand(n, N); g = rand(n, N); 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 gradient using ckbs_process_grad grad = ckbs_process_grad(x, g,dg, qinv); % --------------------------------------------------------- % Use finite differences to check gradient step = 1; for k = 1 : N for i = 1 : n % Check second partial w.r.t x(i,k), setting measurement % piece to 0 xm = x; xm(i, k) = xm(i, k) - step; Sm = ckbs_sumsq_obj(xm, z, g, h, dg, dh, qinv, rinv); % xp = x; xp(i, k) = xp(i, k) + step; Sp = ckbs_sumsq_obj(xp, z, g, h, dg, dh, qinv, rinv); % check = (Sp - Sm) / ( 2 * step); diff = grad(i, k) - check; ok = ok & ( abs(diff) < 1e-10 ); end end return end ```