# 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 =1;
end
% There are a total of 5 entries in each of the rate and state variable arrays.
% There are a total of 12 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('time in component environment (second)');
LEGEND_STATES(:,1) = strpad('P in component P (picomolar)');
LEGEND_CONSTANTS(:,1) = strpad('k1 in component model_parameters (second_order_rate_constant)');
LEGEND_CONSTANTS(:,2) = strpad('k1_ in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,3) = strpad('k2 in component model_parameters (second_order_rate_constant)');
LEGEND_CONSTANTS(:,4) = strpad('k2_ in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,5) = strpad('kcl in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,12) = strpad('D in component model_parameters (flux)');
LEGEND_STATES(:,2) = strpad('Ca in component Ca (picomolar)');
LEGEND_STATES(:,3) = strpad('Ci in component Ci (picomolar)');
LEGEND_STATES(:,4) = strpad('Ra in component Ra (picomolar)');
LEGEND_STATES(:,5) = strpad('Ri in component Ri (picomolar)');
LEGEND_CONSTANTS(:,6) = strpad('k3 in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,7) = strpad('k3_ in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,8) = strpad('k4 in component model_parameters (first_order_rate_constant)');
LEGEND_CONSTANTS(:,9) = strpad('k4_ in component model_parameters (first_order_rate_constant)');
LEGEND_ALGEBRAIC(:,1) = strpad('rho in component rho (dimensionless)');
LEGEND_CONSTANTS(:,10) = strpad('De in component model_parameters (flux)');
LEGEND_CONSTANTS(:,11) = strpad('Dd in component model_parameters (flux)');
LEGEND_RATES(:,1) = strpad('d/dt P in component P (picomolar)');
LEGEND_RATES(:,4) = strpad('d/dt Ra in component Ra (picomolar)');
LEGEND_RATES(:,5) = strpad('d/dt Ri in component Ri (picomolar)');
LEGEND_RATES(:,2) = strpad('d/dt Ca in component Ca (picomolar)');
LEGEND_RATES(:,3) = strpad('d/dt Ci in component Ci (picomolar)');
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 = [];
STATES(:,1) = 3;
CONSTANTS(:,1) = 1e-6;
CONSTANTS(:,2) = 1e-3;
CONSTANTS(:,3) = 1e-7;
CONSTANTS(:,4) = 1e-3;
CONSTANTS(:,5) = 5e-3;
STATES(:,2) = 4e-4;
STATES(:,3) = 0.05;
STATES(:,4) = 16.9;
STATES(:,5) = 1.7;
CONSTANTS(:,6) = 1e-3;
CONSTANTS(:,7) = 1e-4;
CONSTANTS(:,8) = 2e-3;
CONSTANTS(:,9) = 0.4;
CONSTANTS(:,10) = 0;
CONSTANTS(:,11) = 0.015;
CONSTANTS(:,12) = CONSTANTS(:,10)+CONSTANTS(:,11);
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(:,1) = ( CONSTANTS(:,2).*STATES(:,2)+ CONSTANTS(:,4).*STATES(:,3)+CONSTANTS(:,12)) - ( CONSTANTS(:,1).*STATES(:,4).*STATES(:,1)+ CONSTANTS(:,3).*STATES(:,5).*STATES(:,1)+ CONSTANTS(:,5).*STATES(:,1));
RATES(:,4) = ( CONSTANTS(:,2).*STATES(:,2)+ CONSTANTS(:,6).*STATES(:,5)) - ( CONSTANTS(:,1).*STATES(:,4).*STATES(:,1)+ CONSTANTS(:,7).*STATES(:,4));
RATES(:,5) = ( CONSTANTS(:,4).*STATES(:,3)+ CONSTANTS(:,7).*STATES(:,4)) - ( CONSTANTS(:,3).*STATES(:,5).*STATES(:,1)+ CONSTANTS(:,6).*STATES(:,5));
RATES(:,2) = ( CONSTANTS(:,1).*STATES(:,4).*STATES(:,1)+ CONSTANTS(:,8).*STATES(:,3)) - ( CONSTANTS(:,2).*STATES(:,2)+ CONSTANTS(:,9).*STATES(:,2));
RATES(:,3) = ( CONSTANTS(:,3).*STATES(:,5).*STATES(:,1)+ CONSTANTS(:,9).*STATES(:,2)) - ( CONSTANTS(:,4).*STATES(:,3)+ CONSTANTS(:,8).*STATES(:,3));
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) = (STATES(:,4)+STATES(:,2))./(STATES(:,4)+STATES(:,2)+STATES(:,5)+STATES(:,3));
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 Potter, Greller, Cho, Nuttall, Stroup, Suva, Tobin, 2005 at changeset 9eed340c4da2.
Collaboration
To begin collaborating on this work, please use your git client and issue this command: