В.П. Пинчук
Библиотека VP / C++ . Модуль dalmat.h
Запорожье, ЗНТУ, 2005.
Тел. (0612) 636800, e-mail: vpinchuk@zntu.edu.ua
1. Модуль dalmat.H
1.1 Описание модуля
1.2 Примеры использования классов и функций
1.3 Исключения
1.1 Описание модуля
Библиотечный модуль dalmat.hвходит в состав библиотеки программных компонентовVP/C++, он содержит набор классов, функций и процедур для решения задач линейной алгебры и обработки данных. Интерфейсная часть модуля с подробными комментариями приводится ниже.
/* Библиотека VP/C++, модуль dalmat.h, версия 04.2004 ----------------*/
/* Пинчук В.П. ЗНТУ, Запорожье, Украина */
/*-- класс dmatrix: прямоугольные матрицы с элементами типа double ---*/
class dmatrix
{ public:
int n,m; // n - число строк матрицы, m - число столбцов
double** r; // r - имя для доступа к элементам динамической матрицы
dmatrix() { n=m=0; r=0; } // конструктор без параметров
dmatrix(int); // конструктор для создания квадратной матрицы
dmatrix(int,int); // конструктор для создания прямоугольной матрицы
dmatrix(double**, int, int); // конструктор: создание матрицы и // инициализация с помощью внешнего двухмерног массива
dmatrix(const dmatrix&); // конструктор копирования
~dmatrix(); // деструктор
dmatrix& operator=(const dmatrix&); // перегрузка присваивания
dmatrix& operator=(double); // преобразование матрицы в диагональную
double* operator[](int); // перегрузка для использования индексов
dmatrix operator~(); // операция транспонирования
double det(); // вычисление определителя
void rand(double, double); // формирование матрицы, элементы // которой предсавляют собой случайные числа из заданного интервала };
FILE* operator<<(FILE*, const dmatrix&); // вывод матрицы в файл
FILE* operator>>(FILE*, dmatrix&); // ввод матрицы из файла
double amax(const dmatrix& A); // найти максим. по модулю элемент // матрицы
/*---- класс dvector: одномерные массивы с элементами типа double ----*/
class dvector
{ public:
int m; // число элементов вектора
double* r; // указатель одномерного динамического массива
dvector() { m=0; r=0; } // конструктор без параметров
dvector(int); // конструктор для создания вектора с заданным // числом элементов
dvector(int,double*); // конструктор: создание и инициализация // вектора внешним массивом
dvector(const dvector&); // конструктор копирования
~dvector() { delete[] r; } // деструктор
dvector& operator=(const dvector&); // перегрузка присваивания
double& operator[](int); // перегрузка индексирования
double length(); // геометрическая длина n-мерного вектора
dvector& rand(double, double); // формирование вектора, элементы // которого предсавляют собой случайные числа из заданного интервала };
double amax(const dvector& A); // максимальный по модулю элемент
/*------------------ класс ftable: таблица данных --------------------*/
class ftable
{ public:
int n; // число строк таблицы
double *x, *y; // массивы для значений аргумента и функции
ftable() { n=0; x=y=NULL; } // конструктор без параметров
ftable(int, double*, double*); // конструктор инициализации с // использованием внешних массивов
ftable(dvector&, dvector&); // конструктор инициализации с // использованием значений типа dvector
ftable(const ftable&); // конструктор копирования
~ftable() { delete[] x, delete[] y; } // деструктор
ftable& operator=(const ftable&); // перегрузка присваивания
void operator>>(FILE*); // запись в файл
void operator<<(FILE*); // чтение из файла
};
/* ---------------- Внешние перегруженные операции -------------------*/
dmatrix operator+(const dmatrix& A, const dmatrix& B);
// поэлементное сложение матриц
dmatrix operator-(const dmatrix& A, const dmatrix& B);
// вычитание матриц
dmatrix operator*(const dmatrix& A, const dmatrix& B);
// умножение матриц
dmatrix operator*(double p, const dmatrix& B);
// умножение числа на матрицу
dmatrix operator*(const dmatrix& A, double p);
// умножение матрицы на число
dvector operator*(const dmatrix& A, const dvector& X);
// умножение матрицы на вектор
dmatrix operator/(double e, const dmatrix& D);
// деление числа на матрицу
dmatrix operator/(const dmatrix& A, const dmatrix& B);
// деление матрицы на матрицу
dvector operator+(const dvector& A, const dvector& B);
// поэлементное сложение векторов (одномерных массивов)
dvector operator-(const dvector& A, const dvector& B):
// поэлементное вычитание векторов (одномерных массивов)
double operator*(const dvector& A, const dvector& B);
// скалярное умножение векторов
FILE* operator<<(FILE* f, const dvector& V);
// запись вектора в файл
FILE* operator>>(FILE* f, dvector& V);
// чтение вектора из файла
void gauss(const dmatrix& A, const dvector& B, dvector& X);
// решение системы линейных уравнений методом Гаусса
double polin(dvector& a, double x);
// вичисление полинома
dvector interpolinom(dvector& x, dvector& y);
// получить значения коэффициентов интерполирующего полинома
dvector polinappr(ftable F, int p);
// выполнить аппроксимацию полиномом порядка p