pymor.solvers.matrix_equations.equations

Module Contents

class pymor.solvers.matrix_equations.equations.LyapunovEquation(A, E, B, trans=False, cont_time=True, name=None)[source]

Bases: pymor.core.base.ImmutableObject

A (generalized) continuous- or discrete-time Lyapunov equation.

With \(E\) taken to be the identity if None, for cont_time True:

  • if trans is False:

    \[A X E^T + E X A^T + B B^T = 0,\]
  • if trans is True:

    \[A^T X E + E^T X A + B^T B = 0.\]

If cont_time is False, the discrete-time equation is described:

  • if trans is False:

    \[A X A^T - E X E^T + B B^T = 0,\]
  • if trans is True:

    \[A^T X A - E^T X E + B^T B = 0.\]

Use solve to obtain the dense solution \(X\) and solve_lrcf to obtain a low-rank Cholesky factor \(Z\) with \(X \approx Z Z^H\).

Parameters:
  • A – The non-parametric Operator A.

  • E – The non-parametric Operator E or None.

  • B – The operator B as a VectorArray from A.source.

  • trans – Whether the first Operator in the equation is transposed.

  • cont_time – If True, the continuous-time equation is described, otherwise the discrete-time equation.

  • name – Name of the equation.

Methods

from_matrices

Create a LyapunovEquation from matrices.

solve

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

to_matrices

Return operators as matrices.

classmethod from_matrices(A, E, B, trans=False, cont_time=True, name=None)[source]

Create a LyapunovEquation from matrices.

Parameters:
solve(solver=None)[source]

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf(solver=None)[source]

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

to_matrices()[source]

Return operators as matrices.

Returns:

class pymor.solvers.matrix_equations.equations.PositiveRiccatiEquation(A, E, B, C, R=None, S=None, trans=False, name=None)[source]

Bases: RiccatiData

A (generalized) positive continuous-time algebraic Riccati equation.

Differs from RiccatiEquation only in the sign of the quadratic term:

  • if trans is False:

    \[A X E^T + E X A^T + (E X C^T + S^T) R^{-1} (C X E^T + S) + B B^T = 0,\]
  • if trans is True:

    \[A^T X E + E^T X A + (E^T X B + S) R^{-1} (B^T X E + S^T) + C^T C = 0.\]
Parameters:
  • A – The non-parametric Operator A.

  • E – The non-parametric Operator E or None.

  • B – The operator B as a VectorArray from A.source.

  • C – The operator C as a VectorArray from A.source.

  • R – The matrix R as a 2D NumPy array or None.

  • S – The operator S as a VectorArray from A.source or None.

  • trans – Whether the first Operator in the equation is transposed.

  • name – Name of the equation.

Methods

solve

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

solve(solver=None)[source]

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf(solver=None)[source]

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

class pymor.solvers.matrix_equations.equations.RiccatiData(A, E, B, C, R=None, S=None, trans=False, name=None)[source]

Bases: pymor.core.base.ImmutableObject

Coefficient storage and validation shared by the two Riccati equations.

Not intended to be used directly.

Methods

from_matrices

Create the RiccatiEquation or PositiveRiccatiEquation from matrices.

to_matrices

Return operators as matrices.

classmethod from_matrices(A, E, B, C, R=None, S=None, trans=False, name=None)[source]

Create the RiccatiEquation or PositiveRiccatiEquation from matrices.

Parameters:
to_matrices()[source]

Return operators as matrices.

Returns:

class pymor.solvers.matrix_equations.equations.RiccatiEquation(A, E, B, C, R=None, S=None, trans=False, name=None)[source]

Bases: RiccatiData

A (generalized) continuous-time algebraic Riccati equation.

With \(E\) taken to be the identity if None, \(R\) the identity if None, and \(S\) zero if None:

  • if trans is False:

    \[A X E^T + E X A^T - (E X C^T + S^T) R^{-1} (C X E^T + S) + B B^T = 0,\]
  • if trans is True:

    \[A^T X E + E^T X A - (E^T X B + S) R^{-1} (B^T X E + S^T) + C^T C = 0.\]

Only the continuous-time equation is supported.

Parameters:
  • A – The non-parametric Operator A.

  • E – The non-parametric Operator E or None.

  • B – The operator B as a VectorArray from A.source.

  • C – The operator C as a VectorArray from A.source.

  • R – The matrix R as a 2D NumPy array or None.

  • S – The operator S as a VectorArray from A.source or None.

  • trans – Whether the first Operator in the equation is transposed.

  • name – Name of the equation.

Methods

solve

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

solve(solver=None)[source]

Compute the dense solution \(X\) as a NumPy array.

solve_lrcf(solver=None)[source]

Compute a low-rank Cholesky factor \(Z\) as a VectorArray from A.source.

class pymor.solvers.matrix_equations.equations.SylvesterEquation(A, Ar, E=None, Er=None, B=None, Br=None, C=None, Cr=None, name=None)[source]

Bases: pymor.core.base.ImmutableObject

A SylvesterEquation.

Defines the SylvesterEquation

\[A V E_r^T + E V A_r^T + B B_r^T = 0\]

or

\[A^T W E_r + E^T W A_r + C^T C_r = 0\]

or both using (in case B, Br, C and Cr) are given.

Parameters:

Methods

from_matrices

Create a SylvesterEquation from matrices.

solve

Compute the solution \(V\) or \(W\) or both as VectorArrays.

to_matrices

Return operators as matrices.

classmethod from_matrices(A, Ar, E=None, Er=None, B=None, Br=None, C=None, Cr=None, name=None)[source]

Create a SylvesterEquation from matrices.

Provide B and Br for the \(V\) equation, C and Cr for the \(W\) equation, or all four for both.

Parameters:
solve(solver=None)[source]

Compute the solution \(V\) or \(W\) or both as VectorArrays.

to_matrices()[source]

Return operators as matrices.

Returns: