Функции | |
void | qr_decomp (double **A, size_t m, size_t n, double *t) |
![]() | |
void | qr_decomp_t (double **At, size_t m, size_t n, double *t) |
![]() | |
void | qr_solve (double **QR, size_t n, double *t, double *b) |
Решение системы линейных уравнений. | |
void | qr_solve_t (double **QRt, size_t n, double *t, double *b) |
Решение системы линейных уравнений, в отличие от qr_solve работает с транспонированной матрицей. | |
void | qr_least_squares (double **QR, size_t m, size_t n, double *t, double *b, double *r) |
`Решение' переопределенной системы методом наименьших квадратов. | |
void | qr_least_squares_t (double **QRt, size_t m, size_t n, double *t, double *b, double *r) |
`Решение' переопределенной системы методом наименьших квадратов, в отличие от qr_least_squares работает с транспонированной матрицей. | |
void | qr_least_unpack (double **QR, size_t m, size_t n, double *t, double **Q, double **R) |
Полное представление ![]() | |
void | qr_least_unpack_t (double **QRt, size_t m, size_t n, double *t, double **Q, double **R) |
Полное представление ![]() |
Файл содержит функции, реализующие и использующие -разложение матрицы.
Произвольная матрица
ранга
допускает разложение вида
, где
-
матрица с ортогональными столбцами,
- верхнетреугольная
матрица. Такое разложение можно использовать для решения системы линейных уравнений
, сводя ее к треугольной системе
. Данная треугольная система позволяет также найти псевдорешение (в смысле метода наименьших квадратов) переопределенной системы.
-разложение используется также для нахождения ортонормированного базиса подпространства. Если
имеет полный столбцовый ранг, то столбцы матрицы
составляют ортонормированный базис подпространства, натянутого на столбцы матрицы
.
void qr_decomp | ( | double ** | A, | |
size_t | m, | |||
size_t | n, | |||
double * | t | |||
) |
-разложение матрицы.
Функция находит -разложение
матрицы A ранга
. На выходе диагональ и верхнетреугольная часть матрицы
содержат элементы матрицы
. Матрица
представлена элементами ниже диагонали и вектором
. Вектор
имеет длину
. Матрица
определяется произведением матриц отражений Хаусхолдера:
, где
и
. Такая же схема используется в библиотеках LAPACK, GSL и др.
Для разложения используется алгоритм вращений Хаусхолдера (См. [GolubVanLoan], алгоритм 5.2.1).
Трудоемкость:
void qr_decomp_t | ( | double ** | At, | |
size_t | m, | |||
size_t | n, | |||
double * | t | |||
) |
-разложение матрицы, в отличие от qr_decomp работает с транспонированной матрицей.
Трудоемкость:
void qr_least_squares | ( | double ** | QR, | |
size_t | m, | |||
size_t | n, | |||
double * | t, | |||
double * | b, | |||
double * | r | |||
) |
`Решение' переопределенной системы методом наименьших квадратов.
Функция находит псевдорешение переопределенной системы линейных уравнений
ранга
, используя предварительно найденное
-разложение матрицы
.
-разложение должно быть представлено матрицей
и вектором
, возвращаемыми функцией qr_decomp. Псевдорешение минимизирует евклидову норму невязки
. Псевдорешение
записывается на месте вектора правой части
. Невязка
возвращается в векторе
.
Трудоемкость:
void qr_least_squares_t | ( | double ** | QRt, | |
size_t | m, | |||
size_t | n, | |||
double * | t, | |||
double * | b, | |||
double * | r | |||
) |
`Решение' переопределенной системы методом наименьших квадратов, в отличие от qr_least_squares работает с транспонированной матрицей.
Функция находит псевдорешение переопределенной системы линейных уравнений
, используя предварительно найденное
-разложение матрицы
.
-разложение должно быть представлено матрицей
и вектором
, возвращаемыми функцией qr_decomp_t. Псевдорешение минимизирует евклидову норму невязки
. Псевдорешение
записывается на месте вектора правой части
. Невязка
возвращается в векторе
.
Трудоемкость:
void qr_least_unpack | ( | double ** | QR, | |
size_t | m, | |||
size_t | n, | |||
double * | t, | |||
double ** | Q, | |||
double ** | R | |||
) |
Полное представление -разложения.
Функция находит матрицы ,
размеров
и
соответственно, представленные в запакованном формате
,
.
Трудоемкость:
void qr_least_unpack_t | ( | double ** | QRt, | |
size_t | m, | |||
size_t | n, | |||
double * | t, | |||
double ** | Q, | |||
double ** | R | |||
) |
Полное представление -разложения, в отличие от qr_least_unpack работает с транспонированной матрицей.
Функция находит матрицы Q, R размеров и
соответственно, представленные в запакованном формате
,
.
Трудоемкость:
void qr_solve | ( | double ** | QR, | |
size_t | n, | |||
double * | t, | |||
double * | b | |||
) |
Решение системы линейных уравнений.
Функция находит решение квадратной системы линейных уравнений порядка
. Функция использует предварительно найденное
-разложение матрицы
, представленное матрицей
и вектором
, которые возвращаются функцией qr_decomp. Решение
записывается на месте вектора правой части
. Матрица
и вектор
не меняются данной функцией и могут быть использованы для решения системы с другой правой частью.
Используется алгоритм прямой и обратной подстановки.
Трудоемкость:
void qr_solve_t | ( | double ** | QRt, | |
size_t | n, | |||
double * | t, | |||
double * | b | |||
) |
Решение системы линейных уравнений, в отличие от qr_solve работает с транспонированной матрицей.
Функция находит решение квадратной системы линейных уравнений порядка
. Функция использует предварительно найденное
-разложение матрицы
, представленное матрицей
и вектором
, которые возвращаются функцией qr_decomp_t. Решение
записывается на месте вектора правой части
. Матрица
и вектор
не меняются данной функцией и могут быть использованы для решения системы с другой правой частью.
Используется алгоритм прямой и обратной подстановки.
Трудоемкость: