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 =73;
end
% There are a total of 31 entries in each of the rate and state variable arrays.
% There are a total of 93 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_CONSTANTS(:,1) = strpad('Aca_IC50_IKr in component acacetin (uM)');
    LEGEND_CONSTANTS(:,2) = strpad('Aca_IC50_IKs in component acacetin (uM)');
    LEGEND_CONSTANTS(:,3) = strpad('Aca_IC50_Ito in component acacetin (uM)');
    LEGEND_CONSTANTS(:,4) = strpad('Aca_hill_IKr in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,5) = strpad('Aca_hill_IKs in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,6) = strpad('Aca_hill_Ito in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,7) = strpad('conc in component acacetin (uM)');
    LEGEND_CONSTANTS(:,66) = strpad('fKr in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,67) = strpad('fKs in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,68) = strpad('fto in component acacetin (dimensionless)');
    LEGEND_CONSTANTS(:,8) = strpad('Aj_nj in component cell (um2)');
    LEGEND_CONSTANTS(:,9) = strpad('BCa in component calcium (mM)');
    LEGEND_CONSTANTS(:,10) = strpad('CSQN in component calcium (mM)');
    LEGEND_STATES(:,1) = strpad('Ca_SRi in component calcium (mM)');
    LEGEND_STATES(:,2) = strpad('Ca_SRss in component calcium (mM)');
    LEGEND_STATES(:,3) = strpad('Ca_i in component calcium (mM)');
    LEGEND_STATES(:,4) = strpad('Ca_ss in component calcium (mM)');
    LEGEND_CONSTANTS(:,11) = strpad('DCa in component calcium (m2_per_s_times_1e_minus_9)');
    LEGEND_CONSTANTS(:,12) = strpad('DCaSR in component calcium (m2_per_s_times_1e_minus_9)');
    LEGEND_CONSTANTS(:,13) = strpad('F in component phys (C_per_mmol)');
    LEGEND_ALGEBRAIC(:,43) = strpad('ICaL in component ical (pA)');
    LEGEND_ALGEBRAIC(:,45) = strpad('ICap in component icap (pA)');
    LEGEND_ALGEBRAIC(:,47) = strpad('INaCa in component inaca (pA)');
    LEGEND_ALGEBRAIC(:,55) = strpad('I_tot in component calcium (pA)');
    LEGEND_ALGEBRAIC(:,54) = strpad('IbCa in component ibca (pA)');
    LEGEND_ALGEBRAIC(:,51) = strpad('JCa in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,66) = strpad('JCass in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,64) = strpad('JSRCaSS in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,50) = strpad('JSRCai in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,1) = strpad('JSRCaleaki in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,20) = strpad('JSRCaleakss in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,46) = strpad('J_SERCASR in component serca (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,61) = strpad('J_SERCASRss in component serca (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,48) = strpad('J_bulkSERCA in component serca (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,63) = strpad('J_bulkSERCAss in component serca (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,32) = strpad('Jj_nj in component calcium (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,44) = strpad('Jreli in component ryr (kat_times_1e_minus_15)');
    LEGEND_ALGEBRAIC(:,59) = strpad('Jrelss in component ryr (kat_times_1e_minus_15)');
    LEGEND_CONSTANTS(:,14) = strpad('KdBCa in component calcium (mM)');
    LEGEND_CONSTANTS(:,15) = strpad('KdCSQN in component calcium (mM)');
    LEGEND_CONSTANTS(:,16) = strpad('KdSLhigh in component calcium (mM)');
    LEGEND_CONSTANTS(:,17) = strpad('KdSLlow in component calcium (mM)');
    LEGEND_CONSTANTS(:,18) = strpad('SLhigh in component calcium (mM)');
    LEGEND_CONSTANTS(:,19) = strpad('SLlow in component calcium (mM)');
    LEGEND_CONSTANTS(:,70) = strpad('VSRi in component cell (um3)');
    LEGEND_CONSTANTS(:,71) = strpad('VSRss in component cell (um3)');
    LEGEND_CONSTANTS(:,69) = strpad('Vnj in component cell (um3)');
    LEGEND_CONSTANTS(:,89) = strpad('Vss in component cell (um3)');
    LEGEND_ALGEBRAIC(:,36) = strpad('calcium_Ca_SRi_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,37) = strpad('calcium_Ca_SRss_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,40) = strpad('calcium_Ca_i_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,41) = strpad('calcium_Ca_ss_beta in component calcium (dimensionless)');
    LEGEND_CONSTANTS(:,72) = strpad('dx2 in component cell (um2)');
    LEGEND_CONSTANTS(:,20) = strpad('kSRleak in component calcium (mS_per_uF)');
    LEGEND_VOI = strpad('time in component engine (ms)');
    LEGEND_CONSTANTS(:,21) = strpad('xj_nj in component cell (um)');
    LEGEND_CONSTANTS(:,22) = strpad('Cm in component cell (pF)');
    LEGEND_CONSTANTS(:,23) = strpad('Vi in component cell (um3)');
    LEGEND_CONSTANTS(:,24) = strpad('dx in component cell (um)');
    LEGEND_CONSTANTS(:,25) = strpad('pace in component engine (dimensionless)');
    LEGEND_ALGEBRAIC(:,53) = strpad('ECa in component nernst (mV)');
    LEGEND_STATES(:,5) = strpad('V in component membrane (mV)');
    LEGEND_CONSTANTS(:,73) = strpad('gbCa in component ibca (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,68) = strpad('ENa in component nernst (mV)');
    LEGEND_ALGEBRAIC(:,69) = strpad('IbNa in component ibna (pA)');
    LEGEND_CONSTANTS(:,74) = strpad('gbNa in component ibna (mS_per_uF)');
    LEGEND_CONSTANTS(:,26) = strpad('ErL in component ical (mV)');
    LEGEND_STATES(:,6) = strpad('d in component ical (mS_per_uF)');
    LEGEND_STATES(:,7) = strpad('f in component ical (mS_per_uF)');
    LEGEND_STATES(:,8) = strpad('fca in component ical (mS_per_uF)');
    LEGEND_CONSTANTS(:,75) = strpad('gCaL in component ical (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,2) = strpad('ical_d_a in component ical (ms)');
    LEGEND_ALGEBRAIC(:,21) = strpad('ical_d_inf in component ical (dimensionless)');
    LEGEND_ALGEBRAIC(:,33) = strpad('ical_d_tau in component ical (ms)');
    LEGEND_ALGEBRAIC(:,3) = strpad('ical_f_inf in component ical (dimensionless)');
    LEGEND_ALGEBRAIC(:,22) = strpad('ical_f_tau in component ical (ms)');
    LEGEND_ALGEBRAIC(:,4) = strpad('ical_fca_inf in component ical (dimensionless)');
    LEGEND_CONSTANTS(:,27) = strpad('ical_fca_tau in component ical (ms)');
    LEGEND_CONSTANTS(:,28) = strpad('icapbar in component icap (A_per_F)');
    LEGEND_CONSTANTS(:,29) = strpad('kmcap in component icap (mM)');
    LEGEND_ALGEBRAIC(:,56) = strpad('EK in component nernst (mV)');
    LEGEND_ALGEBRAIC(:,58) = strpad('IK1 in component ik1 (pA)');
    LEGEND_CONSTANTS(:,30) = strpad('gK1 in component ik1 (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,60) = strpad('IKr in component ikr (pA)');
    LEGEND_CONSTANTS(:,76) = strpad('gKr in component ikr (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,5) = strpad('ikr_xr_a in component ikr (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,23) = strpad('ikr_xr_b in component ikr (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,34) = strpad('ikr_xr_inf in component ikr (dimensionless)');
    LEGEND_ALGEBRAIC(:,38) = strpad('ikr_xr_tau in component ikr (ms)');
    LEGEND_STATES(:,9) = strpad('xr in component ikr (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,62) = strpad('IKs in component iks (pA)');
    LEGEND_CONSTANTS(:,77) = strpad('gKs in component iks (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,6) = strpad('iks_xs_a in component iks (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,24) = strpad('iks_xs_b in component iks (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,35) = strpad('iks_xs_inf in component iks (dimensionless)');
    LEGEND_ALGEBRAIC(:,39) = strpad('iks_xs_tau in component iks (ms)');
    LEGEND_STATES(:,10) = strpad('xs in component iks (mS_per_uF)');
    LEGEND_STATES(:,11) = strpad('BC in component ikur (mS_per_uF)');
    LEGEND_STATES(:,12) = strpad('BO in component ikur (mS_per_uF)');
    LEGEND_CONSTANTS(:,78) = strpad('FRT in component phys (per_mV)');
    LEGEND_ALGEBRAIC(:,65) = strpad('IKur in component ikur (pA)');
    LEGEND_CONSTANTS(:,31) = strpad('KC in component ikur (m3_per_s_per_mol_times_1e6)');
    LEGEND_CONSTANTS(:,32) = strpad('KO in component ikur (m3_per_s_per_mol_times_1e6)');
    LEGEND_CONSTANTS(:,33) = strpad('K_Q10 in component ikur (dimensionless)');
    LEGEND_CONSTANTS(:,34) = strpad('LC in component ikur (mS_per_uF)');
    LEGEND_CONSTANTS(:,35) = strpad('LO in component ikur (mS_per_uF)');
    LEGEND_CONSTANTS(:,79) = strpad('ZKC in component ikur (dimensionless)');
    LEGEND_CONSTANTS(:,80) = strpad('ZKO in component ikur (dimensionless)');
    LEGEND_CONSTANTS(:,36) = strpad('ZLC in component ikur (dimensionless)');
    LEGEND_CONSTANTS(:,81) = strpad('ZLO in component ikur (dimensionless)');
    LEGEND_STATES(:,13) = strpad('a in component ikur (mS_per_uF)');
    LEGEND_CONSTANTS(:,82) = strpad('gKur in component ikur (mS_per_uF)');
    LEGEND_STATES(:,14) = strpad('i in component ikur (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,7) = strpad('ikur_a_inf in component ikur (dimensionless)');
    LEGEND_ALGEBRAIC(:,25) = strpad('ikur_a_tau in component ikur (ms)');
    LEGEND_ALGEBRAIC(:,8) = strpad('ikur_i_inf in component ikur (dimensionless)');
    LEGEND_ALGEBRAIC(:,26) = strpad('ikur_i_tau in component ikur (ms)');
    LEGEND_STATES(:,15) = strpad('BA in component ina (mS_per_uF)');
    LEGEND_STATES(:,16) = strpad('BI in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,70) = strpad('INa in component ina (pA)');
    LEGEND_CONSTANTS(:,83) = strpad('drug_Ka in component ina (m3_per_s_per_mol_times_1e6)');
    LEGEND_CONSTANTS(:,84) = strpad('drug_Ki in component ina (m3_per_s_per_mol_times_1e6)');
    LEGEND_CONSTANTS(:,37) = strpad('drug_La in component ina (mS_per_uF)');
    LEGEND_CONSTANTS(:,38) = strpad('drug_Li in component ina (mS_per_uF)');
    LEGEND_CONSTANTS(:,39) = strpad('drug_concen in component ina (uM)');
    LEGEND_CONSTANTS(:,40) = strpad('gNa in component ina (mS_per_uF)');
    LEGEND_STATES(:,17) = strpad('h in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,9) = strpad('ina_h_alpha in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,27) = strpad('ina_h_beta in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,10) = strpad('ina_j_alpha in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,28) = strpad('ina_j_beta in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,11) = strpad('ina_m_alpha in component ina (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,29) = strpad('ina_m_beta in component ina (mS_per_uF)');
    LEGEND_STATES(:,18) = strpad('j in component ina (mS_per_uF)');
    LEGEND_STATES(:,19) = strpad('m in component ina (mS_per_uF)');
    LEGEND_CONSTANTS(:,41) = strpad('Ca_o in component ion (mM)');
    LEGEND_STATES(:,20) = strpad('Na_i in component sodium (mM)');
    LEGEND_CONSTANTS(:,42) = strpad('Na_o in component ion (mM)');
    LEGEND_CONSTANTS(:,43) = strpad('gammalr in component inaca (dimensionless)');
    LEGEND_CONSTANTS(:,44) = strpad('kmcalr in component inaca (mM)');
    LEGEND_CONSTANTS(:,45) = strpad('kmnalr in component inaca (mM)');
    LEGEND_CONSTANTS(:,46) = strpad('knacalr in component inaca (A_per_F)');
    LEGEND_CONSTANTS(:,47) = strpad('ksatlr in component inaca (dimensionless)');
    LEGEND_ALGEBRAIC(:,52) = strpad('INaK in component inak (pA)');
    LEGEND_CONSTANTS(:,85) = strpad('I_bar in component inak (A_per_F)');
    LEGEND_CONSTANTS(:,48) = strpad('K_o in component ion (mM)');
    LEGEND_ALGEBRAIC(:,49) = strpad('fnak in component inak (dimensionless)');
    LEGEND_CONSTANTS(:,49) = strpad('kmko in component inak (mM)');
    LEGEND_CONSTANTS(:,50) = strpad('kmnai in component inak (mM)');
    LEGEND_CONSTANTS(:,86) = strpad('sigma in component inak (dimensionless)');
    LEGEND_ALGEBRAIC(:,67) = strpad('Ito in component ito (pA)');
    LEGEND_CONSTANTS(:,87) = strpad('gto in component ito (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,12) = strpad('ito_r_inf in component ito (dimensionless)');
    LEGEND_ALGEBRAIC(:,30) = strpad('ito_r_tau in component ito (ms)');
    LEGEND_ALGEBRAIC(:,13) = strpad('ito_s_inf in component ito (dimensionless)');
    LEGEND_ALGEBRAIC(:,31) = strpad('ito_s_tau in component ito (ms)');
    LEGEND_STATES(:,21) = strpad('r in component ito (mS_per_uF)');
    LEGEND_STATES(:,22) = strpad('s in component ito (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,71) = strpad('i_ion in component membrane (pA)');
    LEGEND_ALGEBRAIC(:,73) = strpad('i_stim in component stimulus (pA)');
    LEGEND_STATES(:,23) = strpad('K_i in component potassium (mM)');
    LEGEND_CONSTANTS(:,51) = strpad('R in component phys (J_per_mol_per_K)');
    LEGEND_CONSTANTS(:,52) = strpad('T in component phys (kelvin)');
    LEGEND_ALGEBRAIC(:,42) = strpad('RyRSRCai in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,57) = strpad('RyRSRCass in component ryr (dimensionless)');
    LEGEND_STATES(:,24) = strpad('a_i in component ryr (mS_per_uF)');
    LEGEND_STATES(:,25) = strpad('a_ss in component ryr (mS_per_uF)');
    LEGEND_STATES(:,26) = strpad('c_i in component ryr (mS_per_uF)');
    LEGEND_STATES(:,27) = strpad('c_ss in component ryr (mS_per_uF)');
    LEGEND_CONSTANTS(:,90) = strpad('nui in component ryr (m3_per_s_times_1e_minus_15)');
    LEGEND_CONSTANTS(:,92) = strpad('nuss in component ryr (m3_per_s_times_1e_minus_15)');
    LEGEND_STATES(:,28) = strpad('o_i in component ryr (mS_per_uF)');
    LEGEND_STATES(:,29) = strpad('o_ss in component ryr (mS_per_uF)');
    LEGEND_ALGEBRAIC(:,14) = strpad('ryr_a_i_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,53) = strpad('ryr_a_i_tau in component ryr (ms)');
    LEGEND_ALGEBRAIC(:,15) = strpad('ryr_a_ss_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,54) = strpad('ryr_a_ss_tau in component ryr (ms)');
    LEGEND_ALGEBRAIC(:,16) = strpad('ryr_c_i_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,88) = strpad('ryr_c_i_tau in component ryr (ms)');
    LEGEND_ALGEBRAIC(:,17) = strpad('ryr_c_ss_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,55) = strpad('ryr_c_ss_tau in component ryr (ms)');
    LEGEND_ALGEBRAIC(:,18) = strpad('ryr_o_i_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,56) = strpad('ryr_o_i_tau in component ryr (ms)');
    LEGEND_ALGEBRAIC(:,19) = strpad('ryr_o_ss_inf in component ryr (dimensionless)');
    LEGEND_CONSTANTS(:,57) = strpad('ryr_o_ss_tau in component ryr (ms)');
    LEGEND_STATES(:,30) = strpad('SERCACa in component serca (mM)');
    LEGEND_STATES(:,31) = strpad('SERCACass in component serca (mM)');
    LEGEND_CONSTANTS(:,58) = strpad('cpumps in component serca (mM)');
    LEGEND_CONSTANTS(:,59) = strpad('k1 in component serca (per_mM2_per_ms)');
    LEGEND_CONSTANTS(:,60) = strpad('k2 in component serca (mS_per_uF)');
    LEGEND_CONSTANTS(:,61) = strpad('k3 in component serca (per_mM2_per_ms)');
    LEGEND_CONSTANTS(:,62) = strpad('k4 in component serca (mS_per_uF)');
    LEGEND_CONSTANTS(:,91) = strpad('amplitude in component stimulus (pA)');
    LEGEND_CONSTANTS(:,63) = strpad('duration in component stimulus (ms)');
    LEGEND_CONSTANTS(:,64) = strpad('offset in component stimulus (ms)');
    LEGEND_ALGEBRAIC(:,72) = strpad('pace in component stimulus (dimensionless)');
    LEGEND_CONSTANTS(:,65) = strpad('period in component stimulus (ms)');
    LEGEND_RATES(:,1) = strpad('d/dt Ca_SRi in component calcium (mM)');
    LEGEND_RATES(:,2) = strpad('d/dt Ca_SRss in component calcium (mM)');
    LEGEND_RATES(:,3) = strpad('d/dt Ca_i in component calcium (mM)');
    LEGEND_RATES(:,4) = strpad('d/dt Ca_ss in component calcium (mM)');
    LEGEND_RATES(:,6) = strpad('d/dt d in component ical (mS_per_uF)');
    LEGEND_RATES(:,7) = strpad('d/dt f in component ical (mS_per_uF)');
    LEGEND_RATES(:,8) = strpad('d/dt fca in component ical (mS_per_uF)');
    LEGEND_RATES(:,9) = strpad('d/dt xr in component ikr (mS_per_uF)');
    LEGEND_RATES(:,10) = strpad('d/dt xs in component iks (mS_per_uF)');
    LEGEND_RATES(:,11) = strpad('d/dt BC in component ikur (mS_per_uF)');
    LEGEND_RATES(:,12) = strpad('d/dt BO in component ikur (mS_per_uF)');
    LEGEND_RATES(:,13) = strpad('d/dt a in component ikur (mS_per_uF)');
    LEGEND_RATES(:,14) = strpad('d/dt i in component ikur (mS_per_uF)');
    LEGEND_RATES(:,15) = strpad('d/dt BA in component ina (mS_per_uF)');
    LEGEND_RATES(:,16) = strpad('d/dt BI in component ina (mS_per_uF)');
    LEGEND_RATES(:,17) = strpad('d/dt h in component ina (mS_per_uF)');
    LEGEND_RATES(:,18) = strpad('d/dt j in component ina (mS_per_uF)');
    LEGEND_RATES(:,19) = strpad('d/dt m in component ina (mS_per_uF)');
    LEGEND_RATES(:,21) = strpad('d/dt r in component ito (mS_per_uF)');
    LEGEND_RATES(:,22) = strpad('d/dt s in component ito (mS_per_uF)');
    LEGEND_RATES(:,5) = strpad('d/dt V in component membrane (mV)');
    LEGEND_RATES(:,23) = strpad('d/dt K_i in component potassium (mM)');
    LEGEND_RATES(:,24) = strpad('d/dt a_i in component ryr (mS_per_uF)');
    LEGEND_RATES(:,25) = strpad('d/dt a_ss in component ryr (mS_per_uF)');
    LEGEND_RATES(:,26) = strpad('d/dt c_i in component ryr (mS_per_uF)');
    LEGEND_RATES(:,27) = strpad('d/dt c_ss in component ryr (mS_per_uF)');
    LEGEND_RATES(:,28) = strpad('d/dt o_i in component ryr (mS_per_uF)');
    LEGEND_RATES(:,29) = strpad('d/dt o_ss in component ryr (mS_per_uF)');
    LEGEND_RATES(:,30) = strpad('d/dt SERCACa in component serca (mM)');
    LEGEND_RATES(:,31) = strpad('d/dt SERCACass in component serca (mM)');
    LEGEND_RATES(:,20) = strpad('d/dt Na_i in component sodium (mM)');
    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) = 32.4;
    CONSTANTS(:,2) = 81.4;
    CONSTANTS(:,3) = 9.3;
    CONSTANTS(:,4) = 0.9;
    CONSTANTS(:,5) = 0.8;
    CONSTANTS(:,6) = 0.9;
    CONSTANTS(:,7) = 1e-14;
    CONSTANTS(:,8) = 2.49232441199999994e+03;
    CONSTANTS(:,9) = 0.024;
    CONSTANTS(:,10) = 6.7;
    STATES(:,1) = 9.89241162100000015e-01;
    STATES(:,2) = 9.77916803700000004e-01;
    STATES(:,3) = 1.40313306500000005e-04;
    STATES(:,4) = 1.31359510499999994e-04;
    CONSTANTS(:,11) = 0.78;
    CONSTANTS(:,12) = 0.044;
    CONSTANTS(:,13) = 96.4867;
    CONSTANTS(:,14) = 0.00238;
    CONSTANTS(:,15) = 0.8;
    CONSTANTS(:,16) = 0.013;
    CONSTANTS(:,17) = 1.1;
    CONSTANTS(:,18) = 13.0;
    CONSTANTS(:,19) = 165.0;
    CONSTANTS(:,20) = 6e-06;
    CONSTANTS(:,21) = 0.8225;
    CONSTANTS(:,22) = 100.0;
    CONSTANTS(:,23) = 13668.0;
    CONSTANTS(:,24) = 1.625;
    CONSTANTS(:,25) = 0.0;
    STATES(:,5) = -7.71325583600000044e+01;
    CONSTANTS(:,26) = 65.0;
    STATES(:,6) = 2.26716127700000005e-04;
    STATES(:,7) = 9.35421288100000026e-01;
    STATES(:,8) = 7.27082366600000030e-01;
    CONSTANTS(:,27) = 2.0;
    CONSTANTS(:,28) = 0.275;
    CONSTANTS(:,29) = 0.0005;
    CONSTANTS(:,30) = 0.09;
    STATES(:,9) = 1.57418133000000000e-03;
    STATES(:,10) = 2.22597964100000011e-02;
    STATES(:,11) = 3.06272282199999992e-15;
    STATES(:,12) = 2.35547751699999996e-16;
    CONSTANTS(:,31) = 2.47871658999999998e-03;
    CONSTANTS(:,32) = 1.94459589999999990e-04;
    CONSTANTS(:,33) = 3.0;
    CONSTANTS(:,34) = 2.86367149999999988e-04;
    CONSTANTS(:,35) = 2.90998690000000002e-04;
    CONSTANTS(:,36) = 8.37073022689999946e-01;
    STATES(:,13) = 2.41788180099999987e-04;
    STATES(:,14) = 9.51727886399999945e-01;
    STATES(:,15) = 0.0;
    STATES(:,16) = 0.0;
    CONSTANTS(:,37) = 0.1;
    CONSTANTS(:,38) = 0.01;
    CONSTANTS(:,39) = 0.0;
    CONSTANTS(:,40) = 7.8;
    STATES(:,17) = 9.16842028100000039e-01;
    STATES(:,18) = 9.38018356399999975e-01;
    STATES(:,19) = 5.63181991600000039e-03;
    CONSTANTS(:,41) = 1.8;
    STATES(:,20) = 1.03039701200000007e+01;
    CONSTANTS(:,42) = 140.0;
    CONSTANTS(:,43) = 0.35;
    CONSTANTS(:,44) = 1.38;
    CONSTANTS(:,45) = 87.5;
    CONSTANTS(:,46) = 1600.0;
    CONSTANTS(:,47) = 0.1;
    CONSTANTS(:,48) = 5.4;
    CONSTANTS(:,49) = 1.5;
    CONSTANTS(:,50) = 10.0;
    STATES(:,21) = 1.22370601099999997e-02;
    STATES(:,22) = 8.84913984200000003e-01;
    STATES(:,23) = 1.31867138000000011e+02;
    CONSTANTS(:,51) = 8.3143;
    CONSTANTS(:,52) = 310.0;
    STATES(:,24) = 2.97721944299999985e-01;
    STATES(:,25) = 1.41927157299999995e-01;
    STATES(:,26) = 9.79023869800000002e-01;
    STATES(:,27) = 9.57197650200000028e-01;
    STATES(:,28) = 3.66799927299999980e-04;
    STATES(:,29) = 4.56694440999999974e-04;
    CONSTANTS(:,53) = 250.0;
    CONSTANTS(:,54) = 250.0;
    CONSTANTS(:,55) = 15.0;
    CONSTANTS(:,56) = 5.0;
    CONSTANTS(:,57) = 5.0;
    STATES(:,30) = 9.58584701999999969e-03;
    STATES(:,31) = 9.38694111799999974e-03;
    CONSTANTS(:,58) = 0.04;
    CONSTANTS(:,59) = 7500.0;
    CONSTANTS(:,60) = 4.68749999999999983e-04;
    CONSTANTS(:,61) = 2.31481500000000001e-03;
    CONSTANTS(:,62) = 0.0075;
    CONSTANTS(:,63) = 0.5;
    CONSTANTS(:,64) = 10.0;
    CONSTANTS(:,65) = 1000.0;
    CONSTANTS(:,66) = 1.00000 - 1.00000./(1.00000+power(CONSTANTS(:,1)./CONSTANTS(:,7), CONSTANTS(:,4)));
    CONSTANTS(:,67) = 1.00000 - 1.00000./(1.00000+power(CONSTANTS(:,2)./CONSTANTS(:,7), CONSTANTS(:,5)));
    CONSTANTS(:,68) = 1.00000 - 1.00000./(1.00000+power(CONSTANTS(:,3)./CONSTANTS(:,7), CONSTANTS(:,6)));
    CONSTANTS(:,69) =  6.00000.*2531.00;
    CONSTANTS(:,70) =  2.00000.*57.0000;
    CONSTANTS(:,71) =  2.00000.*80.0000;
    CONSTANTS(:,72) =  CONSTANTS(:,24).*CONSTANTS(:,24);
    CONSTANTS(:,73) =  1.40000.*0.00113100;
    CONSTANTS(:,74) =  0.800000.*0.000674438;
    CONSTANTS(:,75) =  0.129400.*0.750000;
    CONSTANTS(:,76) =  0.800000.*0.0294118;
    CONSTANTS(:,77) =  0.800000.*0.129412;
    CONSTANTS(:,78) = (CONSTANTS(:,13)./CONSTANTS(:,51))./CONSTANTS(:,52);
    CONSTANTS(:,79) =  - 0.327024;
    CONSTANTS(:,80) =  - 0.257320;
    CONSTANTS(:,81) =  - 0.0128016;
    CONSTANTS(:,82) =  0.00639800.*0.900000;
    CONSTANTS(:,83) = 0.100000./1000.00;
    CONSTANTS(:,84) = 0.100000./1000.00;
    CONSTANTS(:,85) =  1.40000.*0.599339;
    CONSTANTS(:,86) = (exp(CONSTANTS(:,42)./67.3000) - 1.00000)./7.00000;
    CONSTANTS(:,87) =  0.754710.*0.196200;
    CONSTANTS(:,88) =  2.00000.*15.0000;
    CONSTANTS(:,92) = 0.00000;
    CONSTANTS(:,89) =  2.00000.*49.9232;
    CONSTANTS(:,90) =  0.00100000.*CONSTANTS(:,69);
    CONSTANTS(:,91) =  - 8000.00;
    CONSTANTS(:,92) =  0.625000.*CONSTANTS(:,89);
    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(:,23) = CONSTANTS(:,92);
    RATES(:,11) =  ( ( ( ( CONSTANTS(:,31).*exp( (  - CONSTANTS(:,79).*STATES(:,5)).*CONSTANTS(:,78))).*CONSTANTS(:,7)).*STATES(:,14)).*(1.00000 - STATES(:,13))).*((1.00000 - STATES(:,12)) - STATES(:,11)) -  ( CONSTANTS(:,34).*STATES(:,11)).*exp( (  - CONSTANTS(:,36).*STATES(:,5)).*CONSTANTS(:,78));
    RATES(:,12) =  ( ( ( ( CONSTANTS(:,32).*exp( (  - CONSTANTS(:,80).*STATES(:,5)).*CONSTANTS(:,78))).*CONSTANTS(:,7)).*STATES(:,14)).*STATES(:,13)).*((1.00000 - STATES(:,12)) - STATES(:,11)) -  ( CONSTANTS(:,35).*STATES(:,12)).*exp( (  - CONSTANTS(:,81).*STATES(:,5)).*CONSTANTS(:,78));
    RATES(:,15) =  ( ( ( ( CONSTANTS(:,83).*CONSTANTS(:,39)).*power(STATES(:,19), 3.00000)).*STATES(:,17)).*STATES(:,18)).*((1.00000 - STATES(:,15)) - STATES(:,16)) -  CONSTANTS(:,37).*STATES(:,15);
    RATES(:,16) =  ( ( CONSTANTS(:,84).*CONSTANTS(:,39)).*(1.00000 - STATES(:,17))).*((1.00000 - STATES(:,15)) - STATES(:,16)) -  CONSTANTS(:,38).*STATES(:,16);
    ALGEBRAIC(:,4) = 1.00000./(1.00000+STATES(:,4)./0.000350000);
    RATES(:,8) = (ALGEBRAIC(:,4) - STATES(:,8))./CONSTANTS(:,27);
    ALGEBRAIC(:,14) = 0.505000 - 0.427000./(1.00000+exp(( 2000.00.*STATES(:,3) - 0.290000)./0.0820000));
    RATES(:,24) = (ALGEBRAIC(:,14) - STATES(:,24))./CONSTANTS(:,53);
    ALGEBRAIC(:,15) = 0.505000 - 0.427000./(1.00000+exp(( 1000.00.*STATES(:,4) - 0.290000)./0.0820000));
    RATES(:,25) = (ALGEBRAIC(:,15) - STATES(:,25))./CONSTANTS(:,54);
    ALGEBRAIC(:,16) = 1.00000./(1.00000+exp(( 2000.00.*STATES(:,3) - (STATES(:,24)+0.0200000))./0.0100000));
    RATES(:,26) = (ALGEBRAIC(:,16) - STATES(:,26))./CONSTANTS(:,88);
    ALGEBRAIC(:,17) = 1.00000./(1.00000+exp(( 1000.00.*STATES(:,4) - (STATES(:,25)+0.0200000))./0.0100000));
    RATES(:,27) = (ALGEBRAIC(:,17) - STATES(:,27))./CONSTANTS(:,55);
    ALGEBRAIC(:,18) = 1.00000 - 1.00000./(1.00000+exp(( 2000.00.*STATES(:,3) - (STATES(:,24)+0.220000))./0.0300000));
    RATES(:,28) = (ALGEBRAIC(:,18) - STATES(:,28))./CONSTANTS(:,56);
    ALGEBRAIC(:,19) = 1.00000 - 1.00000./(1.00000+exp(( 1000.00.*STATES(:,4) - (STATES(:,25)+0.220000))./0.0300000));
    RATES(:,29) = (ALGEBRAIC(:,19) - STATES(:,29))./CONSTANTS(:,57);
    ALGEBRAIC(:,3) = exp( - (STATES(:,5)+28.0000)./6.90000)./(1.00000+exp( - (STATES(:,5)+28.0000)./6.90000));
    ALGEBRAIC(:,22) = ( ( 1.50000.*2.00000).*3.00000)./( 0.0197000.*exp(  - power(0.0337000, 2.00000).*power(STATES(:,5)+10.0000, 2.00000))+0.0200000);
    RATES(:,7) = (ALGEBRAIC(:,3) - STATES(:,7))./ALGEBRAIC(:,22);
    ALGEBRAIC(:,7) = 1.00000./(1.00000+exp( - (STATES(:,5)+5.52000)./8.60000));
    ALGEBRAIC(:,25) = ( ( (45.6667./(1.00000+exp((STATES(:,5)+11.2306)./11.5255))+4.26754).*(0.262186./(1.00000+exp((STATES(:,5)+35.8658)./ - 3.87511))+0.291755)).*1.00000)./CONSTANTS(:,33);
    RATES(:,13) = (ALGEBRAIC(:,7) - STATES(:,13))./ALGEBRAIC(:,25);
    ALGEBRAIC(:,8) = 0.524240./(1.00000+exp((STATES(:,5)+15.1142)./7.56702))+0.458078;
    ALGEBRAIC(:,26) = (2328.00./(1.00000+exp((STATES(:,5) - 9.43500)./3.58270))+1739.14)./CONSTANTS(:,33);
    RATES(:,14) = (ALGEBRAIC(:,8) - STATES(:,14))./ALGEBRAIC(:,26);
    ALGEBRAIC(:,9) = piecewise({STATES(:,5)>= - 40.0000, 0.00000 },  0.135000.*exp((STATES(:,5)+80.0000)./ - 6.80000));
    ALGEBRAIC(:,27) = piecewise({STATES(:,5)>= - 40.0000, 1.00000./( 0.130000.*(1.00000+exp((STATES(:,5)+10.6600)./ - 11.1000))) },  3.56000.*exp( 0.0790000.*STATES(:,5))+ 310000..*exp( 0.350000.*STATES(:,5)));
    RATES(:,17) =  ALGEBRAIC(:,9).*(1.00000 - STATES(:,17)) -  ALGEBRAIC(:,27).*STATES(:,17);
    ALGEBRAIC(:,10) = piecewise({STATES(:,5)>= - 40.0000, 0.00000 }, ( (  - 127140..*exp( 0.244400.*STATES(:,5)) -  3.47400e-05.*exp(  - 0.0439100.*STATES(:,5))).*(STATES(:,5)+37.7800))./(1.00000+exp( 0.311000.*(STATES(:,5)+79.2300))));
    ALGEBRAIC(:,28) = piecewise({STATES(:,5)>= - 40.0000, ( 0.300000.*exp(  - 2.53500e-07.*STATES(:,5)))./(1.00000+exp(  - 0.100000.*(STATES(:,5)+32.0000))) }, ( 0.121200.*exp(  - 0.0105200.*STATES(:,5)))./(1.00000+exp(  - 0.137800.*(STATES(:,5)+40.1400))));
    RATES(:,18) =  ALGEBRAIC(:,10).*(1.00000 - STATES(:,18)) -  ALGEBRAIC(:,28).*STATES(:,18);
    ALGEBRAIC(:,11) = piecewise({abs(STATES(:,5)+47.1300)<1.00000e-10, 3.20000 }, ( 0.320000.*(STATES(:,5)+47.1300))./(1.00000 - exp(  - 0.100000.*(STATES(:,5)+47.1300))));
    ALGEBRAIC(:,29) =  0.0800000.*exp( - STATES(:,5)./11.0000);
    RATES(:,19) =  ALGEBRAIC(:,11).*(1.00000 - STATES(:,19)) -  ALGEBRAIC(:,29).*STATES(:,19);
    ALGEBRAIC(:,12) = 1.00000./(1.00000+exp((STATES(:,5) - 1.00000)./ - 11.0000));
    ALGEBRAIC(:,30) =  3.50000.*exp(  - (STATES(:,5)./30.0000).*2.00000)+1.50000;
    RATES(:,21) = (ALGEBRAIC(:,12) - STATES(:,21))./ALGEBRAIC(:,30);
    ALGEBRAIC(:,13) = 1.00000./(1.00000+exp((STATES(:,5)+40.5000)./11.5000));
    ALGEBRAIC(:,31) =  25.6350.*exp(  - ((STATES(:,5)+52.4500)./15.8827).*2.00000)+14.1400;
    RATES(:,22) = (ALGEBRAIC(:,13) - STATES(:,22))./ALGEBRAIC(:,31);
    ALGEBRAIC(:,21) = 1.00000./(1.00000+exp((STATES(:,5)+10.0000)./ - 8.00000));
    ALGEBRAIC(:,2) = 1.00000./(1.00000+exp((STATES(:,5)+10.0000)./ - 6.24000));
    ALGEBRAIC(:,33) = piecewise({abs(STATES(:,5)+10.0000)<1.00000e-10,  ALGEBRAIC(:,2).*4.57900 }, ( ALGEBRAIC(:,2).*(1.00000 - exp((STATES(:,5)+10.0000)./ - 6.24000)))./( 0.0350000.*(STATES(:,5)+10.0000)));
    RATES(:,6) = (ALGEBRAIC(:,21) - STATES(:,6))./ALGEBRAIC(:,33);
    ALGEBRAIC(:,34) = 1.00000./(1.00000+exp((STATES(:,5)+14.1000)./ - 6.50000));
    ALGEBRAIC(:,5) = piecewise({abs(STATES(:,5)+14.1000)<1.00000e-10, 0.00150000 }, ( 0.000300000.*(STATES(:,5)+14.1000))./(1.00000 - exp((STATES(:,5)+14.1000)./ - 5.00000)));
    ALGEBRAIC(:,23) = piecewise({abs(STATES(:,5) - 3.33280)<1.00000e-10, 0.000378361 }, ( 7.38980e-05.*(STATES(:,5) - 3.33280))./(exp((STATES(:,5) - 3.33280)./5.12370) - 1.00000));
    ALGEBRAIC(:,38) = 1.00000./(ALGEBRAIC(:,5)+ALGEBRAIC(:,23));
    RATES(:,9) = (ALGEBRAIC(:,34) - STATES(:,9))./ALGEBRAIC(:,38);
    ALGEBRAIC(:,35) = power((1.00000./(1.00000+exp((STATES(:,5) - 19.9000)./ - 12.7000))), 1.0 ./ 2);
    ALGEBRAIC(:,6) = piecewise({abs(STATES(:,5) - 19.9000)<1.00000e-10, 0.000680000 }, ( 4.00000e-05.*(STATES(:,5) - 19.9000))./(1.00000 - exp((STATES(:,5) - 19.9000)./ - 17.0000)));
    ALGEBRAIC(:,24) = piecewise({abs(STATES(:,5) - 19.9000)<1.00000e-10, 0.000315000 }, ( 3.50000e-05.*(STATES(:,5) - 19.9000))./(exp((STATES(:,5) - 19.9000)./9.00000) - 1.00000));
    ALGEBRAIC(:,39) = 0.500000./(ALGEBRAIC(:,6)+ALGEBRAIC(:,24));
    RATES(:,10) = (ALGEBRAIC(:,35) - STATES(:,10))./ALGEBRAIC(:,39);
    ALGEBRAIC(:,1) =  ( ( 0.500000.*CONSTANTS(:,20)).*(STATES(:,1) - STATES(:,3))).*CONSTANTS(:,69);
    ALGEBRAIC(:,46) =  ( ( 0.750000.*( (  - CONSTANTS(:,61).*power(STATES(:,1), 2.00000)).*(CONSTANTS(:,58) - STATES(:,30))+ CONSTANTS(:,62).*STATES(:,30))).*CONSTANTS(:,69)).*2.00000;
    ALGEBRAIC(:,42) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,1) - 0.300000)./0.100000));
    ALGEBRAIC(:,44) =  ( ( ( CONSTANTS(:,90).*STATES(:,28)).*STATES(:,26)).*ALGEBRAIC(:,42)).*(STATES(:,1) - STATES(:,3));
    ALGEBRAIC(:,50) = (ALGEBRAIC(:,46) - ALGEBRAIC(:,1)) - ALGEBRAIC(:,44);
    ALGEBRAIC(:,36) = 1.00000./(1.00000+( CONSTANTS(:,10).*CONSTANTS(:,15))./power(STATES(:,1)+CONSTANTS(:,15), 2.00000));
    RATES(:,1) =  ( 1000.00.*ALGEBRAIC(:,36)).*( CONSTANTS(:,12).*(((STATES(:,2) -  2.00000.*STATES(:,1))+STATES(:,1))./CONSTANTS(:,72)+(STATES(:,1) - STATES(:,2))./( ( 2.00000.*3.00000).*CONSTANTS(:,72)))+ALGEBRAIC(:,50)./CONSTANTS(:,70));
    ALGEBRAIC(:,48) =  ( ( 0.750000.*( ( CONSTANTS(:,59).*power(STATES(:,3), 2.00000)).*(CONSTANTS(:,58) - STATES(:,30)) -  CONSTANTS(:,60).*STATES(:,30))).*CONSTANTS(:,69)).*2.00000;
    RATES(:,30) = ( - ALGEBRAIC(:,46)+ALGEBRAIC(:,48))./CONSTANTS(:,69);
    ALGEBRAIC(:,32) =  (( ( 2.50000.*CONSTANTS(:,11)).*CONSTANTS(:,8))./CONSTANTS(:,21)).*(STATES(:,4) - STATES(:,3));
    ALGEBRAIC(:,51) = (( - ALGEBRAIC(:,48)+ALGEBRAIC(:,1))+ALGEBRAIC(:,44))+ALGEBRAIC(:,32);
    ALGEBRAIC(:,40) = 1.00000./(1.00000+( CONSTANTS(:,9).*CONSTANTS(:,14))./power(STATES(:,3)+CONSTANTS(:,14), 2.00000));
    RATES(:,3) =  (ALGEBRAIC(:,51)./CONSTANTS(:,69)).*ALGEBRAIC(:,40);
    ALGEBRAIC(:,20) =  ( ( 0.500000.*CONSTANTS(:,20)).*(STATES(:,2) - STATES(:,4))).*CONSTANTS(:,89);
    ALGEBRAIC(:,61) =  ( ( 0.750000.*( (  - CONSTANTS(:,61).*power(STATES(:,2), 2.00000)).*(CONSTANTS(:,58) - STATES(:,31))+ CONSTANTS(:,62).*STATES(:,31))).*CONSTANTS(:,89)).*2.00000;
    ALGEBRAIC(:,57) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,2) - 0.300000)./0.100000));
    ALGEBRAIC(:,59) =  ( ( ( CONSTANTS(:,92).*STATES(:,29)).*STATES(:,27)).*ALGEBRAIC(:,57)).*(STATES(:,2) - STATES(:,4));
    ALGEBRAIC(:,64) = (ALGEBRAIC(:,61) - ALGEBRAIC(:,20)) - ALGEBRAIC(:,59);
    ALGEBRAIC(:,37) = 1.00000./(1.00000+( CONSTANTS(:,10).*CONSTANTS(:,15))./power(STATES(:,2)+CONSTANTS(:,15), 2.00000));
    RATES(:,2) =  ( 1000.00.*ALGEBRAIC(:,37)).*( CONSTANTS(:,12).*(((STATES(:,2) -  2.00000.*STATES(:,2))+STATES(:,1))./CONSTANTS(:,72)+(STATES(:,2) - STATES(:,1))./( ( 2.00000.*4.00000).*CONSTANTS(:,72)))+ALGEBRAIC(:,64)./CONSTANTS(:,71));
    ALGEBRAIC(:,63) =  ( ( 0.750000.*( ( CONSTANTS(:,59).*power(STATES(:,4), 2.00000)).*(CONSTANTS(:,58) - STATES(:,31)) -  CONSTANTS(:,60).*STATES(:,31))).*CONSTANTS(:,89)).*2.00000;
    RATES(:,31) = ( - ALGEBRAIC(:,61)+ALGEBRAIC(:,63))./CONSTANTS(:,89);
    ALGEBRAIC(:,43) =  ( ( ( ( ( 1.33333.*CONSTANTS(:,22)).*CONSTANTS(:,75)).*STATES(:,6)).*STATES(:,7)).*STATES(:,8)).*(STATES(:,5) - CONSTANTS(:,26));
    ALGEBRAIC(:,45) = ( ( ( 1.26000.*CONSTANTS(:,22)).*CONSTANTS(:,28)).*STATES(:,4))./(STATES(:,4)+CONSTANTS(:,29));
    ALGEBRAIC(:,47) =  (((( ( 1.40000.*CONSTANTS(:,22)).*CONSTANTS(:,46))./(power(CONSTANTS(:,45), 3.00000)+power(CONSTANTS(:,42), 3.00000)))./(CONSTANTS(:,44)+CONSTANTS(:,41)))./(1.00000+ CONSTANTS(:,47).*exp( ( (CONSTANTS(:,43) - 1.00000).*STATES(:,5)).*CONSTANTS(:,78)))).*( ( power(STATES(:,20), 3.00000).*CONSTANTS(:,41)).*exp( ( STATES(:,5).*CONSTANTS(:,43)).*CONSTANTS(:,78)) -  ( power(CONSTANTS(:,42), 3.00000).*STATES(:,4)).*exp( ( STATES(:,5).*(CONSTANTS(:,43) - 1.00000)).*CONSTANTS(:,78)));
    ALGEBRAIC(:,53) =  13.3500.*log(CONSTANTS(:,41)./STATES(:,3));
    ALGEBRAIC(:,54) =  ( ( 1.00000.*CONSTANTS(:,22)).*CONSTANTS(:,73)).*(STATES(:,5) - ALGEBRAIC(:,53));
    ALGEBRAIC(:,55) = (( - ALGEBRAIC(:,43) - ALGEBRAIC(:,54)) - ALGEBRAIC(:,45))+ 2.00000.*ALGEBRAIC(:,47);
    ALGEBRAIC(:,66) = (( - ALGEBRAIC(:,32)+ALGEBRAIC(:,20)) - ALGEBRAIC(:,63))+ALGEBRAIC(:,59);
    ALGEBRAIC(:,41) = 1.00000./(((1.00000+( CONSTANTS(:,19).*CONSTANTS(:,17))./power(STATES(:,4)+CONSTANTS(:,17), 2.00000))+( CONSTANTS(:,18).*CONSTANTS(:,16))./power(STATES(:,4)+CONSTANTS(:,16), 2.00000))+( CONSTANTS(:,9).*CONSTANTS(:,14))./power(STATES(:,4)+CONSTANTS(:,14), 2.00000));
    RATES(:,4) =  ALGEBRAIC(:,41).*(ALGEBRAIC(:,66)./CONSTANTS(:,89)+ALGEBRAIC(:,55)./( ( 2.00000.*CONSTANTS(:,89)).*CONSTANTS(:,13)));
    ALGEBRAIC(:,68) =  26.7100.*log(CONSTANTS(:,42)./STATES(:,20));
    ALGEBRAIC(:,69) =  ( ( 1.70000.*CONSTANTS(:,22)).*CONSTANTS(:,74)).*(STATES(:,5) - ALGEBRAIC(:,68));
    ALGEBRAIC(:,70) =  ( ( ( ( ( CONSTANTS(:,40).*power(STATES(:,19), 3.00000)).*STATES(:,17)).*STATES(:,18)).*(STATES(:,5) - ALGEBRAIC(:,68))).*CONSTANTS(:,22)).*((1.00000 - STATES(:,15)) - STATES(:,16));
    ALGEBRAIC(:,49) = 1.00000./((1.00000+ 0.124500.*exp( (  - 0.100000.*STATES(:,5)).*CONSTANTS(:,78)))+ ( 0.0365000.*CONSTANTS(:,86)).*exp(  - STATES(:,5).*CONSTANTS(:,78)));
    ALGEBRAIC(:,52) = (( ( ( ( 1.28000.*CONSTANTS(:,22)).*CONSTANTS(:,85)).*ALGEBRAIC(:,49)).*CONSTANTS(:,48))./(CONSTANTS(:,48)+CONSTANTS(:,49)))./(1.00000+power(CONSTANTS(:,50)./STATES(:,20), 4.00000));
    RATES(:,20) = (((  - 3.00000.*ALGEBRAIC(:,52) -  3.00000.*ALGEBRAIC(:,47)) - ALGEBRAIC(:,69)) - ALGEBRAIC(:,70))./( CONSTANTS(:,13).*CONSTANTS(:,23));
    ALGEBRAIC(:,56) =  26.7100.*log(CONSTANTS(:,48)./STATES(:,23));
    ALGEBRAIC(:,58) = ( ( CONSTANTS(:,22).*CONSTANTS(:,30)).*(STATES(:,5) - ALGEBRAIC(:,56)))./(1.00000+exp( 0.0700000.*(STATES(:,5)+80.0000)));
    ALGEBRAIC(:,60) = ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,66)).*CONSTANTS(:,76)).*STATES(:,9)).*(STATES(:,5) - ALGEBRAIC(:,56)))./(1.00000+exp((STATES(:,5)+15.0000)./22.4000));
    ALGEBRAIC(:,62) =  ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,67)).*CONSTANTS(:,77)).*STATES(:,10)).*STATES(:,10)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,65) =  ( ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,82)).*(4.51280+1.89977./(1.00000+exp((STATES(:,5) - 20.5232)./ - 8.26597)))).*((1.00000 - STATES(:,12)) - STATES(:,11))).*STATES(:,13)).*STATES(:,14)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,67) =  ( ( ( ( ( 1.05000.*CONSTANTS(:,68)).*CONSTANTS(:,22)).*CONSTANTS(:,87)).*STATES(:,21)).*STATES(:,22)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,71) = (((((((((((ALGEBRAIC(:,70))+ALGEBRAIC(:,67))+ALGEBRAIC(:,65))+ALGEBRAIC(:,60))+ALGEBRAIC(:,62))+ALGEBRAIC(:,43))+ALGEBRAIC(:,58))+ALGEBRAIC(:,69))+ALGEBRAIC(:,54))+ALGEBRAIC(:,47))+ALGEBRAIC(:,52))+ALGEBRAIC(:,45);
    ALGEBRAIC(:,72) = piecewise({(VOI - CONSTANTS(:,64)) -  CONSTANTS(:,65).*floor((VOI - CONSTANTS(:,64))./CONSTANTS(:,65))<CONSTANTS(:,63), 1.00000 }, 0.00000);
    ALGEBRAIC(:,73) =  CONSTANTS(:,91).*ALGEBRAIC(:,72);
    RATES(:,5) =  - (ALGEBRAIC(:,71)+ALGEBRAIC(:,73))./CONSTANTS(:,22);
   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(:,4) = 1.00000./(1.00000+STATES(:,4)./0.000350000);
    ALGEBRAIC(:,14) = 0.505000 - 0.427000./(1.00000+exp(( 2000.00.*STATES(:,3) - 0.290000)./0.0820000));
    ALGEBRAIC(:,15) = 0.505000 - 0.427000./(1.00000+exp(( 1000.00.*STATES(:,4) - 0.290000)./0.0820000));
    ALGEBRAIC(:,16) = 1.00000./(1.00000+exp(( 2000.00.*STATES(:,3) - (STATES(:,24)+0.0200000))./0.0100000));
    ALGEBRAIC(:,17) = 1.00000./(1.00000+exp(( 1000.00.*STATES(:,4) - (STATES(:,25)+0.0200000))./0.0100000));
    ALGEBRAIC(:,18) = 1.00000 - 1.00000./(1.00000+exp(( 2000.00.*STATES(:,3) - (STATES(:,24)+0.220000))./0.0300000));
    ALGEBRAIC(:,19) = 1.00000 - 1.00000./(1.00000+exp(( 1000.00.*STATES(:,4) - (STATES(:,25)+0.220000))./0.0300000));
    ALGEBRAIC(:,3) = exp( - (STATES(:,5)+28.0000)./6.90000)./(1.00000+exp( - (STATES(:,5)+28.0000)./6.90000));
    ALGEBRAIC(:,22) = ( ( 1.50000.*2.00000).*3.00000)./( 0.0197000.*exp(  - power(0.0337000, 2.00000).*power(STATES(:,5)+10.0000, 2.00000))+0.0200000);
    ALGEBRAIC(:,7) = 1.00000./(1.00000+exp( - (STATES(:,5)+5.52000)./8.60000));
    ALGEBRAIC(:,25) = ( ( (45.6667./(1.00000+exp((STATES(:,5)+11.2306)./11.5255))+4.26754).*(0.262186./(1.00000+exp((STATES(:,5)+35.8658)./ - 3.87511))+0.291755)).*1.00000)./CONSTANTS(:,33);
    ALGEBRAIC(:,8) = 0.524240./(1.00000+exp((STATES(:,5)+15.1142)./7.56702))+0.458078;
    ALGEBRAIC(:,26) = (2328.00./(1.00000+exp((STATES(:,5) - 9.43500)./3.58270))+1739.14)./CONSTANTS(:,33);
    ALGEBRAIC(:,9) = piecewise({STATES(:,5)>= - 40.0000, 0.00000 },  0.135000.*exp((STATES(:,5)+80.0000)./ - 6.80000));
    ALGEBRAIC(:,27) = piecewise({STATES(:,5)>= - 40.0000, 1.00000./( 0.130000.*(1.00000+exp((STATES(:,5)+10.6600)./ - 11.1000))) },  3.56000.*exp( 0.0790000.*STATES(:,5))+ 310000..*exp( 0.350000.*STATES(:,5)));
    ALGEBRAIC(:,10) = piecewise({STATES(:,5)>= - 40.0000, 0.00000 }, ( (  - 127140..*exp( 0.244400.*STATES(:,5)) -  3.47400e-05.*exp(  - 0.0439100.*STATES(:,5))).*(STATES(:,5)+37.7800))./(1.00000+exp( 0.311000.*(STATES(:,5)+79.2300))));
    ALGEBRAIC(:,28) = piecewise({STATES(:,5)>= - 40.0000, ( 0.300000.*exp(  - 2.53500e-07.*STATES(:,5)))./(1.00000+exp(  - 0.100000.*(STATES(:,5)+32.0000))) }, ( 0.121200.*exp(  - 0.0105200.*STATES(:,5)))./(1.00000+exp(  - 0.137800.*(STATES(:,5)+40.1400))));
    ALGEBRAIC(:,11) = piecewise({abs(STATES(:,5)+47.1300)<1.00000e-10, 3.20000 }, ( 0.320000.*(STATES(:,5)+47.1300))./(1.00000 - exp(  - 0.100000.*(STATES(:,5)+47.1300))));
    ALGEBRAIC(:,29) =  0.0800000.*exp( - STATES(:,5)./11.0000);
    ALGEBRAIC(:,12) = 1.00000./(1.00000+exp((STATES(:,5) - 1.00000)./ - 11.0000));
    ALGEBRAIC(:,30) =  3.50000.*exp(  - (STATES(:,5)./30.0000).*2.00000)+1.50000;
    ALGEBRAIC(:,13) = 1.00000./(1.00000+exp((STATES(:,5)+40.5000)./11.5000));
    ALGEBRAIC(:,31) =  25.6350.*exp(  - ((STATES(:,5)+52.4500)./15.8827).*2.00000)+14.1400;
    ALGEBRAIC(:,21) = 1.00000./(1.00000+exp((STATES(:,5)+10.0000)./ - 8.00000));
    ALGEBRAIC(:,2) = 1.00000./(1.00000+exp((STATES(:,5)+10.0000)./ - 6.24000));
    ALGEBRAIC(:,33) = piecewise({abs(STATES(:,5)+10.0000)<1.00000e-10,  ALGEBRAIC(:,2).*4.57900 }, ( ALGEBRAIC(:,2).*(1.00000 - exp((STATES(:,5)+10.0000)./ - 6.24000)))./( 0.0350000.*(STATES(:,5)+10.0000)));
    ALGEBRAIC(:,34) = 1.00000./(1.00000+exp((STATES(:,5)+14.1000)./ - 6.50000));
    ALGEBRAIC(:,5) = piecewise({abs(STATES(:,5)+14.1000)<1.00000e-10, 0.00150000 }, ( 0.000300000.*(STATES(:,5)+14.1000))./(1.00000 - exp((STATES(:,5)+14.1000)./ - 5.00000)));
    ALGEBRAIC(:,23) = piecewise({abs(STATES(:,5) - 3.33280)<1.00000e-10, 0.000378361 }, ( 7.38980e-05.*(STATES(:,5) - 3.33280))./(exp((STATES(:,5) - 3.33280)./5.12370) - 1.00000));
    ALGEBRAIC(:,38) = 1.00000./(ALGEBRAIC(:,5)+ALGEBRAIC(:,23));
    ALGEBRAIC(:,35) = power((1.00000./(1.00000+exp((STATES(:,5) - 19.9000)./ - 12.7000))), 1.0 ./ 2);
    ALGEBRAIC(:,6) = piecewise({abs(STATES(:,5) - 19.9000)<1.00000e-10, 0.000680000 }, ( 4.00000e-05.*(STATES(:,5) - 19.9000))./(1.00000 - exp((STATES(:,5) - 19.9000)./ - 17.0000)));
    ALGEBRAIC(:,24) = piecewise({abs(STATES(:,5) - 19.9000)<1.00000e-10, 0.000315000 }, ( 3.50000e-05.*(STATES(:,5) - 19.9000))./(exp((STATES(:,5) - 19.9000)./9.00000) - 1.00000));
    ALGEBRAIC(:,39) = 0.500000./(ALGEBRAIC(:,6)+ALGEBRAIC(:,24));
    ALGEBRAIC(:,1) =  ( ( 0.500000.*CONSTANTS(:,20)).*(STATES(:,1) - STATES(:,3))).*CONSTANTS(:,69);
    ALGEBRAIC(:,46) =  ( ( 0.750000.*( (  - CONSTANTS(:,61).*power(STATES(:,1), 2.00000)).*(CONSTANTS(:,58) - STATES(:,30))+ CONSTANTS(:,62).*STATES(:,30))).*CONSTANTS(:,69)).*2.00000;
    ALGEBRAIC(:,42) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,1) - 0.300000)./0.100000));
    ALGEBRAIC(:,44) =  ( ( ( CONSTANTS(:,90).*STATES(:,28)).*STATES(:,26)).*ALGEBRAIC(:,42)).*(STATES(:,1) - STATES(:,3));
    ALGEBRAIC(:,50) = (ALGEBRAIC(:,46) - ALGEBRAIC(:,1)) - ALGEBRAIC(:,44);
    ALGEBRAIC(:,36) = 1.00000./(1.00000+( CONSTANTS(:,10).*CONSTANTS(:,15))./power(STATES(:,1)+CONSTANTS(:,15), 2.00000));
    ALGEBRAIC(:,48) =  ( ( 0.750000.*( ( CONSTANTS(:,59).*power(STATES(:,3), 2.00000)).*(CONSTANTS(:,58) - STATES(:,30)) -  CONSTANTS(:,60).*STATES(:,30))).*CONSTANTS(:,69)).*2.00000;
    ALGEBRAIC(:,32) =  (( ( 2.50000.*CONSTANTS(:,11)).*CONSTANTS(:,8))./CONSTANTS(:,21)).*(STATES(:,4) - STATES(:,3));
    ALGEBRAIC(:,51) = (( - ALGEBRAIC(:,48)+ALGEBRAIC(:,1))+ALGEBRAIC(:,44))+ALGEBRAIC(:,32);
    ALGEBRAIC(:,40) = 1.00000./(1.00000+( CONSTANTS(:,9).*CONSTANTS(:,14))./power(STATES(:,3)+CONSTANTS(:,14), 2.00000));
    ALGEBRAIC(:,20) =  ( ( 0.500000.*CONSTANTS(:,20)).*(STATES(:,2) - STATES(:,4))).*CONSTANTS(:,89);
    ALGEBRAIC(:,61) =  ( ( 0.750000.*( (  - CONSTANTS(:,61).*power(STATES(:,2), 2.00000)).*(CONSTANTS(:,58) - STATES(:,31))+ CONSTANTS(:,62).*STATES(:,31))).*CONSTANTS(:,89)).*2.00000;
    ALGEBRAIC(:,57) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,2) - 0.300000)./0.100000));
    ALGEBRAIC(:,59) =  ( ( ( CONSTANTS(:,92).*STATES(:,29)).*STATES(:,27)).*ALGEBRAIC(:,57)).*(STATES(:,2) - STATES(:,4));
    ALGEBRAIC(:,64) = (ALGEBRAIC(:,61) - ALGEBRAIC(:,20)) - ALGEBRAIC(:,59);
    ALGEBRAIC(:,37) = 1.00000./(1.00000+( CONSTANTS(:,10).*CONSTANTS(:,15))./power(STATES(:,2)+CONSTANTS(:,15), 2.00000));
    ALGEBRAIC(:,63) =  ( ( 0.750000.*( ( CONSTANTS(:,59).*power(STATES(:,4), 2.00000)).*(CONSTANTS(:,58) - STATES(:,31)) -  CONSTANTS(:,60).*STATES(:,31))).*CONSTANTS(:,89)).*2.00000;
    ALGEBRAIC(:,43) =  ( ( ( ( ( 1.33333.*CONSTANTS(:,22)).*CONSTANTS(:,75)).*STATES(:,6)).*STATES(:,7)).*STATES(:,8)).*(STATES(:,5) - CONSTANTS(:,26));
    ALGEBRAIC(:,45) = ( ( ( 1.26000.*CONSTANTS(:,22)).*CONSTANTS(:,28)).*STATES(:,4))./(STATES(:,4)+CONSTANTS(:,29));
    ALGEBRAIC(:,47) =  (((( ( 1.40000.*CONSTANTS(:,22)).*CONSTANTS(:,46))./(power(CONSTANTS(:,45), 3.00000)+power(CONSTANTS(:,42), 3.00000)))./(CONSTANTS(:,44)+CONSTANTS(:,41)))./(1.00000+ CONSTANTS(:,47).*exp( ( (CONSTANTS(:,43) - 1.00000).*STATES(:,5)).*CONSTANTS(:,78)))).*( ( power(STATES(:,20), 3.00000).*CONSTANTS(:,41)).*exp( ( STATES(:,5).*CONSTANTS(:,43)).*CONSTANTS(:,78)) -  ( power(CONSTANTS(:,42), 3.00000).*STATES(:,4)).*exp( ( STATES(:,5).*(CONSTANTS(:,43) - 1.00000)).*CONSTANTS(:,78)));
    ALGEBRAIC(:,53) =  13.3500.*log(CONSTANTS(:,41)./STATES(:,3));
    ALGEBRAIC(:,54) =  ( ( 1.00000.*CONSTANTS(:,22)).*CONSTANTS(:,73)).*(STATES(:,5) - ALGEBRAIC(:,53));
    ALGEBRAIC(:,55) = (( - ALGEBRAIC(:,43) - ALGEBRAIC(:,54)) - ALGEBRAIC(:,45))+ 2.00000.*ALGEBRAIC(:,47);
    ALGEBRAIC(:,66) = (( - ALGEBRAIC(:,32)+ALGEBRAIC(:,20)) - ALGEBRAIC(:,63))+ALGEBRAIC(:,59);
    ALGEBRAIC(:,41) = 1.00000./(((1.00000+( CONSTANTS(:,19).*CONSTANTS(:,17))./power(STATES(:,4)+CONSTANTS(:,17), 2.00000))+( CONSTANTS(:,18).*CONSTANTS(:,16))./power(STATES(:,4)+CONSTANTS(:,16), 2.00000))+( CONSTANTS(:,9).*CONSTANTS(:,14))./power(STATES(:,4)+CONSTANTS(:,14), 2.00000));
    ALGEBRAIC(:,68) =  26.7100.*log(CONSTANTS(:,42)./STATES(:,20));
    ALGEBRAIC(:,69) =  ( ( 1.70000.*CONSTANTS(:,22)).*CONSTANTS(:,74)).*(STATES(:,5) - ALGEBRAIC(:,68));
    ALGEBRAIC(:,70) =  ( ( ( ( ( CONSTANTS(:,40).*power(STATES(:,19), 3.00000)).*STATES(:,17)).*STATES(:,18)).*(STATES(:,5) - ALGEBRAIC(:,68))).*CONSTANTS(:,22)).*((1.00000 - STATES(:,15)) - STATES(:,16));
    ALGEBRAIC(:,49) = 1.00000./((1.00000+ 0.124500.*exp( (  - 0.100000.*STATES(:,5)).*CONSTANTS(:,78)))+ ( 0.0365000.*CONSTANTS(:,86)).*exp(  - STATES(:,5).*CONSTANTS(:,78)));
    ALGEBRAIC(:,52) = (( ( ( ( 1.28000.*CONSTANTS(:,22)).*CONSTANTS(:,85)).*ALGEBRAIC(:,49)).*CONSTANTS(:,48))./(CONSTANTS(:,48)+CONSTANTS(:,49)))./(1.00000+power(CONSTANTS(:,50)./STATES(:,20), 4.00000));
    ALGEBRAIC(:,56) =  26.7100.*log(CONSTANTS(:,48)./STATES(:,23));
    ALGEBRAIC(:,58) = ( ( CONSTANTS(:,22).*CONSTANTS(:,30)).*(STATES(:,5) - ALGEBRAIC(:,56)))./(1.00000+exp( 0.0700000.*(STATES(:,5)+80.0000)));
    ALGEBRAIC(:,60) = ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,66)).*CONSTANTS(:,76)).*STATES(:,9)).*(STATES(:,5) - ALGEBRAIC(:,56)))./(1.00000+exp((STATES(:,5)+15.0000)./22.4000));
    ALGEBRAIC(:,62) =  ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,67)).*CONSTANTS(:,77)).*STATES(:,10)).*STATES(:,10)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,65) =  ( ( ( ( ( CONSTANTS(:,22).*CONSTANTS(:,82)).*(4.51280+1.89977./(1.00000+exp((STATES(:,5) - 20.5232)./ - 8.26597)))).*((1.00000 - STATES(:,12)) - STATES(:,11))).*STATES(:,13)).*STATES(:,14)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,67) =  ( ( ( ( ( 1.05000.*CONSTANTS(:,68)).*CONSTANTS(:,22)).*CONSTANTS(:,87)).*STATES(:,21)).*STATES(:,22)).*(STATES(:,5) - ALGEBRAIC(:,56));
    ALGEBRAIC(:,71) = (((((((((((ALGEBRAIC(:,70))+ALGEBRAIC(:,67))+ALGEBRAIC(:,65))+ALGEBRAIC(:,60))+ALGEBRAIC(:,62))+ALGEBRAIC(:,43))+ALGEBRAIC(:,58))+ALGEBRAIC(:,69))+ALGEBRAIC(:,54))+ALGEBRAIC(:,47))+ALGEBRAIC(:,52))+ALGEBRAIC(:,45);
    ALGEBRAIC(:,72) = piecewise({(VOI - CONSTANTS(:,64)) -  CONSTANTS(:,65).*floor((VOI - CONSTANTS(:,64))./CONSTANTS(:,65))<CONSTANTS(:,63), 1.00000 }, 0.00000);
    ALGEBRAIC(:,73) =  CONSTANTS(:,91).*ALGEBRAIC(:,72);
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
function strout = strpad(strin)
    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 Ni et al. 2017 Human atrial model at changeset 28bb4238f19c.
Collaboration
To begin collaborating on this work, please use your git client and issue this command:
License
The terms of use/license for this work is unspecified.