Funciones y variables para lsquares
===================================

 -- Variable global: DETCOEF

     Esta variable es utilizada por las funciones lsquares y plsquares para almacenar el coeficiente de determinación que mide la bondad del ajuste, el cual varía entre 0 (ausencia de correlación) y 1 (dependencia exacta).

     Cuando se llama a plsquares con una lista de variables dependientes, DETCOEF almacena una lista de coeficientes de determinación. Véase plsquares para más detalles.

     Véase también lsquares.

 -- Función: lsquares (MAT,VARLIST,EQUATION,PARAMLIST)
 -- Función: lsquares (MAT,VARLIST,EQUATION,PARAMLIST,GUESSLIST)
     Ajuste de una función multivariante a una tabla de datos por el método de los mínimos cuadrados.  MAT es la matriz con los datos empíricos, VARLIST es la lista con los nombres de las variables (una por cada columna de MAT), EQUATION es la función a ajustar, la cual debe estar expresada en cualquiera de las formas depvar=f(indepvari,..., paramj,...), g(depvar)=f(indepvari,..., paramj,...) o g(depvar, paramk,...)=f(indepvari,..., paramj,...)), PARAMLIST es la lista de los parámetros a estimar y GUESSLIST es una lista opcional de aproximaciones iniciales de los parámetros; cuando este último argumento está presente, se utiliza mnewton en lugar de solve a fin de obtener los parámetros.

     La función puede ser no lineal con respecto a las variables, tanto independientes como dependiente. Al objeto de utilizar solve() las funciones deben ser lineales o polinómicas respecto de los parámetros. Funciones como y=a*b^x+c pueden ajustarse para [a,b,c] con solve si los valores x son enteros positivos pequeños y hay pocos datos (véase el ejemplo en lsquares.dem). La función mnewton permite ajustar una función no lineal respecto de los parámetros, pero deberá suministrársele un conjunto de buenas aproximaciones iniciales.

     Si es posible se retornará la función ajustada. En caso de existir más de una solución, se devolverá una lista de funciones. El coeficiente de determinación se mostrará también a fin de aportar información sobre la bondad del ajuste, el cual varía entre 0 (ausencia de correlación) y 1 (ajuste exacto); este valor se almacena también en la variable global DETCOEF.

     Ejemplos utilizando solve:

          (%i1) load("lsquares")$

          (%i2) lsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
                         [x,y,z], z=a*x*y+b*x+c*y+d, [a,b,c,d]);
                Determination Coefficient = 1.0
                              x y + 23 y - 29 x - 19
          (%o2)           z = ----------------------
                                        6
          (%i3) lsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
                         [n,p], p=a4*n^4+a3*n^3+a2*n^2+a1*n+a0,
                   [a0,a1,a2,a3,a4]);
                Determination Coefficient = 1.0
                               4       3      2
                            3 n  - 10 n  + 9 n  - 2 n
          (%o3)         p = -------------------------
                                        6
          (%i4) lsquares(matrix([1,7],[2,13],[3,25]),
                         [x,y], (y+c)^2=a*x+b, [a,b,c]);
                Determination Coefficient = 1.0
          (%o4) [y = 28 - sqrt(657 - 216 x),
                                          y = sqrt(657 - 216 x) + 28]
          (%i5) lsquares(matrix([1,7],[2,13],[3,25],[4,49]),
                         [x,y], y=a*b^x+c, [a,b,c]);
                Determination Coefficient = 1.0
                                        x
          (%o5)                  y = 3 2  + 1

     Ejemplos utilizando mnewton:

          (%i6) load("lsquares")$

          (%i7) lsquares(matrix([1.1,7.1],[2.1,13.1],[3.1,25.1],[4.1,49.1]),
                         [x,y], y=a*b^x+c, [a,b,c], [5,5,5]);
                                                       x
          (%o7) y = 2.799098974610482 1.999999999999991
                                                  + 1.099999999999874
          (%i8) lsquares(matrix([1.1,4.1],[4.1,7.1],[9.1,10.1],[16.1,13.1]),
                         [x,y], y=a*x^b+c, [a,b,c], [4,1,2]);
                                       .4878659755898127
          (%o8) y = 3.177315891123101 x
                                                  + .7723843491402264
          (%i9) lsquares(matrix([0,2,4],[3,3,5],[8,6,6]),
                        [m,n,y], y=(A*m+B*n)^(1/3)+C, [A,B,C], [3,3,3]);
                                                               1/3
          (%o9) y = (3.999999999999862 n + 4.999999999999359 m)
                                                   + 2.00000000000012

     Antes de hacer uso de esta función ejecútese  load("lsquares"). Véanse también DETCOEF y mnewton.

 -- Función: plsquares (MAT,VARLIST,DEPVARS)
 -- Función: plsquares (MAT,VARLIST,DEPVARS,MAXEXPON)
 -- Función: plsquares (MAT,VARLIST,DEPVARS,MAXEXPON,MAXDEGREE)
     Ajuste de una función polinómica multivariante a una tabla de datos por el método de los mínimos cuadrados. MAT es la matriz con los datos empíricos, VARLIST es la lista con los nombres de las variables (una por cada columna de MAT, pero úsese - en lugar de los nombres de variables para ignorar las columnas de MAT), DEPVARS es el nombre de la variable dependiente o una lista con uno o más nombres de variables dependientes (cuyos nombres deben estar también en VARLIST), MAXEXPON es un argumento opcional para indicar el máximo exponente para cada una de las variables independientes (1 por defecto) y  MAXDEGREE es otro argumento opcional para el grado del polinomio (MAXEXPON por defecto); nótese que la suma de exponentes de cada término debe ser igual o menor que MAXDEGREE. Si maxdgree = 0 entonces no se aplicará ningún límite.

     Si DEPVARS es el nombre de una variable dependiente (no en una lista), plsquares devuelve el polinomio ajustado. Si DEPVARS es una lista de una o más variables dependientes, plsquares devuelve una lista con los polinomios ajustados. Los coeficientes de determinación se muestran en su orden correspondiente para informar sobre la bondad del ajuste. Estos valores se almacenan también en la variable global DETCOEF; en un formato de lista si DEPVARS es a su vez una lista.

     Un ejemplo sencillo de ajuste lineal multivariante:

          (%i1) load("plsquares")$

          (%i2) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
                          [x,y,z],z);
               Determination Coefficient for z = .9897039897039897
                                 11 y - 9 x - 14
          (%o2)              z = ---------------
                                        3

     El mismo ejemplo sin restricciones en el grado:

          (%i3) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
                          [x,y,z],z,1,0);
               Determination Coefficient for z = 1.0
                              x y + 23 y - 29 x - 19
          (%o3)           z = ----------------------
                                        6

     Cálculo del número de diagonales de un polígono de N lados

          (%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
                          [N,diagonals],diagonals,5);
               Determination Coefficient for diagonals = 1.0
                                          2
                                         N  - 3 N
          (%o4)              diagonals = --------
                                            2
          (%i5) ev(%, N=9);   /* Testing for a 9 sides polygon */
          (%o5)                 diagonals = 27

     Cálculo del número de formas de colocar dos reinas en un tablero n x n de manera que no se amenacen.

          (%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
                          [n,positions],[positions],4);
               Determination Coefficient for [positions] = [1.0]
                                   4       3      2
                                3 n  - 10 n  + 9 n  - 2 n
          (%o6)    [positions = -------------------------]
                                            6
          (%i7) ev(%[1], n=8); /* Testing for a (8 x 8) chessboard */
          (%o7)                positions = 1288

     Un ejemplo con seis variables dependientes:

          (%i8) mtrx:matrix([0,0,0,0,0,1,1,1],[0,1,0,1,1,1,0,0],
                            [1,0,0,1,1,1,0,0],[1,1,1,1,0,0,0,1])$
          (%i8) plsquares(mtrx,[a,b,_And,_Or,_Xor,_Nand,_Nor,_Nxor],
                               [_And,_Or,_Xor,_Nand,_Nor,_Nxor],1,0);
                Determination Coefficient for
          [_And, _Or, _Xor, _Nand, _Nor, _Nxor] =
          [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
          (%o2) [_And = a b, _Or = - a b + b + a,
          _Xor = - 2 a b + b + a, _Nand = 1 - a b,
          _Nor = a b - b - a + 1, _Nxor = 2 a b - b - a + 1]

     Antes de hacer uso de esta función ejecútese  load("plsquares").