Описание программы matlab. Матлаб описание программы

Описание программы matlab. Матлаб описание программы

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

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

Умножение матрицы на число, записанное разными способами

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

Как и прежде, у MATLAB «под капотом» самые современные математические библиотеки. Сейчас это: Intel Math Kernel Library (MKL) для операций линейной алгебры и Intel Integrated Performance Primitives Library (IPPL) - для оптимизации обработки изображений . MKL включает в себя, в частности, библиотеки: BLAS , реализующую базовые векторно-матричные операции, и LAPACK - современное развитие LINPACK - содержащую решатели задач линейной алгебры. Поэтому неудивительно, что по скорости выполнения MATLAB обгоняет любой «самодельный» код, реализующий векторно-матричные операции. Также уверенно обходит он и пакеты, использующие другие реализации BLAS и LAPACK.

Дело в том, что MKL и IPPL используют SSE и AVX - наборы инструкций для процессора, которые реализуют параллельные вычисления, в случае, когда нужно выполнить одну и ту же последовательность действий над разными данными (SIMD). Это приводит к существенному росту производительности, причем без каких-либо усилий со стороны пользователя.

Кроме того, MATLAB, вероятно, использует SSE/AVX и в функциях своего ядра, которые реализованы на С. По крайней мере, для разработки пакета MathWorks использует Intel Parallel Studio XE , в состав которого входит компилятор C/C++.

Любопытно, что на компьютерах с процессорами AMD MATLAB также использует библиотеки, разработанные в Intel, хотя AMD реализовало свою библиотеку со сходными возможностями - AMD Core Math Library (ACML).

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

Определение версий используемых MATLAB библиотек с помощью функции version

Для того чтобы эффективно использовать эти возможности, нужно «векторизовать» программу, т. е. заменить использование циклов операциями над массивом в целом, которые как раз и реализуются быстрыми функциями MATLAB.

Но и циклы не были забыты. В 2003 г. в составе MATLAB (версии 6.5, R13) появился JIT-компилятор . Он анализирует выполняемую программу, транслируя повторяющиеся фрагменты в машинный код. В результате, при последующих повторениях скорость выполнения этих фрагментов значительно возрастает (иногда - до 100 раз), что позволяет сделать некоторые циклы почти столь же быстрыми, как их векторизованные аналоги. Но: для того, чтобы JIT-компилятор можно было успешно применить, код цикла должен удовлетворять определенным требованиям.

Краткую сводку этих требований, а также советов по векторизации программы, можно получить в работе Writing Fast MATLAB Code , а более детальную и свежую информацию - в блоге Undocumented Matlab Яира Альтмана или на страницах его книги “Accelerating MATLAB Performance” - наиболее подробному на сегодняшний день руководству по оптимизации программ MATLAB. Кстати, приведенное выше использование функции version также относится к недокументированным возможностям пакета.

В качестве более дешевой альтернативы MATLABу можно использовать Python c библиотеками NumPy/SciPy и установленной MKL . При этом вместо JIT-компилятора MATLAB применяются Numba или Cython . Многочисленные тесты, результаты которых можно найти в Интернет (например, этот), говорят о том, что MATLAB и связка Python + SciPy выдают весьма близкие по быстродействию результаты, так что на первый план выступают умение программиста и его знание особенностей конкретного пакета.

Дмитрий Храмов

). Среди средств общего назначения, используемых в хемометрике, особое место занимает пакет 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 предоставляет возможность использования математических выражений, но в отличие от мно­гих из них, эти выражения в Matlab включают матрицы. Основные составляющие выражения:

Переменные;

Операторы;

Функции.

Переменные . В Matlab нет необходимости в определении типа переменных или размерно­сти. Когда Matlab встречает новое имя переменной, он автоматически создает переменную и выделяет соответствующий объем памяти. Если переменная уже существует, Matlab изменяет ее состав и если это необходимо выделяет дополнительную память. Например,

num _ students = 25

создает матрицу 1x1 с именем num _ students и сохраняет значение 25 в ее единственном элементе.

Имена переменных состоят из букв, цифр или символов подчеркивания. Matlab использует только первые 31 символ имени переменной. Matlab чувствителен к регистрам, он различает заглавные и строчные буквы. Поэтому A и a - не одна и та же переменная. Чтобы увидеть матрицу, связанную с переменной, просто введите название переменной.

Числа. Matlab использует принятую десятичную систему счисления, с необязатель­ной десятичной точкой и знаками плюс-минус для чисел. Научная система счисления использует букву e для определения множителя степени десяти. Мнимые числа используют i или j как суффикс. Некоторые примеры правиль­ных чисел приведены ниже:

Все числа для хранения используют формат long , это числа с плавающей точкой обладающие ограниченной точностью - приблизительно 16 значащих цифр и ограниченным диапазоном - приблизительно от 10 -308 до 10 308 .

Операторы. Выражения используют обычные арифметические операции и правила стар­шинства (табл. 1).

Таблица 1

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

Функции. Matlab предоставляет большое количество элементарных математических функций, таких как abs , sqrt , exp , sin . Вычисление квадратного корня или логарифма отрицательного числа не является ошибкой: в этом случае результатом является соответствующее комплексное число. Matlab также предоставляет и более сложные функции, включая Гамма функцию и функции Бесселя. Боль­шинство из этих функций имеют комплексные аргументы. Чтобы вывести список всех элементарных математических функций, наберите:

help elfun

Чтобы посмотреть список всех функций Matlab для анализа данных:

help datafun

Если вам нужно узнать о Statistics Toolbox , введите:

help stats

Список элементарных функций представлен в табл. 2.

Таблица 2

Элементарные функции пакета Matlab

Логарифм числа по основанию:.

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

help specfun

help elmat

соответственно.

Некоторые функции, такие как sqrt и sin , - встроенные. Они являются частью Matlab, поэтому они очень эффективны, но их вычислительные детали трудно доступны. В то время как другие функции, такие как gamma и sinh , реализо­ваны в m-файлах. Поэтому можно увидеть их код и, в случае необхо­димости, даже модифицировать его.

Несколько специальных функций предоставляют значения часто используемых констант:

Бесконечность появляется при делении на ноль или при выполнении математического выражения, приводящего к переполнению, т. е. к превышению realmax . Не число (NaN ) генерируется при вычислении выражений типа 0/0 или Inf / Inf , которые не имеют определенного математического значения.

Имена функций не являются зарезервированными, поэтому возможно изменять их значения на новые, например:

eps = 1. e -6

clear eps

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

Пакет MatLab был создан компанией Math Works более десяти лет назад. Работа сотен ученых и программистов направлена на постоянное расширение его возможностей и совершенствование заложенных алгоритмов. В настоящее время MatLab является мощным и универсальным средством решения задач, возникающих в различных областях человеческой деятельности.
Рабочая среда MatLab 6.x,MatLab 7 имеет удобный интерфейс для доступа ко многим вспомогательным элементам MatLab.
При запуске MatLab 6.x на экране появляется рабочая среда, изображенная на рис. 1.

Рис. 1. Рабочая среда пакета MatLab 6.x

Данный урок изучает основы работы (введение) в matlab.

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

Меню;
- панель инструментов с кнопками и раскрывающимся списком;
- окно с вкладками Launch Pad и Workspace, из которого можно получить простой доступ к различным модулям ТооlBох и к содержимому рабочей среды;
- окно с вкладками Command History и Current Directory, предназначенное для просмотра и повторного вызова ранее введенных команд, а также для установки текущего каталога;
- командное окно Command Window с командной строкой, в которой находится мигающий курсор;
- строку состояния.

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

Замечание 1

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

2.1. Арифметические вычисления

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

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

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

» 1+2
ans =
3
» |

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

Если требуется продолжить работу с предыдущим выражением, например, вычислить (1+2)/4.5, то проще всего воспользоваться уже имеющимся результатом, который хранится в переменной ans. Наберите в командной строке ans/4.5 (при вводе десятичных дробей используется точка) и нажмите , получается:

» ans/4.5
ans =
0.6667
» |

Замечание 2

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

2.1.2. Форматы вывода результата вычислений

Требуемый формат вывода результата определяется пользователем из меню MatLab. Выберите в меню File пункт Preferences. На экране появится диалоговое окно Preferences. Для установки формата вывода следует убедиться, что в списке левой панели выбран пункт Command Window . Задание формата производится из раскрывающегося списка Numeric format панели Text display.
Разберем пока только наиболее часто используемые форматы. Выберите short в раскрывающемся списке Numeric format в MatLab 6.x. Закройте диалоговое окно, нажав кнопку ОК. Сейчас установлен короткий формат с плавающей точкой short для вывода результатов вычислений, при котором на экране отображаются только четыре цифры после десятичной точки. Наберите в командной строке 100/3 и нажмите .
Результат выводится в формате short:

» 100/3
ans =
33.3333

Этот формат вывода сохранится для всех последующих вычислений, если только не будет установлен другой формат. Заметьте, что в MatLab возможна ситуация, когда при отображении слишком большого или малого числа результат не укладывается в формат short. Вычислите 100000/3, результат выводится в экспоненциальной форме:

» 100000/3
ans =
З.ЗЗЗЗе+004

То же самое произойдет и при нахождении 1/3000:

» 1/3000
ans =
З.ЗЗЗЗе-004

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

В предыдущем примере пакет MatLab вывел результат вычислений в экспоненциальной форме. Запись 3.3333е-004 обозначает 3.3333*10-4 или 0.00033333. Аналогично можно набирать числа в выражениях. Например, проще набрать 10е9 или l.0e10, чем 1000000000, а результат будет тот же самый. Пробел между цифрами и символом е при вводе не допускается, т.к. это приведет к сообщению об ошибке:

» 10 е9
??? 10 е9

Если требуется получить результат вычислений более точно, то следует выбрать в раскрывающемся списке long . Результат будет отображаться в длинном формате с плавающей точкой long с четырнадцатью цифрами после десятичной точки. Форматы short e и long e предназначены для вывода результата в экспоненциальной форме с четырьмя и пятнадцатью цифрами после десятичной точки соответственно. Информацию о форматах можно получить, набрав в командной строке команду help с аргументом format:

В командном окне появляется описание каждого из форматов.

Задавать формат вывода можно непосредственно из командной строки при помощи команды format. Например, для установки длинного с плавающей точкой формата вывода результатов вычислений следует ввести команду format long e в командной строке:

» format long e
» 1.25/3.11
ans =
4.019292604501608е-001

Обратите внимание, что команда help format выводит на экран название форматов прописными буквами. Однако команда, которую надо ввести, состоит из строчных букв. К этой особенности встроенной справки help надо привыкнуть. MatLab различает прописные и строчные буквы. Попытка набора команды прописными буквами приведет к ошибке:

» FORMAT LONG E
??? FORMAT LONG.
Missing operator, comma, or semi-colon.

Для более удобного восприятия результата MatLab выводит результат вычислений через строку после вычисляемого выражения. Однако иногда бывает удобно разместить больше строк на экране, для чего следует выбрать переключатель compact (File, Numeric display) из раскрывающегося списка. Добавление пустых строк обеспечивается выбором loose из раскрывающегося списка Numeric display .

Замечание 3

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

2.2. Использование элементарных функций

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

Введите в командной строке это выражение в соответствии с правилами MatLab и нажмите :

» ехр(-2.5)*lоg(11.3)^0.3-sqrt((sin(2.45*pi)+cos(3.78*pi)}/tan(3.3))

Ответ выводится в командное окно:

ans =
-3.2105

При вводе выражения использованы встроенные функции MatLab для вычисления экспоненты, натурального логарифма, квадратного корня и тригонометрических функций. Какие встроенные элементарные функции можно использовать и как их вызывать? Наберите в командной строке команду help eifun, при этом в командное окно выводится список всех встроенных элементарных функций с их кратким описанием. Аргументы функций заключаются в круглые скобки, имена функций набираются строчными буквами. Для ввода числа л достаточно набрать pi в командной строке.

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

Возведение в степень ^;
- умножение и деление *, /;
- сложение и вычитание +, -.

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

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

1. Нажмите клавишу <­>, при этом в командной строке появится введенное ранее выражение.
2. Внесите в него необходимые изменения, заменив знак минус на плюс и квадратный корень на возведение в квадрат (для перемещения по строке с выражением служат клавиши , , , ).
3. Вычислите измененное выражение, нажав .

Получается

»ехр(-2.5)*log(11.3)^0.3+((sin(2.45*pi)+cos(3.78*pi))/tan(3.3))^2
ans =
121.2446

Если необходимо получить более точный результат, то следует выполнить команду format long e, затем нажимать клавишу <­> до тех пор, пока в командной строке не появится требуемое выражения, и вычислить его, нажав .

» format long e
» exp(-2.5)*log(11.3)^0.3+((sin.(2.45*pi)+cos(3.78*pi))/tan(3.3))^2
ans =
1.212446016556763e+002

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

» format short
» ans
ans =
121.2446

В рабочей среде MatLab 6.x для вызова ранее введенных команд имеется удобное средство - окно Command History с историей команд. История команд содержит время и дату каждого сеанса работы с MatLab 6.x. Для активизации окна Command History необходимо выбрать вкладку с одноименным названием. Текущая команда в окне изображена на синем фоне. Если щелкнуть на какой-либо команде в окне левой кнопкой мыши, то данная команда становится текущей. Для ее выполнения в MatLab надо применить двойной щелчок мыши или выбрать строку с командой при помощи клавиш , и нажать клавишу . Лишнюю команду можно убрать из окна. Для этого ее надо сделать текущей и удалить при помощи клавиши . Можно выделить несколько идущих подряд команд при помощи комбинации клавиш +, + и выполнить их при помощи или удалить клавишей . Выделение последовательно идущих команд можно производить левой кнопкой мыши с одновременным удерживанием клавиши . Если команды не идут одна за другой, то для их выделения следует использовать левую кнопку мыши с удерживанием клавиши .

При щелчке правой кнопкой мыши по области окна Command History появляется всплывающее меню. Выбор пункта Сору приводит к копированию команды в буфер Windows. При помощи Evaluate Selection можно выполнить отмеченную группу команд. Для удаления текущей команды предназначен пункт Delete Selection. Д ля удаления всех команд до текущей - Delete to Selection, для удаления всех команд - Delete Entire History.

При вычислениях возможны некоторые исключительные ситуации, например деление на ноль, которые в большинстве языков программирования приводят к ошибке. При делении положительного числа на ноль в MatLab получается inf (бесконечность), а при делении отрицательного числа на ноль получается -inf (минус бесконечность) и выдается предупреждение:

» 1/0
Warning: Divide by zero.
ans =
Inf

При делении нуля на нуль получается NaN (не число) и также выдается предупреждение:

» 0/0
Warning: Divide by zero.
ans =
NaN

При вычислении, например sqrt(-1), никакой ошибки или предупреждения не возникает. MatLab автоматически переходит в область комплексных чисел:

»sqrt(-1.0)
ans =
0 + l.0000i

Как узнать, какие встроенные элементарные функции можно использовать и как их вызывать? Наберите в командной строке команду help eifun , при этом в командное окно выводится список всех встроенных элементарных функций с их кратким описанием.

Размещено на 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

...
просмотров