ОВИ_ЛР_2012
.pdfВMATLAB имеется возможность записывать исполняемые команды
ирезультаты в текстовый файл (вести журнал работы), который потом можно легко прочитать или распечатать из текстового редактора. Для начала ведения журнала служит команда diary. В качестве аргумента команды diary следует задать имя файла, в котором будет храниться журнал работы. Набираемые далее команды и результаты их исполнения будут записываться в этот файл, например последовательность команд
»diary d20-06-12.txt
»al = 3;
»а2 = 2.5;
»а3 = al + a2
»а3 =
5.5000
»save work20-06-12
»quit
производит следующие действия:
Открывает файл d20-06-12.txt.
Производит вычисления.
Сохраняет переменные в двоичном файле work.20-06-12.mat.
Сохраняет на диске в подкаталоге work корневого каталога
MATLAB журнал работы в файле d20-06-12.txt и закрывает MATLAB.
Посмотрите содержимое файла d20-06-12.txt в каком-нибудь текстовом редакторе, например в стандартной программе Windows
Блокнот (NotePad). В файле окажется следующий текст:
al = 3;
а2 = 2.5;
а3 = al+a2
31
а3 =
5.5000
save work20-02-06 quit
Запустите снова MATLAB и введите команду load work20-06-12, или откройте файл work20-06-12.mat при помощи меню, как описано выше
2.2.3. Просмотр переменных
При работе с достаточно большим количеством переменных необходимо знать, какие переменные уже использованы, а какие нет. Для этой цели служит команда who, выводящая в командное окно MATLAB
список используемых переменных:
» who
Your variables are:
al a2 a3
Команда whos позволяет получить более подробную информацию о переменных в виде таблицы:
» |
|
|
|
Name |
Size |
Bytes |
Class |
al |
1 l |
8 |
double |
a2 |
1 l |
8 |
double |
a3 |
l l |
8 |
double |
Grand total is 3 elements using 24 bytes
Первый столбик Name состоит из имен используемых переменных.
То, что содержится в столбике Size, по существу, определяется основным принципом работы MATLAB. Программа MATLAB все данные
32
представляет в виде массивов. Переменные al, a2 и а3 являются двумерными массивами размера один на один. Каждая из переменных занимает по восемь байтов, как указано в столбике Bytes. Наконец, в
последнем столбике Class указан тип переменных double array, т.е.
массив, состоящий из чисел двойной точности. В строке под таблицей написано, что в итоге три элемента, т.е. переменные, занимают двадцать четыре байта. Оказывается, что представление всех данных в MATLAB в
виде массивов дает определенные преимущества.
Для освобождения из памяти всех переменных используется команда clear. Если в аргументах указать список переменных (через пробел), то только они будут освобождены из памяти, например:
»clear al аЗ
»who
Your variables are:
a2
Начиная с версии 6.0, появилось удобное средство для просмотра переменных рабочей среды окно Workspace, для перехода к которому следует активизировать одноименную закладку. Данное окно содержит таблицу, аналогичную той, что выводится командой whos. Двойной щелчок по строке, соответствующей каждой переменной, приводит к отображению ее содержимого в отдельном окне, что особенно полезно при работе с массивами. Панель инструментов окна Workspace позволяет удалить лишние переменные, сохранить и открыть рабочую среду.
2.2.4. Работа с массивами
Все данные MATLAB представляет в виде массивов. Очень важно правильно понять, как использовать массивы. Без этого невозможна
33
эффективная работа в MATLAB, в частности построение графиков,
решение задач линейной алгебры, обработки данных, статистики и многих других. В данном подразделе описаны вычисления с векторами.
Массив упорядоченная, пронумерованная совокупность однородных данных. У массива должно быть имя. Массивы различаются по числу размерностей или измерений: одномерные, двумерные,
многомерные. Доступ к элементам осуществляется при помощи индекса. В
MATLAB нумерация элементов массивов начинается с единицы. Это значит, что индексы должны быть больше или равны единице.
Важно понять, что вектор, вектор-строка или матрица являются математическими объектами, а одномерные, двумерные или многомерные массивы способы хранения этих объектов в компьютере. Всюду дальше будут использоваться слова вектор и матрица, если больший интерес представляет сам объект, чем способ его хранения. Вектор может быть записан в столбик (вектор-столбец) и в строку (вектор-строка). Вектор-
столбцы и вектор-строки часто будут называться просто векторами,
различие будет сделано в тех случаях, если важен способ хранения вектора в MATLAB. Векторы и матрицы обозначаются курсивом, а
соответствующие им массивы прямым моноширинным шрифтом,
например: "вектор а содержится в массиве а", "запишите матрицу R в
массив R".
2.2.4.1. Ввод, сложение и вычитание векторов
Работу с массивами начнем с простого примера вычисления суммы векторов:
1.3 |
|
|
|
7.1 |
|
|
|
|
|
|
|
|
|
a |
5.4 |
|
, |
b |
3.5 |
. |
|
6.9 |
|
|
|
8.2 |
|
|
|
|
|
|
||
34
Для хранения векторов используйте массивы а и b. Введите массив а в командной строке, используя квадратные скобки и разделяя элементы вектора точкой с запятой:
» a = [1.3; 5.4; 6.9]
a =
1.3000
5.4000
6.9000
Так как введенное выражение не завершено точкой с запятой, то пакет MATLAB автоматически вывел значение переменной а. Введите теперь второй вектор, подавив вывод на экран
» b = [7.1; 3.5; 8.2];
Для нахождения суммы векторов используется знак +. Вычислите сумму, запишите результат в массив с и выведите его элементы в командное окно:
» с = а + b
с =
8.4000
8.9000
15.1000
Узнайте размерность и размер массива а при помощи встроенных функций ndims и size:
35
» ndims(a)
ans =
2
» size(a)
ans =
3 1
Итак, вектор а хранится в двумерном массиве а размерностью три на один (вектор-столбец из трех строк и одного столбца). Аналогичные операции можно проделать и для массивов b и c. Поскольку числа в пакете
MATLAB представляются в виде двумерного массива один на один, то при сложении векторов используется тот же знак плюс, что и для сложения чисел.
Ввод вектор-строки осуществляется в квадратных скобках, однако элементы следует разделять пробелами или запятыми. Операции сложения,
вычитания и вычисление элементарных функций от вектор-строк производятся так же, как и с вектор-столбцами, в результате получается вектор-строка того же размера, что и исходные. Например:
» s1 = [3 4 9 2] s1 =
3 4 9 2
» s2 = [5 3 3 2] s1 =
5 3 3 2
» s3 = s1 + s2 s3 =
8 7 12 4
36
Замечание 3.
Если размеры векторов, к которым применяется сложение или вычитание, не совпадают, то выдается сообщение об ошибке.
Естественно, для нахождения разности векторов следует применять знак минус, с умножением дело обстоит несколько сложнее.
Введите две вектор-строки:
»v1 = [2 -3 4 1];
»v2 = [7 5 -6 9];
Операция .* (не вставляйте пробел между точкой и звездочкой!)
приводит к поэлементному умножению векторов одинаковой длины. В
результате получается вектор с элементами, равными произведению соответствующих элементов исходных векторов:
» u = v1.*v2 u =
14 -15 -24 9
При помощи .^ осуществляется поэлементное возведение в степень:
» р = v1.^2 p =
4 9 16 1
Показателем степени может быть вектор той же длины, что и возводимый в степень. При этом каждый элемент первого вектора возводится в степень, равную соответствующему элементу второго вектора:
37
» p = vl.^v2
Р =
128.0000 -243.0000 0.0002 1.0000
Деление соответствующих элементов векторов одинаковой длины выполняется с использованием операции ./
» d = v1./v2
d =
0.2857 -0.6000 -0.6667 0.1111
Обратное поэлементное деление (деление элементов второго вектора на соответствующие элементы первого) осуществляется при помощи
операции .\
» dinv = vl.\v2 dinv =
3.5000 -1.6667 -1.5000 9.0000
Итак, точка в MATLAB используется не только для ввода десятичных дробей, но и для указания того, что деление или умножение массивов одинакового размера должно быть выполнено поэлементно.
К поэлементным относятся и операции с вектором и числом.
Сложение вектора и числа не приводит к сообщению об ошибке. MATLAB
прибавляет число к каждому элементу вектора. То же самое справедливо и для вычитания:
»v = [4 6 8 10];
»s = v + 1.2
38
s =
5.2000 6.2000 9.2000 11.2000
»r = 1.2 - v r =
-2.8000 -4.8000 -6.8000 -8.8000
»r1 = v - 1.2
r1 =
2.8000 4.8000 6.8000 8.8000
Умножать вектор на число можно как справа, так и слева:
»v = [4 6 8 10];
»p = v*2
р =. |
|
|
|
8 |
12 |
16 |
20 |
» pi = 2*v |
|
|
|
pi = |
|
|
|
8 |
12 |
16 |
20 |
Делить при помощи знака / можно вектор на число:
» р = v/2 p =
2 3 4 5
Попытка деления числа на вектор приводит к сообщению об ошибке:
» р = 2/v
??? Error using ==> /
Matrix dimensions must agree.
39
Если требуется разделить число на каждый элемент вектора и записать результат в новый вектор, то следует использовать операцию ./
»w = [4 2 6];
»d = 12./w
d =
3 6 2
Все вышеописанные операции применимы как к вектор-строкам, так и к вектор-столбцам.
Особенность MATLAB представлять все данные в виде массивов является очень удобной. Пусть, например, требуется вычислить значение функции sin сразу для всех элементов вектора с (который хранится в массиве с) и записать результат в вектор d. Для получения вектора d
достаточно использовать один оператор присваивания:
» d = sin(с)
d =
0.8546
0.5010
0.5712
Итак, встроенные в MATLAB элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом,
то результат функции будет массивом того же размера, но с элементами,
равными значению функции от соответствующих элементов исходного массива. Убедитесь в этом еще на одном примере. Если необходимо найти квадратный корень из элементов вектора d со знаком минус, то достаточно записать:
40
