Esta sección resume las ecuaciones que MatLens aplica en el análisis de dispersión dinámica de luz (DLS) y de movilidad electroforética (potencial zeta), con las convenciones exactas del código.
Constantes y valores por defecto
Constantes CODATA 2018: k_B = 1.380649\times10^{-23} J/K, e = 1.602176634\times10^{-19} C, N_A = 6.02214076\times10^{23} mol⁻¹, \varepsilon_0 = 8.8541878128\times10^{-12} F/m.
Valores por defecto (agua a 25 °C): T = 298.15 K, \eta = 0.8900 mPa·s (IAPWS R12-08), \varepsilon_r = 78.30, n = 1.331 a 633 nm; longitud de onda \lambda_0 = 632.8 nm (He–Ne) y ángulo \theta = 173^\circ (retrodispersión no invasiva). La viscosidad y la permitividad no se recalculan al cambiar T: deben introducirse para la temperatura real.
Vector de dispersión y relación de Stokes–Einstein
Código: matlens/core/dls.py::scattering_vector, matlens/core/dls.py::stokes_einstein_d, matlens/core/dls.py::stokes_einstein_D.
| Símbolo | Significado | Unidades |
|---|---|---|
| q | módulo del vector de dispersión | m⁻¹ |
| n | índice de refracción del medio | — |
| \lambda_0 | longitud de onda del láser en el vacío | nm (convertida a m) |
| \theta | ángulo de detección | grados |
| D | coeficiente de difusión traslacional | m²/s |
| d_H | diámetro hidrodinámico | m (se informa en nm) |
| \eta | viscosidad del medio | mPa·s (convertida a Pa·s) |
| T | temperatura | K |
Validez: esferas que difunden libremente en un medio newtoniano, sin interacciones (dilución suficiente).
Referencia: Einstein, Ann. Phys. 17, 549 (1905).
Relación de Siegert y método de cumulantes (promedio Z, PDI)
Código: matlens/core/dls.py::cumulants, matlens/core/dls.py::cumulant_correlogram.
La relación de Siegert liga la autocorrelación de intensidad con la de campo:
El desarrollo en cumulantes de \ln g_1 hasta segundo (o tercer) orden da el modelo que se ajusta:
| Símbolo | Significado | Unidades |
|---|---|---|
| \tau | tiempo de retardo | s |
| g_2-1 | correlograma de intensidad normalizado | — |
| \beta | intercepto (factor de coherencia) | — |
| \Gamma | tasa media de decaimiento | s⁻¹ |
| \mu_2, \mu_3 | segundo y tercer cumulante | s⁻², s⁻³ |
| PDI | índice de polidispersidad | — |
| Z_{\mathrm{ave}} | diámetro medio armónico ponderado en intensidad | nm |
Procedimiento de ajuste:
- Si el correlograma se entrega como g_2 (la mediana del último 10 % de los puntos, mínimo 3, es mayor que 0.5 y hay al menos 10 puntos), se resta 1 automáticamente.
- El valor inicial c_0 es el máximo del primer 5 % de los puntos (mínimo 3). Se usan solo los puntos con g_2-1 > \text{corte}\cdot c_0 (corte por defecto 0.1), y solo el primer bloque contiguo que supera el corte (el ruido cerca de la línea base se descarta aunque vuelva a cruzarlo).
- Mínimos cuadrados lineales ponderados sobre \ln(g_2-1) con pesos w_i = (g_2-1)_i^2, la inversa de la varianza del logaritmo. Orden 2 por defecto; con orden 3 se añade la columna -\tau^3/3. No se necesitan valores iniciales (problema lineal).
- Se requieren al menos orden + 3 puntos y \Gamma > 0.
Incertidumbre: el código no propaga incertidumbre a Z_{\mathrm{ave}} ni al PDI; informa el residuo cuadrático medio del ajuste en la escala de g_2-1.
Controles de validez: aviso si \mathrm{PDI} > 0.7 (distribución muy ancha, muestra probablemente no apta para DLS), si \mathrm{PDI} < 0 (ajuste no fiable) y si \beta \notin (0, 1.2] (normalización dudosa).
Referencias: Koppel, J. Chem. Phys. 57, 4814 (1972); ISO 22412:2017, §8.2 y anexo; Frisken, Appl. Opt. 40, 4087 (2001) (ponderación); Malvern Instruments, "Dynamic light scattering: common terms defined", Inform white paper MRK1764 (2011) (umbral de PDI).
Distribución de tamaños por NNLS regularizado (tipo CONTIN)
Código: matlens/core/dls.py::size_distribution.
| Símbolo | Significado | Unidades |
|---|---|---|
| d_k | rejilla de diámetros, logarítmica, 80 clases entre 0.5 y 10 000 nm (por defecto) | nm |
| G_k | peso en intensidad de la clase k (no negativo) | — |
| L | matriz de segundas diferencias, filas (1,-2,1) | — |
| \alpha | parámetro de regularización de Tikhonov | — |
Procedimiento:
- \beta por defecto es el intercepto del ajuste de cumulantes. Se descartan los puntos con g_1 \le 10^{-3} (se exigen al menos 10).
- El sistema aumentado [K;\,\alpha L]\,G = [g_1;\,0] se resuelve con NNLS (
scipy.optimize.nnls). - Si no se da \alpha, se prueban 25 valores logarítmicos entre 10^{-4} y 10 y se elige el de máxima curvatura de la curva L (\log\lVert KG-g_1\rVert frente a \log\lVert LG\rVert, derivadas numéricas respecto a \ln\alpha, excluyendo los extremos).
- La distribución se normaliza a suma 1. Los picos se separan donde el peso cae por debajo del 1 % del máximo; para cada pico se informa la moda, la media geométrica ponderada en intensidad \exp\left(\sum w\ln d / \sum w\right) y la fracción.
Incertidumbre: no se propaga; se informa el residuo \lVert KG-g_1\rVert/\sqrt{N}. Siempre se emite un aviso de problema mal condicionado (picos cercanos se funden y picos pequeños pueden ser artefactos) y otro si más del 5 % de la intensidad cae en las dos clases de cada borde.
Referencias: Provencher, Comput. Phys. Commun. 27, 213 (1982); Hansen, SIAM Rev. 34, 561 (1992) (curva L).
Nota (diferencia con la literatura): CONTIN original elige \alpha mediante una prueba F y un nivel de probabilidad, y usa la ponderación por varianza de los datos; MatLens usa la esquina de la curva L, sin pesos, ajustando g_1 (no g_2-1).
Conversión intensidad → volumen → número (Mie / Rayleigh)
Código: matlens/core/dls.py::convert_distribution, matlens/core/dls.py::particle_scattering, matlens/core/dls.py::mie_s1_s2, matlens/core/dls.py::rayleigh_valid.
| Símbolo | Significado | Unidades |
|---|---|---|
| I_k | distribución en intensidad (valores negativos recortados a 0) | % |
| N_k, V_k | distribuciones en número y volumen, renormalizadas al 100 % | % |
| S_1 | función de amplitud de dispersión perpendicular (BHMIE) | — |
| x | parámetro de tamaño | — |
| m | índice relativo complejo (por defecto n_p = 1.59, poliestireno) | — |
S_1 se calcula con el algoritmo BHMIE (derivada logarítmica por recurrencia descendente, número de términos x + 4x^{1/3} + 2).
Validez: la aproximación de Rayleigh se acepta solo si todas las clases con intensidad no nula cumplen d \le \lambda_0/(10\,n_{\mathrm{medio}}); si no, se avisa. Si el índice de la partícula coincide con el del medio (sin parte imaginaria) el resultado se marca inválido. Siempre se avisa de que las distribuciones en volumen y número amplifican el ruido y dependen del índice supuesto. Supone esferas homogéneas.
Referencias: Bohren & Huffman, Absorption and Scattering of Light by Small Particles, Wiley 1983, §4.4, §5.2 y apéndice A.
Potencial zeta: ecuación de Henry, Smoluchowski, Hückel y Ohshima
Código: matlens/core/dls.py::zeta_from_mobility, matlens/core/dls.py::mobility_from_zeta, matlens/core/dls.py::henry_function, matlens/core/dls.py::debye_length_nm.
| Símbolo | Significado | Unidades |
|---|---|---|
| \mu_e | movilidad electroforética | µm·cm/(V·s) =10^{-8} m²/(V·s) |
| \zeta | potencial zeta | mV |
| f(\kappa a) | función de Henry | — |
| \kappa^{-1} | longitud de Debye | nm |
| a | radio de la partícula | m |
| I | fuerza iónica (electrolito simétrico) | mol/L (convertida a mol/m³) |
Modelos: smoluchowski usa f = 1.5 (doble capa delgada, \kappa a \gg 1, medio acuoso); huckel usa f = 1.0 (\kappa a \ll 1, medio no polar); henry calcula f(\kappa a) con la forma cerrada de Ohshima y exige \kappa a. Para \kappa a \le 0 la función devuelve 1.
Validez: aviso si se usa Smoluchowski con \kappa a < 10 o Hückel con \kappa a > 0.1. Supone esferas rígidas, potencial bajo (sin relajación de la doble capa) y la permitividad y viscosidad indicadas.
Incertidumbre: no se propaga.
Referencias: Henry, Proc. R. Soc. A 133, 106 (1931); Ohshima, J. Colloid Interface Sci. 168, 269 (1994); Hunter, Foundations of Colloid Science, 2.ª ed., OUP 2001, cap. 7 (longitud de Debye).
Media y dispersión de una distribución
Código: matlens/core/dls.py::distribution_mean.
Pesos negativos se recortan a 0. Referencia: implementación propia.
Origen físico y límites de validez
La DLS mide fluctuaciones de la intensidad dispersada por el movimiento browniano. Para partículas que difunden libremente, el campo dispersado decae como g_1(\tau) = e^{-Dq^2\tau} (propagador de difusión en el espacio recíproco), y para una distribución de tamaños g_1(\tau) = \int G(\Gamma)\,e^{-\Gamma\tau}\,d\Gamma, una transformada de Laplace. La relación de Siegert supone un campo gaussiano (muchas partículas independientes en el volumen de dispersión, sin heterodinaje). El desarrollo en cumulantes es la serie de Taylor de \ln g_1 en torno a \tau = 0: \Gamma es la media de G(\Gamma) y \mu_2 su varianza, por eso solo describe bien distribuciones estrechas y unimodales y el ajuste se limita a la parte inicial del decaimiento (corte 0.1).
El promedio Z es un diámetro armónico ponderado en intensidad: como la intensidad de partículas pequeñas escala con d^6 (Rayleigh), unas pocas partículas grandes o agregados dominan el resultado. Stokes–Einstein falla para partículas no esféricas (da el diámetro de la esfera equivalente en difusión), en medios no newtonianos, en suspensiones concentradas (difusión colectiva, dispersión múltiple) y si hay sedimentación durante la medida.
Algoritmo completo de MatLens (cumulantes)
- Se eliminan los puntos no finitos o con \tau \le 0 y se ordenan por \tau.
- Detección de g_2: si hay al menos 10 puntos y la mediana del último 10 % (mínimo 3) supera 0.5, se resta 1.
- c_0 = \max del primer 5 % (mínimo 3 puntos); máscara g_2-1 > 0.1\,c_0; se conserva solo el primer bloque contiguo.
- Mínimos cuadrados lineales (
numpy.linalg.lstsq) de \ln y sobre las columnas (1, -2\tau, \tau^2[, -\tau^3/3]), multiplicando filas y objetivo por y (peso y^2). - \beta = e^{\text{coef}_0}, \Gamma, \mu_2; q con los parámetros ópticos; D = \Gamma/q^2; Z_\text{ave} por Stokes–Einstein; \mathrm{PDI} = \mu_2/\Gamma^2.
- Errores (no avisos): menos de orden + 3 puntos sobre el corte, o \Gamma \le 0.
Resumen de incertidumbre y avisos
| Resultado | Incertidumbre que da MatLens | Lo que no incluye |
|---|---|---|
| Z_\text{ave}, PDI | ninguna (solo el RMS del ajuste) | repetibilidad entre medidas; errores de T, \eta, n, \theta |
| Distribución NNLS | ninguna (residuo) | ambigüedad de la inversión de Laplace; elección de \alpha |
| \zeta | ninguna | error de la movilidad, de \varepsilon_r, \eta y del modelo f(\kappa a) |
Avisos que emite el código (warning): PDI > 0.7; PDI < 0; \beta \notin (0, 1.2]; problema mal condicionado (NNLS, siempre); más del 5 % de la intensidad en los bordes de la rejilla; Rayleigh fuera de validez; volumen y número dependientes del índice (siempre); Smoluchowski con \kappa a < 10; Hückel con \kappa a > 0.1. Inválido (invalid): índice de la partícula igual al del medio en la conversión Mie. ISO 22412:2017 pide repetir la medida e informar la dispersión del promedio Z; MatLens no lo hace automáticamente.
Ejemplo resuelto: cumulantes
Correlograma sintético de esferas de 100 nm en agua a 25 °C (\lambda_0 = 632.8 nm, \theta = 173^\circ), \beta = 0.90, PDI = 0.10, 200 retardos logarítmicos entre 10^{-7} y 10^{-1} s y ruido gaussiano \sigma = 10^{-3} (semilla fija). Las tasas de decaimiento siguen una distribución gamma de media \Gamma y varianza \mu_2, de modo que g_1(\tau) = (1+\Gamma\tau/k)^{-k} con k = 1/\mathrm{PDI} (sus cumulantes son exactamente \Gamma y \mu_2). Resultado de cumulants (orden 2, corte 0.1):
| Magnitud | Valor |
|---|---|
| q | 2.63822e+07 m⁻¹ |
| D verdadero | 4.9075e-12 m²/s |
| \Gamma verdadero | 3415.7 s⁻¹ |
| \Gamma ajustado | 3413.3 s⁻¹ |
| \beta ajustado | 0.9 |
| Z_\mathrm{ave} | 100.07 nm |
| PDI | 0.0934 |
| puntos usados | 118 |
| RMS del residuo | 0.00108 |
| validez | ok |
Ejemplo resuelto: potencial zeta
Movilidad \mu_e = -3.0 µm·cm/(V·s), partícula de radio a = 50 nm en NaCl 1 mM (agua a 25 °C). debye_length_nm da \kappa^{-1} = 9.608 nm, luego \kappa a = 5.204. zeta_from_mobility con los tres modelos:
| Modelo | f(\kappa a) | \zeta (mV) | validez |
|---|---|---|---|
| smoluchowski | 1.5 | -38.51 | warning |
| huckel | 1 | -57.77 | warning |
| henry | 1.156 | -49.98 | ok |