Контакты

Matlab обзор программы. Как устроен современный MATLAB? Простейшие арифметические действия

). Среди средств общего назначения, используемых в хемометрике, особое место занимает пакет MatLab. Его популярность необычайно высока. Это объясняется тем, что MatLab является мощным и универсальным обработки многомерных данных. Сама структура пакета делает его удобным средством для проведения матричных вычислений. Спектр проблем, исследование которых может, осуществлено при помощи MatLab, охватывает: матричный анализ, обработку сигналов и изображений, нейронные сети и многие другие. MatLab - это язык высокого уровня, имеющий открытый код, что дает возможность опытным пользователям разбираться в запрограммированных алгоритмах. Простой встроенный язык программирования позволяет легко создавать собственные алгоритмы. За много лет использования MatLab создано огромное количество функций и ToolBox (пакетов специализированных средств). Самым популярным является пакет PLS ToolBox компании Eigenvector Research, Inc .

1. Базовые сведения

1.1. Рабочая среда MatLab

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

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

Рабочая среда MatLab 6.х содержит следующие элементы:

    панель инструментов с кнопками и раскрывающимся списком;

    окно с вкладками Launch Pad и Workspace , из которого можно получить доступ к различным модулям ToolBox и к содержимому рабочей среды;

    окно с вкладками Command History и Current Directory , предназначенное для просмотра и повторного вызова ранее введенных команд, а также для установки текущего каталога;

    командное окно, в котором находится приглашение к вводу » и мигающий вертикальный курсор;

    строку состояния.

Если в рабочей среде MatLab 6.х отсутствуют некоторые окна, приведенные на рисунке, то следует в меню View выбрать соответствующие пункты: Command Window , Command History , Current Directory , Workspase , Launch Pad .

Команды следует набирать в командном окне. Символ » , обозначающий приглашение к вводу командной строки, набирать не нужно. Для просмотра рабочей области удобно использовать полосы скроллинга или клавиши Home , End , для перемещения влево или вправо, и PageUp , PageDown для перемещения вверх или вниз. Если вдруг после перемещения по рабочей области командного окна пропала командная строка с мигающим курсором, просто нажмите Enter .

Важно помнить, что набор любой команды или выражения должен заканчиваться нажатием на Enter , для того, чтобы программа MatLab выполнила эту команду или вычислила выражение.

1.2. Простейшие вычисления

Наберите в командной строке 1+2 и нажмите Enter . В результате в командном окне MatLab отображается следующее:

Рис. 2 Графическое представление метода главных компонент

Что сделала программа MatLab? Сначала она вычислила сумму 1+2 , затем записала результат в специальную переменную ans и вывела ее значение, равное 3 , в командное окно. Ниже ответа расположена командная строка с мигающим курсором, обозначающая, что MatLab готов к дальнейшим вычислениям. Можно набирать в командной строке новые выражения и находить их значения. Если требуется продолжить работу с предыдущим выражением, например, вычислить (1+2)/4.5 , то проще всего воспользоваться уже имеющимся результатом, который хранится в переменной ans . Наберите ans/4.5 (при вводе десятичных дробей используется точка) и нажмите Enter , получается

Рис. 3 Графическое представление метода главных компонент

1.3. Эхо команд

Выполнение каждой команды в MatLab сопровождается эхом. В приведенном выше примере - это ответ ans = 0.6667 . Часто эхо затрудняет восприятие работы программы и тогда его можно отключить. Для этого команда должна завершаться символом точка с запятой. Например

Рис. 4 Пример ввода функции ScoresPCA

1.4. Сохранение рабочей среды. MAT файлы

Самый простой способ сохранить все значения переменных - использовать в меню File пункт Save Workspase As. При этом появляется диалоговое окно Save Workspase Variables , в котором следует указать каталог и имя файла. По умолчанию предлагается сохранить файл в подкаталоге work основного каталога MatLab. Программа сохранит результаты работы в файле с расширением mat . Теперь можно закрыть MatLab. В следующем сеансе работы для восстановления значений переменных следует открыть этот сохраненный файл при помощи подпункта Open меню File . Теперь все переменные, определенные в прошлом сеансе, опять стали доступными. Их можно использовать во вновь вводимых командах.

1.5. Журнал

В MatLab имеется возможность записывать исполняемые команды и результаты в текстовый файл (вести журнал работы), который потом можно прочитать или распечатать из текстового редактора. Для начала ведения журнала служит команда diary . В качестве аргумента команды diary следует задать имя файла, в котором будет храниться журнал работы. Набираемые далее команды и результаты их исполнения будут записываться я в этот файл, например последовательность команд

производит следующие действия:

    открывает журнал в файле exampl-1.txt ;

    производит вычисления;

    сохраняет все переменные в MAT файле work-1.mat ;

    сохраняет журнал в файле exampl-1.txt в подкаталоге work корневого каталога MatLab и закрывает MatLab;

Посмотрите содержимое файла exampl-1.txt в каком-нибудь текстовом редакторе. В файле окажется следующий текст:

a1=3;
a2=2.5;
a3=a1+a2

Save work-1
quit

1.6. Система помощи

Окно справки MatLab появляется после выбора опции Help Window в меню Help или нажатием кнопки вопроса на панели инструментов. Эта же операция может быть выполнена при наборе команды helpwin . Для вывода окна справки по отдельным разделам, наберите helpwin topic . Окно справки предоставляет Вам такую же информацию, как и команда help , но оконный интерфейс обеспечивает более удобную связь с другими разделами справки. Используя адрес Web-страницы фирмы Math Works , вы можете выйти на сервер фирмы и получить самую последнюю информацию по интересующим вас вопросам. Вы можете ознакомиться с новыми программными продуктами или найти ответ на возникшие проблемы на странице технической поддержки .

2. Матрицы

2.1. Скаляры, векторы и матрицы

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

Заметим, что MatLab различает заглавные и прописные буквы, так что p и P - это разные переменные. Для ввода массивов (векторов или матриц) их элементы заключают в квадратные скобки. Так для ввода вектора-строки размером 1×3, используется следующая команда, в которой элементы строки отделяются пробелами или запятыми.

При вводе вектора-столбца элементы разделяют точкой с запятой. Например,

Вводить небольшие по размеру матрицы удобно прямо из командной строки. При вводе матрицу можно рассматривать как вектор-столбец, каждый элемент которого является вектором-строкой.

или матрицу можно трактовать как вектор строку, каждый элемент которой является вектором-столбцом.

2.2. Доступ к элементам

Доступ к элементам матриц осуществляется при помощи двух индексов - номеров строки и столбца, заключенных в круглые скобки, например команда B(2,3) выдаст элемент второй строки и третьего столбца матрицы B . Для выделения из матрицы столбца или строки следует в качестве одного из индексов использовать номер столбца или строки матрицы, а другой индекс заменить двоеточием. Например, запишем вторую строку матрицы A в вектор z

Также можно осуществлять выделение блоков матриц при помощи двоеточия. Например, выделим из матрицы P блок отмеченный цветом

Если необходимо посмотреть переменные рабочей среды, в командной строке необходимо набрать команду whos .

Видно, что в рабочей среде содержатся один скаляр (p ), четыре матрицы (A, B, P, P1 ) и вектор-строка (z ).

2.3. Основные матричные операции

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

а умножение - знаком звездочка * . Введем матрицу размером 3×2

Умножение матрицы на число тоже осуществляется при помощи звездочки, причем умножать на число можно как справа, так и слева. Возведение квадратной матрицы в целую степень производится с использованием оператора ^

Проверьте полученный результат, умножив матрицу Р саму на себя.

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

Перед тем как настраивать Excel на совместную работу с MatLab, следует убедиться, что Excel Link входит в установленную версию MatLab. В подкаталоге exclink основного каталога MatLab или подкаталога toolbox должен находиться файл с надстройкой excllink.xla . Запустите Excel и в меню Tools выберите пункт Add-ins . Откроется диалоговое окно, содержащее информацию о доступных в данный момент надстройках. Используя кнопку Browse , укажите путь к файлу excllink.xla . В списке надстроек диалогового окна появится строка Excel Link 2.0 for use with MatLab с установленным флагом. Нажмите OK , требуемая надстройка добавлена в Excel.

Обратите внимание, что в Excel теперь присутствует панель инструментов Excel Link , содержащая три кнопки: putmatrix , getmatrix , evalstring . Эти кнопки реализуют основные действия, требуемые для осуществления взаимосвязи между Excel и MatLab - обмен матричными данными, и выполнение команд MatLab из среды Excel. При повторных запусках Excel надстройка excllink.xla подключается автоматически.

Согласованная работа Excel и MatLab требует еще нескольких установок, которые приняты в Excel по умолчанию (но могут быть изменены). В меню Tools перейдите к пункту Options , открывается диалоговое окно Options . Выберите вкладку General и убедитесь, что флаг R1C1 reference style выключен, т.е. ячейки нумеруются A1 , A2 и т.д. На вкладке Edit должен быть установлен флаг Move selection after Enter .

3.2. Обмен данными между MatLab и Excel

Запустите Excel, проверьте, что проделаны все необходимые настройки так, как описано в предыдущем разделе (MatLab должен быть закрыт). Введите в ячейки с A1 по C3 матрицу, для отделения десятичных знаков используйте точку в соответствии с требованиями Excel.

Выделите на листе данные ячейки и нажмите кнопку putmatrix , появляется окно Excel с предупреждением о том, что MatLab не запущен. Нажмите OK , дождитесь открытия MatLab.

Появляется диалоговое окно Excel со строкой ввода, предназначенной для определения имени переменной рабочей среды MatLab, в которую следует экспортировать данные из выделенных ячеек Excel. Введите к примеру, М и закройте окно при помощи кнопки OK . Перейдите к командному окну MatLab и убедитесь, что в рабочей среде создалась переменная М , содержащая массив три на три:

Проделайте некоторые операции в MatLab с матрицей М , например, обратите ее.

Вызов inv для обращения матрицы, как и любой другой команды MatLab можно осуществить прямо из Excel. Нажатие на кнопку evalstring , расположенную на панели Excel Link , приводит к появлению диалогового окна, в строке ввода которого следует набрать команду MatLab

IM=inv(M) .

Результат аналогичен полученному при выполнении команды в среде MatLab.

Вернитесь в Excel, сделайте текущей ячейку A5 и нажмите кнопку getmatrix . Появляется диалоговое окно со строкой ввода, в которой требуется ввести имя переменной, импортируемой в Excel. В данном случае такой переменной является IM . Нажмите OK , в ячейки с A5 по A7 введены элементы обратной матрицы.

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

Вышеописанный подход является самым простым способом обмена информацией между приложениями - исходные данные содержатся в Excel, затем экспортируются в MatLab, обрабатываются там некоторым образом и результат импортируется в Excel. Пользователь переносит данные при помощи кнопок панели инструментов Excel Link . Информация может быть представлена в виде матрицы, т.е. прямоугольной области рабочего листа. Ячейки, расположенные в строку или столбец, экспортируются, соответственно, в векторы -строки и векторы -столбцы MatLab. Аналогично происходит и импорт векторов-строк и векторов-столбцов в Excel.

4. Программирование

4.1. М-файлы

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

Раскройте меню File основного окна MatLab и в пункте New выберите подпункт M-file . Новый файл открывается в окне редактора M-файлов, которое изображено на рисунке.

М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files ), содержащие последовательность команд, и файл-функции, (Function M-Files ), в которых описываются функции, определяемые пользователем.

4.2. Файл-программа

Наберите в редакторе команды, приводящие к построению двух графиков на одном графическом окне

Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug . На экране появится графическое окно Figure 1 , содержащее графики функций.

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

Очень удобной возможностью, предоставляемой редактором М-файлов, является выполнение части команд. Закройте графическое окно Figure 1 . Выделите при помощи мыши, удерживая левую кнопку, или клавишами со стрелками при нажатой клавише Shift , первые четыре команды и выполните их из пункта Text . Обратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным: командам. Запомните, что для выполнения части команд их следует выделить и нажать клавишу F9 .

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

Открытие существующего М-файла производится при помощи пункта Open меню File рабочей среды, либо редактора М-файлов.

4.3. Файл-функция

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

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

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списка входных и выходных аргументов. В примере имя функции centering , один входной аргумент X и один выходной - Xc. После заголовка следуют комментарии, а затем - тело функции (оно в данном примере состоит из двух строк), где и вычисляется ее значение. Важно, что вычисленное значение записывается в Xc . Не забудьте поставить точку с запятой для предотвращения вывода лишней информации на экран. Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название centering . Не изменяйте его, сохраните файл функцию в файле с предложенным именем!

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

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

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

4.4 Создание графика

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

Функция plot имеет различные формы, связанные с входными параметрами, например plot(y) создает кусочно-линейный график зависимости элементов y от их индексов. Если в качестве аргументов заданы два вектора, то plot(x,y) создаст график зависимости y от x . Например, для построения графика функции sin в интервале от 0 до 2π, сделаем следующее

Программа построила график зависимости, который отображается в окне Figure 1

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

Команда hold on позволяет добавлять кривые на существующий график. Функция subplot позволяет выводить множество графиков в одном окне

4.5 Печать графиков

Пункт Print в меню File и команда print печатают графику MatLab. Меню Print вызывает диалоговое окно, которое позволяет выбирать общие стандартные варианты печати. Команда print обеспечивает большую гибкость при выводе выходных данных и позволяет контролировать печать из М-файлов. Результат может быть послан прямо на принтер, выбранный по умолчанию, или сохранен в заданном файле.

5. Примеры программ

В этом разделе приведены наиболее употребительные алгоритмы, используемые при анализе многомерных данных. Рассмотрены как простейшие методы преобразования данных центрирование и шкалирование, так и алгоритмы для анализа данных - PCA, PLS.

5.1. Центрирование и шкалирование

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

function Xs = scaling(X)
% scaling: the output matrix is Xs
% matrix X must be centered

Xs = X * inv(diag(std(X)));

%end of scaling

5.2. SVD/PCA

Наиболее популярным способом сжатия данных в многомерном анализе является метод главных компонент (PCA) . С математической точки зрения PCA - это декомпозиция исходной матрицы X , т.е. представление ее в виде произведения двух матриц T и P

X = TP t + E

Матрица T называется матрицей счетов (scores) , матрица - матрицей остатков.

Простейший способ найти матрицы T и P - использовать SVD разложение через стандартную функцию MatLab, называемую svd .

function = pcasvd(X)

Svd(X);
T = U * D;
P = V;

%end of pcasvd

5.3 PCA/NIPALS

Для построения PCA счетов и нагрузок, используется рекуррентный алгоритм NIPALS , который на каждом шагу вычисляет одну компоненту. Сначала исходная матрица X преобразуется (как минимум – центрируется; см. ) и превращается в матрицу E 0 , a =0. Далее применяют следующий алгоритм.

t 2. p t = t t E a / t t t 3. p = p / (p t p ) ½ 4. t = E a p / p t p 5. Проверить сходимость, если нет, то идти на 2

После вычисления очередной (a -ой) компоненты, полагаем t a =t и p a =p E a +1 = E a t p a на a +1.

Код алгоритма NIPALS может быть написан и самими читателями, в данном же пособии авторы приводят свой вариант. При расчете PCA, можно вводить число главных компонент (переменная numberPC ). Если же не известно, сколько необходимо компонент, следует написать в командной строке = pcanipals (X) и тогда программа задаст число компонент равным наименьшему из показателей размерности исходной матрицы X .

function = pcanipals(X, numberPC)

% calculation of number of components
= size(X); P=; T=;

If lenfth(numberPC) > 0
pc = numberPC{1};
elseif (length(numberPC) == 0) & X_r < X_c
pc = X_r;
else
pc = X_c;
end;

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;

While d - d0 > 0.0001;
P1 = (T1" * X/(T1" * T1)); P1 = P1/norm(P1); T1 = X * P1; d0 = T1"*T1;
P1 = (T1" * X/(T1" * T1)); P1 = P1/norm(P1); T1 = X * P1; d = T1"*T1;
end

X = X - T1 * P1; P = cat(1, P, P1"); T = ;
end

О вычислении PCA с помощью надстройки Chemometrics рассказано в пособии

5.4 PLS1

Самым популярным способом для многомерной калибровки является метод проекции на латентные структуры (PLS). В этом методе проводится одновременная декомпозиция матрицы предикторов X и матрицы откликов Y :

X =TP t +E Y =UQ t +F T =XW (P t W ) –1

Проекция строится согласованно – так, чтобы максимизировать корреляцию между соответствующими векторами X -счетов t a и Y -счетов u a . Если блок данных Y включает несколько откликов (т.е. K >1), можно построить две проекции исходных данных – PLS1 и PLS2. В первом случае для каждого из откликов y k строится свое проекционное подпространство. При этом и счета T (U ) и нагрузки P (W , Q ) , зависят от того, какой отклик используется. Этот подход называется PLS1. Для метода PLS2 строится только одно проекционное пространство, которое является общим для всех откликов.

Детальное описание метода PLS приведено в этой книге Для построения PLS1 счетов и нагрузок, используется рекуррентный алгоритм. Сначала исходные матрицы X и Y центрируют

= mc(X);
= mc(Y);

и они превращаются в матрицу E 0 и вектор f 0 , a =0. Далее к ним применяет следующий алгоритм

1. w t = f a t E a 2. w = w / (w t w ) ½ 3. t = E a w 4. q = t t f a / t t t 5. u = q f a / q 2 6. p t = t t E a / t t t

После вычисления очередной (a -ой) компоненты, полагаем t a =t и p a =p . Для получения следующей компоненты надо вычислить остатки E a +1 = E a t p t и применить к ним тот же алгоритм, заменив индекс a на a +1.

Приведем код этого алгоритма, взятый из книги

function = 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;

% The commands from here to end are repeated until convergence.
while (kri > 1e - 10)

% 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);

% The convergence criterion is the norm of u-uold divided by the norm of u.
kri = norm(uold - u)/norm(u);
end;

% After convergence, calculate p.
p = (t" * x)"/(t" * t);

% End of pls

О вычислении PLS1 с помощью надстройки Chemometrics Add In рассказано в пособии Проекционные методы в системе Excel.

5.5 PLS2

Для PLS2 алгоритм выглядит следующим образом. Сначала исходные матрицы X и Y преобразуют (как минимум – центрируют; см. ), и они превращаются в матрицы E 0 и F 0 , a =0. Далее к ним применяет следующий алгоритм.

1. Выбрать начальный вектор u 2. w t = u t E a 3. w = w / (w t w ) ½ 4. t = E a w 5. q t = t t F a / t t t 6. u = F a q / q t q 7. Проверить сходимость, если нет, то идти на 2 8. p t = t t E a / t t t

После вычисления очередной (a -ой) PLS2 компоненты надо положить: t a =t , p a =p, w a =w , u a =u и q a =q . Для получения следующей компоненты надо вычислить остатки E a +1 = E a t p t и F a +1 = F a tq t и применить к ним тот же алгоритм, заменив индекс a на a +1.

Приведем код, которой также заимствован из из книги .

function = 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 = ;
sy = ;

% Use the function pls to calculate one component.
= pls(x, y);

% Calculate the residuals.
x = x - t * p";
y = y - t * q";

% Save the vectors in matrices.
W = ;
T = ;
U = ;
Q = ;
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=;
sy=;

% Make a matrix of the ss vectors for X and Y.
SS = ;

%Calculate the fraction of SS used.
= size(SS);
tt = (SS * diag(SS(1,:).^(-1)) - ones(a, b)) * (-1)

%End of plsr

function = 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 хорош для рутинных расчетов. Отсутствие интерактивности делает его неудобным при выполнении поисковых, исследовательских расчетов для новых, неисследованных массивов данных.

Обзор возможностей

MatLab от англ. Matrix Laboratory - одновременно и пакет прикладных программ для решения задач инженерно-технических вычислений, и одноимённыйязык программирования, используемый в этом пакете.

MаtLab адаптирован для использования на большинстве современных операционных систем, включая Linux, Mac OS, Solaris и Microsoft Windows.

MATLAB как язык программирования был разработан Кливом Моулером (англ. Cleve Moler) в конце 1970-х годов. Целью разработки служила задача дать студентам факультета возможность использования программных библиотек Linpack и EISPACK без необходимости изучения Фортрана. Позднее Моулер в сотрудничестве с Дж. Литтлом и С. Бангертом переписали MATLAB на C и основали в 1984 компаниюThe MathWorks для дальнейшего развития. Первоначально MATLAB предназначался для проектирования систем управления, но быстро завоевал популярность во многих других научных и инженерных областях. Он также широко использовался и в образовании, в частности, для преподавания линейной алгебры и численных методов.

Современный MatLab - это интерактивная система, в которой основным элементом данных является массив. Это позволяет программно реализовывать численные методы, в которых интенсивно используются действия над матрицами и векторами, в несколько раз быстрее, чем при написании аналогичных программ на «скалярных» языках программирования подобных С, C++, Fortran и проч.

Важным преимуществом MatLab является открытость кода функций, что даёт возможность опытным пользователям изменять код, совершенствуя его или адаптируя под свои задачи. Как язык программирования MatLab сочетает в себе простоту Fortran и гибкость С, хотя с формальной точки зрения MatLab является интерпретатором. Следует отметить, что API MatLab реализует связь с программами, написанными на С и Fortran, что позволяет вызывать функции MatLab из С\Fortran кода и наоборот.

MatLab обладает широкими возможностями визуализации 2-х и 3-хмерных данных. Графические функции высокого уровня и графический интерфейс позволяют сократить до минимума усилия пользователей, при том обеспечивая качественное изображение. Имеется и доступ к низкоуровневым функциям для «продвинутых» пользователей, что ещё больше расширяет графические возможности системы.

    Основные возможности пакета Matlab

    Наборы инструментов пакета Matlab

    Структура и рабочие окна пакета Matlab

    Работа в командном режиме

    Основные элементы языка программирования Matlab

1. Основные возможности пакета Matlab

MATLAB (сокращение от англ. «Matrix Laboratory») - пакет прикладных программ для решения задач технических вычислений и одноименный язык программирования, используемый в этом пакете. MATLAB используют более 1 000 000 инженерных и научных работников, он работает на большинстве современных операционных систем, включая Linux, Mac OS, Solaris (начиная с версии R2010b поддержка Solaris прекращена) и Microsoft Windows.

История. MATLAB как язык программирования был разработан Кливом Моулером (англ. Cleve Moler) в конце 1970-х годов когда он был деканом факультета компьютерных наук в Университете Нью-Мексико. Целью разработки служила задача дать студентам факультета возможность использования программных библиотек Linpack и EISPACK без необходимости изучения Фортрана. Вскоре новый язык распространился среди других университетов и был с большим интересом встречен учеными, работающими в области прикладной математики. До сих пор в Интернете можно найти версию 1982 года, написанную на Фортране, распространяемую с открытым исходным кодом. Инженер Джон Литтл (англ. John N. (Jack) Little) познакомился с этим языком во время визита Клива Моулера в Стэндфордский университет в 1983 году. Поняв, что новый язык обладает большим коммерческим потенциалом, он объединился с Кливом Моулером и Стивом Бангертом (англ. Steve Bangert). Совместными усилиями они переписали MATLAB на C и основали в 1984 компанию The MathWorks для дальнейшего развития. Эти переписанные на С библиотеки долгое время были известны под именем JACKPAC. Первоначально MATLAB предназначался для проектирования систем управления (основная специальность Джона Литтла), но быстро завоевал популярность во многих других научных и инженерных областях. Он также широко использовался и в образовании, в частности, для преподавания линейной алгебры и численных методов.

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

Программы, написанные на MATLAB, бывают двух типов - функции и скрипты .

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

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

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

Основной особенностью языка MATLAB являются его широкие возможности по работе с матрицами, которые создатели языка выразили в лозунге «думай векторно» (англ. Think vectorized ).

Применение MATLAB.

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

    Матрицы и линейная алгебра - алгебра матриц, линейные уравнения, собственные значения и вектора, сингулярности, факторизация матриц и другие.

    Многочлены и интерполяция - корни многочленов, операции над многочленами и их дифференцирование, интерполяция и экстраполяция кривых и другие.

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

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

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

    Разреженные матрицы - специальный класс данных пакета MATLAB, использующийся в специализированных приложениях.

    Целочисленная арифметика - выполнение операций целочисленной арифметики в среде MATLAB.

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

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

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

Независимые приложения . Программы MATLAB, как консольные, так и с графическим интерфейсом пользователя, могут быть собраны с помощью компоненты MATLAB Compiler в независимые от MATLAB исполняемые приложения или динамические библиотеки, для запуска которых на других компьютерах, однако, требуется установка свободно распространяемой среды MATLAB Compiler Runtime (MCR).

Внешние интерфейсы. Пакет MATLAB включает различные интерфейсы для получения доступа к внешним подпрограммам, написанным на других языках программирования, данным, клиентам и серверам, общающимся через технологии Component Object Model или Dynamic Data Exchange, а также периферийным устройствам, которые взаимодействуют напрямую с MATLAB. Многие из этих возможностей известны под названием MATLAB API.

COM. Пакет MATLAB предоставляет доступ к функциям, позволяющим создавать, манипулировать и удалять COM-объекты (как клиенты, так и серверы). Поддерживается также технология ActiveX. Все COM-объекты принадлежат к специальному COM-классу пакета MATLAB. Все программы, имеющие функции контроллера автоматизации (англ.Automation controller ) могут иметь доступ к MATLAB как к серверу автоматизации (англ.Automation server ).

.NET. Пакет MATLAB в Microsoft Windows предоставляет доступ к программной платформе.NET Framework. Имеется возможность загружать.NET сборки (Assemblies) и работать с объектами.NET классов из среды MATLAB. В версии MATLAB 7.11 (R2010b) поддерживается.NET Framework версий 2.0, 3.0, 3.5 и 4.0.

DDE. Пакет MATLAB содержит функции, которые позволяют ему получать доступ к другим приложениям среды Windows, равно как и этим приложениям получать доступ к данным MATLAB, посредством технологии динамического обмена данными (DDE). Каждое приложение, которое может быть DDE-сервером, имеет свое уникальное идентификационное имя. Для MATLAB это имя -Matlab .

Веб-сервисы. В MATLAB существует возможность вызывать методы веб-сервисов. Специальная функция создает класс, основываясь на методах API веб-сервиса.

MATLAB взаимодействует с клиентом веб-сервиса с помощью принятия от него посылок, их обработки и посылок ответа. Поддерживаются следующие технологии: Simple Object Access Protocol (SOAP) и Web Services Description Language (WSDL).

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

MEX-файлы. Пакет MATLAB включает интерфейс взаимодействия с внешними приложениями, написанными на языках C и Фортран. Осуществляется это взаимодействие через MEX-файлы. Существует возможность вызова подпрограмм, написанных на C или Фортране из MATLAB, как будто это встроенные функции пакета. MEX-файлы представляют собой динамически подключаемые библиотеки, которые могут быть загружены и исполнены интерпретатором, встроенным в MATLAB. MEX-процедуры имеют также возможность вызывать встроенные команды MATLAB.

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

Кроме того, в MATLAB имеется возможность получить доступ к его встроенным функциям через C-интерфейс, что позволяет использовать функции пакета во внешних приложениях, написанных на C. Эта технология в MATLAB называется C Engine .

Альтернативные пакеты. Существует большое количество программных пакетов для решения задач численного анализа. Многие из таких пакетов являются свободным программным обеспечением.

Совместимые с MATLAB на уровне языка программирования :

Близкие по функциональности :

    APLи его потомки: напримерJ

    Python, при использовании пакета программPython(x,y), а также с такими библиотеками какNumPy,SciPyиmatplotlibреализует сходные возможности.

    IDL(англ.Interactive Data Language , интерактивный язык описания данных), когда-то был коммерческим конкурентом MATLAB, сейчас остается серьезным конкурентом во многих прикладных областях, хотя его доля на рынке программных продуктов для численного анализа резко упала.

    Fortress, язык программирования, созданный Sun Microsystems, является наследником Фортрана, но с ним не совместим.

    При необходимости разработки больших проектов для численного анализа возможно использование языков программирования общего назначения, поддерживающих статическую типизацию и модульную структуру. Примерами могут служить Modula-3,Haskell,Ада,Java. При этом рекомендуется использовать известные в научно-инженерной среде специализированные библиотеки.

2. Наборы инструментов пакета Matlab

В Matlab важная роль отводится специализированным группам программ, называемых toolboxes . Toolboxes - это всесторонняя коллекция функций (m-файлов), написанных на языке MATLAB для решения определенного класса задач. Компания Mathworks поставляет наборы инструментов, которые используются во многих областях, включая следующие:

    Цифровая обработка сигналов, изображений и данных : DSP Toolbox , Image Processing Toolbox , Wavelet Toolbox , Communication Toolbox , Filter Design Toolbox - наборы функций, позволяющих решать широкий спектр задач обработки сигналов, изображений, проектирования цифровых фильтров и систем связи.

    Системы управления : Control Systems Toolbox , µ-Analysis and Synthesis Toolbox , Robust Control Toolbox , System Identification Toolbox , LMI Control Toolbox , Model Predictive Control Toolbox , Model-Based Calibration Toolbox - наборы функций, облегчающих анализ и синтез динамических систем, проектирование, моделирование и идентификацию систем управления, включая современные алгоритмы управления, такие как робастное управление, H∞-управление, ЛМН-синтез,µ-синтези другие.

    Финансовый анализ : GARCH Toolbox , Fixed-Income Toolbox , Financial Time Series Toolbox , Financial Derivatives Toolbox , Financial Toolbox , Datafeed Toolbox - наборы функций, позволяющие быстро и эффективно собирать, обрабатывать и передавать различную финансовую информацию.

    Анализ и синтез географических карт, включая трехмерные : Mapping Toolbox .

    Сбор и анализ экспериментальных данных : Data Acquisition Toolbox , Image Acquisition Toolbox , Instrument Control Toolbox , Link for Code Composer Studio - наборы функций, позволяющих сохранять и обрабатывать данные, полученные в ходе экспериментов, в том числе в реальном времени. Поддерживается широкий спектр научного и инженерного измерительного оборудования.

    Визуализация и представление данных : Virtual Reality Toolbox - позволяет создавать интерактивные миры и визуализировать научную информацию с помощью технологий виртуальной реальности и языка VRML.

    Средства разработки : MATLAB Builder for COM , MATLAB Builder for Excel , MATLAB Builder for NET , MATLAB Compiler , Filter Design HDL Coder - наборы функций, позволяющих создавать независимые приложения из среды MATLAB.

    Взаимодействие с внешними программными продуктами : MATLAB Report Generator , Excel Link , Database Toolbox , MATLAB Web Server , Link for ModelSim - наборы функций, позволяющие сохранять данные таким образом, чтобы другие программы могли с ними работать.

    Базы данных : Database Toolbox - инструменты работы с базами данных.

    Научные и математические пакеты : Bioinformatics Toolbox , Curve Fitting Toolbox , Fixed-Point Toolbox , Fuzzy Logic Toolbox , Genetic Algorithm and Direct Search Toolbox , OPC Toolbox , Optimization Toolbox , Partial Differential Equation Toolbox , Spline Toolbox , Statistic Toolbox , RF Toolbox - наборы специализированных математических функций, позволяющие решать широкий спектр научных и инженерных задач, включая разработку генетических алгоритмов, решения задач в частных производных, целочисленные проблемы, оптимизацию систем и другие.

    Нейронные сети : Neural Network Toolbox - инструменты для синтеза и анализа нейронных сетей.

    Нечеткая логика : Fuzzy Logic Toolbox - инструменты для построения и анализа нечетких множеств.

    Символьные вычисления : Symbolic Math Toolbox - инструменты для символьных вычислений с возможностью взаимодействия с символьным процессором программы Maple.

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

Имена изменены, все совпадения случайны.

Увертюра

Сразу оговорюсь, MATLAB - отличный инструмент. Отличный инструмент, который мы использовали не по назначению.

Взгляните на нашу компанию. Наша сфера деятельности - разработка ПО для промышленности и много чего еще. В компании работает около 100 человек, а я в этой компании - один из сотрудников, занимающийся разработкой алгоритмов. Есть у нас и Флагманский продукт, приносящий основную прибыль.

Флагманский продукт - бизнес-приложение. В нем много формочек и отчетиков, своя база данных и вычислительное ядро. Вычислительное ядро написано на C# без привлечения нативного кода. Такое решение было принято разработчиками осознанно. Parallel.For был так соблазнителен, а C++ все хотели забыть как страшный сон.



Реальность, как это нередко бывает, не прислушалась к нашим пожеланиям, и скорости C# вскоре стало не хватать. Другая проблема, что, как выяснилось, программисты, какой бы хороший код не писали, в линейной алгебре разбираются слабо.

Тогда наш Главный Алгоритмист предложил идею. Описание этой идеи и того, что из нее вышло и составляет суть данной статьи.

Идея

Идея была проста. Вместо того, чтобы платить зарплату одному умному программисту (который бы умел писать хороший код на C# и разбирался в тонкостях нашего «матана», а такого непросто найти), можно взять двух «полуумных». Первый будет писать прототипы на MATLAB, второй - переносить решение на C#.
MATLAB в таком случае преподносился как инструмент для документирования алгоритма. У такого решения были озвучены следующие преимущества:

  • MATLAB - простой язык, который опытный программист может выучить за 1 день
  • Все математики пишут на MATLAB

Стоит отметить, что ранее для документирования алгоритма использовался Mathcad, UML-диаграммы и даже просто лист бумаги.

С идеей спорили, ее не принимали. Но в итоге Главный Алгоритмист всех убедил, и была создана команда алгоритмистов, пишущих на матлабе. В эту команду вошел и я. В нашу команду также вошел Один Программист из числа разработчиков, который должен был бы, не думая, переносить наши матлаб-экзерсисы на C#.

Замечу, что кроме предложений отказаться от этой затеи, было и предложение использовать, по крайней мере, python+numpy. Хотя бы той причине, что сколько-нибудь значительного опыта разработки на MATLAB ни у кого не было (я раньше писал на python и R, остальные были математики и инженеры, использующие MATLAB как продвинутый калькулятор). Предложения, как можно понять, отклонили.

Прошел год...

Прошел год и сейчас уже можно подвести некоторые итоги:

  • Математики не умеют писать код. А в той лапше, что выходит из-под их пера не могут разобраться и они сами. Нет ни специфических знаний, ни опыта, ни культуры программирования
  • Раз уж мы отказались от схем и Mathcad, то появилось желание использовать для наших MATLAB программ реальные источники данных. В итоге мы немало времени занимались дублированием части функционала Флагманского продукта на Матлабе
  • Пока мы занимались программированием, времени на работу над собственно алгоритмом оставалось немного
  • MATLAB не подходит для разработки больших программ. По крайней мере, не подходит нам. Динамическая нестрогая типизация, медленные циклы, ооочень-медленный ООП (настолько, что пришлось частично отказаться от использования ООП), неполная поддержка разреженных матриц
  • Переносить код с MATLAB на C# непросто. Еще сложнее бэкпортировать рефакторинги и оптимизации
В результате мы не можем заранее оценить, сколько времени потребуется на реализацию той или иной фичи. Неделя или может быть месяц?

Вместо заключения

В самом начале статьи я немного слукавил, т.к. история продолжается до сих пор. Мы продолжаем писать на MATLAB, наш код продолжают переносить на C#. Хотя теперь уже все согласны, что у идеи Главного Алгоритмиста есть изъяны. Но менять уже что-либо слишком поздно.

А тем временем начинают поговаривать о дополнительном перекодировании решений с MATLAB уже на С++…

Размещено на http://www.allbest.ru/

Введение

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

Значительная часть функциональных возможностей приложения Matlab реализована через пакеты инструментов (английский термин toolbox ). Это коллекции функций и других утилит, предназначенных для решения узко специальных задач. Большинство пакетов имеют узкую, специфическую направленность. Приложение Matlab предназначено (в первую очередь) для выполнения числовых расчетов и визуализации получаемых результатов. Пакет содержит огромное число утилит для выполнения самых разных операций и позволяет создавать собственные полнофункциональные программные коды. Вместе с тем в Matlab могут выполняться и символьные расчеты. Этой цели служит встроенная в Matlab среда MuPAD. Таким образом, пользователю Matlab предоставляются широкие возможности не только в области числовых, но и символьных расчетов.

1. Простые вычисления

Под простыми, или пошаговыми, подразумевают вычисления, обычно выполняемые в командном окне приложения Matlab. Соответствующая инструкция или команда вводится в командном окне и затем выполняется. На рисунке 1 показано, как может выглядеть рабочее окно приложения Matlab при запуске. Интерес в данном случае представляет внутреннее окно (обычно в центре рабочего окна приложения) с названием Command Window - командное окно. В этом окне можно заметить индикатор строки ввода (в виде двойной стрелки >> ). Для ввода команды курсор необходимо переместить после индикатора строки ввода и ввести инструкцию для выполнения. Другими словами, в строку ввода командного окна необходимо ввести выражение и, нажав клавишу «Enter», запустить процесс вычисления этого выражения. Результат вычислений отображается внизу, под выполняемой командой. По умолчанию результат заносится в системную переменную «ans».

Рисунок 1

На рисунке 2 приведен пример вычисления нескольких арифметических выражений. В данном случае приведены результаты вычисления выражений 1+2*3 и (5^2-4)/7 соответственно. В первом случае, как и ожидалось, получаем в качестве результата значение 7, во втором - значение 3.

Рисунок 2

В качестве основных арифметических операторов в Matlab используются: оператор «+» для вычисления суммы, оператор «-» для вычисления разности, оператор «*» для вычисления произведения, оператор «/» для вычисления частного и оператор «^» для возведения в степень.

В общем смысле переменная - это область памяти, к которой можно обращаться по имени для получения значения, записанного в этой области, а также его изменения. В строго типизированных языках программирования (таких, как С++, Java или Pascal) для использования переменной необходимо предварительно ее объявить, указав при этом, к какому типу она относится. В Matlab ничего подобного делать не нужно. Переменной сразу можно присваивать значение. В качестве оператора присваивания используется знак равенства «=». Имя переменной, которой присваивается значение, указывается слева от оператора присваивания, а присваиваемое переменной значение справа от оператора присваивания. Значение, присваиваемое переменной, если речь идет о скалярных величинах, может быть числом или выражением, содержащим другие переменные. При этом необходимо, чтобы этим переменным ранее уже было присвоено значение. Пример использования скалярных переменных в пошаговых вычислениях приведен в рабочем документе на рисунке 3.

Рисунок 3

Первой командой x=0.5*sin(0.1) присваивается значение переменной «x». При этом использована встроенная функция Matlab «sin()» для вычисления синуса. Присвоенное в результате этой переменной значение отображается внизу под строкой ввода в формате:

«переменная =

значение»

Аналогично следующей командой y=0.3*cos(0.2) значение присваивается переменной «y». Здесь «cos()» - встроенная функция Matlab для вычисления косинуса. Обращаем также внимание читателя, что в качестве десятичного разделителя при вводе действительных чисел с дробной десятичной частью используется точка.

Наконец, командой z=(x^2+y^2)^(1/3) значение присваивается переменной «z». В выражение, определяющее значение переменной «z», входят переменные «x» и «y». Однако поскольку предварительно этим переменным были присвоены значения, ошибки не возникает и значение переменной «z» присваивается корректно.

Есть две базовые операции, которые достаточно полезны, особенно при большем объеме вычислений. Во-первых, в некоторых случаях нужно узнать, какие переменные рабочего пространства уже используются, и, во-вторых, иногда приходится, образно выражаясь, "удалять переменные с игрового поля" - то есть освобождать память, выделенную под эти переменные. Первая операция выполняется с помощью инструкции «whos». Если ввести в командную строку эту инструкцию и нажать клавишу «Enter», будет выведен список доступных в рабочем пространстве переменных с описанием их некоторых атрибутов.

Рисунок 4

В данном случае список состоит из четырех переменных: трех объявленных переменных пользователя «x», «y» и «z», и системной переменной «ans». Очистка пространства переменных осуществляется с помощью инструкции «clear», после которой, через пробел, указываются имена удаляемых переменных. На рисунке 5 представлен результат выполнения команды «clear x y», после которой выполнена команда «whos» для проверки списка переменных рабочего пространства.

Рисунок 5

Поскольку командой «clear x y» переменные «x» и «y» из рабочего пространства удалены, в списке переменных остались только переменная «z» и системная переменная «ans». Хотя значение переменной «z» присваивается на основе значений переменных «x» и «y», их удаление из рабочего пространства (или изменение их значения) назначение переменной «z» никак не влияет. Для удаления из рабочего пространства всех переменных используют инструкцию «clear» без указания переменных.

В предыдущих примерах использовались скалярные величины. С точки зрения основополагающей идеологии и технической реализации, скаляры в Matlab являются скорее экзотикой, чем обычным явлением. Дело в том, что в Matlab базовым типом данных являются матрицы (или массивы). В этом отношении скаляр "с точки зрения Matlab" (если можно так выразиться) является матрицей размера 1х Как известно, массивы можно индексировать, то есть для доступа к элементу массива указывается имя массива и его индекс (или индексы). Индексы указываются после имени матрицы (массива) в круглых скобках и разделяются запятыми. К скалярной переменной можно обращаться как по имени, так и указав индексы - в данном случае это (1,1). Пример обращения к скалярной величине в обычном режиме и с помощью пары единичных индексов показан на рисунке 6.

Командой «MyVar=10» переменной «MyVar» присваивается значение «10». Обращаться к переменной можно как по имени «MyVar», так и в режиме обращения к элементу матрицы «MyVar(1,1)». В обоих случаях в качестве результата возвращается значение скалярной переменной «MyVar».

Поскольку все переменные в Matlab априори рассматриваются как матрицы, никаких особых инструкций при объявлении матриц выполнять не нужно, за исключением того, что для матрицы необходимо задать значения ее элементов. Делается это достаточно просто. Список элементов матрицы заключается в квадратные скобки, списки значений элементов строки разделяются запятыми или пробелами, а списки значений разных столбцов разделяются точкой с запятой. Например, командой «A=» задается вектор-строка (матрица размеров 1х3) с элементами «1», «2» и «3» соответственно.

Рисунок 6

Командой «B=» задается вектор-столбец (матрица размеров 3х1) с элементами «4», «5» и «6». Наконец, командой «C=» задается матрица размерами 3х2 (3 строки и 2 столбца). Примеры выполнения этих команд приведены в документе на рисунке 7.

Рисунок 7

К элементам матрицы можно обращаться в обычном режиме, указав два индекса (номер строки и номер столбца, на пересечении которых находится элемент). Существует также способ обращения по обобщенному индексу . Обобщенный индекс элемента матрицы определяется как его порядковый номер, если отсчет начинать с верхнего левого элемента сверху вниз и от левого столбика к правому. Так, если матрица «X» имеет размеры «n» на «m», то к элементу с индексами «i» и «j» можно обратиться либо как «X(i,j)», либо как «X(n*(j-1)+i)». Хотя второй способ индексирования элементов может показаться несколько запутанным, он соответствует техническому способу индексации элементов матрицы в памяти, поэтому вычисления в таком случае выполняются быстрее. На рисунке 8 приведен фрагмент документа, в котором в различном режиме выполняется обращение к элементам матрицы «C», определенной ранее. В частности, командой «C(1)» получаем значение элемента «C(1,1)» (значение1). Инструкция «C(5)» является ссылкой на элемент «C(2,2)», значение которого равно «4».

Рисунок 8

2. Арифметические операции

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

Таблица 1 Основные арифметические операторы Matlab.

Оператор

Описание

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

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

Оператор умножения. Бинарный оператор. Если операндами являются скаляры, вычисляется произведение скалярных величин. Для операндов-матриц вычисляется матричное произведение. Если один операнд - матрица, а другой - скаляр, результатом является матрица, элементы которой вычисляются как произведение соответствующего элемента матрицы-операнда и скаляра.

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

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

Оператор левостороннего деления. Бинарный оператор. Операндами

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

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

Оператор поэлементного деления. Бинарный оператор. Операндами являются матрицы одинакового размера. Результатом является матрица, элементы которой вычисляются как частное от деления элементов матрицы - первого аргумента на соответствующие элементы матрицы - второго аргумента.

Оператор поэлементного левостороннего деления. Бинарный оператор. Операндами являются матрицы одинакового размера. Результатом является матрица того же размера. Выполняется деление элементов матрицы - второго операнда на соответствующие элементы матрицы - первого операнда.

Оператор вычисления сопряженной матрицы. Унарный оператор. Результатом является матрица, сопряженная к матрице-оператору.

Оператор транспонирования. Унарный оператор. Результатом является матрица, транспонированная к матрице-операнду.

Оператор поэлементного возведения в степень. Бинарный оператор.

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

Приведенные операторы практически полностью перекрывают весь спектр возможных операций, которые приходится выполнять с матрицами. Некоторые примеры использования арифметических операторов с матричными операндами приведены в табл. 2. Матрицы «A» и «B» при этом инициализированы в документе следующими командами (жирным шрифтом выделен ввод пользователя):

>> A=

>> B=[-1,1;3,-2]

Таблица 2 Примеры выполнения арифметических операций с матрицами.

Описание

Произведение матриц.

Вычисляется по правилам вычисления матриц в линейной алгебре.

Деление матриц.

Матрица A умножается на матрицу, обратную к матрице B.

Левостороннее умножение матриц.

Матрица, обратная к матрице A, умножается на матрицу B.

Поэлементное деление матриц.

Элементы матрицы A делятся на соответствующие элементы матрицы B.

Левостороннее поэлементное деление.

Элементы матрицы B делятся на соответствующие элементы матрицы A.

Поэлементное умножение матриц.

Элементы матрицы A умножаются на соответствующие элементы матрицы B.

Сумма матриц.

Вычисляется по правилам вычисления суммы матриц в линейной алгебре (складываются соответствующие элементы матриц A и B).

Разность матриц.

Вычисляется по правилам расчета разности двух матриц (от элементов матрицы A вычитаются соответствующие элементы матрицы B).

Транспонирование матрицы.

Результатом является матрица, транспонированная к матрице A.

Рисунок 9

Рисунок 10

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

3. Логические операторы и операторы сравнения

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

Обычно под логическими значениями подразумевают тип данных, переменные которого могут принимать два значения - истина и ложь («true» и «false» соответственно). В Matlab любое числовое значение, отличное от нуля, интерпретируется как истина (или «true»), а ненулевые значения интерпретируются как ложь (или «false»). Фактически, это есть правило перевода числовых значений в логические значения. Обратное преобразование выполняется по следующему правилу: логическое значение истина (или «true») преобразуется в числовое значение «1», а логическое значение ложь (или «false») преобразуется в числовое значение «0».

Если некоторой переменной присвоить в качестве значения «true» или «false», отображаемым будет соответственно значение «1» или «0».

Операндами для операторов сравнения выступают числовые значения. Это бинарные операторы. Если оба операнда - скаляры, сравнение выполняется по правилам сравнения чисел. При истинном соотношении возвращается значение «1», при ложном - значение «0». Если операндами являются матрицы одинаковых рангов, сравниваются соответствующие элементы матриц (по правилам сравнения числовых значений). Результатом является "логическая матрица": ее элементы равны 1 или 0 в зависимости от результата сравнения соответствующих элементов исходных матриц. Если одним операндом является скаляр, а другим - матрица, то выполняется сравнение каждого элемента матрицы со скаляром. Операторы сравнения перечислены в таблице 3. бинарный программирование компилирование

Таблица 3 Операторы сравнения Matlab.

Оператор

Описание

Оператор проверки на предмет равенства.

Оператор проверки значений операндов на предмет неравенства.

Оператор проверки того, что значение первого операнда больше значения второго операнда.

Оператор проверки того, что значение первого операнда меньше значения второго операнда.

Оператор проверки того, что значение первого операнда не меньше значения второго операнда.

Оператор проверки того, что значение первого операнда не больше значения второго операнда.

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

Таблица 4 Логические операторы Matlab.

Как в операциях сравнения, так и в логических операциях для элементов матриц или скаляров (в зависимости от типа операндов) возвращаются значения «0» (ложь) и «1» (истина).

4. Комплексные числа

В Matlab можно использовать не только действительные, но и комплексные числа. Ввод комплексных чисел в рабочей области выполняется в соответствии с правилами представления комплексных чисел. В качестве мнимой единицы можно использовать, на выбор, переменные «i» или «j», без какого бы то ни было предварительного объявления. Однако если переменной «i» или «j» присвоить числовое значение, соответствующую переменную в качестве мнимой единицы задействовать не получится.

>> z=1+2i

>> z+j

>> (2-4i)*(1+z)

12.0000 - 4.0000i

>> i * z

При вводе комплексного значения между мнимой частью и мнимой единицей оператор умножения можно не ставить. По умолчанию для отображения мнимой единицы используется символ «i» (хотя может вводиться как «j»). Существует ряд функций, облегчающих работу с комплексными числами. Среди них имеет смысл выделить функции «real()» и «imag()» для вычисления действительной и мнимой частей комплексного числа соответственно, функцию «conj()» для вычисления комплексно сопряженного числа, а также функцию «complex()», принимающую два аргумента (действительная и мнимая части), на основании которых создается комплексное число.

>> complex(3,-2)

3.0000 - 2.0000i

>> conj(ans)

3.0000 + 2.0000i

>> real(ans)

>> imag (2-4 i )

Комплексными могут быть не только скалярные величины, но и матрицы.

Рисунок 11

5. Оператор создания интервала значений

Достаточно популярным и часто используемым в Matlab является оператор "двоеточие", то есть «:». Существует несколько вариантов его использования. Рассмотрим самые общие. Для создания вектора-строки со значениями, равно распределенными в некотором интервале, оператор используют в следующем формате: «нижняя граница диапазона, оператор (то есть «:») и верхняя граница диапазона» - например: «x=a:b». При этом создается вектор-строка (для приведенной команды вектор записывается в переменную «x»). Первый элемент вектора равен нижней границе указанного диапазона (значение «a»). Шаг дискретности изменения значений элементов вектора равен единице. Значение последнего элемента определяется верхней границей указанного диапазона (в данном случае «b»). Так, командой «x=1:10» создается вектор-строка со значениями «1, 2, 3 и т.д. до 10» включительно (жирным шрифтом выделен ввод пользователя):

>> x=1:10

1 2 3 4 5 6 7 8 9 10

Рисунок 12

Если нужно создать вектор-строку с последовательностью значений и шагом дискретности, отличным от единицы, используют тот же оператор "двоеточие" (то есть «:»), но в несколько ином формате: «указывается нижняя граница диапазона значений, оператор "двоеточие", шаг дискретности, снова оператор "двоеточие", и верхняя граница диапазона» - например: «y=a:m:b». Формируется вектор-строка с первым значением - нижней границей диапазона (для приведенной команды это «a»). Каждый следующий элемент получается прибавлением к предыдущему величины, указанной в качеств шага дискретности (в данном случае «m»). Значения элементов сформированного массива не превышают верхнюю границу диапазона (то есть «b»). Пример такого использования оператора "двоеточие" приведен ниже (отрывок кода из рабочей области, жирным выделен ввод пользователя):

>> y=1:0.7:10

Columns 1 through 8

0000 7000 2.4000 3.1000 3.8000 4.5000 5.2000 5.9000

Columns 9 through 13

6.6000 7.3000 8.0000 8.7000 9.4000

Рисунок 13

В данном случае создается вектор-строка y со значениями от 1 до 10 с шагом дискретности 0.7 - значения 0, 7, 2.4 и т.д. до 9.4 включительно (следующее гипотетическое значение в последовательности 10.1 превышает верхнюю границу диапазона 10, поэтому в формируемый вектор оно не входит). Сообщения «Columns 1 through 8» и «Columns 9 through 13» появляются автоматически как следствие того, что результат выполнения команды «y=1:0.7:10» в одну строку не помещается, поэтому выполняется перенос части вектора-результата в следующую строку. Данные сообщения призваны облегчить процесс индексной идентификации элементов.

Второй способ использования оператора "двоеточие" - при индексировании элементов. Как и в предыдущем случае, существует несколько форматов, или правил, использования оператора "двоеточие" в индексах.

Например, если оператор "двоеточие" используется в формате «A(i:j,k)»,

то в качестве результата возвращается вектор-столбец, который формируется из элементов матрицы «A», находящихся в «k-м» столбце с «i-й» по «j-ю» строку включительно. Ссылка в формате «A(:,k)» возвращает в качестве значения весь «k-й» столбец матрицы «A».

Можно использовать оператор "двоеточие" при указании сразу двух индексов. Например, командой «A(i:j,m:n)» возвращается подматрица, состоящая их строк с «i-й» по «j-ю» и одновременно столбцов с «m-го» по «n-й».

Рассмотрим некоторые примеры использования оператора "двоеточие".

В частности, исходная матрица «A» вводится командой:

A=

В следующих командах оператор "двоеточие" используется для извлечения подматриц из исходной матрицы «A»:

>> A(1:3,2)

>> A(3,2:4)

>> A(3:4,1:2)

Например, командой «A(1:3,2)» возвращается вектор-столбец, составленный из элементов с первой по третью строку во втором столбце матрицы «A». Командой «A(3,2:4)» возвращается вектор-строка, который составлен из элементов третьей строки со второго по четвертый столбец включительно матрицы «A». Наконец, командой «A(3:4,1:2)» возвращается подматрица матрицы «A», верхний левый элемент которой имеет индексы «(3,1)», а правый нижний элемент имеет индексы «(4,2)».

6. Встроенные математические функции

В Matlab по умолчанию доступно достаточно большое количество встроенных функций. Ядро их составляют математические функции, которые на практике используются сравнительно часто. Некоторые из них перечислены в таблице 5.

Таблица 5 Некоторые математические функции Matlab.

Описание

Модуль числа (в том числе и комплексного), указанного аргументом функции.

Арккосинус для числа, указанного аргументом функции.

Арккосинус аргумента функции. Результат представлен в градусах.

Арккотангенс числа, указанного аргументом функции.

Арккотангенс аргумента функции. Результат представлен в градусах.

Арккосеканс числа, указанного аргументом функции.

Арккосеканс аргумента функции. Результат представлен в градусах.

Арксеканс числа, указанного аргументом функции.

Арксеканс аргумента функции. Результат представлен в градусах.

Арксеканс гиперболический от числа, указанного аргументом функции.

Арксинус от числа, указанного аргументом функции.

Арксинус аргумента функции. Результат представлен в градусах.

Арксинус гиперболический от числа, указанного аргументом функции.

Арктангенс от числа, переданного аргументом функции.

У функции два аргумента (например, atan(y,x)). В качестве результата возвращается направление (угол в диапазоне значений от -р до р) на точку с соответствующими координатами (в данном случае, точка с координатами (y,x)). Если аргументы комплексные, их мнимые части игнорируются.

Арктангенс аргумента функции. Результат представлен в градусах.

Арктангенс гиперболический от числа, переданного аргументом функции.

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

Косинус от числа, переданного аргументом функции.

Косинус аргумента функции, указанного в градусах.

Косинус гиперболический от числа, переданного аргументом функции.

Котангенс от числа, переданного аргументом функции.

Котангенс аргумента функции, указанного в градусах.

Котангенс гиперболический от числа, переданного аргументом функции.

Косеканс от числа, переданного аргументом функции.

Косеканс аргумента функции, указанного в градусах

Косеканс гиперболический от числа, переданного аргументом функции.

Экспонента: показательная функция с основанием-константой Эйлера и показателем степени, определяемым аргументом функции.

Командой вида expm1(x) с повышенной точностью вычисляется значение exp(x)-

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

Функция для вычисления факториала числа, указанного аргументом функции.

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

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

Функцией возвращается наибольший общий делитель целых чисел или целочисленных массивов - аргументов функции.

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

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

Функцией в качестве результата возвращается наименьшее общее кратное для целых чисел или целочисленных массивов - аргументов функции.

Натуральный логарифм от числа, указанного аргументом функции.

Логарифм по основанию 10 от числа, указанного аргументом функции.

Командой вида log1p(x) с повышенной точностью вычисляется значение log(1+x).

Логарифм по основанию 2 от числа, указанного аргументом функции.

Функцией возвращается остаток от деления значения первого аргумента функции на значение второго аргумента. Целая часть отделения определяется функцией froor().

Функцией в качестве значения возвращаются биномиальные коэффициенты. Если функция вызвана в формате nchoosek (n,k), то в качестве результата возвращается значение: ,

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

Командой nthroot(x,n) в качестве значения возвращается корень порядка n (второй аргумент) из действительного числа или элементов действительного массива x (первый аргумент).

Функция может вызываться с одним или двумя аргументами. Если у функции один аргумент (массив) и функция вызывается в формате pow2(x), то в качестве результата возвращается массив степеней двойки, показатели степени определяются массивом x. Если функция вызывается с двумя аргументами в формате pow2 (x,y), то результатом является x.*2.^y.

У функции два аргумента. Если аргументы скалярные, в качестве результата возвращается значение первого аргумента, возведенное в степень, определяемую вторым аргументом. В более общем случае в качестве результата выполнения команды power (A,B) возвращается "A.^B".

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

Функцией возвращается остаток от деления значения первого аргумента функции на значение второго аргумента. Целая часть отделения определяется функцией fix().

Функция округления аргумента до ближайшего целого значения.

Секанс от числа, указанного аргументом функции.

Секанс аргумента функции, указанного в градусах.

Знак числа, указанного аргументом функции (для положительных чисел - единица, для отрицательных чисел - минус единица, для нуля - ноль).

Синус от числа, указанного аргументом функции.

Синус аргумента функции, указанного в градусах.

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

Описание

Тангенс от числа, указанного аргументом функции.

Тангенс аргумента функции, указанного в градусах.

Хотя большинство из представленных выше функций с математической точки зрения определены для скалярных величин, обычно они могут применяться и для аргументов-матриц. В этом случае действие функционального оператора применяется к каждому из элементов матрицы. Например, если переменная «A» является матрицей с элементами «A(i,j)», то в результате выполнения команды «exp(A)» получим матрицу того же ранга, а ее элементы вычисляются как «exp(A(i,j))». В некоторых случаях такой подход неприемлем. Существуют так называемые матричные функции, аргументами которых по определению являются матрицы (в основном квадратные). Результат этих функций вычисляется по алгоритмам, разработанным специально для матриц. Так, в Matlab есть встроенные матричные функции для экспоненты, логарифма и квадратного корня. Это соответственно функции «expm()», «logm()» и «sqrtm()». Например, если «A» - квадратная матрица, то функцией «expm(A)» вычисляется матричная экспонента. По определению это ряд:

Результатом является матрица, которая вычисляется, как правило, на основе собственных чисел и собственных векторов матрицы «A». Матричный логарифм для аргумента-матрицы «A», вычисляемый инструкцией «logm(A)», представляет собой матрицу такую, что матричная экспонента от нее равна матрице «A». Другими словами, по определению если «B=logm(A)», то «expm(B)=A», и функция «logm()» является обратной к функции «expm()». Аналогично, в результате извлечения квадратного корня из матрицы «A» с помощью функции «sqrtm()» получаем матрицу, которая, будучи возведенной в квадрат, дает матрицу «A». Например, если «B=sqrtm(A)», то «B*B=A».

В Matlab также широко представлены специальные функции, некоторые их них приведены в таблице 6.

Таблица 6. Некоторые специальные математические функции Matlab.

Описание

Функция Эйри.

Функция Бесселя третьего рода (функция Ханкеля).

Командой besseli(n,x) возвращается модифицированная функция Бесселя первого рода (индекса n).

Командой besselj(n,x) возвращается функция Бесселя первого рода (индекса n), которая является одним из решений уравнения Бесселя.

Командой besselk(n,x) возвращается модифицированная функция Бесселя второго рода (индекса n), которая является одним из решений модифицированного уравнения Бесселя. Для целых индексов соответствующее выражение рассчитывается как лимит.

Командой besselj(n,x) возвращается функция Бесселя второго рода (индекса n), которая является одним из решений уравнения Бесселя. Для целых индексов соответствующее выражение рассчитывается как лимит.

Бета-функция Эйлера.

Неполная бета-функция Эйлера.

Логарифм натуральный от бета-функции Эйлера. Аргументами передаются аргументы бета-функции.

Эллиптическая функция Якоби. Если функция вызывается с двумя аргументами в формате ellipj(u,m), в качестве результата возвращаются значения (вектор) для функций sn (u ) , cn (u ) и dn (u ).

Функция для вычисления полного эллиптического интеграла первого и второго рода (вектор значений).

Функция ошибок.

Функция ошибок (остаточная).

Функция ошибок (остаточная нормированная).

Обратная функция к функции ошибок erf().

Обратная функция к функции ошибок erfc().

Интегральная экспонента.

Гамма-функция Эйлера.

Неполная гамма-функция.

Логарифм натуральный от гамма-функции Эйлера. Аргументом функции передается аргумент гамма-функции.

Функция для вычисления присоединенных полиномов Лежандра. В результате вызова функции в формате legendre(n,x) возвращается вектор-столбец значений присоединенных полиномов Лежандра m () Pn x для m = 0,1,2,...,n

Пси-полигамная функция.

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

7. Формат вывода числовых данных

В некоторых случаях приходится изменять способ, которым данные с результатом выполнения команд пользователя выводятся на экран. В первую очередь отметим, что можно вообще не отображать результат выполнения команды в командном окне. Для этого достаточно соответствующую команду закончить точкой с запятой (то есть «;»). В этом случае после нажатия клавиши «Enter» команда выполняется, но результат ее выполнения в командном окне не отображается. Такой режим особенно удобен в тех случаях, когда нужно выполнять громоздкие промежуточные расчеты, которые, с одной стороны, необходимы для получения конечного результата, а с другой - загромождают рабочее пространство. Поэтому разумный выход из такой ситуации - скрыть результат выполнения команды. Числовой формат вывода в явном виде задается с помощью инструкции «format». В команде определения формата вывода после ключевого слова «format» указывается применяемый формат. Допустимые форматы, с кратким их описанием, перечислены в таблице 7.

Таблица 7 Числовые форматы.

Описание

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

Числовой формат, при котором после десятичной точки отображается 7, 14 и 15 цифр в зависимости от типа числовых данных (формат данных с фиксированной точкой).

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

Числовой формат отображения с мантиссой и показателем степени (формат данных с плавающей точкой), при котором после десятичной точки отображается 7, 14 и 15 цифр в зависимости от типа числовых данных.

В зависимости от значения, для отображения применяется либо формат с плавающей точкой, либо с фиксированной точкой. После десятичной запятой отображается четыре цифры.

В зависимости от значения, для отображения применяется либо формат с плавающей точкой, либо с фиксированной точкой. После десятичной запятой отображается 7, 14 или 15 цифр.

Инженерный формат с четырьмя отображаемыми цифрами после десятичной точки и показателем степени, кратным трем.

Инженерный формат с 7, 14 или 15 отображаемыми цифрами после десятичной точки и показателем степени, кратным трем.

Формат, при котором для положительных чисел отображается знак +, для отрицательных отображается знак -, а для нуля отображается пробел.

Финансовый формат, при котором после десятичной точки отображается две цифры.

Отображение чисел в шестнадцатеричной системе счисления.

Отображение чисел в виде рациональной дроби.

Режим отображения результатов вычислений в компактной форме, с уменьшенными интервалами между строками.

Режим отображения результатов вычислений с увеличенными интервалами между строками. Используется по умолчанию.

Ниже приведен пример отображения числа р в разных форматах (в командах использована встроенная константа «Matlab pi»):

>> pi

>> format long

>> pi

3.141592653589793

>> format long e

>> pi

3.141592653589793e+000

>> format long eng

>> pi

3.14159265358979e+000

>> format bank

>> pi

>> format rat

>> pi

>> format +

>> pi

Рисунок 14

Настройки формата вывода влияют только на способ отображения числовых значений, но никак не точность их представления. Поэтому главным критерием при выборе способа вывода данных может быть вопрос удобства. Есть одна функция, которая хотя напрямую и не относится к определению формата вывода числовых данных, ее использование значительно облегчает процесс взаимодействия пользователя с системой. Это функция «clc», которая позволяет очистить рабочее пространство от команд ввода и результатов их выполнения.

Практическая часть

1. Создать вектор-строку: начальный элемент равен - р, конечный р, шаг равен 0. Транспонировать строку в столбец.

2. Создать три вектор-строки из 5 элементов fi = , где n = 5 для х = 2, 3, 4. Объединить эти строки в матрицу А (3 Ч 5).

3.Создать три вектор-столбца из 5 элементов арифметической прогрессии. Элемент арифметической прогрессии рассчитывается по формуле:

где «аn-1» - предыдущий элемент; «аn» - последующий.

Пять элементов вектора формируются, начиная с задания первого элемента «а» и c использованием шага арифметической прогрессии «d» для задания последующих элементов:

Для первого вектор-столбца: a = 2; d = 1:

Для второго вектор-столбца: a = 7; d = 2:

Для третьего вектор-столбца: a = 10; d =-2:

4. Объединить эти вектор-столбцы в матрицу В (5 Ч 3).

5. Транспонировать матрицу В и объединить с матрицей А в матрицу М(6 Ч 5).

6. Из матрицы A убрать вторую строку.

7. У матрицы В обнулить третью строку и убрать две последние строки.

8. Создать матрицу Н(2 Ч 2) путем выделения первых двух строк и столбцов матрицы М.

9. Создать с помощью функции repmat матрицу, состоящую из 2 Ч 3 матриц Н.

10. Создать матрицы размерностью 3 Ч 3:

C - единиц:

F - равномерно распределенных случайных чисел:

E - нормально-распределенных случайных чисел:

11. Найти минимальный элемент в матрице равномерно-распределенных чисел размерностью 3 Ч 5, используя функцию «reshape».

1. Построить на отрезке [-1,-0.3]с шагом 0.005 графики огибающих функций.

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

2. Построить графики суточных температур; значения векторов времени и температуры за два дня приведены ниже.

Время - 0 4 7 9 10 11 12 13 13.5 14 14.5 15 16 17 18 20 22.

Температура 10 мая - 14 15 14 16 18 17 20 22 24 28 25 20 16 13 13 14 13. Температура 11 мая - 12 13 13 14 16 18 20 20 25 25 25 20 16 12 12 11 10.

Оформить графики заголовком "All temperature", по оси «Х» подписать "Time"; по оси «У» `Temperature"; в легенде - "10 may", "11 may" и разместить ее в нижнем левом углу.

3.Построить 3-хмерные графики функции:

z (x ,y ) = 4 sin(2рx ) cos(5рy )(1 - x 2 )y (1 ?y )

на прямоугольной области «x [?1], y » с шагом 0.05 всеми способами, рассмотренными в лабораторной работе, размещая их в отдельных областях на одном окне. Названия функций, применяемых для построения графиков, включить в заголовки этих графиков.

Размещено на Allbest.ru

...
Понравилась статья? Поделитесь ей