0

Я хочу определить, является ли заданная матрица 3x3 положительно-полуопределенной или нет. Для этого, я пишу следующую SDP в YALMIPВыводы YALMIP «Неизбежно» для простой, выполнимой SDP

v=0.2; 
a=sdpvar(1); 
b=sdpvar(1); 
M=[1 a -v/4 ; b 1 0 ; -v/4 0 0.25]; 
x=sdpvar(1); 
optimize([M+x*eye(3)>=0],x,sdpsettings('solver','sedumi')) 

Эта программа дает мне ошибку «Dual неосуществимого, первобытное направление улучшения нашли». Это происходит при любом значении V в интервале (0,1].

Учитывая, что эта проблема послушная, я диагонализуюсь матрица прямого получения, что три собственных значения три корня многочлен следующего

16*t^3 - 36*t^2 + (24 - 16*a*b - v^2)*t + (-4 + 4*a*b + v^2) 

Вычисляя значения трех корней численно, я вижу, что три из них положительны для знака (a) = sign (b) (за исключением небольшой области в окрестности a, b = + - 1), для любого значение v. Следовательно, SDP должен работать без проблем и выводить отрицательное значение x без дополнительных осложнений.

Чтобы сделать вещи более интересными нг, я побежал один и тот же код со следующей матрицей

M=[1 a v/4 ; b 1 0 ; v/4 0 0.25]; 

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

Мне действительно интересно узнать природу этой проблемы, любая помощь будет действительно оценена.

EDIT: Я также опробовал решение SDPT3, и результаты очень похожи. На самом деле, программа проходит гладко для случая + V, но когда я ставлю знак минус, я получаю следующую ошибку

'Unknown problem in solver (Turn on 'debug' in sdpsettings) (Error using & …' 

Кроме того, когда я добавить некоторые ограничения на переменные, т.е., я бегу следующие команда

optimize([total+w*eye(3)>=0,-1<=a<=1,-1<=b<=1],w,sdpsettings('solver','sdpt3')) 

Затем ошибка превращается в ошибку «Невозможная проблема».

+0

Без анализа вашего кода/проблемы: вы пробовали использовать некоторые из доступных решателей [список] (http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Solvers.Solvers)? SDPT3 должен быть прост в установке. Не имея большого опыта работы с SDP-решателями, я все еще знаю, что они менее устойчивы, чем классические линейные или квадратичные решатели конуса. – sascha

+0

Я пробовал SDPT3, с аналогичными результатами (работает без проблем для + v, «Неизвестная проблема в решателе» для -v). Я обновляю вопрос, чтобы включить эту информацию. – Alex

ответ

1

Поздний ответ, но в любом случае. Матрица, которую вы указали, не является симметричной. Семиконечное программирование посвящено оптимизации по множеству симметричных положительных полуопределенных матриц.

Когда вы определяете это несимметричное ограничение матрицы в YALMIP, оно просто интерпретируется как набор из 9 линейных элементарных ограничений, а для этой линейной программы оптимальный x неограничен.

+0

Благодарим вас за ответ. Действительно, я (wronlgy) предположил, что YALMIP будет налагать ограничения симметрии в матрице, чего не было. Когда эти ограничения налагаются вручную (или используемая матрица симметрична), программа работает без проблем. – Alex