public static double[] polinomioGradoNCM(Punto[] puntos, int grado) {
        // Armo dos arreglos con los xi y los yi separados para despues usarlos en el producto escalar
        double[] xi = new double[puntos.length];
        double[] yi = new double[puntos.length];
        for (int i = 0; i < puntos.length; i++) {
            xi[i] = puntos[i].getX();
            yi[i] = puntos[i].getY();
        }
        // Armo la base del polinomio. Un polinomio de grado 2 tiene 3 elementos en la base. Uno de grado g tiene g+1 elementos
        Funcion[] base = new Funcion[grado + 1];
        for (int i = 0; i < base.length; i++) {
            base[i] = new Polinomio(i);      // Creo polinomio de grado i con el coeficiente ai = 1 y los otros en 0. Ej: grado 0 -> P(x) = 1; grado 1 -> P(x) = x; grado 2 -> P(x) =  x^2
        }
        // calculo las constantes que multiplican a cada alfa a partir de las ecuaciones normales y armo la matriz del primera lado de las igualdades
        double[][] constantes = new double[grado + 1][grado + 1];
        for (int j = 0; j <= grado; j++) {
            for (int i = 0; i <= grado; i++) {
                constantes[j][i] = productoEscalar(base[i], xi, base[j], xi);
            }
        }
        // calculo el otro lado de la igualdad de las ecuaciones normales para luego despejar a traves de gauss
        double[] igulados = new double[grado + 1];
        for (int i = 0; i < igulados.length; i++) {
            igulados[i] = productoEscalar(base[1], yi, base[i], xi);    // Uso base[1] ya que es la funcion f(x) = x
        }
        // despejo a traves de gauss
        return gauss(constantes, igulados);
    }