Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_курсовик_ИНФО_2010

.pdf
Скачиваний:
16
Добавлен:
09.02.2015
Размер:
1.4 Mб
Скачать

использовать точку перед знаком операции транспонирования, как это делается для операторов поэлементного умножения и деления матриц.

Следующий оператор – горизонтальная конкатенация или объединение матриц А и В:

>>C=[A, B] C =

1 3 1 3

7 9 7 9

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

>>[A B C]

ans =

1 3 1 3 1 3 1 3

7 9 7 9 7 9 7 9

Аналогично операция выполняется для любого числа матриц в строке. Вертикальная конкатенация А и В (матрицы должны иметь одинаковое

число столбцов.):

>> [A;B] ans =

1 3

7 9

1 3

7 9

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

>> A(1,2) ans =

3

В MATLAB есть множество функций для формирования матриц специального вида. Так, функция eye возвращает единичную матрицу заданного размера. Функция ones возвращает матрицу, все элементы которой единицы. Для создания матрицы с нулевыми элементами используется функция zeros.

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

21

пространстве. Функция sum возвращает сумму элементов для вектора или вектор-строку, содержащую сумму элементов каждого столбца для матрицы:

>>A = [11 13 14;31 33 34] A =

11 13 14

31 33 34

>>sum(A)

ans =

42 46 48

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

Полезные замечания по работе с MATLAB 1.1.10. Сообщения об ошибках

MATLAB располагает специальным инструментом для диагностики ошибок. Контролируются вводимые команды и выражения и выдаются соответствующие сообщения об ошибках или предупреждения. Введем, к примеру, выражение с ошибкой и нажмем ENTER:

>> sqr(2)

??? Undefined function or method 'sqr' for input arguments of type 'double'.

Блок диагностики сообщит об ошибке. Это сообщение о том, что не определена переменная или функция с именем sqr. Для исправления ошибки можно заново набрать правильное выражение или нажать на клавиатуре стрелку вверх, вызвав тем самым последнюю набранную команду, и отредактировать еѐ. Для редактирования можно установить курсор в конец имени функции и воспользоваться клавишей TAB. Блок диагностики введет подсказку, анализируя уже введенные символы (рис. 1.7).

Рис. 1.7. Подсказка по встроенным командам MATLAB

22

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

1.1.11. Справочный блок и примеры

Есть разные способы получить справочную информацию во время работы с MATLAB. Можно, например, вызвать справку по любому объекту прямо в командном окне, воспользовавшись командой Help. Команда Help без параметров выводит список папок, содержащих m-файлы с определениями операторов и функций MATLAB, включая установленные пакеты расширения. Для получения справки по конкретному объекту используется формат команды Help <имя объекта>. Имя объекта передается команде Help в качестве аргумента. Есть еще ряд команд, с помощью которых можно получить справочные данные в командном режиме: например, команда computer выводит сообщение о типе компьютера, на котором установлена текущая версия MATLAB, команда ver выводит информацию о версиях установленной системы MATLAB и ее компонентов; команда what выводит имена файлов текущего каталога; команда which с именем функции в качестве аргумента выводит путь доступа к этой функции. Однако основной доступ к справочной информации обеспечивает справочный блок MATLAB. Для запуска справочной системы можно использовать команду Help главного меню MATLAB или набрать команду doc в командной строке. В качестве параметра команды doc можно указать имя нужного объекта.

Выберем раздел Help главного меню MATLAB. Открывшийся список разделов справочной системы включает собственно справку по MATLAB

(Product Help), ссылку на ресурсы Web (Web Resources), информацию о программе (About MATLAB), ссылку на коллекцию примеров (Demos) и так далее.

Выберем пункт MATLAB Help. Запустится браузер справочной системы и откроется окно справки. Справочный блок MATLAB имеет вполне современный вид электронного документа. В левом окне расположены вкладки разделов справочной системы и дерево ее разделов, в правом — информация о текущем разделе. Для навигации в окне справки используются гипертекстовые ссылки, обычные для любого HTML-документа, и дерево разделов. Отметим, однако, что содержимое справочной системы во многом дублирует другие справочные средства MATLAB, например, справку, вызы-

23

ваемую из командной строки. Окно разделов справочной системы имеет четыре вкладки. Первые три соответствуют обычным видам работы со справочной системой в Windows - поиск информации по оглавлению (Contents), поиск информации по алфавитному каталогу (Index), и поиск всех тем справки, в которые включена заданная для поиска фраза или слово (Search Results). Страница, соответствующая вкладке Demos (Примеры) предоставляет доступ к коллекции примеров работы с MATLAB и пакетами расширения. Кроме того, для подробного и последовательного знакомства с системой существуют электронные книги в формате PDF. Для работы с файлами этого формата на компьютере должна быть установлена программа Acrobat Reader или Adobe Acrobat. Доступ к электронным книгам можно получить с помощью оглавления справочной системы, в разделе MATLAB, подразделе Printable Documentation. Один из самых эффективных методов освоения программной среды – изучение примеров еѐ применения. Примеры работы с MATLAB можно найти в разделе Demos справочной системы. В окне отображается текст m-файла примера, а запустить пример на выполнение можно с помощью ссылки Run this demo или введя его имя в командной строке. Список примеров, сгруппированных по категориям, можно вывести по команде Help demos.

1.1.12. Работа с рабочей областью памяти и текстом сеанса

Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти, именуемой рабочей областью. По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и превращается в случайный набор фрагментов используемой и свободной памяти. Это может привести к ухудшению работы системы и даже к нехватке оперативной памяти, если вы работаете с большими массивами данных. Команда pack осуществляет дефрагментацию рабочей области – устраняет все свободные фрагменты памяти и превращает рабочую область в один непрерывный фрагмент используемой памяти. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением *.mat. Для этого служит команда save, которая может использоваться в нескольких формах: команда save filename записывает рабочую область всех переменных в файле бинарного формата с именем filename.mat. Для загрузки сохраненной рабочей области можно использовать команду load. Если команда load используется в ходе проведения сеанса, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом mat-файле. Для записи и загрузки рабочей области можно также пользоваться кнопками панели инструментов окна Workspace: Save и Load Data file. Для записи на диск текста

24

сеанса MATLAB используется другая команда – diary (дневник). После выполнения команды diary filename все команды в строках ввода и полученные результаты будут записываться в текстовый файл с указанным именем. Команда diary off приостанавливает запись в файл, diary on – вновь начинает запись. Рекомендуется записывать сеанс в файл с расширением, отличным от m, например, в filename.txt.

Специальные операторы и функции 1.1.13. Операции с символьными выражениями

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

>> S='набор символов'

S =

набор символов

Длина вектора S соответствует числу символов в строке, включая пробелы. Апостроф (') внутри строки символов должен вводиться как два апострофа ('').

Приведем примеры применения некоторых строковых функций. Функция char преобразует массив числовых кодов, символов в массив символов системы MATLAB:

>> char([42 54 67]) ans =

*6C

Функция double преобразует символы строки в вектор числовых кодов:

>> double ('выражение') ans =

Columns 1 through 6

1074 1099 1088 1072 1078 1077 Columns 7 through 9

1085 1080 1077

Функция deblank удаляет пробелы из конца строки:

>> deblank ('выражение с пробелом ') ans =

выражение с пробелом

Существует также ряд функций, осуществляющих такие операции над

25

строками как поиск начального индекса вхождения одной строки в другую findstr (строка которую ищут), замену регистров символов lower и upper

>>upper ('РазНыЙ РеГиСтР') ans =

РАЗНЫЙ РЕГИСТР

>>lower ('РазНыЙ РеГиСтР') ans =

разный регистр

объединения строк

>> strcat ('Команда ', ' для объединения ', ' cтрок') ans =

Команда для объединения cтрок

замены одного выражения внутри строки на другое сравнения двух строк и так далее.

Часто необходимо выполнить преобразования массива чисел в единую строку и обратное преобразование строки в число. Строковые выражения обычно не вычисляются, например, ввод строки ‘2+3’ не приводит к вычислению результата сложения (5), а просто повторяет строку. Однако с помощью функции eval(строка), представляющая математическое выражение, может быть вычислена:

>>'2+3' ans = 2+3

>>eval('2+3') ans =

5

1.1.14.Функции обработки множеств

Множество - одно из базовых понятий в математике. Под множеством подразумевается совокупность некоторых объектов. Рассмотрим некоторые функции для обработки множеств, представленных векторами. Эти функции широко используются при анализе и обработке данных. Функция intersect возвращает пересечение множества А и В, то есть общие элементы векторов А и В. Результирующий вектор отсортирован по возрастанию.

>> intersect ([1,2,3,4,5],[3,4] ) ans =

3 4

Функция intersect с параметром rows возвращает совпадающие строки

26

для матриц с одинаковым числом столбцов. Функция setdiff возвращает разность множества A и B, то есть те элементы вектора А, которые не содержатся в векторе В. Результирующий вектор сортируется по возрастанию.

>> setdiff ([1 2 3 4 5] , [3 4]) ans =

1 2 5

Функция setdiff с параметром rows возвращает те строки из матрицы А, которые не содержатся в матрице В. Матрицы должны иметь одинаковое число столбцов. Аналогично функция union возвращает результат объединения множеств.

>> union ([1 2 3 4 ] , [3 4 5]) ans =

1 2 3 4 5

Функция unique возвращает значения элементов множества без повторений.

>> unique([1 2 3 4 5 3 1]) ans =

1 2 3 4 5

1.1.15. Функции работы с файлами

Файл представляет собой некоторые данные, объединенные одним именем. Тип файла, как правило, определяется его расширением. Перед использованием любого файла он должен быть открыт, а по окончании использования - закрыт. Одновременно может быть открыто и доступно для чтения и записи несколько файлов.

Команда open открывает файл с заданным именем. В зависимости от того, имя какого типа задано, файл будет открыт разными способами. Так, если в качестве имени файла указана переменная, содержащая массив, будет открыт редактор массивов MATLAB (рис. 1.8).

27

Рис. 1.8. Окно редактирования массива в MATLAB

В этом редакторе удобно работать с массивами большого размера.

>>A = [1 2 3 ; 4 5 6 ; 7 8 9 ] A =

1 2 3

4 5 6

7 8 9

>>open A

Открытие файла с расширением filename.mat загрузит сохраненные в нем переменные в рабочую область памяти, файл filename.fig будет открыт в окне редактирования графики MATLAB, m-файл – в редакторе m-файлов, файл с расширением filename.mdl загрузится в окне редактирования моделей Simulink, html-файл – в браузере справочной системы MATLAB. Закрывать файл, открытый при помощи команды open, нужно из вызванного ею редактора.

Функция uiimport запускает Мастера импорта, импортирующий данные из файла в текущей папке или буфера обмена Windows. Она соответствует выбору команды Import Data (Импорт Данных) из меню File или выбору команды Paste Special (Специальная Вставка) из меню Edit. Команда uisave запускает управляемое пользователем сохранение переменных рабочей области в файл. При этом используется стандартный диалог Windows. Для управляемого сохранения моделей Simulink, файлов графики или m-файлов используется функция saveas, команда delete удаляет файл или объект графики, команда close закрывает графические окна, fclose – файлы. Для записи и считывания файлов без вызова окна диалога служат команды save и load,которые дублируются кнопками панелей инструментов и браузером файлов.

Для работы с двоичными файлами используются функции fopen, fclose, fread и fwrite, аналоги которых легко найти практически в любом языке программирования. Заметим только, что считывание массивов из двоичного файла происходит по столбцам. Для работы с файлами, содержащими форматированные данные, служат функции fgetl, fgets, fprintf и fscanf. Отметим также несколько функций, которые относятся к некоторым специализированным файлам: так, функция dlmread считывает данные из ASCII-файла с разделителем в массив, функция dlmwrite записывает матрицу в файл с разделителями. Команда imwrite служит для записи индексированного изображения из массива в файл, сохраняя также соответствующую ему цветовую палитру, команда imread – для считывания изобра-

28

жения из файла в массив. Этот список основных команд дает представление о широких возможностях системы MATLAB при программировании обработки различных видов данных.

Построение графиков 1.1.16. Построение двумерных графиков

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

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

>> x=0:0.5:10 x =

Columns 1 through 8

0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 Columns 9 through 16

4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 Columns 17 through 21

8.0000 8.5000 9.0000 9.5000 10.0000

В качестве аргументов функции plot задаются вектор x-координат и вектор y-координат узловых точек. В приведенном примере y-координата вычисляется как функция синуса x-координаты.

plot(x,sin(x))

Результат выполнения команды в виде графика функции sin(x) представлен на рис. 1.9.

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

29

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

1

 

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

 

-0.8

 

 

 

 

 

 

 

 

 

 

-10

1

2

3

4

5

6

7

8

9

10

Рис. 1.9. Результат выполнения команды plot

Заметно, что полученная кривая состоит из отрезков прямых. Это говорит о том, что шаг приращения переменной x недостаточно мал. Можно повторить выполнение команды plot, но задав при этом шаг по х = 0.1:

x=0:0.1:10;

plot(x,sin(x))

Символ ; в конце команды блокирует вывод результата в командное окно. При ста узловых точках на заданном интервале кривая получается достаточно плавной (рис. 1.10).

1

 

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

 

-0.8

 

 

 

 

 

 

 

 

 

 

-10

1

2

3

4

5

6

7

8

9

10

Рис. 1.10. Результат выполнения команды plot с меньшим шагом х

В качестве дополнительного аргумента можно передать команде plot

30