@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /lsquares.texi/1.2/Sat Jun  2 00:13:24 2007//
@menu
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para lsquares::
@end menu

@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para lsquares,  , lsquares, lsquares
@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para lsquares


@defvr {Vari@'{a}vel global} DETCOEF

Essa vari@'{a}vel @'{e} usada pelas fun@value{cedilha}@~{o}es @code{lsquares} e @code{plsquares} para armazenar o Coeficiente de Determina@value{cedilha}@~{a}o que mede o melhor do ajuste. Esse intervalo de 0 (nenhuma correla@value{cedilha}@~{a}o) a 1 (correla@value{cedilha}@~{a}o exata). 

Quando @code{plsquares} for chamada com uma lista de vari@'{a}veis independentes, @var{DETCOEF} @'{e} escolhida para uma lista de Coeficientes de Determina@value{cedilha}@~{a}o. Veja @code{plsquares} para detalhes.

Veja tamb@'{e}m @code{lsquares}.
@end defvr


@deffn {Fun@value{cedilha}@~{a}o} lsquares (@var{Mat},@var{VarList},@var{equa@value{cedilha}@~{a}o},@var{ParamList})
@deffnx {Fun@value{cedilha}@~{a}o} lsquares (@var{Mat},@var{VarList},@var{equa@value{cedilha}@~{a}o},@var{ParamList},@var{EsperadosList})
Ajuste m@'{u}ltiplo de equa@value{cedilha}@~{o}es n@~{a}o lineares de uma tabela de dados pelo
m@'{e}todo dos "m@'{i}nimos quadrados". @var{Mat} @'{e} uma matriz contendo os dados,
@var{VarList} @'{e} uma lista de nomes de vari@'{a}veis (um para cada coluna de @var{Mat}),
@var{equa@value{cedilha}@~{a}o} @'{e} a equa@value{cedilha}@~{a}o a ser ajustada (essa equa@value{cedilha}@~{a}o deve estar na forma:
@code{depvar=f(indepvari,..., paramj,...)}, @code{g(depvar)=f(indepvari,..., paramj,...)} 
ou na forma @code{g(depvar, paramk,...)=f(indepvari,..., paramj,...)}), @var{ParamList} @'{e} a
lista de par@^{a}metros para obter, e @var{EsperadosList} @'{e} uma lista opcional de aproxima@value{cedilha}@~{o}es 
iniciais para os par@^{a}metros; quando esse @'{u}ltimo argumento estiver presente, @code{mnewton} @'{e} usado
em lugar de @code{solve} com o objetivo de pegar os par@^{a}metros.

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

Se poss@'{i}vel, a equa@value{cedilha}@~{a}o ajustada @'{e} retornada. Se existir mais
de uma solu@value{cedilha}@~{a}o, uma lista de equa@value{cedilha}@~{o}es @'{e} retornada.
O Coeficiente de Determina@value{cedilha}@~{a}o @'{e} mostrado para informar sobre
o melhor do ajuste, de 0 (nenhuma correla@value{cedilha}@~{a}o) a 1 (correla@value{cedilha}@~{a}o exata).
Esse valor @'{e} tamb@'{e}m armazenada na vri@'{a}vel global @var{DETCOEF}.

Exemplos usando @code{solve}:
@example
(%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
@end example


Exemplos usando @code{mnewton}:
@example
(%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
@end example

Para usar essa fun@value{cedilha}@~{a}o escreva primeiro @code{load("lsquares")}. Veja tamb@'{e}m @code{DETCOEF} e @code{mnewton}.
@end deffn


@deffn {Fun@value{cedilha}@~{a}o} plsquares (@var{Mat},@var{VarList},@var{depvars})
@deffnx {Fun@value{cedilha}@~{a}o} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon})
@deffnx {Fun@value{cedilha}@~{a}o} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon},@var{maxdegree})
Ajuste de polin@^{o}mios de v@'{a}rias vari@'{a}veis de uma tabela de dados pelo m@'{e}todo dos
"m@'{i}nimos quadrados". @var{Mat} @'{e} uma matriz contendo os dados, @var{VarList} @'{e} uma lista de nomes de vari@'{a}veis (um nome para cada coluna de Mat, mas use "-" em lugar de nomes de vari@'{a}veis para colunas de Mat), @var{depvars} @'{e} o
nome de uma vari@'{a}vel dependente ou uma
lista com um ou mais nomes de vari@'{a}veis dependentes (os quais nomes podem estar em @var{VarList}), @var{maxexpon} @'{e} o expoente m@'{a}ximo opcional para cada vari@'{a}vel independente (1 por padr@~{a}o), e @var{maxdegree} @'{e} o argumento opcional
grau m@'{a}ximo do polin@^{o}mio (@var{maxexpon} por padr@~{a}o); note que a soma dos expoentes de cada termo deve ser menor ou igual a @var{maxdegree}, e se @code{maxdgree = 0} ent@~{a}o nenhum limite @'{e} aplicado.

Se @var{depvars} @'{e} o nome de uma vari@'{a}vel dependente (fora de uma lista), @code{plsquares} retorna o polin@^{o}mio ajustado. Se @var{depvars} for uma lista de uma ou mais vari@'{a}veis dependentes, @code{plsquares} retorna uma lista com
o(s) polin@^{o}mio(s) ajustado(s). Os Coeficientes de Determina@value{cedilha}@~{a}o s@~{a}o mostrados com o objetivo de informar sobre o melhor do ajuste, cujo intervalo vai de 0 (nenhuma correla@value{cedilha}@~{a}o) a 1 (correla@value{cedilha}@~{a}o exata). Esses valores s@~{a}o tamb@'{e}m s@~{a}o
tamb@'{e}m armazenados na vari@'{a}vel
global @var{DETCOEF} (uma lista se @var{depvars} for tamb@'{e}m uma lista).


Um simples exemplo de ajuste linear de v@'{a}rias vari@'{a}veis:
@example
(%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
@end example

O mesmo exemplo sem restri@value{cedilha}@~{o}es de gra:
@example
(%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
@end example

Quantas diagonais possi um pol@'{i}gono de N lados tem? What polynomial degree should be used?
@example
(%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@'{i}gono de 9 lados - o ene@'{a}gono */
(%o5)                 diagonals = 27
@end example

Quantos caminhos fazemos para colocar  duas ra@'{i}nhas sem que elas estejam amea@value{cedilha}adas em um tabuleiro de xadrez n x n ?
@example
(%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); /* Tesando para um tabuleiro de (8 x 8) */
(%o7)                posicoes = 1288
@end example

Em exemplo com seis vari@'{a}veis dependentes:
@example
(%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]
@end example

Para usar essa fun@value{cedilha}@~{a}o escreva primeiramente @code{load("lsquares")}.
@end deffn

