Using pinv in optimproblem
Afficher commentaires plus anciens
I try to solve a constrained optimisation problem, where the variable is a vector. In one of the constraints I use pinv, but this creates an error code as this:
Error using svd
First input must be single or double.
Error in pinv (line 18)
[U,S,V] = svd(A,'econ');
Error in CAPM_2 (line 21)
cons2 = (w'*r*pinv(D)*(ones(n-1,1)-beta(1:(n-1)))==mu_M);
I cannot find a way around this (happy to use other optimisation routines)
My code:
r=0.05; %exogenous parameters
mu_M=0.1;
n=2; %dimension of vector
w=cumsum([1:n])'; %creating a vector of weights
w=w.^2;
w=w/sum(w);
prob = optimproblem('ObjectiveSense','min');
beta = optimvar('beta',n);
prob.Objective = (ones(n,1)-beta)'*(ones(n,1)-beta); %objective function is minimizing the norm over beta with the below constraints
cons1 = (w'*beta==1);
D=eye(n)-beta*w'; %This creates a matrix for the second constraint. It is singular (w'*ones(n,1)=1)
D=D(1:(n-1),:); %Cuts the excess line out
cons2 = (w'*r*pinv(D)*(ones(n-1,1)-beta(1:(n-1)))==mu_M);
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
show(prob)
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Linear Least Squares dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!