
- •1 Графический интерфейс пользователя matlab
- •1.1 Структура окна Command Window
- •1.3 Интерфейс редактора m-файлов
- •2.5 Аппроксимация и интерполяция данных При аппроксимации и интерполяция данных в Matlab применяются следующие основные методы:
- •Коэффициент усиления в установившемся режиме
- •Переходная характеристика
- •Частотная характеристика
- •5.1 Пример выполнения задания в среде Matlab
- •5.2 Создание моделей в среде Simulink
- •Блок осциллографа Scope
2.5 Аппроксимация и интерполяция данных При аппроксимации и интерполяция данных в Matlab применяются следующие основные методы:
ICUBIC - кубическая интерполяция функции одной переменной;
SPLINE, PPVAL, MKPP, UNMKPP - интерполяция функции одной переменной кубическим сплайном;
INTERP1 - одномерная табличная интерполяция;
INTERP2 - двумерная табличная интерполяция;
GRIDDATA - двумерная табличная интерполяция на неравномерной сетке;
INTERPFT - аппроксимация периодической функции на основе быстрого преобразования Фурье.
Эти методы применимы для табличных данных и функций, в последнем случае таблица данных вычисляется.
2.5.1 Кубическая интерполяция функции одной переменной
Синтаксис:
yi = icubic(y, xi) yi = icubic(x, y, xi)
Описание:
Функция yi = icubic(y, xi) интерполирует значения функции y в точках xi внутри области определения функции, используя кубические полиномы. Если Y - двумерный массив, то интерполирующая кривая строится для каждого столбца. Если указано значение xi вне области определения функции, то результатом будет NaN.
Функция yi = icubic(x, y, xi) позволяет использовать более мелкую сетку xi при условии, что аргумент x изменяется монотонно и сетка равномерна.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию, используя мелкую сетку.
x = 0:10; y = sin(x); xi = 0:.25:10; yi = icubic(x, y, xi); plot(x, y, 'o', xi, yi, ‘g’), grid.
Результат кубической интерполяции представлен на рисунке 8
Рисунок 8 - Результат кубической интерполяции
2.5.2 Интерполяция функции одной переменной кубическим сплайном
Синтаксис:
yi = spline(x, y, xi)
pp = spline(x, y)
v = ppval(pp, xx)
[breaks, coefs, l, k] = unmkpp(pp)
pp = mkpp(breaks, coefs)
Описание:
Функция yi = spline(x, y, xi) интерполирует значения функции y в точках xi внутри области определения функции, используя кубические сплайны [1].
Функция pp = spline(x, y) возвращает pp-форму сплайна, используемую в М-файлах ppval, mkpp, unmkpp. Функция v = ppval(pp, xx) вычисляет значение кусочно-гладкого полинома pp для значений аргумента xx.
Функция [breaks, coefs, l, k] = unmkpp(pp) возвращает характеристики кусочно гладкого полинома pp: breaks - вектор разбиения аргумента; coefs - коэффициенты кубических сплайнов;
l = length(breaks) - 1; k = length(coefs)/l.
Функция pp = mkpp(breaks, coefs) формирует кусочно-гладкий полином pp по его характеристикам.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию кубическими сплайнами, используя мелкую сетку.
x = 0:10; y = sin(x); xi = 0:.25:10; yi = spline(x, y, xi); plot(x, y, 'o', xi, yi, ‘g’), grid
Результат интерполяции кубическим сплайном представлен на рисунке 9
Рисунок 9 - Результат интерполяции кубическим сплайном
2.5.3 Одномерная табличная интерполяция
Синтаксис:
yi = interp1(x, y, xi) yi = interp1(x, y, xi, ‘<метод>‘)
Описание:
Функция yi = interp1(x, y, xi) строит интерполирующую кривую для одномерного массива y, заданного на сетке x; выходной массив yi может быть определен на более мелкой сетке xi. Если Y - двумерный массив, то интерполирующая кривая строится для каждого столбца. По умолчанию реализована линейная интерполяция.
Функция yi = interp1(x, y, xi, ‘<метод>‘) позволяет задать метод интерполяции:
‘linear’ линейная
‘cubic’ кубическая
‘spline’ кубические сплайны
Принято, что аргумент x изменяется монотонно; кроме того, для кубической интерполяции предполагается, что сетка по x равномерна.
Пример:
Зададим синусоиду всего 10 точками и проведем интерполяцию, используя мелкую сетку.
x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x, y, xi); plot(x, y, 'o', xi, yi, ‘g’), hold on yi = interp1(x, y, xi, ‘spline’ ); plot(x, y, 'ob', xi, yi, ‘m’), grid, hold off
Результат одномерной табличной интерполяции представлен на рисунке 10
Рисунок 10 - Результат одномерной табличной интерполяции
2.5.4 Аппроксимация периодической функции на основе быстрого преобразования Фурье:
Синтаксис:
yp = interpft(y, n)
Описание:
Функция yp = interpft(y, n) возвращает одномерный массив чисел, который является периодической функцией, определенной в n точках и аппроксимирующей одномерный массив y. Если length(x) = m, а интервал дискретности dx, то интервал дискретности для y определяется по формуле dy = dx * m/n, причем n всегда превышает m.
Пример:
Рассмотрим аппроксимацию функции y = sin(x), которая задана 11 точками на интервале [0 10].
x = 0:10; y = sin(x); xp = 0:0.25:10; yp = interpft(y, 41); xt = 0:0.01:10; yt = sin(xt); plot(xt, yt, 'r'), hold on, plot(x, y, 'ob', xp, yp)
Результат аппроксимация периодической функции на основе быстрого преобразования Фурье представлен на рисунке 11
Рисунок 11 - Результат аппроксимация функции на основе преобразования Фурье
На графике построена точная функция y = sin(x) с указанием точек съема данных и ее аппроксимация в 41 точке. Как видно из графика, аппроксимация вне интервала [0 1.5] имеет нарастающую погрешность.
3 Решение типовых задач алгебры и анализа в символьной форме MATLAB
3.1 Обозначения символьных переменных
Под символьным объектом в системе MATLAB понимается переменная, предназначенная для символьных преобразований. Объявление такой переменной осуществляется функцией sym либо syms.
Функция syms позволяет объявлять сразу несколько символьных переменных, которые необходимо отделять друг от друга пробелами, например:
» syms x y z;
Функция sym используется при объявлении какой-либо одной переменной символьной, например:
x = sym('x'); y = sym('y'); z = sym('z');
объявление символьных переменных х, y, z.
4.2 Вычисление пределов — limit.
Вычисление пределов от символьных выражений производится с помощью встроенной функции limit. Соответствие между традиционным математическим описанием и символьным системы MATLAB приводится в таблице 1.
Таблица 1 – Вычисления пределов
Традиционное математическое действие |
Команда MATLAB |
|
|
|
|
|
|
|
|
Примечание: символ
бесконечность (
)
в MATLAB
записывается как inf.
Неопределенное значение в MATLAB
записывается как
NaN.
Пример: Вычислить
предел выражения
:
» syms x
» y1=sin(x)/x;
» limit(y1)
ans =
1 % Предел отношения равен единицы
4.3 Решение алгебраических уравнений и систем– solve
Для решения систем алгебраических уравнений и одиночных уравнений служит функция solve:
Синтаксис:
solve(expr1, expr2,..., exprN, var1, var2,..., varN)
Описание:
Функция solve возвращает значения переменных var1, при которых соблюдаются равенства, заданные выражениями expr1. Если в выражениях не используются знаки равенства, то полагается expr1=0.
Результат решения возможен в следующих формах:
- для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;
- при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде;
Функция solve позволяет найти не только вещественные, но и комплексные корни систем алгебраических уравнений и одиночных уравнений.
Пример решить уравнение:
x3-1=0 (7)
Решение:
>> syms x
>> y=x^3-1;
>> S=solve(y,x)
S =
[ 1]
[ -1/2+1/2*i*3^(1/2)]
[ -1/2-1/2*i*3^(1/2)]
Получили три корня x1, x2, x3, которые хранятся соответственно в элементах S(1), S(2), S(3) массива S.
4.4 Дифференцирование функций
Matlab позволяет производить точное дифференцирование в символьном виде, используя следующие функции:
diff(S) дифференцирует символьное выражение S по свободной переменной;
diff(S, ‘v’) дифференцирует символьное выражение S по v;
diff(S, n) и diff(S, ‘v’, n) дифференцирует n раз символьное выражение S;
diff без аргументов дифференцирует предшествующее выражение.
Пример:
Дифференцирование функций одной переменной — diff.
Найти производную
функции
по
переменной х:
» y6=sin(x+h);
» diff(y6)
ans =
cos(x+h)
4.5 Решение обыкновенных дифференциальных уравнений в символьном виде — dsolve.
Решатель дифференциальных уравнений может быть использован, если решение существует в аналитическом виде. Практически это означает, что решателем dsolve можно пользоваться только при поиске решения линейного дифференциального уравнения (или системы линейных уравнений).
Решить
дифференциальное уравнение
с
начальным условием
Построить
график решения в интервале [-0.5, 7].
% Создадим следующий сценарий под именем sdif1:
%Решение дифференциального уравнения в символьном виде
x1=dsolve('Dx=-0.5*x','x(0)=10')
ezplot(x1,[-0.5,7]), grid, title('Диф.уравнение')
% Область построения графика решения можно задавать без квадратных скобок
Решить
систему однородных дифференциальных
уравнений
с
начальными условиями
Построить
график решения в интервале [-0.5, 13].
% Создадим следующий сценарий под именем sdif2:
[x1,x2]=dsolve('Dx1=-.5*x2','Dx2=3*x1','x1(0)=0','x2(0)=1');
ezplot(x1,0,13), grid, hold on, ezplot(x2,[0,13]), title('Однородная система 2-х уравнений')
4.6 Интегрирование функции одной переменной — int.
Для вычисления интегралов в символьном виде используется функция int, имеющая следующий синтаксис: int (f), int (f, [u]), int (f, [u , a, b ]),
где f - символьная подынтегральная функция, необязательные переменные:
u - переменная интегрирования,
а - нижний предел интегрирования,
b - верхний предел интегрирования.
4.6.1 Вычисление неопределенного интеграла:
% Вычислить интеграл
:
» int(x^2)
ans =
1/3*x^3
4.6.2 Вычисление определенного интеграла.
% Вычислить
определенный интеграл
:
» y7=int(x^2*sin(x),1,2*pi)
» vpa(y7,5)
ans =
-39.702
5 Модели линейных динамических систем
5.1 Описание линейных динамических систем
Для описания линейных систем могут применяться несколько способов:
дифференциальные уравнения
модели в пространстве состояний
передаточные функции
модели вида «нули-полюса»
Первые два способа называются временныَми, поскольку описывают поведение системы во временной области и отражают внутренние связи между сигналами. Передаточные функции и модели вида «нули-полюса» относятся к частотным способам описания, так как непосредственно связаны с частотными характеристиками системы и отражают только входные и выходные свойства (то есть, описывают динамику не полностью).
Частотные методы позволяют применять для анализа и синтеза алгебраические методы, что часто упрощает расчеты. С другой стороны, для автоматических вычислений более пригодны методы, основанные на моделях в пространстве состояний, поскольку они используют вычислительно устойчивые алгоритмы линейной алгебры.
Исходные уравнения динамики объектов, которые строятся на основе законов физики, имеют вид нелинейных дифференциальных уравнений. Для приближенного анализа и синтеза обычно проводят их линеаризацию в окрестности установившегося режима и получают линейные дифференциальные уравнения.
Линейное уравнение
можно записать в операторной форме
или
(8)
где
– входной сигнал,
– сигнал выхода,
– оператор дифференцирования,
и
– операторные полиномы.
Передаточная
функция
линейной
стационарной системы от комплексной
переменной
определяется как отношение преобразования
Лапласа выхода к преобразованию Лапласа
входа при нулевых начальных условиях:
(9)
Передаточная функция звена, которое описывается приведенным выше уравнением, равна:
,
(10)
Передаточная
функция в среде Matlab
вводится
в виде отношения двух многочленов
(полиномов) от при замене комплексной
переменной
на
.
Полиномы хранятся как массивы
коэффициентов, записанных по убыванию
степеней. Например, передаточная функция
(11)
вводится следующим образом:
>> n = [2 4]
n =
2 4
>> d = [1 1.5 1.5 1]
d =
1.0000 1.5000 1.5000 1.0000
>> f = tf ( n, d )
Transfer function:
2 s + 4
-------------------------
s^3 + 1.5 s^2 + 1.5 s + 1
или сразу, без предварительного построения числителя и знаменателя:
>> f = tf ( [2 4], [1 1.5 1.5 1] );
В памяти создается объект класса tf, описывающий передаточную функцию. Точка с запятой в конце команды подавляет вывод на экран.
По передаточной функции можно легко построить модель в форме «нули-полюса»
>> f_zpk = zpk(f)
Zero/pole/gain:
2 (s+2)
-----------------------
(s+1) (s^2 + 0.5s + 1)
Нулями называются
корни числителя, полюсами – корни
знаменателя. Эта функция имеет один
нуль в точке
и три полюса в точках
и
.
Паре комплексных полюсов соответствует
квадратный трехчлен.
Модель в пространстве состояний связана с записью дифференциальных уравнений в стандартной форме Коши (в виде системы уравнений первого порядка):
(12)
Здесь
– вектор переменных состояния размера
,
–
вектор входных сигналов (вектор
управления) размера
и
– вектор выходных сигналов размера
.
Кроме того,
и
– постоянные матрицы. Согласно правилам
матричных вычислений, матрица
должна быть квадратной размера
,
матрица
имеет размер
,
матрица
–
и матрица
–
.
Для систем с одним входом и одним выходом
матрица
– скалярная величина.
Для преобразования передаточной функции в модель в пространстве состояний используется команда
>> f_ss = ss ( f )
a =
x1 x2 x3
x1 -1.5 -0.1875 -0.03125
x2 8 0 0
x3 0 4 0
b =
u1
x1 0.5
x2 0
x3 0
c =
x1 x2 x3
y1 0 0.5 0.25
d =
u1
y1 0
Это означает, что матрицы модели имеют вид
,
,
,
.
Модель в пространстве состояний можно построить не для всех передаточных функций, а только для правильных, у которых степень числителя не выше, чем степень знаменателя. Например, передаточная функция
(13)
– неправильная, она не может быть преобразована в модель в пространстве состояний.
Используют также понятие строго правильной функции, у которой степень числителя меньше, чем степень знаменателя. Если построить модель в пространстве состояний для такой функции, матрица будет равна нулю, то есть, прямая передача с входа на выход отсутствует (при скачкообразном изменении входа сигнал на выходе будет непрерывным).