0001 function meas_icov = calc_meas_icov( inv_model )
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 meas_icov = eidors_obj('get-cache', inv_model, 'meas_icov');
0027
0028 if ~isempty(meas_icov)
0029 eidors_msg('calc_meas_icov: using cached value', 3);
0030 return
0031 end
0032
0033 if isfield(inv_model,'meas_icov')
0034 if isnumeric(inv_model.meas_icov);
0035 meas_icov = inv_model.meas_icov;
0036 else
0037 meas_icov= feval( inv_model.meas_icov, inv_model);
0038 end
0039 else
0040 meas_icov= default_meas_icov( inv_model );
0041 end
0042
0043 eidors_obj('set-cache', inv_model, 'meas_icov', meas_icov);
0044 eidors_msg('calc_meas_icov: setting cached value', 3);
0045
0046
0047
0048
0049 function meas_icov = default_meas_icov( inv_model )
0050
0051 fwd_model= inv_model.fwd_model;
0052 if isfield(fwd_model,'normalize_measurements')
0053 normalize = fwd_model.normalize_measurements;
0054 else
0055 normalize = 0;
0056 end
0057
0058 n = calc_n_meas( fwd_model );
0059
0060 if ~normalize
0061 meas_icov= speye( n );
0062 else
0063 homg_data= solve_homg_image( fwd_model );
0064
0065 meas_icov = sparse(1:n, 1:n, ( homg_data.meas ).^2 );
0066 end
0067
0068 function n_meas = calc_n_meas( fwd_model )
0069
0070 n_meas = 0;
0071 for i= 1:length(fwd_model.stimulation );
0072 n_meas = n_meas + size(fwd_model.stimulation(i).meas_pattern,1);
0073 end
0074
0075
0076 function homg_data = solve_homg_image( fwd_mdl )
0077 n_elems= size( fwd_mdl.elems , 1);
0078 mat= ones( n_elems, 1);
0079 homg_img= eidors_obj('image', 'homogeneous image', ...
0080 'elem_data', mat, 'fwd_model', fwd_mdl );
0081 homg_data=fwd_solve( homg_img);