Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практикум по матлабу.pdf
Скачиваний:
156
Добавлен:
29.03.2015
Размер:
1.19 Mб
Скачать

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

2. Введение матриц

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

Введены явно с помощью списка элементов;

Сгенерированы встроенными операторами или функциями;

Созданы в m-файлах (см. п. 6 и 7 далее);

Загружены из внешнего файла данных.

2.1. Явное определение матриц

Например, любой из приведенных далее операторов

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

или

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

создает матрицу 3х3 и присваивает ее значение переменной. Попробуйте сами поэкспериментировать с подобными определениями.

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

112

п. 7). Такие встроенные функции как rand, magic и hilb позволяют легко сгенерировать матрицы, с которыми удобно поэкспериментировать. Команда rand(n) создает матрицу nxn, каждый элемент которой - случайное число с равномерным распределением в диапазоне [0 1], в то время как команда rand(m,n) создает такую же матрицу размера mxn. Команда magic(n) создает матрицу nxn, которая является магическим квадратом (суммы элементов по строкам и столбцам равны). Команда hilb(n) создает матрицу Гильберта размером nxn, которая является королевой плохо определенных матриц (m и n являются, конечно, целыми положительными числами). Матрицы могут быть сгенерированы также с помощью цикла for(см. п. 4).

Ссылки на отдельные элементы матриц и векторов осуществляются с помощью индексов в круглых скобках обычным образом. Например, A(2,3) означает элемент матрицы, стоящий на 2-й строке и 3-м столбце матрицы A, а x(3) означает 3-й элемент вектора x. Попробуйте сами поэкспериментировать с элементами матриц. В качестве индексов векторов и матриц могут использоваться только положительные числа. На элементы матрицы A можно ссылаться, используя единственный индекс, A(k). Это обычный способ, когда речь идет о ссылке на элементы вектора. Но также можно ссылаться и на элементы двумерной матрицы, и в этом случае эта матрица рассматривается как один длинный вектор-столбец, сформированный из столбцов исходной матрицы. В приведенной матрице на элемент 5 можно сослаться либо A(2,2), либо A(5). И то и другое правильно.

2.2. Подматрицы и использование двоеточия (:)

Вектора и подматрицы часто используются в системе MATLAB, чтобы получить компактную запись алгоритмов сложной обработки данных. Использование нотации с двоеточием (которая используется и для генерации векторов и подматриц) и векторов вместо индексов является ключом к эффективной манипуляции этими объектами. Творческое использование этих возможностей позволяет минимизировать число явных циклов (использование явных циклов замедляет работу MATLAB) и делает написанную программу простой и легко читаемой. Правда, необходимы специальные усилия для овладения этими возможностями. Выражение 1:5 фактически является вектор-строкой [1 2 3 4 5]. Числа в этом векторе не обязательно целые и инкремент не обязательно равен единице. Например, оператор x=0.2:0.2:1.2 дает вектор x равный [0.2, 0.4, 0.6, 0.8, 1.0, 1.2], а оператор 5:- 1:1 дает в результате вектор [5 4 3 2 1]. Приведенный далее оператор, например, дает таблицу синусов. Попробуйте выполнить все приведенные выше примеры.

113

x = [0.0:0.1:2.0]’; y = sin(x);

[x y]

Отметим, что поскольку sin является скалярной функцией (т.е. действующей поэлементно), если аргументом ее является вектор x, то результатом будет вектор y. Двоеточие может быть использовано для доступа к подматрицам. Например, A(1:4,3) является вектор-столбцом, состоящим из четырех первых элементов третьего столбца матрицы A. Двоеточие само по себе означает всю строку или весь столбец. Например, A(:,3) является третьим столбцом A, а A(1:4,:) представляет собой первые четыре строки матрицы. Произвольный целый вектор может использоваться в качестве индекса подматрицы. Например, A(:,[2 4]) является матрицей из двух столбцов, 2-го и 4-го столбцов матрицы A. Такое индексирование, как и нотация с двоеточием, может использоваться с обеих сторон знака присваивания. Так, оператор A(:,[2 4 5]) = B(:,1:3) заменяет 2,4 и 5-й столбцы матрицы A на первые три столбца матрицы B. Заметим, что при выполнении такого оператора вся измененная матрица A будет выведена на экран. Попробуйте выполнить сами эту и подобные команды. Столбцы 2-й и 4-й матрицы A могут быть умножены справа на матрицу [1 2; 3 4] размером 2х2- такой оператор имеет вид A(:,[2,4]) = A(:,[2,4])*[1 2; 3 4]. В этом случае, как и в предыдущем, вся измененная матрица будет выведена на экран. Попробуйте понять, а потом проверьте, что будет с вектором длины n, если будет выполнен оператор x = x(n:-1:1). Для того чтобы лучше оценить описанные возможности MATLAB, попробуйте выполнить те же самые действия с помощью операторов Паскаля, Фортрана или С.

2.3. Функции построения матриц

Имеются следующие стандартные функции для построения матриц

eye

единичная матрица

zeros

нулевая матрица

ones

матрица единиц

diag

см. ниже

triu

верхняя треугольная часть матрицы

tril

нижняя треугольная часть матрицы

rand

матрица со случайными элементами

Например, команда (m,n) создает mxn матрицу нулей, а команда zeros(n) генерирует матрицу nxn; если A – матрица, то команда zeros(size(A)) создаст

114