lmlib.statespace.model.AlssmPolyJordan#
- class lmlib.statespace.model.AlssmPolyJordan(poly_degree, C=None, **kwargs)#
Bases:
lmlib.statespace.model.ModelBase
ALSSM with discrete-time polynomial output sequence, in Jorandian normal form
Discrete-time polynomial with ALSSM with transition matrix in Jordanian normal form, see [Zalmai2017]
PDF
.\[\begin{split}A = \begin{bmatrix} 1 & 1 & 0 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{bmatrix}\end{split}\]- Parameters
N : ALSSM system order, corresponding to the number of state variables
L : output order / number of signal channelsExamples
Setting up a 3th degree polynomial ALSSM.
>>> poly_degree = 3 >>> alssm = lm.AlssmPolyJordan(poly_degree, label='poly') >>> print(alssm) A = [[1. 1. 0. 0.] [0. 1. 1. 0.] [0. 0. 1. 1.] [0. 0. 0. 1.]] C = [[1 0 0 0]]
Methods
__init__
(poly_degree[, C])Returns the internal structure of the ALSSM model as a string.
eval_state
(x)Evaluation of the ALSSM for a state vector x.
eval_states
(xs)Evaluation of the ALSSM for an array of state vectors xs.
get_state_var_indices
(label)Returns the state indices for a specified label
Retruns a list of state variable labels
set_state_var_label
(label, indices)Adds a label for one or multiple state variabels in the state vector.
trajectories
(xs, js)Evaluation of the ALSSM for an array state vectors xs at evaluation indeces js.
trajectory
(x, js)Evaluation of the ALSSM for a state vector x at evaluation indeces js.
update
()Model update
Attributes
State matrix \(A \in \mathbb{R}^{N \times N}\)
Output matrix \(C \in \mathbb{R}^{L \times N}\)
Initialized Output matrix \(C \in \mathbb{R}^{L \times N}\)
Model order \(N\)
Set of models
Output scaling factors for each ALSSM in alssms
Label of the model
Polynomial degree \(Q\) (highest exponent/ order - 1)
Dictionary containing state variable labels and index
- property C_init#
Initialized Output matrix \(C \in \mathbb{R}^{L \times N}\)
- Type
ndarray
, shape=([L,] N)
- property deltas#
Output scaling factors for each ALSSM in alssms
- Type
np.ndarray
- dump_tree()#
Returns the internal structure of the ALSSM model as a string.
- Returns
out – String representing internal model structure.
- Return type
Examples
>>> alssm_poly = lm.AlssmPoly(4, label="high order polynomial.rst") >>> A = [[1, 1], [0, 1]] >>> C = [[1, 0]] >>> alssm_line = lm.Alssm(A, C, label="line") >>> stacked_alssm = lm.AlssmStacked((alssm_poly, alssm_line), label='stacked model') >>> print(stacked_alssm.dump_tree()) └-Alssm : stacked, A: (7, 7), C: (2, 7), label: stacked model └-Alssm : polynomial.rst, A: (5, 5), C: (1, 5), label: high order polynomial.rst └-Alssm : native, A: (2, 2), C: (1, 2), label: line
- eval_state(x)#
Evaluation of the ALSSM for a state vector x.
eval_state(…) returns the ALSSM output
\[s_0(x) = CA^0x = Cx\]for a state vector \(x\).
- Parameters
x (array_like of shape=(N[,S])) – State vector \(x\)
- Returns
s – ALSSM output
- Return type
ndarray
of shape=([L[,S]])
N : ALSSM system order, corresponding to the number of state variables
L : output order / number of signal channels
S : number of signal setsExamples
>>> A = [[1, 1], [0, 1]] >>> C = [1, 0] >>> alssm = lm.Alssm(A, C, label='line') >>> >>> x = [0.1, 3] >>> s = alssm.eval_state(x) >>> print(s) 0.1
- eval_states(xs)#
Evaluation of the ALSSM for an array of state vectors xs.
eval_states(…) returns the ALSSM output
\[s_0(x) = CA^0x = Cx\]for each state vector \(x\) from the array xs
- Parameters
xs (array_like of shape=(XS,N[,S])) – List of length XS with state vectors \(x\).
- Returns
s – ALSSM outputs
- Return type
ndarray
of shape=(XS,[L[,S]])
N : ALSSM system order, corresponding to the number of state variables
L : output order / number of signal channels
S : number of signal setsExamples
>>> A = [[1, 1], [0, 1]] >>> C = [1, 0] >>> alssm = lm.Alssm(A, C, label='line') >>> >>> xs = [[0.1, 3], [0, 1], [-0.8, 0.2], [1, -3]] >>> s = alssm.eval_states(xs) >>> print(s) [ 0.1 0. -0.8 1. ]
- get_state_var_indices(label)#
Returns the state indices for a specified label
- Parameters
label (str) – state label
- Returns
out – state indices of the label
- Return type
list of int
- get_state_var_labels()#
Retruns a list of state variable labels
- Returns
out – list of state variable labels
- Return type
- set_state_var_label(label, indices)#
Adds a label for one or multiple state variabels in the state vector. Such labels are used to quickly referece to single states in the state vector by its names.
Examples
>>> alssm = lm.AlssmPoly(poly_degree=1, label='slope_with_offset') >>> alssm.set_state_var_label('slope', (1,)) >>> alssm.state_var_labels {'x': range(0, 2), 'x0': (0,), 'x1': (1,), 'slope': (1,)} >>> alssm.state_var_labels['slope'] (1,)
- trajectories(xs, js)#
Evaluation of the ALSSM for an array state vectors xs at evaluation indeces js.
trajectories(…) returns the ALSSM output
\[s_j(x) = CA^jx = Cx\]for a state vector \(x\) and index \(j\) in the list js
- Parameters
xs (array_like of shape=(XS,N[,S])) – List of length XS with state vectors \(x\).
js (array_like of shape=(J,)) – ALSSM evaluation indices
- Returns
s – ALSSM outputs
- Return type
ndarray
of shape=(XS, J, [L[,S]])
N : ALSSM system order, corresponding to the number of state variables
L : output order / number of signal channels
S : number of signal sets
j : ALSSM evaluation index
J : number of ALSSM evaluation indices
XS : number of state vectors in a listExamples
>>> A = [[1, 1], [0, 1]] >>> C = [1, 0] >>> alssm = lm.Alssm(A, C, label='line') >>> >>> xs = [[0.1, 3], [0, 1], [-0.8, 0.2], [1, -3]] >>> s = alssm.trajectories(xs, js=[0, 1, 2, 3, 4, 5]) >>> print(s)
- trajectory(x, js)#
Evaluation of the ALSSM for a state vector x at evaluation indeces js.
trajectory(…) returns the ALSSM output
\[s_j(x) = CA^jx = Cx\]for a state vector \(x\) and index \(j\) in the list js
- Parameters
x (array_like of shape=(N[,S])) – State vector \(x\)
js (array_like of shape=(J,)) – ALSSM evaluation indices
- Returns
s – ALSSM outputs
- Return type
ndarray
of shape=(J, [L[,S]])
N : ALSSM system order, corresponding to the number of state variables
L : output order / number of signal channels
S : number of signal sets
j : ALSSM evaluation index
J : number of ALSSM evaluation indicesExamples
>>> A = [[1, 1], [0, 1]] >>> C = [1, 0] >>> alssm = lm.Alssm(A, C, label='line') >>> >>> x = [0.1, 3] >>> s = alssm.trajectory(x, js=[0, 1, 2, 3, 4, 5]) >>> print(s)
- update()#
Model update
Updates the internal model (A and C Matrix) based on the initialization parameters of a class.