Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начала прогаммирования в среде MatLab / Начала программирования в среде MatLab.pdf
Скачиваний:
254
Добавлен:
02.05.2014
Размер:
5.66 Mб
Скачать

3.1. Основные классы объєктов

167

 

 

 

>> PG72= struct('fam','Сергеев','imya','Сергей','bat','Сергеевич','god', 1981)

приведет к формированию такой переменной-записи:

PG72 =

fam: 'Сергеев' imya: 'Сергей' bat: 'Сергеевич' god: 1981

Используя индексацию, можно легко определить значение любого поля или элемента структуры. Таким же образом можно присвоить значение любому полю или элементу структуры.

Если к какому-либо из элементов массива записей (структуры) добавляется значение нового поля, то же поле автоматически появляется во всех остальных элементах, хотя значение этого поля у других элементов при этом остается пустым. Например:

>>PG81. fam = 'Аврутова' ;

>>PG81. imya = 'Марина'; PG81. bat = 'Степановна';

>>PG81(2). fam = 'Березнюк' ;

>>PG81(2). imya = 'Алексий'; PG81(2). bat = 'Иванович';

>>PG81(3). fam = 'Попіль' ;

>>PG81(3). imya = 'Богдан'; PG81(3). bat = 'Тимофеевич';

>>PG81(3). god = 1982

PG81 =

1x3 struct array with fields: fam

imya bat god

>> PG81(2). god ans = []

Чтобы удалить некоторое поле из всех элементов массива записей, надо использовать процедуру rmfield по схеме S = rmfield (S, 'имя поля '), где S - имя массива записей, который корректируется. Рассмотрим пример:

>> PG81 = rmfield(PG81, 'bat')

PG81 =

1x3 struct array with fields: fam

imya god

Класс struct, как видим, имеет незначительное число методов, что делает его непосредственное использование при расчетах довольно проблематичным.

Однако именно на использовании объектов этого класса основана возможность создавать новые классы объектов (см. далее). Поэтому этот класс является очень важным для расширения возможностей системы MatLAB.

4.1.3. Класс ячеек (cell)

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

3.1. Основные классы объєктов

168

 

 

 

массив символьных строк, третья - вектор комплексных чисел. Можно строить массивы ячеек любых размеров и любой структуры, включая и многомерные.

Создать массив ячеек можно двумя способами:

-использованием операторы присваивания;

-при помощи функции cell предварительно сформировать пустой массив, а потом присвоить значения отдельным ячейкам.

Применение операторов присваивания

Есть два способа присвоить значения отдельным каморкам - индексация ячеек и индексация содержимого.

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

сваиваемое значение ячейки помещают в фигурные скобки.

Для примера рассмотрим создание массива C ячеек размером (2*2). Для этого определим каждый элемент этого массива, т. е. каждую из ячеек, так:

>>C(1,1) = {' Иванов И. Ю.'};

>>C(1,2) = {[1 2 3; 4 5 6; 7 8 9]};

>>C(2,1) = {5-3i};

>>C(2,2) = {-pi : pi/5 : pi}

C = ' Иванов И. Ю.'

[3x3 double]

[5. 0000- 3. 0000i]

[1x11 double]

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

>>C{1,1} = ' Иванов И. Ю.';

>>C{1,2} = [1 2 3; 4 5 6; 7 8 9];

>>C{2,1} = 5-3i;

>>C{2,2} = -pi : pi/5 : pi

C = ' Иванов И. Ю.'

[3x3 double]

[5. 0000- 3. 0000и]

[1x11 double]

Как видно из примеров, система MatLAB отображает массив ячеек в сокращенной форме.

Чтобы отобразить содержимое ячеек, нужно применять функцию celldisp:

>> celldisp(C)

C{1,1} =

Иванов И. Ю.

C{2,1} =

5.0000 - 3.0000i

C{1,2} =

1

2

3

 

4

5

6

 

7

8

9

C{2,2} = Columns 1 through 7

 

-3.1416

-2.5133

-1.8850

-1.2566 -0.6283 0 0.6283

Columns 8 through 11

 

1. 2566

1. 8850

2. 5133

3. 1416

Для отображения структуры массива ячеек в виде графического изображения на экране предназначена функция cellplot

>> cellplot(C)

3.1. Основные классы объєктов

169

 

 

 

 

 

 

 

 

Рис. 3.1

Фигурные скобки являются конструктором массива ячеек так же, как квадратные скобки являются конструктором числового массива. Фигурные скобки аналогичны квадратным, за исключением того, что они могут быть еще и вложенными. Например, предшествующий массив С ячеек может быть построен так:

>> C = { ' Иванов И. Ю.', [1 2 3; 4 5 6; 7 8 9]; 5-3и,-pi : pi/5 : pi }

C = ' Иванов И. Ю.'

[3x3 double]

[5. 0000- 3. 0000i]

[1x11 double]

Применение функции cell

Функция cell позволяет создать шаблон массива ячеек, заполняя его пустыми ячейками.

Пример. Создадим пустой массив ячеек размером (2*3):

>> A = cell(2,3)

A =

[] [] [] [] [] []

Заполним одну из ячеек, используя оператор присваивания:

>> A(2,2) = {0 : pi/10:2*pi}

A =

[]

[]

[]

 

[]

[1x21 double]

[]

Извлечение данных из массива ячеек можно также осуществить двумя пу-

тями.

Первый способ рассмотрим на примерах.

Извлечение содержимого отдельных ячеек производится указанием индек-

сов нужной ячейки в фигурных скобках:

>> B =C{1,2}

B = 1

2

3

4

5

6

7

8

9

3.1. Основные классы объєктов

170

 

 

 

>> st = C{1,1} st = Иванов И. Ю.

Извлечение содержимого отдельных элементов определенной каморки про-

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

>> x =C{1,2}(2,3) x = 6

>> y= C{1,1}(1:5) y = Иван

Второй способ позволяет извлекать из массива ячеек другой массив ячеек,

составляющий часть первого:

>> D = A(2,2:3)

D = [1x21 double] []

В этом случае применяются обычные скобки.

Массивы ячеек используются для объединения массивов данных разных типов и размеров. Массивы ячеек удобнее массивов записей (структур) в следующих обстоятельствах:

-когда нужен доступ одновременно к нескольким полям;

-когда нужен доступ к подмножествам данных в виде списка переменных;

-когда число полей не определено;

-когда нужно извлекать поля из структуры.

В заключение заметим, что для того, чтобы установить, какому классу принадлежит тот или другой вычислительный объект, к имени этого объекта следует применить процедуру class:

>>x=pi;

>>class(x)

ans =double

>>st='Письмо';

>>class(st)

ans =char

>> s=class(num2str(x)) s =char