Материал: Sb97304

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Для упрощения манипуляций с матрицами широко используется опера-

тор перечисления (:). Например:

t = t1:h:t2 – формирование вектора-строки, представляющего собой число-

вую последовательность от t1 до t2 с шагом h (по умолчанию шаг равен единице, для убывающей последовательности шаг должен быть отрицательным);

A(n1:n2,m1:m2) – выделение блока из состава матрицы А, ограниченного строками n1 и n2 и столбцами m1 и m2 (в случае, если перечисляются все стро-

ки или столбцы, можно указать просто оператор перечисления без чисел). Например, выражение A(4,:) выделяет 4-ю строку матрицы А. Выражение t(n1:end) позволяет выделить часть вектора-строки t от элемента n1 до конца.

При возникновении необходимости удаления отдельных строк или столбцов матрицы, используется пустая матрица ([]). Например, выражение M(2,:)=[] удаляет 2-ю строку матрицы M.

Простейшие операции с матрицами. Операции сложения, вычитания и умножения матриц выполняются в соответствии с обычными правилами ли-

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

Операция сопряженного транспонирования матрицы выполняется с ис-

пользованием символа ('). При сопряженном транспонировании у комплексных чисел меняется знак мнимой части. Для несопряженного транспониро-

вания матрицы нужно использовать признак поэлементной операции (.'). Для вычисления определителя квадратной матрицы используется ко-

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

торов квадратной матрицы используется команда eig:

[D] = eig(A) – возвращает только вектор собственных чисел;

[V,D] = eig(A) – возвращает матрицу V, состоящую по столбцам из собственных векторов, и диагональную матрицу D, с собственными значениями на диагонали.

Функция diag(A) возвращает в виде вектора главную диагональ матрицы

A. Если параметром функции diag указать вектор V, она возвращает матрицу с элементами вектора V на главной диагонали. Вторым параметром функции diag можно задать смещение относительно главной диагонали.

6

Операции с полиномами

Полиномы P(s) pnsn pn 1sn 1 ... p1s p0 в среде MATLAB представляются в виде векторов-строк p pn pn 1 ... p1 p0 , содержащих коэф-

фициенты полиномов, начиная с коэффициента при старшей степени.

Сложение и вычитание полиномов выполняется по обычным правилам сложения матриц, поэтому предварительно полиномы должны быть приведе-

ны к одинаковой размерности путем добавления нулей слева к полиному меньшей степени (например, p = [0 0 p]).

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

Деление полиномов выполняется с помощью функции deconv, которая имеет два полинома аргумента (делимое и делитель) и возвращает также два полинома: частное и остаток от деления.

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

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

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

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

Вычисление производной от полинома выполняется функцией polyder с

одним аргументом. Аналогично функция polyint(p, C) вычисляет интеграль-

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

Сформировать полином по его корням можно, используя функцию poly

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

Поиск корней полинома реализуется с помощью функции roots. Аргу-

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

7

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

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

 

 

Таблица

Наименование

Характеристика

Примечание

logical

Логический тип

Имеет два значения: true, false, объем памя-

 

 

ти – 1 байт

char

Символьный тип

Объем памяти – 1 байт

int8, int16, int32,

Знаковое целое число

 

int64*

 

Объемпамяти–1, 2, 4, 8байтсоответственно

uint8, uint16,

Целое число без знака

 

uint32, uint64*

 

 

single, double

Вещественное число

Единичная и двойная точность числа, объем

(по умолчанию)

 

памяти – 4 и 8 байт соответственно

struct

Структура

Данные разных типов, упорядочены в виде

 

 

пар «поле»–«значение»

cell

Ячейка

Данные разных типов, упорядочены в виде

 

 

матрицы

table*

Таблица

Данные разных типов, упорядочены в виде

 

 

таблиц

function_handle

Указатель на функцию

Тип данных для косвенного вызова функций

 

 

(признак – символ @)

К базовым типам относятся логический, символьный и числовые типы данных. Логический тип logical используется для вычисления логических вы-

ражений. В основном он применяется (неявно) в операторах условий и циклов либо при индексации матриц. Константы символьного типа задаются ключевыми словами true (истина) и false (ложь).

Символьный тип char также часто называется строковым (в MATLAB

нет принципиальной разницы между операциями с одним символом, вектором или матрицей символов). Константы типа char создаются помещением текста в одинарные кавычки, например ‘string’.

Числовые типы делятся на целочисленные и вещественные. В целочис-

ленных типах различают типы без знака и со знаком. Использование цело-

* Не реализовано в MATLAB версии 6.5.

8

численных типов позволяют экономить память, однако некоторые стандарт-

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

y = rand(6,5, ‘single’)

Контейнерные типы (ячейка, структура, таблица) формируются по разным принципам из базовых типов. В ячейке cell разнотипные данные имеют индексы, как в обычных матрицах. Ячейки формируются с помощью фигурных скобок {}, например:

A_cell = {eye(6) ‘text’; 14 -7+2j}

В приведенном примере A_cell – матрица ячеек размером 2×2. Элементы матрицы – ячейки, но в них «запакованы» данные различных типов. Для «распаковки» данных нужно указывать индексы в фигурных скобках:

A_cell{1,1}.

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

s = struct(‘fieldName1’, value1, ..., ‘fieldNameN’, valueN).

Вкачестве значений полей value с именами fieldName могут быть числа,

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

соб создания структуры имеет вид: s.fieldName1 = value1

s.fildNameN = valueN

Наименование типа данных эквивалентно функции, реализующей преобра-

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

y = single(2.1).

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

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

9

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

CELL2MAT – преобразование содержимого матрицы ячеек в матрицу вещественных чисел (тип single);

MAT2CELL, NUM2CELL – преобразование матрицы вещественных чисел в матрицу ячеек;

CELL2STRUCT – преобразование матрицы ячеек в матрицу структур;

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

строке MATLAB ввести команду help имя_функции.

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

Лабораторная работа 1. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ,

ОПЕРАТОРЫ И ЭЛЕМЕНТАРНАЯ ГРАФИКА В СРЕДЕ MATLAB

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

Основные сведения

Ориентированность системы MATLAB на обработку многомерных мас-

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

раторов цикла.

В основе вычислений в системе MATLAB лежит принцип векторизации.

Вычисления проводятся над векторами как над скалярными объектами за счет встроенных в MATLAB алгоритмов быстрой обработки циклов. Поэто-

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

носятся:

SIN(X), COS(X), TAN(X), ASIN(X), ACOS(X), ATAN(X) – тригонометриче-

ские функции синус, косинус, тангенс, арксинус, арккосинус, арктангенс соответственно. Прямые функции принимают, а обратные возвращают значе-

10