Software that uses polynomials to approximately solve the nonlinear (NL) balancing problem for systems with polynomial nonlinearities. The description of the NL balancing algorithms are provided in papers [1-5].
[1] J. Borggaard and L. Zietsman, “The quadratic-quadratic regulator problem: approximating feedback controls for quadratic-in-state nonlinear systems,” in 2020 American Control Conference (ACC), Jul. 2020, pp. 818–823. doi: 10.23919/ACC45564.2020.9147286
[2] J. Borggaard and L. Zietsman, “On approximating polynomial-quadratic regulator problems,” IFAC-PapersOnLine, vol. 54, no. 9, pp. 329–334, 2021, doi: 10.1016/j.ifacol.2021.06.090
[3] B. Kramer, S. Gugercin, and J. Borggaard, “Nonlinear balanced truncation: Part 2—model reduction on manifolds,” arXiv, Feb. 2023. doi: 10.48550/ARXIV.2302.02036
[4] B. Kramer, S. Gugercin, J. Borggaard, and L. Balicki, “Nonlinear balanced truncation: Part 1—computing energy functions,” arXiv, Dec. 2022. doi: 10.48550/ARXIV.2209.07645
[5] N. A. Corbin and B. Kramer, “Scalable computation of 𝓗_∞ energy functions for polynomial drift nonlinear systems,” 2023.
[6] N. A. Corbin and B. Kramer, “Scalable computation of 𝓗_∞ energy functions for polynomial control-affine systems,” 2023.
Clone these repository:
git clone https://www.github.com/cnick1/PPR.git
git clone https://www.github.com/cnick1/KroneckerTools.git
git clone https://www.github.com/cnick1/NLbalancing.git
git clone https://gitlab.com/tensors/tensor_toolbox.git
then modify the path in setKroneckerToolsPath.m
The installation can be tested in Matlab (we used R2020b) by typing
>> examplesForPaper1
and
>> examplesForPaper2
that provide the numerical results for our nonlinear balanced truncation papers.
The details of some of our functions and test examples are provided below.
We consider polynomial control-affine dynamical systems of the form
where
and they solve the Hamilton-Jacobi-Bellman Partial Differential Equations (HJB PDEs)
As
For a given set of polynomial dynamics defined by the cell arrays f,g,h
and a permissible value of eta
, the functions approxFutureEnergy()
and approxPastEnergy()
will return the energy function polynomial coefficients degree
:
>> [w] = approxFutureEnergy(f,g,h,eta,degree);
>> [v] = approxPastEnergy(f,g,h,eta,degree);
approxFutureEnergy()
and approxPastEnergy()
correspond to Algorithm 1 in reference [1].
The variables f,g,h
are cell arrays containing the polynomial coefficients for the dynamics, i.e.
>> f = {A, F2,...};
>> g = {B, G1, G2,...};
>> h = {C,H2,...};
To aid in computing these polynomial coefficients, we provide the function utils/approxPolynomialDynamics.m
; given symbolic expressions for
The returned variables v
and w
are cell arrays with v{2}
being a vector of dimension v{degree+1}
which is a vector of dimension v{2}=V2(:)
.
Alternatively, v{k}
are often reshaped as
From an initial x0
, we can compute the approximation to the energy function as
>> E = (1/2)*( v{2}*kron(x0,x0) + ... + v{degree+1}*kron(kron(... ,x0),x0) );
or, using the utility function,
>> E = (1/2)*kronPolyEval(v(1:degree),x0,degree);
TODO: Document input-normal and output-diagonal transformations.
Defines the path to the KroneckerTools directory containing functions for working with Kronecker product expressions. KroneckerTools can be downloaded from github.com/cnick1/KroneckerTools. The default assumes that NLbalancing and KroneckerTools lie in the same directory and uses relative pathnames. This should be changed if you use different locations. (setKroneckerToolsPath also lies in the tests directory, so should be changed there as well if you plan to run functions from those directories.)
Efficiently computes the product of a special Kronecker sum matrix (aka an N-Way Lyapunov matrix) with a vector.
This is done by reshaping the vector, performing matrix-matrix products, then reshaping the answer.
We could also utilize the matrization of the associated tensor.
Approximates the future and past energy functions for a one-dimensional model problem motivated by the literature.
A quadratic approximation to this problem appears as Example 1 in [1], and the full polynomial problem appears as Example 1 in [6].
The example is based on a two-dimensional problem found in Kawano and Scherpen, IEEE Transactions on Automatic Control, 2016.
This example approximates the future and past energy functions, then computes an approximation to the input-normal transformation.
An quadratic approximation to the original model is considered as Example 2 in [1], and the full quadratic-bilinear model is considered as Example 2 in [6].
This example demonstrates the scalability and convergence of the proposed approach on a finite-element discretization of Burgers' equation. This is Example 3 in [1].
This example demonstrates the scalability and convergence of the proposed approach on a finite-element discretization of the Kuramoto-Sivashinsky equation. This is Example 4 in [1].
This example demonstrates the scalability and convergence of the proposed approach on a finite-element discretization of a nonlinear beam. This is Example 3 in [6].
This example demonstrates controllers based on the energy functions on a 3D aircraft stall stabilization model from Garrard 1977.
This example demonstrates the scalability and convergence of the proposed approach on a finite-element discretization of a nonlinear heat equation (reaction-diffusion problem). This is Example 1 in [5].
@inproceedings{Borggaard2020,
author = {Borggaard, Jeff and Zietsman, Lizette},
booktitle = {2020 American Control Conference (ACC)},
doi = {10.23919/ACC45564.2020.9147286},
month = jul,
pages = {818--823},
title = {The quadratic-quadratic regulator problem: approximating feedback controls for quadratic-in-state nonlinear systems},
year = {2020}
}
@article{Borggaard2021,
author = {Borggaard, Jeff and Zietsman, Lizette},
doi = {10.1016/j.ifacol.2021.06.090},
journal = {{IFAC}-{PapersOnLine}},
number = {9},
pages = {329--334},
publisher = {Elsevier {BV}},
title = {On approximating polynomial-quadratic regulator problems},
volume = {54},
year = {2021}
}
@unpublished{Kramer2023,
archiveprefix = {arXiv},
author = {Kramer, Boris and Gugercin, Serkan and Borggaard, Jeff},
doi = {10.48550/ARXIV.2302.02036},
eprint = {2302.02036},
month = feb,
note = {{\em arXiv:2302.02036}},
primaryclass = {math.OC},
publisher = {arXiv},
title = {Nonlinear balanced truncation: {P}art 2---model reduction on manifolds},
year = {2023}
}
@unpublished{Kramer2022,
archiveprefix = {arXiv},
author = {Kramer, Boris and Gugercin, Serkan and Borggaard, Jeff and Balicki, Linus},
doi = {10.48550/ARXIV.2209.07645},
eprint = {arXiv:2209.07645v2},
month = dec,
note = {{\em arXiv:2209.07645v2}},
primaryclass = {math.OC},
publisher = {arXiv},
title = {Nonlinear balanced truncation: {P}art 1---computing energy functions},
year = {2022}
}
@Unpublished{Corbin2023,
author = {Corbin, Nicholas A. and Kramer, Boris},
note = {Submitted to ACC 2024},
title = {Scalable computation of {$\mathcal{H}_\infty$} energy functions for polynomial drift nonlinear systems},
year = {2023},
}
@Unpublished{Corbin2023a,
author = {Corbin, Nicholas A. and Kramer, Boris},
note = {Submitted to IEEE Transactions on Automatic Control},
title = {Scalable computation of {$\mathcal{H}_\infty$} energy functions for polynomial control-affine systems},
year = {2023},
}