НИИ МЛЯ
(прокрастинация. профанация. прострация.)
На главную Отдел ИИ Отдел ПА Отдел РП Лаборатория ЕН Лаборатория ЭХ
Лаборатория естественных наук

Об одном применении метода наименьших квадратов

(По мотивам этого вопроса)

Пусть нам даны векторы:

A = (a1, ..., aN),
B = (b1, ..., bN),
C = (c1, ..., cN),
D = (d1, ..., dN),
и требуется найти такие коэффициенты ka ≥ 0, kb ≥ 0, kc ≥ 0, kd ≥ 0, чтобы норма линейной комбинации
kaA+kbB+kcC+kdD
была минимальной.

Ясно, что в вышеописанном виде задача решается тривиально, ибо эта норма стремится к нулю при k* → 0. Поэтому мы наложим ещё одно дополнительное условие: один из коэффициентов должен быть равен 1.

Возникающая задача может быть сведена к решению четырех классических задач нелинейного программирования:

||A+kb(a)B+kc(a)C+kd(a)D|| → mink*(*)*(*)
kb(a) - [νb(a)]2 = 0
kc(a) - [νc(a)]2 = 0
kd(a) - [νd(a)]2 = 0

||ka(b)A+B+kc(b)C+kd(b)D|| → mink*(*)*(*)
ka(b) - [νa(b)]2 = 0
kc(b) - [νc(b)]2 = 0
kd(b) - [νd(b)]2 = 0

||ka(c)A+kb(c)B+C+kd(c)D|| → mink*(*)*(*)
ka(c) - [νa(c)]2 = 0
kb(c) - [νb(c)]2 = 0
kd(c) - [νd(c)]2 = 0

||ka(d)A+kb(d)B+kc(d)C+D|| → mink*(*)*(*)
ka(d) - [νa(d)]2 = 0
kb(d) - [νb(d)]2 = 0
kd(d) - [νc(d)]2 = 0
Решив эти задачи получим четыре набора:
(1, kb(a), kc(a), kd(a))
(ka(b), 1, kc(b), kd(b))
(ka(c), kb(c), 1, kd(c))
(ka(d), kb(d), kc(d), 1)
Из которых останется только выбрать наиболее подходящий по критерию минимума нормы линейной комбинации исходных векторов.

Итак, рассмотрим подробнее задачу:

||A+kbB+kcC+kdD|| → mink*(*)*(*)
kb - [νb]2 = 0
kc - [νc]2 = 0
kd - [νd]2 = 0
Будем решать её методом неопределенных множителей Лагранжа.

Составим функцию Лагранжа:

F = ||A+kbB+kcC+kdD||2 + λb(kb - [νb]2) + λc(kc - [νc]2) + λd(kd - [νd]2)
Дифференцируя эту функцию по k*, ν* и λ* и приравнивая соответствующие частные производные к нулю получим систему уравнений:
2 (<A,B> + kb||B||2 + kc<B,C> + kd<B,D>) + λb = 0
2 (<A,C> + kb<B,C> + kc||C||2 + kd<C,D>) + λc = 0
2 (<A,D> + kb<B,D> + kc<C,D> + kd||D||2) + λd = 0
- 2 λb νb = 0
- 2 λc νc = 0
- 2 λd νd = 0
kb - [νb]2 = 0
kc - [νc]2 = 0
kd - [νd]2 = 0
Решить эту систему относительно k*, ν*, λ* довольно легко. Последние шесть уравнений показывают, что либо k*=0, либо соответствующий ему λ* = 0. Таким образом, перебирая поочередно k*=0 и λ* = 0 и решая системы линейных уравнений с тремя неизвестными, полученные из первых трёх уравнений, мы можем составить список всех точек, подозрительных на экстремум.

Чтобы проверить, какие из этих точек действительно являются точками экстремума, придется устанавливать положительную определенность соответствующей матрицы Гессе:

||B||2 <B,C> <B,D> 0 0 0 1 0 0
<B,C> ||C||2 <C,D> 0 0 0 0 1 0
<B,D> <C,D> ||D||2 0 0 0 0 0 1
0 0 0 -2 λb 0 0 -2 νb 0 0
0 0 0 0 -2 λc 0 0 -2 νc 0
0 0 0 0 0 -2 λd 0 0 -2 νd
1 0 0 -2 νb 0 0 0 0 0
0 1 0 0 -2 νc 0 0 0 0
0 0 1 0 0 -2 νd 0 0 0

Таким образом, создание программы для ЭВМ, решающей эту задачу, должно включать следующие этапы:

Литература

[1] http://www.life-prog.ru/1_30419_zadacha-nelineynogo-programmirovaniya-metod-neopredelennih-mnozhiteley-lagranzha.html