bloc2exp - Block-diagram to symbolic expression (original) (raw)
Please note that the recommended version of Scilab is 2026.0.1. This page might be outdated.
However, this page did not exist in the previous stable version.
Description
given a block-diagram representation of a linear systembloc2exp returns its symbolic evaluation. The first element of the list blocd must be the string'blocd'. Each other element of this list(blocd(2),blocd(3),...) is itself a list of one the following types :
list('transfer','name_of_linear_system')
list('link','name_of_link', [number_of_upstream_box,upstream_box_port], [downstream_box_1,downstream_box_1_portnumber], [downstream_box_2,downstream_box_2_portnumber], ...)
The strings 'transfer' and'links' are keywords which indicate the type of element in the block diagram.
Case 1 : the second parameter of the list is a character string which may refer (for a possible further evaluation) to the Scilab name of a linear system given in state-space representation (syslin list) or in transfer form (matrix of rationals).
To each transfer block is associated an integer. To each input and output of a transfer block is also associated its number, an integer (see examples)
Case 2 : the second kind of element in a block-diagram representation is a link. A link links one output of a block represented by the pair [number_of_upstream_box,upstream_box_port], to different inputs of other blocks. Each such input is represented by the pair[downstream_box_i,downstream_box_i_portnumber].
The different elements of a block-diagram can be defined in an arbitrary order.
For example
[1] S1*S2 with unit feedback.
There are 3 transfers S1 (numbern_s1=2) , S2 (numbern_s2=3) and an adder (numbern_add=4) with symbolic transfer function['1','1'].
There are 4 links. The first one (named 'U') links the input (port 0 of fictitious block -1, omitted) to port 1 of the adder. The second and third one link respectively (output)port 1 of the adder to (input)port 1 of system S1, and (output)port 1 of S1 to (input)port 1 of S2. The fourth link (named 'Y') links (output)port 1 ofS2 to the output (port 0 of fictitious block -1, omitted) and to (input)port 2 of the adder.
syst=list('blocd'); l=1;
l=l+1;n_s1=l;syst(l)=list('transfer','S1');
l=l+1;n_s2=l;syst(l)=list('transfer','S2');
l=l+1;n_adder=l;syst(l)=list('transfer',['1','1']);
l=l+1;syst(l)=list('link','U',[-1],[n_adder,1]);
l=l+1;syst(l)=list('link',' ',[n_adder,1],[n_s1,1]); l=l+1;syst(l)=list('link',' ',[n_s1,1],[n_s2,1]);
l=l+1;syst(l)=list('link','Y',[n_s2,1],[-1],[n_adder,2]);
w=bloc2exp(syst);
The result is the character string:w=-(s2*s1-eye())\s2*s1.
Note that invoked with two output arguments, [str,names]= blocd(syst) returns in names the list of symbolic names of named links. This is useful to set names to inputs and outputs.
[2] second example
syst=list('blocd'); l=1;
l=l+1;n_s=l;syst(l)=list('transfer',['P11','P12';'P21','P22']);
l=l+1;n_k=l;syst(l)=list('transfer','k');
l=l+1;syst(l)=list('link','w',[-1],[n_s,1]); l=l+1;syst(l)=list('link','z',[n_s,1],[-1]); l=l+1;syst(l)=list('link','u',[n_k,1],[n_s,2]); l=l+1;syst(l)=list('link','y',[n_s,2],[n_k,1]);
w=bloc2exp(syst);
In this case the result is a formula equivalent to the usual one:
P11+P12*invr(eye()-K*P22)*K*P21;