function indices = ppp_indices (names,sympar,sympars) ## usage: indices = ppp_indices (names,sympar) ## ## names: column vector of component names ## sympar symbolic parameter structure for system ## sympars symbolic parameter structure for sensitivity system ## Returns a matrix indices with 3 columns, one row per name ## First col: index of ith parameter of sensitivity system ## Second col: index of ith sensitivity parameter of sensitivity system ## Third col : index of ith parameter of system ## Copyright (C) 2002 by Peter J. Gawthrop ## Sanity check if nargin<3 printf("Usage: ppp_indices (names,sympar,sympars)\n"); return endif ## Set up the indices = []; [n,m] = size(names); for i = 1:n p_name = deblank(names(i,:)); s_name = sprintf("%ss", p_name); if struct_contains(sympars, p_name) i_ps = eval(sprintf("sympars.%s;", p_name)); if struct_contains(sympars, s_name) i_s = eval(sprintf("sympars.%s;", s_name)); if struct_contains(sympar, p_name) i_p = eval(sprintf("sympar.%s;", p_name)); indices_i = eval(sprintf("[%i,%i,%i];", i_ps, i_s, i_p)); indices = [indices; indices_i]; else printf("Parameter %s does not exist in sympar: ignoring\n", p_name) endif else printf("Sensitivity parameter %s does not exist in sympars: ignoring \ parameter %s\n", s_name, p_name); endif else printf("Parameter %s does not exist in sympars: ignoring\n", p_name) endif endfor endfunction