8000 Move ss, tf2ss, etc into statesp module · XiangPiCha/python-control@33ca2db · GitHub
[go: up one dir, main page]

Skip to content

Commit 33ca2db

Browse files
committed
Move ss, tf2ss, etc into statesp module
1 parent 12e8147 commit 33ca2db

File tree

3 files changed

+240
-260
lines changed

3 files changed

+240
-260
lines changed

control/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
from .pzmap import pzmap
6161
from .rlocus import root_locus
6262
from .statefbk import place, lqr, ctrb, obsv, gram, acker
63-
from .statesp import StateSpace
63+
from .statesp import *
6464
from .timeresp import forced_response, initial_response, step_response, \
6565
impulse_response
6666
from .xferfcn import TransferFunction
@@ -86,7 +86,7 @@
8686
#! of defaults from the main package. At that point, the matlab module will
8787
#! allow provide compatibility with MATLAB but no package functionality.
8888
#!
89-
from .matlab import ss, tf, ss2tf, tf2ss, drss
89+
from .matlab import tf, ss2tf
9090
from .matlab import pole, zero, evalfr, freqresp, dcgain
9191
from .matlab import nichols, rlocus, margin
9292
# bode and nyquist come directly from freqplot.py

control/matlab/__init__.py

Lines changed: 2 additions & 231 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
from .. import freqplot
7878
from .. import timeresp
7979
from .. import margins
80-
from ..statesp import StateSpace, _rss_generate, _convertToStateSpace
80+
from ..statesp import *
8181
from ..xferfcn import TransferFunction, _convertToTransferFunction
8282
from ..lti import LTI # base class of StateSpace, TransferFunction
8383
from ..lti import issiso
@@ -387,94 +387,6 @@
387387
388388
"""
389389

390-
def ss(*args):
391-
"""
392-
Create a state space system.
393-
394-
The function accepts either 1, 4 or 5 parameters:
395-
396-
``ss(sys)``
397-
Convert a linear system into space system form. Always creates a
398-
new system, even if sys is already a StateSpace object.
399-
400-
``ss(A, B, C, D)``
401-
Create a state space system from the matrices of its state and
402-
output equations:
403-
404-
.. math::
405-
\dot x = A \cdot x + B \cdot u
406-
407-
y = C \cdot x + D \cdot u
408-
409-
``ss(A, B, C, D, dt)``
410-
Create a discrete-time state space system from the matrices of
411-
its state and output equations:
412-
413-
.. math::
414-
x[k+1] = A \cdot x[k] + B \cdot u[k]
415-
416-
y[k] = C \cdot x[k] + D \cdot u[ki]
417-
418-
The matrices can be given as *array like* data types or strings.
419-
Everything that the constructor of :class:`numpy.matrix` accepts is
420-
permissible here too.
421-
422-
Parameters
423-
----------
424-
sys: StateSpace or TransferFunction
425-
A linear system
426-
A: array_like or string
427-
System matrix
428-
B: array_like or string
429-
Control matrix
430-
C: array_like or string
431-
Output matrix
432-
D: array_like or string
433-
Feed forward matrix
434-
dt: If present, specifies the sampling period and a discrete time
435-
system is created
436-
437-
Returns
438-
-------
439-
out: :class:`StateSpace`
440-
The new linear system
441-
442-
Raises
443-
------
444-
ValueError
445-
if matrix sizes are not self-consistent
446-
447-
See Also
448-
--------
449-
tf
450-
ss2tf
451-
tf2ss
452-
453-
Examples
454-
--------
455-
>>> # Create a StateSpace object from four "matrices".
456-
>>> sys1 = ss("1. -2; 3. -4", "5.; 7", "6. 8", "9.")
457-
458-
>>> # Convert a TransferFunction to a StateSpace object.
459-
>>> sys_tf = tf([2.], [1., 3])
460-
>>> sys2 = ss(sys_tf)
461-
462-
"""
463-
464-
if len(args) == 4 or len(args) == 5:
465-
return StateSpace(*args)
466-
elif len(args) == 1:
467-
sys = args[0]
468-
if isinstance(sys, StateSpace):
469-
return deepcopy(sys)
470-
elif isinstance(sys, TransferFunction):
471-
return tf2ss(sys)
472-
else:
473-
raise TypeError("ss(sys): sys must be a StateSpace or \
474-
TransferFunction object. It is %s." % type(sys))
475-
else:
476-
raise ValueError("Needs 1 or 4 arguments; received %i." % len(args))
477-
478390

479391
def tf(*args):
480392
"""
@@ -679,148 +591,6 @@ def ss2tf(*args):
679591
else:
680592
raise ValueError("Needs 1 or 4 arguments; received %i." % len(args))
681593

682-
def tf2ss(*args):
683-
"""
684-
Transform a transfer function to a state space system.
685-
686-
The function accepts either 1 or 2 parameters:
687-
688-
``tf2ss(sys)``
689-
Convert a linear system into transfer function form. Always creates
690-
a new system, even if sys is already a TransferFunction object.
691-
692-
``tf2ss(num, den)``
693-
Create a transfer function system from its numerator and denominator
694-
polynomial coefficients.
695-
696-
For details see: :func:`tf`
697-
698-
Parameters
699-
----------
700-
sys: LTI (StateSpace or TransferFunction)
701-
A linear system
702-
num: array_like, or list of list of array_like
703-
Polynomial coefficients of the numerator
704-
den: array_like, or list of list of array_like
705-
Polynomial coefficients of the denominator
706-
707-
Returns
708-
-------
709-
out: StateSpace
710-
New linear system in state space form
711-
712-
Raises
713-
------
714-
ValueError
715-
if `num` and `den` have invalid or unequal dimensions, or if an
716-
invalid number of arguments is passed in
717-
TypeError
718-
if `num` or `den` are of incorrect type, or if sys is not a
719-
TransferFunction object
720-
721-
See Also
722-
--------
723-
ss
724-
tf
725-
ss2tf
726-
727-
Examples
728-
--------
729-
>>> num = [[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]]]
730-
>>> den = [[[9., 8., 7.], [6., 5., 4.]], [[3., 2., 1.], [-1., -2., -3.]]]
731-
>>> sys1 = tf2ss(num, den)
732-
733-
>>> sys_tf = tf(num, den)
734-
>>> sys2 = tf2ss(sys_tf)
735-
736-
"""
737-
738-
if len(args) == 2 or len(args) == 3:
739-
# Assume we were given the num, den
740-
return _convertToStateSpace(TransferFunction(*args))
741-
742-
elif len(args) == 1:
743-
sys = args[0]
744-
if not isinstance(sys, TransferFunction):
745-
raise TypeError("tf2ss(sys): sys must be a TransferFunction \
746-
object.")
747-
return _convertToStateSpace(sys)
748-
else:
749-
raise ValueError("Needs 1 or 2 arguments; received %i." % len(args))
750-
751-
def rss(states=1, outputs=1, inputs=1):
752-
"""
753-
Create a stable **continuous** random state space object.
754-
755-
Parameters
756-
----------
757-
states: integer
758-
Number of state variables
759-
inputs: integer
760-
Number of system inputs
761-
outputs: integer
762-
Number of system outputs
763-
764-
Returns
765-
-------
766-
sys: StateSpace
767-
The randomly created linear system
768-
769-
Raises
770-
------
771-
ValueError
772-
if any input is not a positive integer
773-
774-
See Also
775-
--------
776-
drss
777-
778-
Notes
779-
-----
780-
If the number of states, inputs, or outputs is not specified, then the
781-
missing numbers are assumed to be 1. The poles of the returned system
782-
will always have a negative real part.
783-
784-
"""
785-
786-
return _rss_generate(states, inputs, outputs, 'c')
787-
788-
def drss(states=1, outputs=1, inputs=1):
789-
"""
790-
Create a stable **discrete** random state space object.
791-
792-
Parameters
793-
----------
794-
states: integer
795-
Number of state variables
796-
inputs: integer
797-
Number of system inputs
798-
outputs: integer
799-
Number of system outputs
800-
801-
Returns
802-
-------
803-
sys: StateSpace
804-
The randomly created linear system
805-
806-
Raises
807-
------
808-
ValueError
809-
if any input is not a positive integer
810-
811-
See Also
812-
--------
813-
rss
814-
815-
Notes
816-
-----
817-
If the number of states, inputs, or outputs is not specified, then the
818-
missing numbers are assumed to be 1. The poles of the returned system
819-
will always have a magnitude less than 1.
820-
821-
"""
822-
823-
return _rss_generate(states, inputs, outputs, 'd')
824594

825595
def pole(sys):
826596
"""
@@ -1449,6 +1219,7 @@ def ssdata(sys):
14491219
(A, B, C, D): list of matrices
14501220
State space data for the system
14511221
'''
1222+
from ..statesp import _convertToStateSpace
14521223
ss = _convertToStateSpace(sys)
14531224
return (ss.A, ss.B, ss.C, ss.D)
14541225

0 commit comments

Comments
 (0)
0