D. Приложение D. ВОЗМОЖНОСТИ СИСТЕМЫ

SCILAB

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

http: / / www-rocq.inria.fr/scilab/

Ниже приводятся основные сведения о системе и демонстрационные примеры конструкций языка и возможностей системы Scilab. Более подробно о работе в среде Scilab можно узнать из готовящейся к печати книги: Б.Р.Андриевский, А.Л.Фрадков ’’Элементы математического моделирования в программных средах MATLAB и Scilab” [10].

Scilab состоит из трех отдельных частей: интерпретатора, библиотек функций (процедур Scilab) и библиотек подпрограмм на языках Фортран и С. Подпрограммы на Фортране и С, строго говоря, не входят в Scilab - они вызываются интерпретатором. Большая их часть доступна независимо, например, из сетевой базы данных Netlib: http://www.netlib.org/ Некоторые подпрограммы слегка модифицированы для лучшей совместимости с интерпретатором Scilab. Основным достоинством Scilab, как и системы MATLAB, является возможность легко оперировать с числовыми матрицами: такие операции как сложение, умножение, транспонирование, слияние, вырезание, выполняются непосредственно. Scilab также дает возможность манипулирования с более сложными объектами (такими, как полиномы, полиномиальные или рациональные матрицы передаточных функций) при помощи обработки списков и типизированных списков. Это в свою очередь открывает пути естественного символического представления таких объектов, как линейные системы и графы. Нри этом синтаксис операций идентичен используемому при работе с постоянными векторами и матрицами и очень похож на сип-

таксис языка MATLAB.

Scilab предоставляет широкий спектр процедур анализа пелипейпых систем: решение уравнений, численное интегрирование явных или неявных систем, методы оптимизации (в том числе недифференцируемой). В состав системы Scilab входят сотни математических функций, встроенные библиотеки по линейной алгебре (включая работу с разреженными матрицами, кронекеровским и шуровским представлением); по системам управления ( классическая, линейноквадратичная и //“-оптимизация, редукция моделей, идентификация и др.); пакет программ по линейным матричным неравенствам (LMI), по обработке сигналов и фильтрации, пакет анализа и оптимизации сетей Metanet.

Прилагаемый к пакету Scilab тулбокс Scicos предоставляет средства графического описания и моделирования взаимосвязанных дискретных и непрерывных систем (аналогично системе SIMULINK).

Имеются развитые графические возможности (двумерная и трехмерная графика, анимация). Возможности символических вычислений реализуются через интерфейс с Maple. Наконец, имеется система параллельных вычислений Parallel Scilab.

Обш;ая философия Scilab состоит в создании вычислительной среды, предоставляюш;ей пользователю:

-    гибкий набор типов данных с естественным и простым синтаксисом (например, поддерживается тип данных ’’строка символов”, а функции считаются объектами и могут определяться в системе Scilab и передаваться как входные или выходные аргументы других функций);

-    достаточный набор вычислительных процедур как основу для выполнения разнообразных вычислений;

-    открытую среду программирования, в которую легко добавляются новые примитивы;

-    поддержку разработки новых библиотек и тулбоксов, в частности, добавления новых модулей на Фортране и С.

Приведем некоторые примеры конструкций и текстов на Scilab.

Основные конструкции языка

Скалярные объекты.

а=1 - веш;ественная константа

1 = = 1 - логическое выражение ’string’ - строка символов

z=poly(0,’z’) - многочлен от 2, имеющий один нулевой корень

p=l+3*z+4.5*z 2 - многочлен от 2

r=z/p - рациональная функция

Матрицы

А=[а+1 2 3; 0 0 atan(l); 5 9 -1]; - ЗхЗ-матрица вещественных констант

b=[%t,%f] - 1х2-матрица логических констант Mc=[’this’,’is’; ’а’ ,’matrix’] - 2х2-матрица строк Mp=[p,l-z; l,z*p] - 2х2-матрица многочленов

F=Mp/poly([l + %i 1-%і l],’z’) - матрица рациональных функций

Sp=sparse([l,2;4,5;3,10],[1,2,3]) - разреженная матрица

Sp(l,10) = = Sp(l,l) - логическая разреженная матрица Списки

L=list(a,-(1:5), Мр,[’this’,’list’]) - список

Lt=tlist([’mylist’,’color’,’position’,’weight’],’blue’, [0,1],10)

- типизированный список Lt(’color’)

- извлечение из списка A=diag([2,3,4]); В = [1 0;0 1;0 0];

С = [1 -1 0];D=0*C*B;x0=[0;0;0];

Sl=syslin(’c’,A,B,C,D,xO) - стандартное представление системы уравнениями состояния

S1(”A”), S1(”C”) - выбранные элементы типизированного списка

Slt=ss2tf(Sl) - матричная передаточная функция

Slt(’num’), Slt(’den’)

Операторы

ѵ=1:5; W=v’*v - умножение матрицы-константы W(l,:) - извлечение первого столбца W(:,$) - извлечение последней строки Мр’*Мр+еуе - матрица многочленов

Мр1=Мр(1,1)+4.5*%і - комплексная матрица Fi=C*(z*eye-A) (-1)*В; - вычисление передаточной функции

F(:,l)*Fi - действия с рациональными функциями

М=[Мр -Мр; Мр’ Мр+еуе]; [Fi, Fi(:,l)] -сцепление многочленных матриц и рациональных функций

F=syslin(’c’,F); Num=F(’num’);Den=F(’den’);

действия с передаточными функциями Некоторые числовые операции. іпѵ(А) іпѵ(Мр) - обращение

inv(Sl*Sl’) - произведение двух линейных систем и обращение

w=ss2tf(ans) - получение передаточной функции

wl=inv(ss2tf(Sl)*ss2tf(Sl’)) - произведение двух передаточных функций и обращение

A=rand(3,3);B=rand(3,l);n=contr(A,B)  проверка

управляемости

К=рро1(А,В,[-1-%і -1 + %і -1]);

poly(A-B*K,’z’)-poly([-l-%i -l + %i -l],’z’) - синтез модального регулятора по состоянию и проверка результата

s=sin(0:0.1:5*%pi);

ss=fft(s(l:128),-l);

-    быстрое преобразование Фурье xbasc(); plot2d3(”enn”,l,abs(ss)’);

-    вывод графика

Определение функции в режиме интерпретации

deff(’[x]=fact(n)’,’if п=0 then х=1, else x=n*fact(n-l),end’)

10+fact(5)

Оптимизация

deff(’[f,g,ind]=rosenbro(x,ind)’,’a=x(2)-x(l) 2, b=l-x(2),

f=100.*a^2 + b^2 , g(l)=-400.*x(l)*a , g(2)=200.*a 2.*b ’);

[f,x,g]=optim(rosenbro,[2;2],’qn’)

Моделирование

a=rand(3,3); e=expm(a);

deff(’[ydot]=f(t,y)’,’ydot=a*y’);

e(:,l)-ode([l;0;0],0,l,f)

Описание систем

s=poly(0,’s’);

h=[l/s,l/(s+l);l/s/(s+l),l/(s+2)/(s+2)]

w=tf2ss(h); ss2tf(w)

hl=clean(ans)

Пример: исследование системы второго порядка

sl=syslin(’c’,l/(s*s+0.2*s+l)) instants=0:0.05:20;

-    переходная функция: y=csim(’step’,instants,si); xbasc();plot2d (instant s’,y’)

-    переходная функция с задержкой:

deff(’[in]=u(t)’,’if t;3 then in=0;else in=l;end’); yl=csim(u,instants,si); plot 2d (instant s’,yl’);

-    функция веса: yi=csim(’imp’,instants,si); xbasc();plot 2d (instant s’,yi’); yil=csim (’step’,instant s,s*sl); plot 2d (instant s’,yil’);

-    дискретизация

dt=0.05; sld=dscr(tf2ss(sl),0.05);

-    переходная функция дискретной модели: u=ones(instants); yyy=flts(u,sld); xbasc();plot(instants,yyy)

-    функция веса дискретной модели: u=0*ones(instants);u(l) = l/dt; yy=flts(u,sld);

xbasc();plot (instant s,yy)

-    объединение систем wl = [w,w]; clean(ss2tf(wl)) w2=[w;w]; clean(ss2tf(w2))

-    замена переменной

z=poly(0,’z’); horner(h,(l-z)/(l+z))

-    дробно-линейное (’’билинейное”) преобразование