Thanks for confirming, yes I should have noticed glycine is there. Was wondering a couple other things:

(1) If I add a reagent, am I right in thinking the Ka values should be entered in order of deprotonation so e.g. for lysine, Ka1 is H

_{3}Lys

^{2+} to H

_{2}Lys

^{+}, Ka2 H

_{2}Lys

^{+} to HLys, Ka3 is HLys to Lys

^{-}. Therefore the order is always strictly Ka1>Ka2>Ka3 (?). So we rearrange equilibria in descending order of K's magnitude. Rather than as

here for example, where Ka3>Ka2 for aspartic acid or hystidine. If unclear what I mean, let me know, I can just calculate some examples and see if they agree with Buffer Maker (I can't seem to get lysine, aspartic acid etc working on it):

For example, 0.048 M of lysine + 0.022 M of aspartic acid + 0.065 M of histidine, using pKa values in the link ( 2.18, 8.95, 10.53 for lysine; 1.88, 9.60, 3.65 for aspartic acid; 1.82, 9.17, 6.00 for histidine), should give pH=8.50(7) following this method (w/o activity correction). Or just 0.065 M histidine gives pH=7.58(5), or 0.048 M lysine gives pH=9.73(8 ), or 0.022 M aspartic acid gives pH=2.88(8 ). Are these correct?

(2) How does Buffer Maker extract the [H

^{+}]. If it solves the root of the system of equations, it would find a large number of roots, is it sufficient to select real positive root or does it have/need a protocol for choosing out of multiple real positive roots? (If this can ever happen chemically...) If it follows some other procedure it's clearly fast so am curious about that.

-----

Equation system for lysine (or histidine):

a=[Lys-], b = [HLys], c = [H2Lys+], d = [H3Lys 2+]

10^(-2.18) = c*h/d

10^(-8.95) = b*h/c

10^(-10.53) = a*h/b

0.048 = a+b+c+d

h+c+2d = 10^(-14)/h + a

Solve for: h, a,b,c,d

For aspartic acid:

a=[Asp 2-], b = [HAsp-], c = [H2Asp], d = [H3Asp+]

10^(-1.88) = c*h/d

10^(-3.65) = b*h/c

10^(-9.60) = a*h/b

0.022 = a+b+c+d

h+d = 10^(-14)/h + b + 2a

Solve for: h, a,b,c,d