Главная > Mathematica 8 > Функции генерации случайных чисел


Функции генерации случайных чисел

Функции генерации случайных чисел
Для реализации статистических методов моделирования используются случайные числа. Система имеет генератор псевдослучайных чисел, доступ к которому обеспечивают следующие функции:

  • Random [ ] — возвращает равномерно распределенное псевдослучайное число типа Real в интервале от 0 до 1;
  • Random [type, range] — дает псевдослучайное число указанного типа type, лежащее в указанном интервале range. К возможным типам относятся Integer, Real и Complex. По умолчанию принят интервал от 0 до 1. Можно задать интервал явно в виде {min, max}; спецификация интервала в виде max эквивалентна {0, max};
  • SeedRandom[n] — сбрасывает (устанавливает в начальное состояйие) генератор случайных чисел, используя целое п как начальное число;
  • SeedRandom [ ] — устанавливает генератор, используя в качестве начального числа текущее время.

Хотя генерируемые числа не являются строго случайными, их количество в повторяющейся последовательности очень велико. Использование специальной установки начального состояния генератора, например по времени дня, делает повторение последовательности практически невозможным.
Для проверки равномерности распределения большого массива случайных чисел можно задать с их помощью случайные координаты и затем построить точки, соответствующие координатам (х, у). Рисунок наглядно показывает, как это делается для массива из 10 000 случайных точек. О равномерности распределения случайных чисел говорит равномерность распределения плотности точек на графике.
Возможно, читателю не сразу понятны графические средства, использованные в документе, показанном на рис. 3.4. Это не беда — в последующих уроках они будут описаны довольно подробно.
Функции выявления погрешностей и анализа структуры чисел
Следующие функции, опции и директивы используются, в основном, для выявления погрешностей вычислений и уточнения структуры чисел:

  • Accuracy [х] — возвращает количество десятичных цифр справа от десятичной точки числа х;
  • EvenQ [expr] — возвращает значение True, если expr есть четное число, и False — в противном случае;
  • IntegerDigits [n] — возвращает список десятичных цифр целого числа n;
  • IntegerDigits [n,b] — возвращает список цифр целого числа п в записи по основанию b;
  • IntegerDigits [n, b, k] — возвращает список длиной k, содержащий самые младшие (наименьшие) значащие цифры в n;
  • Precision [x] — возвращает количество точных знаков в числе х.

Поясним применение этих функций следующими примерами.

Ввод (In)

Вывод(Out)

Accuracy [123 . 456]

14

EvenQ [2*3+2]

True

EvenQ [2*3+3]

False

IntegerDigits [12345]

{1, 2,3, 4, 5}

IntegerDigits [12345, 16]

{3, 0,3, 15}

IntegerDigits [12352 , 16]

{3, 0,4, 0}

IntegerDigits [12352 ,2]

{1,1,0,0,0,0,0,0,1,0,0,0,0,0,0}

Precision [123. 452]

16

Функциями Accuracy и Precision возвращаются значения, установленные в последний раз или по умолчанию при первой загрузке системы.
Mathematical имеет обширный набор арифметических операторов и функций, достаточный для решения задач теории чисел и выполнения практически любых арифметических вычислений. Многие более специальные целочисленные функции будут рассмотрены в дальнейшем, по мере описания системы.
Функции пользователя
Хотя в систему входят многие сотни встроенных функций (начиная от элементарных и кончая специальными математическими функциями и системными функциями), нередко требуется расширить ее вводом новых функций, действие которых задается пользователем. Такие функции принято называть функциями пользователя. Функции пользователя — простейшие программные объекты, необходимые даже в том случае, когда пользователь не желает углубляться в тонкости программирования системы. Их цель — расширение системы и ее обучение работе с новыми функциями.
Для задания, опознавания и уничтожения функций пользователя используются следующие конструкции:

  • f (x_) := х^3 — отложенное задание функции пользователя с именем f;
  • f (х_) = х^3 — немедленное задание функции пользователя с именем f;
  • ?f — вывод информации о функции f;
  • Clear [f] — уничтожение определения функции f.

В обозначениях вида х_ знак _ применяется для создания так называемых образцов, задающих локальные переменные в теле функции — в нашем примере это х. При этом в самом теле функции переменные обозначаются как обычно, без знака образца. Он лишь указывает на особый статус переменных в ограниченном пространстве программы — в теле функции. Так, если вместо х_ будет подставлено число 2, то f (2) будет возвращать 2 А 3. Вне тела функции значение переменной х не изменяется. Переменная х может быть и неопределенной: х_ определяет переменную х только для тела функции. Более подробно создание образцов будет описано в дальнейшем.
Mathematica позволяет записать введенные пользователем функции с их определениями на магнитный диск с помощью оператора
Save["filename", fl, f2, …]
После этого функция пользователя становится внешней функцией. При этом для ввода таких функций в текущий документ (notebook) достаточно вызвать файл с именем filename:
<<filename
Рекомендуется создавать файлы с типовым расширением .т. Такие файлы входят в пакеты расширений системы. Имя файла нужно задавать по общепринятым для MS-DOS правилам, то есть при необходимости указывать логическое имя дисковода и путь к файлу, например, так:
<<D: \MAT\myfunc .m
Создание внешних функций по существу означает возможность расширения системы и ее адаптации к решению типовых задач конкретного пользователя. Как уже отмечалось, в систему входит мощная библиотека внешних расширений, и каждый пользователь может пополнить ее своими собственными библиотеками расширений.
Функции пользователя могут быть рекурсивными, то есть допускать в своем теле обращение к самим себе. Это связано с тем, что функция становится объявленной сразу же после задания своего имени со списком параметров. Рекурсия — мощный прием программирования, но злоупотреблять им не стоит. Многие рекурсивные алгоритмы более эффективно реализуются без рекурсии, с применением средств процедурного программирования, например циклов.
Функции пользователя можно задавать и выводить на печать как на языке системы, так и на некоторых общепринятых языках программирования, например Fortran, С или ТеХ. Для этого существует ряд функций преобразования, в имена которых входит слово Form (форма) и название языка для записи функций. Основные из них — это CForm [expr], FortranForm [expr ] и TeXForm [expr]. С их помощью выражения можно преобразовать в форму, принятую для языков программирования С, Fortran и ТеХ. При преобразовании в форму языка ТеХ греческие буквы заменяются их латинскими именами, например alpha, Alpha, beta, Beta, gamma и т. д. К сожалению, в отличие от систем класса MathCAD и Maple V R3, вывод математических формул в их полностью естественном виде не предусмотрен, хотя многое для этого уже сделано.
Для преобразования формул и данных, записанных на языке системы Mathematica и хранящихся в текстовых файлах, в другие формы используются следующие функции:

  • Splice ["file.rar"] — читает текстовый файл file.mx, интерпретирует его фрагменты, заключенные в ограничители <*…*>, и пишет текстовый файл file.*, в котором эти фрагменты преобразованы в формат, определяемый расширением х (с — С, f — Fortran, tex — ТеХ);
  • Splice ["infile", "outfile"] — то же, но с раздельным заданием имен входного и выходного файлов.

Таким образом, система Mathematica может общаться с другими программами, написанными на языках программирования, получивших распространение в практике реализации математических расчетов. Этому во многом способствует возможность преобразования форматов данных и результатов вычислений в различную форму, характерную для используемой внешней системы. К примеру, если вы работаете с программами на языке Fortran, то следует использовать соответствующий формат представления данных и результатов вычислений.

Mathematica может общаться также с иными системами, например текстовыми редакторами. К примеру, для передачи содержимого каких-либо ячеек в текстовый редактор Write, входящий в оболочку Windows, достаточно выделить эти ячейки и поместить их в буфер обмена, используя команду Сору из меню Edit. После этого надо запустить текстовый редактор и с помощью команды Edit | Paste поместить в окно редактирования содержимое ячеек. Если оно символьное, то с помощью редактора можно записать полученный документ с расширением .txt, то есть в стандартном текстовом формате, с которым работает большинство DOS-приложений.

Статьи по теме

Комментарии запрещены.