void svd_solve_ATA_ATb(float[,] ATA, Vector3 ATb, out Vector3 x
)
{
float[,] V = new float[,] { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } };
Vector3 sigma;
svd_solve_sym(ATA, out sigma, ref V);
// A = UEV^T; U = A / (E*V^T)
float[,] Vinv;
svd_pseudoinverse(out Vinv, sigma, V);
x = Multiply(Vinv, ATb);
}