Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8b5eb47

Browse files
committed
squashed noslycot losing signal names bug, added unit tests
1 parentebabbd6 commit8b5eb47

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

‎control/statesp.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ class StateSpace(LTI):
170170
171171
The StateSpace class is used to represent state-space realizations of
172172
linear time-invariant (LTI) systems:
173-
173+
174174
.. math::
175-
175+
176176
dx/dt &= A x + B u \\
177177
y &= C x + D u
178178
@@ -1561,7 +1561,8 @@ def _convert_to_statespace(sys):
15611561
returnStateSpace(
15621562
ssout[1][:states, :states],ssout[2][:states, :sys.ninputs],
15631563
ssout[3][:sys.noutputs, :states],ssout[4],sys.dt,
1564-
inputs=sys.input_labels,outputs=sys.output_labels)
1564+
inputs=sys.input_labels,outputs=sys.output_labels,
1565+
name=sys.name)
15651566
exceptImportError:
15661567
# No Slycot. Scipy tf->ss can't handle MIMO, but static
15671568
# MIMO is an easy special case we can check for here
@@ -1574,7 +1575,9 @@ def _convert_to_statespace(sys):
15741575
fori,jinitertools.product(range(sys.noutputs),
15751576
range(sys.ninputs)):
15761577
D[i,j]=sys.num[i][j][0]/sys.den[i][j][0]
1577-
returnStateSpace([], [], [],D,sys.dt)
1578+
returnStateSpace([], [], [],D,sys.dt,
1579+
inputs=sys.input_labels,outputs=sys.output_labels,
1580+
name=sys.name)
15781581
else:
15791582
ifsys.ninputs!=1orsys.noutputs!=1:
15801583
raiseTypeError("No support for MIMO without slycot")
@@ -1586,7 +1589,7 @@ def _convert_to_statespace(sys):
15861589
sp.signal.tf2ss(squeeze(sys.num),squeeze(sys.den))
15871590
returnStateSpace(
15881591
A,B,C,D,sys.dt,inputs=sys.input_labels,
1589-
outputs=sys.output_labels)
1592+
outputs=sys.output_labels,name=sys.name)
15901593

15911594
elifisinstance(sys,FrequencyResponseData):
15921595
raiseTypeError("Can't convert FRD to StateSpace system.")

‎control/tests/namedio_test.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,29 @@ def test_init_namedif():
241241

242242
# Test state space conversion
243243
deftest_convert_to_statespace():
244-
# Set up the initial system
245-
sys=ct.tf(ct.rss(2,1,1))
244+
# Set up the initial systems
245+
sys=ct.tf(ct.rss(2,1,1),inputs='u',outputs='y',name='sys')
246+
sys_static=ct.tf(1,2,inputs='u',outputs='y',name='sys_static')
247+
248+
# check that name, inputs, and outputs passed through
249+
sys_new=ct.ss(sys)
250+
assertsys_new.name=='sys'
251+
assertsys_new.input_labels== ['u']
252+
assertsys_new.output_labels== ['y']
253+
sys_new=ct.ss(sys_static)
254+
assertsys_new.name=='sys_static'
255+
assertsys_new.input_labels== ['u']
256+
assertsys_new.output_labels== ['y']
246257

247258
# Make sure we can rename system name, inputs, outputs
248259
sys_new=ct.ss(sys,inputs='u',outputs='y',name='new')
249260
assertsys_new.name=='new'
250261
assertsys_new.input_labels== ['u']
251262
assertsys_new.output_labels== ['y']
263+
sys_new=ct.ss(sys_static,inputs='u',outputs='y',name='new')
264+
assertsys_new.name=='new'
265+
assertsys_new.input_labels== ['u']
266+
assertsys_new.output_labels== ['y']
252267

253268
# Try specifying the state names (via low level test)
254269
withpytest.warns(UserWarning,match="non-unique state space realization"):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp