Using pinv in optimproblem
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Andreas Krause
il 26 Apr 2021
Commentato: Matt J
il 26 Apr 2021
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)
0 Commenti
Risposta accettata
Walter Roberson
il 26 Apr 2021
pinv() and matrix division are not supported.
However, for 1 x N variables, then
PINV_D = (D./sum(D.*conj(D))).'
6 Commenti
Matt J
il 26 Apr 2021
For the problem you've shown, there would scarcely be an advantage to using the problem-based framework even if pinv were supported. You don't have any complicated linear constraints or a complicated partitioning of beta into sub-vectors.
Più risposte (0)
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!