Искусственные нейронные сети




Скачать 1.3 Mb.
страница 4/17
Дата 27.09.2016
Размер 1.3 Mb.
1   2   3   4   5   6   7   8   9   ...   17

Массивы ячеек


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

Функция

Описание

cell

Создать массив ячеек

celldisp

Показать содержимое массива ячеек

cellplot

Показать графическую структуру массива ячеек

num2cell

Преобразовать числовой массив в массив ячеек

deal

Обмен данными между любыми классами массивов

cell2struct

Преобразовать массив ячеек в структуру

struct2cell

Преобразовать структуру в массив ячеек

iscell

Истинно, если это массив ячеек

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

Определение массива ячеек

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

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

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

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

Можно построить массив ячеек, присваивая данные отдельным ячейкам. В этом случае система MATLAB автоматически строит массив по мере ввода данных. Существует два способа присвоения данных отдельным ячейкам.



Индексация ячеек

В этом случае необходимо заключить индексы ячейки в круглые скобки, используя стандартные обозначения для массива. Заключить содержимое ячейки в правой части оператора присваивания в фигурные скобки { }.



Индексация содержимого

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

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

а) доступ к содержимому ячейки с помощью индексации содержимого;

б) доступ к подмножеству ячеек с помощью индексации ячеек.

Доступ к содержимому ячеек (индексация содержимого)

Используя индексирование содержимого в правой части оператора присваивания, можно получить доступ к некоторым или всем данным в одной ячейке. Определить переменную в левой части оператора присваивания, чтобы запомнить содержимое ячейки. Заключить индексное выражение в правой части оператора присваивания в фигурные скобки. Это будет означать, что присваивается содержимое ячеек, а не сами ячейки.



Доступ к подмножеству ячеек (индексация ячеек)

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



Удаление и переопределение массива ячеек

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



A(j : k ) = [ ]

Таким образом, при удалении ячеек фигурные скобки вообще не применяются в операторах присваивания.

Как и для обычных массивов с помощью функции reshape можно переопределять размеры массива ячеек, причем общее количество ячеек должно оставаться неизменным; с помощью функции reshape ни удалить, ни добавить ячейки нельзя.

Описание списков переменных

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

а) списков входных переменных;

б) списков выходных переменных;

в) операций вывода на экран терминала;

д) квадратных и фигурных скобок при формировании массивов.

Когда для индексирования многомерного массива ячеек используются двоеточие и фигурные скобки, то система MATLAB обрабатывает содержимое каждой ячейки как отдельную переменную.

Классы


Классы и объекты позволяют добавлять новые типы данных и новые операции. Класс описывает тип переменной и определяет, какие операции и функции могут быть применены к этому типу переменной. Объект – это структура или образец некоторого класса.

Добавление классов осуществляется в рамках операционной среды системы MATLAB, которая обеспечивает возможность хранения созданных объектов и организации каталога М-файлов, определяющих допустимые методы обработки для данного класса объектов. Каталог класса включает М функции, определяющие способы, с помощью которых операторы системы MATLAB, включая арифметические, обработки индексов, конкатенации, обрабатывают объекты данного класса. Переопределение встроенных операторов для нового класса объектов в рамках объектно-ориентированного подхода называется переопределением методов.

В языке MATLAB отсутствует механизм объявления переменных. Например, оператор A = zeros(10, 10) формирует обычную матрицу размера 10х10, которая является объектом класса double. Точно также оператор s = 'Hello world' создает объект класса char.

То же самое относится и к вновь создаваемым классам. Никаких объявлений переменных или объектов не требуется. Объекты создаются динамически посредством вызова конструктора класса.



Каталог класса

М-файлы, определяющие методы для объектов данного класса объединяются в каталог класса, название которого задается как @<�имя_класса>.



Конструктор класса

Каталог класса должен обязательно содержать М файл, называемый конструктором класса. Название конструктора должно совпадать с названиями класса и каталога без префикса @. Конструктор создает объекты, используя данные в виде массива записей (структуры) и приписывая им метку класса.



Функции isa и class. Эти функции используются конструктором, но могут применяться и вне каталога класса.

Функция isa(a, 'class_name') проверяет, принадлежит ли объект a данному классу.

При использовании вне контекста методов функция class допускает только один аргумент.

Команда class(a) возвращает строку, содержащую имя класса для объекта a.



Преобразование классов. Вызов функции преобразования класса имеет вид

b = class_name(a),

где a – объект некоторого класса, отличного от class_name. В этом случае система MATLAB ищет метод с именем class_name в каталоге классов для объекта a. Такой метод преобразовывает объект одного класса в объект другого класса. Если данный объект уже является объектом класса class_name, то система MATLAB вызывает функцию конструктора, который просто возвращает этот объект.

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

При работе с объектами и методами система MATLAB использует специальное множество правил, чтобы гарантировать вызов требуемой функции. Если, по крайней мере, один из аргументов является объектом, система MATLAB рассматривает список параметров слева направо, чтобы определить их старшинство. Для операторов равного старшинства выбирается крайний левый. Затем к нему применяются следующие правила:



  1. Если имя вызываемой функции совпадает с именем встроенной функции, то проверяется, существует ли переопределенная версия этой функции для этого класса, а затем – для родительского. Если ни один из этих случаев не имеет место, выдается ошибка.

  2. Если имя функции совпадает с названием каталога классов, проверяется, не является ли эта функция функцией преобразования, и если да, то эта функция преобразования вызывается. В противном случае вызывается конструктор класса.

  3. Если оба случая не подходят, то анализируются следующие возможности:

а) если есть метод соответствующего типа, то вызывается этот метод;

б) если есть метод родительского класса, то вызывается метод родительского класса;

в) если есть функция с таким именем на пути поиска, то вызывается эта функция;

г) в противном случае генерируется ошибка.



Частные методы и функции. Каталоги классов могут иметь связанные с ними частные каталоги. Такие каталоги могут содержать как частные методы, которые работают с объектами данного класса, так и частные функции, которые не работают с объектами, но выполняют общие вычисления. Можно устанавливать частный каталог в каталоге класса точно так же, как создается любой частный каталог, т. е. просто создать каталог, именуемый private, внутри каталога @class_name.

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



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

Переопределение функций. Можно переопределить любую М-функцию, создавая функцию с тем же именем в каталоге класса. Когда функция применяется к объекту, MATLAB прежде всего просматривает каталог соответствующего класса, а уже потом другие пути доступа.

Практические задания



Задание 1.Создать массив ячеек, содержащий данные различного типа, с помощью индексации ячеек и индексации содержимого.

1. Для создания массива ячеек с помощью индексации ячеек ввести следующие команды:



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

>> A(1,2)={'Anne Smith'};

>> A(2,1)={3+7i};

>> A(2,2)={-pi:pi/10:pi};

>> A
1   2   3   4   5   6   7   8   9   ...   17


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница