Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MATLAB.pdf
Скачиваний:
194
Добавлен:
27.03.2015
Размер:
1.06 Mб
Скачать

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

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

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, или же, в противном случае, нужно убедиться, что «схема» то-

48

чек имитирует сетку, полученную функцией 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');

49

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 – Аппроксимация сплайнами.

50

·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 от времени и надпишем график:

51

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. Для определения индекса максимального или минимального элемента нужно в соответствующей функции задать второй выходной параметр. Например, ввод

52

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]