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

Commit7795a13

Browse files
authored
Merge pull request#185 from murrayrm/Marxlp-more-parameters
more parameters for series and parallel (updated)
2 parents1801c9a +ccb84a2 commit7795a13

File tree

2 files changed

+77
-13
lines changed

2 files changed

+77
-13
lines changed

‎control/bdalg.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@
6161

6262
__all__= ['series','parallel','negate','feedback','append','connect']
6363

64-
defseries(sys1,sys2):
65-
"""Return the series connectionsys2 *sys1 for --> sys1 -->sys2-->.
64+
defseries(sys1,*sysn):
65+
"""Return the series connection(... *sys3 *)sys2* sys1
6666
6767
Parameters
6868
----------
6969
sys1: scalar, StateSpace, TransferFunction, or FRD
70-
sys2: scalar, StateSpace, TransferFunction, orFRD
70+
*sysn: other scalers, StateSpaces, TransferFunctions, orFRDs
7171
7272
Returns
7373
-------
@@ -97,20 +97,22 @@ def series(sys1, sys2):
9797
9898
Examples
9999
--------
100-
>>> sys3 = series(sys1, sys2) # Same as sys3 = sys2 * sys1.
100+
>>> sys3 = series(sys1, sys2) # Same as sys3 = sys2 * sys1
101101
102-
"""
102+
>>> sys5 = series(sys1, sys2, sys3, sys4) # More systems
103103
104-
returnsys2*sys1
104+
"""
105+
fromfunctoolsimportreduce
106+
returnreduce(lambdax,y:x*y,sysn,sys1)
105107

106-
defparallel(sys1,sys2):
108+
defparallel(sys1,*sysn):
107109
"""
108-
Return the parallel connection sys1 + sys2.
110+
Return the parallel connection sys1 + sys2 (+ sys3 + ...)
109111
110112
Parameters
111113
----------
112114
sys1: scalar, StateSpace, TransferFunction, or FRD
113-
sys2: scalar, StateSpace, TransferFunction, orFRD
115+
*sysn: other scalers, StateSpaces, TransferFunctions, orFRDs
114116
115117
Returns
116118
-------
@@ -140,11 +142,13 @@ def parallel(sys1, sys2):
140142
141143
Examples
142144
--------
143-
>>> sys3 = parallel(sys1, sys2) # Same as sys3 = sys1 + sys2.
145+
>>> sys3 = parallel(sys1, sys2) # Same as sys3 = sys1 + sys2
144146
145-
"""
147+
>>> sys5 = parallel(sys1, sys2, sys3, sys4) # More systems
146148
147-
returnsys1+sys2
149+
"""
150+
fromfunctoolsimportreduce
151+
returnreduce(lambdax,y:x+y,sysn,sys1)
148152

149153
defnegate(sys):
150154
"""
@@ -247,7 +251,7 @@ def feedback(sys1, sys2=1, sign=-1):
247251
returnsys1.feedback(sys2,sign)
248252

249253
defappend(*sys):
250-
'''append(sys1, sys2, ... sysn)
254+
'''append(sys1, sys2, ..., sysn)
251255
252256
Group models by appending their inputs and outputs
253257

‎control/tests/bdalg_test.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55

66
importunittest
77
importnumpyasnp
8+
fromnumpyimportsort
9+
importcontrolasctrl
810
fromcontrol.xferfcnimportTransferFunction
911
fromcontrol.statespimportStateSpace
1012
fromcontrol.bdalgimportfeedback
13+
fromcontrol.ltiimportzero,pole
1114

1215
classTestFeedback(unittest.TestCase):
1316
"""These are tests for the feedback function in bdalg.py. Currently, some
@@ -177,6 +180,63 @@ def testTFTF(self):
177180
np.testing.assert_array_almost_equal(ans2.num, [[[1.,4.,7.,6.]]])
178181
np.testing.assert_array_almost_equal(ans2.den, [[[1.,4.,9.,8.,5.]]])
179182

183+
deftestLists(self):
184+
"""Make sure that lists of various lengths work for operations"""
185+
sys1=ctrl.tf([1,1], [1,2])
186+
sys2=ctrl.tf([1,3], [1,4])
187+
sys3=ctrl.tf([1,5], [1,6])
188+
sys4=ctrl.tf([1,7], [1,8])
189+
sys5=ctrl.tf([1,9], [1,0])
190+
191+
# Series
192+
sys1_2=ctrl.series(sys1,sys2)
193+
np.testing.assert_array_almost_equal(sort(pole(sys1_2)), [-4.,-2.])
194+
np.testing.assert_array_almost_equal(sort(zero(sys1_2)), [-3.,-1.])
195+
196+
sys1_3=ctrl.series(sys1,sys2,sys3);
197+
np.testing.assert_array_almost_equal(sort(pole(sys1_3)),
198+
[-6.,-4.,-2.])
199+
np.testing.assert_array_almost_equal(sort(zero(sys1_3)),
200+
[-5.,-3.,-1.])
201+
202+
sys1_4=ctrl.series(sys1,sys2,sys3,sys4);
203+
np.testing.assert_array_almost_equal(sort(pole(sys1_4)),
204+
[-8.,-6.,-4.,-2.])
205+
np.testing.assert_array_almost_equal(sort(zero(sys1_4)),
206+
[-7.,-5.,-3.,-1.])
207+
208+
sys1_5=ctrl.series(sys1,sys2,sys3,sys4,sys5);
209+
np.testing.assert_array_almost_equal(sort(pole(sys1_5)),
210+
[-8.,-6.,-4.,-2.,-0.])
211+
np.testing.assert_array_almost_equal(sort(zero(sys1_5)),
212+
[-9.,-7.,-5.,-3.,-1.])
213+
214+
# Parallel
215+
sys1_2=ctrl.parallel(sys1,sys2)
216+
np.testing.assert_array_almost_equal(sort(pole(sys1_2)), [-4.,-2.])
217+
np.testing.assert_array_almost_equal(sort(zero(sys1_2)),
218+
sort(zero(sys1+sys2)))
219+
220+
sys1_3=ctrl.parallel(sys1,sys2,sys3);
221+
np.testing.assert_array_almost_equal(sort(pole(sys1_3)),
222+
[-6.,-4.,-2.])
223+
np.testing.assert_array_almost_equal(sort(zero(sys1_3)),
224+
sort(zero(sys1+sys2+sys3)))
225+
226+
sys1_4=ctrl.parallel(sys1,sys2,sys3,sys4);
227+
np.testing.assert_array_almost_equal(sort(pole(sys1_4)),
228+
[-8.,-6.,-4.,-2.])
229+
np.testing.assert_array_almost_equal(sort(zero(sys1_4)),
230+
sort(zero(sys1+sys2+
231+
sys3+sys4)))
232+
233+
234+
sys1_5=ctrl.parallel(sys1,sys2,sys3,sys4,sys5);
235+
np.testing.assert_array_almost_equal(sort(pole(sys1_5)),
236+
[-8.,-6.,-4.,-2.,-0.])
237+
np.testing.assert_array_almost_equal(sort(zero(sys1_5)),
238+
sort(zero(sys1+sys2+
239+
sys3+sys4+sys5)))
180240
defsuite():
181241
returnunittest.TestLoader().loadTestsFromTestCase(TestFeedback)
182242

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp