- •1. Вводные сведения по применению системы Matlab
- •1.1. Особенности управления памятью
- •1.2. Общие рекомендации по выполнению заданий практикума
- •2. Матрицы
- •2.1. Основные понятия
- •Формирование матриц
- •Действия над матрицами
- •Цель, требования и рекомендации к выполнению задания
- •Пример выполнения задания
- •Варианты заданий
1.2. Общие рекомендации по выполнению заданий практикума
При выполнении лабораторных работ для удобства фиксации проводимых действий и получаемых результатов необходимо придерживаться следующих требований по технологическому использованию рабочего места (компьютера) и подготовке материалов для отчетной документации [3]:
Для индивидуализации собственного рабочего пространства пользователю необходимо создать иерархическую систему папок: а) папку с фамилией (номером студенческого билета) студента, б) в ней – набор папок с идентификацией очередной лабораторной работы (например, labwork1, labwork2, …), куда следует заносить только относящиеся к ней материалы. По умолчанию текущей папкой (окно Current Directory) пользователя, хранящей используемые и создаваемые файлы, является папка системы Matlab с именем «work», – в ней создать указанную иерархию папок. Это можно сделать стандартными средствами операционной системы или непосредственно в Matlab с помощью команды «mkdir» создания папки (например, mkdir Stud17, mkdir labwork1). При работе в Matlab пользователь должен настроиться на соответствующую папку, для чего необходимо воспользоваться командой «cd» смены папки при проходе по дереву папок: cd Stud17 – перейти из текущей папки во вложенную (спуск на уровень), cd … – выйти из текущей папки «наверх» (подъем на уровень).
Сформировать протокол выполненных команд и полученных в текстовом виде результатов. Команда diary обеспечивает копирование в файл текстовой информации, вводимой и выводимой в окне команд: diary('имя файла') – задать имя файла, в который осуществляется запись, diary off блокирует запись в файл, diary on – ее возобновляет.
Получаемые графические изображения следует сохранять отдельно как рисунки, которые должны быть включены в отчетную документацию.
Данные, с которыми работает пользователь, можно сохранить, удалить или загрузить. Для сохранения данных на диске надо записать команду save:
»save data_a a
которая позволяет сохранить в файле с именем «data_a.mat» переменную a.
Для сохранения всех переменных нужно задать следующую команду:
»save data_all
Чтобы удалить переменную (очистить память), следует записать:
»clear a
Использование только clear позволяет удалить все переменные сразу.
Чтобы загрузить сохраненные ранее на диске переменные, используется команда load с указанием имени файла, например «data_a.mat», в котором были сохранены переменные:
»load data_a
После этого все сохраненные ранее данные будут доступны.
2. Матрицы
2.1. Основные понятия
Напомним, матрицей в математике называется двумерный массив элементов (чисел, функций или иных величин, над которыми можно производить алгебраические операции), расположенных в виде прямоугольной таблицы. Если таблица имеет m строк и n столбцов, то говорят о (m n)-матрице. Обозначения:
или .
Одномерный массив называют вектором. Матрица, состоящая из одной строки, называется вектором-строкой, из одного столбца – вектором-столбцом. Если m = n, то матрица квадратная, а число n – ее порядок. Квадратная матрица, у которой лишь диагональные элементы отличны от нуля, называется диагональной и обозначается . Если все , получают скалярную матрицу. При a = 1 матрица единичная и обозначается I или E. Матрица, все элементы которой равны нулю, называется нулевой.
Числа и переменные в Matlab рассматриваются как матрицы размера 1 1 (векторизация). Векторизация обеспечивает упрощение записи операций, производимых одновременно над всеми элементами векторов и матриц, повышение скорости их выполнения. Matlab допускает задание и использование и многомерных массивов.
Для задания матрицы используется команда присваивания. Например, следующими командами формируются матрицы: а) »a = [1 2 1; 4 5 4] – матрица размера 2 3 с соответствующими элементами; б) »b = [7 8 9] – вектор-строка; в) »c = [2; 2; 3.5] – вектор-столбец; г) »d = zeros(3, 5) – матрица размера 3 5 с нулевыми элементами. Результаты* приведены в табл. 2.1.
Таблица 2.1
Матрица размера 2 3 |
Вектор-строка |
Вектор-столбец |
Матрица размера 3 5 с нулевыми элементами |
»a = [1 2 1; 4 5 4] a = 1 2 1 4 5 4 |
»b = [7 8 9] b = 7 8 9 |
»c = [2; 2; 3.5] c = 2.0000 2.0000 3.5000 |
»d = zeros(3, 5) d = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
Две записи для вектора – b = [l 2 3 4] и b = [1,2,3,4] – идентичны, векторы задаются списком своих элементов, разделяемых пробелами или запятыми.
Массив формируется прямым (построчным) перечислением его элементов (например, a = [1 3 5 7; 4 5 6 7] – 2 строки и 4 столбца, b = [1; 3; 5; 7] – столбец с 4 элементами) или заданием диапазона значений в формате [нач.знач. : шаг : кон.знач.] с указанным или единичным (по умолчанию) шагом – [1:2:7], [4:7], [ [1:2:7]; [4:7] ].
Доступ к элементам или блокам элементов массива производится указанием индексов или массива индексов:
a(2, k) – элемент второй строки и k-го столбца;
a(:, k) – k-й столбец;
a(1:3; 1:4) – подматрица из первых 3 строк и 4 столбцов матрицы;
c(:, :, 12) – 12-я страница трехмерного массива.
Массивы хранятся в памяти по столбцам, поэтому с многомерным массивом можно работать как с одномерным, например: A(:) – вектор-столбец из всех элементов массива А; A(13:17) – столбец из элементов с номерами от 13 до 17. Итак:
при задании массива значения заключать в квадратные скобки;
элементы в строке массива разделять пробелами или запятыми;
при указании списка индексов использовать круглые скобки и разделительные запятые (указание индекса символом «:» соответствует заданию всех значений по соответствующему индексу).
При работе с массивами можно пользоваться списками: означает «от i до k с шагом j», – то же с шагом 1, например, или d = 0 : 8.
В Matlab предусмотрен ряд особых функций для задания векторов и матриц, например: а) нулей – zeros(n), zeros(m, n), zeros(m, n, p,…), zeros(size(A)) (соответственно массивы одномерный, двумерный, многомерный и соразмерный с массивом A); б) единиц – ones(n), ones(m, n), ones (size(A)) и др.
Функция magic(n) задает так называемый магический квадрат – матрицу размера , у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу. Пример представлен в табл. 2.2.
|
|
Таблица 2.2 |
||
Магический квадрат 3 3 |
Сумма по столбцам и строкам |
Сумма по диагоналям |
||
»b = magic(3) b = 8 1 6 3 5 7 4 9 2 |
»sum(b) ans = 15 15 15 |
»sum(b') ans = 15 15 15 |
»sum(diag(b)) ans = 15 |
»sum(diag(b')) ans = 15 |
Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1): rand(n, m) – возвращает матрицу размера n m; rand(n) – квадратную матрицу:
»rand(3) % матрица размера 33
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
Можно выполнять операции не только с действительными, но и с комплексными числами. Мнимая единица представляется символами i, j*. В табл. 2.3 приведена последовательность действий с комплексными значениями.
Таблица 2.3
Ввод числа a |
Ввод числа b |
Произведение двух комплексных чисел |
Экспонента от произведения |
»a = 5 + 2i a = 5.0000 + 2.0000i |
»b = 3 – 3i b = 3.0000 – 3.0000i |
»с = a*b с = 21.0000 – 9.0000i |
»exp(с) ans = –1.2016e+009 – 5.4351e+008i |
Перестановка в матрице строк со столбцами даст транспонированную матрицу A', или AT. Если элементы матрицы комплексно-сопряженные, то это комплексно-сопряженная матрица А. Если элементы транспонированной матрицы A' комплексно-сопряженные, то матрица А* называется сопряженной с А. Определитель квадратной матрицы А обозначается или det A. В табл. 2.4 представлены примеры операций с матрицами.
Таблица 2.4
Ввод матрицы A |
Ввод матрицы B |
Транспони- рование A |
Определи- тель B |
Собственные числа матрицы B |
»A = [5 6 4;7 10 5] A = 5 6 4 7 10 5 |
»B = [5 6 4;7 10 5; 3 6 9] B = 5 6 4 7 10 5 3 6 9 |
»A' ans = 5 7 6 10 4 5 |
»det(B) ans = 60 |
»eig(B) ans = 18.7965 0.7104 4.4931 |
Некоторые типы матриц естественно возникают при решении разных задач [4], имеют специальные названия и соответствуют некоторому определяющему условию: 1) симметричная – , 2) кососимметричная – , 3) ортогональная – , или , 4) стохастическая – для , 5) эрмитова – , 6) унитарная – , или .
Не менее важны специальные типы матриц, используемые в качестве вспомогательных (тестовые матрицы, матрицы Адамара, Гильберта и др.). Приведем некоторые из них:
1) Н = hadamard(n) – формирует матрицу Адамара порядка n. Матрица Адамара – это квадратная матрица размера n, составленная из двух значений 1 и –1, столбцы которой ортогональны, так что справедливо соотношение Н'*Н = n*I, где I = eye(n, n) – единичная квадратная матрица размера n n:
»H2 = hadamard(2)
H2 =
1 1
1 –1
Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов. Матрица Адамара размера n n при n > 2 существует, если n делится на 4 без остатка. Алгоритм Matlab вносит дополнительные ограничения, вычисляя матрицы Адамара только для тех n, когда или n, или n/12, или n/20 являются степенями по основанию 2.
2) hilb(n) – возвращает матрицу Гильберта порядка n. Матрица Гильберта является примером плохо обусловленной матрицы. Элементы матрицы Гильберта определяются как H(i, j) = l/(i + j – 1).
Таблица 2.5
Матрица Гильберта |
Инверсная матрица |
Произведение прямой и инверсной матриц |
»H = hilb(2) H = 1.0000 0.5000 0.5000 0.3333 |
»H1 = invhilb(2) H1 = 4 –6 –6 12 |
»H * H1 ans = 1 0 0 1 |
3) invhilb(n) – возвращает матрицу, обратную матрице Гильберта порядка n (n < 15). Для n > 15 функция invhilb(n) возвращает приближенную матрицу. Получение матриц представлено в табл. 2.5. Точная обратная матрица – это матрица с очень большими целочисленными значениями, которые могут быть представлены как числа с плавающей запятой без погрешности округления до тех пор, пока порядок матрицы n не превышает 15.