[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

# 56. lsquares

/lsquares.texi/1.1/Mon Feb 27 22:09:17 2006//

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 56.1 Definições para lsquares

Variável global: DETCOEF

  Essa variável é usada pelas funções `lsquares` e `plsquares` para armazenar o Coeficiente de Determinação que mede o melhor ajuste. Esse intervalo vai de 0 (nenhuma correlação) a 1 (correlação exacta).

  Quando `plsquares` for chamada com uma lista de variáveis independentes, DETCOEF é escolhida para uma lista de Coeficientes de Determinação. Veja `plsquares` para detalhes.

  Veja também `lsquares`.

Função: lsquares (Mat,VarList,equação,ParamList)
Função: lsquares (Mat,VarList,equação,ParamList,EsperadosList)

  Ajuste múltiplo de equações não lineares de uma tabela de dados pelo método dos "mínimos quadrados". Mat é uma matriz contendo os dados, VarList é uma lista de nomes de variáveis (um para cada coluna de Mat), equação é a equação a ser ajustada (essa equação deve estar na forma: `depvar=f(indepvari,..., paramj,...)`, `g(depvar)=f(indepvari,..., paramj,...)` ou na forma `g(depvar, paramk,...)=f(indepvari,..., paramj,...)`), ParamList é a lista de parâmetros para obter, e EsperadosList é uma lista opcional de aproximações iniciais para os parâmetros; quando esse último argumento estiver presente, `mnewton` é usado em lugar de `solve` com o objectivo de pegar os parâmetros.

  A equação pode ser completamente não linear com relação às variáveis independentes e à variável dependente. Com o objectivo de usar `solve()`, as equações devem ser lineares ou polinomiais com relação aos parâmetros. Equações como `y=a*b^x+c` podem ser ajustadas para `[a,b,c]` com `solve` se os valores de `x` forem inteiros positivos pequenos e existirem poucos dados (veja o exemplo em lsquares.dem). `mnewton` permite ajustar uma equação não linear com relação aos parâmetros, mas um bom conjunto de aproximações iniciais deve ser fornecido.

  Se possível, a equação ajustada é retornada. Se existir mais de uma solução, uma lista de equações é retornada. O Coeficiente de Determinação é mostrado para informar sobre o melhor ajuste, de 0 (nenhuma correlação) a 1 (correlação exacta). Esse valor é também armazenado na variável global DETCOEF.

  Exemplos usando `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

  Exemplos usando `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

  Para usar essa função escreva primeiro `load("lsquares")`. Veja também `DETCOEF` e `mnewton`.

Função: plsquares (Mat,VarList,depvars)
Função: plsquares (Mat,VarList,depvars,maxexpon)
Função: plsquares (Mat,VarList,depvars,maxexpon,maxdegree)

  Ajuste de polinómios de várias variáveis de uma tabela de dados pelo método dos "mínimos quadrados". Mat é uma matriz contendo os dados, VarList é uma lista de nomes de variáveis (um nome para cada coluna de Mat, mas use "-" em lugar de nomes de variáveis para colunas de Mat), depvars é o nome de uma variável dependente ou uma lista com um ou mais nomes de variáveis dependentes (cujos nomes podem estar em VarList), maxexpon é o expoente máximo opcional para cada variável independente (1 por padrão), e maxdegree é o argumento opcional grau máximo do polinómio (maxexpon por padrão); note que a soma dos expoentes de cada termo deve ser menor ou igual a maxdegree, e se `maxdgree = 0` então nenhum limite é aplicado.

  Se depvars é o nome de uma variável dependente (fora de uma lista), `plsquares` retorna o polinómio ajustado. Se depvars for uma lista de uma ou mais variáveis dependentes, `plsquares` retorna uma lista com o(s) polinómio(s) ajustado(s). Os Coeficientes de Determinação são mostrados com o objectivo de informar sobre o melhor do ajuste, cujo intervalo vai de 0 (nenhuma correlação) a 1 (correlação exacta). Esses valores são também armazenados na variável global DETCOEF (uma lista se depvars for tambn'uma lista).

  Um simples exemplo de ajuste linear de várias variáveis:

      (%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

  O mesmo exemplo sem restrições de grau:

      (%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

  Quantas diagonais possui um polígono de N lados? Que grau polinomial deverá ser usado?

      (%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
                      [N,diagonais],diagonais,5);
           Determination Coefficient for diagonais = 1.0
                                      2
                                     N  - 3 N
      (%o4)              diagonais = --------
                                        2
      (%i5) ev(%, N=9);   /* Testando para um polígono de 9 lados - o eneágono */
      (%o5)                 diagonals = 27

  De quantas formas dispomos para colocar duas raínhas sem que elas estejam ameaçadas num tabuleiro de xadrez n x n ?

      (%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
                      [n,posicoes],[posicoes],4);
           Determination Coefficient for [posicoes] = [1.0]
                               4       3      2
                            3 n  - 10 n  + 9 n  - 2 n
      (%o6)    [posicoes  = -------------------------]
                                        6
      (%i7) ev(%[1], n=8); /* Testando para um tabuleiro de (8 x 8) */
      (%o7)                posicoes = 1288

  Um exemplo com seis variáveis dependentes:

      (%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]

  Para usar essa função escreva primeiramente `load("lsquares")`.

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

This document was generated by Viktor T. Toth on Setembro, 27 2018 using texi2html 1.76.