Нахождение средних, срединных значений массива и стандартных отклонений
Стр 1 из 5Следующая ⇒ Лабораторная работа №6-8. Обработка данных ñСтатистическая обработка массивов ñСортировка элементов массивов ñТриангуляция ñПреобразования Фурье ñСвертка и обратная ей операция ñДискретная фильтрация ñАппроксимация и интерполяция ñОбработка данных в окне графики Лабораторная работа посвящена традиционной обработке данных. Приведены основные функции для обработки данных, представленных массивами. Они широко используются для анализа данных физических, химических, экономических и иных экспериментов. Статистическая обработка данных Нахождение максимального и минимального элементов массива Самый простой анализ данных, содержащихся в некотором массиве, заключается в поиске его элементов с максимальным и минимальным значениями. В системе MATLAB определены следующие быстрые функции для нахождения минимальных и максимальных элементов массива: ñmах(А) — возвращает наибольший элемент, если А — вектор; или возвращает вектор-строку, содержащую максимальные элементы каждого столбца, если А — матрица, в многомерных массивах работает с первой не единичной размерности; ñmах(А.В) — возвращает массив того же размера, что А и В, каждый элемент которого есть максимальный из соответствующих элементов этих массивов; ñmax(A.[ ],dim) — возвращает наибольшие элементы по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, тах(А,[ ],1) возвращает максимальные элементы каждого столбца матрицы А; ñ[C.I] =max(A) — кроме максимальных значений возвращает вектор индексов I этих элементов. Примеры: » A=magic(7) » С = max(A)
С= 46 47 48 49 43 44 45 » С = max(A.[ ].l) С = 46 47 48 49 43 44 45 » С = max(A.[ ],2) С = »[C,I]=max(A) C= 49 43 44 45 I= 7 6 5 4 Для быстрого нахождения элемента массива с минимальным значением служит следующая функция: ñmin(A) — возвращает минимальный элемент, если А — вектор; или возвращает вектор-строку, содержащую минимальные элементы каждого столбца, если А — матрица; ñmin(A.B) — возвращает массив того же размера, что А и В, каждый элемент которого есть минимальный из соответствующих элементов этих массивов; ñmin(A,[ ],dim) — возвращает наименьший элемент по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, тах(А,[ ],1) возвращает минимальные элементы каждого столбца матрицы А; ñ[C,I] = min(A) — кроме минимальных значений возвращает вектор индексов этих элементов. Пример: » A=magic(4) А = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 » [C.I] = min(A) C = 4 2 3 1 I = 4 1 1 4 Работа указанных функций базируется на сравнении численных значений элементов массива А, что и обеспечивает высокую скорость выполнения операций. Нахождение средних, срединных значений массива и стандартных отклонений Элементарная статистическая обработка данных в массиве обычно сводится к нахождению их среднего значения, медианы (срединного значения) и стандартного отклонения. Для этого в системе MATLAB определены следующие функции: ñmean (А) — возвращает арифметическое среднее значение элементов массива, если А — вектор; или возвращает вектор-строку, содержащую средние значения элементов каждого столбца, если А — матрица. Арифметическое среднее значение есть сумма элементов массива, деленная на их число; ñmean(A.dim) — возвращает среднее значение элементов по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim=l по столбцам и dim=2 по строкам соответственно).
Примеры:
ñmedian (A) — возвращает медиану, если А — вектор; или вектор-строку медиан для каждого столбца, если А — матрица; ñmedian(A.dim) — возвращает значения медиан для столбцов или строк матрицы в зависимости от значения скаляра dim. Примеры: » A=magic(6) » M=median(A) М = 19.000018.500018.000019.000018.500018.0000 » M=median(A,2) М = 21.5000 22.0000 21.0000 16.0000 15.0000 15.5000 ñstd(X) — возвращает стандартное отклонение элементов массива, вычисляемое по формуле если X — вектор. Если X — матрица, то std(X) возвращает вектор-строку, содержащую стандартное отклонение элементов каждого столбца (обратите внимание, что оно отличается от среднеквадратического отклонения); ñstd(X.flag) — возвращает то же значение, что и std(X), если flag=0; если flag=l, функция std(X.l) возвращает среднеквадратическое отклонение (квадратный корень из несмещенной дисперсии), вычисляемое по формуле ñstd(X.flag.dim) — возвращает стандартное или среднеквадратическое отклонения по рядам (dim=2) или по столбцам(dim=1) матрицы X в зависимости от значения переменной dim. Примеры: » X = linspace(0,3*pi,10) X = Columns 1 through 7 0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832 Columns 8 through 10 7.3304 8.3776 9.4248 » s = std(X) s = 3.1705 Функции сортировки элементов массива Многие операции статистической обработки данных выполняются быстрее и надежнее, если данные предварительно отсортированы. Кроме того, нередко представление данных в отсортированном виде более наглядно и ценно. Ряд функций служит для выполнения сортировки элементов массива. Они представлены ниже. ñsort (А) — в случае одномерного массива А сортирует и возвращает элементы по возрастанию их значений; в случае двумерного массива происходит сортировка и возврат элементов каждого столбца. Допустимы вещественные, комплексные и строковые элементы. Если А принимает комплексные значения, то элементы сначала сортируются по абсолютному значению, а затем, если абсолютные значения равны, по аргументу. Если А включает NaN-элементы, sort помещает их в конец;
ñ[В. INDEX] = sort(A) — наряду с отсортированным массивом возвращает массив индексов INDEX. Он имеет размер size(A), с помощью этого массива можно восстановить структуру исходного массива. ñsort(A.dim) — для матриц сортирует элементы по столбцам (dim=l) или по рядам в зависимости от значения переменной dim. Примеры:
ñsortrows(A) — выполняет сортировку рядов массива А по возрастанию и возвращает отсортированный массив, который может быть или матрицей, или вектором-столбцом; ñsortrows(A.column) — возвращает матрицу, отсортированную по столбцам, точно указанным в векторе column. Например, sortrows(A,[2 3]) сортирует строки матрицы А сначала по второму столбцу, и затем, если его элементы равны, по третьему; ñ[В, index] = sort rows (А) — также возвращает вектор индексов index. Если А — вектор-столбец, то B=A(index). Если А — матрица размера тхп, то B=A(index.:). Примеры: » А=[2 35689: 5 7 1 2 3 5:1 3 2 1 5 1:5 0 8 8 4 3] А =
» b = sortrows(A.3)
ñcplxpair(A) — сортирует элементы по строкам или столбцам комплексного массива А, группируя вместе комплексно сопряженные пары. Затем найденные пары сортируются по возрастанию действительной части. Внутри пары элемент с отрицательной мнимой частью является первым. Действительные элементы следуют за комплексными парами. Заданный по умолчанию порог 100*eps относительно abs(A(i))) определяет, какие числа являются действительными и какие элементы являются комплексно сопряженными. Если А — вектор, cpl xpair (А) возвращает А вместе с комплексно сопряженными парами. Если А — матрица, cpl xpai r(А) возвращает матрицу А с комплексно сопряженными парами, сортированную по столбцам; ñcplxpalr(A,tol) — отменяет заданный по умолчанию порог и задает новый tol; ñcplxpair(A.[].dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim; ñcplxpair(A,tol,dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim, используя заданный порог tol. Пример: » А=[23+121.34-31.45:23-121.-12.21:-3.34+31.-21] А = 23.0000 + 12.00001 34.0000 - 3.00001 45.0000 23.0000 - 12.00001 -12.0000 0 + 2.00001 -3.0000 34.0000 + 3.00001 0 - 2.00001 » cplxpair(A) ans = 23.0000 - 12.00001 34.0000 - 3.00001 0 - 2.00001 23.0000 + 12.00001 34.0000 + 3.00001 0 + 2.00001 -3.0000 -12.0000 45.0000 Вычисление коэффициентов корреляции Под корреляцией понимается взаимосвязь некоторых величин, представленных данными — векторами или матрицами. Общепринятой мерой линейной корреляции является коэффициент корреляции. Его близость к единице указывает на высокую степень линейной зависимости. Данный раздел посвящен описанию функции для вычисления коэффициентов корреляции и определения ковариационной матрицы элементов массива. Приведенная ниже функция позволяет вычислить коэффициенты корреляции для входного массива данных. ñcorrcoef(X) — возвращает матрицу коэффициентов корреляции для входной матрицы, строки которой рассматриваются как наблюдения, а столбцы — как переменные. Матрица S=corrcoef(X) связана с матрицей ковариаций C=cov(X) следующим соотношением: S(i.j)=C(i.j)/sqrt(C(i.i)C(j.j)); ñФункция S = corrcoef (х,у), где х и у — векторы-столбцы, аналогична функции соггсоеЩх у]). Пример:
» S=corrcoef(M)
S = 1.0000 0.0856 -0.5455 -0.3210 -0.0238 0.0856 1.0000 -0.0981 -0.6731 -0.3210 -0.5455 -0.0981 1.0000 -0.0981 -0.5455 -0.3210 -0.6731 -0.0981 1.0000 0.0856 -0.0238 -0.3210 -0.5455 0.0856 1.0000 В целом, корреляция данных довольно низкая. В данных, расположенных по диагонали — здесь коэффициенты корреляции равны 1, — вычисляется линейная корреляция переменной со своей копией. Вычисление матрицы ковариации Приведенная далее функция позволяет вычислить матрицу ковариации для массива данных. ñcov(x) — возвращает смещенную дисперсию элементов вектора х. Для матрицы, где каждая строка рассматривается как наблюдение, а каждый столбец — как переменная, cov(x) возвращает матрицу ковариации. diag(cov(x» — вектор смещенных дисперсий для каждого столбца и sqrt(diag(cov(x))) — вектор стандартных отклонений. ñФункция С = cov(x.y), где х и у — векторы-столбцы одинаковой длины, равносильна функции cov([x у]). Пример: » D=[2 -3 6:3 6 -1:9 8 5]:C=cov(D) С = 14.3333 16.3333 3.6667 16.3333 34.3333 -10.3333 3.6667 -10.3333 14.3333 » diag(cov(D)) ans = 14.3333 34.3333 14.3333 » sqrt(diag(cov(D))) ans = 3.7859 5.8595 3.7859 » std(D) ans = 3.7859 5.8595 3.7859 Триангуляция Далее мы рассмотрим функции геометрического анализа данных. Такой анализ не относится к достаточно распространенным средствам анализа данных, но для специалистов он представляет несомненный интерес. Пусть есть некоторое число точек. Триангуляция Делоне — это множество линий, соединяющих каждую точку с ее ближайшими соседними точками. Диаграммой Вороного называют многоугольник, вершины которого — центры окружностей, описанных вокруг треугольников Делоне. Расчет триангуляции В системе MATLAB определены функции триангуляции Делоне, триангуляции Делоне для ближайшей точки и поиска наилучшей триангуляции. Рассмотрим функции, реализующие триангуляцию Делоне. ñTRI = delaunay(x.y) — возвращает матрицу размера mх3 множества треугольников (триангуляция Делоне), такую что ни одна из точек данных, содержащиеся в векторах х и у, не попадают внутрь окружностей, проходящих через вершины треугольников. Каждая строка матрицы TRI определяет один такой треугольник и состоит из индексов векторов х и у; ñTRI = delaunay('x,у.'sorted'-) — при расчетах предполагается, что точки векторов х и у отсортированы сначала по у, затем по х и двойные точки уже устранены. Пример: » rand('state',0); » x=rand(1.25); » y=rand(1.25); » TRI = delaunay(x.y); » trimeshCTRI,x.y,zeros(size(x))) » ax1s([0 101]); hold on; » plot(x.y.'o') ñdsearch(x.y,TRI,xi,yi) — возвращает индекс точки из числа содержащихся в массивах х и у, ближайшей к точке с координатами (xi,y1), используя массив данных триангуляции TRI (триангуляция Делоне для ближайшей точки); ñdsearch(x,y,TRI,xi,yi,S) — делает то же, используя заранее вычисленную разреженную матрицу триангуляции S: S=sparse(TRI(:,[1 1 2 2 3 3]), TRK:,[2 3 1 3 1 2]).1.nxy.nxy), где nxy=prod(size(x)); ñtsearch(x,y.TRI,xi,yi) — выполняет поиск наилучшей триангуляции, возвращает индексы строк матрицы триангуляции TRI для каждой точки с координатами (xi,y1). Возвращает NaN для всех точек, находящихся вне выпуклой оболочки. Триангуляция трехмерных и n-мерных массивов (п>=2) осуществляется при помощи функций delaunayS и delaunayn соответственно. Эти функции используют не алгоритм вычисления диаграмм Вороного, как del aunay, а алгоритм qhul 1 Национального научно-технического и исследовательского центра визуализации и вычисления геометрических структур США [ В MATLAB 6.1 функции delaunay, convhull, griddata, voronoi также используют qhull. - Примеч. ред. ]. Построенная по приведенному ранее примеру диаграмма представлена на рис. 6.1.
Рис. 6.1. Пример применения функции delaunay Нахождение выпуклой оболочки В системе MATLAB определена функция вычисления точек выпуклой оболочки: ñconvhull (х,у) — возвращает индексы тех точек, задаваемых векторами х и у, которые лежат на выпуклой оболочке; ñconvhull(x,y,TRI) — использует триангуляцию, полученную в результате применения функции триангуляции Делоне del aunay, вместо того чтобы вычислять ее самостоятельно. Пример: » хх=-0.8:0.03:0.8; » уу = abstsqrt(xx)); » [х,у] = po!2cart(xx.yy); » k = convhuTI(x.y); » plot(x(k).y(k).'r:',x,y,'g*')
Рис. 6.2. Пример использования функции convhull Рис. 6.2 иллюстрирует применение функции convhull для построения выпуклой оболочки. Функция convhulln вычисляет n-мерную выпуклую поверхность, основана на алгоритме qhull. Вычисление площади полигона В системе MATLAB определены функции, вычисляющие площадь полигона и анализирующие нахождение точек внутри полигона. Для вычисления площади полигона используется функция polyarea: ñpolyarea(X.Y) — возвращает площадь полигона, заданного вершинами, находящимися в векторах X и Y. Если X и Y — матрицы одного размера, то polyarea возвращает площадь полигонов, определенных столбцами X и Y; ñpolyarea(X.Y.dim) — возвращает площадь полигона, заданного столбцами или строками X и Y в зависимости от значения переменной dim. Пример: » L = linspace(0.3*pi,10); » X= sin(L)'; » Y=cos(L)'; » А = polyarea(X.Y) А = 3.8971 » plot(X.Y.'m')
Рис. 6.3. Область многоугольника, для которого вычислена площадь Построенный по этому примеру многоугольник представлен на рис. 6.3. В данном примере использована функция linspace(xl.x2,N), генерирующая N точек в промежутке от x1 до х2 с последующим формированием векторов X и Y для построения многоугольника в полярной системе координат. Анализ попадания точек внутрь полигона Функция Inpolygon используется для анализа того, попадают ли заданные точки внутрь полигона: ñIN=inpolygon(X,Y.xv.yv) — возвращает матрицу IN того же размера, что X и Y. Каждый элемент матрицы IN принимает одно из значений — 1, 0.5 или 0 — в зависимости от того, находится ли точка с координатами (X(p,q),Y(p,q)) внутри полигона, вершины которого определяются векторами xv и yv: ñIN(p,q) = 1 — если то.чка (X(p.q),Y(p,q)) лежит внутри полигона; ñIN(p,q) = 0.5 — если точка (X(p,q),Y(p,q)) лежит на границе полигона; ñIN(p.q) = 0 — если точка (X(p.q),Y(p,q)) лежит вне полигона. Пример: » L = linspace(0.2*pi,8); » yv = sln(L)'; » xv - cos(L)'; » x - randn(l00.l); у = randn(l00.l); » IN = inpolygon(x.y.xv.yv); » plot(xv.yv.'k',x(IN),y(IN).'r*'.x(~IN).y(~IN).'bo') Построенные в этом примере массив точек и полигон представлены на рис. 6.4.
Рис. 6.4. Пример применения функции inpolygon Точки, попавшие внутрь полигона, обозначены символом звездочки, а точки вне полигона обозначены кружками. Построение диаграммы Вороного Для построения диаграммы Вороного служат следующие команды: ñvoronoi(x.y) — строит диаграмму Вороного для точек с координатами (х,у). Функция voronoi(х,у,TRI) использует триангуляцию TRI; ñvoronoi (...,' LineSpec') — строит диаграмму с заданным цветом и стилем линий; ñ[vx.vy] = voronoi (...) — возвращает вершины граней Вороного в векторах vx и vy, так что команда plot(vx,vy,'-',х.у,'.') создает диаграмму Вороного. Пример: » rand('state'.0): » x = randd.15): у = randd.15): » TRI = delaunay(x.y); » subplotd.2,1).... » trimesh(TRI,x,y,zeros(s1ze(x))); view(2),... » axis([0 101]); hold on; » plot(x.y,'o'); » [vx, vy] = voronoi(x.y.TRI); » subplot(l,2,2).... » plot(x,y,'r+',vx,vy,'b-'),... » axis([0 1 0 1]) Рис. 6.5. Связь триангуляции Делоне с диаграммой Вороного Рисунок 6.5 (слева) иллюстрирует построение треугольников Делоне. На рисунке справа изображены знаками «плюс» центры окружностей, проведенных вокруг треугольников Делоне. Функция [V,C]=voronoin(X) служит для построения диаграмм Вороного n-мерных данных. V — массив граней, С —массив клеток диаграмм. При n=2 вершины граней Вороного возвращаются в порядке смежности, при п>2 — в порядке убывания.
Читайте также: III. Калибровка радиометра, нахождение эффективного центра Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|