Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / pt / lsquares.texi
blob25dcb748617c3ed8dfd14f1de79423b6b604482f
1 /lsquares.texi/1.1/Mon Feb 27 22:09:17 2006//
2 @c /lsquares.texi/1.1/Mon Feb 27 22:09:17 2006//
3 @menu
4 * Definições para lsquares::
5 @end menu
7 @node Definições para lsquares,  , lsquares, lsquares
8 @section Definições para lsquares
11 @defvr {Variável global} DETCOEF
13 Essa variável é usada pelas funções
14 @code{lsquares} e @code{plsquares} para armazenar o Coeficiente de
15 Determinação que mede o melhor ajuste. Esse intervalo
16 vai de 0 (nenhuma correlação) a 1 (correlação
17 exacta). 
19 Quando @code{plsquares} for chamada com uma lista de variáveis independentes, @var{DETCOEF} é escolhida para uma lista de Coeficientes de Determinação. Veja @code{plsquares} para detalhes.
21 Veja também @code{lsquares}.
22 @end defvr
25 @deffn {Função} lsquares (@var{Mat},@var{VarList},@var{equação},@var{ParamList})
26 @deffnx {Função} lsquares (@var{Mat},@var{VarList},@var{equação},@var{ParamList},@var{EsperadosList})
27 Ajuste múltiplo de equações não lineares de uma tabela de dados pelo
28 método dos "mínimos quadrados". @var{Mat} é uma matriz contendo os dados,
29 @var{VarList} é uma lista de nomes de variáveis (um para cada coluna de @var{Mat}),
30 @var{equação} é a equação a ser ajustada (essa equação deve estar na forma:
31 @code{depvar=f(indepvari,..., paramj,...)}, @code{g(depvar)=f(indepvari,..., paramj,...)} 
32 ou na forma @code{g(depvar, paramk,...)=f(indepvari,..., paramj,...)}), @var{ParamList} é a
33 lista de parâmetros para obter, e @var{EsperadosList} é uma lista opcional de aproximações 
34 iniciais para os parâmetros; quando esse último argumento estiver presente, @code{mnewton} é usado
35 em lugar de @code{solve} com o objectivo de pegar os parâmetros.
37 A equação pode ser completamente não linear com relação às variáveis
38 independentes e à variável dependente.
39 Com o objectivo de usar @code{solve()}, as equações devem ser lineares ou polinomiais com
40 relação aos parâmetros. Equações como @code{y=a*b^x+c} podem ser ajustadas para
41 @code{[a,b,c]} com @code{solve} se os valores de @code{x} forem inteiros positivos pequenos e
42 existirem poucos dados (veja o exemplo em lsquares.dem).
43 @code{mnewton} permite ajustar uma equação não linear com relação aos
44 parâmetros, mas um bom conjunto de aproximações iniciais deve ser fornecido.
46 Se possível, a equação ajustada é retornada. Se existir mais
47 de uma solução, uma lista de equações é retornada.
48 O Coeficiente de Determinação é mostrado para informar sobre
49 o melhor ajuste, de 0 (nenhuma correlação) a 1 (correlação exacta).
50 Esse valor é também armazenado na variável global @var{DETCOEF}.
52 Exemplos usando @code{solve}:
53 @example
54 (%i1) load("lsquares")$
56 (%i2) lsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
57                [x,y,z], z=a*x*y+b*x+c*y+d, [a,b,c,d]);
58       Determination Coefficient = 1.0
59                     x y + 23 y - 29 x - 19
60 (%o2)           z = ----------------------
61                               6
62 (%i3) lsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
63                [n,p], p=a4*n^4+a3*n^3+a2*n^2+a1*n+a0,
64          [a0,a1,a2,a3,a4]);
65       Determination Coefficient = 1.0
66                      4       3      2
67                   3 n  - 10 n  + 9 n  - 2 n
68 (%o3)         p = -------------------------
69                               6
70 (%i4) lsquares(matrix([1,7],[2,13],[3,25]), 
71                [x,y], (y+c)^2=a*x+b, [a,b,c]);
72       Determination Coefficient = 1.0
73 (%o4) [y = 28 - sqrt(657 - 216 x),
74                                 y = sqrt(657 - 216 x) + 28]
75 (%i5) lsquares(matrix([1,7],[2,13],[3,25],[4,49]),
76                [x,y], y=a*b^x+c, [a,b,c]);
77       Determination Coefficient = 1.0
78                               x
79 (%o5)                  y = 3 2  + 1
80 @end example
83 Exemplos usando @code{mnewton}:
84 @example
85 (%i6) load("lsquares")$
87 (%i7) lsquares(matrix([1.1,7.1],[2.1,13.1],[3.1,25.1],[4.1,49.1]),
88                [x,y], y=a*b^x+c, [a,b,c], [5,5,5]);
89                                              x
90 (%o7) y = 2.799098974610482 1.999999999999991
91                                         + 1.099999999999874
92 (%i8) lsquares(matrix([1.1,4.1],[4.1,7.1],[9.1,10.1],[16.1,13.1]),
93                [x,y], y=a*x^b+c, [a,b,c], [4,1,2]);
94                              .4878659755898127
95 (%o8) y = 3.177315891123101 x
96                                         + .7723843491402264
97 (%i9) lsquares(matrix([0,2,4],[3,3,5],[8,6,6]),
98               [m,n,y], y=(A*m+B*n)^(1/3)+C, [A,B,C], [3,3,3]);
99                                                      1/3
100 (%o9) y = (3.999999999999862 n + 4.999999999999359 m)
101                                          + 2.00000000000012
102 @end example
104 Para usar essa função escreva primeiro @code{load("lsquares")}. Veja também @code{DETCOEF} e @code{mnewton}.
105 @end deffn
108 @deffn {Função} plsquares (@var{Mat},@var{VarList},@var{depvars})
109 @deffnx {Função} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon})
110 @deffnx {Função} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon},@var{maxdegree})
111 Ajuste de polinómios de várias variáveis de uma tabela de dados pelo método dos
112 "mínimos quadrados". @var{Mat} é uma matriz contendo os dados, @var{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), @var{depvars} é o
113 nome de uma variável dependente ou uma
114 lista com um ou mais nomes de variáveis dependentes (cujos nomes podem estar em @var{VarList}), @var{maxexpon} é o expoente máximo opcional para cada variável independente (1 por padrão), e @var{maxdegree} é o argumento opcional
115 grau máximo do polinómio (@var{maxexpon} por padrão); note que a soma dos expoentes de cada termo deve ser menor ou igual a @var{maxdegree}, e se @code{maxdgree = 0} então nenhum limite é aplicado.
117 Se @var{depvars} é o nome de uma variável dependente (fora de uma lista), @code{plsquares} retorna o polinómio ajustado. Se @var{depvars} for uma lista de uma ou mais variáveis dependentes, @code{plsquares} retorna uma lista com
118 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
119 global @var{DETCOEF} (uma lista se @var{depvars} for tamb@'numa lista).
122 Um simples exemplo de ajuste linear de várias variáveis:
123 @example
124 (%i1) load("plsquares")$
126 (%i2) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
127                 [x,y,z],z);
128      Determination Coefficient for z = .9897039897039897
129                        11 y - 9 x - 14
130 (%o2)              z = ---------------
131                               3
132 @end example
134 O mesmo exemplo sem restrições de grau:
135 @example
136 (%i3) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
137                 [x,y,z],z,1,0);
138      Determination Coefficient for z = 1.0
139                     x y + 23 y - 29 x - 19
140 (%o3)           z = ----------------------
141                               6
142 @end example
144 Quantas diagonais possui um polígono de N lados? Que
145 grau polinomial deverá ser usado?
146 @example
147 (%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
148                 [N,diagonais],diagonais,5);
149      Determination Coefficient for diagonais = 1.0
150                                 2
151                                N  - 3 N
152 (%o4)              diagonais = --------
153                                   2
154 (%i5) ev(%, N=9);   /* Testando para um polígono de 9 lados - o eneágono */
155 (%o5)                 diagonals = 27
156 @end example
158 De quantas formas dispomos para colocar  duas raínhas sem que elas estejam ameaçadas num tabuleiro de xadrez n x n ?
159 @example
160 (%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
161                 [n,posicoes],[posicoes],4);
162      Determination Coefficient for [posicoes] = [1.0]
163                          4       3      2
164                       3 n  - 10 n  + 9 n  - 2 n
165 (%o6)    [posicoes  = -------------------------]
166                                   6
167 (%i7) ev(%[1], n=8); /* Testando para um tabuleiro de (8 x 8) */
168 (%o7)                posicoes = 1288
169 @end example
171 Um exemplo com seis variáveis dependentes:
172 @example
173 (%i8) mtrx:matrix([0,0,0,0,0,1,1,1],[0,1,0,1,1,1,0,0],
174                   [1,0,0,1,1,1,0,0],[1,1,1,1,0,0,0,1])$
175 (%i8) plsquares(mtrx,[a,b,_And,_Or,_Xor,_Nand,_Nor,_Nxor],
176                      [_And,_Or,_Xor,_Nand,_Nor,_Nxor],1,0);
177       Determination Coefficient for
178 [_And, _Or, _Xor, _Nand, _Nor, _Nxor] =
179 [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
180 (%o2) [_And = a b, _Or = - a b + b + a,
181 _Xor = - 2 a b + b + a, _Nand = 1 - a b,
182 _Nor = a b - b - a + 1, _Nxor = 2 a b - b - a + 1]
183 @end example
185 Para usar essa função escreva primeiramente @code{load("lsquares")}.
186 @end deffn