# Generated Code

The following is matlab code generated by the CellML API from this CellML file. (Back to language selection)

The raw code is available.

function [VOI, STATES, ALGEBRAIC, CONSTANTS] = mainFunction()
% This is the "main function".  In Matlab, things work best if you rename this function to match the filename.
[VOI, STATES, ALGEBRAIC, CONSTANTS] = solveModel();
end

function [algebraicVariableCount] = getAlgebraicVariableCount()
% Used later when setting a global variable with the number of algebraic variables.
% Note: This is not the "main method".
algebraicVariableCount =2;
end
% There are a total of 5 entries in each of the rate and state variable arrays.
% There are a total of 20 entries in the constant variable array.
%

function [VOI, STATES, ALGEBRAIC, CONSTANTS] = solveModel()
% Create ALGEBRAIC of correct size
global algebraicVariableCount;  algebraicVariableCount = getAlgebraicVariableCount();
% Initialise constants and state variables
[INIT_STATES, CONSTANTS] = initConsts;

% Set timespan to solve over
tspan = [0, 10];

% Set numerical accuracy options for ODE solver
options = odeset('RelTol', 1e-06, 'AbsTol', 1e-06, 'MaxStep', 1);

% Solve model with ODE solver
[VOI, STATES] = ode15s(@(VOI, STATES)computeRates(VOI, STATES, CONSTANTS), tspan, INIT_STATES, options);

% Compute algebraic variables
[RATES, ALGEBRAIC] = computeRates(VOI, STATES, CONSTANTS);
ALGEBRAIC = computeAlgebraic(ALGEBRAIC, CONSTANTS, STATES, VOI);

% Plot state variables against variable of integration
[LEGEND_STATES, LEGEND_ALGEBRAIC, LEGEND_VOI, LEGEND_CONSTANTS] = createLegends();
figure();
plot(VOI, STATES);
xlabel(LEGEND_VOI);
l = legend(LEGEND_STATES);
set(l,'Interpreter','none');
end

function [LEGEND_STATES, LEGEND_ALGEBRAIC, LEGEND_VOI, LEGEND_CONSTANTS] = createLegends()
LEGEND_STATES = ''; LEGEND_ALGEBRAIC = ''; LEGEND_VOI = ''; LEGEND_CONSTANTS = '';
LEGEND_VOI = strpad('t in component environment (second)');
LEGEND_CONSTANTS(:,1) = strpad('D_Ca in component parameters (second)');
LEGEND_CONSTANTS(:,2) = strpad('k_1 in component parameters (per_second)');
LEGEND_CONSTANTS(:,3) = strpad('k_2 in component parameters (per_second)');
LEGEND_CONSTANTS(:,4) = strpad('f in component parameters (per_second)');
LEGEND_CONSTANTS(:,5) = strpad('g in component parameters (per_second)');
LEGEND_CONSTANTS(:,6) = strpad('Ca_max in component parameters (dimensionless)');
LEGEND_CONSTANTS(:,7) = strpad('Total_Tn in component parameters (dimensionless)');
LEGEND_CONSTANTS(:,8) = strpad('Total_CB in component parameters (dimensionless)');
LEGEND_ALGEBRAIC(:,1) = strpad('Ca_t in component Ca_t (dimensionless)');
LEGEND_STATES(:,1) = strpad('TnCa in component TnCa (dimensionless)');
LEGEND_STATES(:,2) = strpad('CB_on in component CB_on (dimensionless)');
LEGEND_STATES(:,3) = strpad('CumCB_on in component CumCB (dimensionless)');
LEGEND_STATES(:,4) = strpad('CumCB_off in component CumCB (dimensionless)');
LEGEND_ALGEBRAIC(:,2) = strpad('F in component force_development (force)');
LEGEND_STATES(:,5) = strpad('FTI in component force_development (force_second)');
LEGEND_CONSTANTS(:,16) = strpad('FLA in component force_development (energy)');
LEGEND_CONSTANTS(:,9) = strpad('phi in component force_development (force)');
LEGEND_CONSTANTS(:,10) = strpad('s in component force_development (dimensionless)');
LEGEND_CONSTANTS(:,11) = strpad('L in component force_development (meter)');
LEGEND_CONSTANTS(:,12) = strpad('L_0 in component force_development (meter)');
LEGEND_CONSTANTS(:,13) = strpad('F_max in component force_development (force)');
LEGEND_CONSTANTS(:,18) = strpad('ATP in component ATP (dimensionless)');
LEGEND_CONSTANTS(:,19) = strpad('ATP_energy in component ATP (energy)');
LEGEND_CONSTANTS(:,14) = strpad('epsilon in component ATP (energy)');
LEGEND_CONSTANTS(:,15) = strpad('CumCB_on_end in component ATP (dimensionless)');
LEGEND_CONSTANTS(:,20) = strpad('Efficiency in component equations_main (dimensionless)');
LEGEND_CONSTANTS(:,17) = strpad('Economy in component equations_main (second_per_meter)');
LEGEND_RATES(:,1) = strpad('d/dt TnCa in component TnCa (dimensionless)');
LEGEND_RATES(:,2) = strpad('d/dt CB_on in component CB_on (dimensionless)');
LEGEND_RATES(:,3) = strpad('d/dt CumCB_on in component CumCB (dimensionless)');
LEGEND_RATES(:,4) = strpad('d/dt CumCB_off in component CumCB (dimensionless)');
LEGEND_RATES(:,5) = strpad('d/dt FTI in component force_development (force_second)');
LEGEND_STATES  = LEGEND_STATES';
LEGEND_ALGEBRAIC = LEGEND_ALGEBRAIC';
LEGEND_RATES = LEGEND_RATES';
LEGEND_CONSTANTS = LEGEND_CONSTANTS';
end

function [STATES, CONSTANTS] = initConsts()
VOI = 0; CONSTANTS = []; STATES = []; ALGEBRAIC = [];
CONSTANTS(:,1) = 0.1;
CONSTANTS(:,2) = 40;
CONSTANTS(:,3) = 20;
CONSTANTS(:,4) = 10;
CONSTANTS(:,5) = 10;
CONSTANTS(:,6) = 1;
CONSTANTS(:,7) = 1;
CONSTANTS(:,8) = 1;
STATES(:,1) = 0;
STATES(:,2) = 0;
STATES(:,3) = 0;
STATES(:,4) = 0;
STATES(:,5) = 0;
CONSTANTS(:,9) = 1;
CONSTANTS(:,10) = 1;
CONSTANTS(:,11) = 1;
CONSTANTS(:,12) = 0;
CONSTANTS(:,13) = 0.228;
CONSTANTS(:,14) = 1;
CONSTANTS(:,15) = 1;
CONSTANTS(:,16) =  CONSTANTS(:,13).*CONSTANTS(:,10).*(CONSTANTS(:,11) - CONSTANTS(:,12));
CONSTANTS(:,17) =  (CONSTANTS(:,9)./CONSTANTS(:,14)).*(1.00000./CONSTANTS(:,5));
CONSTANTS(:,18) = CONSTANTS(:,15);
CONSTANTS(:,19) =  CONSTANTS(:,18).*CONSTANTS(:,14);
CONSTANTS(:,20) = CONSTANTS(:,16)./CONSTANTS(:,19);
if (isempty(STATES)), warning('Initial values for states not set');, end
end

function [RATES, ALGEBRAIC] = computeRates(VOI, STATES, CONSTANTS)
global algebraicVariableCount;
statesSize = size(STATES);
statesColumnCount = statesSize(2);
if ( statesColumnCount == 1)
STATES = STATES';
ALGEBRAIC = zeros(1, algebraicVariableCount);
utilOnes = 1;
else
statesRowCount = statesSize(1);
ALGEBRAIC = zeros(statesRowCount, algebraicVariableCount);
RATES = zeros(statesRowCount, statesColumnCount);
utilOnes = ones(statesRowCount, 1);
end
RATES(:,2) =  CONSTANTS(:,4).*STATES(:,1).*(CONSTANTS(:,8) - STATES(:,2)) -  CONSTANTS(:,5).*STATES(:,2);
RATES(:,3) =  CONSTANTS(:,4).*STATES(:,1).*(CONSTANTS(:,8) - STATES(:,2));
RATES(:,4) =  CONSTANTS(:,5).*STATES(:,2);
ALGEBRAIC(:,1) = piecewise({VOI>=0.00000&VOI< 0.300000.*CONSTANTS(:,1), ( CONSTANTS(:,6).*(1.00000+ sin((  pi.*(VOI./CONSTANTS(:,1) - 0.150000))./0.300000)))./2.00000 , VOI>= 0.300000.*CONSTANTS(:,1)&VOI<CONSTANTS(:,1), ( CONSTANTS(:,6).*(1.00000 -  sin((  pi.*(VOI./CONSTANTS(:,1) - 0.650000))./0.700000)))./2.00000 }, 0.00000);
RATES(:,1) =  CONSTANTS(:,2).*ALGEBRAIC(:,1).*(CONSTANTS(:,7) - STATES(:,1)) -  CONSTANTS(:,3).*STATES(:,1);
ALGEBRAIC(:,2) =  STATES(:,2).*CONSTANTS(:,9);
RATES(:,5) = ALGEBRAIC(:,2);
RATES = RATES';
end

% Calculate algebraic variables
function ALGEBRAIC = computeAlgebraic(ALGEBRAIC, CONSTANTS, STATES, VOI)
statesSize = size(STATES);
statesColumnCount = statesSize(2);
if ( statesColumnCount == 1)
STATES = STATES';
utilOnes = 1;
else
statesRowCount = statesSize(1);
utilOnes = ones(statesRowCount, 1);
end
ALGEBRAIC(:,1) = piecewise({VOI>=0.00000&VOI< 0.300000.*CONSTANTS(:,1), ( CONSTANTS(:,6).*(1.00000+ sin((  pi.*(VOI./CONSTANTS(:,1) - 0.150000))./0.300000)))./2.00000 , VOI>= 0.300000.*CONSTANTS(:,1)&VOI<CONSTANTS(:,1), ( CONSTANTS(:,6).*(1.00000 -  sin((  pi.*(VOI./CONSTANTS(:,1) - 0.650000))./0.700000)))./2.00000 }, 0.00000);
ALGEBRAIC(:,2) =  STATES(:,2).*CONSTANTS(:,9);
end

% Compute result of a piecewise function
function x = piecewise(cases, default)
set = [0];
for i = 1:2:length(cases)
if (length(cases{i+1}) == 1)
x(cases{i} & ~set,:) = cases{i+1};
else
x(cases{i} & ~set,:) = cases{i+1}(cases{i} & ~set);
end
set = set | cases{i};
if(set), break, end
end
if (length(default) == 1)
x(~set,:) = default;
else
x(~set,:) = default(~set);
end
end

% Pad out or shorten strings to a set length
req_length = 160;
insize = size(strin,2);
if insize > req_length
strout = strin(1:req_length);
else
strout = [strin, blanks(req_length - insize)];
end
end

Source
Derived from workspace Yamaguchi, Takaki, Matsubara, Yasuhara, Suga, 1996 at changeset c401290c8180.
Collaboration
To begin collaborating on this work, please use your git client and issue this command: