Пакет расширения с утилитами— Utilities
Утилитами принято называть небольшие программы, в основном вспомогательного назначения. Они предназначены чаще всего для работы с файлами и памятью компьютера. Ряд таких утилит включен в пакет расширения Utilities, знакомству с которым и посвящен данный небольшой раздел.
Работа с бинарными файлами — BinaryFiles
В подпакете BinaryFiles имеются типовые функции для работы с бинарными файлами:
Функции
ReadListBinary[filename,type]
ReadListBinary[stream,type, n]
ReadListBinary[stream,type]
оперируют с данными в виде списков, а функция WriteBinary [stream, data] записывает данные в поток в бинарной форме. Примеры применения этих функций представлены ниже:
<< Utilities`BinaryFiles`
data = N[Table[10^n, {n, -10, 10}]]
{l.x l10-10, 1.x 10-9, 1.x 10-8, 1.x 10-7, 1.x 10-6, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1., 10., 100.-, 1000., 10000., 100000., 1.x 106, 1.x 107, 1.x 108, 1.x 109, 1.x 1010}
stream = OpenWriteBinary["binarytest"]
OutputStream["binarytest" , 4]
WriteBinary[stream, data]
Close[stream]
binarytest
ReadListBinary["binarytest", Double]
{1.х10-10, 1. xlO-9, 1. x10-8, 1.x 10-7, 1.x 10-6, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1., 10., 100., 1000., 10000., 100000., 1.x 106, 1.x 107, l.xl08, 1.x 109, 1.x 1010}
ReadListBinary["binarytest", Signedlntl6, 5]
{15835, 31967,-9769, -16965, 15889}
Для конвертирования выражений ехрг в байтовый формат служат функции ТоBytes[expr] и ToBytes[expr, type].
Например:
ToBytes[-34.3421435]
{192, 65, 43, 203, 91, 128, 0, 0}
ToBytes[-34.3421435, CString]
{45, 51, 52, 46, 51, 52, 50, 49, 52, 51, 53, 0}
Запись графических объектов в файл формата DXF
В широко распространенных графических системах AutoCAD используется формат файлов DXF. Подпакет DXF позволяет записывать графические объекты Mathematica в этом формате с помощью функции WriteDXF["filename", graphics].
Здесь filename — имя файла, a graphics — имя предварительно созданного графического объекта. Применение данной функции вполне очевидно.
Фильтрация опций — FilterOptions
В ряде случаев возникает необходимость в передаче опций из одной функции в другую. При этом передавать нужно не- все опции, а только те из них, которые имеют смысл для вызываемой функции. В подпакете FilterOptions имеется функция, позволяющая фильтровать опции:
Риc. 13.15. Пример применения подпакета FilterOptions
Рисунок 13.15 поясняет применение опции фильтрации для создания графической функции Plotlntegrate, строящей график интеграла от заданной функции. Показан также пример построения графика интеграла от функции Cos [x] в интервале от 0 до 2п. Как и следовало ожидать, график функции очень близок к синусоиде.
Вы можете опробовать действие этой графической функции и на других примерах (желательно, чтобы интегрируемая функция не имела особенностей в пределах области построения графика).
Уплотнение памяти — MemoryConserve
Подпакет MemoryConserve в дополнение к имеющейся в ядре функции освобождения памяти Share [ ] содержит две директивы управления памятью:
<<Utilities 'MemoryConserve' $MemoryIncrement
100000
ТаЫе[ ToString[0], {2^15} ] ;
Length[ % ]
MemoryConserve::start : Running Share[] to conserve memory. MemoryConserve::end : Finished running Share[];
929200 bytes of memory freed.
32768
Off[ MemoryConserve ]
On[ MemoryConserve ]
Данная утилита полезна лишь при использовании системы Mathematica на компьютерах с малым объемом оперативной памяти.
Работа с пакетами расширений — Package
В подпакете Package имеется несколько функций, полезных при работе с пакетами расширения:
Примеры работы с этими функциями:
<<Utilities' Package'
FindPackages[$Path, "*ca"]
{{}, {}, {}, {DiscreteMath'Combinatorica'}, {}}
FindPackages[$Path, "*ca",
FullPath -> True]
{{},(},{},
{/usr/local/mathematica/AddOns/StandardPackages/ DiscreteMath/Combinatorica.m}, {}}
Annotation["Utilities' Package'"]
{Title, Context, Author, Summary, Package Version, Mathematica Version, Copyright, History, Keywords, Limitations, Discussion}
Annotation["Utilities'Package'", "Mathematica Version"]
{(* :Mathematica Version: 4.0 *)}
Показ времени операций — ShowTime
В подпакете ShowTime собраны средства для осуществления контроля за временем выполнения различных операций:
Следующие примеры иллюстрируют применение этих средств:
<<Utilities'ShowTime'
NIntegrate[x Exp[-x] Sin[x], {x, 0, Infinity}]
0.05 Second
0.5
Off[ShowTime]
0. Second
ShowTime[Sum[1/n, {n, I, 999}]];
0.11 Second
Контроль за временем исполнения операций — важная часть отладки высокоэффективных программ и программных модулей.
Обратите внимание на то, что время исполнения использованных в примерах выражений относится к компьютеру, на котором примеры выполнялись (Pentium II 350 МГц). Для других компьютеров результаты хронометража будут другими.
В этом уроке мы научились: