
- •1. Введение
- •2. Модуль общего назначения syst.H
- •2.1. Общие сведения
- •2.2. Системные функции и макрооперации
- •2.3. Операции ввода/вывода
- •2.4. Математические функции
- •2.5. Специальные классы. Класс Spline для интерполяции данных сплайнами
- •3. Представление графов, классы и граф-объекты
- •3.1. Представление графов
- •3.2. Таблица связей, класс graph.
- •3.3. Матрицы смежности, класс matad.
- •3.4. Бинарные коды
- •3.5. Таблицы связей с весами вершин, класс graph_v
- •3.6. Таблицы связей с весами ребер, класс graph_r
- •3.7. Таблицы связей с весами вершин и ребер, класс graph_vr
- •3.8. Таблицы связей с координатами вершин, класс imgraph
- •3.9. Класс pinv
- •4. Форматы данных и преобразование форматов
- •4.1. Нумерация вершин графа
- •4.2. Представление графов
- •Int biclen(int n)
- •Int bic_graph(const graph& g, word* bic)
- •Int bic_mat(const matad& m, word* bic)
- •5. Функции создания графа
- •Imgraph::imgraph()
- •Imgraph::imgraph(const imgraph&)
- •6. Операции над графами и граф-объектами
- •Void add_edge(graph& g, int I, int k)
- •7. Ввод/вывод и преобразование файлов
- •Int write_r(file*)
- •Int read_r(file*)
- •Int gt_r(file* in, file* out)
- •Int cmp(const pinv& a, const pinv& b)
- •16. Примеры
- •Литература
- •Алфавитный указатель функций
2.4. Математические функции
Type abs(Type x);
Абсолютная величина (или модуль) от x.
template <class T>
inline Type Max(const Type& a, const Type& b);
Возвращается большее из значений аргументов a,b.
template <class T>
inline Type Min(const Type& a, const Type& b);
Возвращается меньшее из значений аргументов a,b.
double frac(double x)
Дробная часть x в формате double.
int round(double x)
Приведение к целому путем округления.
float frand()
Случайное число из интервала [0,1]. Для формирования результата используется стандартный генератор целых случайных чисел random(int).
float frand(float a, float b) Случайное число из заданного интервала [a,b].
ulong fact(int k)
double factd(int k)
Фунцкии для вычисления факториала. Разные типы возвращаемых значений позволяют получить факториал для разных интервалов значений аргумента: для функции factk12, для функцииfactdk170.
ulong Cmb(int n, int r); Число сочетаний изnпоr.
double simps(double (*fun)(double), double a, double b, int N);
Функция вычисляет интеграл по методу Симпсона. Параметры: a,b- пределы интегрирования,N- число шагов интегрирования,fun- имя подынтегральной функции, которая должна быть описана как функция типаdouble fun(double).
double erfc(double x);
Функция возвращает значение дополнительного интеграла ошибок.
,
где
.
Используется комбинированный алгоритм из работы [2].
inline int numbit(Type x)
Число единиц в бинарном коде значения x.
int hamdist(Type a, Type b)
Расстояние Хэмминга для бинарных кодов значений a,b (количество несовпадающих битов).
double polin(int n, double* a, double x);
Вычисление полинома порядка n по схеме Горнера, размер массива коэффициентов a равен n+1 .
double th(double x)
Тангенс гиперболический от x .
double lanj(double x)
Значение функции ланжевена:
.
Для вычисления используется метод разложения в цепную дробь, описание см. в работе [3]. Значения параметров алгоритма: размерность цепной дроби: 13, точка переключения: 2.0.
2.5. Специальные классы. Класс Spline для интерполяции данных сплайнами
class Spline
{ int n; // n - размер таблицы
float *x, *y; // массивы x,y содержат копию исходной таблицы // зависимости y(x)
float *M; // M - вспомогательный рабочий массив
public:
Spline(int, float*, float*); // конструктор, выполняет // инициализацию создаваемого объекта и вычисляет // вспомогательный массив M
~Spline();
double operator()(double);
// перегрузка операции вызова функции, для выполнения сплайн-интерполяцию
};
Программная реализация алгоритма сплайн-интерполяции на языке BASICприводится в книге [4]. Ниже приведен простой пример использования классаSplineдля сплайн-интерполяции табличных данных. Исходная таблица данных размещается в массивахx,y.
#include <syst.h>
void main()
{ float t; int i;
float x[]= { 0, 1, 2, 3, 4, 5 },
y[]= { 1, 4, 6, 6, 5, 4 };
Spline f(6,x,y); // создать функцию f для интерполяции
for (i=0;i<12;i++) { t=i*0.5; printf("t=%f y=%f \n",t,f(t)); }
pause;
}