MATLAB package for approximate polynomial decouplingThe starting point for this package are two coupled multivariate polynomials with real coefficients. The MATLAB function DecouplePolynomial.m (click here to download the source code) can be used to find an approximate decoupled representation of this function, using different kinds of covariance matrices as weighting matrices, as described in this article. It attempts to find the best possible decoupled representation, according to a cost function defined on the output of the system. In this decoupled representation, the output is written as a linear combination of parallel univariate polynomials of linear forms of the input (see Figure):
In this figure, f represents the coupled multivariate polynomial before the decoupling step. After the decoupling, V and W represent two transformation matrices, and g represent r different univariate polynomials. UsageIn this section, the usage of the MATLAB function DecouplePolynomial.m is discussed in detail. Input structureThe function takes the MATLAB structure coupledPolynomial as argument and outputs the structure decoupledPolynomial. The argument structure should contain the following fields
In the case no covariance matrix or an empty covariance matrix is given, then the implementation performs an unweighted decoupling. This implementation performs similarly to other implementations like Tensorlab or the Nway toolbox. Output structureThe output of the function is the MATLAB structure decoupledPolynomial containing all the information about the decoupled polynomial. It contains the following fields:
Example code and outputThis part shows a small example using this implementation. We define the coefficients of the coupled polynomial function with the statement coupledPolynomial.approximatedCoeffs = … These coefficients are organized in columns, one for every output of the function, and are ordered using the list of monomials (for 2 inputs and degree 3) 1, u1, u2, u1^2, u1u2, u2^2, u1^3, u1^2u2, u1*u2^2, u2^3. Next, the covariance matrix is defined by the statement coupledPolynomial.covarianceMatrix = … Also the number of branches of the decoupled representation is defined by coupledPolynomial.r = … and the type of weighted decoupled is given by coupledPolynomial.CPDtype = …; In the case the covariance matrix is rank-deficient, the hyperparameter lambda can be defined (it is set to 1 as a default value) by coupledPolynomial.lambda = …; Finally, the decoupling process is performed with the command decoupledPolynomial = DecouplePolynomial(coupledPolynomial); The output of this function is the structure decoupledPolynomial with the following fields:
The matrix Ge contains the coefficients of the decoupled polynomials, ordered from high to low degree, one row per polynomial. Click here to download the source code with the minimal example. AuthorsThis work has been developed by Gabriel Hollander under the supervision of the following people: |