Смекни!
smekni.com

Программирование и разработка приложений в Maple (стр. 117 из 135)

algcurves – исследование 1-мерных алгебраических кривых, определяемых полиномами от нескольких переменных

DEtools – содержит средства для графического представления решений дифференциальных уравнений

geom3d, geometry – средства работы с объектами 3- и 2-мерной Эвклидовой геометрии соответственно

ImageTools – средства для работы в среде Maple с файлами общих графичес- ких форматов

LREtools – содержит средства для графического представления линейных рекуррентных уравнений

Statistics (stats) – средства для графического представления статистических данных

Детально с графическими средствами данных модулей можно ознакомиться в справке по пакету. Maple имеет достаточно ограниченный набор средств для графического представления статистических данных. Поэтому, в целом ряду случаев пользователь вынужден для этого использовать иное программное обеспечение или программировать собственные процедуры в среде Maple. Встроенный язык Maple – достаточно развитая программная среда для обеспечения необходимых для этого инструментов.

sHisto := proc(d, L::nestlist) local k var t1 t2 n, , , , ; n := nops(L);

var := [seq(cat(`0` k, ), k = 1 .. n)]; t1 := [seq(cat(`1` k, ), k = 1 .. n)]; t2 := [seq(cat(`2`, k), k = 1 .. n)];

seq assign( (var k[ ] = plottools['rectangle']([d×(k − 1), 0], [k d× , L k[ ][1]],

'color' = L k[ ][2], 'thickness' = 2), seq(t1 k[ ] = plots['textplot'](

[1/2×(2×k − 1)×d, -0.1, convert(L k[ ][3], 'symbol')], 'align' = 'BELOW',

'color' = 'black'), k = 1 .. n), seq(t2 k[ ] = plots['textplot'](

[1/2×(2×k − 1)×d, L[k][1] + 0.1, convert(L[k][1], 'symbol')],

'align' = 'ABOVE', 'color' = 'black', 'font' = ['TIMES', 'BOLD', 18]), k = 1 .. n)) , k = 1 .. n);

RETURN(plots['display']({op eval(( var)), op eval(( t1)), op eval(( t2))}, 'tickmarks' = [0, 0], 'font' = ['TIMES', 'BOLD', 13], 'axes' = 'none', `if`( nargs = 3 and type(args[3], 'string'), op {( 'title' = args 3[ ], 'titlefont' = ['TIMES', 'BOLD', 18]}), NULL)), unassign(op(var), op(t1), op(t2))) end proc

> map(with, [plots, plottools, stats]): H:= sHisto(6, [[2,grey,1995], [2,green,1996], [3,yellow,

1997], [4,tan, 1998], [3,plum, 1999], [1,aquamarine, 2000], [3,coral, 2001], [6,pink, 2002], [1,turquoise,2003], [5,gray,2004], [2,turquoise,2005], [3,magenta,2006]], "Distribution of quantities of books published during 1995 - 2006"): L:= [2, 2, 3, 4, 3, 1, 3, 6, 1, 5, 2, 3]:

> Lz:= listplot([seq([3+(k-1)*6, L[k]], k = 1..12)], thickness=2, color=blue):

> fit[leastsquare[[x, y], y=a*x^2+b*x+c, {a, b, c}]]([[seq(3+(k-1)*6, k = 1..12)], L]):

> V:= plot(A(x, [seq(3+(k-1)*6, k = 1..12)], L), x = 3..69, thickness=3, colour=orange):

> P:= plot(rhs(%%), x = 0..72, thickness=3, color=navy):

> Z:= plottools[line]([3, 2], [69, 5], thickness=3, color=brown):

> g:=textplot({[18.5, 6, `The books total is 35`], [18.5, 5.5, `The books have been published in the USA,`], [18.5, 5, `Byelorussia, Russia, Lithuania and Estonia`]}):

> display({H, Lz, P, Z, V, g}, font = [TIMES, BOLD, 14]);

В качестве достаточно полезного и поучительного примера выше представлена процедура sHisto, позволяющая выводить специальный тип столбиковых диаграмм (гистограмм). Детально с процедурой sHisto, а также с другими нашими средствами в данном направлении можно ознакомиться в [41,103,109].

Используя стандартные средства пакета для работы с графическими {2D|3D}-объектами совместно со знанием графических {PLOT|PLOT3D}-структур, уже достаточно несложно создавать эффективные средства работы с такого типа объектами, базируясь только на стандартных средствах программной среды пакета. Пример тому не только созданные нами средства [103], но и многочисленные средства других пользователей пакета, с которыми можно ознакомиться в цитируемой нами литературе и не только.

Глава 8. Создание и работа с библиотеками

пользователя в Maple

Пакет Maple релизов 6 - 10 располагает рядом средств для создания достаточно эффективных механизмов работы с пользовательскими библиотеками, структурно аналогичными главной Maple-библиотеке; эти библиотеки позволяют использовать в среде пакета содержащиеся в них средства на уровне доступа, аналогичного стандартным средствам пакета. В настоящей главе мы представим три достаточно эффективных уровня организации пользовательских библиотек процедур, модулей и функций. Между тем, средства, представленные в [103], позволяют существенно упрощать и расширять набор функций по работе с библиотеками пользователя. Как показывает наш опыт и опыт наших коллег, данные средства расширяют возможности пользователя по созданию и организации библиотек собственного программного обеспечения в среде пакета Maple.

Перед дальнейшим изложением сделаем следующее существенное замечание. Работа с библиотеками любой организации – это работа, прежде всего, с файлами данных различного типа. В виду этого мы должны быть знакомы со средствами доступа к файловой системе компьютера и с основными типами файлов, с которыми работает Maple. Являясь встроенным языком программирования в среде пакета, ориентированного, в первую очередь, на символьные вычисления (компьютерная алгебра) и обработку, Maple-язык располагает относительно ограниченными возможностями по работе с данными, находящимися во внешней памяти ПК. И в этом отношении Maple-язык существенно уступает таким традиционным языкам программирования как ADA, C++, Fortran, Cobol, PL/1, Pascal, Basic и др. Вместе с тем, ориентируясь, в первую очередь, на решение задач математического характера, Maple-язык предоставляет набор средств для доступа к файлам данных, который вполне может удовлетворить достаточно широкий круг пользователей физико-математических приложений пакета. В наших книгах [7-14,41-43,103] средства Maple для доступа к файлам различных типов рассмотрены достаточно детально, по полноте изложения перекрывая как поставляемую с пакетом документацию, так и известную нам литературу по пакету [54-62,78-89]. С целью расширения пакетных средств доступа к файлам данных нами был создан целый ряд средств, с которыми можно ознакомиться в вышеупомянутых наших книгах и Библиотеке [41,103], ориентированной на Maple релизов 6 - 10. Можно ознакомиться с данными средствами и по демоверсии этой Библиотеки [108]. Начиная с релиза 9, пакет включает пакетный модуль FileTools, содержащий набор средств для работы с файлами двух основных типов, с которыми имеет дело пакет и его приложения – бинарными (BINARY) и текстовыми (TEXT). Наши средства, в массе своей, не пересекаются со средствами данного модуля и существенно расширяют возможности пакета по работе с файлами данных. Поэтому настоящая книга содержит описание базовых средств пакета для доступа к файлам данных, не претендующее на полноту. Вместо этого рекомендуется обратиться либо к нашей книге [12], либо бесплатно скачать исходные тексты наших книг по Maple-тематике с web-адреса (локальная копия сайта первого автора) http://www.grsu.by/cgi-bin/lib/lib.cgi?menu=links&path=sites

Данные материалы относятся, в основном, к релизам 5 - 7 пакета, однако ввиду вполне достаточной пролонгированности представленных в них средств вполне приемлемы и для последующих релизов пакета, прежде всего это относится к базовым средствам языка Maple, включая систему ввода/вывода пакета.

8.1. Классический способ создания Maple-библиотек

Главная библиотека пакета содержит наиболее часто используемые процедуры и модули (которые не включены в ядро пакета). Эта библиотека расположена в справочнике LIB пакета и содержит набор файлов, представленный на рис. 2; библиотека содержит три главных файла “Maple.hdb”, “Maple.ind” и “Maple.lib”, тогда как наличие некоторых других файлов зависит от текущего релиза пакета (так Maple 6, 7 содержат файл “Maple.rep”).

Каталог LIB Главная Maple-библиотека

Maple.hdb

Maple.ind

Maple.lib

UserLib_1

……...

UserLib_k

……...

UserLib_n

Maple.hdb

Maple.hdb

Maple.hdb

Maple.ind

Maple.ind

Maple.ind

Maple.lib

……...

Maple.lib

……

Maple.lib

Maple_U.cmd

Maple_U.cmd Maple_U.cmd

Рис. 2. Принципиальная файловая организация главной Maple-библиотеки и пользовательских библиотек, аналогичных главной библиотеке

В отличие от предыдущих релизов в Maple 10 главная и другие библиотеки пакета организационно устроены несколько иначе: вместо трех файлов “Name.hdb”, “Name.ind” и “Name.lib” (библиотека mlib-типа) они состоят из двух файлов “Name.hdb” и “Name.mla”

(библиотека mla-типа), где первый (в общем случае необязательный) файл “Name.hdb” структурно остался неизменным, тогда как файл “Name.mla” представляет собой, по сути дела, слияние двух файлов “Name.ind” и “Name.lib” прежней организации с соответствующей коррекцией входов в начальной индексной части файла “Name.mla”. На данном аспекте (как не принципиальном) внимания не акцентируется, принимая во внимание то обстоятельство, что библиотека mlib-типа легко конвертируется в эквивалентную библиотеку mla-типа, и наоборот.

На втором уровне библиотечной организации обеспечивается создание пользовательских библиотек в подкаталогах каталога LIB, содержащего главную Maple-библиотеку, стандартно поставляемую с пакетом. В этом случае файловая организация пользовательских библиотек принимает следующий простой вид, наследуя структурную организацию главной Maple-библиотеки (рис. 2). При этом, каждая библиотека пользователя располагается в отдельном подкаталоге каталога LIB под именем UserLib_k (k = 1 .. n). Первые три файла библиотеки пользователя полностью аналогичны одноименным файлам главной Maple-библиотеки, тогда как отдельный файл "Maple_U.cmd" содержит список имен процедур, расположенных в библиотеке и историю работы с библиотекой. При этом, в зависимости от текущего релиза в процессе работы с библиотекой пользователя в каталоге могут появиться три дополнительных файла “Maple.rep”, “elpam.ind” и “elpam.lib”, чье описание может быть найдено в наших предыдущих книгах [29-33,39,41]. Ниже под термином “Maple-библиотека“ будет пониматься любая библиотека, структурно и организационно подобная главной Maple-библиотеке пакета.