ISS0010

Süsteemiteooria 〔Õppeaine ÕIS-is〕

Информация

Лекции (Гордон)

Говорят, что раньше г-ин Гордон превосходно вел свои лекции. Вероятнее всего, энтузиазма за несколько лет поубавилось. Однако информация все равно интересная и полезная, особенно пригодится при написании контрольной по теории.

Харьютусы (Гордон)

На харьютусах подробно разжевывается решение всех задач. Если на них не ходить, то велика вероятность, что вы вообще не поймете, о чем идет речь на контрольной. С другой стороны, все решения есть в задачнике, поэтому можно и самом разобраться.

В последний харьютус перед контрольной г-ин Гордон сообщает, какие типы задач будут на контрольной.

Поскольку харьютусов 8 (после которых идут лабораторные), а лекций 16, материал на лекциях значительно отстает от того, что вы будете делать на харьютусах.

Некоторый материал с практик:
File:systeooria_material1.pdf
File:systeooria_material2.pdf

Пример контрольных работ:
File:systeooria_kt_1.jpg
File:systeooria_kt_2.jpg
File:systeooria_kt_3.jpg

Лабораторные

Лабораторные заключаются в решение различных задач в MATLAB. По сути теперь вы узнаете, что всё, что вы делали вручную на бумаги, можно за несколько секунд сделать в MATLAB… Огромный минус в том, что MATLAB вы вряд ли легко сможете поставить себе на компьютер. Другие альтернативы описаны ниже.

Примеры лабораторных работ:
File:lab_1.pdf
File:lab_2.pdf
File:lab_3.pdf

Экзамен

На экзамен идут только те, кто не смог получить общую оценку выше 1 (что на самом деле довольно сложно). Все правила допуска к экзамену довольно подробно описаны на страничке у г-на Гордона.

Примеры экзамена:
File:systeooriaexample1.jpg
File:systeooriaexample2.jpg
File:systeooriaexample3.jpg

Свободное программное обеспечение (Лабораторные)

Есть несколько программ, о которых вам будет полезно знать:

sage

Установка

Скачать можно с официального сайта. Если для вашей платформы есть бинарник, то всё чудесно - качаете и используетсе. Для Debian почему-то его нет, придется компилировать… Нет ничего страшного, весь процесс автоматизирован, но занимает несколько часов, поэтому оставляйте его на ночь. На моем средненьком лаптопе весь процесс длился около 8 часов.

Занятие 0

Отличия от MATLAB

MATLAB sage
help commandhelp(command)
%# коментарии, как и все остальное, как в python
v = [1 2 3 4 3 2 1]v = vector([1, 2, 3, 4, 3, 2, 1]) Если без vector(), тогда это список, а не вектор
v + 3v + vector([3] * len(v))
A = [9 2 3; -1 3 4; 0 2 1]A = matrix([[9, 2, 3], [-1, 3, 4], [0, 2, 1]])
A = [9 2 3; -1 3 4; 0 2 1]A = matrix(3, [9, 2, 3, -1, 3, 4, 0, 2, 1])
At = A’At = A.transpose()
A(1,1)A[0,0] - нумерация с нуля
A(3,3) = 4A[2,2] = 4
row1 = 2:5row1 = range(2, 6) - второе число не включается. Осторожнее с типом
row2 = 6:-0.5:3.5[x * -0.5 + 6 for x in range(6)]
row2 = 6:-0.5:3.5from numpy import arange; arange(6,3.5,0.5) # так себе вариант
A(2:3,1:2)A[1:3,0:2] # да, именно с такими индексами
inv(A)A.inverse()
diag(A)A.diagonal()
eig(A)A.eigenvalues()
p1 = poly(A)p1 = A.charpoly()
roots(p1)p1.complex_roots()
p2 = [1 -2 0 5]p2 = x^3 -2*x^2 + 5 только перед этим нужно задать x вот так: R.<x> = QQ[]
conv(p1,p2)p1*p2

Поскольку практически всё является объектом, можете смело ставить точку и нажимать TAB для автодополнения. Стоит отметить, что это довольно полезная фича, так как помнить названия всех функций нереально. Но, к сожалению, в Scilab большая часть функций живет сама по себе, такой метод не сработает, а жаль.

Занятие 1

На этом нужная нам функциональность sage исчерпана, на следующих занятиях придется использовать что-то другое :)

python-control

В целом работает сам по себе, но для некоторых действий (таких как tf) вам понадобится slicot. Я слабо понимаю, что творится в голове автором slicot. С одной стороны, его исходный код открыт, с другой стороны, разработчик хочет деньги в том случае, если вы используете slicot в коммерческих целях. При этом версия 4.5 выложена под лицензией GPL, что дает возможность распространять программу в любых целях, не платя автору ни цента. И тут вроде бы все логично, но в debian репозитории последняя версия - 5.0.

Ладно, не суть.

Устанавливаем slicot:

sh: 1: pygmentize: not found

sudo apt-get install libslicot0 libslicot-dev libslicot-doc

Устанавливаем slycot:

sh: 1: pygmentize: not found

sudo apt-get build-dep python-scipy # для этого в /etc/apt/sources.list должен быть соответствующий deb-src репозиторий
sudo python setup.py install

Вроде бы все, теперь python-control должен быть полнофункциональным.

Запускаем:

sh: 1: pygmentize: not found

ipython -pylab

Внутри

sh: 1: pygmentize: not found

from control.matlab import *

Если все прошло без ошибок, то можно начинать рассматривать занятия :)

Занятие 0

Нет информации…

Занятие 1

Матрицы для систем можно вписывать так:

sh: 1: pygmentize: not found

sys = ss('-1 2;0 -4', '1;2', '1 0;0 1', '0;0')
# или
sys = ss([[-1, 2],[0, -4]], [[1],[2]], [[1, 0],[0, 1]], [[0],[0]])

Отличия от MATLAB

MATLAB python-control
rank(m)matrix_rank(m), не путать с rank(m)
ss(A, B, C, D)ss(A, B, C, D)
rss(n, m, r)нет, в любом случае чаще всего матрицы нам известны
ctrb(sys)ctrb(sys.A, sys.B)
obsv(sys)obsv(sys.A, sys.C)
eig(sys)eig(sys.A)
tf(sys)tf(sys), а также может пригодиться tfdata(sys)
ltiview(sys)Строить графики можно, но не так просто…
dcgain(sys)dcgain(sys)
sys.inputs - довольно удобно, можно узнать кол-во входов не глядя на матрицы
sys.outputs
sys.states

Занятие 2

Поскольку подобия simulink в python-control конечно же нет, на следующих занятиях придется использовать Scilab.

Scilab

Большая часть функций совпадает в той или иной мере с MATLAB, что на самом деле обидно, все-таки лучше бы они в чем-то брали пример с Sage.

Установка

sh: 1: pygmentize: not found

apt-get install scilab # что может быть проще? :)

Занятие 0

Если что-то здесь не указано, значит оно полностью совпадает с синтаксисом MATLAB (ну или я просто забыл что-то написать).
Все следующие команды перечислены относительно PDF файлов занятий, выложенных здесь.

MATLAB scilab
eig(A)spec(A)
poly(A)poly(A, ‘x’)
p2 = [1 -2 0 5]p2 = poly([5 0 -2 1], ‘x’, ‘c’) - коэффициенты в обратную сторону. Если не указать третим параметром ‘c’, тогда первый массив является списком корней
conv(p1, p2)p1*p2

Занятие 1

MATLAB scilab
ss(A, B, C, D)syslin(’c’,A,B,C[,D]) для непрерывных, syslin(’d’,A,B,C[,D]) для дискретных
rss(n, m, r)ssrand(m, r, n) - обратите внимание на порядок параметров
ctrb(sys)cont_mat(sys)
obsv(sys)obsv_mat(sys)
eig(sys)spec(sys.A)
tf(sys)ss2tf(sys)
dcgain(sys)?
ltiview(sys)? Смотри ниже

Построить графики можно примерно так:

sh: 1: pygmentize: not found

t=0:0.01:15
y1 = csim('stem', t, sys)
plot(t, y1)

Занятие 2

eye(4)eye(4,4)
eig(sys)spec(sys.A)
c2d(sys,0.1)cls2dls(sys,0.1)
placeppol
simulinkxcos

xcos

Код можно писать в Simulation/Set context, как использовать переменные из основного окна - я не понял.

Всё остальное так же, как и в MATLAB. Вот некоторые жлементы, которые могут вам пригодиться:

Сразу советую в Simulation/Setup выставить маленький Final integration time, например 30, так как нас будет интересовать лишь начало симуляции.

Занятие 3

Всё примерно то же самое, что и в занятии 2.

Comments:

К сведению, в “лабораторных” текстовых ответах довольно много бреда, так что очень не рекомендую бездумно сдувать его оттуда. Преподаватели не дураки и могут обидеться, что вы юзаете бред вместо разрешенных официальных материалов (лекций и т.п.).

– Anonymous 2016-05-17 09:09:35