-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatrix.h
90 lines (75 loc) · 3.1 KB
/
matrix.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#ifndef MATRIX_H
#define MATRIX_H
#include <QSize>
#include <QVector>
#include <QDebug>
struct msize {
msize(int h = 1, int w = 1)
{
height = h;
width = w;
}
int height;
int width;
bool operator!=(msize a)
{
return (height != a.height) && ( width != a.width);
}
};
class MatrixException
{
public:
enum errors
{
SizeError, // Несоответствие размеров
IndexError, // Обращение к несуществующему элементу
SumError, // Cложение матриц не соответствующих размеров
SubError, // Разность матриц не соответствующих размеров
MulError, // Умножение матриц не соответствующих размеров
ZeroDivisionError, // Умножение матриц не соответствующих размеров
DeterminantError, // Матрица не является квадратной
ReverseMatrixError, // Определитель равен нулю
};
MatrixException(errors type, msize a = {0, 0}, msize b = {0, 0});
void printError();
private:
QString err, info;
};
class Matrix
{
public:
Matrix();
Matrix(int height, int width);
Matrix(msize);
Matrix(const Matrix &);
void setSize(int, int);
void setSize(msize);
msize getSize() const;
Matrix operator+(Matrix);
Matrix operator-(Matrix);
Matrix operator*(Matrix);
Matrix operator*(const double);
friend Matrix operator*(const double, Matrix);
Matrix operator/(const double);
Matrix &operator=(const Matrix);
QVector<double> getRow(int i); // Получить i строку
QVector<double> getColumn(int j); // Получить j столбец
double getElement(int i, int j); // Получить i j элемент матрицы
void setElement(int i, int j, double value); // Установить значение value для i j элемента матрицы
double determinant(); // Определитель матрицы
double algAddition(int i, int j); // Алгебраическое дополнение по i строки и j столбцу
void transpose(); // Транспонированная матрица
void reverse(); // Обратная матрица
void delRow(int i); // Удалить i строку
void delColumn(int j); // Удалить j столбец
void addRow(int i, QVector<double> row); // Добавить строку row после i строки исходной матрицы
void addRow();
void addColumn(int j, QVector<double> column); // Добавить столбец column после j столбца исходной матрицы
void addColumn();
void swapRows(int i1, int i2); // Меняет местами i1 и i2 строки
void swapColumns(int j1, int j2); // Меняет местами j1 и j2 столбцы
private:
double det(QVector<QVector<double>>);
QVector<QVector<double>> matrix;
};
#endif // MATRIX_H