Переопределённые системы линейных уравнений

Система линейных уравнений у которой к-во уравнений ( n ) больше, чем к-во неизвестных ( m ) называется переопределённой. В этом случае чаще всего решения не существует, поэтому под решением подразумевают такие значения неизвестных, которые минимизируют некоторую норму вектора невязок.
При использовании p-норм условие задачи можно записать в виде:

    | 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 находится здесь.
Описание шаблона классов CArrRef2 находится здесь.
Исходники алгоритмов находятся в файле mathem.cpp.

Наверх


Hosted by uCoz