Манзон Б.М. Maple V Power Edition (1185908), страница 21
Текст из файла (страница 21)
Если процедура 'венев/Р задана, то выполнение команды венев(Г(х,у),х) вызовет выполнение процедуры ' венев/Р (х,у,х) для вычисления ряда. Заметим, что процедура ' венев/Р будет создавать объект типа веиев, а не полипом (ро!уловив!). Чтобы получить вычисляемый полипом, нужно применить команду совтег((выражение, ро!упот). 8.2.3. Сравнение с шаблоном Еще две очень полезные функции, помогающие программировать правила вычислений: ша(св — сравнение с шаблоном и Гуреша(св — сравнение типов.
ФуНКцИя Ша(ев ВЫЗЫВаЕтСя СЛЕдуЮщЕй КОМаНдОй татов(ВЫражЕНИЕ = Шаблон, т, 'з'), где + выражение — сравниваемое выражение е шаблон — шаблон, с которым сравнивается выражение + т — имя главной переменной + 'в' — имя возвращаемого аргумента Функция ша1св возвращает (гве, если она может подтверлить соответствие шаблону и Га!ве в противном случае. Если сравнение удачно, то величине з присваивается система равенств, подстановка которых в шаблон приведет к сравниваемому выражению. Главная переменная — именно та переменная, относительно которой происходит сравнение с шаблоном.
Сравнение командой взатсв является математическим сравнением, иначе говоря, выражения вычисляются, если возможно, чтобы удовлетворить шаблону. Команда (уреша(св сравнивает только форму объектов. Приведем пример > тасс)х(ехр(х)/к"(2) = А*ехр(х)"Р*х"(), х, 'в')т 8. 11РОГРВММИРОВаИИЕ В СРЕДе Мвр!е 198 > вт (А=1, Р=1, О= — 2) Заметим, что функция ша1с)1 может быть очень полезна также, когда из сложного выражения необходимо выделить члены, соответствующие некото- рому шаблону. Функция туреша1св осуществляет сравнение выражений по типу перемен- ных. Она вызывается одной из следующих команд: (урешатсв(выражение, 1) или турешатся(выражение, 1, 'з'), где выражение — любое выражение 1 — выражение, содержащее переменные с указанием их типов '.
оператором з — (необязательная опция) — имя Команда (уреша1с)1 является логической функцией. Она возвращает 1гве, если вводимое "выражение" удовлетворяет типу 1. Обычно 1 содержит выра- жения вида т ( х1 1 где т 1 переменная, 1 1 — ее тип. Если сравнение командой туреша(св(е 1, з') успешно, параметру з присва- ивается список уравнений вида х ( = г 1. Заметим, что аргументы оператора связи ':: шаблона вычисляются. Таким образом, если переменной х может быть присвоено некоторое значение— например, в предыдущей команде сравнения — то, чтобы не было ошибки, ее необходимо заключать в кавычки.
То есть записать команду в виде 1уреша1св(е, х хламье=гапке). Приведем примеры > суреиваВсЬ( у*3, Ь: 1патве* (п111п~едек), 'в' ) 1 > вт (ь = у, а = 3) > ВуреиваВсЬ( [а,Ь,с,с1,е], 1хвк( зг11павге ), 'в' ) т йие > ву [г = а, г = К г = с, г = г(, и = е] Команда Гурев1а1са может быть также использована для разбиения сложного выражения на элементы, тип которых удовлетворяет шаблону сравнения.
194 Мер)е У Рожег Ес(Шоп 8.3. Пакет Оотаюпз Ров)а(яа — новый пакет Мар!е. Его идея пришла из программы АХ10М, и состоит в том, чтобы лередавать в качестве параметра в аргументах процедур набор функций как одно целое (называемое домен (вова(в)) „например кольцо коэффициентов кольцу полиномов. При этом код программ вычисления полиномов не будет меняться при изменении домена кольца коэффициентов, то есть он более универсальный, чем код программ Мар)е. Этот пакет предполагается использовать как средство для разработки сложных алгоритмов. Предполагается заменить в следующих версиях Мар)е коды некоторых библиотек на более универсальные коды Репи(яа.
8.3.1. Домены в Оотайтв Домены являются функциями, которые возвращают таблицы операций для вычислений в данном домене. Например, 1я(ейег() возвращает таблицу операций для вычислений с целыми числами, включающую +' — сложение, ' — ' — вычитание, ' " — умножение и так далее. Все домены принадлежат множеству категорий, которое поддерживает операции <> — логические отношения элементов; 1прыс — для конвертирования выражений в представление данных Цоааапв1 Оитрит — для обратного конвертирования; Капйош — для генерации псевдослучайных величин области; Туре — для проверки, является ли величина элементом области.
Списокдоменов,сконструированных внастоящее время вРоавйм следующий: Е 1птедег(); () касаопа1(); а Оацввйап(К:К1пд); Евой Епюй(п:ровйпт); ОР Оа1оавРТе1й(р:ргаше, к:ровапт); ГЮР ОепвецпачагаасеРо1упошаа1(К:К1пд, х:паше); ООР Отйетейцпачат1асеРо1упошйа1(Ргцп1чагаасеРо1упош1а1(К), й:(К,К) -> Воо1еап); ОЕЧ ОепвеЕхропепСЧесеог(Х:11вт(паше))1 РЕЧ РтйшеихропепСЧесеот(Х:11ве(пате)); МЕЧ Мар1еихропептчесеот(Х:11вс(паше))~ ТЕЧ Масац1ауЕхропепСЧесеог(Х:11вт(паше)); ТГ)МР ТаЬ1еШвсг1Ьцседнц1сйчагаасеро1упошаа1(К:КТпд, Е:ЕхрОПЕПСЧЕСсет); 8(ЗМР ЯрагвеШвег1Ьцеейнц1С1чаг1аееро1упош1а1(К:К1пд, Е:Ехропепечесеог); 8.
Программирование в среде Мер/е 1В5 оР ехрапйеймогта1РогтяиогкепсР(е1й(()ндсйРовакп]; ЕББР Ехрапйейиогта1ГогтЯпосьепгР1е1й(Г)ывсйт)оваьп); РМРОР Рассогейногта1РогтчиосьепсР1е1й(РывсйРоваьп); НР наг(опа1Рипсгьоп(ЭмдсйЭотаьп, Х:11ыг(пате)); Ь()РЯ Ьагут)пьчаг(агеРовегЯегьеы(Е:Е(пд, х:паве); Масггх(игиапд); ЯМ Ядпагеиаггьх(п:роы(пг, Игн1пд); ЯАЕ Л1деЬга1сЕхсепыьоп(Р:()пч1чага1геРо1упов1а1, вгц) Кроме того, имеется несколько специальных доменов, использующих Мар/е-представление полиномов с целью получения большей эффективности для целых и рациональных коэффициентов.
М()Р Мар1е()п1чаг1асеРо1упот1а1(И:Е, (2, Етой, х:паве); ММР Мар1еМи1гьчагкаыеРо1употта1(И:Е, (), Евой, Х:11ыг(пате)) Вывести все операции, доступные для данного домена можно при помощи команды ы))ои(Р, орега((опы). 8.3.2. Примеры использования пакета Оотагпз На нескольких примерах будет показано как использовать Роп)а(вк Заметим, что все функции Роп)а(пы начинаются с заглавной буквы. Вначале загрузим пакет Ров)а(пы. > зги]х(Рот~ххзв) ' --------------------Поваьпы чегытоп 1.0 1птг1а11у йей1пей йота1пы аге х апй 0 ЬЬе 1пгедегы апй гас1опа1ы АЬЬгечтагаопы, е.д.
Р()Р гог ()епыеГ)пачагьаакеРо1уповьа1, а1ыо тайе [(л(г) При загрузке бьши определены области Х (целых чисел) и Я (рациональных чисел). Давайте проделаем несколько вычислений. Найдем наибольший общий делитель чисел 345 и 60: > К (Ес(3] (345 60) г !5 Перемножим несколько рациональных чисел: > (]['"'](3/2г7/3, 12/5)г 42/5 196 Мар[е У Ро(нег Ее[[1юп Проверим, что Х и () являются таблицами Мир!е: > Ьуре(Е,паЬХе) а (гие Они содержат операции (/>тар[е процедуры) для вычислений в Х и Я, Какие операции доступны в ('.)? > в)аоег(Я,оретаЬаопв)) Яадпагпгея аког сопясгпссог О поте: оретагаопя ргеНхей Ьу — аге пог ауа11аЬ1е * : (0,0*) -> О * : (1птедег,О) -> О + : (0,0*) -> Π— О -> О (0,0) -> О /: (0.0) -> О /: (О, 1пгедег) — > О О: О 1: О (0,0) -> Воо1еап <= : (0,0) -> Воо1еап <> '- (0,0) -> Воо1еап (0,0) -> Воо1еап (0,0) -> Воо1еап >= : (0,0) -> Воо1еап АЬяо1пгецедгее : 1пеедег Ваяе()оваап : 1пгедга1роиаап СЬагастегаят1с : 1пседет Соетсе : 1пседег -> О цепов : О -> и П3лр: (0,0) -> (]паоп(О,РА1Ь) Епс11оеапнотта: О -> 1пгедег Рассог : О -> [0,[[0, 1пседет]*)] асц : 0* -> О осдех : (О,О,Иаве,нате) †> О осс[ех : (О,О,Маше) -> О 1прпс : Ехртеяяаоп -> Пп1оп(О,РА1Ь) 1пу : О -> Пп1оп(О,РА1Ь] Ьст : О* -> О Мах : (0,0*) -> 0 Мап : (0,0*) †> О МоЖ1агиовопюгрнанп: (] -> (О -> Ппаоп(1пгедег, РА1Ь), 1пгедег) 8.
Программирование в среде айар]е 197 Ыотта1 : 0 -> 0 Нижет : 0 -> 0 Опорное : О -> Ехртеееуоп Роьлаос]: (0,1пседет,о) -> 0 Ртаве : О -> Воо1еап дно : (0,0) -> 0 опо : (0,9,ыате) -> Ц Еапйов : () -> 0 ее1ас1че1уРгьте : (0,0) -> Воо1еап нет : (о,о,Нате) -> 0 нет : (0,0) -> 0 Яьдп : ц -> ци10Ы(1,-1,0) Я1аеп : (0,0) -> 0 Ята11егпис11с)еапнотп~: (О,О) -> Воо1еап Ядгегее : 0 -> [0,[[0,1пгедег]*]] Туре : Ехргеввьоп -> Воо1еап цпьт: () -> а цп1тиогаа1 : 0 -> И,0,0] Еего : 0 -> Воо1еап (О, 1пседег) -> 0 Далее выполним некоторые операции в области полиномов от одной переменной над ().
Вначале нужно создать домен в ()[х), назовем его С. > С: в Эегхвет)ххЫагхасеРо1утиЫа1 ((), х): Имя )Зепве(]п)таг[[еРо]упогп]а! указывает, что используемая структура данных является плотной. Каждый домен пакета )3огаа!пв имеет функцию Вапйоп). Эта функция возвращает случайно сгенерированный элемент из домена, который можно использовать для написания примеров. Введем случайный полипом.
> а:= С(1(атзе(о)п) (): а:= — — + — х + — х' 35 50 55 97 79 37 Теперь выведем полипом гп > С(Оисрзхс) (а) т — — + — х+ — х~ 35 50 55 97 79 37 Можно вычислить степень полинома. > С()Заднее) (а); 198 Мер!е Ч Рочгег Ес(!т!оп Квадрат полинома > С['"'](а,2)) 1225 3500 15055350 5500 3025 х— х' + х'+ х 9409 7663 22398949 2923 1369 ])опза!вв может также оперировать с матрицами и другими объектами линейной алгебры. Вычислим, например, обратную матрицу к матрице Гильберта 3х 3. Вначале мы должны создать матричный домен: > МЗ:* 8<раахеМасх1х(З,Я) ! > А г= МЗ[Хирис] ([[1,2,3], [1,1/2.,1/3], [3,1/4,5]])) А:= [1, 2, 3], 1, —, —, 3, —, 5 > МЗ [реп] (А) 1 > МЗ[1пзг](А)) Давайте теперь вычислять матрицы полиномов в (;1[х].