function [y] = UpdateEquations(x,p,Params,NumChannelTypes,ActivationVarsPerChannelType,NumActivationVars,StatesPerChannelType,InputCurrent,Alphas,Betas)
gs=Params{1};
Es=Params{2};
C=Params{3};
V_old = x(1);
Activations_old = x(2:NumActivationVars+1);
V_rhs = 0;
Activation_rhs = zeros(NumActivationVars,1);
ActivationIndex = 1;
Ind = 1+NumActivationVars;
for i = 1:NumChannelTypes
Ind = Ind+StatesPerChannelType(i);
%get mean and fluctuations of fractions of open channel of this type
Fracs_old = p{i}(StatesPerChannelType(i));
Flucts_old = x(Ind);
%update the membrane potential to include this ionic current
%ensure the total conductance is bounded to the interval [0,gs(i)]
V_rhs = V_rhs - gs(i)*(max(0,min(1,Fracs_old + Flucts_old))) *(V_old-Es(i));
%update the activation variables for this ionic current
for j = 1:ActivationVarsPerChannelType(i)
Activation_rhs(ActivationIndex) = Alphas(ActivationIndex)*(1-Activations_old(ActivationIndex))-Betas(ActivationIndex)*Activations_old(ActivationIndex);
ActivationIndex = ActivationIndex + 1;
end
end
%update with input current, leak current and capacitance
V_rhs = (V_rhs + InputCurrent - gs(end)*(V_old-Es(end)))/C;
%update membrane potential and activation variables
y = zeros(size(x));
y(1) = V_rhs;
y(2:NumActivationVars+1) = Activation_rhs;