|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
| Вход | |||||||||||||||||||||||||||||||||
|
Раздел "MATLAB\MATLAB"
В.Г.Потемкин "Введение в Matlab" (v 5.3) В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель 8.4. Иерархия объектов. Индексация объектов Правило старшинства устанавливает иерархию объектов в системе MATLAB. Это позволяет управлять последовательностью обработки выражений, составленных из объектов. В системе MATLAB принято, что объекты имеют один приоритет и при выполнении выражения вызывается метод, ассоциированный с крайним левым объектом. Если установлено соотношение старшинства, то вызывается метод для класса с самым высоким приоритетом. Для установления иерархии объектов служат функции конструктора inferiorto и superiorto. Функция superiorto('class_A') устанавливает более высокий приоритет объектов других классов по отношению к объектам класса, указанного в качестве аргумента. Допустим, что мы решили добавить класс объектов rational, и тогда ожидается появление смешанных выражений, которые включают полиномы и рациональные функции. Причем класс rational должен находиться выше в иерархии классов, чем класс polynom. Это может быть реализовано указанием в конструкторе @rational/rational.m оператора superiorto('polynom'). При этом в методы класса polynom никаких изменений не вносится. Тогда выражения типа p + r, r + p, p*r и r*p, включающие полином p и рациональную функцию r будут использовать методы, определенные в конструкторе. Функция inferiorto('class_A') устанавливает более низкий приоритет объектов других классов по отношению к объектам класса, указанного в качестве аргумента; иначе говоря, объекты класса class_A имеют наивысший приоритет. Индексация объектов. Общее правило состоит в том, что индексации объектов аналогична индексации структур. Индексная ссылка. Использование индекса или указателя поля в правой части оператора присваивания называется индексной ссылкой. В этих случаях вызывается метод subsref, реализованный в виде встроенной функции. Соответствующие выражения могут иметь следующий вид A(I), A{I}, A.field. Каждый из них приводит к вызову метода subsref в форме B = subsref(A, S) Второй аргумент S является структурой с двумя полями. Поле S.type - строка, содержащая символы '( )', '{ }' или '.', которые определяют тип индекса. Круглые скобки соответствуют числовому массиву; фигурные - массиву ячеек; точка - структуре. Поле S.subs - массив ячеек или строка, содержащая фактические индексы. Двоеточие, используемое как индекс, соответствует строковой переменной ':'. Например, выражение A(1:2, :) вызывает метод subsref(A, S), где S - структура размера 1х1 вида S.type = '( )' Выражение A{1:2} вызывает метод subsref(A, S), где S - структура вида S.type ='{ }' Выражение A.field вызывает метод subsref(A, S), где S - структура вида S.type = '.' Эти простые обращения могут быть объединены в более сложные индексные выражения. В этом случае length(S) определяет количество уровней индексации. Например, выражение A(1, 2).name(3:4) вызывает метод subsref(A, S), где S - структура размера 3х1 со следующими значениями полей
Индексное присваивание. Использование индекса или указателя поля в левой части оператора присваивания называется индексным присваиванием. В этих случаях MATLAB вызывает метод subsasgn, реализованный в виде встроенной функции. Соответствующие выражения могут иметь следующий вид A(I) = B Каждый из них приводит к вызову метода subsasgn в форме A = subsasgn(A, S, B) Поля структуры S аналогичны полям структуры в случае индексной ссылки. Функция subsasgn различает присваивание вида A(i) = [ ] и A(i) = B, где B - пустой массив. Если правая часть - символ пустого массива [ ], а не переменная, то третий аргумент входа функции subsasgn является строкой '[ ]'. Следовательно, при разработке собственного метода типа subsasgn следует различать эти два случая. В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель
|
|
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
|
||
| На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
| E-mail: | ||
| Информация на сайте была обновлена 11.05.2004 |
Copyright 2001-2004 SoftLine Co Наши баннеры |
|