8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 19 20 21 22 23 24 25 ... 365

Просмотрите появившуюся в окне Workspace информацию. Векторы я,Ьи с хранятся в двумерных массивах. В столбце Size указано 3x1, т. е. массивы имеют по три строки и одному столбцу, каждый из них занимает 24 байта памяти (столбец Bytes).

Аналогичные сведения можно получить при помощи встроенных функций

ndims И size: » па = ndims(а) па = 2

» sa = size(а) sa = 3 1

На первый взгляд может показаться, что ndims и size лишь дублируют информацию окна Workspace. Однако они позволяют не только вывести характеристики массивов в командное окно, но и записать их в переменные для дальнейшего использования, что существенно при создании собственных приложений в MATLAB.

В главе J было замечено, что числа в MATLAB представляются в виде двумерного массива один на один. Теперь должно быть понятно, почему при сложении векторов используется тот же знак плюс, что и для сложения чисел. Естественно, для нахождения разности векторов следует применять знак минус, с умножением дело обстоит несколько сложнее.

Г Примечание

Если размеры векторов, к которым применяется сложение или вычитание, не совпадают, то выдается сообщение об ошибке.

Особенность MATLAB представлять все данные в виде массивов является очень удобной. Пусть, например, требуется вычислить значение функции sin сразу для всех элементов вектора с (который хранится в массиве с) и записать результат в вектор d. Используйте следующий оператор присваивания:

» d = sin(c) d =

0.8546

0.5010

0.5П2


Итак, встроенные в MATLAB элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом, то результат функции будет массивом того же размера, но с элементами, равными значению функции от соответствующих элементов исходного массива. Убедитесь в этом еще на одном примере. Если необходимо найти квадратный корень из элементов вектора d со знаком минус, то достаточно записать:

» sqrt(-d) ans -

о + 0.9244i

о + 0.7078i

о + 0.75581

Оператор присваивания не использовался, поэтому MATLAB записала ответ в стандартную переменную ans.

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

»si = [3 4 9 2]

si=

34 9 2

»s2 = [5 3 3 2]

s2=

53 3 2

»s3 = si + s2

s3=

87 12 4

»s4 = log(s3)

s4=

2.0794 1.9459 2.4849 1.3863

Выясните, в каких массивах хранятся вектор-строки. Для этого можно использовать окно Workspace или функции ndims, size и команду whos:

» whos

name

size

bytes

class

si

1x4

32

double

array

s2

1x4

32

double

array

s3

1x4

32

double

array

S4

1x4

32

double

array


Итак, вектор-строки si, s2, s3 и s4 содержатся в двумерных массивах размерное™ один на четыре. Для определения длины вектор-столбцов или вектор-строк служит встроенная функция length:

» L = length(si) L =

A

По умолчанию все числа (элементы массивов) хранятся с двойной точно-егью (double) и занимают 8 байтов. Большие массивы требуют для хранения значительных объемов памяти. Для уменьшения объема занимаемой массивами памяти можно применять другие способы хранения элементов массива: single для вещественных чисел, требующих для размещения 4 байта, и int8, intie, int32 — для целых чисел, занимающих 1, 2 или 4 байта соответственно. Использование таких данных значительно экономит память и не влияет на функциональные возможности пакета MATLAB.

Для изменения точности представления чисел предназначены одноименные с типом (Class) данных функций single, int8, intl6, int32:

>> q4 = single(s4);

» q3 = int32(s3);

» q2 = intl6(s2);

» ql = int8(si);

Если теперь посмотреть распределение памяти под массивы, то легко заметить существенную разницу в отведенной для хранения памяти:

» whos

Name

Size

Bytes

Class

ql

1x4

4

int8 array

q2

1x4

8

intl6 array

q3

1x4

16

int32 array

q4

1x4

16

single array

si

1x4

32

double array

s2

1x4

32

double array

s3

1x4

32

double array

54

1x4

32

double array

Для массивов большой размерности экономия памяти может быть существенной. Выполнение арифметических операций с вещественными числами разного типа допустимо и дает результат с наименьшей точностью — single:

>> qs44 = q4 + s4; >> whos qs44



0 ... 19 20 21 22 23 24 25 ... 365