/lsquares.texi/1.1/Mon Feb 27 22:09:17 2006//
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.
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.
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 tambń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").