2. Пакет расширения с утилитами — Utilities

 

Пакет расширения с утилитами— Utilities

 

Утилитами принято называть небольшие программы, в основном вспомогательного назначения. Они предназначены чаще всего для работы с файлами и памятью компьютера. Ряд таких утилит включен в пакет расширения Utilities, знакомству с которым и посвящен данный небольшой раздел.

Работа с бинарными файлами — BinaryFiles

В подпакете BinaryFiles имеются типовые функции для работы с бинарными файлами:

  • OpenReadBinary [ "filename" ] — открытие файла для считывания бинарных данных;
  • OpenWriteBinary["filename"] — открытие файла для записи бинарных данных;
  • OpenAppendBinary ["filename"] — открытие файла для добавления данных в конец;
  • ReadBinary [stream, type] — считывает бинарные данные из потока;
  • ReadBinary [ stream, expr ] — считывает из потока бинарные данные, типы которых определяются выражением ехрг.

Функции


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 имеется функция, позволяющая фильтровать опции:

  • FilterOptions [symbol, optl, opt2,...] — возвращает набор опций, применимых к объекту symbol.

 


Риc. 13.15. Пример применения подпакета FilterOptions

Рисунок 13.15 поясняет применение опции фильтрации для создания графической функции Plotlntegrate, строящей график интеграла от заданной функции. Показан также пример построения графика интеграла от функции Cos [x] в интервале от 0 до 2п. Как и следовало ожидать, график функции очень близок к синусоиде.

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

Уплотнение памяти — MemoryConserve

Подпакет MemoryConserve в дополнение к имеющейся в ядре функции освобождения памяти Share [ ] содержит две директивы управления памятью:

  • On [MemoryConserve] — включает автоматическое сжатие занимаемой системой памяти;
  • Off [MemoryConserve] — отключает автоматическое сжатие памяти. Ниже демонстрируется применение этого подпакета:

<<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 имеется несколько функций, полезных при работе с пакетами расширения:

  • FindPackages [path] — возвращает список файлов с расширением .m, имеющихся в каталоге path. Опция FullPath->True дает возврат полных (вместе с путем) имен файлов;
  • FindPackages [path, pattern] — возвращает список файлов с расширением .m, имеющихся в каталоге path и удовлетворяющих заданному образцу pattern;
  • Annotation [package] — возвращает список ключевых слов, содержащихся в аннотации пакета;
  • Annotation [package, keyword] — возвращает текст аннотации пакета, связанной с ключевым словом keyword.

Примеры работы с этими функциями:


  <<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 собраны средства для осуществления контроля за временем выполнения различных операций:

  • ShowTime [expr] — выводит время выполнения операции ехрr;
  • On [ShowTime] — включает вывод времени исполнения последовательности операций;
  • Off [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 МГц). Для других компьютеров результаты хронометража будут другими.

 

Что нового мы узнали?

В этом уроке мы научились:

  • Синтезировать звуки.
  • Использовать функции времени и дат.
  • Работать с географическими и картографическими данными.
  • Вводить физические константы и размерные величины.
  • Получать данные о химических элементах.
  • Задавать данные только вещественного типа.
  • Работать с бинарными файлами.
  • Записывать графические объекты в файл формата DXF.
  • Применять фильтрацию опций.
  • Выполнять уплотнение памяти.
  • Выводить данные о времени выполнения операций.

 

gl13-15.jpg

Изображение: