Минимальный объем вмещающего эллипсоида в MATLAB

У меня есть следующий набор данных. Цель состоит в том, чтобы минимизировать объем эллипсоида, который охватывает эти точки, используя CVX. Я сделал это, используя следующий код:

cvx_begin
    variable A(n,n) symmetric
    variable b(n)
    maximize( det_rootn( A ) )
    subject to
        norms( A * x + b * ones( 1, m ), 2 ) <= 1;


cvx_end


clf
noangles = 200;
angles   = linspace( 0, 2 * pi, noangles );
ellipse  = A \ [ cos(angles) - b(1) ; sin(angles) - b(2) ];
plot( x(1,:), x(2,:), 'ro', ellipse(1,:), ellipse(2,:), 'b-' );
axis off

Но как я могу минимизировать объем эллипсоида, вмещающий пять баллов из заданных 20? Не просто случайные 5 баллов, а те, которые привели бы к эллипсису как можно меньше?

Моя идея состояла в том, чтобы рассчитать расстояние между центром эллипсоида до самой дальней точки и затем удалить его из набора данных. Затем восстановите новый многоточие и повторите. Шаг за шагом сузьте его до последних пяти пунктов.

Может кто-нибудь помочь с кодом или просто дать подсказку, как это можно сделать более плавно?

Спасибо!

0 ответов

Другие вопросы по тегам