Mоделирование процессов и систем в Matlab (966709), страница 30
Текст из файла (страница 30)
Метод Ф вр! ау автоматически вызывается каждый раз, когда исполняемый оператор не заканчиваегся точкой с запятой. Для многих классов метод сй зр1 ву просто выводит на экран имя переменной, а затем использует преобразователь сдаг, чтобы вывести на экран символьное изображение объекта. Для рассматриваемого случая он может иметь такой вид: дтпседоп сдзр!ву(р) 1 Р(т.тдОИ/015Р(АУ завоя нв зхрвн ро1(птвв-ооаехтв 015р("); сдзр(Г ',(ярославе(1),' - ',савг(р).':']): слвр("); т Зввервение РО(ЛИОИ/015Р(АУ Проверим эффективность работы трех созданных М-файлов на простом примере. Сформируем вектор коэффициентов полинома »'т' (000-123400-6-5-7] У " 0 0 0 -1 2 3 4 0 0 -6 -5 -7 Создадим на его основе ро1употп-объект и сразу выведем его символьное изображение на экран.
Для этого достаточно не поставить символ в;» после обращения к функции ро1 упсп~ » Ро11 ро)упав(У) Ро11 - -1*х"8 + 2»х"7 + 3»х"6 + 4"х"5 - 6"х"2 — 5 х - 7: Создадим теперь ро1упош-объект по заданным его корням и значению старшего коэффициента. » Ро12 ро!утке((1 2 3 4 5].-5) Ро12 - -5»х"5+ 75»х"4 - 425»х"3 + 1125»х"2 - 1370"х+ 600: Проверим корни созданною полинома, используя процедуру гоо15 (см. далее). » гооез(Ро12) ВП5 5.0000 4.0000 3.0000 2.0000 1.0000 Как свидетельствует результат, все созданные М-файлы работают нормально. 158 Методы класса В системе МАТ1.АВ существует возможность создавать процедуры, которые могут быть выполнены не только стандартным путем (посредством обращения к имени процедуры), но и более простым способом — с использованием знаков арифметических действий, операций сравнения, скобок и т.
п. Так, в предыдущем разделе мы имели возможность убедиться, что процедура ей яр)ау выполняется не только при явном обращении вида г(тзр!ау(х), но и неявно, если некоторый оператор формирует величину х, а после этого оператора отсутствует символ «;». Поэтому если в любом новом классе объектов присутствует М-файл с именем б(зр(ау, он будет выполняться во всех случаях, когда очередной оператор, создающий объект этого класса, не заканчивается точкой с запятой. Приведем перечень имен таких М-файлов, предусмотренных системой МАТЮКАВ, с указанием оператора их неявного вызова (табл. 4.2).
таблица 4.2. Операторные функции Имл М-файла Условное Особенности применения название Оператор вызова Добавление знака «+» ОРгнз(а) Один аргумент. Результат относится к тому же классу. что и аргумент Один аргумент. Результат относится к тому же классу, что и аргумент Два аргумента. Результат относится к тому же классу, что и аргуиенты Два аргумента. Результат относится к тому же классу, что и аргументы Олпппз(а) Добавление знака «-» р(О5(аЬ) пп пц5(а,Ь) внвез(аЬ) Сложение а+Ь Вычитание а — Ь Умножение а*Ь впйчЫе(а,Ь) Правоеделение Левое деление Степень длЬ а.*Ь Умножение поэлементное Правое деление поэлементное а./Ь Левое деление поэлементное а лЬ Степень поэлеиентная (Ь(а.Ь) Два аргумента.
Результат — логическая величина Меньше а«Ь гпЫМбе(а,Ь) в ромег(а,Ь) Ввез(а.Ь) пггтЫе(аЬ) ЫгчЫе(аЬ) ромег(аЬ) Урок 4 ° Объектно-ориентированное программирование Два аргумента. Результат относится к тону же классу, что и аргументы Два аргумента Результат относится к тону же классу, что и аргументы Два аргумента. Результат относитсв к тому же классу, что и аргументы Два аргуиента.
Результат относится к тому же классу, что и аргументы Два аргумента. Результат относится к тому же классу, что и аргументы Два аргумента. Результат относится к тому же классу, что и аргументы Два аргумента. Результат относитсв к тому же классу, что и аргументы Два аргуиента. Результат относится к тому же классу, что и аргументы 159 Пример создания класса ро(упош Имл МчФайла Условное название Особенности применения Оператор вызова дг(а.Ь) Два аргумента. Результат — логическая величина Больше а>Ь (е(а,Ь) Два аргумента. Результат — логическая величина Меньше или равно Больше или равно Равно а -Ь Два аргумента. Результат — логическая величина де(а,Ь) аъ-Ь ед(а,Ь) а Ь Два аргумента.
Результат — логическав величина с(гапэроэе(а) Транспонирование А' Один аргунент. Результат относится к тону же классу, что и аргумент Один аргумент. Результат — относится к тому же классу, что и аргуиент Два или три аргумента. Результат-вектор относится к тому же классу, что и аргуиенты Один аргумент. Реэультат— изображение на экране символьного представления аргумента Два или более аргументов.
Результат— вектор-строка из аргументов Два или более аргументов. Результат— вектор-столбец из аргументов (гапэроэе(а) а.' Транспонирование а:д:Ь а:Ь со(оп(ал(Ь) со(оп(аЬ) Формирование вектора гдэр(ау(а) Вывести в команднои окне Вывод на экран (а Ь) Объединение а строку Объединение в столбец Индексная ссылка Ьогзса((а,Ь,...) чег\саг(аЬ....) (а: Ь) а(51...
5п) 5РЬэге((дэ) а(51,...5п) Ь эиЬэаэдп(а.,э,Ь) Индексное выражение Индекс подмассива 5РЬ5(паек(а,Ь) Ь(а) Хнгкг(пп Г Р105(Р)д) $ РОьТНОИ/Рь(Б Словенке пслиноков г - р + и Р Ро)уплв(Р): П - РР1Угсм(п): Перечисленные в таблице процедуры в МАТТ.АВ могут быль переопределены под теми же именами во всех новообразованных подкаталогах классов. После этого обычные операторы арифметических действий и операций сравнения могут применяться и при оперировании объектами новых классов. Смысл зтнх операций будет определяться содержимым соответствующих М-файлов в подкаталогах классов. Исходя из вышесказанного можно сделать вывод, что М-файлов с названиями, приведенными в табл.
4.2, может быть много. МАТЮКАВ различает их по типу аргументов, указанных в перечне входных параметров. Создадим, например, операцию (метод) сложения полиномов, используя операторную процедуру р) цэ. Текст соответствующего М-файла для подкаталога (шРО- ПНОМ приведен ниже.
160 Урон 4 ° Объехтно-ориентированное прогрвииирование К - о,п - Р.п: г - ро17пах([кетов(1. 1) р. с) + [тегов(1.-1) О.с])г т Завериение Р6ЛИОИЛЧ.ОБ Сначала процедура переводит оба аргумента в класс ро1 упав. Это нужно для того, чтобы метод работал и тогда, когда один из аргументов задан как вектор, или когда в качестве аргумента используется выражение типа р+г, где р — ро1упош-объект, а г — число.
Затем процедура дополняет нулями векторы коэффициентов полиномов-слагаемых, если в этом возникает необходимость (при неодинаковых порядках полиномов). Фактически сложение сводится к сложению этих исправленных векторов коэффициентов. Заключительной операцией является создание по полученному вектору полинама суммы нового ро!упош-объекта с помошью конструктора полиномов. Проиллюстрируем работу этого метода на примере. Введем вектор коэффициентов первого полинома » 91 [ 2 -3 0 5): и создадим из него полинам-объект: » Р1 - ро)упав(91) Р1 " 2'"х"3 - 3"х"2 + 6 Образуем таким же образом второй полинам: »92 [200900-3+5): » Р2 - ро1)пвв(92) Р2 - 2'"х"7 + 9"?~"4 — 3"х + 5 Сложим зти полиномы: »Р1+Р2 В результате получим: апв = 2"х"7 + 9«х"4 + 2"х"3 - З«х"2 - 3»х + 11 Аналогичные результаты получаются и в случае, если один из аргументов «оши- бочно» представлен вектором: » Р1 + 92 апв " 2"х"7 + 9«х"4 + 2"х"3 - З*х"2 - 3»х + 11 » К( + Р2 апв - 2 х"7 + 9«х"4 + 2Чгз - 3»х"2 - 3'х + 11 Однако если оба аргумента представлены векторами„система сразу же отреаги- рует на это, обнаружив ошибку: » 91+ 92 ??? [ггог ов)п9 > + На1Г(Х ГДВЕПВ(пп» ХВВ( аОГЕЕ В этом случае система уже использует не М-файл р[июш из подкаталога ЙРОЕт'- ИОИ, а аналогичную встроенную процедуру для векторов.
Эта процедура осушествляет сложение векторов лишь при условии, что длина их одинакова. Поэтому и возникает ошибка. Пример создании класса ро1упатп Аналогичной является процедура вычитания ро1упопт-объектов: (цпс$1оп Г ш(пцв(р.о) $ РОЕННОИ/М(Н05 Вычитание полиноиов г - р — о р - ро1упош(р): ц - ро1упош(О): К - О.п - р.п.
г - ро1упош(Едегоз(1.к) р. с) - Светов(1/-$) О.с]); $ Завершение РОПНОИ/И(Н05 Проверим работу атой процедуры на примере: »Р1-Р2 апв - -2»х"7 - 9 х"4 + 2'"х"3 - 3"х"2 + 3 х . 1: Создадим еще несколько методов класса ро1упов. О бои01е — по заданному полиному определяет вектор его коэффициентов и порядок: (посв)оп (ч,п) - боцб)е(р) $ РОЕЙИ)М/09)В(Š— преобразование ро1упош-обьекта в вектор его коэффициентов $ ч - ООСВЕЕ(р) превратит полинон-обьект "р" в вектор "ч", $ содершашид коэффициенты полинона. Располотенные в порядке уменьшения $ степени аргунента $ Обрашение (ч,п! - ООСВьЕ(р) позволяет получить такие $ значение "п" порядка этого полинона.
Н - р.с: и - р и; $ Завершение РО(тц)Н/ООСВЕЕ О ОИ Р'à — создает ро1упопт-объект„являющийся производной от заданного поли- нома: бцпс11оп О - сМ(т(р) $ РОПНОМ/01РГ форнирует ро1упои-производнуш "р" $ от заданного полннона "р" р * ро)з ош(р); б - р.п: Ц - ро1)пош(р.с(1: б).*(б : -1: 1)): $ Завершение РВЛИОИ/01РЕ О и$1шез — создает ро1упот-объект, являтощийся произведением двух заданных полиномов: гцпсстоп Г ятс(яев(р.ц) $ РОПЦ)И/МТ1ИЕ5 Произведение полинонов: г - р"о р " (р): О - ро1упов(О): г - ро!упоп(сопч(р.с.о.с)): $ завершение РОпи)м/мт1ие5 О игсй и'п1е — создает два ро! увы-объекта, один из которых является частным от деления первого из указанных полиномов на второй, а второй — остатком такого деления: тцпсС!оп гет = вгб(н(бе(р.ц) $ РОПМОИ/МНО)Н!ОЕ Деление попинонов: г - р/О р ро1упош(р): т) ро1упош(О): (гг.го] - бесопн(р.с.ц.с).- ыг Урок 4 ° Объектно-ориентированное програннирование гез(1» - ро1упсв(гг): гез(2» - ро1упов<го): $ Заверяение И)ЕТ)ЕИ/НВО191ОЕ О гоотз — создает вектор корней заданного полиномж Тнпс(10п г ггюгз(Р) Х ИМ.УМОМ/ВООТБ вычисляет вектор корней полинона "р" р = ро1)тхю(р): г - гоозз(р.с).
-Х Завервюние И)ЕТК(ХВ/йСОТВ О ро1уча1 — вычисляет вектор значений заданного полинома по заданному вектору значений его аргумента: ГОПОФ1оп у - ро1уча1(р.х) 3 РСИК(И/РСЕууй. вичисляет значение полинона р" Х по заланноиу значению аргунента "х" р ро1упск(р); у О: Тот а - р.с ,у - у.нх + а.- епб Х Завершение РОСТИ)Н/РСЕУУЛЕ О р1 от — строит график зависимости значений заданного полинома в диапазоне значений его аргумента, который содержит все его корни: унтсвтоп р1ОС(р) т И)ЕТН(Н/РЕОТ - построение графика полинона "р" р - ро1упсв(р); г яах(аЬз(го015(р.с))): х <-1.1:6.01:1.1)яг: у - ро1уча1(р.с.х): р1омх.у): Ог10: гтс1е(спаг(р)); х1аЬО1('Х'); Х Завервение И)ЕУИОИ/РЕОТ О г01 лОе(р.
хг) осуществляет деление полинома р на число хг: Топо(1оп г - гб1чгфе(р.хг) 3 ИХЛИОМ/Ю1Ч1ОŠ— правое веление гюлинона на число: 3 г - р/хг р - ро1угов(р): г.с - р.с/хг; г = ро1упсю(г.с): $ Завервение РОСТИ)Н/Ю!у)ОЕ Проверим действие некоторых из созданных методов: » Ро1 ро1упсв((1 2 3 4 51) Ро1 - х 4 + 2"х 3 + 3"х"2 + анх + 5; » ч ггюзз(РО1) ч 0.2878 + 1.41611 0.2878 - 1,41511 -1.2878 + 0.85791 -1.2878 - 0.85791 » р1ОС(РО1) Результат представлен на рис. 4.2.
Вопросы для саиопроверки 1бЗ Рис.4.2. Результат выполнения процедуры р1ог для ро1упое-обьенза Чтобы получить перечень всех созданных методов класса, следует воспользоваться командой песпо4з <иня класса>. Например: Иетиоез тог с1азв ро1улои: слаг Оззр1ау излив па1еез озтт Оплоте игезтзое р1ос р1из ро1ута1 гоосз ро1упов го!тзее Теперь мы имеем удобный вычислительный аппарат для работы с полиномами. Развивая его далыпе, можно создать новый класс более сложных объектов — класс рациональных передаточных функций, которые являются конструкцией в виде дроби, числителем и знаменателем которой являются полиномы. Для этого класса также можно определить важные для инженера операции сложения передаточных функций (которое соответствует параллельному соединению звеньев с заданными передаточными функциями), умножения (ему соответствует последовательное соединение звеньев) и многие другие, отвечающие определенным типам соединений звеньев.