public static double[][] splineCubicoNatural(Punto[] puntos) {
        Arrays.sort(puntos);     // Se ordenan los puntos para que se respete que Xi+1 >= Xi
        double[] z = gaussTriDiag(puntos);  // Se obtienen los coeficientes z a traves del metodo de gauss para resolver la matriz
        int n = puntos.length-1;  // cantidad de polinomios de grado 3 que a a tener la funcion. Si tiene 3 puntos tiene 2 polinomios porque tiene 2 intervalos
        double[][] spline = new double[4][n];
        for (int i = 0; i < n; i++) {
            double hi = puntos[i+1].getX()-puntos[i].getX();
            spline[3][i] = (z[i+1]-z[i])/(6*(hi));    // Calculo de los di   (coeficiente del término cubico)
            spline[2][i] = z[i]/2;  // Calculo de los ci  (coeficiente del término cuadratico)
            spline[1][i] = -(hi*z[i+1]/6)-hi*z[i]/3 + (puntos[i+1].getY()-puntos[i].getY())/hi;  // Calculo de los bi (coeficiente del término lineal)
            spline[0][i] = puntos[i].getY();  // Calculo de los ai (coeficiente del término independiente)
        }
        return spline;
    }