Матросов А.В. Maple 6. Решение задач высшей математики и механики (1185909), страница 23
Текст из файла (страница 23)
в свою очередь, имеет два целых операнда (тип 1ааеое ): > ипаоауре (орз 2); > ор(орз 2) 1 х,— '2 > орз 2 1:=ор(1, орз 2) оРЗ 2 1: > епааЬуре (орз 2 1) азаиЬо1 > орз 2 2:=ор(2,орз 2) 1 ОрЗ 2 2 — — 2 > е)аассуре(орз 2 2) )гас((ои > ор(орз 2 2) > е)аасеуре (Ъ [11); еиаасуре (% [21); (и(еле« 1и(еле« > ор([1,4,6,8)); 1, 4, 6, 8 Таким образом,.исследуя только один операнд исходного выражения, мы дошли до операндов базовых типов а)ааоо1 И 1ааеое«, КОтОрыЕ яаляЮтся простыми и представляют самих себя.
Исследование других операндов также завершится приходом к базовым простым типам. Суммируя проделанную работу по выявлению операндов разных уровней исходного выражения, его можно представить в виде дерева выражения, в узлах которого располагаются типы выражений и подвыражений, а ветви представляют соответствующие их операнды. На рис. 2.1 показано дерево нашего исходного выражения. Операндами списка или множества являются его элементы: Часть 1. Основы Мар(е 122 > ор((х"2,х"31); 2 3 Другие структурированные объекты (массивы, таблицы, матрицы, векторы) имеют более сложное внутреннее представление в Мар!е и не представляются таким простым одноуровневым деревом, как списки и множества В качестве упражнения вы можете исследовать структуру массива, придерживаясь описанной выше технологии.
/~ /~ /~~ /~ 1 х х Рис. 2.1. Дерево выражения 1 2 Если читатель помнит, то рассказывая о командах, выделяющих элементы из списка/множества (аа1ест(), х яо е()), или команде вар(), применявшей функции последовательно ко всем элементам списка/множества, мы в замечаниях отмечали, что они работают и с общими алгебраическими выражениями. Действительно, семантика этих команд остается такой же, как и при работе со списками/множествами, но в отличие от использования в них упомянутых объектов, предоставлявших свои элементы для выполнения последовательности однотипных действий, при использовании алгебраических выражений итерации осуществляются по операндам этих выражений.
Например, следующая команда вар() вычислит квадрат каждого операнда выражения и возвратит результат в виде исходного выражения, но с другими операндами: > вар(х->х"2,у"ат) 2) В выражении этого примера, имеющем экспоненциальный тип ", два операнда у и ая каждый из которых возводится в квадрат, а потом измененный первый операнд возводится в степень измененного второго операнда. Аналогичным образом работают и команды ветесс () и хепк е (): > т := х -> еяаХЬ(та(х<0)=стае); 1:= х -+ ева!Ь( (в(х < 0 ) = ттве ) (23 Глава 2 Основные сбьвкты и команды > ве1есп(1, 51п(х) -5-сов (х) -х"2) ) -5 > хевове (Суре, 51п(х) -5-сов (х), ГппсС1оп) ) -5 — сов(х) Команда хезвове(), казалось бы, должна удалить все функции из выражения.
Однако этого не произошло?! Эта команда в нашем примере должна удалить из выражения все операнды, имеющие тип гопсттоп. Проверим, какой тип имеет последний третий операнд: > еьаппуре (ор (3, втп (х) -5-ооз (х) ) ) > ор (ор (3, 51п (х) — 5 — сов (х) ) ) -1, СО5(Х) Оказывается, тип третьего операнда произведение ., а не функция, как мы думали, поэтому-то член сов (х) и не был удален из выражения. Дело в том, что тип всего выражения сумма е, и поэтому тип третьего операнда не функция, а произведение, так как функцию сов (х) следует умножить на -1. Мар1е предлагает большое количество булевых функций, которые можно ИСПОЛЬЗОВатЬ В КОМаНдаХ зе1ес: () И пело е () дпя рабстЫ СО СтруКтурОй ВЫ- ражений.
Мы только расскажем об их небольшом числе, остальные можно найти в справочной системе Мар!е. Команда пав() определяет, содержится ли некоторое подвыражение в заданном выражении. > Пав (х ехр(сов (х-~2) ), х+2); п.ие > Пав(х*ехр(сов(хе2)),сов); > ве1есп(ьав, сов(х)+вгп(х)+сов(2*х)*51п(х), сов) сов(х) + сов(2 х) 5!П(х) > хепоче(Пав, ехр(сов (х) ) евтп(х)+сов (2*х) *вгп(х)+ехр(хеу), ехр); 5(п(х) + сов(2 х) 5(п(х) Команда пав () понимает только те подвыражения, которые могут быть определены с помощью команды ор() при разборе структуры выражения.
Поэтому если необходимо выделить из выражения только члены, содержащие некоторую функцию, то в команде пав() следует задавать лишь имя этой функции, как показано в примере 2.41. Часть 1 Основы МарЬ 124 Замечание В функции пая () можно задать несколько подвыражений в виде списка.
Ее результатом будет истина тогда и только тогда, когда найдено хотя бы одно из подвыражений в списке. Команда паясуре() определяет, содержит ли выражение подвыражения за- данного типа: > яе1есг (Паятуре, ехр (соя (х] ) ья1п (х) +соя (2*х) *я1п (х) ьехр (х у), ' * ' ); (>г) соз(2 х) йп(х) + е > яе1есг (паясуре, ехр(сов (х) ) гя1п(х) ~соя (2*х) *яхп(х) ьехр(х*у), О Обратите внимание, если в выражении не найдено ни одно подвыражение ЗадаННОГО тИПа, тО фуНКцИя яе1есг () ВОЗВращаЕт О. Если необходимо выделить из выражения не операнды, содержащие подвыражения заданного типа, а сами подвыражения, то следует использовать КОМаНду 1пдеся (), ВтОрЫМ ПараМЕтрОМ КОтОрОй ЗадаЕтея тИП ПОдВЫражЕНИя: > хпг)етя (ехр(соя (х) ) ья1п(х)+соя (2*х) *ятп(х,' ьехр(х*у), ( соз(2 х) Ип(х), х у, 2 х ) Эта функция возвращает в виде множества все подвыражения указанного типа.
Не все подвыражения можно выделить, используя только типы данных, поддерживаемые Мар)е. Дело в том, что некоторые, встречающиеся в математике операторы, не имеют соответствующего типа. Например, операция дифференцирования. В этом случае следует использовать вместо типа Мар!е специальную функцию яресгхпс(суре,паже), которая связывает имя оператора папе с типом суре. Следующий пример демонстрирует выделение из выражения членов с операцией дифференцирования: > СЕ:=ехрапд Штгт (выл(у(С) ) *С "2, С) ); г д ВЕ:= соз(у(г))(1 — у(г)) гь+ 2 гйп(у(г)) с (дг > яе) есг Шаясуре, СЕ, яресхипс (апуСП1пс,г)111) ) г соя( у(г)) ~ — у(г)) г г' д (,дг 2.3.2.3.
Подстановка и преобразование типов При выполнении математических преобразований часто необходимо произвести замену переменных в выражении, функции, уравнении и т. д., то есть вместо какой-то переменной подставить ее представление через некоторые (25 Глава 2 Основные обьекгы н команды другие переменные. Для этих целей в Мар)е сушествует команда яоья(), синтаксис которой имеет следуюший вид: яоЬя( старое выражение = новое выражение, выражение) яоЬя( я1, ..., язз, выражение); Во второй форме этой команды каждое из я1, ..., вв является уравнением или списком/множеством уравнений. Первая форма команды анализирует выражение, выделяет в нем все вхожления старое выражение и подставляет вместо них новое выражение.
Вторая форма позволяет выполнить серию подстановок в зраженне. Подстановки ВЫПОЛНяЮтея ПОСЛЕдОВатЕЛЬНО, НаЧИНая С я1. Этс ОЗНаЧаЕт. Чта ПОСЛЕ ВЫ- полнения первой подстановки, определенной уравнением ят, Мар(е отыскиВаЕт ВХОждЕНИя ЛЕВОЙ ЧаетИ УраВНЕНИя я2 ВО ВНОВЬ ПОЛУЧЕННОМ ВЫражЕНИИ и заменяет каждое такое вхождение на выражение, заданное в левой части ураВНЕНИя я2. ЕСЛИ ПОдСтаНОВКИ ЗадаНЫ В ВИДЕ СПИСКа ИЛИ МНОжЕСтВа ураВ- нений, то они выполняются одновременно, т.
е, вхождения выражений. заданных в левых частях уравнений, определяются в исходном параметре выражен е. Например, после выполнения подстановки язья( =у, у=, 'х,уы исходный список (х,у) будет преобразован в (х,х), тогда как при использовании команды зья(( =у, у=х), (х,у)) переменные х и у в списке поменяются местами: список будет иметь вид (у, х). > ех: =соя (х) аооя (х) " (113), знзз ех:= соя(х ) + соя( х ) > яоья (соя (х) =27, ех); 27 + 27 > я1взр11йу(%) з 30 > ех1:=я"3; ех!:= я > яоья(я"2=1-с 2,ех1); яз Последняя команда подстановки янья() в примере 2.42 не подставила в выражение яз вместо яз выражение ! — с'.
Дело в том, что эта команда осуществляет замену, только если левая часть уравнения подстановки совпадает с одним из операндов в структурном представлении выражения. Такая подстановка называется "синтаксической подстановкой". Для выхода из подобных ситуаций можно предложить несколько способов. Первый заключается в том, что следует явно выразить переменную я из Часть!. С)сновы Мвр(е уравнения зг= ! — с' и снова воспользоваться командой лексической под- становки воьз(): > воЬз (в=зять Ы-с 2), ех1) (э гэ ( ! — с') МОЖНО ВОСПОЛЬЗОВатЬСя КОМаНдОй вьвр11ту(), уКаЗаВ В НЕй В КаЧЕСтВЕ Пара- метра требуемую замену: > вгпр11Гу(ех1,(з 2=1-с 2)) И, наконец, можно воспользоваться командой а1озоьз(), осуществляющей не синтаксическую, а алгебраическую подстановку: > а1овоьв (з "2=-1-с 2, ех1) з (1 — сг) Обратите внимание, что в первом варианте в выражении заменены все вхождения переменной э; тогда как в двух других эта переменная остается в результирующем выражении.
Если известно, какой операнд выражения необходимо заменить, то следует использовать команду зоьзор() со следующим синтаксисом: зньвор(уравнение1, уравнение2, ..., уравнениеп, выражение); Первые параметры представляют уравнения, в правой части которых стоят порядковые номера операндов выражения, заданного последним параметром выражение, а правые части представляют выражения. на которые заменяются соответствующие операнды: > ехэ=сов (х) +сов (х) (123); (э/ээ ех;= соз(х ) + сов(х ) > внЬзор(1=х"2,ех)э ( э гэ ) х'+ сов(х) > зоьвор((2,1,0)=з1п,ех)э энэ) сов(х) + в(п(х) Обратите внимание на последний оператор подстановки. Здесь в правой части уравнения, задающей номер операнда, стоит список, в котором целые числа представляют порядковые номера операндов последующих уровней в структуре выражения.