Здравствуйте, shvonder, Вы писали:
S>Есть набор точек на плоскости. Как лучше минимизировать следующий функционал :
S>
S>SUM ( (Ri*sin(arg(R0)+arg(Ri))-abs(R0))^2 ) -> min
S>Здесь:
S>R0 - искомый вектор_
S>Ri - вектор из начала отчёта до i-ой точки
S>arg - полярный угло, abs - модуль вектора
S>^2 - квдрат
S>
S>Есть возможность выбрать начальное приближение R0
Если еще актуально:
Я так понимаю, что функция вместо Ri все таки abs(Ri)
Будем искать a=-arg(R0) r = abs (R0);
Тогда функция приобретает вид
SUM (abs(Ri)*sin (a-ai)-r)^2
При фиксированном a минимизировать несложно. Ri*sin (a-ai) — это проецирование на прямую, образующую угол b=a+pi/2 c осью абсцис. Минимум суммы квадратов расстояний достигается в центре тяжести. Должно быть r > 0. По этому если центр тяжести получился отрицательным, то минимум достигается в 0. Если это случилось, то при a=a+pi центр тяжести будет положительным и функция уменьшится.
Таким образом нужно нам нужно искать такой угол, при котором сумма отклонений проекций точек от проекции центра тяжести будет минимальной.
Пусть v-центор тяжести. Перенесем начало координат туда. Тогда координаты точек будут vi=Ri-v, а искомая функция
SUM (abs(vi)^2*cos (b-fi)^2)
где fi=arg(vi);
Исследовать на минимум нужно точки, где производная обращается в 0:
SUM (abs(vi)^2*sin (2b-2fi)) = 0;
Пусть ui = вектор, имеющий длину abs(vi)^2 и arg(ui)=2fi, тогда условие равенства нулю производной будет:
проекция центра тяжести векторов ui на прямую, образующую угол 2b+pi/2 с осью абсцисс совпадает с началом координат, или 2b — это аргумент центра тяжести векторов ui