Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 45
Текст из файла (страница 45)
Для подробной информации об этом пакете не обойтись без справки Мар(е, а мы ограничимся небольшим примером. Подключим пакет б)сса(д, определим алгебраическое кольцо и преобразуем в )ег- представление уравнение Кортевега-де Фриза: > и1СП(б)(га1д): > Н :- б(Г(егепсса) гспд(гапхспд-(и), бег!гаг)опа-(х,г), пега(1оп-б1(С); И:и РОВ Ппл > р:-бепоСе(ед, "Зе(".
я): Р:=и +и и — и (1 > хик Теперь выведем присутствующие в уравнении производные в порядке их возрас- тания: > бег)уамуеа(р.а. '1псгеаюпд1у'); с а а а' о(х, с), — и(х, с), — «(х, с), —, и(х, с) ас ' а» ' 'ах' Еще один алгебраический пакет Осе а(деЬса является коллекцией команд, реализующих операции алгебры линейных полиномиальных, дифференциальных и разностных операторов.
Команды пакета можно условно разделить на три группы: С) команды создания алгебр; с) команды для вычисления в созданных алгебрах; о команды преобразования выражений. При создании алгебр указываются объекты и их свойства. Проиллюстрируем ряд команд пакета примерами. Подключим пакет и создадим полиномйальную алгебру, наложив одно условие на объекты, а затем вычислим скалярное произведение двух выражений; > и)СП(дге а1деога): > В.-ро1у а1деьга(а.ь.х.у,а1д ге)ас1опа-(а+ь+Ц ): В:= Оге а)леЬга > 5)сои ргослссг(х+Ь.у+а,в): ах+ху+Ьу-1 238 Глава В. Матеиатические библиотеки Мар1е Теперь определим алгебру дифференциальных операторов, зададим выражение и преобразуем его к стандартному для Мар]е виду: > 4:-61(т а)деога([Ох,х],[ОУ,У]): А:= Оге о!леага > Р: Ох"2 -Оу 2-х у: Оге то 61тт(Р,(,4); Р:= Рх + Ру — х у ху((х У)+ Г(х У) + >йх*у) ~ Ох> ! ~ ду~ Пакет 6Е предназначен для определения конечного поля Галуа и операций над его константами и функциями, Пакет не требует дополнительного подключения.
Приведем пример определения поля (команда 6Е) и нескольких операций: > 61:- 6Е(2,3.а)роа"3-а)роа+1): > а :- 6ИСопчегт1п](а)рпа): аз>а > с:-61Г'""](а,5): с:= 1 + а + а > 61["+"](а.с): 1+ а' Для работы с алгебраическими кривыми предназначен пакет а[депп(ев, В состав пакета входят команды позволяющие преобразовывать алгебраические кривые, вводить на них параметризацию, вычислять монодромию и многое другое, Приведем простой пример. Подключим пакет, определим алгебраическую кривую, затем введем на ней параметризацию и вычислим монодромию: > >1СП(а)рсигчеа): > т; х 2+у 2-1; > ра галет г( тат!оп( т.х.
у Л); [| — '„' ',] > попа]гаау(т,х,у); [-1.8000000000, [-1.4966629547! 1, 1.49666295471!], [[-1., [[1,2]]), [1., [[1, 2П])] Пакет Ооп)а)па (старое название — банка) является инструментальным средством для реализации сложных алгоритмор. Разработчики Мар)е считают, что заложенные в атом пакете возможности по конструированию чобласти вычислений» позволяют писать лучшие коды. Вслед за фирмой Магог]оо Мар]е ]по.
мы полагаем, что заинтригованный читатель посмотрит файл справки с соответствующим примером по команде? Оааа1 па. ехаар] е. Мар1е и другие программы В этой главе рассматривается взаимодействие Мар!е с языками программирования, текстовыми редакторами, программами среды М(сгозой О(Все и пакетом численного анализа МАТ1.АВ. Это необходимо для анализа результатов аналитических выкладок Мар1е при помощи других программ и их использования при подготовке текстовых материалов (статей, книг, %%Ж-страниц и др.). Одним из вариантов использования аналитических результатов в численном анализе является их преобразование в коды языков С или Фортран с последующим программированием на них.
Другой путь состоит в применении высокоэффективных алгоритмов пакета МАТ1.АВ, описанию возможностей которого посвящена вторая часть этой книги. Мар)е поддерживает перевод рабочих документов в наиболее распространенные форматы для публикаций, такие как КТг, 1лТеХ и НТМ(.. Генерация кодов Мар1е, С и Фортран Пакет сос(еяеп предназначен для оптимизации текстов программ на языке Мар1е и перевода Мар!е-выражений в конструкции языков программирования. В этом разделе мы остановимся на некоторых командах работы с Мар!е-выражениями и перевода их на традиционные языки программирования — С и Фортран. Перед обращением к пакету его нужно подключить командой н) сЬ(са1ереп).
Сначала перечислим некоторые команды из пакета содейеп, предназначенные для модернизации текстов Мар1е-процедур и выражений: О ва1ергос(а, х) — переводит выражение а (или переменную типа1)зс, состоящую из выражений) в процедуру с параметром х (или набором параметров); О паМерагав(х, г) — преобразует переменную х, входящую в Мар!е-процедуру т, во входной параметр; О ва1ед1оЬа1(х, Г) — преобразует переменную х, входящую в Мар!е-процедуру т, в глобальную переменную; О оес1 а ге(х:: с, г) — описывает переменную х, входящую в мар1е-процедуру т, как переменную типа с; 240 Глава р. Иар(е и другие программы о яаГечо(»1(т) — преобразует Мар1е-процедуру с именем Г в процедуру без возврашаемого значения; (З ор11 ппге(ехрг) — оптимизирует Мар!е-выражение ехрг.
В качестве ехрг может выступать алгебраическое выражение, массив, набор уравнений или процедура; о ргер21гапз(Π— преобразует процедуру т к виду, удобному для перевода на алгоритмические языки. В частности, кусочно-непрерывныая функция (р1 есеы! зе) представляется как условный оператор, а сумма (5и»в) — как цикл; (З соа1(ехрг) — оценивает число злементарных операций, необходимых для выполнения выражения ехрг. Проиллюстрируем действие перечисленных команд на примере. Подключим пакет сос(е9еп: > и»1П(сссереп): Переменной Г присвоим выражение, зависящее от х и 1: > С (х-1) сц у:= (х — с)' Теперь преобразуем алгебраическое выражение Г в процедуру ГГ с одним входным параметром х неопределенного типа: > сс:-»сахергос(с,х); ,(Г:= рок(х) (х — с)"4 епа рпк Оценим число операций, необходимых для выполнения процедуры ГГ; > 1051(СС): 3 ти(дрдеапспс + а»С»С(с»апс Создадим новую процедуру ГГ1, которая является оптимизированным вариантом процедуры ГГ: > С(1:-ср1»п»гас(СГ); с)7 и рпк(х) 1оса1 »2; »2»т (х — с)"2; »2"2 епа рсос Оценим число операций, необходимых для выполнения процедуры 111: > 1051(С(1); стгаае + асссаптепгс + 2 тип(р((еадапс + а»С»С»с»апс Опишем тип входного х параметра как Г) оа1: >»Сес)аге(х»:т)са1,С(1): рсос(к;диас) 1сса1 с2; »2:= (х — с) 2; »2"2 еп») рпк Преобразуем процедуру ГГ1 в процедуру рр1 без возвращаемого значения: > рр1:-пв(»ечс1а(С(1): ХХС:= рсос(х:2)аас) 1сса1 с2; с2:= (х — с)"2; КЕ)Т)КХ( ) еп») рсос Преобразуем переменную 1, входящую в тело процедуры, во входной параметр типа Г)оа1; > Вр1:тса)»ерагзв(1::с)са1.чр1); ХХС >т рпк(х4Ьш, ау(аас) 1сса) с2; »2 га (х — с)"2; КЕПЗКК( ) спор»ос Генерация кодов Мар(еГС н Фар)ран к а1 Опишем локальную переменную Г2 из тела процедуры как глобальную: > 001:-свге01оаа! (12.001): ее1;= рпк(х::доас, 02)оас) е)оЬа1 г2; с2:= (х — с) "2; КЕТ()КЩ ) епс) рпк Для иллюстрации работы команды ргер2ггапз определим функцию Г, которая вычисляет интеграл функции з! п(ах) на интервале от 0 до и по формуле Симпсона.
Для этого воспользуемся командой з! ярзоп пакета атц г(епг и командой яакергос: >Г: еааергос(х(спеет(х!архон)(х!п(а*х),х-О..Р(,10), а::с)оаг); /:= рпк(а:р)оас) 1/30хпх(х(п(ахп) + 4хБппс(яп( !с!Охах(2х! — 1)хп), с =! .. 5) +2хвппс(яп(115хах!хп), с'= 1 .. 4)) епс( ргое Теперь обратимся к команде ргер2Ггапз: > ргер2(гапх(Г); ргое(а:2)оас) !оеа1 сс, !2, хс, х2, сс, с2; хс:= 0; Еог с! го 5 с)о хс:= хс+ яп(1!!Охах(2хс! — 1)хп) епс( с)о; х2 к0; Гог 12 со 4 с)о х2:= х2+ яп(1)5хахс2хп) епс) с)о; ! )30хпх( х! и( ахп) + 4хх) + 2хх2) епс) рпк Обратим внимание на то, что все суммы в результате действия команды ргер2гге па были преобразованы в операторы циклов. Описанные процедуры часто используются для приведения Мар!е-выражений к виду, удобному для преобразования в программы на языках программирования.
Перейдем теперь непосредственно к командам перевода Мар1е-выражений на алгоритмические языки. Вывод выражения в виде Фортран-операторов осуществляется по команде Согггап(ехрг.орг!опх) Здесь в качестве ехрг Могут выступать выражение, массив выражений, процедура или список уравнений. Параметры орг! Опз могут принимать следующие значения: Г!)епапе=" папе, ех(" (результат выводится в файл), орс ! в! 2еО (Фортран-выражения оптимизируются, вводятся вспомогательные переменные), 0101 Ыз и яссе (задание точности вычислений).
Чтобы записать выражение на языке С, необходимо пользоваться командой С(ехрг.оргсопх) Параметры этой команды аналогич(1ы параметрам, описанным для команды гогггап. 242 Глава д, Нар(е и другие програииы Приведем примеры использования этих двух команд. Сначала определим выражение й а затем переведем его на С и Фортран: > Г; а+Ь 5>а(п(Ь 3); гх>а+Ь а)п(Ь~) > С((): гд - а+Ь>Ь>Ь>Ь>Ь*ип(Ь>Ь>Ы: > гогггап(;).
10 - а+Ь>'5"а1п(Ь '3) Теперь обратимся к команде С с параметром оптимизации текста выражения: > с(г.орг(а(гео); 11 ь>ь: 12 11>11: 15 Мп(11*Ыд г7 а+12>Ь>г5; Для оптимизации выражения введены дополнительные переменные, которые необходимо описывать вручную в программе на С. Это не так сложно в случае небольших формул, но может стать очень трудоемким для громоздких выражений. Для избежания ручного труда преобразуем выражение в процедуру с двумя параметрами и снова обратимся к команде С: 3;а ргос(ау)оаг, Ьу)оа() а + Ь"5хйп(Ь"3) епа ргос > С(д.орма1гее): ()1пс)осе аа(П.П> доиЫе д(а, Ы ОооЫе а: оонЫе Ь: ( ОооЫе 11: ОооЫе 12: ОооЫе 15; ( 11 Ь"Ь: 12- 11*ы: 15 а(п(11*Ы: гегогп(а+12'Ь*г5): ) ) В результате получился текст процедуры на языке С, не требующий никакой дополнительной работы.