¿Has probado un algoritmo newton simple (con la restricción añadida al algo)?
Sea $(\alpha_{k})$ definirse como: $\alpha_k=1/k^2$
Inicialización :
$x^0=[0,...,0]$
Compute $H=(A^* A)^{-1}$
Bucle para $k$ en $1:m$
$x^k=x^{k-1}-\alpha_k H A^*(Ax^{k-1}-b)$
$x^{k}=g*x^{k}/\|x_2^k\|$
fin del bucle for
Evidentemente, hay formas más adaptables de elegir $\alpha_k$ ... pero quizá no necesites tanta sofisticación para resolver un problema de minimización de normas. Si $A^* A$ tiene valores propios muy pequeños, puede utilizar $H_k=(A^* A+\epsilon_k)^{-1}$ en lugar de $H$ ( $\epsilon_k$ decreciente hasta cero)...
Nótese que este tipo de código es relativamente general cuando se quiere encontrar el punto de silla de un lagrangiano y se sabe cómo encontrar los máximos con respecto a los multiplicadores de Lagrange (en el espacio dual) (segundo paso del bucle) pero se necesita un descenso de gradiente (o aquí algo de Newton) para encontrar los mínimos en el espacio principal.
Aquí está el código R correspondiente:
A=t(array(1:1000,c(10,100)))
m=100; b=1:10; g=3; l=5; p=10;
alpha=1:m
alpha=1/alpha^2
x=array(0,c(m,p))
H=t(A)%*%A
svdH=svd(H)
H=svdH$v%*%diag(1/svdH$d)%*%t(svdH$u)
for (k in 2:m)
{
x[k,]=x[k-1,]-alpha[k]*H%*%(t(A)%*%(A%*%x[k-1,]-b))
x[k,]=g*x[k,]/sqrt(sum(x[k,(l+1):p]^2))
print(sum((A%*%x[k,]-b)^2))
}