Система математических расчетов MATLAB

Общие свойства и возможности рабочего стола. Получение справок (Getting Help). Рабочее пространство системы MATLAB. Просмотр и редактирование массивов данных при помощи редактора Array Editor. Пути доступа системы. Операции с файлами.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 28.05.2007
Размер файла 1021,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

y2 = polyval(p, x2);

plot(x, y, 'o', x2, y2); grid on

где функция grid on служит для нанесения координатной сетки, а экспериментальные дан-ные на графике отмечены маркерами о.

.

Как видно из рисунка, полином третьего порядка достаточно хорошо аппроксимирует наши данные.

Разложение на простые дроби

Функция residue вычисляет вычеты, полюса и многочлен целой части отношения двух поли-номов. Это особенно полезно при представлении систем управления в виде передаточных функций. Для полиномов a(s) и b(s), при отсутствии кратных корней имеем

где r есть вектор-столбец вычетов, p есть вектор-столбец полюсов, а k есть вектор-строка це-лой части дробно-рациональной функции. Рассмотрим передаточную функцию

Для полиномов числителя и знаменателя этой функции имеем:

b = [-4 8]; a = [1 6 8].

Введя

[r, p, k] = residue(b, a)

получим

r =

-12

8

p =

-4

-2

k =

[ ]

Функция residue с тремя входными (r, p, и k) и двумя выходными (b2, a2) аргументами вы-полняет обратную функцию свертки имеющегося разложения на простые дроби, в дробно-рациональную функцию отношения двух полиномов.

[b2, a2] = residue(r, p, k)

b2 =

-4 8

a2 =

1 6 8

т.е. из данных предыдущего примера мы восстановили исходную передаточную функцию.

В случае кратных корней процедура несколько усложняется, но остается разрешимой.

Интерполяция

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

Обзор функций интерполяции

Функции

Описание

griddata

Двумерная интерполяция на неравномерной сетке.

griddata3

Трехмерная интерполяция на неравномерной сетке.

griddatan

Многомерная интерполяция (n >= 3).

interp1

Одномерная табличная интерполяция.

interp2

Двухмерная табличная интерполяция.

interp3

Трехмерная табличная интерполяция.

interpft

Одномерная интерполяция с использованием быстрого преобразования Фурье.

interpn

Многомерная табличная интерполяция.

pchip

Кубическая интерполяция при помощи полинома Эрмита.

spline

Интерполяция кубическим сплайном.

Одномерная интерполяция

Двумя основными типами одномерной интерполяции в MATLAB-е являются полиномиаль-ная интерполяция и интерполяция на основе быстрого преобразования Фурье.

1. Полиномиальная интерполяция

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

yi = interp1(x, y, xi, method)

где y есть вектор, содержащий значения функции; x - вектор такой же длины, содержащий те точки (значения аргумента), в которых заданы значения y; вектор xi содержит те точки, в ко-торых мы хотим найти значения вектора y путем интерполяции; method - дополнительная строка, задающая метод интерполяции. Имеются следующие возможности для выбора мето-да:

* Ступенчатая интерполяция (method = 'nearest'). Этот метод приравнивает значение функ-ции в интерполируемой точке к ее значению в ближайшей существующей точке имеющихся данных.

* Линейная интерполяция (method = 'linear'). Этот метод аппроксимирует функцию между любыми двумя существующими соседними значениями как линейную функцию, и возвр-ащает соответствующее значение для точки в xi (метод используется по умолчанию).

* Интерполяция кубическими сплайнами (method = 'spline'). Этот метод аппроксимирует ин-терполируемую функцию между любыми двумя соседними значениями при помощи куби-ческих функций, и использует сплайны для осуществления интерполяции.

* Кубическая интерполяция (method = 'pchip' или 'cubic'). Эти методы идентичны. Они ис-пользуют кусочную кубическую Эрмитову аппроксимацию и сохраняют монотонность и форму данных.

Если какой-либо из элементов вектора xi находится вне интервала, заданного вектором x, то выбранный метод интерполяции используется также и для экстраполяции. Как альтернатива,

функция yi = interp1(x, y, xi, method, extrapval) заменяет экстраполированные значения теми, которые заданы вектором extrapval. Для последнего часто используется нечисловое значение NaN.

Все методы работают на неравномерной сетке значений вектора x .

Рассмотрение скорости, требуемой памяти и гладкости методов. При выборе метода ин-терполяции всегда нужно помнить, что некоторые из них требуют большего объема памяти или выполняются быстрее, чем другие. Однако, вам может потребоваться использование лю-бого из этих методов, чтобы достичь нужной степени точности интерполяции (гладкости результатов). При этом нужно исходить из следующих критериев.

* Метод ступенчатой аппроксимации является самым быстрым, однако он дает наихудшие результаты с точки зрения гладкости.

* Линейная интерполяция использует больше памяти чем ступенчатая и требует несколько большего времени исполнения. В отличие от ступенчатой аппроксимации, результирующая функция является непрерывной, но ее наклон меняется в значениях исходной сетки (исход-ных данных).

* Кубическая интерполяция сплайнами требует наибольшего времени исполнения, хотя тре-бует меньших объемов памяти чем кубическая интерполяция. Она дает самый гладкий ре-зультат из всех других методов, однако вы можете получить неожиданные результаты, если входные данные распределены неравномерно и некоторые точки слишком близки.

* Кубическая интерполяция требует большей памяти и времени исполнения чем ступенчатая или линейная. Однако в данном случае как интерполируемые данные, так и их производные являются непрерывными.

Относительные качественные характеристики всех перечисленных методов сохраняются и в случае двух- или многомерной интерполяции.

2. Интерполяция на основе быстрого преобразования Фурье _

Функция interpft осуществляет одномерную интерполяцию с использованием быстрого пре-образование Фурье (FFT). Этот метод вычисляет преобразование Фурье от вектора, который содержит значения периодической функции. Затем вычисляется обратное преобразование Фурье с использованием большего числа точек. Функция записывается в форме

y = interpft(x, n)

где x есть вектор, содержащий дискретные значения периодической функции, заданной на равномерной сетке, а n - число равномерно распределенных точек, в которых нужно оценить значения интерполируемой функции.

Двумерная интерполяция

Функция interp2 осуществляет двумерную интерполяцию - важную операцию при обработке изображений и графического представления данных. В наиболее общей форме эта команда имеет вид

ZI = interp2(X, Y, Z, XI, YI, method)

где Z есть прямоугольный массив, содержащий значения двумерной функции; X и Y являют-ся массивами одинаковых размеров, содержащие точки в которых заданы значения двумер-ной функции; XI и YI есть матрицы, содержащие точки интерполяции (то есть промежуточ-ные точки, в которых нужно вычислить значения функции); method - строка, определяющая метод интерполяции. В случае двумерной интерполяции возможны три различных метода:

* Ступенчатая интерполяция (method = 'nearest'). Этот метод дает кусочно-постоянную поверхность на области значений. Значение функции в интерполируемой точке равно значе-нию функции в ближайшей заданной точке.

* Билинейная интерполяция (method = 'linear'). Метод обеспечивает аппроксимацию данных при помощи билинейной поверхности (плоскости) на множестве заданных значений двумер-ной функции. Значение в точке интерполяции является комбинацией значений четырех бли-жайших точек. Данный метод можно считать «кусочно-билинейным»; он быстрее и требует меньше памяти, чем бикубическая интерполяция.

* Бикубическая интерполяция (method = 'cubic'). Данный метод аппроксимирует поверх-ность при помощи бикубических поверхностей. Значение в точке интерполяции является комбинацией значений в шестнадцати ближайших точках. Метод обеспечивает значительно более гладкую поверхность по сравнению с билинейной интерполяцией. Это может быть ключевым преимуществом в приложениях типа обработки изображений. Особенно эффек-тивным данный метод является в ситуациях, когда требуется непрерывность как интерполи-руемых данных, так и их производных.

Все эти методы требуют, чтобы X и Y были монотонными, то есть или всегда возрастающи-ми или всегда убывающими от точки к точке. Эти матрицы следует сформировать с исполь-зованием функции meshgrid, или же, в противном случае, нужно убедиться, что «схема» то-чек имитирует сетку, полученную функцией meshgrid. Перед интерполяцией, каждый из указанных методов автоматически отображает входные данные в равномерно распреде-ленную сетку. Если X и Y уже распределены равномерно, вы можете ускорить вычисления добавляя звездочку к строке метода, например, '*cubic'.

Сравнение методов интерполяции

Приведенный ниже пример сравнивает методы двумерной интерполяции в случае матрицы данных размера 7х7.

1. Сформируем функцию peaks на «грубой» сетке (с единичным шагом).

[x, y] = meshgrid(-3 : 1 : 3);

z = peaks(x,y);

surf(x,y,z)

где функция meshgrid(-3:1:3) задает сетку на плоскости x и y в виде двумерных массивов размера 7х7; функция peaks(x,y) является двумерной функцией, используемой в MATLAB-е в качестве стандартных примеров, а surf(x,y,z) строит окрашенную параметрическую повер-хность. Соответствующий график показан ниже.

2. Создадим теперь более мелкую сетку для интерполяции (с шагом 0.25).

[xi,yi] = meshgrid(-3:0.25:3);

3. Осуществим интерполяция перечисленными выше методами.

zi1 = interp2(x,y,z,xi,yi,'nearest');

zi2 = interp2(x,y,z,xi,yi,'bilinear');

zi3 = interp2(x,y,z,xi,yi,'bicubic');

Сравним графики поверхностей для различных методов интерполяции.

surf(xi,yi,zi1) surf(xi,yi,zi2) surf(xi,yi,zi3)

Метод `nearest' Метод `bilinear' Метод `bicubic'

Интересно также сравнить линии уровней данных поверхностей, построенных при помощи специальной функции contour.

contour(xi,yi,zi1) contour(xi,yi,zi2) contour(xi,yi,zi3)

Метод `nearest' Метод `bilinear' Метод `bicubic'

Отметим, что бикубический метод производит обычно более гладкие контуры. Это, однако, не всегда является основной заботой. Для некоторых приложений, таких, например, как об-работка изображений в медицине, метод типа ступенчатой интерполяции может быть более предпочтительным, так как он не «производит» никаких «новых» результатов наблюдений.

Анализ данных и статистика
В данном разделе будут рассмотрены некоторые основные возможности системы MATLAB в области анализа данных и статистической обработки информации. Помимо базовых функ-ций, в системе MATLAB имеется также ряд специализированных пакетов, предназначенных для решения соответствующих задач в различных приложениях (на английском языке даны названия пакетов) :
· Optimization - Нелинейные методы обработки данных и оптимизация.
· Signal Processing - Обработка сигналов, фильтрация и частотный анализ.
· Spline - Аппроксимация сплайнами.
· Statistics - Углубленный статистический анализ, нелинейная аппроксимация и
регрессия.
· Wavelet - Импульсная декомпозиция сигналов и изображений.
Внимание ! MATLAB выполняет обработку данных, записанных в виде двумерных массивов по столбцам ! Одномерные статистические данные обычно хранятся в отдельных векорах, причем n-мерные векторы могут иметь размерность 1х n или nх1. Для многомерных данных матрица является естественным представлением, но здесь имеются две возможности для ориентации данных. По принятому в системе MATLAB соглашению, различные пере-менные должны образовывать столбцы, а соответствующие наблюдения - строки. Поэтому, например, набор данных, состоящий из 24 выборок 3 переменных записывается в виде мат-рицы размера 24х3.
Основные функции обработки данных
Перечень функций обработки данных, расположенных в директории MATLAB-а datafun приведен в Приложении 8 .
Рассмотрим гипотетический числовой пример, который основан на ежечасном подсчете чис-ла машин, проходящих через три различные пункта в течении 24 часов. Допустим, результа-ты наблюдений дают следующую матрицу count
count =
11 11 9
7 13 11
14 17 20
11 13 9
43 51 69
38 46 76
61 132 186
75 135 180
38 88 115
28 36 55
12 12 14
18 27 30
18 19 29
17 15 18
19 36 48
32 47 10
42 65 92
57 66 151
44 55 90
114 145 257
35 58 68
11 12 15
13 9 15
10 9 7
Таким образом, мы имеем 24 наблюдения трех переменных. Создадим вектор времени, t, со-стоящий из целых чисел от 1 до 24: t = 1 : 24. Построим теперь зависимости столбцов матри-цы counts от времени и надпишем график:
plot(t, count)
legend('Location 1','Location 2','Location 3',0)
xlabel('Time')
ylabel('Vehicle Count')
grid on
где функция plot(t, count) строит зависимости трех векторов-столбцов от времени; функция
legend('Location 1','Location 2','Location 3',0) показывает тип кривых; функции xlabel и ylabel надписывают координатные оси, а grid on выводит координатную сетку. Соответству-ющий график показан ниже.
Применим к матрице count функции max (максимальное значение), mean (среднее значение) и std (стандартное, или среднеквадратическое отклонение).
mx = max(count)
mu = mean(count)
sigma = std(count)
В результате получим

mx =

114 145 257

mu =

32.00 46.5417 65.5833

sigma =

25.3703 41.4057 68.0281

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

[mx,indx] = min(count)

mx =

7 9 7

indx =

2 23 24

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

Вы можете вычесть среднее значение из каждого столбца данных, используя внешнее произ-ведение вектора, составленного из единиц и вектора mu (вектора средних значений)

e = ones(24, 1)

x = count - e*mu

Перегруппировка данных может помочь вам в оценке всего набора данных. Так, использование в системе MATLAB в качестве единственного индекса матрицы двоеточия, приводит к представлению этой матрицы как одного длинного вектора, составленного из ее столбцов. Поэтому, для нахождения минимального значения всего множества данных можно ввести

min(count(:))

что приводит к результату

ans =

7

Запись count(:) в данном случае привела к перегруппировке матрицы размера 24х3 в вектор-столбец размера 72х1.

Матрица ковариаций и коэффициенты корреляции

Для статистической обработки в MATLAB-е имеются две основные функции для вычисле-ния ковариации и коэффициентов корреляции:

· cov - В случае вектора данных эта функция выдает дисперсию, то есть меру распреде-

ления (отклонения) наблюдаемой переменной от ее среднего значения. В случае

матриц это также мера линейной зависимости между отдельными переменными,

определяемая недиагональными элементами.

· corrcoef - Коэффициенты корреляции - нормализованная мера линейной вероятност-ной зависимости между перменными.

Применим функцию cov к первому столбцу матрицы count

cov(count(:,1))

Результатом будет дисперсия числа машин на первом пункте наблюдения

ans =

643.6522

Для массива данных, функция cov вычисляет матрицу ковариаций. Дисперсии столбцов мас-сива данных при этом расположены на главной диагонали матрицы ковариаций. Остальные элементы матрицы характеризуют ковариацию между столбцами исходного массива. Для матрицы размера mхn, матрица ковариаций имеет размер n-by-n и является симметричной, то есть совпадает с транспонированной.

Функция corrcoef вычисляет матрицу коэффициентов корреляции для массива данных, где каждая строка есть наблюдение, а каждый столбец - переменная. Коэффициент корреляции - это нормализованная мера линейной зависимости между двумя переменными. Для некор-релированных (линейно-независимых) данных коэффициент корреляции равен нулю; экива-лентные данные имеют единичный коэффициент корреляции. Для матрицы mхn, соответст-вующая матрица коэффициентов корреляции имеет размер nхn. Расположение элементов в матрице коэффициентов корреляции аналогично расположению элементов в рассмотренной выше матрице ковариаций. Для нашего примера подсчета количества машин, при вводе

corrcoef(count)

получим

ans =

1.0000 0.9331 0.9599

0.9331 1.0000 0.9553

0.9599 0.9553 1.0000

Очевидно, здесь имеется сильная линейная корреляция между наблюдениями числа машин в трех различных точках, так как результаты довольно близки к единице.

Конечные разности

MATLAB предоставляет три функции для вычисления конечных разностей.

Функция

Описание

diff

Разность между двумя последовательными элементами вектора. Приближенное дифференцирование.

gradient

Приближенное вычисление градиента функции.

del2

Пятиточечная аппроксимация Лапласиана.

Функция diff вычисляет разность между последовательными элементами числового вектора, то есть diff(X) есть [X(2) -X(1) X(3) -X(2) ... X(n) -X(n-1)]. Так, для вектора A,

A = [9 -2 3 0 1 5 4];

diff(A)

MATLAB возвращает

ans =

-11 5 -3 1 4 -1

Помимо вычисления первой разности, функция diff является полезной для определения опре-деленных характеристик вектора. Например, вы можете использовать diff для определения, является ли вектор монотонным (значения элементов или всегда возрастают или убывают), или имеет ли он равные приращения и т.д. Следующая таблица описывает несколько различ-ных путей использования функции diff с одномерным вектором x.

Применение (тест)

Описание

diff(x) == 0

Тест на определение повторяющихся элементов

all(diff(x) > 0)

Тест на монотонность

all(diff(diff(x)) == 0)

Тест на опредедление равных приращений

Обработка данных

В данном разделе рассматривается как поступать с:

· Отсутствующими значениями

· Выбросами значений или несовместимыми («неуместными») значениями

Отсутствующие значения

Специальное обозначение NaN, соответствует в MATLAB-е нечисловое значение. В соответ-ствие с принятыми соглашениями NaN является результатом неопределенных выражений та-ких как 0/0. Надлежащее обращение с отсутствующими данными является сложной пробле-мой и зачастую меняется в различных ситуациях. Для целей анализа данных, часто удобно использовать NaN для представления отсутствующих значений или данных которые недос-тупны. MATLAB обращается со значениями NaN единообразным и строгим образом. Эти значения сохраняются в процессе вычислений вплоть до конечных результатов. Любое мате-матическое действие, производимое над значением NaN, в результате также производит NaN. Например, рассмотрим матрицу, содержащую волшебный квадрат размера 3х3, где це-нтральный элемент установлен равным NaN.

a = magic(3); a(2,2) = NaN;

a =

8 1 6

3 NaN 7

4 9 2

Вычислим сумму элементов всех столбцов матрицы:

sum(a)

ans =

15 NaN 15

Любые математические действия над NaN распространяют NaN вплоть до конечного резуль-тата. Перед проведением любых статистических вычислений вам следует удалить все NaN-ы из имеющихся данных. Вот некоторые возможные пути выполнения данной операции.

Программа

Описание

i = find( ~ isnan(x));

x = x(i)

Найти индексы всех эементов вектора, не равных

NaN, и затем сохранить только эти элементы

x = x (find( ~ isnan(x)))

Удалить все NaN-ы из вектора

x = x ( ~ isnan(x));

Удалить все NaN-ы из вектора (быстрее).

x (isnan(x)) = [ ];

Удалить все NaN-ы из вектора

X (any(isnan(X')), :) = [ ];

Удалить все строки матрицы X содержащие NaN-ы

Внимание. Для нахождения нечисловых значений NaN вам следует использовать специаль-ную функцию isnan, поскольку при принятом в MATLAB-е соглашении, логическое сравне-ние NaN == NaN всегда выдает 0. Вы не можете использовать запись x(x==NaN) = [ ] для удаления NaN-ов из ваших данных.

Если вам часто приходится удалять NaN-ы, воспользуйтесь короткой программой, записан-ной в виде М-файла.

function X = excise(X)

X(any(isnan(X')),:) = [ ];

Тогда. напечатав

X = excise(X);

вы выполните требуемое действие (excise по английски означает вырезать)

Удаление выбросов значений

Вы можете удалить выбросы значений или несовместимые данные при помощи процедур, весьма схожих с удалением NaN-ов. Для нашей транспортной задачи, с матрицей данных count, средние значения и стандартные (среднеквадратические) отклонения каждого столбца матрицы count равны

mu = mean(count)

sigma = std(count)

mu =

32.0000 46.5417 65.5833

sigma =

25.3703 41.4057 68.0281

Число строк с выбросами значений, превышающими утроенное среднеквадратическое откло-нение от среднего значения можно получить следующим образом:

[n, p] = size(count)

outliers = abs(count - mu(ones(n, 1),:)) > 3*sigma(ones(n, 1),:);

nout = sum(outliers)

nout =

1 0 0

Имеется только один выброс в первом столбце. Удалим все наблюдение при помощи выра-жения

count(any(outliers'),:) = [ ];

Регрессия и подгонка кривых

Часто бывает полезным или необходимым найти функцию, которая описывает взаимосвязь между некоторыми наблюдаемыми (или найденными экспериментально) переменными. Оп-ределение коэффициентов такой функции ведет к решению задачи переопределенной систе-мы линейных уравнений, то есть системы, у которой число уравнений превышает число не-известных. Указанные коэффициенты можно легко найти с использованием оператора обрат-ного деления \ (backslash). Допустим, вы производили измерения переменной y при разных значениях времени t.

t = [0 0.3 0.8 1.1 1.6 2.3]';

y = [0.5 0.82 1.14 1.25 1.35 1.40]';

plot(t,y,'o'); grid on

В следующих разделах мы рассмотрим три способа моделирования (аппроксимации) этих данных:

· Методом полиномиальной регрессии

· Методом линейно-параметрической (linear-in-the-parameters) регрессии

· Методом множественной регрессии

Полиномиальная регрессия

Основываясь на виде графика, можно допустить, что данные могут быть аппроксимированы полиномиальной функцией второго порядка:

y = a0 + a1t + a2t2

Неизвестные коэффициенты a0 , a1 и a2 могут быть найдены методом среднеквадратичес-кой подгонки (аппроксимации), которая основана на минимизации суммы квадратов отклоне-ний данных от модели. Мы имеем шесть уравнений относительно трех неизвестных,

представляемых следующей матрицей 6х3:

X = [ones(size(t)) t t.^2]

X = 1.0000 0 0

1.0000 0.3000 0.0900

1.0000 0.8000 0.6400

1.0000 1.1000 1.2100

1.0000 1.6000 2.5600

1.0000 2.3000 5.2900

Решение находится при помощи оператора \ :

a = X\y

a =

0.5318

0.9191

- 0.2387

Следовательно, полиномиальная модель второго порядка наших данных будет иметь вид

y = 0.5318 + 0.9191t - 0.2387 t2

Оценим теперь значения модели на равноотстоящих точках (с шагом 0.1) и нанесем кривую на график с исходными данными.

T = (0 : 0.1 : 2.5)';

Y = [ones(size(T)) T T.^2]*a;

plot(T,Y,'-',t,y,'o'); grid on

Очевидно, полиномиальная аппроксимация оказалась не столь удачной. Здесь можно или по-высить порядок аппроксимирующего полинома, или попытаться найти какую-либо другую функциональную зависимость для получения лучшей подгонки.

Линейно-параметрическая регрессия Данная терминология не совсем соответствует принятой в русско-язычных изданиях.

Вместо полиномиальной функции, можно было-бы попробовать так называемую линейно-параметрическую функцию. В данном случае, рассмотрим экспоненциальную функцию

y = a0 + a1?-t + a2t?-t

Здесь также, неизвестные коэффициенты a0 , a1 и a2 могут быть найдены методом наимень-ших квадратов. Составим и решим систему совместных уравнений, сформировав регресси-онную матрицу X, и применив для определения коэффициентов оператор \ :

X = [ones(size(t)) exp(- t) t.*exp(- t)];

a = X\y

a =

1.3974

- 0.8988

0.4097

Значит, наша модель данных имеет вид

y = 1.3974 - 0.8988?-t + 0.4097t?-t

Оценим теперь, как и раньше, значения модели на равноотстоящих точках (с шагом 0.1) и на-несем эту кривую на график с исходными данными.

Как видно из данного графика, подгонка здесь намного лучше чем в случае полиномиальной функции второго порядка.

Множественная регрессия

Рассмотренные выше методы аппроксимации данных можно распространить и на случай бо-лее чем одной независимой переменной, за счет перехода к расширенной форме записи. До-пустим, мы измерили величину y для некоторых значений двух параметров x1 и x2 и полу-чили следующие результаты

x1 = [0.2 0.5 0.6 0.8 1.0 1.1]' ;

x2 = [0.1 0.3 0.4 0.9 1.1 1.4]' ;

y = [0.17 0.26 0.28 0.23 0.27 0.24]' ;

Множественную модель данных будем искать в виде

y = a0 + a1x1 + a2x2

Методы множественной регрессии решают задачу определения неизвестных коэффициентов a0 , a1 и a2 путем минимизации среднеквадратической ошибки приближения. Составим сов-местную систему уравнений, сформировав матрицу регрессии X и решив уравнения отно-сительно неизвестных коэффициентов, применяя оператор \ .

X = [ones(size(x1)) x1 x2];

a = X\y

a =

0.1018

0.4844

-0.2847

Следовательно, модель дающая минимальную среднеквадратическую ошибку аппроксима-ции имеет вид

y = 0.1018 + 0.4844x1 - 0.2847x2

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

Y = X*a;

MaxErr = max(abs(Y - y))

MaxErr =

0.0038

Эта ошибка дает основание утверждать, что наша модель достаточно адекватно отражает ре-зультаты наблюдений.

Графический интерфейс подгонки кривых

MATLAB дает возможность осуществлять аппроксимацию данных наблюдений при помощи специального графического Интерфейса Подгонки Кривых (ИПК) (в английском оригинале - Basic Fitting interface). Используя данный интерфейс, вы можете легко и быстро решить множество задач подгонки кривых, получая при этом самую разнообразную информацию о результатах вашей подгонки. ИПК предоставляет следующие возможности:

· Аппроксимирует данные используя сплайновый интерполянт, эрмитовый интерпо-лянт, или же полиномиальный интерполянт до 10 порядка включительно.

· Осуществляет множество графических построений для заданных наборов данных.

· Строит графики невязок (ошибок подгонки).

· Анализирует численные результаты подгонки.

· Осуществляет интерполяцию или экстраполяцию данных подгонки.

· Аннотирует графики численными результатами подгонки и нормами ошибок аппроксимации.

· Запоминает результаты подгонки и вычислений в рабочет пространстве MATLAB-а.

Основываясь на ваших конкретных задачах и приложениях, вы можете использовать ИПК, возможности, предоставляемыми командным окном, или же комбинировать эти две возмож-ности. Отметим, что ИПК предназначен только для работы с одномерными и двумерными данными.

Рассмотрение основных свойств ИПК

Общий вид ИПК показан ниже.

Для его вызова в подобном виде, нужно выполнить следующие три шага:

1. Построить какой либо график данных.

2. Выбрать опцию Basic Fitting из меню Tools вашего графического окна.

3. Нажать дважды на кнопку More в нижней части ИПК. В результате откроется окно c тремя панелями (см. рисунок), а сама надпись заменится на Less.

Рассмотрим основные опции ИПК.

Select data (Выбор данных) - В данном окне расположен список всех переменных, построен-ных на активном графике, с которым связан ИПК (на графике может быть построено неско-лько кривых). Используйте данный список для выбора требуемого (текущего) набора дан-ных. Под текущим подразумевается тот набор данных, для которого вы хотите осуществить подгонку. За один раз вы можете осуществлять действия только с одним набором данных. С другой стороны, вы можете произвести различные подгонки для текущего набора данных за счет изменения названия этих данных. С этой целью можно воспользоваться так называемым Редактором Графиков (Plot Editor), который будет рассмотрен в дальнейшем.

Center and scale X data (Центрирование и масштабирование данных X) - Если данная опция выбрана, то данные центрируются (нуль переносится в среднее значение данных) и масшта-бируются к единичному стандартному отклонению (делятся на исходное стандартное откло-нение). Это может потребоваться для повышения точности последующих математических вычислений. Если подгонка приводит к результатам, которые могут быть неточными, соот-ветствующее предупреждение выводится на экран.

Plot fits (Подгонка кривых) - Эта панель позволяет визуально просмотреть результаты одной или более подгонок текущего набора данных.

· Check to display fits on figure (Отметьте методы для вывода на график) - Выберите методы подгонок, которые вы хотели бы использовать и вывести на график. Здесь имеются две основные возможности - выбор интерполянтов и выбор полиномов. Сплайновый интерполянт использует для аппроксимации сплайны, тогда как эрми-товый интерполянт использует специальную функцию pchip (Piecewise Cubic Hermite Interpolating Polynomial - Кусочно-кубический Эрмитовый Интерполяционный Поли-ном). Полиномиальная подгонка использует функцию polyfit. Вы можете одновре-менно выбрать любые методы подгонки для аппроксимации ваших данных. Если ваш набор данных содержит N точек, вам следует использовать для аппроксимации поли-номы с не более чем N коэффициентами. В противном случае, ИПК автоматически приравнивает избыточное число коэффициентов нулю, что приводит к недоопреде-ленности системы. Укажем, что при этом на дисплей выдается соответствующее сооб-щение.

· Show equations (Показать уравнения) - При выборе данной опции, уравнение подгон-ки выводится на ваш график.

· Significant digits (Значащие разряды) - Выберите число значащих разрядов для выво-да на дисплей.

· Plot residuals (Построить графики разностей (невязок)) - При выборе данной опции, на график выводятся разности подгонок. Под разностью подгонки понимается раз-ность между исходными данными и результатами подгонки для каждого значения ар-гумента исходных данных. Вы можете построить графики невязок как столбчатую ди-аграмму (bar plot), как график рассеяния (scatter plot), или же как линейный график. Построения можно осуществлять как в том же графическом окне, так и в отдельном. При использовании подграфиков (subplots) для построения графиков многомерных данных, графики разностей могут быть построены только в отдельном графическом окне.

· Show norm of residuals (Показать норму разностей) - При выборе опции, на график выводятся также значения норм разностей. Норма разности является мерой качества подгонки, где меньшее значение нормы соответствует лучшему качеству. Норма рас-считывается при помощи функции norm(V,2), где V есть вектор невязок.

Numerical results (Численные результаты) - Данная панель позволяет изучать численные характеристики каждой отдельной подгонки для текущего набора данных, без построения графиков.

· Fit (Метод подгонки) - Выберите метод подгонки. Соответствующие результаты бу-дут представлены в окне под меню выбора метода. Заметим, что выбор метода в дан-ной панели не оказывает воздействия на панель Plot fits. Поэтому, если вы хотите по-лучить графическое представление, следует выбрать соответствующую опцию в пане-ли Plot fits.

· Coefficients and norm of residuals (Коэффициенты и норма невязок) - В данном окне выводятся численные выражения для уравнения подгонки, выбранного в Fit. Отме-тим, что при первом открытии панели Numerical Results , в рассматриваемом окне выдаются результаты последней подгонки, выбранной вами в панели Plot fits.

· Save to workspace (Запомнить в рабочем пространстве) - Вызывает диалоговое окно, которое позволяет запомнить в рабочем пространстве результаты вашей подгонки.

Find Y = f(X) - Данная панель дает возможность произвести интерполяцию или экстраполя-цию текущей подгонки.

· Enter value(s) (Введите данные) - Введите любое выражение, совместимое с систе-мой MATLAB для оценки вашей текущей подгонки в промежуточных или выходя-щих за пределы заданных аргументов точек. Выражение будет вычислено после на-жатия кнопки Evaluate (Вычислить), а результаты в табличной форме будут выве-дены в соответствующее окно ниже. Метод текущей подгонки при этом указан в ме-ню Fit.

· Save to workspace (Запомнить в рабочем пространстве) - Вызывает диалоговое окно, которое позволяет запомнить в рабочем пространстве результаты вашей интерполя-ции.

· Plot results (Построить графики) - При выборе данной опции, результаты интерполя-выводятся в графической форме на график данных.

Уравнения в конечных разностях и фильтрация

MATLAB имеет спциальные функции для работы с уравнениями в конечных разностях и фи-льтрами. Эти функции работают главным образом с векторами. Векторы используются для хранения дискретных сигналов или последовательностей, а также для обработки сигналов и анализа данных. Для систем со многими входами, каждая строка матрицы соответствует од-ной временной точки выборки сигналов, где каждый вход описывается как один вектор-стол-бец.

Функция

y = filter(b, a, x)

обрабатывает данные в векторе x посредством фильтра, описываемого векторами a и b, вы-давая фильтрованные данные y. Функция filter может рассматриваться как эффективная реа-лизация уравнения в конечных разностях. Структура функции filter является обобщенной структурой фильтра, образованного при помощи линий задержки, который описывается приведенными ниже уравнениями в конечных разностях, где n есть индекс (номер) текущей выборки, na есть порядок полинома, описываемого вектором a , а nb есть порядок полино-ма,описываемого вектором b. Выход y(n) является линейной комбинацией текущего и пре-дыдущих входов, то есть x(n) x(n-1) ..., и предыдущих выходов y(n-1) y(n-2) ...

a(1) y(n) = b(1) x(n) + b(2) x(n-1) + … + b(nb) x(n-nb+1) -

- a(2) y(n-1) - … - a(na) y(n-na+1)

Допустим, например, что мы хотим сгладить данные нашей задачи по движению автомоби-лей при помощи усредняющего фильтра, который выдает среднее количество машин за каж-дые 4 часа. Данный процесс можно выразить при помощи следующего уравнения в конеч-ных разностях:

y(n) = (1/4) x(n) + (1/4) x(n-1) + (1/4) x(n-2) + (1/4) x(n-3)

Соответствующие векторы равны:

a = 1; b = [1/4 1/4 1/4 1/4];

Воспользуемся данными матрицы count из раздела Анализ данных и статистика. Для на-шего примера, обозначим первый столбец матрицы count через вектор x :

x = count(:, 1);

Усредненные за 4 часа данные могут быть легко вычислены при помощи приведенной выше функции y = filter(b, a, x). Сравним исходные и сглаженные данные, построив их на одном графике.

t = 1:length(x) ;

plot(t, x, '-.', t, y, '-'); grid on

legend('Original Data','Smoothed Data',2)

Исходные данные наблюдения представлены здесь штрих-пунктирной линией, а сглаженные за 4 часа данные - сплошной линией.

Для различных практических приложений, в специальном пакете Signal Processing Toolbox предусмотрены многочисленные функции для анализа сигналов и проектирования дискрет-ных фильтров.

Многомерные Массивы

Многомерные массивы в системе MATLAB являются распространением обычных двумерных матриц. Как известно, матрицы имеют две размерности - строки (row) и столбцы (column).

Вы можете выделить любой элемент двумерной матрицы при помощи двух индексов, где первый является индексом (номером) строки, а второй - индексом столбца. Многомерные массивы имеют дополнительную индексацию. Например, трехмерные массивы имеют три индекса:

· Первый индекс указывает размерность 1 , то есть строки.

· Второй индекс указывает размерность 2. то есть столбцы.

· Третий индекс указывает на размерность 3. В данном пособии используется концепция страницы (page) для представления размерности 3 и выше.

Для обращения, например, к элементу второй строки и третьего столбца на странице 2 нужно воспользоваться индексацией (2,3,2) (см. рисунок ниже).

Если вы добавляете размерности к массиву, вы также добавляете индексы. Четырехмерный массив, например, имеет 4 индекса. Первые два из них указывают на пару строка-столбец, а следующие два характеризуют третью и четвертую размерности.

Отметиим, что общие функции обращения с многомерными массивами находятся в директории datatypes.

Создание Многомерных Массивов

При создании многомерных массивов можно воспользоваться теми же приемами, которые используются для двумерных матриц.

Создание массивов с использованием индексации

Один из способов формирования многомерного массива состоит в создании двумерного массива и соответствующего его расширения. Например, начнем с простого двумерного массива А.

A = [5 7 8; 0 1 9; 4 3 6];

А является массивом 3х3, то есть его размерности строк и столбцов равны трем. Для добавления третьей размерности к А запишем

A(:,:,2) = [1 0 4; 3 5 6; 9 8 7].

MATLAB выдаст

A(:, : ,1) =

5 7 8

0 1 9

4 3 6

A(:, :, 2) =

1 0 4

3 5 6

9 8 7

Вы можете продолжить добавление строк, столбцов или страниц аналогичным образом.

Расширение Многомерных Массивов. Для расширения любой размерности массива А нужно:

· Увеличить или добавить соответствующий индекс и задать требуемые значения.

· Добавить такое же количество элементов к соответствующим размерностям массива. Так, для числовых массивов все строки должны иметь одинаковое число элементов, все страницы должны иметь одинаковое число строк и столбцов и т.д.

Вы можете воспользоваться свойством скалярного распространения системы MATLAB, совместно с оператором двоеточия, для заполнения всей размерности единственным числом:

A(:, :, 3) = 5;

A(:, :, 3)

ans =

5 5 5

5 5 5

5 5 5

Для превращения А в четырехмерный массив размерности 3х3х3х2 введите

A(:, :, 1, 2) = [1 2 3; 4 5 6; 7 8 9];

A(:, :, 2, 2) = [9 8 7; 6 5 4; 3 2 1];

A(:, :, 3, 2) = [1 0 1; 1 1 0; 0 1 1];

Отметим, что после первых двух вводов MATLAB добавляет в A требуемое количество нулей, чтобы поддержать соответствующие размеры размерностей (речь идет о первом элементе по четвертой размерности, то есть при четвертом индексе равном единице, массив А будет содержать три нулевые матрицы размера 3х3).

Создание масивом с применением функций MATLAB-а.

Вы можете использовать для создания многомерных массивов такие функции MATLAB-а как randn, ones, и zeros, совершенно аналогично способу используемому для двумерных матриц. Каждый вводимый аргумент представляет размер соответствующей размерности в результирующем массиве. Например, для создания массива нормально распределенных случайных чисел размера 4х3х2 следует записать:

B = randn(4,3,2).

Для создания массива, заполненного единственным постоянным значением можно восполь-зоваться функцией repmat. Эта функция копирует массив (в нашем случае массив размера 1х1) вдоль вектора размерностей массива.

B = repmat(5,[3 4 2])

B(:, :, 1) =

5 5 5 5

5 5 5 5

5 5 5 5

B(:, :, 2) =

5 5 5 5

5 5 5 5

5 5 5 5

Внимание! Любая размерность массива может иметь размер 0, что просто дает пустой массив (empty array) . Так, размер 10х0х20 является допустимым размером многомерного массива.

Создание многомерного массива при помощи функции cat.

Функция cat дает простой путь построения многомерных массивов; она объединяет набор массивов вдоль заданной размерности.

B = cat (dim,A1,A2...)

где А1, А2 и т.д. являются объединяемыми массивами. а dim есть размерность, вдоль которой они объединяются. Например, для создания нового массива из двух двумерных матриц при помощи функции cat запишем

B = cat (3, [2 8; 0 5], [1 3; 7 9])


Подобные документы

  • Использование программного обеспечения MatLab для выполнения математических расчетов в области линейной алгебры, теории информации и обработки сигналов, автоматического и автоматизированного управления. Возможности стандартного интерфейса программы.

    курсовая работа [178,7 K], добавлен 08.08.2011

  • Схема речеобразования у человека. Запись и считывание данных из речевого сигнала в MATLAB. Синтаксис вызова функции. Операции над звуковыми файлами. Исследование мужского и женского голосов. Спектрограммы голосов. Обработка речи в Simulink, Wavelet.

    контрольная работа [2,2 M], добавлен 18.04.2013

  • Возможности Matlab, выполнении математических и логических операций, интерактивные инструменты построения графиков. Конструкции для обработки и анализа больших наборов данных, программные и отладочные инструменты, оптимизация данных, операций и функций.

    статья [170,5 K], добавлен 01.05.2010

  • Обзор и сравнительный анализ современных математических пакетов. Вычислительные и графические возможности системы MATLAB, а также средства программирования в среде MATLAB. Основные возможности решения задач оптимизации в табличном процессоре MS Excel.

    дипломная работа [6,6 M], добавлен 04.09.2014

  • Анализ возможностей пакета MATLAB и его расширений. Язык программирования системы. Исследование выпрямительного устройства. Моделирование трёхфазного трансформатора. Схема принципиальная регулируемого конвертора. Возможности гибкой цифровой модели.

    презентация [5,1 M], добавлен 22.10.2013

  • Назначение и особенности системы MATLAB. Запуск программы, работа в режиме диалога, понятие о сессии, операции строчного редактирования. Формирование векторов и матриц. Графики ряда функций. Знакомство с трехмерной графикой. Интерфейс основного окна.

    учебное пособие [65,9 K], добавлен 17.03.2011

  • MATLAB – матричная лаборатория – наиболее развитая система программирования для научно-технических расчетов. Переменные и элементы xy-графики. Простые примеры, иллюстрирующие эффективность MATLAB. Системы линейных алгебраических уравнений и полиномы.

    методичка [47,2 K], добавлен 26.01.2009

  • Получение передаточной функции по модели разомкнутой системы автоматизированного управления двигателем постоянного тока. Получение оптимальных коэффициентов обратных связей в среде MatLab. Расчет переходных процессов системы с оптимальными коэффициентами.

    лабораторная работа [1,3 M], добавлен 31.10.2012

  • Создание матриц специального вида в Matlab: использование функций и анализ основного синтаксиса. Проведение вычислений с элементами массивов. Логические функции, поиск в массиве. Матричные и поэлементные операции. Операции "деления" слева и справа.

    презентация [189,4 K], добавлен 24.01.2014

  • Особенности графики системы MATLAB и ее основные отличительные черты. Построение графика функций одной переменной. Графики в логарифмическом масштабе, построение диаграмм, гистограмм, сфер, поверхностей. Создание массивов данных для трехмерной графики.

    реферат [1,4 M], добавлен 31.05.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.