Система линейных уравнений у которой к-во уравнений ( n ) больше, чем к-во неизвестных ( m ) называется переопределённой.
В этом случае чаще всего решения не существует, поэтому под решением подразумевают такие значения неизвестных,
которые минимизируют некоторую норму вектора невязок.
| A * x - b |p -> minгде A - это матрица коэффициентов ( n * m ), x - вектор решения ( m ), b - вектор свободных членов ( n ). Обычно используется 2-норма, что приводит к методу наименьших квадратов. Эта норма обладает многими хорошими свойствами ( простота реализации, единственность и непрерывность решения ), но в некоторых случаях предпочтительнее другие нормы. Например, при использовании 1-нормы решение менее подвержено влиянию шумов ( неточные исходные данные ). Решение этой задачи ( которое может быть не единственным ) заключается в выборе из этой системы m уравнений, решение которых будет минимизировать вектор невязок исходной системы. Назовём эти уравнения главными. Следующие функции находят решение с минимальной 1-нормой: bool minNorm1 ( CArrRef2<double> & data, ArrRef<double> & x, ArrRef<nat> & index ); bool minNorm1 ( CArrRef2<double> & data, ArrRef<double> & x ); bool minNorm1 ( CArrRef2<double> & data, ArrRef<nat> & index );Здесь data - это двухмерный массив ( n * (m+1) ) с исходными данными, в последнем столбце которого записан вектор b, x - ссылка на массив решения, index - ссылка на массив в который запишутся индексы главных уравнений. В этих функциях вначале определяются главные уравнения, а затем, если нужно, по ним методом исключений ( или Гаусса ) находится решение х. Следующая функция находит решение с минимальной 2-нормой: bool minNorm2 ( CArrRef2<double> & data, ArrRef<double> & x );Здесь вначале строится система нормальных уравнений, а затем она решается методом Гаусса. При использовании бесконечной нормы минимизируется максимальное значение невязок. Следующие функции находят решение с минимальной ∞-нормой: bool minNormU ( CArrRef2<double> & data, ArrRef<double> & x, ArrRef<nat> & index ); bool minNormU ( CArrRef2<double> & data, ArrRef<double> & x );Эти функции определяют m + 1 главных уравнений, для которых невязки будут равны максимальному значению, а для остальных уранений невязки будут меньше или равны максимальному значению. Описание шаблона классов ArrRef находится здесь.
|