矩阵运算
曲面拟合
形如二次多项式:
$f(x, y) = a_{20}x^2 + a_{02}y^2 + a_{11}xy + a_{10}x + a_{01}y + a_{00}$
使用最小二乘法计算系数矩阵a,即使得计算值和真实值之间的误差平方和最小
得到矩阵形如:
$$\left[
\begin{matrix}
x_1^2 & y_1^2 & x_1y_1 & x_1 & y_1 & 1 \
. & . & . & .& . & .\
. & . & . & .& . & . \
. & . & . & .& . & . \
x_m^2 & y_1^2 & x_my_m & x_m & y_m & 1
\end{matrix}
\right]
\left[
\begin{matrix}
a_{20} \
a_{02} \
a_{11} \
a_{10} \
a_{01} \
a_{00}
\end{matrix}
\right] =
\left[
\begin{matrix}
f(x_1, y_1) \
. \
. \
. \
f(x_m, y_m)
\end{matrix}
\right]$$
由
$$
A.a = y
$$
$$
A^T.A.a = A^T.y
$$
$$
a = (A^T.A)^{-1}.A^T.y
$$
即可求出系数矩阵a
非负最小二乘(NNLS)
解$argmin_x ||A.x - b||_2$问题
调用scipy.optimize.nnls(A, b),即可求得使上式结果最小的x。对上一节提到的多项式问题,这里的x就是待求的系数矩阵a,而A矩阵就是多项式构造的矩阵,b就是函数结果f。