DynamicSystems - Maple Programming Help

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : Science and Engineering : Dynamic Systems : System Manipulation Tools : DynamicSystems/FeedbackConnect





create the equivalent system representation of one or two system objects with positive or negative feedback connection.


Calling Sequence






Calling Sequence

FeedbackConnect(systems, opts)

FeedbackConnect(systems, feedbacktype, opts)

FeedbackConnect(systems, loopconnections, opts)




list(System); list of system objects



(optional) negative or positive; type of feedback loops, negative by default



(optional) listlist; list of lists of indexes specifying loop connections [loop 1,...,loop k], where the indexes in loop k must be ordered as follows: [input sys1, output sys1] for one system, and [input sys1, output sys1, input sys2, output sys2] for two systems. The sign of the last index in the above lists determines the type of feedback (positive or negative).



(optional) equation(s) of the form option = value; specify options for the FeedbackConnect command



outputtype = tf, coeff, zpk, ss, or de


Specifies the subtype of the returned system object.  The default return type is based on the type of the system objects specified in the systems parameter. See the Description section for more details on the return type.


merge = keep, evaluate, or replace


Specifies how parameters from different systems are merged. The default is keep.


keep: keep the original parameters. The value for a parameter is the value assigned by the first system that defines it.


evaluate: replace all parameters in the systems with their assigned values.


replace: replace each parameter in a system with a distinct parameter created by appending an index from the param_indices options. For example, the parameter P of the first system becomes P1.


indices = list


Used when merge is replace. The k-th element of the list is appended, as an index, to each parameter name of the k-th system. The number of elements must match the number of systems. The default is the positive integers, with 1 corresponding to the first subsystem.



The FeedbackConnect command creates the equivalent system representation of the feedback connection of one or two system objects. When two system objects are given, the first system is placed in the forward path and the second system is placed in the reverse (or feedback path). When a single system is given, the system object is placed in the forward path and unity feedback is assumed.


Unless loop connection lists are specified, all inputs and outputs of the systems are used to form negative feedback loops by default. The number of forward path system's outputs must match the number of feedback path system's inputs. Likewise, the number of forward path system's inputs must match the number of feedback path system's outputs. The returned system has the same number of inputs/outputs as the forward path system.


If loop connection lists are provided, the number of loops connection lists must not exceed the minimum number of inputs or outputs of the individual systems. If a single system is specified, the loop connection lists must contain 2 indexes each, as in [input sys1, output sys1]. If two systems are specified, the loop connection lists must contain 4 indexes each, as in [input sys1, output sys1, input sys2, output sys2].


The system objects must be either both continuous or both discrete with the same sampling times.


The returned system type is the same as the input system type, unless the outputtype option is used, or the input is an ae system type.


In the specific case when the system parameter is an algebraic equation (ae) and no option is specified, the FeedbackConnect command returns a system object in state space form by default. If the algebraic equation system does not have a state space representation, an error is returned. For details on algebraic equation object support by the DynamicSystems package, see DynamicSystems[AlgEquation].



Example 1: Connect a SISO system with negative unity feedback

sys1a := TransferFunction(K/(s*(s+1))):

feedback1a := FeedbackConnect([sys1a]): PrintSystem(feedback1a);

Transfer Functioncontinuous1 output(s); 1 input(s)inputvariable=u1soutputvariable=y1stf1,1=Ks2+s+K


feedback1a := FeedbackConnect([sys1a], outputtype = zpk):


Zero Pole Gaincontinuous1 output(s); 1 input(s)inputvariable=u1soutputvariable=y1sz1,1=p1,1=12+14K2,1214K2k1,1=K


n := 2: m := 1: p := 1:

sys1b := StateSpace('usesymbols', 'numinputs'=m, 'numoutputs'=p, 'numstates'=n): sys1b:-d[1,1] := 0:

feedback1b := FeedbackConnect([sys1b]):


State Spacecontinuous1 output(s); 1 input(s); 2 state(s)inputvariable=u1toutputvariable=y1tstatevariable=x1t,x2ta=b1,1c1,1+a1,1b1,1c1,2+a1,2b2,1c1,1+a2,1b2,1c1,2+a2,2b=b1,1b2,1c=c1,1c1,2d=0


Example 2: Connect two MIMO systems in positive feedback

sys1c := StateSpace('usesymbols', 'numinputs'=m, 'numoutputs'=p+1, 'numstates'=n): sys1c:-d := Matrix(p+1,m):

sys2c := StateSpace('symbols' = [e,f,g,h], 'usesymbols', 'numinputs'=m+1, 'numoutputs'=p, 'numstates'=n): sys2c:-d := Matrix(p,m+1):

feedback2 := FeedbackConnect([sys1c, sys2c], positive):


State Spacecontinuous2 output(s); 1 input(s); 4 state(s)inputvariable=u1toutputvariable=y1t,y2tstatevariable=x1t,x2t,x3t,x4ta=a1,1a1,2b1,1g1,1b1,1g1,2a2,1a2,2b2,1g1,1b2,1g1,2f1,1c1,1+f1,2c2,1f1,1c1,2+f1,2c2,2e1,1e1,2f2,1c1,1+f2,2c2,1f2,1c1,2+f2,2c2,2e2,1e2,2b=b1,1b2,100c=c1,1c1,200c2,1c2,200d=00


Example 3: Connect a MIMO system with two negative unity feedback loops, connecting input u11 and output y14 and input u13 and output y12, respectively.

sys1d := StateSpace('usesymbols', 'numinputs'=m+2, 'numoutputs'=p+3, 'numstates'=n): sys1d:-d := Matrix(p+3,m+2):

feedback3 := FeedbackConnect([sys1d], [[1,-4],[3,-2]]):


State Spacecontinuous4 output(s); 3 input(s); 2 state(s)inputvariable=u1t,u2t,u3toutputvariable=y1t,y2t,y3t,y4tstatevariable=x1t,x2ta=b1,1c4,1b1,3c2,1+a1,1b1,1c4,2b1,3c2,2+a1,2b2,1c4,1b2,3c2,1+a2,1b2,1c4,2b2,3c2,2+a2,2b=b1,1b1,2b1,3b2,1b2,2b2,3c=c1,1c1,2c2,1c2,2c3,1c3,2c4,1c4,2d=000000000000


Example 4: Connect two MIMO systems with two negative feedback loops, as shown in the figure.

sys1e := StateSpace('usesymbols', 'numinputs'=m+2, 'numoutputs'=p+2, 'numstates'=n): sys1e:-d := Matrix(p+2,m+2):

sys2e := StateSpace('symbols' = [e,f,g,h], 'usesymbols', 'numinputs'=m+1, 'numoutputs'=p+2, 'numstates'=n): sys2e:-d := Matrix(p+2,m+1):

feedback4 := FeedbackConnect([sys1e, sys2e], [[1,3,2,-2],[2,2,1,-3]]):


State Spacecontinuous3 output(s); 3 input(s); 4 state(s)inputvariable=u1t,u2t,u3toutputvariable=y1t,y2t,y3tstatevariable=x1t,x2t,x3t,x4ta=a1,1a1,2b1,1g2,1b1,2g3,1b1,1g2,2b1,2g3,2a2,1a2,2b2,1g2,1b2,2g3,1b2,1g2,2b2,2g3,2f1,1c2,1+f1,2c3,1f1,1c2,2+f1,2c3,2e1,1e1,2f2,1c2,1+f2,2c3,1f2,1c2,2+f2,2c3,2e2,1e2,2b=b1,1b1,2b1,3b2,1b2,2b2,3000000c=c1,1c1,200c2,1c2,200c3,1c3,200d=000000000




The DynamicSystems[FeedbackConnect] command was introduced in Maple 18.


For more information on Maple 18 changes, see Updates in Maple 18.

See Also

Description of the Model of a Linear System Object