Я пытаюсь преобразовать Hessian из matlab handle
в структуру Worhp. Идея заключается в использовании случайного ввода для поиска ненулевого элемента в Hessian, что-то вроде:
% Hessian
H = @(x)[x(1) x(2); x(2) 0];
% evaluate for some random points
nr = 3;
S = zeros(2,2);
for i=1:nr
S = S + full(H(rand(2,1)) ~=0);
end
% get sparsity
S = S ~=0;
% convert everything to vectors for WORHP
[ HMrow, HMcol ] = find(S);
posCombined = find(S);
hess2vec(rand(2,1),posCombined,H)
function hVec = hess2vec(x, mu, scale,posCombined,Hess)
H = Hess(x,mu, scale);
hVec = H(posCombined);
end
И hess2Vec
назначается wCallback.hm
в интерфейсе matlab.
Это работает хорошо с данным примером, т.е. примером из Maltab-интерфейса , чей гессиан представляет собой матрицу 2x2
Однако это не удалось с ошибкой нашего собственного проекта:
Error using worhp
WorhpIPLeqInit: ERROR IN LEQSOL: symbolic step! flag =
-1
Error in worhp_interface (line 82)
[xFinal,lambdaFinal,muFinal,solverstatus] =
worhp(wData, wCallback);
Может, кто-нибудь знает, что это значит? В чем может быть причина?