- Skim Gillette (1983) and still do not understand the matrix and spectra connection. Perhaps previous references therein should be read first.
- Mixture spectra matrix
$$
\mathbf{D} = \left(
\begin{array}{ccc}
0.26 & 0.22 & 0.14 \newline
0.20 & 0.40 & 0.80 \newline
1.60 & 1.20 & 0.40 \newline
0.12 & 0.14 & 0.18
\end{array}
\right)
$$
- Covariance / correlation marix
$$
\mathbf{C} = \left(
\begin{array}{ccc}
2.682 & 2.074 & 0.858 \newline
2.074 & 1.668 & 0.856 \newline
0.858 & 0.856 & 0.852
\end{array}
\right)
$$
- Relation
$$
\mathbf{C} = \mathbf{D}^T \mathbf{D}.
$$
- Code https://onecompiler.com/python/3zrz763xa
import numpy as np
D = np.array(
[
[0.26, 0.22, 0.14],
[0.20, 0.40, 0.80],
[1.60, 1.20, 0.40],
[0.12, 0.14, 0.18]
]
)
print(D)
DT = D.T
print(DT)
C = DT @ D
print(C)
[[0.26 0.22 0.14]
[0.2 0.4 0.8 ]
[1.6 1.2 0.4 ]
[0.12 0.14 0.18]]
[[0.26 0.2 1.6 0.12]
[0.22 0.4 1.2 0.14]
[0.14 0.8 0.4 0.18]]
[[2.682 2.074 0.858]
[2.074 1.668 0.856]
[0.858 0.856 0.852]]
- Using previous $\mathbf{C}$.
- Relation $\mathbf{C}\mathbf{E} = \mathbf{E} \mathbf{L}$.
- Result
$$
\mathbf{E} = \left(
\begin{array}{ccc}
0.745 & -0.400 & 0.000 \newline
0.596 & 0.039 & 0.000 \newline
0.300 & 0.916 & 0.000
\end{array}
\right)
$$
$$
\mathbf{L} = \left(
\begin{array}{ccc}
4.688 & 0.000 & 0.000 \newline
0.000 & 0.514 & 0.000 \newline
0.000 & 0.000 & 0.000
\end{array}
\right)
$$
- Code https://onecompiler.com/python/3zrzg7yfj
import numpy as np
from numpy import linalg as la
C = np.array(
[
[2.682, 2.074, 0.858],
[2.074, 1.668, 0.856],
[0.858, 0.856, 0.852],
]
)
print("C =",)
print(C)
print()
print("CE = EL")
L, E = la.eig(C)
print("E =")
print(E.round(3))
print()
print("L =")
print(np.diag(L).round(3))
print()
print("C @ E =")
print((C @ E).round(3))
print()
print("E @ L =")
print((E @ np.diag(L)).round(3))
print()
C =
[[2.682 2.074 0.858]
[2.074 1.668 0.856]
[0.858 0.856 0.852]]
CE = EL
E =
[[-0.745 -0.535 -0.4 ]
[-0.596 0.802 0.039]
[-0.3 -0.267 0.916]]
L =
[[4.688 0. 0. ]
[0. 0. 0. ]
[0. 0. 0.514]]
C @ E =
[[-3.491 0. -0.205]
[-2.796 0. 0.02 ]
[-1.405 0. 0.471]]
E @ L =
[[-3.491 -0. -0.205]
[-2.796 0. 0.02 ]
[-1.405 -0. 0.471]]
- Notice that eigenvalues are the same but not the eigenvectors.
- Comparison
E | Gillette (1983) | NumPy |
---|
1 | [0.745, 0.596, 0.300] | [-0.745, -0.596, -0.300] |
2 | [−0.400, 0.039, 0.916] | [-0.535, 0.802, -0.267] |
3 | [0.000, 0.000, 0.000] | [-0.400, 0.039, 0.916] |
- Explanation: N/A.
import numpy as np
D = np.array(
[
[0.26, 0.22, 0.14],
[0.20, 0.40, 0.80],
[1.60, 1.20, 0.40],
[0.12, 0.14, 0.18],
]
)
E = np.array(
[
[0.745, -0.400],
[0.596, 0.039],
[0.300, 0.916],
]
)
A = D @ E
print("D ="); print(D); print()
print("E ="); print(E); print()
print("A ="); print(A.round(3)); print()
D =
[[0.26 0.22 0.14]
[0.2 0.4 0.8 ]
[1.6 1.2 0.4 ]
[0.12 0.14 0.18]]
E =
[[ 0.745 -0.4 ]
[ 0.596 0.039]
[ 0.3 0.916]]
A =
[[ 0.367 0.033]
[ 0.627 0.668]
[ 2.027 -0.227]
[ 0.227 0.122]]
30-oct-2023
Matrices c, d
, c, e, l
, a, d, e
, next last page of main ref.
- Paul C. Gillette, Jerome B. Lando, Jack L. Koenig, “Factor analysis for separation of pure component spectra from mixture spectra”, Analytical Chemistry, vol 55, no 4, pp 630-633, Apr 1983, url https://doi.org/10.1021/ac00255a011. pr5ye
06-nov-2023
Value less that $10^{-8}$ is assumed to be $0$ is proposed by Aria.- Results: All are confirmed 7d9d71e
- How to get the mixture spectra matrix $\mathbf{D}$ from the mixture, e.g. Figs. 7 and 8 is still still unknown.
30-oct-2023
A reference, Gillette (1983), is given. pr5ye26-oct-2023
Google drive links is given for current available data. 762au