Open In Colab

Example with DCHYKR

Introduction

Consider a 0.10 M solution of the fully unprotonated oligopeptide:

DCHYKR

This peptide, Asp–Cys–His–Tyr–Lys–Arg, contains several ionizable groups, each of which can accept a proton from water and contribute to hydroxide formation.


Ionizable Groups and pKa Values

Ionizable Group pKa
C-terminus 3.6
Asp side chain 3.9
His side chain 6.0
N-terminus 7.4
Cys side chain 8.3
Tyr side chain 10.1
Lys side chain 10.5
Arg side chain 12.5

Approach 1: Strongest Basic Site Approximation

The strongest basic site is the conjugate base of the group with the highest pKa.

For this peptide, that is the arginine side chain:

pKa(Arg) = 12.5

The equilibrium is:

\[\mathrm{Arg} + \mathrm{H_2O} \rightleftharpoons \mathrm{ArgH^+} + \mathrm{OH^-}\]

Using:

\[K_b = \frac{K_w}{K_a}\] \[K_a = 10^{-12.5}\] \[K_b = \frac{10^{-14}}{10^{-12.5}}\] \[K_b = 10^{-1.5} = 3.16 \times 10^{-2}\]

Set up the equilibrium:

\[K_b = \frac{x^2}{0.10 - x}\] \[3.16 \times 10^{-2} = \frac{x^2}{0.10 - x}\]

Solving the quadratic gives:

\[x = 4.30 \times 10^{-2}\ \mathrm{M}\]

Therefore:

\[[\mathrm{OH^-}]=4.30 \times 10^{-2}\ \mathrm{M}\] \[\mathrm{pOH} = -\log(4.30 \times 10^{-2})=1.37\] \[\mathrm{pH} = 14.00 - 1.37\]

pH \(\approx\) 12.63


Approach 2: Full Multi-Ionizable-Group Model Using Bisection

The first approach only considers the strongest basic site. A more complete model includes protonation of all ionizable groups.

For each group:

\[\text{fraction protonated}=\frac{1}{1 + 10^{(\mathrm{pH}-\mathrm{p}K_a)}}\]

The hydroxide concentration is:

\[[\mathrm{OH^-}] = 10^{(\mathrm{pH}-14)}\]

The numerical equation becomes:

\[10^{(\mathrm{pH}-14)}=0.10 \sum_i \left[ \frac{1}{1 + 10^{(\mathrm{pH}-\mathrm{p}K_{a,i})}} \right]\]

Using all pKa values:

import math

pKas = [3.6, 3.9, 6.0, 7.4, 8.3, 10.1, 10.5, 12.5]

def f(pH):
    lhs = 10**(pH - 14)

    rhs = 0.10 * sum(
        1 / (1 + 10**(pH - pKa))
        for pKa in pKas
    )

    return lhs - rhs

low, high = 0.0, 14.0

for _ in range(100):
    mid = (low + high) / 2

    if f(low) * f(mid) <= 0:
        high = mid
    else:
        low = mid

pH = (low + high) / 2
OH = 10**(pH - 14)

print(f"pH = {pH:.6f}")
print(f"[OH-] = {OH:.6e} M")

Output:

pH = 12.636028
[OH-] = 4.325419e-02 M

So the full bisection model gives:

pH \(\approx\) 12.64


Approach 3: Full Multi-Ionizable-Group Model Using fsolve

The same equation can also be solved using SciPy’s fsolve.

from scipy.optimize import fsolve

pKas = [3.6, 3.9, 6.0, 7.4, 8.3, 10.1, 10.5, 12.5]

def equation(pH):
    return 10**(pH - 14) - 0.10 * sum(
        1 / (1 + 10**(pH - pKa))
        for pKa in pKas
    )

pH = fsolve(equation, 12.6)[0]

print(f"pH = {pH:.6f}")

Output:

pH = 12.636028
[OH-] = 4.325419e-02 M

This confirms the bisection result.


Conclusion

For a 0.10 M fully unprotonated solution of DCHYKR, the pH depends on the level of approximation used:

Approach Description pH
1 Strongest basic site only 12.63
2 Full model using bisection 12.65
3 Full model using fsolve 12.65

The simplified strongest-site method gives a close estimate because arginine is the dominant basic site. The full models are slightly more accurate because they include smaller contributions from lysine, tyrosine, cysteine, and the other ionizable groups.

When Can the Quadratic Be Skipped?

A useful rule is to check whether the change in concentration, (x), is small compared with the initial concentration, (\(C_0\)).

For a weak base:

\[K_b = \frac{x^2}{C_0 - x}\]

the common approximation is:

\[C_0 - x \approx C_0\]

which gives:

\[x \approx \sqrt{K_b C_0}\]

This approximation is only valid when (x) is much smaller than (C_0):

\[\frac{x}{C_0} \ll 1\]

A common chemistry rule of thumb is the 5% rule:

\[\frac{x}{C_0} < 0.05\]

Substituting (\(x \approx \sqrt{K_b C_0}\)) gives:

\[\sqrt{\frac{K_b}{C_0}} < 0.05\]

or equivalently:

\[K_b < 0.0025,C_0\]

Applying the Rule to the Arginine Example

For the arginine side chain:

\[C_0 = 0.10\ \mathrm{M}\]

and

\[K_b = 3.16 \times 10^{-2}\]

The 5% threshold is:

\[0.0025(0.10)=2.5 \times 10^{-4}\]

Since

\[3.16 \times 10^{-2} \gg 2.5 \times 10^{-4}\]

the approximation is clearly invalid and the quadratic equation should be solved.

We can also estimate the magnitude of (x) directly:

\[x_{\text{approx}}=\sqrt{(3.16 \times 10^{-2})(0.10)}=5.62 \times 10^{-2}\ \mathrm{M}\]

This corresponds to:

\[\frac{x_{\text{approx}}}{C_0}=\frac{0.0562}{0.10}=0.562 56.2%\]

which is far larger than 5%.

Using the exact quadratic solution gives:

\[x=4.30 \times 10^{-2}\ \mathrm{M}\]

so

\[\frac{x}{C_0}=\frac{0.0430}{0.10}=0.43 43%\]

Even the exact solution consumes 43% of the initial concentration, confirming that the approximation \((C_0 - x \approx C_0)\) is not justified.

Practical Guidelines

\((x/C_0)\) Recommendation
< 1% Approximation is excellent
1–5% Usually acceptable
5–10% Borderline; check the error
> 10% Solve the quadratic
> 20% Definitely solve the quadratic

For the arginine example, \((x/C_0 \approx 0.43)\) (43%), so solving the quadratic is necessary to obtain an accurate pH estimate.

Where Does the Fraction Protonated Formula Come From?

The expression used in the full peptide model comes directly from the Henderson-Hasselbalch equation.

Consider a protonatable group B and its protonated form BH+:

\[BH^+ \rightleftharpoons B + H^+\]

The acid dissociation constant is

\[K_a = \frac{[B][H^+]}{[BH^+]}\]

Taking the negative logarithm gives the Henderson-Hasselbalch equation:

\[\mathrm{pH} = \mathrm{p}K_a + \log_{10} \left( \frac{[B]}{[BH^+]} \right)\]

Rearranging:

\[10^{(\mathrm{pH}-\mathrm{p}K_a)} = \frac{[B]}{[BH^+]}\]

Now define the fraction protonated:

\[f = \frac{[BH^+]} {[B] + [BH^+]}\]

Substitute

\[[B] = [BH^+] \, 10^{(\mathrm{pH}-\mathrm{p}K_a)}\]

into the denominator:

\[f = \frac{[BH^+]} {[BH^+] + [BH^+]10^{(\mathrm{pH}-\mathrm{p}K_a)}}\]

Factor out [BH+]:

\[f = \frac{1} {1 + 10^{(\mathrm{pH}-\mathrm{p}K_a)}}\]

Therefore,

\[\boxed{ \text{fraction protonated} = \frac{1} {1 + 10^{(\mathrm{pH}-\mathrm{p}K_a)}} }\]

Sanity Checks

If

\[\mathrm{pH} = \mathrm{p}K_a\]

then

\[f = \frac{1}{2}\]

so the site is 50% protonated.

If

\[\mathrm{pH} \ll \mathrm{p}K_a\]

then

\[f \approx 1\]

and the site is almost fully protonated.

If

\[\mathrm{pH} \gg \mathrm{p}K_a\]

then

\[f \approx 0\]

and the site is mostly deprotonated.

Example: Arginine at pH 12.64

For arginine,

\[\mathrm{p}K_a = 12.5\]

and

\[\mathrm{pH} = 12.64\]

so

\[f = \frac{1} {1 + 10^{(12.64 - 12.5)}} = \frac{1} {1 + 1.38} \approx 0.42\]

Thus approximately 42% of arginine side chains are protonated at pH 12.64.