Дьяконов В.П. Maple 9.5 и 10 в математике, физике и образовании (1185901), страница 85
Текст из файла (страница 85)
бедгее(р, х)); со11ес((гели(й ехр(х)) епй ргес В этой процедуре имеется обращение к ранее составленной процедуре (п(ЕхрМопогп(а()1. Обратите внимание на то, что в процедуре введено предупреждение об Глава 10. Типовые средства программировапии определенных проблемах, связанных с использованием функции <)едгее (сообщение начинается с символов (и()1). Тем не менее, процедура работает, в чем убеждают, по крайней мере, следующие примеры: > р: = (х" 2+1) * (1-З*х); р:=(х~ +1)(! — Зх) > ехрапо(р)( хг — Зх) +1-Зх > хпО(р*ехр(х) „х) -ех(-24 + 23х — 10х + 3х) ) > 1птахрро1уповьа1(р,х): (24 — 23 х + 1О х' — 3 х') е' > 1пСЕхрро1уповьа1(р,х); (24-23х+10х -Зх )е" 10.7.
Дополнительные возможности Мар!е-языка 10.7.1. Переназначение определений В большинстве случаев Мар1е-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции а1<ав можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция а1(ав записывается в виде а11аа (е1, е2„..., еН) где е1, е2, ..., е<ч — ноль или более равенств.
Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции Вевве13 на более короткое имя В3 достаточно параметром функции а(1ав записать В3еВевае(3: > а11аа(Вд=аееае1о)( > [ВЗ(Е,1.),аеаае1о(О,1.)1; [.7651976866, .7651976866) Можно также переназначить функцию пользователя: > а11аа <Рх=г(х) ); Ш, Гх > вьем(р(х),х) — рх д ах > зпо(р<х),х а..о) Рх((х 10.7. Дополнительные вазможности Мар!е-языка Для отмены переназначения, например В), используется та же функция а1!ав с повтором переназначения: > аз Ьаз (Вг=ВЗ) г > ВЗ(О,1.) г ВЗ(0, 1.) Обратите внимание на то, что В,) исчезло из списка переназначений и функция В.)(0,1.) уже не вычисляется, поскольку ее больше нет.
10.7.2. Модули Модули придают языку программирования Мар)е некоторые свойсгва языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — обьединения данных и процедур их обработки. Модули задаются ключевым словом п)о()ц(е с пустыми скобками О и завершаются словами еп() п)о(!ц!е или просто еп(): паве := вос)п1е() ехросе езея; 1оса1 1зеяю с1оЬа1 сзеЧ: орсъоп орсзеЧ: безст1рсъоп оезс) Тело модуля епс) вооп1е (или просто епс() Хотя структура модуля во многом напоминает структуру процедуры, включая объявление локальных и глобальных переменных, параметров и описаний, между ними есть сушественная разница: ° модуль не имеет списка входных параметров; ° в модуле могут размещаться данные; ° модули могут использоваться для создания пакетов процедур, доступ к которым обеспечивается командой )и!й); ° модули имеют свойства в виде локальных переменных и методы в виде процедур интерфейса модулей; ° реализация абстрактных типов данных с помошью модулей скрыта от пользователя; ° модули могут содержать оператор ехроН еве(), обьявляюший экспортируемые переменные модуля; ° для доступа к экспортируемым переменным модуля может использоваться специальный оператор к-» (двоеточие и минус); ° модули и процедуры могут вкладываться друг в друга без ограничения уровня вложенности; ° модули могут иметь специальные конструкторы обьектов.
Следуюший пример демонстрирует создание модуля р( в котором заданы две операции (сложения р!цв и умножения (!п)ев) и показан доступ к ним: > рс:= вос)п1е() ехросс р1пз, гъвез; р1оз:= (а,Ь) -> а + Ь; Сзвез: (а,Ь) -> а * Ь; епс) вос)о1е; рг: = тв(!в(еО ехрог( р!из, (!тел; ев(! вю()в!е лавен пк пипинас пуааваи юулнуиаплщеоилнл > рс:-р1иа(З,З) > рп:-пьвеа(3,7)г 2! Детальную информацию о модулях и о конструкторах объектов можно найти в справках по ним. Некоторые пакеты уже в Мар!е 8 реализованы не в виде процедур, а в виде модулей (например, в виде модуля сделан пакет (.[пеагА18еЬга).
В простейшем виде модули могут использоваться всеми пользователями системы Мар1е, но их серьезное применение (например, с целью создания полноценных пакетов Мар!е) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги. 10.7.3. Макросы Макрос — это макрокоманда, короткая запись длинных определений. По сравнению с переназначениями макросы более гибки и могут использоваться для сокращения операций загрузки новых определений из библиотеки и пакетов.
Макросы создаются с помощью функции п)асго: васго (е1, е2, ..., еп) где е1, е2, ....., еп — ноль или более равенств. В следующем примере функция поп)Ьрегп) с помощью макроса заменена на пр: > иьпЬ (совЬьпап, ошпЬрагв) ( и итЬрепа) > пивьрепп([1,2,3,4]); > васго(ар=оивЬрепп(Ч))) > Ч:=[1,2,3,4]; 'г'.= [1, 2. 3, 4) > ар(Н) ) 24 Макросы могут быть использованы для конструирования выражений из их макроопределений. 10.7.4. Внешние вызовы Мар]е имеет команду вув(еп)(в(ппд), с помощью которой можно исполнить любую команду МБ-[ЗОБ, записанную в виде строки в(г[пд.
Например, для форматирования гибкого диска из среды Мар]е можно использовать стандартную команду МБ-[ЗОБ: > ауапев('йоппап а:'); !О.7. Доно,юнитезьиые оозлникности ЛХар~е-языка На экране появится окно МЬ-0ОЯ с начальным диалогом форматирования диска А. Это окно показано на рис. !0.6. сз х изо глава ек типовые ереостеа проера чиировииия 10.8. Визуально-ориентированное программирование интерфейса 10.8.1.
Вызов пакета Мар!етв В последние версии Мар!е был введен новый пакет расширения Мар!егь, который обеспечивает построение визуально-ориентированных злементов интерфейса для документов системы. Этот пакет создан на основе применения средств языка Заиа, так что для его применения надо позаботиться; что бы 1ауа был инсталлирован на применяемом для работы с Мар!е компьютере. О вызове пакета и его составе в Мар!е 9.5 можно судить по приведенным ниже командам: > ееегаее; и1СЬ !Иар1ета); !0Ьр1пу, Е!етеп1е, Ехап~р1ех, Тоо1е, 111111пее! Последний раздел Шй6еа был добавлен в реализацию Мар!е 9.5. Детальныел 1().о. Визуально-ориентированное программирование интерфейса 637 Этот пример поясняет возможность диалогового ввода и последующей его обработки, например в составе той или иной процедуры.
Более солидное действие производит функция вызова диаюгового окна вычисления интегралов (файл п)гпр)), представленная ниже: > н1сь(мар1еьа(ехавр1еа) ): тпгеакаьвсп(аы(х" з) *х"2) ." Это функция вначале вызывает появление окна с запросом типа вычисляемого интеграла — определенного или неопределенного. Оно показано на рис. Ю.8. Рвс, (и я,, васюк пива зк(аиа(в авгетяз))(о и и алиьи аи. зиюсиьсьс сусьссиьи ссиьсии.пасиииьииил > и1 Е)с (Иар1епе [Е1евепЕь] ): юар1е13с(: Мар1еЕ([["ЕпЕег а Еппо11оп ой 'х' апс) 'у':ь, Тех1Р1е1с)['ТРЗс)')()), Р1оСЕес['РЕ1')(), [ВссЕЕов ("Р1оФь, Еъа1паЕе( ' РЕТ' - 'р1оЕЗс) (ТГЗс), х - 0 .. 10, у = 0..10) ' ) ), Впссоп("ОК", В)пас)оии( ['ТРЗс)' ) ) ) ]! ): геап11 :=- Иар1еае[Мер1ау](еар1е13с(); > )П) х) Еп(е а Ф-гсЬсп о( 'и' а с) У: 10.9. Моделирование ВЕС-цепи с применением маплет-интерфейса б39 >.ииеи >ч.
>иичччаг ч)>гению и и(>чсуимлирччииии Мар)е-пронедура (гс, позволяющая вычислять!(() по этой системе дифференциальных уравнений представлена ниже: > геагаггг > 1гс := ргос(1, К, Г, сО, гО, ГГ, ч) 1сса1 г)е, >се, ес1, г), 1, р; ое : =1 "бгГГ (ц (С) . Г, Г) + Я*с)>ГГ (г((Г), Г) + (1/С! "'г)(Г) = ч' зса:=г((0) — с(0,0(Ч) (0)= >0; ао1 ."=сео1че( (г(е, гса),с)(Г), гапде=О..ГГ,посеггс) г р1ссе (аг)ер1оГ! (ас1, [ [Г,ч, со1ог=гео), (Г, с)11Г(с)(Г), Г), сс)ог=Ь1че)), 1=0..сг, 1ечепг)=["ч (г) ", "1 (г) "),пшпро1пса=1000); епб ргос: Подготовим тестовый пример. Пусть г, = 250 гпН, С= 500 п)Е, Я=!00 п)О))гп, ч(г) = а(п()0>г)аехр(г/2) при нулевых начальных условиях и интервале времени от О до 5 обращение к пронедуре )гс имеет вид > 1 го (.
25, . 1, . 5, О, О. 5, е) и (10*О] *ехр (-Г/2) ); 10.9. Моделирооаиие ййС-цепи с примеиеиием маплет-питер(/зейеа б41 10.9.3. Организация связи между процедурой моделирования и маплет-интерфейсом Следующая процедура служит для связи между процедурой К[.С-цепи и процедурой задания маплет-окна: > 1гс з|ви1асе з= ргос(] 1оса1 Ь, Н, С, с]0, з.О, тг, ч, рз иве Мар1есв[тоо1з] зп := бес( Ь (ча1ие) :: а1деЬгазс, соггесс|опя-тгие н := бег( и (ча1ие) :: а1деьга|с, соггесгзопв4егие С с= бес( с (ча1ие) :з а1деЬга|с, соггест|опв=тгие Н, С := (Ь, Н, С)/10004 () преобразование вН -> Н, дО := бес( дО (ча1ие) :: а1деЬга|с, соггесг|опз=тгие 10 з= бег( 10 (ча1ие]:: а1деЬга|с, соггестзопз=тгие т| з= бег( тг (ча1ие) :з а1деЬгазс, соггест|опя=тгие ч з= бес( ч (ча1ие) зз а1деЬгазс, сотгестзопз=ттие р з 1гс(1, Н, С, дО, зО, те, ч)З Яег( р (ча1ие) = р )з епс) ивез епс) ртосз моделирования )' )з ): етс.
)з )з )з )з В эту процедуру включены проверки на алгебраичность вводимых с маплет-окна параметров. 21 зак. 1ВО Поскольку построение маплет-интерфейса уже было подробно описано, при- ведем процедуру ]ге пзар]е(, реализующую эти возможности: > 1гс вар1ет := ргос() 1оса1 ОРТ|ОМЯ, СОММАМО, И1МООМ, ИАРЬЕТ,ЫМЕ1, ЫМЕ2,ЫМЕЗ, Ь1МЕ4, Ь1МЕ5, 1 |МЕб, Ь, Н, С, с)0, зО, с|, чз ияе Мар1еез, Мар1егв [Е1евепсв! зп Ь, Н, С,дО, 10, от з- 1/10,1/10,1/10,0,0,10( язп (10 Г) з ОРТ|ОМЯз= ГЬС1е="НЬС Стгси|Е Я|ви1атог"з СОММАМОз= Еча1иаге( Типот|оп="1гс з|ви1аге" )з 1.1МЕ1с= "Ь(вв)з",Техсвох(Ь )(ча1ие=Ь*1000, опсьапде=СОММАМО ); !.1МЕ2 : "Н (вОЬв): ",51|с)ег[Н ! ( ча1ие=в*1000,1онег=О,иррег=1*1000, вазогг|спз 100, в|поте|ока=10, гз11еб=тгие,опсьапде=СОМИАМР]з ЫМЕЗ := "С (вГ)з ", Я1збег[С ]( ча1ие=С*1000, 1онег=О, иррег=1*1000,вазогг|с)сз 100, в|поте|с)ся=10,1з11ес)г Егие, опсьапде=СОММАМО)з Ь1МЕ4 з= "дОз ",ТехтВох[дО ]( ча1ие=дО,опсьапде=СОМИАНО), "зОз ", ТехСВох[зо ]( ча1ие=]0, опсьапде=СОММАМО ),"т|з Техевох[СТ ] ( ча1ие=ге, опсьапде=СОМР)АМО )з Ь1МЕ5 з= "ч (Г) з ", Техгвох[ч ] (ча1ие=ч, опсьапде=СОИМАМО), Виггоп ("Р1ос:, соммАНО), Вигтоп ("с1озе", яьитс(оно () ); 1.1меб := Р1остет[р ] 0 з М1МООИ з= Из пс)он [и ] (ОРТ|ОМЯ, [[Ь1МЕ1], [1 1МЕ2], [1 1МЕЗ), [ЫМЕ4),[1.|МЕ5],(ЫМЕб]!)з МАРЬЕТ з= Мар1ес(И|МООИ)з 0|ЯР1ау(МАРЬЕТ)з епб ияе; епс) ргосс Глава 1!).