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

ОВИ_ЛР_2012

.pdf
Скачиваний:
102
Добавлен:
02.02.2015
Размер:
4.11 Mб
Скачать

В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