function [y,y_s] = ppp_sim (system_name,x_0,u,t,par,i_s,external)
## mtt_sim: Simulates system sensitivity functions.
## usage: [y,y_s] = ppp_sim (system_name,x_0,u,t,par,i_s)
## system_name string containing name of the sensitivity system
## x_0 initial state
## u system input (one input per row)
## t row vector of time
## par system parameter vector
## i_s indices of sensitivity parameters
if nargin<7
external = 0;
endif
## Some sizes
n_s = length(i_s);
n_t = length(t);
for i = 1:n_s
## Set sensitivity parameters
par(i_s(i)) = 1.0;
par(complement(i_s(i),i_s)) = 0;
if external
par_string = "";
for i_string=1:length(par)
par_string = sprintf("%s %s", par_string, num2str(par(i_string)));
endfor
data_string = system(sprintf("./%s_ode2odes.out %s | cut -f 2-%i", \
system_name, par_string, 1+n_s));
Y = str2num(data_string)';
else
Y = eval(sprintf("%s_sim(x_0,u,t,par);", system_name));
endif
[n_Y,m_Y] = size(Y);
n_y = n_Y/2;
if i==1
y = Y(1:2:n_Y,:); # Save up the output
y_s = zeros(n_s*n_y, n_t); # Initialise for speed
endif
y_s((i-1)*n_y+1:i*n_y,:) = Y(2:2:n_Y,:); # Other sensitivities
endfor
title("");
plot(t,y);
endfunction