close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#1716 closed defect (fixed)

Polinomio determinante de un VAR

Reported by: Víctor de Buen Remiro Owned by: Jorge
Priority: high Milestone: TOL Packages
Component: Math Version: 3.1
Severity: normal Keywords: VarModel
Cc: Víctor de Buen Remiro

Description (last modified by Víctor de Buen Remiro)

Se solicita incoporar a VarModel el cálculo del polinomio determinante de un modelo VAR y el cálculo de sus raíces. Esto es necesario para diagnosticar la estabilidad del modelo VAR. Se aporta el código que lo implementa:

Matrix param = varEst::_.B;
Real n = Rows(param);
Set PHI = 
{
  Set aux = For(1,pmax,Set(Real k)
  {
    Matrix phi = Sub(param,1,(k-1)*n+1,n,n);
    For(1,n,Set(Real i)
    {
      For(1,n,Polyn(Real j)
      {
        MatDat(phi,i,j)*B^k
      })
    })
  });
  For(1,n,Set(Real i)
  {
    For(1,n,Polyn(Real j)
    {
      If(i==j,1,0)-
      SetSum(For(1,pmax,Polyn(Real k)
      {
        aux[k][i][j]
      })) 
    })
  })
};

Polyn PolynMatrixDeterminant(Set polMat)
{
  Real m = Card(polMat);
  WriteLn("TRACE [PolynMatrixDeterminant] polMat=\n"<<polMat);
  WriteLn("TRACE [PolynMatrixDeterminant] m="<<m);
  Case(
    m==1, polMat[1][1],
    m==2, polMat[1][1]*polMat[2][2]-polMat[1][2]*polMat[2][1], /*
    m==-3, 
    {
      +polMat[1][1]*polMat[2][2]*polMat[3][3]
      +polMat[1][2]*polMat[2][3]*polMat[3][1]
      +polMat[1][3]*polMat[2][1]*polMat[3][2]
      -polMat[1][1]*polMat[2][3]*polMat[3][2]
      -polMat[1][2]*polMat[2][1]*polMat[3][3]
      -polMat[1][3]*polMat[2][2]*polMat[3][1]
    }, */
    1==1,
    {
      SetSum(For(1,m,Polyn(Real k)
      {
        Polyn c = polMat[k][1]*(-1)^(k+1);
        Set rows = ExtractByIndex(polMat,Range(1,m,1)-[[k]]);
        Set adjunt = EvalSet(rows,Set(Set row)
        {
          For(2,m,Polyn(Real j) { row[j] })
        });
        c*PolynMatrixDeterminant(adjunt)
      }))
    }
  )
};
  

Polyn PHI.det = PolynMatrixDeterminant(PHI);

Set PHI.det.roots = 
{
  Matrix ar.roots = gsl_poly_complex_solve(PHI.det);
  For(1,Rows(ar.roots),Set(Real k)
  {
    Set aux = [[
      Real real = MatDat(ar.roots,k,1);
      Real imaginary = MatDat(ar.roots,k,2);
      Real module = Sqrt(real^2+imaginary^2)
    ]];
    Eval("Set PHI.det.Root_"<<k+"=aux")
  })
};

Change History (3)

comment:1 Changed 12 years ago by Jorge

(In [5956]) refs #1716, se han incluido las funciones en el paquete. Depende de una función interna de TOL para el cálculo de raíces complejas. El ticket se cerrara cuando se libere esta versión y se suba la nueva versión del paquete.

comment:2 Changed 12 years ago by Jorge

Resolution: fixed
Status: newclosed

(In [5959]) fixes #1716, la versión mínima requerida es 3.1 p015

comment:3 Changed 12 years ago by Víctor de Buen Remiro

Description: modified (diff)
Summary: Polinomio característico de un VARPolinomio determinante de un VAR

Lo que estás llamando polinomio característico es simplemente el determinante de la matriz polinomial, que como sus celdas son polinomios el determinante también lo es.

El polinomio característico de una matriz M de números es el determinante de (M-I*v), que sería un polinomio en la variable v, cuyas raíces son los autovalores, y que no tiene nada que ver con esto.

El polinomio característico de una matriz polinomial M(u) en la variable u sería el determinante de M(u)-I(v), es decir, sería un polinomio bivariante, cuyas raíces en v serían los autovalores de M(u) que serían a su vez polinomios en u

Note: See TracTickets for help on using tickets.