Weighted Least Squares (WLS)
One of the most important building blocks of the meshless methods is the Moving Least Squares (MLS) approximation , which is implemented in the EngineMLS class. Check EngineMLS unit tests for examples.
Contents
[hide]Notation Cheat sheet
\begin{align*} m \in \N & \dots \text{number of basis functions} \\ n \geq m \in \N & \dots \text{number of points in support domain} \\ k \in \mathbb{N} & \dots \text{dimensionality of vector space} \\ \vec s_j \in \R^k & \dots \text{point in support domain } \quad j=1,\dots,n \\ u_j \in \R & \dots \text{value of function to approximate in }\vec{s}_j \quad j=1,\dots,n \\ \vec p \in \R^k & \dots \text{center point of approximation} \\ b_i\colon \R^k \to \R & \dots \text{basis functions } \quad i=1,\dots,m \\ B_{j, i} \in \R & \dots \text{value of basis functions in support points } b_i(s_j-p) \quad j=1,\dots,n, \quad i=1,\dots,m\\ \omega \colon \R^k \to \R & \dots \text{weight function} \\ w_j \in \R & \dots \text{weights } \omega(\vec{s}_j-\vec{p}) \quad j=1,\dots,n \\ \alpha_i \in \R & \dots \text{expansion coefficients around point } \vec{p} \quad i=1,\dots,m \\ \hat u\colon \R^k \to \R & \dots \text{approximation function (best fit)} \\ \chi_j \in \R & \dots \text{shape coefficient for point }\vec{p} \quad j=1,\dots,n \\ \end{align*}
We will also use \b{s}, \b{u}, \b{b}, \b{\alpha}, \b{\chi} to annotate a column of corresponding values, W as a n\times n diagonal matrix filled with w_j on the diagonal and B as a n\times m matrix filled with B_{j, i}.
Definition of local approximation
Our wish is to approximate an unknown function u\colon \R^k \to \R while knowing n values u(\vec{s}_j) := u_j. The vector of known values will be denoted by \b{u} and the vector of coordinates where those values were achieved by \b{s}. Note that \b{s} is not a vector in the usual sense since its components \vec{s}_j are elements of \R^k, but we will call it vector anyway. The values of \b{s} are called nodes or support nodes or support. The known values \b{u} are also called support values.
In general, an approximation function around point \vec{p}\in\R^k can be written as \hat{u} (\vec{x}) = \sum_{i=1}^m \alpha_i b_i(\vec{x}) = \b{b}(\vec{x})^\T \b{\alpha}
In MLS the goal is to minimize the error of approximation in given values, \b{e} = \hat u(\b{s}) - \b{u} between the approximation function and target function in the known points \b{x}. The error can also be written as B\b{\alpha} - \b{u}, where B is rectangular matrix of dimensions n \times m with rows containing basis function evaluated in points \vec{s}_j. B = \begin{bmatrix} b_1(\vec{s}_1) & \ldots & b_m(\vec{s}_1) \\ \vdots & \ddots & \vdots \\ b_1(\vec{s}_n) & \ldots & b_m(\vec{s}_n) \end{bmatrix} = [b_i(\vec{s}_j)]_{j=1,i=1}^{n,m} = [\b{b}(\vec{s}_j)^\T]_{j=1}^n.
We can choose to minimize any norm of the error vector e and usually choose to minimize the 2-norm or square norm \|\b{e}\| = \|\b{e}\|_2 = \sqrt{\sum_{j=1}^n e_j^2}.
A choice of minimizing the square norm gave this method its name - Least Squares approximation. If we use the weighted version, we get the Weighted Least Squares or WLS. In the most general case we wish to minimize \|\b{e}\|_{2,w}^2 = \b{e}^\T W^2 \b{e} = (B\b{\alpha} - \b{u})^\T W^2(B\b{\alpha} - \b{u}) = \sum_j^n w_j^2 (\hat{u}(\vec{s}_j) - u_j)^2
The problem of finding the coefficients \b{\alpha} that minimize the error \b{e} can be solved with at least three approaches:
- Normal equations (fastest, less accurate) - using Cholesky decomposition of B (requires full rank and m \leq n)
- QR decomposition of B (requires full rank and m \leq n, more precise)
- SVD decomposition of B (more expensive, even more reliable, no rank demand)
In MM we use SVD with regularization described below.
Computing approximation coefficients
Normal equations
We seek the minimum of \|\b{e}\|_2^2 = (B\b{\alpha} - \b{u})^\T(B\b{\alpha} - \b{u})
In case of WLS the equations become (WB)^\T WB \b{\alpha} = WB^\T \b{u}.
Complexity of Cholesky decomposition is \frac{n^3}{3} and complexity of matrix multiplication nm^2. To preform the Cholesky decomposition the rank of WB must be full.
Pros:
- simple to implement
- low computational complexity
Cons:
- numerically unstable
- full rank requirement
QR Decomposition
{\bf{B}} = {\bf{QR}} = \left[ {{{\bf{Q}}_1},{{\bf{Q}}_2}} \right]\left[ {\begin{array}{*{20}{c}} {{{\bf{R}}_1}}\\ 0 \end{array}} \right]
Complexity of QR decomposition \frac{2}{3}m{{n}^{2}}+{{n}^{2}}+\frac{1}{3}n-2=O({{n}^{3}})
Pros: better stability in comparison with normal equations cons: higher complexity
SVD decomposition
In linear algebra, the singular value decomposition (SVD) is a factorization of a real or complex matrix. It has many useful applications in signal processing and statistics.
Formally, the singular value decomposition of an m \times n real or complex matrix \bf{B} is a factorization of the form \bf{B}= \bf{U\Sigma V^\T}, where \bf{U} is an m \times m real or complex unitary matrix, \bf{\Sigma} is an m \times n rectangular diagonal matrix with non-negative real numbers on the diagonal, and \bf{V}^\T is an n \times n real or complex unitary matrix. The diagonal entries \Sigma_{ii} are known as the singular values of \bf{B}. The m columns of \bf{U} and the n columns of \bf{V} are called the left-singular vectors and right-singular vectors of \bf{B}, respectively.
The singular value decomposition and the eigen decomposition are closely related. Namely:
- The left-singular vectors of \bf{B} are eigen vectors of \bf{BB}^\T.
- The right-singular vectors of \bf{B} are eigen vectors of \bf{B}^\T{B}.
- The non-zero singular values of \bf{B} (found on the diagonal entries of \bf{\Sigma}) are the square roots of the non-zero eigenvalues of both \bf{B}^\T\bf{B} and \bf{B}^\T \bf{B}.
with SVD we can write \bf{B} as \bf{B}=\bf{U\Sigma{{V}^{\T}}}
Again we can solve either the system or compute pseudo inverse as
\bf{B}^{-1} = \left( \bf{U\Sigma V}^\T\right)^{-1} = \bf{V}\bf{\Sigma^{-1}U}^\T
SVD decomposition complexity 2mn^2+2n^3 = O(n^3)
Pros: stable cons: high complexity
Method used in MLMS is SVD with regularization.
Weighted Least Squares
Weighted least squares approximation is the simplest version of the procedure described above. Given support \b{s}, values \b{u} and an anchor point \vec{p}, we calculate the coefficients \b{\alpha} using one of the above methods. Then, to approximate a function in the neighbourhood of \vec p we use the formula \hat{u}(\vec x) = \b{b}(\vec x)^\T \b{\alpha} = \sum_{i=1}^m \alpha_i b_i(\vec x).
To approximate the derivative \frac{\partial u}{\partial x_i}, or any linear partial differential operator \mathcal L on u, we simply take the same linear combination of transformed basis functions \mathcal L b_i. We have considered coefficients \alpha_i to be constant and applied the linearity. \widehat{\mathcal L u}(\vec x) = \sum_{i=1}^m \alpha_i (\mathcal L b_i)(\vec x).
WLS at fixed point with fixed support and unknown function values
Suppose now we are given support \b{s} and a point \b{p} and want to construct the function approximation from values \b{u}. We proceed as usual, solving the overdetermined system WB \b{\alpha} = W\b{u} for coefficients \b{\alpha} using the pseudoinverse \b{\alpha} = (WB)^+W\b{u},
Writing down the approximation function \hat{u} we get \hat u (\vec{p}) = \b{b}(\vec{p})^\T \b{\alpha} = \b{b}(\vec{p})^\T (WB)^+W\b{u} = \b{\chi}(\vec{p}) \b{u}.
We have defined \b{\chi} to be \b{\chi}(\vec{p}) = \b{b}(\vec{p})^\T (WB)^+W.
The same approach works for any linear operator \mathcal L applied to u, just replace every b_i in definition of \b{\chi} with \mathcal Lb_i. For example, take a 1-dimensional case for approximation of derivatives with weight equal to 1 and n=m=3, with equally spaced support values at distances h. We wish to approximate u'' in the middle support point, just by making a weighted sum of the values, something like the finite difference u'' \approx \frac{u_1 - 2u_2 + u_3}{h^2}.
The fact that \b{\chi} is independent of the function values \b{u} but depend only on domain geometry means that we can just compute the shape functions \b{\chi} for points of interest and then approximate any linear operator of any function, given its values, very fast, using only a single dot product.
MLS
When using WLS the approximation gets worse as we move away from the central point \vec{p}. This is partially due to not being in the center of the support any more and partially due to weight being distributed in such a way to assign more importance to nodes closer to \vec{p}.
We can battle this problem in two ways: when we wish to approximate in a new point that is sufficiently far away from \vec{p} we can compute new support, recompute the new coefficients \b{\alpha} and approximate again. This is very costly and we would like to avoid that. A partial fix is to keep support the same, but only recompute the weight vector \b{w}, that will now assign weight values to nodes close to the new point. We still need to recompute the coefficients \b{\alpha}, however we avoid the cost of setting up new support and function values and recomputing B. This approach is called Moving Least Squares due to recomputing the weighted least squares problem whenever we move the point of approximation.
Note that if out weight is constant or if n = m, when approximation reduces to interpolation, the weights do not play any role and this method is redundant. In fact, its benefits arise when supports are rather large.
See Figure 2 for comparison between MLS and WLS approximations. MLS approximation remains close to actual function while still inside the support domain, while WLS approximation becomes bad when we come out of the reach of the weight function.
End notes
- Jump up ↑ Note that our definition is a bit unusual, usually weights are not squared with the values. However, we do this to avoid computing square roots when doing MLS. If you are used to the usual definition, consider the weight to be \omega^2.