pymor.reductors.aaa

Module Contents

class pymor.reductors.aaa.PAAAReductor(sampling_values, samples_or_fom, conjugate=True, nsp_tol=1e-16, post_process=True, L_rk_tol=1e-08)[source]

Bases: pymor.core.base.BasicObject

Reductor implementing the parametric AAA algorithm.

The reductor implements the parametric AAA algorithm and can be used either with data or a given full-order model, which can be a TransferFunction or any model which has a transfer_function attribute. MIMO and non-parametric data is accepted. See [NSeteT18] for the non-parametric and [CRBG23] for the parametric version of the algorithm. The reductor computes approximations based on the multivariate barycentric form \(H(s,p,...)\) (see make_bary_func), where the inputs \(s,p,...\) are referred to as the variables. Further, \(s\) is the Laplace variable and \(p\) as well as other remaining inputs are parameters.

Note

The dimension of the Loewner matrix which will be assembled in the algorithm has len(sampling_values[0])*...*len(sampling_values[-1]) rows. This reductor should only be used with a low number of variables.

Parameters

sampling_values

Values where sample data has been evaluated or the full-order model should be evaluated. Sampling values are represented as a list of NumPy arrays such that sampling_values[i] corresponds to sampling values of the i-th variable given as a NumPy array. The first variable is the Laplace variable. In the non-parametric case (i.e., the only variable is the Laplace variable) this can also be a NumPy array representing the sampling values.

samples_or_fom

Can be either a full-order model (TransferFunction or Model with a transfer_function attribute) or data sampled at the values specified in sampling_values as a NumPy array. Samples are represented as a tensor S. E.g., for 3 inputs S[i,j,k] corresponds to the sampled value at (sampling_values[0][i],sampling_values[1][j],sampling_values[2][k]). The samples (i.e., S[i,j,k]) need to be provided as 2-dimensional NumPy arrays. E.g., in the MIMO case S[i,j,k] represents a matrix of dimension dim_output times dim_input.

conjugate

Whether to compute complex conjugates of first sampling variables and enforce interpolation in complex conjugate pairs (allows for constructing real system matrices).

nsp_tol

Tolerance for null space of higher-dimensional Loewner matrix to check for interpolation or convergence.

post_process

Whether to do post-processing or not. If the Loewner matrix has a null space of dimension greater than 1, it is assumed that the algorithm converged to a non-minimal order interpolant which may cause numerical issues. In this case, the post-processing procedure computes an interpolant of minimal order.

L_rk_tol

Tolerance for ranks of 1-D Loewner matrices computed in post-processing.

itpl_part[source]

A nested list such that itpl_part[i] corresponds to indices of interpolated values with respect to the i-th variable. I.e., self.sampling_values[i][itpl_part[i]] represents a list of all interpolated samples of the i-th variable.

Methods

reduce

Reduce using p-AAA.

reduce(tol=1e-07, itpl_part=None, max_itpl=None)[source]

Reduce using p-AAA.

Parameters

tol

Convergence tolerance for relative error of rom over the set of samples.

itpl_part

Initial partition for interpolation values. Should be None or a nested list such that itpl_part[i] corresponds to indices of interpolated values with respect to the i-th variable. I.e., self.sampling_values[i][itpl_part[i]] represents a list of all initially interpolated samples of the i-th variable. If None p-AAA will start with no interpolated values.

max_itpl

Maximum number of interpolation points to use with respect to each variable. Should be None or a list such that self.num_vars == len(max_itpl). If None max_itpl[i] will be set to len(self.sampling_values[i]) - 1.

Returns

rom

Reduced TransferFunction model.

pymor.reductors.aaa.full_nd_loewner(samples, svs, itpl_part)[source]

Compute higher-dimensional Loewner matrix using all combinations of partitions.

Note

For non-parametric data this is simply the regular Loewner matrix.

Parameters

samples

Tensor of samples (see PAAAReductor).

svs

List of sampling values (see PAAAReductor).

itpl_part

Nested list such that itpl_part[i] is a list of indices for interpolated sampling values in svs[i].

Returns

L

(Parametric) Loewner matrix based on all combinations of partitions.

pymor.reductors.aaa.make_bary_func(itpl_nodes, itpl_vals, coefs, removable_singularity_tol=1e-14)[source]

Return function for (multivariate) barycentric form.

The multivariate barycentric form for two variables is given by

\[H(s,p) = \frac{\sum_{i=1}^{k}\sum_{j=1}^{q}\frac{\alpha_{ij}H(s_i,p_j)}{(s-s_i)(p-p_j)}} {\sum_{i=1}^{k}\sum_{j=1}^{q}\frac{\alpha_{ij}}{(s-s_i)(p-p_j)}}\]

where for \(i=1,\ldots,k\) and \(j=1,\ldots,q\) we have that \(s_i\) and \(p_j\) are interpolation nodes, \(H(s_i,p_j)\) are interpolation values and \(\alpha_{ij}\) represent the barycentric coefficients. This implementation can also handle single-variable barycentric forms as well as barycentric forms with more than two variables.

Parameters

itpl_nodes

Nested list such that itpl_nodes[i] contains interpolation nodes of the i-th variable.

itpl_vals

Vector of interpolation values with len(itpl_nodes[0])*...*len(itpl_nodes[-1]) entries.

coefs

Vector of barycentric coefficients with len(itpl_nodes[0])*...*len(itpl_nodes[-1]) entries.

removable_singularity_tol

Tolerance for evaluating the barycentric function at a removable singularity and performing pole cancellation.

Returns

bary_func

(Multi-variate) rational function in barycentric form.

pymor.reductors.aaa.nd_loewner(samples, svs, itpl_part)[source]

Compute higher-dimensional Loewner matrix using only LS partitions.

Note

For non-parametric data this is simply the regular Loewner matrix.

Parameters

samples

Tensor of samples (see PAAAReductor).

svs

List of sampling values (see PAAAReductor).

itpl_part

Nested list such that itpl_part[i] is a list of indices for interpolated sampling values in svs[i].

Returns

L

(Parametric) Loewner matrix based only on LS partition.