Essa variável é usada pelas funções lsquares
e plsquares
para armazenar o Coeficiente de Determinação que mede o melhor do ajuste. Esse intervalo de 0 (nenhuma correlação) a 1 (correlação exata).
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 objetivo 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 objetivo 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
existam 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 do ajuste, de 0 (nenhuma correlação) a 1 (correlação exata). Esse valor é também armazenada na vriá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 (os quais 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 objetivo de informar sobre o melhor do ajuste, cujo intervalo vai de 0 (nenhuma correlação) a 1 (correlação exata). Esses valores são também são
também armazenados na variável
global DETCOEF (uma lista se depvars for também 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 gra:
(%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 possi um polígono de N lados tem? What polynomial degree should be used?
(%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
Quantos caminhos fazemos para colocar duas raínhas sem que elas estejam ameaçadas em um 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); /* Tesando para um tabuleiro de (8 x 8) */ (%o7) posicoes = 1288
Em 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")
.