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