Using pinv in optimproblem
Show older comments
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)
Accepted Answer
More Answers (0)
Categories
Find more on Linear Least Squares in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!