-
Notifications
You must be signed in to change notification settings - Fork 9
Matlab Example Becker
Clemens Kreutz edited this page Oct 29, 2018
·
2 revisions
At this page, it is illustrated how the benchmark models are used in Matlab based on the Becker model.
The following commands are sufficient for simulating the Becker model in Matlab:
cd Benchmark-Models % set working directory
addpath('../Matlab_scripts/') % add matlab function in folder Matlab_scripts to search path
folder = 'Becker_Science2010'; % folder name of the model to be loaded
[Is,ms,ds] = ReadBenchmarks(folder) % loading of general info in Is, models in variable ms, data sets in variable ds
m=ms(1); % simulate 1st model
d=ds(1); % simulate for the 1st data set
ode_tolerances = 1e-6;
status = WriteMatlabODEs(Is,m,d,ode_tolerances); % writing ODE_call.m and ODE_file.m
ODE_call % simulation and comparison with the reference simulation
who % shows all variables which are created in ODE_call
The automatically generated code for the Becker model looks like this:
% This script can be used to integrate ODEs (here using ode15s) for simulation the dynamics x(t) for this benchmark model.
% The model corresponds to:
% General_Info file = Becker_Science2010\General_info.xlsx
% model-file = Becker_Science2010\Model\model1_data1.xlsx
% data-file = Becker_Science2010\Data\model1_data1.xlsx
init_Epo = 10^3.1295;
init_EpoR_rel = 10^-1.036;
kD = 10^2.1519;
kde = 10^-1.9212;
kdi = 10^-2.8953;
ke = 10^-1.256;
kex = 10^-3.2381;
koff = 10^-1.0932;
kon = 10^-0.82004;
kt = 10^-1.7955;
offset = 10^-5;
scale = 10^-0.0088494;
sd_Epo_bound = 10^-1.4342;
sd_Epo_ext = 10^-2.108;
sd_Epo_int = 10^-1.2904;
sd_Epo_mem = 10^-1.3538;
p=[ init_Epo, init_EpoR_rel, kD, kde, kdi, ke, kex, koff, kon, kt, offset, scale, sd_Epo_bound, sd_Epo_ext, sd_Epo_int, sd_Epo_mem];
initial_Epo = init_Epo;
initial_EpoR = 4*init_Epo*init_EpoR_rel;
initial_Epo_EpoR = 0;
initial_Epo_EpoR_i = 0;
initial_dEpo_i = 0;
initial_dEpo_e = 0;
x0=[ initial_Epo; initial_EpoR; initial_Epo_EpoR; initial_Epo_EpoR_i; initial_dEpo_i; initial_dEpo_e];
tsim = unique([0,0.820000,0.820000,0.820000,5.820000,5.820000,5.820000,20.820000,20.820000,20.820000,60.820000,60.820000,60.820000,120.820000,120.820000,120.820000,180.820000,180.820000,180.820000,240.820000,240.820000,240.820000,300.820000,300.820000,300.820000,0.820000,0.820000,0.820000,5.820000,5.820000,5.820000,20.820000,20.820000,20.820000,60.820000,60.820000,60.820000,120.820000,120.820000,120.820000,180.820000,180.820000,180.820000,240.820000,240.820000,240.820000,300.820000,300.820000,300.820000,300.820000]);
if length(tsim)==1, tsim = [tsim,1.1]; end
[t,x] = ode15s(@ODE_file,tsim,x0,odeset('AbsTol',1.000000e-06,'RelTol',1.000000e-06,'MaxStep',range(tsim)/1000),p);
close all
plot(t,x)
% Calcuation of Observables:
Epo = x(:,1);
EpoR = x(:,2);
Epo_EpoR = x(:,3);
Epo_EpoR_i = x(:,4);
dEpo_i = x(:,5);
dEpo_e = x(:,6);
% a) Definitions:
Epo_ext = Epo + dEpo_e;
Epo_int = Epo_EpoR_i + dEpo_i;
% b) Observables:
Epo_ext_cpm = feval(inline('log10(offset + (Epo_ext.*scale)./init_Epo)', 'init_Epo',...
'init_EpoR_rel',...
'kD',...
'kde',...
'kdi',...
'ke',...
'kex',...
'koff',...
'kon',...
'kt',...
'offset',...
'scale',...
'sd_Epo_bound',...
'sd_Epo_ext',...
'sd_Epo_int',...
'sd_Epo_mem',...
'Epo_ext',...
'Epo_int',...
'Epo', 'EpoR', 'Epo_EpoR', 'Epo_EpoR_i', 'dEpo_i', 'dEpo_e'),...
init_Epo,...
init_EpoR_rel,...
kD,...
kde,...
kdi,...
ke,...
kex,...
koff,...
kon,...
kt,...
offset,...
scale,...
sd_Epo_bound,...
sd_Epo_ext,...
sd_Epo_int,...
sd_Epo_mem,...
Epo_ext,...
Epo_int,...
Epo,EpoR,Epo_EpoR,Epo_EpoR_i,dEpo_i,dEpo_e);
Epo_mem_cpm = feval(inline('log10(offset + (Epo_EpoR.*scale)./init_Epo)', 'init_Epo',...
'init_EpoR_rel',...
'kD',...
'kde',...
'kdi',...
'ke',...
'kex',...
'koff',...
'kon',...
'kt',...
'offset',...
'scale',...
'sd_Epo_bound',...
'sd_Epo_ext',...
'sd_Epo_int',...
'sd_Epo_mem',...
'Epo_ext',...
'Epo_int',...
'Epo', 'EpoR', 'Epo_EpoR', 'Epo_EpoR_i', 'dEpo_i', 'dEpo_e'),...
init_Epo,...
init_EpoR_rel,...
kD,...
kde,...
kdi,...
ke,...
kex,...
koff,...
kon,...
kt,...
offset,...
scale,...
sd_Epo_bound,...
sd_Epo_ext,...
sd_Epo_int,...
sd_Epo_mem,...
Epo_ext,...
Epo_int,...
Epo,EpoR,Epo_EpoR,Epo_EpoR_i,dEpo_i,dEpo_e);
Epo_int_cpm = feval(inline('log10(offset + (Epo_int.*scale)./init_Epo)', 'init_Epo',...
'init_EpoR_rel',...
'kD',...
'kde',...
'kdi',...
'ke',...
'kex',...
'koff',...
'kon',...
'kt',...
'offset',...
'scale',...
'sd_Epo_bound',...
'sd_Epo_ext',...
'sd_Epo_int',...
'sd_Epo_mem',...
'Epo_ext',...
'Epo_int',...
'Epo', 'EpoR', 'Epo_EpoR', 'Epo_EpoR_i', 'dEpo_i', 'dEpo_e'),...
init_Epo,...
init_EpoR_rel,...
kD,...
kde,...
kdi,...
ke,...
kex,...
koff,...
kon,...
kt,...
offset,...
scale,...
sd_Epo_bound,...
sd_Epo_ext,...
sd_Epo_int,...
sd_Epo_mem,...
Epo_ext,...
Epo_int,...
Epo,EpoR,Epo_EpoR,Epo_EpoR_i,dEpo_i,dEpo_e);
if(length(Epo_ext_cpm)==1 && length(Epo_ext_cpm)<length(t))
Epo_ext_cpm = ones(size(t))*Epo_ext_cpm;
end
if(length(Epo_mem_cpm)==1 && length(Epo_mem_cpm)<length(t))
Epo_mem_cpm = ones(size(t))*Epo_mem_cpm;
end
if(length(Epo_int_cpm)==1 && length(Epo_int_cpm)<length(t))
Epo_int_cpm = ones(size(t))*Epo_int_cpm;
end
% Comparison of simulated observables in the benchmark collection with simulated observables here:
if isfield(d.Simulation,'value')
[~,ia,ib]=intersect(d.Simulation.time,t);
figure,hold on;
for i=1:length(ia)
plot(d.Simulation.value{1}(ia(i)),Epo_ext_cpm(ib(i)),'b.');
end
for i=1:length(ia)
plot(d.Simulation.value{2}(ia(i)),Epo_mem_cpm(ib(i)),'b.');
end
for i=1:length(ia)
plot(d.Simulation.value{3}(ia(i)),Epo_int_cpm(ib(i)),'b.');
end
plot(xlim,xlim,'k-')
xlabel('Simulation data in Benchmark-files')
ylabel('simulation with Matlab''s ODE solver')
% maximal difference between simulation in the benchmark collection and simulation here
[~,ia,ib]=intersect(d.Simulation.time,t);
maxdiff = 0;
reldiff = 0;
for i=1:length(ia)
maxdiff = max(maxdiff,abs(d.Simulation.value{1}(ia(i))-Epo_ext_cpm(ib(i))));
reldiff = max(reldiff,abs(d.Simulation.value{1}(ia(i))-Epo_ext_cpm(ib(i)))./max(1e-10,d.Simulation.value{1}(ia(i))));
end
for i=1:length(ia)
maxdiff = max(maxdiff,abs(d.Simulation.value{2}(ia(i))-Epo_mem_cpm(ib(i))));
reldiff = max(reldiff,abs(d.Simulation.value{2}(ia(i))-Epo_mem_cpm(ib(i)))./max(1e-10,d.Simulation.value{2}(ia(i))));
end
for i=1:length(ia)
maxdiff = max(maxdiff,abs(d.Simulation.value{3}(ia(i))-Epo_int_cpm(ib(i))));
reldiff = max(reldiff,abs(d.Simulation.value{3}(ia(i))-Epo_int_cpm(ib(i)))./max(1e-10,d.Simulation.value{3}(ia(i))));
end
fprintf('maxdiff=%f,',maxdiff)
fprintf('reldiff=%f,',reldiff)
disp(' ')
else
disp('d.Simulation.value does not exist: Seems to be an empty prediction condition.')
end