Я использую IPOPT в MATLAB, чтобы запустить оптимизацию и я бегу на некоторые вопросы, где он говорит:Очень маленькие численные проблемы с мешковины симметрией и разреженной команды
Hessian must be an n x n sparse, symmetric and lower triangular matrix
with row indices in increasing order, where n is the number of variables.
После глядя на мою матрицу Гессе, я нашел что несимметричные элементы его жалующиеся очень близки, вот пример:
H(k,j) = 2.956404205984938
H(j,k) = 2.956404205984939
Очевидно, что эти элементы достаточно близки, и есть некоторые численные вопросы округления или что-то подобные. Кроме того, когда я вызываю MATLABs асимметричную функцию с H в качестве входа, я получаю false. Есть ли способ забыть об этих очень небольших различиях в симметрии?
Чуть подробнее:
Я использую оптимизированный matlabFunction на самом деле вычислить всю Мешковины (H), то я сделал некоторые постобработки, прежде чем передать его IPOPT:
H = tril(H);
H = sparse(H);
tril генерирует нижнюю треугольную матрицу, поэтому эти разности цифр не должны вступать в игру. Таким образом, проблема может заключаться в том, что она жалуется, что разреженная команда возвращает более высокие индексы столбцов и не увеличивает индексы строк. Есть ли способ изменить это, чтобы он возвращал разреженную матрицу в возрастающие индексы строк?