Напомним постановку задачи. Пусть задан набор из m точек:
(x0, y0), (x1, y1), ..., (xm-1, ym-1); (xi ¹ xj при i ¹ j, i, j = 0 .. m-1) (30)
Среди функций определенного класса Ã требуется найти функцию F(x), для которой величина (евклидова норма)
(31)
принимает наименьшее значение. Обычно Ã - это линейные комбинации некоторых заранее выбранных функций gj(x) ( j = 0 .. n-1, n£m), называемых базисными, то есть
(32)
Пусть A - матрица значений базисных функций в абсциссах точек (30), y - вектор ординат этих точек, a c - вектор искомых коэффициентов:
Известно [36, c.708], что вектор с можно искать как решение нормального уравнения:
AT × A × c = AT × y. (33)
Матрица AT × A - симметрическая, а если ранг A равен n, то и положительно-определенная. Тогда существует (AT × A)-1 и решение (33) единственно:
c = ((AT × A)-1× AT) × y = A+ × y. (34)
Замечание 1. Матрица A+ называется псевдообратной для A. Это понятие является естественным обобщением понятия обратной матрицы на случай неквадратных матриц.
адача 7. Метод наименьших квадратов. Пусть наборы экспериментальных точек и базисных функций заданы соответственно векторами
x = (x0, x1, ..., xm-1)T, y = (y0, y1, ..., ym-1)T, g(x) = (g0(x), g1(x), ..., gn-1(x))T.
Составить программу нахождения коэффициентов cj ( j = 0 .. n-1, n£m) функции (32), наилучшим образом, в смысле метода наименьших квадратов, приближающую экспериментальные данные, и вычисления невязки e .
Решение. С учетом ранее сказанного, используя рекурсивную функцию inverse4(A), решение задачи можно получать с помощью функции:Передаваемые в qua() фактические параметры - это исходные данные задачи, то есть экспериментальные векторы x, y и набор базисных функций g. При вычислениях по qua() сначала формируется матрица A значений базисных функций. Далее, рекурсивной функцией invers4() решается нормальное уравнение (33), то есть находится вектор коэффициентов искомой функции F(x). Затем вычисляется невязка e . Результат возвращается в виде блочного вектора вида: ( c | e )T.
Контрольный пример.
Пусть: x := (1 2 3 4 5)T, y := (4 8 9 7 6)T, g(t) := (1 t × sin(t) ln(t))T.
Вычисляем: qua(x, y, g) = [3.126 0.977 4.804 0.387]
Откуда: F(x) = 3.126 + 0.977 × x × sin(x) + 4.804 × ln(x), e = 0.387.
Замечание 2. Часто F(x) ищут в классе многочленов степени не выше n-1, беря в качестве базисных функций мономы gj(x) = xi ( j = 0 .. n-1).