Skip to content

polykin.copolymerization¤

fit_Finemann_Ross ¤

fit_Finemann_Ross(
    f1: FloatVectorLike, F1: FloatVectorLike
) -> tuple[float, float]

Fit binary copolymer composition data using the Finemann-Ross method.

\[ \left(\frac{x(y-1)}{y}\right) = -r_2 + r_1 \left(\frac{x^2}{y}\right) \]

where \(x = f_1/(1 - f_1)\), \(y = F_1/(1 - F_1)\), \(r_i\) are the reactivity ratios, \(f_1\) is the monomer composition, and \(F_1\) is the instantaneous copolymer composition.

Reference

  • Fineman, M.; Ross, S. D. J. Polymer Sci. 1950, 5, 259.
Note

The Finemann-Ross method relies on a linearization procedure that can lead to significant statistical bias. The method is provided for its historical significance, but should no longer be used for fitting reactivity ratios.

PARAMETER DESCRIPTION
f1

Vector of molar fraction of M1, \(f_1\).

TYPE: FloatVectorLike

F1

Vector of instantaneous copolymer composition of M1, \(F_1\).

TYPE: FloatVectorLike

RETURNS DESCRIPTION
tuple[float, float]

Point estimates of the reactivity ratios \((r_1, r_2)\).

See also

Examples:

>>> from polykin.copolymerization.fitting import fit_Finemann_Ross
>>>
>>> f1 = [0.186, 0.299, 0.527, 0.600, 0.700, 0.798]
>>> F1 = [0.196, 0.279, 0.415, 0.473, 0.542, 0.634]
>>>
>>> r1, r2 = fit_Finemann_Ross(f1, F1)
>>> print(f"r1={r1:.2f}, r2={r2:.2f}")
r1=0.27, r2=0.84
Source code in src/polykin/copolymerization/fitting.py
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
def fit_Finemann_Ross(f1: FloatVectorLike,
                      F1: FloatVectorLike
                      ) -> tuple[float, float]:
    r"""Fit binary copolymer composition data using the Finemann-Ross method.

    $$ \left(\frac{x(y-1)}{y}\right) = -r_2 + r_1 \left(\frac{x^2}{y}\right) $$

    where $x = f_1/(1 - f_1)$, $y = F_1/(1 - F_1)$, $r_i$ are the reactivity
    ratios, $f_1$ is the monomer composition, and $F_1$ is the instantaneous
    copolymer composition.

    **Reference**

    *   Fineman, M.; Ross, S. D. J. Polymer Sci. 1950, 5, 259.

    Note
    ----
    The Finemann-Ross method relies on a linearization procedure that can lead
    to significant statistical bias. The method is provided for its historical
    significance, but should no longer be used for fitting reactivity ratios.


    Parameters
    ----------
    f1 : FloatVectorLike
        Vector of molar fraction of M1, $f_1$.
    F1 : FloatVectorLike
        Vector of instantaneous copolymer composition of M1, $F_1$.

    Returns
    -------
    tuple[float, float]
        Point estimates of the reactivity ratios $(r_1, r_2)$.

    See also
    --------
    * [`fit_copo_data`](fit_copo_data.md): alternative
      (recommended) method.  

    Examples
    --------
    >>> from polykin.copolymerization.fitting import fit_Finemann_Ross
    >>>
    >>> f1 = [0.186, 0.299, 0.527, 0.600, 0.700, 0.798]
    >>> F1 = [0.196, 0.279, 0.415, 0.473, 0.542, 0.634]
    >>>
    >>> r1, r2 = fit_Finemann_Ross(f1, F1)
    >>> print(f"r1={r1:.2f}, r2={r2:.2f}")
    r1=0.27, r2=0.84

    """

    f1 = np.asarray(f1)
    F1 = np.asarray(F1)

    # Variable transformation
    x = f1/(1. - f1)
    y = F1/(1. - F1)
    H = x**2/y
    G = x*(y - 1.)/y

    # Linear regression
    solution = linregress(H, G)
    r1 = solution.slope  # type: ignore
    r2 = - solution.intercept  # type: ignore

    return (r1, r2)