From ce56305318fcf617fc418413cdb913c00f89af78 Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer Date: Thu, 28 Jan 2021 15:07:05 +0100 Subject: [PATCH] mr_hessian.m: only compute inverse of A once --- matlab/optimization/mr_hessian.m | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/matlab/optimization/mr_hessian.m b/matlab/optimization/mr_hessian.m index a2b7c90aa..1012ee2fd 100644 --- a/matlab/optimization/mr_hessian.m +++ b/matlab/optimization/mr_hessian.m @@ -233,10 +233,11 @@ if outer_product_gradient sd0(j,1)=min(prior_std(j), sd(j)); %prior std sd0(j,1)=10^(0.5*(log10(sd0(j,1))+log10(sdh(j,1)))); end + inv_A=inv(A); ihh=ihh./(sd*sd').*(sd0*sd0'); %inverse outer product with modified std's - igg=inv(A)'*ihh*inv(A); % inverted rescaled outer product hessian with modified std's - hh_mat=inv(igg); % outer product rescaled hessian with modified std's - hh_mat0=inv(A)'*hh_mat*inv(A); % outer product hessian with modified std's + igg=inv_A'*ihh*inv_A; % inverted rescaled outer product hessian with modified std's + % hh_mat=inv(igg); % outer product rescaled hessian with modified std's + hh_mat0=inv_A'/igg*inv_A; % outer product hessian with modified std's % sd0=sqrt(1./diag(hh0)); %rescaled 'standard errors' using second order derivatives % sd=sqrt(diag(igg)); %rescaled 'standard errors' using outer product % igg=igg./(sd*sd').*(sd0*sd0'); %rescaled inverse outer product with 'true' std's