|
From: Richard M. <mu...@cd...> - 2012-11-03 23:12:30
|
Version 0.6c of the Python Control Systems Library (python-control) has been posted to SourceForge. The main changes for this version are:
* Support for discrete time systems using the 'timebase' variable dt. For continuous systems dt = 0 and for discrete time systems dt = sampling time. If dt = None, timebase is not specified and can be either discrete or continuous time. System compositions (series, parallel, feedback) requires matching timebases (with automatic conversion if one timebase is None and the other is specified).
* There is now a frequency response data (FRD) subclass contributed by Rene van Paassen at Delft University of Technology. For now, the frequency vectors of different FRD objects need to match; no interpolation / clipping yet.
* There is now a mineral() function for computing minimal transfer functions (by removing pole zero cancellations), contributed by Rene van Paassen at Delft University of Technology.
* Improved support for python 3.x: the current version should run in python 2.6+ (tested in 2.7) and python 3.x (tested in 3.2). I haven't yet tested slycot in python 3.x, but the functions that don't require slycot (most SISO calculations) are working.
A more detailed list of changes is included below (starting from 0.5c).
-richard
2012-11-03 Richard Murray <mu...@al...>
* doc/modules.rst: updated documentation format so that items are
broken down by functionality and not internal module name. Still
not complete, but most functions should now show up in documentation.
* doc/index.rst: got rid of todos from documentation (not formatted
correctly and shouldn't show up in user documentation)
* src/lti.py: added missing docstrings
* doc/intro.rst: small tweaks to text, including adding a link to FBS
2012-11-03 Richard Murray <mu...@al...>
* src/rlocus.py (_RLSortRoots): convert output of range() to
explicit list for python 3 compatability
* tests/modelsimp_test.py, tests/slycot_convert_test.py,
tests/mateqn_test.py, tests/statefbk_test.py: updated test suites to
skip specific tests that require slycot if it is not installed
* src/exception.py (slycot_check): added a function to check if
slycot is installed
* README: updated readme to include information about running
nosetests, which works in python3 (unlike the test_all.py script)
* tests/test_control_matlab.py, tests/test_all.py: set to executable
so that nosetests does not run this file (it already runs all unit
tests in this directory). Add comments at top talking about tests.
* tests/discrete_test.py (TestDiscrete.test_discrete_bode):
explicitly create a list from map() output for python 3
* src/frdata.py: removed long data type from comparisons for
constant systems (not supported in python3)
* src/xferfcn.py (TransferFunction.freqresp): force frequencies to
be a list (map returns iterator in python3)
* src/lti.py (isdtime, isctime): updated timebase checking since
python3 won't allow dt to be compared to integer
* src/__init__.py: updated frdata import to python3 compatible form
* src/statesp.py (_convertToStateSpace): fixed exception syntax to
be python3 compatible
* examples/pvtol-nested.py: converted print statements to be python3
compatible
* doc/class_strings.rst: added FRD class to list of classes that
show up in the user documentation
* examples/rss-balred.py: fixed error in output argument order for
call to matlab.impulse
* ../README: updated readme file as a test of post-commit hook
2012-11-02 Richard Murray <mu...@al...>
* doc/conf.py, setup.py: updated version number to 0.6c
* tests/frd_test.py: unit tests for FRD data type
(suite): added suite() function to allow test_all.py to work
* tests/xferfcn_test.py (TestXferFcn.testMinreal): new unit test
* src/xferfcn.py (TransferFunction.minreal): new function for
removing cancelling pole/zero pairs, contributed by M.M. (Rene) van
Paassen
* src/statesp.py (_convertToStateSpace): new functionality for
converting a matrix to a constant system
* src/modelsimp.py (minreal): removed extraneous code (moved to
xferfcn.py)
* src/frdata.py: new file implementing FRD data type, contributed by
M.M. (Rene) van Paassen
* src/xferfcn.py: resolved conflict between versions
---- control-0.6b released -----
2012-11-02 Richard Murray <mu...@al...>
* src/xferfcn.py, src/statesp.py, src/lti.py, src/bdalg.py:
constants must now be of type 'int' rather than 'long' (for python 3
compatibility)
* tests/statefbk_test.py, tests/slycot_convert_test.py,
tests/convert_test.py: added import __future__ calls for python 3
compatibility; updated print calls
* src/modelsimp.py, src/xferfcn.py, src/delay.py, src/phaseplot.py,
src/margins.py, src/statesp.py, src/mateqn.py: added import
__future__ calls for python 3 compatibility
2012-11-02 Richard Murray <mu...@al...>
* src/xferfcn.py, src/timeresp.py, src/statesp.py, src/statefbk.py,
src/robust.py, src/rlocus.py, src/pzmap.py, src/phaseplot.py,
src/nichols.py, src/modelsimp.py, src/matlab.py, src/margins.py,
src/freqplot.py, src/ctrlutil.py, src/bdalg.py: globally referenced
import commands for python 3.x
* src/__init__.py: changed import commands to be global instead of
local ('from control.bdalg ...' instead of 'from bdalg ...')
2012-10-31 Richard Murray <mu...@al...>
* src/xferfcn.py (TransferFunction._common_den): converted print
statements to python 3 compatible form and included
__future__.print_function
* src/phaseplot.py: converted print statements to python 3
compatible form and included __future__.print_function
* src/mateqn.py (lyap, dlyap): converted except T, E to except T(E)
* src/margins.py: converted print statements to python 3
compatible form and included __future__.print_function
* src/xferfcn.py (TransferFunction.__add__, __mul__, __div__,
feedback): converted raise T, E to raise T(E) for python 3
* src/xferfcn.py (TransferFunction.returnScipySignalLti): fixed
raise(T(E)) bug
* src/statesp.py (_rss_generate): fixed raise(T(E)) bug
* src/statefbk.py (acker, gram): converted raise T, E to raise T(E) for
python 3
* src/modelsimp.py (hsvd, modred, balred): fixed raise(T(E)) bug and
converted raise T, E to raise T(E) for python 3
* src/margins.py (stability_margins): fixed raise(T(E)) bug
* src/statesp.py: converted raise T, E to raise T(E) for python 3
* tests/test_all.py: converted print statements to python 3
compatible form and included __future__.print_function
* tests/statefbk_test.py (TestStatefbk.setUp): turned off debugging
flag (accidently left on)
---- control-0.6a released -----
2012-10-27 Richard Murray <mu...@al...>
* src/statefbk.py (acker): small updates to docstring
* src/bdalg.py (feedback): fixed up docstring formatting (for sphinx)
* tests/statefbk_test.py (TestStatefbk.testAcker): skip
ill-conditioned systems and loosened tolerances on acker() testing
* src/lti.py (timebaseEqual): replaced "type(sys.dt) == NoneType"
with "sys.dt is None", based on feedback from Luke Peterson that
NoneType is deprecated in python 3.
2012-10-22 Richard Murray <mu...@al...>
* examples/genswitch.py (genswitch): updated calls to legend, fixing
problem pointed out by Scott Livingston
2012-10-19 Richard Murray <mu...@dn...>
* src/matlab.py (rlocus): reverted change in default argument
processing for klist. This has some negative consequences:
http://www.deadlybloodyserious.com/2008/05/default-argument-blunders/
2012-10-18 Richard Murray <mu...@dn...>
* src/freqplot.py (gangof4_plot, nyquist_plot): discrete time
systems supported (through fresp)
* src/statesp.py (StateSpace.evalfr): added warning if discrete time
evaluation is above Nyquist frequency
* src/xferfcn.py (TransferFunction.evalfr, freqresp): : added
warning if discrete time evaluation is above Nyquist frequency
* tests/discrete_test.py (TestDiscrete.test_discrete_bode):
rudimentary unit test for discrete bode plot
* src/freqplot.py (bode_plot): fixed bug where input frequency list
was being overwritten by default frequency range
* src/xferfcn.py (TransferFunction.evalfr, freqresp): handles dtime
* src/statesp.py (StateSpace.evalfr): handles dtime
* src/lti.py (timebaseEqual): converted function to take systems as
inputs instead of dt as input (also affected functions in statesp.py
and xferfcn.py)
* src/lti.py (timebase): timebase now returns dt instead of
'ctime'/'dtime'
2012-10-13 Richard Murray <mu...@dn...>
* src/lti.py (timebase): new function to return timebase. Doesn't
yet handle the case where dt == None.
2012-10-07 Richard Murray <mu...@al...>
* src/matlab.py (c2d): MATLAB compatible function (just calls
sample_system)
* tests/discrete_test.py (TestDiscrete.test_sample_system): unit
test for sampling
* src/dtime.py (sample_system, _c2dmatched): new functions, based on
contributiosn from Benjamin White
* src/dtime.py: added back this file, this time with sampling routes
to convert from continuous to discrete time
* src/timeresp.py (forced_response): added discrete time simulator,
using dlsim from scipy.signal
2012-10-07 Richard Murray <mu...@al...>
* doc/conf.py: fixed release number (0.6a instead of 0.6c)
* src/__init__.py: moved timebase functions from dtime to lti
* src/lti.py: moved isdtime, isctime, timebase, and timebaseEqual
from dtime.py to lti.py. Moved initialization of dt to
Lti.__init__().
* src/statesp.py (StateSpace.__init__): Moved dt
initialization to Lti object initialization
* src/xferfcn.py (TransferFunction.__init__): Moved dt
initialization to Lti object initialization
2012-10-06 Richard Murray <mu...@al...>
* tests/discrete_test.py: added additional tests for dt = True cases
* src/statesp.py (StateSpace.__str__): show sampling time as
'unspecified' if dt is a boolean and equal to True
* src/xferfcn.py (TransferFunction.__str__): don't print sampling
time (dt) if dt = True (discrete time with unspecified time base)
* src/dtime.py: added code to support dt = True for unspecified
sampling time for a discrete time system
* src/bdalg.py: much -> must in docstrings
2012-10-06 Richard Murray <mu...@al...>
* src/dtime.py: new module with functions for operating on discrete
time systems
* src/modelsimp.py: added NotImplementedError for discrete time
* src/freqplot.py: added NotImplementedError for discrete time
* src/bdalg.py: added documentation about timebases (discrete versus
continuous)
* src/statesp.py (_mimo2siso): include sampling time
* src/xferfcn.py (TransferFunction.__str__): added optional var
keyword to allow any symbol to be used
* src/matlab.py (tf2ss): added code required to keep track of dt
* src/xferfcn.py (TransferFunction.__str__): added additional string for
discrete time system, plus use 'z' for polynomial variable
(TransferFunction.__neg__): set sampling time for negation
(TransferFunction.__add__): added test for same sampling time
(TransferFunction.__mul__): added test for same sampling time
(TransferFunction.__div__): added test for same sampling time
(TransferFunction.feedback): added test for same sampling time
* src/statesp.py (StateSpace.__str__): added additional string for
discrete time system
(StateSpace.__add__): added test for same sampling time
(StateSpace.__mul__): added test for same sampling time
(StateSpace.__rmul__): set sampling time for product
(StateSpace.__neg__): set sampling time for negation
(StateSpace.feedback): added test for same sampling time
* tests/discrete_test.py (TestDiscrete): unit tests for discrete
time systems
* src/xferfcn.py (TransferFunction.__init__): added dt class
variable for discrete time systems
* src/statesp.py (StateSpace.__init__): added dt class variable for
discrete time systems
|