Урок 6 — Матрицы. Работа с матрицами в MatLab. Примеры
1. Различные способы ввода матриц в пакете MatLab
Вводить небольшие по размеру матрицы удобно прямо из командной строки. Введите матрицу размерностью два на три
.
Для хранения матрицы используйте двумерный массив с именем A. При вводе учтите, что матрицу А можно рассматривать как вектор-столбец из двух элементов, каждый из которых является вектор-строкой длиной три, следовательно, строки при наборе отделяются точкой с запятой:
Для изучения простейших операций над матрицами приведем еще несколько примеров. Рассмотрим другие способы ввода. Введите квадратную матрицу размера три так, как описано ниже:
.
Начните набирать в командной строке
Еще один способ ввода матриц состоит в том, что матрицу можно трактовать как вектор-строку, каждый элемент которой является вектор-столбцом. Например, матрицу два на три
можно ввести при помощи команды:
Посмотрите переменные рабочей среды, набрав в командной строке whos:
А 2×3 48 double array
В 3×3 72 double array
С 2×3 48 double array
Итак, в рабочей среде содержится три матрицы, две прямоугольные и одна квадратная.
2. Обращение к элементам матриц в пакете MatLab
Элементы матриц могут входить в состав выражений:
» С(1, 1) + С(2, 2) + С(2, 3)
ans =
5
Расположение элементов матрицы в памяти компьютера определяет еще один способ обращения к ним. Матрица А размера m на n хранится в виде вектора длины mn, в котором элементы матрицы расположены один за другим по столбцам
Для доступа к элементам матрицы можно использовать один индекс, задающий порядковый номер элемента матрицы в векторе.
Матрица С, определенная в предыдущем подразделе, содержится в векторе
[C(1,1) C(2,1) C(1,2) С(2,2) С(1,3) С(2,3)],
который имеет шесть компонент. Доступ к элементам матрицы осуществляется следующим образом:
3. Операции над матрицами в пакете MatLab: сложение, вычитание, умножение, транспонирование и возведение в степень
При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус. Найдите сумму и разность матриц С и А, определенных выше:
Следите за совпадением размерности, иначе получите сообщение об ошибке:
» S = А+В
. Error using ==> ±
Matrix dimensions must agree.
Для умножения матриц предназначена звездочка:
Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева:
Замечание 1
Если матрица есть произвольная матрица размера n m, то матрица, транспонированная по отношению к А,есть матрица размера m n: Таким образом, строки матрицы становятся столбцами матрицы , а столбцы матрицы становятся строками матрицы .
Комплексно-сопряженная матрица получается из исходной в два этапа: выполняется транспонирование исходной матрицы, а затем все комплексные числа заменяются на комплексно-сопряженные.
Сопряжение и транспонирование матриц, содержащих комплексные числа, приведут к созданию разных матриц:
»K= [l-i, 2+3i; 3-5i, l-9i]
К = 1.0000 – 1.0000i 2.0000 + 3.0000i
3.0000 – 5.0000i 1.0000 – 9.0000i
»K’
ans =
1.0000 + 1.0000i 3.0000 + 5.0000i
2.0000 – 3.0000i 1.0000 + 9.0000i
Замечание 2
При вводе вектор-строк их элементы можно разделять или пробелами, или запятыми. При вводе матрицы К применены запятые для более наглядного разделения комплексных чисел в строке.
Возведение квадратной матрицы в целую степень производится с использованием оператора ^:
Проверьте полученный результат, умножив матрицу саму на себя.
Убедитесь, что вы освоили простейшие операции с матрицами в MatLab. Найдите значение следующего выражения
Учтите приоритет операций, сначала выполняется транспонирование, потом возведение в степень, затем умножение, а сложение и вычитание производятся в последнюю очередь.
»(А+С)*В^3*(А-С)’
ans =
1848 1914
10290 3612
4. Умножение матриц и векторов
Вектор-столбец или вектор-строка в MatLab являются матрицами, у которых один из размеров равен единице, поэтому все вышеописанные операции применимы и для умножения матрицы на вектор-столбец или вектор-строки на матрицу. Например, вычисление выражения
можно осуществить следующим образом:
5. Блочные матрицы
Обратной задачей к конструированию блочных матриц является задача выделения блоков. Выделение блоков матриц осуществляется индексацией при помощи двоеточия. Введите матрицу
и затем выделите подматрицу с элементами , задав номера строк и столбцов при помощи двоеточия:
»Р1 = Р(2:3,2:3)
Р1 =
10 12
11 10
Для выделения из матрицы столбца или строки (то есть массива, у которого один из размеров равен единице) следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием без указания пределов. Например, запишите вторую строку матрицы Р в вектор р
»p = P(2, 🙂
p =
4 10 12 5
При выделении блока до конца матрицы можно не указывать ее размеры, а использовать элемент end:
»p = Р(2, 2:end)
p =
10 12 5
6. Удаление строк и столбцов
В MatLab парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. Для удаления строки следует присвоить ей пустой массив. Удалите, например, первую строку квадратной матрицы:
» М = [2 0 3
1 1 4
6 1 3];
» M(1,:)=[];
» M
M =
1 1 4
6 1 3
Обратите внимание на соответствующее изменение размеров массива, которое можно проверить при помощи size:
Аналогичным образом удаляются и столбцы. Для удаления нескольких идущих подряд столбцов (или строк) им нужно присвоить пустой массив. Удалите второй и третий столбец в массиве M
Индексация существенно экономит время при вводе матриц, имеющих определенную структуру.
7. Заполнение матриц при помощи индексации
Выше было описано несколько способов ввода матриц в MatLab. Однако часто бывает проще сгенерировать матрицу, чем вводить ее, особенно если она обладает простой структурой. Рассмотрим пример такой матрицы:
.
Генерация матрицы Т осуществляется в три этапа:
1. Создание массива T размера пять на пять, состоящего из нулей.
2. Заполнение первой строки единицами.
3. Заполнение части последней строки минус единицами до последнего элемента.
Соответствующие команды MatLab приведены ниже.
Создание некоторых специальных матриц в MatLab осуществляется при помощи встроенных функций.
8. Создание матриц специального вида
Заполнение прямоугольной матрицы нулями производится встроенной функцией zeros, аргументами которой являются число строк и столбцов матрицы:
» A = zeros(3, 6)
A =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Один аргумент функции zeros приводит к образованию квадратной матрицы заданного размера:
» A = zeros(3)
A =
0 0 0
0 0 0
0 0 0
Единичная матрица инициализируется при помощи функции eye:
» I = eye(4)
I=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Функция eye с двумя аргументами создает прямоугольную матрицу, у которой на главной диагонали стоят единицы, а остальные элементы равны нулю:
» I = eye(4, 8)
I =
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
Матрица, состоящая из единиц, образуется в результате вызова функции
ones:
» E = ones(3, 7)
E =
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
Использование одного аргумента в ones приводит к созданию квадратной матрицы, состоящей из единиц.
MatLab предоставляет возможность заполнения матриц случайными элементами. Результатом функции rand является матрица чисел, распределенных случайным образом между нулем и единицей, а функции randn — матрица чисел, распределенных по нормальному закону:
» R = rand(3, 5)
R =
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763
Один аргумент функций rand и randn приводит к формированию квадратных матриц:
Часто возникает необходимость создания диагональных матриц, т.е. матриц, у которых все недиагональные элементы равны нулю. Функция diag формирует диагональную матрицу из вектор-столбца или вектор-строки, располагая их элементы по диагонали матрицы:
» d = [1; 2; 3; 4];
» D = diag(d)
D =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
Функция diag служит и для выделения диагонали матрицы в вектор, например
» A = [10 1 2; 1 20 3; 2 3 30];
» d = diag(A)
d =
10
20
30
9. Поэлементные операции с матрицами
Поскольку векторы и матрицы хранятся в двумерных массивах, то применение математических функций к матрицам и поэлементные операции производятся так же, как для векторов.
Введите две матрицы
, .
10. Визуализация матриц
Матрицы с достаточно большим количеством нулей называются разреженными. Часто необходимо знать, где расположены ненулевые элементы, т.е. получить так называемый шаблон матрицы. Для этого в MatLab служит функция spy. Посмотрим шаблон матрицы G
.
После выполнения команды spy на экране появляется графическое окно Figure No. 1. На вертикальной и горизонтальной осях отложены номера строк и столбцов. Ненулевые элементы обозначены маркерами, внизу графического окна указано число ненулевых элементов (nz = 19).
Наглядную информацию о соотношении величин элементов матрицы дает функция imagesc, которая интерпретирует матрицу как прямоугольное изображение. Каждый элемент матрицы представляется в виде квадратика, цвет которого соответствует величине элемента. Для того чтобы узнать соответствие цвета и величины элемента следует использовать команду colorbar, выводящую рядом с изображением матрицы шкалу цвета (Insert (в графическом окне Figure No. 1), colorbar). Наконец, для печати на монохромном принтере удобно получить изображение в оттенках серого цвета, используя команду colormap(gray) (Edit (в графическом окне Figure No. 1), Colormap, Colormap Editor, Tools, gray). Мы будем работать с матрицей G. Набирайте команды, указанные ниже, и следите за состоянием графического окна:
» imagesc(G)
» colorbar
» colormap(gray)
В результате получается наглядное представление матрицы.
Документация
Матрицы в среде MATLAB
Создание матриц
MATLAB имеет много функций, которые создают различные виды матриц. Например, можно создать симметрическую матрицу с записями на основе треугольника Паскаля:
Другим примером является 3 2 прямоугольная матрица случайных целых чисел. В этом случае первый вход к randi описывает область значений возможных значений для целых чисел, и вторые два входных параметров описывают количество строк и столбцов.
Вектор-столбцом является m-by-1 матрица, вектор-строка является 1 n матрицей, и скаляр является матрицей 1 на 1. Чтобы задать матрицу вручную, используйте квадратные скобки [ ] обозначить начало и конец массива. В скобках используйте точку с запятой ; обозначить конец строки. В случае скаляра (матрица 1 на 1), не требуются скобки. Например, эти операторы производят вектор-столбец, вектор-строку и скаляр:
Для получения дополнительной информации о создании и работе с матрицами, смотрите Создание, конкатенацию и расширение матрицы.
Сложение и вычитание матриц
Сложение и вычитание требуют, чтобы обе матрицы имели совместимые размерности. Если размерности несовместимы, ошибка заканчивается:
Для получения дополнительной информации см. Массив по сравнению Матричные операции.
Векторные произведения и транспонирование
Для векторов перемещение превращает вектор-строку в вектор-столбец (и наоборот):
Если x и y оба действительные вектор-столбцы, затем продукт x*y не задан, но эти два продукта
Комплексное сопряженное транспонирование z :
Неспрягаемый комплекс транспонирует, где комплексная часть каждого элемента сохраняет свой знак, обозначается z.’ :
Для комплексных векторов, эти два скалярных произведения x’*y и y’*x сопряженные комплексные числа друг друга и скалярное произведение x’*x из комплексного вектора с собой действительно.
Умножение матриц
Матрица A может быть умножена справа вектор-столбцом и слева вектором-строкой:
Прямоугольные умножения матриц должны удовлетворить условиям совместимости размерности. Начиная с A имеет размер 3х3 и C 3 2, можно умножить их, чтобы добраться 3 2 результат (общие внутренние отмены размерности):
Однако умножение не работает в обратном порядке:
Можно умножить что-либо со скаляром:
Единичная матрица
Общепринятое математическое обозначение использует прописную букву I, чтобы обозначить единичные матрицы, матрицы различных размеров с единицами на основной диагонали и нулях в другом месте. Эти матрицы имеют свойство, что A I = A и I A = A каждый раз, когда размерности совместимы.
Исходная версия MATLAB не могла использовать I с этой целью, потому что это не различало прописные и строчные буквы, и i уже служил индексом и как комплексной единицей. Таким образом, английская игра слов языка была введена. Функция
возвращает m-by- n прямоугольная единичная матрица и eye(n) возвращает n-by- n квадратная единичная матрица.
Обращение матриц
Продукт тензора Кронекера
Кронекеров продукт часто используется с матрицами нулей и единиц, чтобы создать повторенные копии маленьких матриц. Например, если X матрица 2 на 2
и I = eye(2,2) единичная матрица 2 на 2, затем:
Векторные и матричные нормы
В случаях, где вы хотите вычислить норму каждой строки или столбца матрицы, можно использовать vecnorm :
Используя многопоточное вычисление с функциями линейной алгебры
MATLAB поддерживает многопоточный расчет во многой линейной алгебре и поэлементных числовых функциях. Эти функции автоматически выполняются на нескольких потоках. Для функции или выражения, чтобы выполниться быстрее на нескольких центральных процессорах, много условий должны быть верными:
Функция выполняет операции, что легко раздел в разделы, которые выполняются одновременно. Эти разделы должны смочь выполниться с небольшой связью между процессами. Они должны потребовать немногих последовательных операций.
Размер данных является достаточно большим так, чтобы любые преимущества параллельного выполнения перевесили время, требуемое разделить данные и управлять отдельными потоками выполнения. Например, большинство функций убыстряется только, когда массив содержит несколько тысяч элементов или больше.
Операция не ограничена памятью; время вычислений не во власти времени доступа к памяти. Как правило сложные функции ускоряют больше, чем простые функции.
Документация
Матрицы в среде MATLAB
Создание матриц
MATLAB имеет много функций, которые создают различные виды матриц. Например, можно создать симметрическую матрицу с записями на основе треугольника Паскаля:
Другим примером является 3 2 прямоугольная матрица случайных целых чисел. В этом случае первый вход к randi описывает область значений возможных значений для целых чисел, и вторые два входных параметров описывают количество строк и столбцов.
Для получения дополнительной информации о создании и работе с матрицами, смотрите Создание, конкатенацию и расширение матрицы.
Добавление и вычитание матриц
Сложение и вычитание требуют, чтобы обе матрицы имели совместимые размерности. Если размерности несовместимы, ошибка заканчивается:
Для получения дополнительной информации см. Массив по сравнению Матричные операции.
Векторные произведения и транспонируют
Если x и y являются оба действительными вектор-столбцами, то продукт x*y не задан, но эти два продукта
Комплексное сопряженное транспонирование z :
Неспрягаемый комплекс транспонирует, где комплексная часть каждого элемента сохраняет свой знак, обозначается z.’ :
Умножение матриц
Прямоугольные умножения матриц должны удовлетворить условия совместимости размерности. Поскольку A имеет размер 3х3, и C 3 2, можно умножить их, чтобы добраться 3 2 результат (общие внутренние отмены размерности):
Однако умножение не работает в обратном порядке:
Можно умножить что-либо со скаляром:
Единичная матрица
Общепринятое математическое обозначение использует прописную букву I, чтобы обозначить единичные матрицы, матрицы различных размеров с единицами на основной диагонали и нулях в другом месте. Эти матрицы имеют свойство, что A I = A и I A = A каждый раз, когда размерности совместимы.
Исходная версия MATLAB не могла использовать I с этой целью, потому что это не различало прописные и строчные буквы, и i уже служил индексом и как комплексной единицей. Таким образом, английская игра слов языка была введена. Функция
возвращает m-by- n прямоугольная единичная матрица, и eye(n) возвращает n-by- n квадратная единичная матрица.
Матричная инверсия
Продукт тензора Кронекера
Кронекеров продукт часто используется с матрицами нулей и единиц, чтобы создать повторенные копии маленьких матриц. Например, если X является матрицей 2 на 2
и I = eye(2,2) является единичной матрицей 2 на 2, затем:
Векторные и матричные нормы
В случаях, где вы хотите вычислить норму каждой строки или столбец матрицы, можно использовать vecnorm :
Используя многопоточное вычисление с функциями линейной алгебры
MATLAB поддерживает многопоточное вычисление во многой линейной алгебре и поэлементных числовых функциях. Эти функции автоматически выполняются на нескольких потоках. Для функции или выражения, чтобы выполниться быстрее на нескольких центральных процессорах, много условий должны быть верными:
Функция выполняет операции, что легко раздел в разделы, которые выполняются одновременно. Эти разделы должны смочь выполниться с небольшой связью между процессами. Они должны потребовать немногих последовательных операций.
Размер данных является достаточно большим так, чтобы любые преимущества параллельного выполнения перевесили время, требуемое разделить данные и управлять отдельными потоками выполнения. Например, большинство функций убыстряется только, когда массив содержит несколько тысяч элементов или больше.
Операция не ограничена памятью; время вычислений не во власти времени доступа к памяти. Как правило сложные функции ускоряют больше, чем простые функции.
Содержание
В этом пособии рассказывается о применении пакета MatLab для анализа многомерных данных. Этот текст не является учебником по MatLab. В нем приведены только базовые сведения о работе в этой среде, необходимые для реализации основных алгоритмов. Более подробное изложение можно найти здесь.
В пособии интенсивно используются понятия и методы матричной алгебры – вектор, матрица, и т.п. Читателям, которые плохо знакомы с этим аппаратом, рекомендуется изучить, или, хотя бы просмотреть, пособие «Матрицы и векторы».
Для практического воплощения хемометрических методов используются как специализированные пакеты программ (например, the Unsrambler или SIMCA), так и статистические пакеты общего назначения (например, SPSS или Statistica). Среди средств общего назначения, используемых в хемометрике, особое место занимает пакет MatLab. Его популярность необычайно высока. Это объясняется тем, что MatLab является мощным и универсальным обработки многомерных данных. Сама структура пакета делает его удобным средством для проведения матричных вычислений. Спектр проблем, исследование которых может, осуществлено при помощи MatLab, охватывает: матричный анализ, обработку сигналов и изображений, нейронные сети и многие другие. MatLab — это язык высокого уровня, имеющий открытый код, что дает возможность опытным пользователям разбираться в запрограммированных алгоритмах. Простой встроенный язык программирования позволяет легко создавать собственные алгоритмы. За много лет использования MatLab создано огромное количество функций и ToolBox (пакетов специализированных средств). Самым популярным является пакет PLS ToolBox компании Eigenvector Research, Inc.
Многие книги и статьи содержат MatLab коды, позволяющие читателю сразу применить описываемые методы на практике. MatLab прекрасно интегрируется с Microsoft Word и Excel. Российское хемометрическое общество издало учебное пособие, являющееся полезным введением в хемометрические приложения MatLab.
1. Базовые сведения
1.1. Рабочая среда MatLab
Чтобы запустить программу дважды щелкните на иконку . Перед Вами откроется рабочая среда, изображенная на рисунке.
Рабочая среда MatLab 6.х немного отличается от рабочей среды предыдущих версий, она имеет более удобный интерфейс для доступа ко многим вспомогательным элементам
Рабочая среда MatLab 6.х содержит следующие элементы:
панель инструментов с кнопками и раскрывающимся списком;
окно с вкладками Launch Pad и Workspace, из которого можно получить доступ к различным модулям ToolBox и к содержимому рабочей среды;
окно с вкладками Command History и Current Directory, предназначенное для просмотра и повторного вызова ранее введенных команд, а также для установки текущего каталога;
командное окно, в котором находится приглашение к вводу » и мигающий вертикальный курсор;
1.2. Простейшие вычисления
Рис. 2 Графическое представление метода главных компонент
Рис. 3 Графическое представление метода главных компонент
1.3. Эхо команд
Рис. 4 Пример ввода функции ScoresPCA
1.4. Сохранение рабочей среды. MAT файлы
1.5. Журнал
производит следующие действия:
открывает журнал в файле exampl-1.txt ;
сохраняет все переменные в MAT файле work-1.mat ;
сохраняет журнал в файле exampl-1.txt в подкаталоге work корневого каталога MatLab и закрывает MatLab;
Посмотрите содержимое файла exampl-1.txt в каком-нибудь текстовом редакторе. В файле окажется следующий текст:
1.6. Система помощи
2. Матрицы
2.1. Скаляры, векторы и матрицы
В MatLab можно использовать скаляры, векторы и матрицы. Для ввода скаляра достаточно приписать его значение какой-то переменной, например
Заметим, что MatLab различает заглавные и прописные буквы, так что p и P — это разные переменные. Для ввода массивов (векторов или матриц) их элементы заключают в квадратные скобки. Так для ввода вектора-строки размером 1×3, используется следующая команда, в которой элементы строки отделяются пробелами или запятыми.
При вводе вектора-столбца элементы разделяют точкой с запятой. Например,
Вводить небольшие по размеру матрицы удобно прямо из командной строки. При вводе матрицу можно рассматривать как вектор-столбец, каждый элемент которого является вектором-строкой.
или матрицу можно трактовать как вектор строку, каждый элемент которой является вектором-столбцом.
2.2. Доступ к элементам
Также можно осуществлять выделение блоков матриц при помощи двоеточия. Например, выделим из матрицы P блок отмеченный цветом
Видно, что в рабочей среде содержатся один скаляр ( p ), четыре матрицы ( A, B, P, P1 ) и вектор-строка ( z ).
2.3. Основные матричные операции
При использовании матричных операций следует помнить, что для сложения или вычитания матрицы должны быть одного размера, а при перемножении число столбцов первой матрицы обязано равняться числу строк второй матрицы. Сложение и вычитание матриц, так же как чисел и векторов, осуществляется при помощи знаков плюс и минус
Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева. Возведение квадратной матрицы в целую степень производится с использованием оператора ^
Проверьте полученный результат, умножив матрицу Р саму на себя.
2.4. Создание матриц специального вида
Заполнение прямоугольной матрицы нулями производится встроенной функцией zeros
Единичная матрица создается при помощи функции eye
Матрица, состоящая из единиц, образуется в результате вызова функции ones
MatLab предоставляет возможность заполнения матриц случайными числами. Результатом функции rand является матрица чисел, равномерно распределенных между нулем и единицей, а функции randn — матрица чисел, распределенных по нормальному закону с нулевым средним и единичной дисперсией.
Функция diag формирует диагональную матрицу из вектора, располагая элементы по диагонали.
2.5. Матричные вычисления
MatLab содержит множество различных функций для работы с матрицами. Так, например, транспонирование матрицы производится при помощи апострофа ‘
Нахождение обратной матрицы проводится с помощью функции inv для квадратных матриц
3. Интегрирование MatLab и Excel
Интегрирование MatLab и Excel позволяет пользователю Excel обращаться к многочисленным функциям MatLab для обработки данных, различных вычислений и визуализации результата. Надстройка excllink.xla реализует данное расширение возможностей Excel. Для связи MatLab и Excel определены специальные функции.
3.1. Конфигурирование Excel
3.2. Обмен данными между MatLab и Excel
Запустите Excel, проверьте, что проделаны все необходимые настройки так, как описано в предыдущем разделе (MatLab должен быть закрыт). Введите в ячейки с A1 по C3 матрицу, для отделения десятичных знаков используйте точку в соответствии с требованиями Excel.
Результат аналогичен полученному при выполнении команды в среде MatLab.
Итак, для экспорта матрицы в MatLab следует выделить подходящие ячейки листа Excel, а для импорта достаточно указать одну ячейку, которая будет являться верхним левым элементом импортируемого массива. Остальные элементы запишутся в ячейки листа согласно размерам массива, переписывая содержащиеся в них данные, поэтому следует соблюдать осторожность при импорте массивов.
4. Программирование
4.1. М-файлы
Работа из командной строки MatLab затрудняется, если требуется вводить много команд и часто их изменять. Ведение дневника при помощи команды diary и сохранение рабочей среды незначительно облегчают работу. Самым удобным способом выполнения групп команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. С его помощью можно создавать собственные функции и вызывать их, в том числе и из командного окна.
М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции, (Function M-Files), в которых описываются функции, определяемые пользователем.
4.2. Файл-программа
Наберите в редакторе команды, приводящие к построению двух графиков на одном графическом окне
Команды файл-программы осуществляют вывод в командное окно. Для подавления вывода следует завершать команды точкой с запятой. Если при наборе сделана ошибка и MatLab не может распознать команду, то происходит выполнение команд до неправильно введенной, после чего выводится сообщение об ошибки в командное окно.
Отдельные блоки М-файла можно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии начинаются со знака процента и автоматически выделяются зеленым цветом, например:
Открытие существующего М-файла производится при помощи пункта Open меню File рабочей среды, либо редактора М-файлов.
4.3. Файл-функция
Рассмотренная выше файл-программа является только последовательностью команд MatLab, она не имеет входных и выходных аргументов. Для использования численных методов и при программировании собственных приложений в MatLab необходимо уметь составлять файл-функции, которые производят необходимые действия с входными аргументами и возвращают результат действия в выходных аргументах. Разберем несколько простых примеров, позволяющих понять работу с файл-функциями.
Проводя предобработку данных многомерного анализа хемометрики часто применяет центрирование. Имеет смысл один раз написать файл-функцию, а потом вызывать его всюду, где необходимо производить центрирование. Откройте в редакторе М-файлов новый файл и наберите
Можно написать файл-функции с несколькими входными аргументами, которые размещаются в списке через запятую. Можно также создавать и функции, возвращающие несколько значений. Для этого выходные аргументы добавляются через запятую в список выходных аргументов, а сам список заключается в квадратные скобки. Хорошим примером является функция, переводящая время, заданное в секундах, в часы, минуты и секунды.
При вызове файл-функций с несколькими выходными аргументами результат следует записывать в вектор соответствующей длины.
4.4 Создание графика
MatLab имеет широкие возможности для графического изображения векторов и матриц, а также для создания комментариев и печати графиков. Дадим описание несколько важных графических функций.
Программа построила график зависимости, который отображается в окне Figure 1
MatLab автоматически присваивает каждому графику свой цвет (исключая случаи, когда это делает пользователь), что позволяет различать наборы данных.
Команда hold on позволяет добавлять кривые на существующий график. Функция subplot позволяет выводить множество графиков в одном окне
4.5 Печать графиков
Пункт Print в меню File и команда print печатают графику MatLab. Меню Print вызывает диалоговое окно, которое позволяет выбирать общие стандартные варианты печати. Команда print обеспечивает большую гибкость при выводе выходных данных и позволяет контролировать печать из М-файлов. Результат может быть послан прямо на принтер, выбранный по умолчанию, или сохранен в заданном файле.
5. Примеры программ
В этом разделе приведены наиболее употребительные алгоритмы, используемые при анализе многомерных данных. Рассмотрены как простейшие методы преобразования данных центрирование и шкалирование, так и алгоритмы для анализа данных — PCA, PLS.
5.1. Центрирование и шкалирование
Часто при анализе требуется преобразовать исходные данные. Наиболее используемыми методами преобразования данных выступают центрирование и шкалирование каждой переменной на стандартное отклонение. В разделе 4.3 приводился код функции для центрирования матрицы. Поэтому ниже показан только код функции, которая шкалирует данные. Обратите внимание, что исходная матрица должна быть центрирована
function Xs = scaling(X) % scaling: the output matrix is Xs % matrix X must be centered |
Xs = X * inv(diag(std(X)));
5.2. SVD/PCA
Наиболее популярным способом сжатия данных в многомерном анализе является метод главных компонент (PCA). С математической точки зрения PCA — это декомпозиция исходной матрицы X, т.е. представление ее в виде произведения двух матриц T и P
function [T, P] = pcasvd(X) % pcasvd: calculates PCA components. % The output matrices are T and P. % T contains scores % P contains loadings |
[U,D,V] = svd(X);
T = U * D;
P = V;
5.3 PCA/NIPALS
Для построения PCA счетов и нагрузок, используется рекуррентный алгоритм NIPALS, который на каждом шагу вычисляет одну компоненту. Сначала исходная матрица X преобразуется (как минимум – центрируется; см. раздел 4.3) и превращается в матрицу E0, a=0. Далее применяют следующий алгоритм.
После вычисления очередной (a-ой) компоненты, полагаем ta=t и pa=p. Для получения следующей компоненты надо вычислить остатки Ea+1 = Ea – t p t и применить к ним тот же алгоритм, заменив индекс a на a+1.
Код алгоритма NIPALS может быть написан и самими читателями, в данном же пособии авторы приводят свой вариант. При расчете PCA, можно вводить число главных компонент (переменная numberPC ). Если же не известно, сколько необходимо компонент, следует написать в командной строке [P,T] = pcanipals (X) и тогда программа задаст число компонент равным наименьшему из показателей размерности исходной матрицы X.
function [T, P] = pcanipals(X, numberPC) % pcanipals: calculates PCA components. % The output matrices are T and P. % T contains scores % P contains loadings |
% calculation of number of components
[X_r, X_c] = size(X); P=[]; T=[];
if lenfth(numberPC) > 0
pc = numberPC<1>;
elseif (length(numberPC) == 0) & X_r pc = X_r;
else
pc = X_c;
end;
% calculation of scores and loadings for each component
for k = 1:pc
P1 = rand(X_c, 1); T1 = X * P1; d0 = T1’*T1;
P1 = (T1′ * X/(T1′ * T1))’; P1 = P1/norm(P1); T1 = X * P1; d = T1′ * T1;
О вычислении PCA с помощью надстройки Chemometrics рассказано в пособии Проекционные методы в системе Excel.
5.4 PLS1
Самым популярным способом для многомерной калибровки является метод проекции на латентные структуры (PLS). В этом методе проводится одновременная декомпозиция матрицы предикторов X и матрицы откликов Y:
Детальное описание метода PLS приведено в этой книге Для построения PLS1 счетов и нагрузок, используется рекуррентный алгоритм. Сначала исходные матрицы X и Y центрируют
и они превращаются в матрицу E0 и вектор f0, a=0. Далее к ним применяет следующий алгоритм
После вычисления очередной (a-ой) компоненты, полагаем ta=t и pa=p. Для получения следующей компоненты надо вычислить остатки Ea+1 = Ea – t p t и применить к ним тот же алгоритм, заменив индекс a на a+1.
Приведем код этого алгоритма, взятый из книги
function [w, t, u, q, p] = pls(x, y) %PLS: calculates a PLS component. %The output vectors are w, t, u, q and p. % % Choose a vector from y as starting vector u. u = y(:, 1); |
% The convergence criterion is set very high.
kri = 100;
% Each starting vector u is saved as uold.
uold = u; w = (u’ * x)’; w = w/norm(w);
t = x * w; q = (t’ * y)’/(t’ * t);
u = y * q/(q’ * q);
% After convergence, calculate p.
p = (t’ * x)’/(t’ * t);
О вычислении PLS1 с помощью надстройки Chemometrics Add In рассказано в пособии Проекционные методы в системе Excel.
5.5 PLS2
Для PLS2 алгоритм выглядит следующим образом. Сначала исходные матрицы X и Y преобразуют (как минимум – центрируют; см. разделе 4.3), и они превращаются в матрицы E0 и F0, a=0. Далее к ним применяет следующий алгоритм.
Приведем код, которой также заимствован из из книги.
function [W, T, U, Q, P, B, SS] = plsr(x, y, a) % PLS: calculates a PLS component. % The output matrices are W, T, U, Q and P. % B contains the regression coefficients and SS the sums of % squares for the residuals. % a is the numbers of components. % % For a components: use all commands to end. |
for i=1:a
% Calculate the sum of squares. Use the function ss.
sx = [sx; ss(x)];
sy = [sy; ss(y)];
% Use the function pls to calculate one component.
[w, t, u, q, p] = pls(x, y);
% Save the vectors in matrices.
W = [W w];
T = [T t];
U = [U u];
Q = [Q q];
P = [P p];
end;
% Calculate the regression coefficients after the loop.
B=W*inv(P’*W)*Q’;
% Add the final residual SS to the sum of squares vectors.
sx=[sx; ss(x)];
sy=[sy; ss(y)];
% Make a matrix of the ss vectors for X and Y.
SS = [sx sy];
function [ss] = ss(x)
%SS: calculates the sum of squares of a matrix X.
%
ss=sum(sum(x. * x));
%End of ss
О вычислении PLS2 с помощью надстройки Chemometrics Add In рассказано в пособии Проекционные методы в системе Excel.
Заключение
MatLab это это очень популярный инструмент для анализа данных. По данным опроса, его используют до трети всех исследователей, тогда как программа the Unsrambler применяется только 16% ученых. Главным недостатком MatLab являются его высокая цена. Кроме того, MatLab хорош для рутинных расчетов. Отсутствие интерактивности делает его неудобным при выполнении поисковых, исследовательских расчетов для новых, неисследованных массивов данных.