
4. Комбинаторика
ulong Cmb(int n, int r); Число сочетаний из n по r.
ulong fact(int k)
double factd(int k)
Фунцкии для вычисления факториала. Разные типы возвращаемых значений позволяют получить факториал для разных интервалов значений аргумента: для функции fact имеем 0 k 12, для функции factd интервал составляет 0 k 170.
int permut(int n, int* p);
Получение перестановок элементов массива p размером n. При каждом вызове функция permut изменяет массив p, формируя очередную перестановку. Возвращ. значение - номер очередной выборки или 0 (если все перестановки исчерпаны).
int permut_rand(int n, int* p)
Функция осуществляет случайную перестановку в массиве p. Возвращается текущий номер вызова функции.
int arrang(int m, int n, int* p);
Получение m-элементных размещений элементов массива p размером n. Генерируемые размещения занимают первые m позиций массива p. При каждом вызове функция arrang изменяет массив p, формируя очередную выборку. Возвращаемое значение - номер очередной выборки или 0, если все выборки исчерпаны.
int subsetnext(int n, int r, int* A);
Получение r-элементных подмножеств из n-элементного множества А. Массив А содержит не сами элементы исходного множества, а их номера. Генерируемые подмножества занимают первые r позиций массива А, который должен иметь длину n . При каждом вызове функция subsetnext изменяет массив A, формируя очередное подмножество. Возвращамемое значение - номер очередного подмножества (начиная с 1) или 0, если все подмножества исчерпаны.
5. Интерполяция и аппроксимация
Классы Linter и Spline упрощают программирование операций интерполяции данных. Класс Linter используется для линейной интерполяции, класс Spline – для интерполяции данных кубическими сплайнами.
Пусть x, y – одномерные массивы размером n, представляющие зависимость f(t) в табличной форме. Тогда оператор вида
Linter f(n,x,y);
создает функцию f(t) для линейной интерполяции указанных данных. Оператор
Spline f(n,x,y);
создает функцию f(t) для интерполяции данных кубическими сплайнами. Описание используемого алгоритма сплайн-интерполяции можно посмотреть в [4].
Следующая функция вычисляет параметры a0, a1, выполняя линейную аппроксимацию данных:
void linappr(int n, double* x, double* y, double& a0, double& a1);
Данные представлены таблицей в массивах x,y размером n, аппроксимирующая функция имеет вид:
y = a0 + a1x .
6. Получение случайных чисел
double frand()
Генерируется случайное число из интервала [0,1]. Для формирования результата используется стандартный генератор целых случайных чисел random(int).
double frand(double a, double b) Генерируется случайное число из заданного интервала [a,b].
Класс Randis позволяет получать случайные числа, распределение которых соответствует заданному образцу. Пусть x – массив случайных чисел с произвольным распределением, n – размер массива. Оператор
Randis f(m,n,x);
создает функцию f(), возвращающую при каждом вызове случайное число с распределением, соответствующим случайной величине x. Параметр m – число интервалов, используемых для построения функции распределения величины x. Функция – генератор случайных чисел f() не имеет параметров, тип взвращаемого значения double. Для решения задачи используется метод, описанный в [5].