Полезные функции
- Синтез звуков — Audio
- Синтез музыкальных звуков — Music
- Функции времени и дат — Calendar
- Географические и картографические данные — World Data
- Физические константы и размерные величины — PhysicalConstants
- Данные о химических элементах — ChemicalElements
- Задание данных только вещественного типа — RealOnly
- Работа с бинарными файлами — BinaryFiles
- Запись графических объектов в файл формата DXF
- Фильтрация опций — FiltersOptions
- Уплотнение памяти — MemoryConserve
- Работа с пакетами расширений — Package
- Показ времени операций — ShowTime
Пакет расширения Miscellaneous
Слово Miscellaneous в переводе на русский язык означает «всякая всячина». Большинство функций этого пакета, на первый взгляд, не имеет прямого отношения к математическим расчетам. Однако как сказать! Этот пакет представляет систему Mathematica в особом свете — как систему, имеющую далеко не стандартные средства синтеза звука и графического представления информации самого общего вида. Физики, химики, географы и даже музыканты могут найти в этом пакете средства, полезные им при обработке на компьютере информации произвольного вида. Подпакет Audio служит для генерации стандартных звуковых сигналов разной формы, частоты и длительности, модуляции сигналов по амплитуде и по частоте и считывания звуковых файлов с дисков. Для создания звуковых объектов служит функция Waveform:- Waveform [type, freq, dur] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах). Возможны следующие формы сигнала: Sinusoid — синусоидальный, Triangle — треугольный, Square — прямоугольный и Sawtooth — пилообразный;
- Waveform [type, freq, dur, Overtones->n] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах), имеющий п гармоник.
Рис. 13.1. Создание и просмотр звукового объекта — синусоидального сигнала
Рис. 13.2. Генерация прямоугольного сигнала с двумя гармониками Когда указана опция Overtones, функция Waveform использует ряд Фурье для создания высших гармоник, обогащающих тембр звука. При этом возможно изменение числа гармоник. Возможно также создание сигнала с заданными номерами и амплитудами гармоник. Для этого служит функция ListWaveform:
- ListWaveform[ { {nl, al}, {n2, a2 },...}, freq, dir] — создает звуковой объект с частотой основной гармоники f req и длительностью dir, содержащий дополнительные частоты с кратностями ni и амплитудами ai.
Рис. 13.3. Генерация многочастотного сигнала Для создания звуковых объектов, порождающих звук с амплитудной и частотной модуляцией, служат следующие функции:
- AmplitudeModulation [f c , f m ,m t ,dur] — создает амплитудно-модулирован-ный синусоидальный сигнал с несущей частотой f c , частотой модуляции f m , коэффициентом модуляции m. и длительностью dur. Опция RingModula-tion->True позволяет получить амплитудную модуляцию с подавленной несущей;
- FrequencyModulation [f c , {{f m ,pd}, dur] — создает частотно-модулированный синусоидальный сигнал с несущей частотой f c , модулированный по частоте сигналом с частотой модуляции f m , с девиацией частоты pd (в герцах) и длительностью dur.
- FrequencyModulation [fc, {{f l,pdl}, (f2,pd2 },...}, dur] — создает частотно-модулированный синусоидальный сигнал длительностью dur с несущей частотой f с и каскадом частот модуляции fmi с девиациями pdi. Опция ModulationType->Parallel создает сигнал, независимо промодулированнып всеми указанными частотами, а опция ModulationType->Cascade включает режим, при котором перечисленные частоты последовательно модулируют друг друга.
Рис. 13.4. Генерация звуковых объектов с амплитудной (сверху) и частотной (снизу) модуляцией
Рис. 13.5. Генерация композитного звукового сигнала Для считывания звуковых файлов с магнитного диска служит функция Read-Soundfile:
- ReadSoundf ile [ "soundfile" ] — опознает файлы разного формата и конвертирует их в список, содержащий целые числа в диапазоне от -32 768 до +32 767. Опция PrintHeader->True позволяет вывести отчет о звуковом файле. Поддерживаются следующие форматы звуковых файлов: NeXT/Sun, WAVE и AIFF.
Синтез музыкальных звуков — Music
Подпакет Music как бы продолжает рассмотренный ранее подпакет поддержки звуковых возможностей системы Mathematica. Он задает функцию последовательного воспроизведения списка, содержащего отдельные звуки:- Scale [ilist, freq, dur] — генерирует звуковой объект, представленный данными списка ilist музыкальных интервалов, с частотой freq и длительностью dur.
Рис. 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). Так что они годятся только для создания простейших музыкальных звуков, которыми можно сопровождать некоторые учебные программы.
Функции времени и дат — Calendar
В пакете расширений Miscellaneous есть ряд подпакетов, содержащих функции времени и даты. Так, в подпакете Calendar сосредоточены вычисления, относящиеся к календарным датам:- DayOfWeek [ {year, month, day} ] — вычисляет день недели по заданным году, месяцу и числу;
- DaysBetween[{yearl,monthl,dayl},{year2, month2, day2} — вычисляет число суток между двумя датами:
- DaysPlus [ {year, month, day}, n] — дает дату и-го дня после заданной даты.
- 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).
CityDistance["Washington", "Montreal"]//N 786.915Базу данных можно расширять, добавляя в нее информацию о новых городах:
CityPosition[{"Champaign", "USA", "IL"}] = {{40, 7, 5}, {-88, -14, -48}};
Убедимся, что информация действительно добавлена:
CityData["Champaign", CityPosition] {{40, 7, 5}, {-88, -14, -48}}
Для добавления новых полей в базу данных можно использовать функцию AppendTc (см. урок 9). Например, добавим поле для хранения информации о населении:
AppendTo[$CityFields, CityPopulation]
Теперь введем в базу данных информацию о населении Вашингтона:
Проверим результат, запросив всю имеющуюся в базе информацию об этом городе:CityPopulation[{"Washington", "USA", "DC"}] = 638000;
CityData["Washington"] {{CityPosition, {{38, 53, 42}, {-77, -2, -12}}}, {CityPopulation, 638000}}
Как видите, результат теперь включает новую информационную категорию —
CityPopulation.В подпакете Geodesy есть функции, вычисляющие расстояние между двумя точками с учетом выпуклости Земли:
- SphericalDistance [posl,pos2] — вычисляет расстояние между двумя точками в предположении, что Земля — идеальный шар (сфера);
- SpheroidalDistance [posl,pos2] — вычисляет расстояние между двумя точками в предположении, что Земля — приплюснутый шар (сфероид).
SphericalDistance[{0, 0}, {45,-45}] //N 6671.7
SpheroidalDistance[{0, 0}, {45, 45}] //N 6662.47 % - %% -9.23014
Географические и картографические данные — WortdData, WorldNames и WorldPlot
В пакете 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. Контурная карта России и цветная карта мира Следующий рисунок (рис. 13.8) показывает возможность композиционного изображения картографических изображений. На нем построена карта Америки и особо выделены (более темным цветом) территории Канады и Мексики. Здесь для цветовых выделений использована директива GrayLevel, позволяющая задавать степень густоты серого цвета.
Рис. 13.8. Карта Америки с выделенными Канадой и Мексикой Карты могут строиться в различных проекциях: Albers, Equirectangular, LambertAzimuthal, LambertCylindrical, Mercator, Mollweide, Orthographic и Sinusoidal. Для этого используется опция WorldProjection-> Имя_проекции.
На рис. 13.9 представлена цветная карта всего мира, построенная в синусоидальной проекции. Такая проекция удобна для общего обозрения всей поверхности земного шара при взгляде с экватора (сравните рис. 13.9 с рис. 13.7).
Рис. 13.9. Вид на земной шар при синусоидальной проекции Выбор вида проекции способен преобразовать вид изображения. Для иллюстрации этого на рис. 13.10 представлена карта мира в иной проекции — азимутальной проекции Ламберта (LambertAzimuthal). В таком виде получается прекрасный вид на Землю со стороны Северного полюса.
Рис. 13.10. Вид но земной шор со стороны Северного полюса при азимутальной проекции Ламберта Еще один пример (с цилиндрической проекцией Ламберта) представлен на рис. 13.11. Здесь показана карта Африки. Цилиндрическая проекция в некоторых случаях позволяет визуально уменьшить геометрические искажения границ, обусловленные сферической поверхностью Земли. Обратите также внимание на технику окраски самого континента, фона и рамки.
Рис. 13.11. Контурная карта Африки в цилиндрической проекции В подпакет World Plot включены функции преобразования углов:
- ToMinutes [deg] — преобразует градусы в минуты;
- ToMinutes [ {deg,min} ] — преобразует градусы и минуты в минуты с долями;
- ToMinutes [ {deg,min, sec} ] — преобразует градусы, минуты и секунды в минуты с долями.
ToMinutes [1]
60 ToMinutes [{1,20}] 80 ToMinutes [{1,20,10}] 481/6 N[%] 80.1667
Физические константы и размерные величины — PhysicalConstants
В подпакете 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 |
Ускорение свободного падения |
<<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] -6.66667Наконец, имеются три широкопрофильные функции преобразования в различные системы единиц:
- SI [ехрr] — преобразует ехрг в Международную систему единиц SI;
- MKS [ехрr] — преобразует ехрг в систему единиц МКС (метр/килограмм секунда);
- CGS [ехрr] — преобразует ехрг в систему единиц СГС (сантиметр/грамм секунда).
SI[3 Atmosphere]
303975. Pascal ?Pascal Pascal is the derived SI unit of pressure.
Помимо возможности задания физических констант в пакете расширения Miscellaneous системы Mathematica 4 имеются три дополнительных подпакета: Standard-Atmosphere (данные об атмосфере), ResonanceAbsorptionLines (построение резонансных линий поглощения) и BlackBodyRadiation (излучение абсолютно черного тела).
Ввиду узкой направленности входящих в них функций эти подпакеты подробно не описываются. С ними несложно познакомиться по справочной базе данных системы Mathematica 4 (раздел Add-ons).Данные о химических элементах — ChemicalElements
В подпакете 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 графически показывает отношение атомного веса к атомному номеру для разных элементов.
Рис. 13.12. График отношения атомного веса к атомному номеру химических элементов Полезны также функции, возвращающие значения величин, определяющих физические свойства элементов:
- MeltingPoint [element] — температура в точке плавления (здесь и далее в Кельвинах);
- BoilingPoint [element] — температура в точке кипения;
- HeatOf Fusion [element] — теплота плавления (килоджоуль/моль);
- HeatOfVaporization [element] — теплота парообразования (килоджоуль/моль):
- Density [element] — плотность в килограммах на кубический метр (при 298 К);
- TermalConductivity [element] — теплопроводность элемента;
- ElectronConf iguration [element] — конфигурация электронов в виде списка;
- ElectronConf igurationFormat [element] — конфигурация электронов Б стандартной форме записи.
MeltingPoint[Wolfram] 3680. Kelvin BoilingPoint[Wolfram] 5930.Kelvin HeatOfFusion[Wolfram] 35.2 Joule Kilo/Mole HeatOfVaporization[Wolfram] 824.2 Joule Kilo / Mole Density[Wolfram] 19300. Kilogram / Meter3 ThermalConductivity[Wolfram] 174. Watt /Kelvin Meter ElectronConfiguration[Wolfram] {{2}, {2, 6}, {2, 6, 10}, {2, 6, 10, 14}, {2, 6, 4}, {2}} ElectronConfigurationFormat[Wolfram] 1s2 2s22p6 3s23p63d10 4s24p64d104f14 5s25p65d4 6s2
Вольфрам — один из самых тугоплавких элементов в природе. Недаром из него делают нити для ламп накаливания.
Задание данных только вещественного типа — RealOnly
В ряде случаев (как при вычислениях, так и при построении графиков) Mathematica сообщает о наличии у функций особых значений. Это хорошо иллюстрирует рис. 13.13, на котором предпринята попытка построения графика, казалось бы, простой функции х^ (1/3). Нетрудно заметить, что график в отрицательной области значений х не построен и перед построением неполного графика выдан целый букет предупреждающих сообщений. Причина этой частичной неудачи в том, что в некоторых точках данная функция дает комплексные значения. Например:(-8.0) ^ (1/3) 1. + 1.732051
Подпакет ReaLOnly не вводит никаких новых функций. Он просто превращает данные последующих вычислений в чисто вещественные. Так что после его загрузки построение графика указанной функции проходит без каких-либо проблем (рис. 13.14).
Рис. 13.13. Попытка построения графика функции х^(1/3)
Рис. 13.14. Построение графика функции х^(1/3) после загрузки подпа.кета RealOnly Разумеется, подобное свойство нужно далеко не всегда и при неумелом его применении способно привести к ошибочным результатам. Тем не менее, есть случаи (см. приведенный пример), когда оно полезно.
Начало |
|