fmincon nonlinear inequality constraint
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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:
- beta(7)>0
 - 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.
0 Commenti
Risposta accettata
  Matt J
      
      
 il 9 Ago 2022
        
      Modificato: Matt J
      
      
 il 9 Ago 2022
  
      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 Commenti
  Matt J
      
      
 il 9 Ago 2022
				Yes, L would be composed of unknowns in addition to beta.
L=[L1,0;
   L2,L3];
Più risposte (1)
  Torsten
      
      
 il 9 Ago 2022
        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.
Vedere anche
Categorie
				Scopri di più su Linear Least Squares in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!