Lifting
This page gives an explanation for the mathematical concept of lifting and provides example code for its implementation.
Lift Map Structure
LiftAndLearn.lifting — Typestruct liftingLifting map structure.
Fields
N: number of variables of the original nonlinear dynamicsNl: number of variables of the lifted systemlift_funcs: array of lifting transformation functionsmap: function to map the data to the new mapped states including original statesmapNL: function to map the data to only the additional lifted states
For a simple pendulum we have
\[\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \end{bmatrix} = \begin{bmatrix} x_2 \\ -\frac{g}{l} \sin(x_1) \end{bmatrix}\]
The lifted system becomes
\[\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \\ \dot{x}_3 \\ \dot{x}_4 \end{bmatrix} = \begin{bmatrix} x_2 \\ -\frac{g}{l} x_3 \\ x_2 x_4 \\ -x_2 x_3 \end{bmatrix}\]
when $x_3 = \sin(x_1)$ and $x_4 = \cos(x_1)$. Which if coded, would look like this:
lifter = LnL.lifting(2, 4, [x -> sin.(x[1]), x -> cos.(x[1])])Construct Lifted POD Basis from Data
LiftAndLearn.lifted_basis — Functionlifted_basis(W, Nl, gp, ro) → VrCreate the block-diagonal POD basis for the new lifted system data
Arguments
w: lifted data matrixNl: number of variables of the lifted state dynamicsgp: number of grid points for each variablero: vector of the reduced orders for each basis
Return
Vr: block diagonal POD basis
An example implementation would be:
using LiftAndLearn
using Random
LnL = LiftAndLearn
W = round.(rand(30,100), digits=4)
LnL.lifted_basis(W, 3, 10, [2,3,4])30×9 BlockDiagonals.BlockDiagonal{Float64, Matrix{Float64}}:
 -0.313139   0.474732   0.0  0.0  0.0  …   0.0         0.0          0.0
 -0.33649    0.116524   0.0  0.0  0.0      0.0         0.0          0.0
 -0.329496   0.183704   0.0  0.0  0.0      0.0         0.0          0.0
 -0.293478   0.349407   0.0  0.0  0.0      0.0         0.0          0.0
 -0.318335  -0.295235   0.0  0.0  0.0      0.0         0.0          0.0
 -0.323205   0.246728   0.0  0.0  0.0  …   0.0         0.0          0.0
 -0.32867   -0.384207   0.0  0.0  0.0      0.0         0.0          0.0
 -0.33463    0.0380014  0.0  0.0  0.0      0.0         0.0          0.0
 -0.286541  -0.301257   0.0  0.0  0.0      0.0         0.0          0.0
 -0.293455  -0.466224   0.0  0.0  0.0      0.0         0.0          0.0
  ⋮                                    ⋱                           
  0.0        0.0        0.0  0.0  0.0     -0.390829    0.168685     0.158827
  0.0        0.0        0.0  0.0  0.0      0.257466    0.00790278  -0.236725
  0.0        0.0        0.0  0.0  0.0     -0.241993   -0.491806     0.0260462
  0.0        0.0        0.0  0.0  0.0     -0.128622   -0.0449679   -0.466487
  0.0        0.0        0.0  0.0  0.0  …  -0.0962216  -0.325716    -0.477863
  0.0        0.0        0.0  0.0  0.0      0.371994    0.155839     0.216236
  0.0        0.0        0.0  0.0  0.0     -0.478896    0.533206     0.15826
  0.0        0.0        0.0  0.0  0.0     -0.0304306   0.0864747    0.107678
  0.0        0.0        0.0  0.0  0.0      0.548301    0.330149    -0.14287