private double[] gradient(double[] input) { double[] g = Q.TransposeAndDot(input); for (int i = 0; i < d.Length; i++) g[i] += d[i]; return g; }