fmincon nonlinear inequality constraint

조회 수: 4 (최근 30일)
hey yo
hey yo 2022년 8월 9일
댓글: hey yo 2022년 8월 9일
Hello,
I do a maximum likelihood estimation using fmincon. My code requires doing a Choleski decomposition to the matrix: A=[betas(7) betas(9); betas(9) betas(8)]. Choleski decomposition requires the matrix A to be positive definite. Because A is a 2x2 matrix, positive definiteness require two conditions:
  1. beta(7)>0
  2. beta(7)*beta(8)-beta(9)^2>0
I set the lowerbound of beta(7) to be 0. To satisfy the second nonlinear inequality constraint, I wrote a function
function [c,ceq]=mycons(betas)
ceq=[];
c=-(betas(7)*betas(8)-betas(9)^2);
end
Then I run my fmincon function
[b_out,fval] =fmincon(@(betas)mainlf3(betas,numobs, p),betas,[],[],[],[], lb, ub,@(betas)mycons(betas), options1);
However, the code does not satisfy the nonlinear constraint. It gives me the error:
Error using chol
Matrix must be positive definite.
Can anyone see what I'm doing wrong? Thank you.

채택된 답변

Matt J
Matt J 2022년 8월 9일
편집: Matt J 2022년 8월 9일
The nonlinear constraints are not obeyed at all iterations. At iterations where they are not obeyed, chol() will give you an error for obvious reasons.
I suggest you parametrize directly in terms of the Cholesky decomposition., i.e., Let L be an unknown matrix and set the constraint,
ceq=L*L'-[betas(7) betas(9); betas(9) betas(8)];
  댓글 수: 3
Matt J
Matt J 2022년 8월 9일
Yes, L would be composed of unknowns in addition to beta.
L=[L1,0;
L2,L3];
hey yo
hey yo 2022년 8월 9일
Okay, thank you! This is excellent!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Torsten
Torsten 2022년 8월 9일
It is not guaranteed that the "test parameters" betas satisfy the constraints in each iteration of the optimization process.
So you should first check for positive definiteness before calling Chol. If not, enlarge the diagonal elements artificially by a certain amount.
  댓글 수: 1
hey yo
hey yo 2022년 8월 9일
Thank you! I will try to do that artificial adjustment as you suggested.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by