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
Есть несколько программ, о которых вам будет полезно знать:
Скачать можно с официального сайта. Если для вашей платформы есть бинарник, то всё чудесно - качаете и используетсе. Для Debian почему-то его нет, придется компилировать… Нет ничего страшного, весь процесс автоматизирован, но занимает несколько часов, поэтому оставляйте его на ночь. На моем средненьком лаптопе весь процесс длился около 8 часов.
Отличия от MATLAB
MATLAB | sage |
---|---|
help command | help(command) |
% | # коментарии, как и все остальное, как в python |
v = [1 2 3 4 3 2 1] | v = vector([1, 2, 3, 4, 3, 2, 1]) Если без vector(), тогда это список, а не вектор |
v + 3 | v + 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) = 4 | A[2,2] = 4 |
row1 = 2:5 | row1 = range(2, 6) - второе число не включается. Осторожнее с типом |
row2 = 6:-0.5:3.5 | [x * -0.5 + 6 for x in range(6)] |
row2 = 6:-0.5:3.5 | from 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 большая часть функций живет сама по себе, такой метод не сработает, а жаль.
На этом нужная нам функциональность sage исчерпана, на следующих занятиях придется использовать что-то другое :)
В целом работает сам по себе, но для некоторых действий (таких как 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 *
Если все прошло без ошибок, то можно начинать рассматривать занятия :)
Нет информации…
Матрицы для систем можно вписывать так:
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 |
Поскольку подобия simulink в python-control конечно же нет, на следующих занятиях придется использовать Scilab.
Большая часть функций совпадает в той или иной мере с MATLAB, что на самом деле обидно, все-таки лучше бы они в чем-то брали пример с Sage.
sh: 1: pygmentize: not found
apt-get install scilab # что может быть проще? :)
Если что-то здесь не указано, значит оно полностью совпадает с синтаксисом 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 |
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)
eye(4) | eye(4,4) |
eig(sys) | spec(sys.A) |
c2d(sys,0.1) | cls2dls(sys,0.1) |
place | ppol |
simulink | xcos |
Код можно писать в Simulation/Set context, как использовать переменные из основного окна - я не понял.
Всё остальное так же, как и в MATLAB. Вот некоторые жлементы, которые могут вам пригодиться:
Сразу советую в Simulation/Setup выставить маленький Final integration time, например 30, так как нас будет интересовать лишь начало симуляции.
Всё примерно то же самое, что и в занятии 2.
К сведению, в “лабораторных” текстовых ответах довольно много бреда, так что очень не рекомендую бездумно сдувать его оттуда. Преподаватели не дураки и могут обидеться, что вы юзаете бред вместо разрешенных официальных материалов (лекций и т.п.).
– Anonymous 2016-05-17 09:09:35