Using pinv in optimproblem

2 visualizaciones (últimos 30 días)
Andreas Krause
Andreas Krause el 26 de Abr. de 2021
Comentada: Matt J el 26 de Abr. de 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)

Respuesta aceptada

Walter Roberson
Walter Roberson el 26 de Abr. de 2021
pinv() and matrix division are not supported.
However, for 1 x N variables, then
PINV_D = (D./sum(D.*conj(D))).'
  6 comentarios
Andreas Krause
Andreas Krause el 26 de Abr. de 2021
Thanks for your help. A shame it does not work this way. Off to solvers then...
Matt J
Matt J el 26 de Abr. de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Linear Least Squares en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by