Манзон Б.М. Maple V Power Edition (1185908), страница 20
Текст из файла (страница 20)
Примеры: 4 Многочлен > хеао11Ь(С): й 4= 1-2ЯХ+ЗЯК"2-2*х"3+Х"4) 7':= 1 — 2 х + 3 х' — 2 х' + х > С(й) ) с0 = 1.0-2.0*хауз.0*х*х-2.0*х*х*х+рою(х,4.0) > С(й,ор1азаахей)) Е1 ~ х"хт еЗ е1 е1; С4 = 1.0-2.0*х+3.0*С1-2.0*С1*х+С3; 186 Мер!е У Рочвег Ее(11)оп 4 Выражение с элементарными функциями и константами > й := Р1*1п(х"2)-а4(х~(2)*1п(х"2)*24 (':= я !п(х' ) — /2 1п(х') > С(й) 4 СО = 0.3141592653589793Е1*1од(х*х)-вдхс(2.0)*рою(1од(х*х) 2.0); > С(К,оре1п)1аее1); с1 = х*х; С2 = 1од(С1); с4 = адхс(2.0)р с5 = с2*с2; с7 = 0.314159255358979381*с2-с4*е5у + Массив выражений > ч г= актау( [ехр(-х) *х,ехр(-х)*х"2,ехр(-х)*х" 3] ) 4 у:= [е~ "' х, е' *' х' ' е' ' х ) > С(ч,орслшл.хаем) 4 + Матрица с неопределенным элементом > А := а~гау(1..2,1..2,аутшаесх1с): А[1, 1) г= 1од(х) 1 А[1,2) г= 1-1од(х) рх1ай(А)4 1 — 1п(х)1 А[2, 2] ] с 1п(х) 1 — 1п(х) > С(А,рхесхахоп=е1оиЬ1е)т А[0] [О] = 1од(х); а[0] [1] = 1.0-1од(х); А[1] [О] = 1.
0-1од(х) р й [11 [1] = ипс]ег'(пед; ~1 ~3 ч[0) ч[1] ч[2] ехр( — х) ) х*х; — с1*х; с1*г3; г.1*~3*х; 8. Программирование в среде Мар!е 187 > С(А,орсхшз.хей) ! с1 = 1од (х); с2 = 1,0 — с1; л[0] [0] А[0][1] = с2; А[1][0] = С2; А[1][1] = ппс]е11пед; Для перекодировки процедур Мар(е на язык Фортран используется команда Гог1гап, вызываемая и действующая аналогично команде С, 8.2. Программирование свойств и правил вычисления функций и операторов Предположим, что мы хотим ввести в Мар!е К совершенно новую функцию, которую невозможно выразить через другие элементарныс или специальные функции, имеющиеся в программе, Какие программные срелства имеются в Мар[е для задания свойств этой функции, правил преобразования и упрощения выражений, содержащих эту функцию, а также получения численных значений и построения графика? 8.2.1.
Команда сге6ае Команда вейде задает свойства оператора или функции, ее можно применять тремя различными способами. Способ ! Можно определить оператор, как принадлежащий некоторому абстрактному алгебраическому пространству аа командой вейде(аа(оператор)) (в настоящее время программа позволяет определять пространство аа как линейное (аа=Ьиеаг) или как группу (аа=бговр)). Например, введем оператор и как линейный > сгейхпе(1хтзеак(ь) ) 1 Если мы воздействуем этим оператором на некоторую функцию, скажем многочлен 2*х+3"х" 2, то получим > Ь(2*х+3*х*2) 1 2 ]з(х) + 3 [з(х') То есть мы видим, что выражения, содержащие этот оператор, упрощаются.
Это не случайно, при задании оператора командой вейде автоматически создаются входы для таких команд, как я]врагу, еуа[, ехравв, вИТ, яег1ея, и 1ея1еп так, чтобы осуществить необходимые свойства оператора. 188 Мар1е Ч Ропгег Ее(Шоп Если абстрактное алгебраическое поле — группа, то команда зейве записывается следующим образом: йебпе(бгопр(Имя оператора, Единица, Оператор обрац(ения)), где а "Имя оператора" — имя бинарного оператора, определяемого на группе; а "Единица*' — символ единицы (еднничного элемента) группы; а "Оператор обращения" — унарный оператор, который вычисляет обратный элемент для любого элемента группы.
При такой записи команда йейпе задает оператор над группой, тем самым, задавая правила вычислений, преобразований и упрогцений этого оператора. Свойства группы; а замкнутость; а ассоциативность; а единичный оператор действует как слева так и справа; а оператор обращения — унарный оператор. Приведем пример > йеИззе(6коир('й+', Е, 'й-'))Г > и й+ ЕГ > й- (й- а)1 > а й+ (й- а)1 Способ а.
Можно определить оператор заданием некоторых свойств. В этом случае команду ()ейпе нужно применять в следующей записи: пебпе(оператор, свойство.1, свойство.2, ...), где "свойство.('* — наименование свойства оператора. Операторы могут использоваться в инфиксной нотации (й-имена): а а* Ь а* с; пли в функциональной нотации (любое имя): Ор(а, Ь) ) Ор (а); Ор (а, Ь, с) В настоящее время Мар(е позволяет задавать следующие свойства: а ипату — свойство унарности оператора; а )п)пату — свойство бинарности; а аэвос!айте — свойство ассоциативности: Г(х,Г(у,г)) = Г(((х,у),г) = Г(х,у,г); а соп)щп(абуе (или вутпще1г(с) — свойство коммутативностн (симметричности): Г(х,у) = ((у,х); 8.
Программирование в среде Нар!е 139 + ап1(ауиппе1г(с — свойство антисимметричности: Г(х,у) = -Г(у,х); + )вчегае=а — определяет обратный (для унарного) оператор к оператору й; ь )аев111у=х — выражение х, примененное к оператору Г как слева так и справа дает единичный оператор; ь хего=х — определяет х как нулевой элемент оператора Г, так что если любой аргумент Г есть х то результат также х. Приведем пример > оеНпе('йА', аввосхапхчге, совввппаИчге, ИепИпу=О, вето=у)Ф > х йА (й йА х) йА (О йА х)Фс йА вФО йА хФ х йА (б йА х)Ф ЙА(б 2, х, х) ФААД ЙА(б й х) > йейхпе(й, совввипапхзге, аввосхабазге, хпзгехве д)Ф Хахпхпд: пеы ЙеГ(пт'с(оп Гоп Г > й( д(х), х,у)Ф > й( д(х),й(х))Ф ГО > й( д(х), х, к(х,у), у ) Ф Г(у, у, г) Способ 3 Можно задать конкретные правила выполнения оператора при помощи уравнений.
В этом случае команда Медве записывается следующим образом Г)ебве( г,(ога)1(переменные, г(ареумент. Ф) =результат. 1, г(аргумент.Д=результат.2, ...)) где ь переменные — имя или имя с присвоенным типом, или список имен; ь à — имя определяемого при помощи команды г(еГ1ве оператора; 190 Мар)е Ч Ромгег Есйвоп + аргументй — аргументы, с которыми данный оператор будет использоваться; + результатл — программированные результаты применения Г(аргументй); + выражение Гога))о — необходимый параметр команды вейде, который обеспечивает назначение свойств оператору.
Соотношение Г(аргументй)=результатй вынуждает оператор вьпавать результатл каждый раз, когда он получает аргументй. Заданные в команде "переменные" могут быть именем или списком имен, они используются для сравнения, должны появляться строго один раз и могут иметь любое значение. Замена затем будет выполнена для всех таких значений. Если имена приведены в форме $уре(имя), где $уре является одним из имеющихся в Мар/е типов объектов и имя — некоторое имя, то имя будет сравниваться только в случае, если оно имеет указанный тип.
Приведем пример. > зевсах Е; с(ейхпе (Ь', Еоха11 ( (п,х], Ь'(х"и) =п*у (х) ), Г(вхп(х) )=ехр(х+Ъ) ); () задаем при помощи команды с(ейхпе свойства оператора в. > е (зал(х) "3. 5)+е (1/зхп(х) ); () результат действия оператора в. 2.5 е' 8.2.2. Программирование правил вычисления Если мы хотим, чтобы выражения, включающие заданную нами функцию, преобразовывались, упрощались и вычислялись по некоторым правилам, необходимо эти правила задать.
Программа Мар)е Г имеет программируемые входы для многих команд, таких как виврй(у, д1((, ехравв, аепея, его и многих других функций. Например, чтобы задать правила дифференцирования некоторой функции Н, нужно определить процедуру с именем 'в)6/Н ', задающую правило дифференцирования Н. Если процедура 'в)й/Н' определена, то вызов функции в)(((Н(х, у, ...), у) будет вызывать йроцедуру ' в)й/Н ' (х,у,...,у) для вычисления производной. В качестве примера научим Мар!е вычислять производную функции Н от одной переменной Н(х) > хез~ахс! 'ЖКЕ/Н':= расс(х,у) Н(х)*с)хай(х,у)/х епс(: () задаем правило вычисления производной Функтхии Н > Жйй(Н(х),х)т Н(х) 8. Программирование в среде )иар)е 181 > 61хх(Н(д(Х)),Х)т Н(8(х)) — 8(х) 8(х) > Йлйй(Н(вхп(х) ),х) у Н(яп(х)) сов(х) яп(х) > е~га1й(пав(х Ръ/2,"))) —. 205! 033807 10 ' Н яп à — и (2 Из примеров видно, что наша процедура только дополняет известные и имеюшиеся в Мар(е правила вычисления производных.
Точно также, пользователь может задать собственные правила упрошения при помо|ци некоторой процедуры. Если процедура ' аппр)1(у/1 ' задана, то вызов функции аппр1Ыу(а,() задействует ' аппр)1(у/Г' (а). Научим, например Мар(е упрощениям Н(х"п)=п*Н(х) и Н(х'у)=Н(х)+Н(у). > хевсахс) 'ватпр1хйу/Н' г= рхос(у) 1оса1 х) Ы ор(О, у) Н сЬеп Н суре(ор(у), апуСЬ1пд"пшпекхс) СЬеп х ор (1, ор (у) ) у е1з.й гуре(ор(у), '*') СЬеп ВЕТРОВЕ(Н(ор(1, ор(у))) + Н(ор(2, ор(у))))) е1ве ВЕТРОВЕ(у) Е1) ор(2, ор(у))*Н(х)) е1ве у Ыу епс(: $ падаем правила упров(ения а)уххдтш Н Теперь можно проверить как зти правила действуют 192 Мар1е Ч Ровгег Ег!1т(оп > вузвр1хку(Н(вхп(у)"5),Н)т 5 Н(яп(у)) > вхзвр1Ну(Н(вЫ(к) *сов(у) ),Н) г Н(яп(х)) + Н(сов(у)) > екр а(1 (в1п(к) хз),Н); и 1п(яп(х)) Функции ехравв и венев также можно научить выполнять операции над введенными пользователем функциями.
Если процедура 'ехравв/Г' задана, то выполнение ехравв(Г(х)) будет приводить к выполнению 'ехравв/Р (х); Один из методов задания численных значений определенной пользователем функции à — при помощи задания правил разложения ее в степенной ряд. Пользователь может "научить" команду венев разлагать функцию в ряд при помощи процедуры 'венев/Р.