Как в статье сослаться на матлаб. Основы Matlab. Элементарные действия с комплексными числами

Те, кто имеет дело с высшей математикой, прекрасно знают, с какими математическими «чудовищами» иногда приходится сталкиваться. Например, на вычисление какого-нибудь гигантского тройного интеграла можно потратить настоящую уйму времени, душевных сил и не восстанавливающихся нервных клеток. Конечно, это очень интересно, бросить вызов интегралу, и взять его. Но, что делать, если вместо этого интеграл грозиться взять Вас? Или, что еще хуже, кубический трехчлен вышел из-под контроля и разбушевался? Такого и врагу не пожелаешь.


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

Для таких неординарных, но периодически случающихся среди студентов ситуаций существует мощное математическое оружие. Встречайте, кто еще не знает – пакет программ MATLAB.

Матлаб и решит уравнение, и аппроксимирует, и построит график функции. Понимаете, что это значит, друзья?

Это значит, что – один из мощнейших на сегодняшний день пакетов обработки данных. Название расшифровывается как Matrix Laboratory. Матричная Лаборатория, если по-русски. Возможности программы покрывают практически все области математики. Так, пользуясь матлабом, Вы сможете:

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

Помимо всего этого возможности MATLAB позволяют визуализировать данные вплоть до построения трехмерных графиков и создания анимированных роликов.

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

MATLAB как язык программирования


А еще – это язык программирования, используемый непосредственно при работе с программой. Не будем вдаваться в подробности, скажем только, что программы, написанные на языке MATLAB, бывают двух видов: функции и скрипты.


Основной рабочий файл программы – М-файл. Это бесконечный текстовый файл, и именно в нем происходит непосредственно программирование вычислений. Кстати, пусть Вас не пугает это слово – для того, чтобы работать в MATLAB, вовсе не нужно быть профессиональным программистом.

М-файлы делятся на

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

Для того чтобы наглядно показать, как происходит работа в MATLAB, приведем ниже пример создания функции в матлабе. Данная функция будет вычислять среднее значение вектора.
f unction y = average (x)
% AVERAGE Среднее значение элементов вектора.
% AVERAGE(X), где X - вектор. Вычисляет среднее значение элементов вектора.
% Если входной аргумент не является вектором, генерируется ошибка.
= size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error("Входной массив должен быть вектором’)
end
y =sum(x)/length(x); % Собственно вычисление

Строка определения функции сообщает системе MATLAB, что файл является М-функцией, а также определяет список входных аргументов. Так, строка определения функции average имеет вид:
function y = average(x)
Где:

  1. function - ключевое слово, определяющее М-функцию;
  2. y - выходной аргумент;
  3. average - имя функции;
  4. x - входной аргумент.

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

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

Недостатки работы с MATLAB


Какие есть трудности в работе с MATLAB? Трудность, пожалуй, всего одна. Но фундаментальная. Чтобы полностью раскрыть возможности MATLAB и с легкостью решать встающие перед Вами задачи, придется попотеть и сначала разобраться с самим матлабом (как создать файл, как создать функцию и др.). А это не так просто, ибо мощность и широкие возможности требуют жертв.

При всем желании нельзя сказать, что MATLAB – простая программа. Тем не менее, надеемся, все вышеперечисленное будет достаточным аргументом для того, чтобы взяться за ее освоение.

И напоследок. Если Вы не знаете, почему все в Вашей жизни пошло так, а не иначе, спросите об этом у матлаба. Просто наберите в командной строке “why” (почему). Он ответит. Попробуйте!

Теперь вы знаете возможности Матлаб. В области образования 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, мы познакомимся с синтаксисом этого языка, который мы будем использовать в основном для математических вычислений.

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

Переменные в MATLAB:

Существует несколько типов переменных, вот самые основные из них:

  • logical (true – 1, false – 0)
  • char – символьная строка
  • numeric – массивы чисел с плавающей запятой
  • int : int8 (массив 8-разрядных целых чисел со знаком, 1 байт на одно число), также есть int16, int32, int64
  • single – массив чисел с плавающей запятой одинарной точности (4 байта на одно число)
  • double – массив чисел с плавающей запятой двойной точности (16 знаков)
  • structure – структурированный массив полей для хранения данных с именами

Имя переменной :
длина — до 63 символов;
не должно совпадать с именами функций и процедур;
должно начинаться с буквы;
может содержать буквы, цифры, знак подчёркивания;
различаются большие и маленькие буквы.

Задать переменную очень легко:

Еще например:

>> a=2;b=4;a+b ans = 6

Как видите, Matlab сам выводит результат операции с 2 переменными.

Массивы:

Начнем с задания одномерных массивов:

Задание в командной строке: x = или x =
Задание отдельных элементов: х(3) = 3
Длину массива можно найти командой: length (x)

Переходим к двумерным массивам:

Задание в командной строке: x =

ans = 1 2 3 4 5 6 7 8

Задание отдельных элементов: х(2,3) = 7
Обращение к отдельной р-ой строке массива: у = [р,:]
Обращение к к-ому столбцу массива: у = [:,к]
Команда В=А(:,:) обращается ко всем элементам матрицы, т.е. создаёт копию матрицы А.

Также следует знать о стандартных матрицах:

  • zeros(n,m) — матрица из нулей размера nxm
  • ones(n,m) – матрица из единиц размера nxm
  • rand(n,m) – матрица случайных чисел размера nxm
  • eye(n,m) – матрица из единиц на главной диагонали размера nxm

Операторы:

Операторы следует знать, так как без них невозможно освоить все основы программирования на MATLAB .

  • Арифметические операторы (арифметические выражения, вычисления)
  • Операторы отношения (сравнение аргументов)
  • Логические операторы (логические выражения)

Уровни приоритета арифметических операторов:

  1. Поэлементное транспонирование (.’), поэлементное возведение в степень (.*), сопряжение матрицы (‘), возведение матрицы в степень(^)
  2. Унарный плюс(+) и унарный минус (-)
  3. Поэлементное умножение массивов(.*), правое деление массивов (./) и левое (.\), умножение матриц (*), решение систем линейных уравнений операции (/) и (\)
  4. Сложение (+) и вычитание массивов (-)
  5. Оператор (:)

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

Операторы отношения:

  • > - больше - функция gt()
  • >= - больше или равно - функция ge()
  • == - равно - функция eg()
  • ~= - не равно - функция ne()

Их приоритет ниже арифметических, но выше логических операторов.

Логические операторы:

  • & - массив: 1- для каждого местоположения, в котором оба элемента имеют значение true (отличны от нуля) и 0 – для всех остальных элементов; функция and()
  • | - массив: 1- для каждого местоположения, в котором хотя бы один элемент имеет значение true (отличен от нуля) и 0 – для всех остальных элементов; функция or()
  • ~ - логическое отрицание для каждого элемента входного массива, А; функция not()
  • xor - массив: 1- для каждого местоположения, в котором только один элемент имеет значение true (отличен от нуля) и 0 – для всех остальных элементов
A = ; B = ; A&B = 01001 A|B = 11101 ~A = 10010 xor(A,B)=10100

Простые примеры:

Задание матрицы 3 на 4 рандомными числами:

>> rand (3,4) ans = 0.8147 0.9134 0.2785 0.9649 0.9058 0.6324 0.5469 0.1576 0.1270 0.0975 0.9575 0.9706 >> x = x = 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 >> det (x) ans = 0 >> x = X1 = 1 2 4 5 6 7 >> x = X2 = 1 2 4 5 6 7 >> x1*x2 ans = 11 14 18 29 38 51 41 54 73

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рабочая среда 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 . Теперь все переменные, определенные в прошлом сеансе, опять стали доступными. Их можно использовать во вновь вводимых командах.

Лекция 3. Программирование в среде MATLAB.

1. М-файлы. ...................................................................................................................................................

1.1. Работа в редакторе М-файлов. .......................................................................................................

1.2. Типы М-файлов. Файл-программы. ...............................................................................................

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

Файл-функции с одним входным аргументом. ......................................................................................

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

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

1.4. Подфункции. ......................................................................................................................................

2. Управляющие конструкции языка программирования. ...................................................................

2.1. Операторы цикла. .............................................................................................................................

Цикл for . ................................................................................................................................................

Цикл while . .........................................................................................................................................

2.2. Операторы ветвления. ...................................................................................................................

Условный оператор if . .........................................................................................................................

Оператор switch. ....................................................................................................................................

2.3. Операторы break , continue и return . ......................................................................................

2.4. О рациональной техники программирования в MATLAB. .......................................................

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

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

Система MATLAB имеет входной язык, напоминающий Бейсик (с примесью средств Фортрана и Паскаля). Запись программ в системе традиционна и потому привычна для большинства пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью любого, привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Язык системы MATLAB в части программирования математических вычислений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и визуальное программирование. Это дает опытным программистам необъятные возможности для самовыражения.

1. М-файлы.

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

сохранение переменных рабочей среды или ведение дневника при помощи diary незначительно

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

1.1. Работа в редакторе М-файлов.

Для подготовки, редактирования и отладки m-файлов служит специальный многооконный редактор. Он выполнен как типичное приложение Windows. Редактор можно вызвать командойedit из командной строки или командой главного менюFile | New | M-file . После этого в окне редактора можно создавать свой файл, пользоваться средствами его отладки и запуска. Перед запуском файла его необходимо записать на диск, используя командуFile | Save as в меню редактора.

На рис.1 показано окно редактора/отладчика. Подготовленный текст файла (это простейшая и наша первая программа на языке программирования MATLAB) можно записать на диск. Для этого используется команда Save As , которая использует стандартное окно Windows для записи файла с заданным именем. Следует отметить, что имя М-файла должно быть уникально, а требование к имени файла такое же, как для имен переменных среды MATLAB. После записи файла на диск можно запустить командуRun на панели инструментов или менюDebug , или просто нажать ., для того чтобы исполнить m-файл.

На первый взгляд может показаться, что редактор/отладчик - просто лишнее звено в цепочке «пользователь - MATLAB». И в самом деле, текст файла можно было бы ввести в окно системы и получить тот же результат. Однако на деле редактор/отладчик выполняет важную роль. Он позволяет создать m-файл (программу) без той многочисленной «шелухи», которая сопровождает работу в командном режиме. Текст такого файла подвергается тщательной синтаксической проверке, в ходе которой выявляются и отсеиваются многие ошибки пользователя. Таким образом, редактор обеспечивает синтаксический контроль файла.

Редактор имеет и другие важные отладочные средства - он позволяет устанавливать в тексте файла специальные метки, именуемые точками прерывания (breakpoints ). При их достижении вычисления приостанавливаются, и пользователь может оценить промежуточные результаты вычислений (например, значения переменных), проверить правильность выполнения циклов и т. д. Наконец, редактор позволяет записать файл в текстовом формате и увековечить ваши труды в файловой системе MATLAB.

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

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

Рис. 1. Окно редактора М-файлов.

1.2. Типы М-файлов. Файл-программы.

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

Файл-программы представляют собой простейший тип М-файлов. Они не имеют входных и выходных аргументов и оперируют переменными, существующими в рабочей среде, или могут создавать новые переменные. Файл-программу mydemo вы написали при прочтении предыдущего раздела. Все переменные, объявленные в файл-программе, становятся доступными в рабочей среде после ее выполнения. Запустите файл-программу mydemo , приведенную в листинге рис.1. Перейдите в окно Workspace и убедитесь, что все введенные в М-файле переменные появились в рабочей среде. Все созданные при исполнении М-файла переменные остаются в рабочей среде после его завершения, и их можно использовать в других файл-программах и в командах, выполняемых из командной строки.

Запуск файл-программы осуществляется двумя способами.

1. Из редактора М-файлов так, как описано выше.

2. Из командной строки или другой файл-программы, при этом в качестве команды используется имя М-файла (без расширения). Применение второго способа намного удобнее, особенно если созданная файл-программа будет неоднократно использоваться впоследствии. Фактически созданный М-файл становится командой, которую понимает MATLAB.

Закройте все графические окна и наберите в командной строке mydemo , появляется графическое окно, соответствующее командам файл-программы mydemo.m . После ввода командыmydemo MATLAB производит следующие действия.

1. Проверяет, является ли введенная команда именем какой-либо из переменных, определенных

в рабочей среде. Если введена переменная, то выводится ее значение.

2. Если введена не переменная, то MATLAB ищет введенную команду среди встроенных функций. Если команда оказывается встроенной функцией, то происходит ее выполнение.

3. Если введена не переменная и не встроенная функция, то MATLAB начинает поиск М-файла с названием команды и расширением m. Поиск начинается стекущего каталога (Current Directory); если М-файл в нем не найден, то MATLAB просматривает каталоги, установленные впути поиска (Path). (Для установки текущего каталога можно использовать окно выбора с одноименным названием на панели инструментов или командуcd . Установка путей поиска осуществляется с

помощью команды Set Path команды менюFile или с помощью командыaddpath ).

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

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

Во-вторых, имя файла не должно начинаться с цифры, знаков "+" или "-", словом с тех символов, которые могут быть интерпретированы MATLAB как ошибка при вводе выражения. Например, если вы назовете М-файл с файл-программой 5prog.m, то при ее запуске из меню редактора или по получите сообщение об ошибке. Это не удивительно, т. к. MATLAB ждет от вас 5 + prog (или 5, prog) для вычисления арифметического выражения с переменной prog (или добавления 5 в качестве первого элемента к вектор-строке prog). Следовательно, правильным было бы имя prog5.m (или хотя бы p5rog.m), но только начинающееся с буквы.

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

Очень распространена еще одна ошибка при задании имени файл-программы, которая на первый взгляд имеет необъяснимые последствия: программа запускается только один раз. Повторный запуск не приводит к выполнению программы. Разберем эту ситуацию на примере файл-программы из листинга 5.1, которую вы сохранили в файле mydemo.m. Переименуйте файл в x.m, затем удалите все переменные рабочей среды из окна браузера переменных Workspace или из командной строки:

>> clear all

Выполните файл-программу, например, из редактора, нажав . Появляется графическое окно с двумя графиками и ничего не предвещает подвоха. Закройте теперь графическое окно и запустите программу снова. Графическое окно больше не создается, зато в командное окно вывелись значения массиваx в соответствии с первым пунктом приведенного выше алгоритма поиска MATLAB. Эти обстоятельства следует учитывать при выборе имени файл-программы. Не менее важный вопрос связан с третьим пунктом алгоритма поиска MATLAB – текущим каталогом и путями поиска. Как правило, собственные М-файлы хранятся в каталогах пользователя. Для того чтобы система MATLAB могла найти их, следует установить пути, указывающие расположение М-файлов.

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

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

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

Файл-функции с одним входным аргументом.

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

− xx 2

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

function f = myfun(x)

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка являетсязаголовком функции, в которой размещаютсяимя функции и списки входных и выходных аргументов. Входные аргументы записываются в круглых скобках после имени функции. В нашем примере есть только один входной аргумент – х. Выходной аргумент f указывается слева от знака равенства в заголовке функции. При выборе имени файл-функции следует позаботиться об отсутствии конфликтов с занятыми именами в MATLAB. Аналогичный вопрос мы обсуждали выше: как сохранить файл-программу в файле с уникальным именем. Тот же самый подход, основанный на обращении к функцииexist , вы можете применить для задания имени файл-функции.

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

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

>> y=myfun(1.3) y =

При создании файл-функции myfun мы подавили вывод значения f в командное окно, завершив оператор присваивания точкой с запятой. Если этого не сделать, то оно выведется при обращенииy=myfun(1.3) . Как правило, лучше избегать вывода в командное окно результатов промежуточных вычислений внутри файл-функции.

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

>> x=;

>> y=myfun(x)

??? Error using ==> ^ Matrix must be square.

Error in ==> C:\MATLAB6p5\work\myfun.m

On line 2 ==> f = exp(-x)*sqrt((x^2 + 1)/(x^4 + 0.1));

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

function f = myfun(x)

f = exp(-x).*sqrt((x.^2 + 1)./(x.^4 + 0.1));

Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:

>> x=;

>> y=myfun(x)

Переменная y , в которую записывается результат вызова функцииmyfun , автоматически становится вектором нужного размера.

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

>> x=0:0.5:4;

>> y=myfun(x);

>> plot(x,y)

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

Мы рассмотрим сейчас только один простой пример того, как использование файл-функций упрощает визуализацию математических функций. Только что мы построили график при помощиplot . Заметьте, что для вычисления вектора y не обязательно было вызыватьmyfun – можно сразу записать выражение для него и потом указать паруx иy вplot . Имеющаяся в нашем распоряжении файл-функция myfun позволяет обратиться к специальной функцииfplot , которой требуется указать имя нашей файл-функции (в апострофах) или указатель на нее (с оператором @ перед именем функции) и границы отрезка для построения графика (в векторе из двух элементов)

>> fplot("myfun", )

>> fplot(@myfun, )

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

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

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

пространства x 2 + y 2 + z 2 .

function r = radius3(x,y,z) r = sqrt(x.^2 + y.^2 + z.^2);

>> R = radius3(1, 1, 1)

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

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

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

function = hms(sec) hour = floor(sec/3600);

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

>> = hms(10000) H =

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

>> hms(10000) ans =

Если список выходных аргументов пуст, т. е. заголовок выглядит так: function myfun(a, b) илиfunction = myfun(a, b) ,

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

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

function = hms(sec)%hms - перевод секунд в часы, минуты и секунды

% Функция hms предназначена для перевода секунд

% в часы минуты и секунды.

% = hms(sec)

hour = floor(sec/3600);

minute = floor((sec - hour*3600)/60); second = sec - hour*3600 - minute*60;

1.4. Подфункции.

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

function simple;

% Основная функция a = 2*pi;

fl = f(1.1, 2.1) f2 = f(3.1, 4.2)-a f3 = f(-2.8, 0.7)+a

function z = f(x, y)% Подфункция

z = x^3 - 2*y^3 - x*y + 9;

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

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

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

2. Управляющие конструкции языка программирования.

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

2.1. Операторы цикла.

Схожие и повторяющиеся действия выполняются при помощи операторов цикла for иwhile . Циклfor предназначен для выполнениязаданного числа повторяющихся действий, awhile – для действий, число которых заранее не известно, но известноусловие продолжения цикла.

Цикл for .

Использование for осуществляется следующим образом:

for count = start:step:final

команды MATLAB

Здесь count -переменная цикла,start – ее начальное значение,final – конечное значение, astep – шаг, на который увеличиваетсяcount при каждом следующем заходе в цикл. Цикл заканчивается, как только значениеcount становится большеfinal . Переменная цикла может принимать не только целые, но и вещественные значения любого знака. Приведем пример применения циклаfor . Пусть требуется вывести графики семейства кривых дляx , которое

задано функцией y (x ,a )= e − ax sinx , зависящей от параметраa , для значений параметраа от -0.1 до

0.1 с шагом 0.02. Можно, конечно, последовательно вычислять у(х, а) и строить ее графики для различных значенийа , но гораздо удобнее использовать циклfor . Текст файл-программы:

figure % создание графического окна

x = 0:pi/30:2*pi; % вычисление вектора значений аргумента

% перебор значений параметра в цикле for a = -0.1:0.02:0.1

% вычисление вектора значений функции для текущего значения...

параметра

y = exp(-a*x).*sin(x); % добавление графика функцииhold on

plot(x, y) end

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

Рис. 2. Семейство кривых.

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

a = zeros(n); for i = 1:n

for j = 1:n

a(i, j) = 1/(i+j-1);

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

for count = A

команды MATLAB

Если А - вектор-строка, тоcount последовательно принимает значение ее элементов при каждом заходе в цикл. В случае двумерного массиваА на i -ом шаге циклаcount содержит столбецА(:,i) . Разумеется, еслиА является вектор-столбцом, то цикл выполнится всего один раз со значениемcount , равнымА .

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

Цикл while .

Цикл while служит для организации повторений однотипных действий в случае, когда число повторений заранее неизвестно и определяется выполнением некоторого условия. Рассмотрим пример разложение sin(x) в ряд:

x 2k + 1

S (x )= ∑ (− 1)

(2k + 1) !

k = 0

Конечно, до бесконечности суммировать не удастся, но можно накапливать сумму с заданной точностью, например, 10-10 . Очевидно, что число членов ряда в данном случае неизвестно, поэтом использование оператораfor невозможно. Выход состоит в применении циклаwhile , который работает, пока выполняетсяусловие цикла:

while условие повторения цикла

команды MATLAB

В данном примере условием повторения цикла является то, что модуль текущего слагаемого

x 2 k + 1 (2k + 1) ! больше 10-10 . Текст файл-функции mysin, вычисляющей сумму ряда на основе

рекуррентного соотношения:

k − 1

2k (2k + 1)

function s = mysin(x)

% Вычисление синуса разложением в ряд

% Использование: у = mysin(x), -pi < х < pi

% вычисление первого слагаемого суммы для к = О k = 0;

% вычисление вспомогательной переменной

while abs(u) > 1.0e-10 k = k + 1;

u = -u* x2/(2*k)/(2*k + 1); s = s + u;



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: