#1359 closed defect (fixed)
Error en las funciones IsStationary y StationaryValue en polinomios con coeficientes nulos
Reported by: | Víctor de Buen Remiro | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | Mantainance |
Component: | Math | Version: | head |
Severity: | blocker | Keywords: | |
Cc: |
Description
La función StationaryValue
falla en polinomios con coeficientes nulos. Esta función es continua por definición en todos los coeficientes, pero si vamos reduciendo uno cualquiera de ellos que no sea el de grado máximo, vemos como se produce un salto al superar la barrera del mínimo valor real en la aritmética discreta TheMinAbsValue = 3.952525166729972e-323
. Si además, como sucede en este ejemplo, el salto supone pasar de valores por encima de 1 a valores por debajo, o viceversa, entonces la función IsStationary
también falla.
Polynomial | StationaryValue | IsStationary |
1 -1.2*B^2+0.4*B^3 | 1.16666666667 | 1
|
1+0*B -1.2*B^2+0.4*B^3 | 1.16666666667 | 1
|
1+1e-400*B -1.2*B^2+0.4*B^3 | 1.16666666667 | 1
|
1+TheMinAbsValue*B-1.2*B^2+0.4*B^3 | 0.7 | 0
|
1+1e-300*B -1.2*B^2+0.4*B^3 | 0.7 | 0
|
1+1e-200*B -1.2*B^2+0.4*B^3 | 0.7 | 0
|
1+1e-100*B -1.2*B^2+0.4*B^3 | 0.7 | 0
|
1+1e-010*B -1.2*B^2+0.4*B^3 | 0.699999999977 | 0
|
1+1e-001*B -1.2*B^2+0.4*B^3) | 0.677419354839 | 0
|
Change History (4)
comment:1 Changed 13 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:4 Changed 13 years ago by
Un polinomio cualquiera es estacionario, es decir, tiene todas sus raíces fuera del círculo unidad, si, y sólo si, el polinomio de coeficientes en orden inverso las tiene todas dentro del círculo unidad, o sea, es de Schur.
La fórmula de Duffin reduce el grado de un polinomio de Schur a otro que es también de Schur.
Normalmente, con polinomios llenos te sale un polinomio justo de un grado menos
y también lleno. Pero no tiene porqué, puede quedarte de grado menor y sparse
e incluso un monomio, y ahí es donde da problemas porque los monomios de grado 0 no tienen raíces y los de grado mayor que 0 solo tienen la raíz cero que está dentro del círculo unidad. Cuando tienes polinomios muy sparse, por ejemplo un AR estacionario de orden 12, entonces tienden a surgir estos problemas.
La cuestión es bastante sutil pero pasa por incluir los monomios en las definiciones dadas anteriormente
- Un polinomio cualquiera es estacionario si no tiene raíces dentro del círculo unidad.
- Un polinomio cualquiera es de Schur si no tiene raíces fuera del círculo unidad.
También se ha cambiado la métrica de la distancia devuelta por StationaryValue
para que esté en 0,1? si el polinomio no es estacionario y 1,2? si lo es.
Para más detalles sobre estos asuntos ver Informe sobre la implementación de la estimación ARIMA.
En relación con este ticket se han incluido también dos nuevas funciones:
Polyn InverseRoots(Polyn p)
: Devuelve un polinomio q cuyas raíces son las inversas de las del polinomio dado por medio de esta fórmula:
p(x) = Sum(a[k]*x^k, k=0...n) q(x) = Sum(a[k]*x^(n-k), k=0...n) }
Real PolPeriod(Polyn pol)
: Devuelve el periodo de un polinomio, entendido como el máximo común divisor de los grados de todos sus monomios.
(In [3922]) Fixes #1359
StationaryValue fills near to zero coefficients with the signed minimum absolute value