Масштабирование столбцов матрицы

Масштабирование столбцов матрицы для решения систем уравнений - это когда столбцы умножаются на числа, чтобы их нормы были приблизительно одинаковыми, после этого решается система уравнений и полученное решение масштабируется обратно. При этом полученное решение может быть более точным, чем решение полученное без масштабирования.

bool columnScale ( bool (*func) ( unsigned int n, unsigned int m, const double * const * a, const double * b, double * x ),
                unsigned int n, unsigned int m, const double * const * a, const double * b, double * x );
Здесь func - это указатель на функцию решающую систему уравнений, n - к-во строк, m - к-во столбцов, a - матрица, b - столбец свободных членов, x - массив неизвестных.
В качестве func могут быть использованы функции slu_ortho и slu_orthoH1 из раздела Решение систем линейных уравнений методом ортогонализации, lss_h и ortholin из раздела Метод наименьших квадратов. Мои эксперименты на случайных данных показали, что для slu_ortho масштабирование улучшает решение в 99% случаев, для slu_orthoH1 в 45%, для lss_h в 50%, а для ortholin решение в обоих случаях всегда одинаковое.

Исходники находятся в файле mathem.cpp.

Наверх