I have posted the same question Matlab Central. Walter Roberson has given a pretty good response that has increased the performance by the order of magnitude.
You can convert anonymous functions to regular functions, yes, but the overhead will not be much different. It is the function call overhead that is slowing you down, not the fact that the functions are anonymous.
If you have the Symbolic toolbox, you could pass symbolic V and ion into your formulas, getting out expressions with the various functions expanded "in place"; simplify() that to optimize it a little, and then use matlabFunction() to convert the symbolic expression into an single anonymous function.
syms V ion curr = ch.area*ch.g*ch.m^ch.na*ch.h^ch.ni*(V-ch.E); adot = (ch.infa(ch.alphaa(V,ion),ch.betaa(V,ion),V) - h.m)/ch.taua(ch.alphaa(V,ion),ch.betaa(V,ion),V); idot = (ch.infi(ch.alphai(V,ion),ch.betai(V,ion),V) - ch.h)/ch.taui(ch.alphai(V,ion),ch.betai(V,ion),V); triple = [curr,adot,idot]; triplefcn = matlabFunction(simplify(triple), 'vars', [V, ion]);
Now a call to triplefcn passing in actual V and ion will return an array with curr, adot, idot as the columns. (It will be vectorized, too, which your current expressions are not.)