Computation of shape functions
Shape functions, often called stencil weights, are functionals, approximating linear partial differential operators at a chosen point. A shape function \b{\chi}_{\mathcal{L}} (\vec{p}) for a linear parial differential operator \mathcal{L} in a point p is a vector of stencil weights, such that (\mathcal{L} u)(\vec{p}) \approx \b{\chi}_{\mathcal{L}}(\vec{p})^\T \b{u},
Contents
[hide]Derivation
Let \mathcal{L} be a linear partial differential operator. We wish to approximate (\mathcal{L}u)(\vec{p}) using only values of u in support of p. To do so, we construct a MLS approximation (see Weighted Least Squares (WLS)) and compute the coefficients \b{\alpha}, such that \hat{u}(\vec{p}) = \b{b}(\vec{p})^\T \b{\alpha}. The coefficients are computed by solving a least-squares system WB \b{\alpha} = W\b{u} , writing \b{\alpha} = (B^\T W^2 B^\T)^{-1} B^\T W^2 \b{u}.
Depending on what data we have available, we can either compute \b \alpha and obtain a continuous approximation \hat{u}, to which \mathcal{L} can be applied at any point, or, if function values \b u are unknown, we can choose to compute \b \chi_{\mathcal{L}} at a point \vec p and approximate the operator for any set of function values. the operator \mathcal{L} at \vec p is approximated as (\mathcal{L}u)(\vec{p}) \approx (\mathcal{L} \hat{u})(p) = \b{\chi}_{\mathcal{L}}(\vec{p})^\T \b{u}.
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.
Special case when B is square and invertible
The expression \b{\chi}_{\mathcal{L}}(\vec{p})^\T = (\mathcal{L}\b{b})(\vec{p})^\T (B^\T W^2 B)^{-1} B^\T W^2
This gives the approximation as (\mathcal{L} \hat{u})(p) = (\mathcal{L}\b{b})(\vec{p})^\T B^{-1} \b u.
Coefficients \b \alpha are the solutions of B\b \alpha = \b u. Shape function \b{\chi}_{\mathcal{L}}(\vec{p}) is defined as \b{\chi}_{\mathcal{L}}(\vec{p})^\T = (\mathcal{L}\b{b})(\vec{p})^\T B^{-1},
This formulation is more suitable for numerical solving and also has a deeper interpretation, as presented in the next section.
Another view on derivation of shape functions
Solving the system B^\T \b{\chi}_{\mathcal{L}} (\vec{p})^\T = (\mathcal{L}\b{b})(\vec p) can be interpreted as using the method of undetermined coefficients.
We wish to find such a combination of function values evaluated in support points \vec s_i that approximates the value of an operator (\mathcal{L}u)(\vec p), i.e., we are looking for coefficients \chi_{\mathcal{L}, i}, such that \sum_{i=1}^n \chi_{\mathcal{L}, i} u_i \approx (\mathcal{L}u)(p).
We require that \chi_{\mathcal{L}, i} be such, that above approximations holds for a certain space of functions, spanned by the basis \{b_j\}_{j=1}^m. By choosing the basis functions b_j we decide for which functions the aproximation \b{\chi}_{\mathcal{L}, \vec{p}} \b{u} \approx (\mathcal{L}u)(\vec p) should be exact and we write the equations \sum_{i=1}^n \chi_{\mathcal{L}, i} b_j(\vec s_i) = (\mathcal{L}b_j)(\vec p) in a system: \begin{bmatrix} b_1(\vec s_1) & \cdots & b_1(\vec s_n) \\ \vdots & \ddots & \vdots \\ b_m(\vec s_1) & \cdots & b_m(\vec s_n) \\ \end{bmatrix} \begin{bmatrix} \chi_{\mathcal{L}, 1} \\ \vdots \\ \chi_{\mathcal{L}, n} \end{bmatrix} \begin{bmatrix} (\mathcal{L} b_1)(\vec{p}) \\ \vdots \\ (\mathcal{L} b_m)(\vec{p}) \end{bmatrix}
For n=m case as in the previous section, the solution is the sought shape function \b{\chi}_{\mathcal L}.
If we do not specify enough functions b_j, the system above is underdetermined. A common solution is to minimize the weighted norm of \b \chi_{\mathcal L}. This gives us a minimization problem \min_{\b \chi_{\mathcal L}} \sum_{i=1}^n (\chi_{\mathcal{L}, i}/w_i)^2, \text{ such that } B^\T \b{\chi}_{\mathcal{L}} (\vec{p})^\T = (\mathcal{L}\b{b})(\vec p).
Using the solution derived in Solving underdetermined systems and substituting inverse weights W = W^{-1} and matrix A = B^\T, we get the solution \b{\chi}_{\mathcal{L}} (\vec{p}) = (W^{-1})^{-2} (B^\T)^\T (B^\T (W^{-1})^{-2}(B^\T)^\T) (\mathcal{L}\b{b})(\vec p) = W^2 B (B^\T W^2 B) (\mathcal{L}\b{b})(\vec p).
Just as we get the same stencil weights using interpolation and the method of undetermined coefficients, we get the same result using WLS approximation or weighted norm minimization of shape functions.
Numerical calculation of the shape functions
Numerically cheaper and more stable way is to translate the problem of inverting the matrix to solving a linear system of equations.
Invertible B case: If B is invertible, then \b{\chi}_{\mathcal{L}, \vec{p}} = (\mathcal{L}\b{b})(\vec{p})^\T B^{-1}, transposing the equation then multiplying it from the left by B, \b{\chi}_{\mathcal{L}, \vec{p}} can be thought as a solution of a system B^\T\b{\chi}_{\mathcal{L}, \vec{p}}^\T = (\mathcal{L}\b{b}), which can be solved using LU or Cholesky decomposition for example.
General case: For a system written as Ax = b, where A is a n\times m matrix, x is a vector of length m and b a vector of length n, a generalized solution is defined as x that minimizes \|A x - b\|_2^2. If more x attain the minimal value, x with the minimal \|x\| is chosen. Note that this generalizes the solution a general system (A is invertible) and over-determined system (n > m and A has full rank). Such an x can be computed using the pseudoinverse x = A^{+} b.
In our case, let us denote a part of the solution containing the pseudoinverse by \tilde{\b{\chi}}_{\mathcal{L}, \vec{p}}. \b{\chi}_{\mathcal{L}, \vec{p}}(\vec{p}) = \underbrace{(\mathcal{L}\b{b})(\vec{p})^\T (WB)^+}_{\tilde{\b{\chi}}_{\mathcal{L}, \vec{p}}} W
The system before can be solved using any decomposition of matrix (WB)^\T = B^\T W, not neceserally the SVD decompostion, but depending on our knowledge of the problem, we can use Cholesky (B^\T W is positive definite), LDL^\T if it is symmetric, LU for a general square matrix, QR for full rank overdetermined system and SVD for a general system. If more shapes need to be calculated using the same matrix B^\T W and only different right hand sides, it can be done efficiently by storing the decomposition of B^\T W.
Linearity and reduction to only computing the shapes of the operator space basis
Observe that the expression for the shape functions \b{\chi}_{\mathcal{L}}(\vec{p}) = (\mathcal{L}\b{b})(\vec{p})^\T (WB)^+W
Say that your equation constitutes of operators up to a certain k-th order. Then it is sufficient to compute only shape functions for the basis of that operator space, namely \{\b{\chi}_{\frac{\partial}{\partial x^\alpha}, p}, 1 \leq |\alpha| \leq k \}, \text{ where } \frac{\partial}{\partial x^\alpha} = \frac{\partial^{|\alpha|}}{\partial x_1^{\alpha_1}\cdots \partial x_d^{\alpha_d}} \text{ and } |\alpha| = \sum_{i=1}^d \alpha_i.