В этом уроке мы научились:
Синтезировать звуки. Использовать функции времени и дат. Работать с географическими и картографическими данными. Вводить физические константы и размерные величины. Получать данные о химических элементах.В подпакете ChemicalElements имеется ряд функций, позволяющих выявить свойства химических элементов. Начнем с функции без параметров Elements, выводящей список всех химических элементов (он полезен для знакомства с англоязычными наименованиями элементов):
<<Miscellaneous` ChemicalElements`
Elements
{Hydrogen, Helium, Lithium, Beryllium, Boron, Carbon, Nitrogen, Oxygen, Fluorine, Neon, Sodium, Magnesium, Aluminium, Silicon, Phosphorus, Sulfur, Chlorine, Argon, Potassium, Calcium, Scandium, Titanium, Vanadium, Chromium, Manganese, Iron, Cobalt, Nickel, Copper, Zinc, Gallium, Germanium, Arsenic, Selenium, Bromine, Krypton, Rubidium, Strontium, Yttrium, Zirconium, Niobium, Molybdenum', Technetium, Ruthenium, Rhodium, Palladium, Silver, Cadmium, Indium, Tin, Antimony, Tellurium, Iodine, Xenon, Caesium, Barium, Lanthanum, Cerium, Praseodymium, Neodymium, Promethium, Samarium, Europium, Gadolinium, Terbium, Dysprosium, Holmium, Erbium, Thulium, Ytterbium, Lutetium, Hafnium, Tantalum, Tungsten, Rhenium, Osmium, Iridium, Platinum, Gold, Mercury, Thallium, Lead, Bismuth, Polonium, Astatine, Radon, Francium, Radium, Actinium, Thorium, Protactinium, Uranium, Neptunium, Plutonium, Americium, Curium, Berkelium, Californium, Einsteinium, Fermium, Mendelevium, Nobelium, Lawrencium, Rutherfofdium, Dubnium, Seaborgium, Bohrium, Hassium, Meitnerium, Ununnilium, Unununium, Ununbium}
Для выявления свойств элементов служат следующие функции:
Abbreviation [element] — возвращает стандартную аббревиатуру элемента; AtomicNumber [element] — возвращает атомный номер элемента; AtomicWeight [element] — возвращает атомный вес элемента;Stablelsotopes [element] — возвращает список стабильных изотопов элемента.
<<Miscellaneous`ChemicalElements`
Abbreviation[Wolfram]
W
AtomicNumber[Wolfram]
74
AtomicWeight[Wolfram]
183.85
Stablelsotopes[Wolfram]
{180, 182, 183, 184, 186}
Off[AtomicWeight::unstable]
Рисунок 13.12 графически показывает отношение атомного веса к атомному номеру для разных элементов.
В ряде случаев возникает необходимость в передаче опций из одной функции в другую. При этом передавать нужно не- все опции, а только те из них, которые имеют смысл для вызываемой функции. В подпакете FilterOptions имеется функция, позволяющая фильтровать опции:
FilterOptions [symbol, optl, opt2,...] — возвращает набор опций, применимых к объекту symbol.
Риc. 13.15. Пример применения подпакета FilterOptions
Рисунок 13.15 поясняет применение опции фильтрации для создания графической функции Plotlntegrate, строящей график интеграла от заданной функции. Показан также пример построения графика интеграла от функции Cos [x] в интервале от 0 до 2п. Как и следовало ожидать, график функции очень близок к синусоиде.
Вы можете опробовать действие этой графической функции и на других примерах (желательно, чтобы интегрируемая функция не имела особенностей в пределах области построения графика).
В подпакете PhysicalConstants определено несколько десятков наиболее употребительных физических констант. Они представлены как размерные величины, то есть помимо своего численного значения имеют единицы измерения. Физические константы вводятся своими полными символьными именами, например, как показано в следующей таблице.
Ввод и вывод |
Комментарий |
<<Miscellaneous " PhysicalConstants " SpeedOfLight
299792458 Meter/Second |
Загрузка подпакета Скорость света |
Second SpeedOfLight AgeOfUniverse 1. 40902 xl0 26 Meter | Выражение с константами |
ElectronMass
9 . 10939 x 10- 31 Kilogram |
Масса электрона |
AccelerationDueToGravity 9. 80665 Meter/Second 2 | Ускорение свободного падения |
Полные списки физических констант приведены в справочной базе данных по подпакету PhysicalConstants.
Для выполнения физических, химических и иных расчетов в Mathematica предусмотрена возможность работы с размерными переменными. Для этого база данных системы содержит символьные имена практически для всех единиц измерения (времени, массы, расстояния, температуры и т. д.). Данные о них можно найти в справочной базе данных подпакета Units. Там же имеются функции для перевода единиц измерении из одной системы размерных единиц в другую.
Начнем с функции Convert [old, newunits], которая осуществляет преобразование одних единиц в другие. Например:
<<Miscellaneous`Units`
Convert[12 Meter/Second, Mile/Hour]
26. 8432 Mile / Hour
Convert[3 Kilo Meter / Hour, Inch / Minute]
1968. 5 Inch / Minute
Для преобразования температуры служит функция ConvertTemperature [temp, oldutits, newunits], производящая преобразование температуры из одних единиц в другие. Возможные единицы измерения температуры следующие: Celsius (шкала Цельсия), Centigrade (то же самое), Fahrenheit (шкала Фаренгейта), Kelvin (шкала Кельвина) и Rankine (шкала Ренкина).
Пример преобразования температуры:
ConvertTemperature[20, Fahrenheit, Centigrade]
В пакете расширений Miscellaneous есть ряд подпакетов, содержащих функции времени и даты. Так, в подпакете Calendar сосредоточены вычисления, относящиеся к календарным датам:
DayOfWeek [ {year, month, day} ] — вычисляет день недели по заданным году, месяцу и числу; DaysBetween[{yearl,monthl,dayl},{year2, month2, day2} — вычисляет число суток между двумя датами: DaysPlus [ {year, month, day}, n] — дает дату и-го дня после заданной даты.Во всех этих функциях возможна опция Calendar->cal. Имеется также функция смены календаря:
CalendarChange [ {year, month, day}, call, cal2] — преобразует заданную дату из одного календаря в другой.Примеры вычислений с датами:
<<Miscellaneous` Calendar`
DayOfWeek{[1988, 6, 23}]
DaysBetween[{1900, 1, 1}, {1901, 1,1}]
365
DaysPlus[{1900, 1, 1}, 366]
{1901, 1, 2}
DaysBetween[{1900, 1, 1},{1901, 1, 1},Calendar -> Julian]
366
Calendar-Change[{1992, 2, 29}, Gregorian, Julian]
{1992, 2, 16}
CalendarChange[{1992, 2, 29}, Gregorian, Islamic]
{1412, 8, 25}
CalendarChange[{1,1,1}, Islamic, Julian]
{622, 7, 16}
Города и расстояния — CityData и Geodesy
В подпакете CityData можно найти функции, позволяющие найти координаты большинства крупных городов мира: CityData [city, datatype], CityData [city] иCityData[datatype]. Например:
<<Miscellaneous`CityData`
CityData["Montreal",
CityPosition]
{{45, 30}, {-73, -36}}
CityData["Washington"]
{{CityPosition, {{38, 53, 42}, {-77, -2, -12}}}}
Координаты (широта и долгота) выдаются в формате {градусы, минуты} или {градусы, минуты, секунды}.
В этом же подпакете есть функции для вычисления расстояний между городами:
CityDistance [ "cityl", "pity"] — возвращает расстояние между двумя указанными городами; CityDistance["cityl","city",CityDistanceMethod->Method] — возвращает расстояние между двумя указанными городами со спецификацией метода вычислений (по умолчанию используется функция SphericalDistance из подпакета Geodesy).Пример вычисления расстояния между городами дан ниже:
В пакете Miscellaneous имеется база данных по странам мира. Доступ к ней открывает подпакет WorldData. Для этого имеется функция WorldData [ "Страна" ], возвращающая список координат конечных отрезков прямых, которые задают контурный график — карту заданной страны. Например, данные по Азербайджану можно получить следующим образом:
<<Miscellaneous` WorldData`
WorldData["Azerbaijan"]
{{{2378, 2689}, {2374, 2770}, {2344, 2806}, {2330, 2770}, {2378, 2689}}, {{2361, 2849}, {2419, 2781}, {2472, 2701}, {2445, 2823}, {2509, 2778}, {2473, 2871}, {2510, 2915}, {2414, 3024}, {2307, 2933}, {2376, 2888}, {2361, 2849}}}
Попробуйте сами найти данные по России (Russia) — мы их не приводим ввиду громоздкости списка, что вполне естественно, поскольку Россия — крупнейшая страна мира и имеет самую длинную границу (контурную линию) с многочисленными изломами.
В подпакете WorldNames имеется список стран, систематизированный по континентам: Africa, Asia, Europa, MiddleEa.st, NorthAmerica, Oceania, South-America и World (весь мир). Например, так можно узнать, какие страны расположены в Океании:
<<Miscellaneous`WorldNames`
Oceania // InputForm
{"Indonesia", "Papua New Guinea", "Fiji", "Australia", "New Zealand")
Наиболее эффектными являются возможности подпакета WorldPlot, функции которого позволяют строить карты любой страны или всего мира:
WorldPlot [countrylist] — построение карты страны по списку ее данных; WorldPlot [countrylist, RandomColors] — построение карты страны по списку ее данных с раскраской случайными цветами; WorldPlot [countrylist, RandomGrays] — построение карты страны по списку ее данных с раскраской случайными оттенками серого цвета; WorldPlot [ {countrylist, colorfunc} ] — построение карты страны по списку ее данных с раскраской по функции colorfunc; WorldPlot [ {countrylist, colorlist) ] — построение карты страны по списку ее данных с раскраской по списку colorlist.
На рис. 13.7 показано построение контурной карты России (верхний рисунок) и цветной карты мира.
Раскраска достигается применением директивы RandomColors.
Слово Miscellaneous в переводе на русский язык означает «всякая всячина». Большинство функций этого пакета, на первый взгляд, не имеет прямого отношения к математическим расчетам. Однако как сказать! Этот пакет представляет систему Mathematica в особом свете — как систему, имеющую далеко не стандартные средства синтеза звука и графического представления информации самого общего вида. Физики, химики, географы и даже музыканты могут найти в этом пакете средства, полезные им при обработке на компьютере информации произвольного вида.
Утилитами принято называть небольшие программы, в основном вспомогательного назначения. Они предназначены чаще всего для работы с файлами и памятью компьютера. Ряд таких утилит включен в пакет расширения Utilities, знакомству с которым и посвящен данный небольшой раздел.
В подпакете 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 МГц). Для других компьютеров результаты хронометража будут другими.
Синтез звуков — Audio Синтез музыкальных звуков — Music Функции времени и дат — Calendar Географические и картографические данные — World Data Физические константы и размерные величины — PhysicalConstants Данные о химических элементах — ChemicalElements Задание данных только вещественного типа — RealOnly Работа с бинарными файлами — BinaryFiles Запись графических объектов в файл формата DXF Фильтрация опций — FiltersOptions Уплотнение памяти — MemoryConserve Работа с пакетами расширений — Package Показ времени операций — ShowTime
В подпакете 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}
В подпакете 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 *)}
Подпакет Music как бы продолжает рассмотренный ранее подпакет поддержки звуковых возможностей системы Mathematica. Он задает функцию последовательного воспроизведения списка, содержащего отдельные звуки:
Scale [ilist, freq, dur] — генерирует звуковой объект, представленный данными списка ilist музыкальных интервалов, с частотой freq и длительностью dur.Пример воспроизведения мажорной гаммы (поставляемая с системой мелодия JustMajor) представлен на рис. 13.6. Помимо фрагмента JustMajor имеется еще 11 фрагментов, которые поставляются с системой Mathematica (QuarterTone, Mean-Major, MeanMinor, SixthTone, JustMinor и т. д.). Все они могут воспроизводиться функцией Scale.
Рис. 13.6. Пример воспроизведения музыкального фрагмента
Кроме того, есть ряд функций преобразования:
HertzToCents [f list] — преобразует список частот (в герцах) в список музыкальных интервалов (в центах); CentsToHertz [ilist] — преобразует список музыкальных интервалов (в центах) в список частот (в герцах), начиная с частоты 440 Гц; CentsToHertz [ilist, f ] — преобразует список музыкальных интервалов (в центах) в список частот (в герцах), начиная с заданной частоты f.Примеры преобразования даны ниже:
<<Miscellaneous`Music`
HertzToCents[{400, 450, 525}]
{203.91, 266.871}
alist = Tablet N[440 2^(i/12)], {i, 0, 12}]
{440,., 466.164, 493.883, 523.251, 554.365, 587.33, 622.254,
659.255, 698.456/739.989, 783.991, 830.609, 880.}
HertzToCents[alist]
{100., 100., 100., 100., 100., 100., 100., 100., 100., 100., 100., 100.}
CentsToHertz[{0, 600}]
{440., 622.254}
Описанные возможности синтеза музыки являются скорее данью моде на мультимедиа, чем нужными на практике. Так, время подготовки музыкального объекта довольно значительно (до десятка секунд на компьютере с процессором Pentium II 350). Так что они годятся только для создания простейших музыкальных звуков, которыми можно сопровождать некоторые учебные программы.
Подпакет Audio служит для генерации стандартных звуковых сигналов разной формы, частоты и длительности, модуляции сигналов по амплитуде и по частоте и считывания звуковых файлов с дисков. Для создания звуковых объектов служит функция Waveform:
Waveform [type, freq, dur] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах). Возможны следующие формы сигнала: Sinusoid — синусоидальный, Triangle — треугольный, Square — прямоугольный и Sawtooth — пилообразный; Waveform [type, freq, dur, Overtones->n] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах), имеющий п гармоник.Приведенный на рис. 13.1 пример дает генерацию прямоугольного сигнала частотой 1000 Гц и длительностью 0.5 с. Следует обратить внимание.на то, что созданный звуковой объект проигрывается и показывается после команды Show.
Звуковой объект, как отмечалось, ассоциируется с графическим объектом. К сожалению, явной связи между осциллограммой звукового сигнала и его графическим образом нет. Более того, вид графического объекта сильно зависит от компьютерной платформы, на которой установлена система Mathematica. Так что графический звуковой объект — это просто некий условный графический образ звукового сигнала.
Рисунок 13.2 показывает генерацию прямоугольного сигнала с двумя гармониками. Здесь используется опция Overtones->2. Ее нельзя применять к синусоидальному сигналу, поскольку он принципиально не имеет гармоник.
Рис. 13.1. Создание и просмотр звукового объекта — синусоидального сигнала
Рис. 13.2. Генерация прямоугольного сигнала с двумя гармониками
Когда указана опция Overtones, функция Waveform использует ряд Фурье для создания высших гармоник, обогащающих тембр звука. При этом возможно изменение числа гармоник. Возможно также создание сигнала с заданными номерами и амплитудами гармоник. Для этого служит функция ListWaveform:
ListWaveform[ { {nl, al}, {n2, a2 },...}, freq, dir] — создает звуковой объект с частотой основной гармоники f req и длительностью dir, содержащий дополнительные частоты с кратностями ni и амплитудами ai.
На рис. 13.3 представлен пример создания звукового объекта сложного типа, содержащего ряд частотных составляющих.
Данные представлены списком partial-List. С помощью функции Table подготовлен объект, содержащий шесть звуковых подобъектов.
Подпакет 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 на компьютерах с малым объемом оперативной памяти.
В ряде случаев (как при вычислениях, так и при построении графиков) Mathematica сообщает о наличии у функций особых значений. Это хорошо иллюстрирует рис. 13.13, на котором предпринята попытка построения графика, казалось бы, простой функции х^ (1/3). Нетрудно заметить, что график в отрицательной области значений х не построен и перед построением неполного графика выдан целый букет предупреждающих сообщений.
Причина этой частичной неудачи в том, что в некоторых точках данная функция дает комплексные значения. Например:
(-8.0) ^ (1/3)
1. + 1.732051
Подпакет ReaLOnly не вводит никаких новых функций. Он просто превращает данные последующих вычислений в чисто вещественные. Так что после его загрузки построение графика указанной функции проходит без каких-либо проблем (рис. 13.14).
Рис. 13.13. Попытка построения графика функции х^(1/3)
Рис. 13.14. Построение графика функции х^(1/3) после загрузки подпа.кета RealOnly
Разумеется, подобное свойство нужно далеко не всегда и при неумелом его применении способно привести к ошибочным результатам. Тем не менее, есть случаи (см. приведенный пример), когда оно полезно.
В широко распространенных графических системах AutoCAD используется формат файлов DXF. Подпакет DXF позволяет записывать графические объекты Mathematica в этом формате с помощью функции WriteDXF["filename", graphics].
Здесь filename — имя файла, a graphics — имя предварительно созданного графического объекта. Применение данной функции вполне очевидно.