# bloc2exp

преобразование блок-схемы в символьное выражение

## Последовательность вызова

    [str]=bloc2exp(blocd)
                [str,names]=bloc2exp(blocd)

## Аргументы

blocd

  список

str

  строка

names

  строка

## Описание

Для указанной блок-схемы элемента линейной системы списка `bloc2exp` возвращает её символьное вычисление. Первый элемент списка `blocd` должен быть строкой `'blocd'`. Остальные элементы этого списка `(blocd(2),blocd(3),...)` сами по себе являются списком одного из следующих типов:

    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],
                   ...)

Строки `'transfer'` и `'link'` являются ключевыми словами, которые указывают тип элемента в блок-схеме.

Случай 1: второй параметр списка является символьной строкой, которая может ссылаться (для возможного последующего выполнения) на Scilab-имя линейной системы, заданной в представлении пространства состояний (`syslin` список) или передаточную форму (матрица рациональных дробей).

Каждому передаточному блоку присвоено целое число. Каждому входу и выходу передаточного блока также присвоено целое число (см. примеры).

Случай 2: второй вид элемента в представлении блок-схемы - это связь (link). Связь связывает один выход блока, представленного парой `[number_of_upstream_box,upstream_box_port]` (т.е. `[номер_предшествующего_блока,порт_предшествующего_блока]`) с различными другими блоками. Каждый такой вход представлен парой `[downstream_box_i,downstream_box_i_portnumber]` (т.е. `[последующий_блок_i,номер_порта_последующего_блока_i]`).

Различные элементы блок-схемы могут быть определены в произвольном порядке.

Например

[1] `S1*S2` с обратной связью блока.

Есть 3 передаточных звена `S1` (число `n_s1=2`), `S2` (число `n_s2=3`) и сумматор (число `n_add=4`) с символьной передаточной функцией `['1','1']`.

Есть 4 связи. Первая (названная `'U'`) связывает вход (порт 0 условного блока -1 не рассматривается) с портом 1 сумматора. Вторая и третья связи соответственно (выходной) порт 1 сумматора с (входным) портом 1 системы `S1`, а (выходной) порт 1 `S1` с (входным) портом 1 `S2`. Четвёртая связь (названная `'Y'`) связывает (выходной) порт 1 `S2` с выходом (порт 0 условного блока -1 не рассматривается) и с (входным) портом 2 сумматора.

## Examples

    //Инициализация
    syst=list('blocd'); l=1;

    //Системы
    l=l+1;n_s1=l;syst(l)=list('transfer','S1');  //Система 1
    l=l+1;n_s2=l;syst(l)=list('transfer','S2');  //Система 2
    l=l+1;n_adder=l;syst(l)=list('transfer',['1','1']);  //сумматор

    //Связи

    // входы  -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]);

    // Выходы // -1 -> выход 1
    l=l+1;syst(l)=list('link','Y',[n_s2,1],[-1],[n_adder,2]);

    //Вызов выполнения
    w=bloc2exp(syst);

Результатом является символьная строка: `w=-(s2*s1-eye())\s2*s1`.

Заметим, что вызов с двумя выходными аргументами `[str,names]=blocd(syst)` возвращает в `names` список символьных имён наименованных связей. Это полезно для установки имён входам и выходам.

[2] второй пример

    //Инициализация
    syst=list('blocd'); l=1;

    //Система (установка блоков 2x2)
    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);

В этом случае результатом является формула, эквивалентная обычной формуле:

`P11+P12*invr(eye()-K*P22)*K*P21;`

## Смотрите также

- bloc2ss