Changeset 73bf20ce in tol


Ignore:
Timestamp:
Mar 19, 2009, 9:21:58 AM (18 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
9fc2160
Parents:
1fa10aa
Message:

Fixing bug in calculation of cov_za at function CalcLikelihood_Almagro
Fixes #662

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@778 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/bmath/bstat/arma.cpp

    r1fa10aa r73bf20ce  
    14621462{
    14631463  int mxpq = Maximum(p_,q_);
     1464  int m = w_.Rows();
     1465  BDat s2 = sigma^2;
     1466  if(mxpq==0)
     1467  {
     1468    a_ = w_;
     1469    a0_.Alloc(0,0);
     1470    w0_.Alloc(0,0);
     1471    ata_ = MtMSqr(a_)(0,0);
     1472    wtCoviw_ = ata_ ;
     1473    aCovDetN_ = 0;
     1474    logLikelihood_ = -0.5*( m*Log(2*BDat::Pi()*s2)+wtCoviw_/s2);
     1475    return(true);
     1476  }
    14641477  if(!CheckStationary()) { return(false); }
    14651478  if(!CalcAutoCovarianze(mxpq)) { return(false); }
    … …  
    14681481  BPolyn<BDat>& ma = prod_.ma_;
    14691482  BVMat z; z.DMat2VMat((BMatrix<double>&)w_);
    1470   BDat s2 = sigma^2;
    1471   int m = w_.Rows();
    14721483  int q_p = q_+p_;
    14731484
    … …  
    14801491  BPolyn<BDat> ma0 = (BPolyn<BDat>::F()^q_)*(ma-BPolyn<BDat>::One());
    14811492
    1482   BVMat cov_zz; cov_zz.BPol2sparse(gamma, p_, p_);
    1483   BVMat cov_aa; cov_aa.Eye(q_);
    1484   BVMat cov_za; cov_za.BPol2sparse(psi, p_, q_);
    1485   BVMat cov_az; BVMat::T(cov_za, cov_az);
    1486   BVMat cov_u =  (cov_zz | cov_za) <<
    1487                  (cov_az | cov_aa);
     1493  BVMat cov_u;
     1494
     1495  if(p_ && q_)
     1496  {
     1497    BVMat cov_zz; cov_zz.BPol2sparse(gamma, p_, p_);
     1498    BVMat cov_aa; cov_aa.Eye(q_);
     1499    BPolyn<BDat> psi_;
     1500    psi.ChangeBF(psi_);
     1501    psi_ = psi_ * (BPolyn<BDat>::B()^Maximum(0,q_-p_));
     1502    BVMat cov_za;
     1503    if(q_>=p_)
     1504    {
     1505      cov_za.BPol2sparse(psi_, q_, p_);
     1506    }
     1507    else
     1508    {
     1509      BVMat zeros;
     1510      zeros.Zeros(q_,p_-q_,BVMat::ESC_chlmRsparse);
     1511      cov_za.BPol2sparse(psi_, q_, q_);
     1512      cov_za = zeros | cov_za;
     1513    }
     1514    BVMat cov_az; BVMat::T(cov_za, cov_az);
     1515    cov_u =  (cov_zz | cov_za) <<
     1516             (cov_az | cov_aa);
     1517  }
     1518  else if(!p_ && q_)
     1519  {
     1520    cov_u.Eye(q_);
     1521  }
     1522  if(p_ && !q_)
     1523  {
     1524    cov_u.BPol2sparse(gamma, p_, p_);
     1525  }
    14881526
    14891527  BVMat eye_qp; eye_qp.Eye(q_p);
    … …  
    15091547  BVMat u; BVMat::CholeskiSolve(L_G,G_pi_z,u,BVMat::ECSS_LLt);
    15101548 
    1511   BVMat z0; u.Sub(0,  0, p_, 1, z0);
     1549  BVMat w0; u.Sub(0,  0, p_, 1, w0);
    15121550  BVMat a0; u.Sub(p_, 0, q_, 1, a0);
    15131551  a0.GetDMat((BMatrix<double>&)a0_);
    1514   z0.GetDMat((BMatrix<double>&)w0_);
     1552  w0.GetDMat((BMatrix<double>&)w0_);
    15151553
    15161554  BVMat v; BVMat::CholeskiSolve(L_u,u,v,BVMat::ECSS_L);
    1517   BVMat a; BVMat::DifEq(ar_ma,z0,z,a0,a,0.8,1.E-17);
     1555  BVMat a; BVMat::DifEq(ar_ma,w0,z,a0,a,0.8,1.E-17);
    15181556  a.GetDMat((BMatrix<double>&)a_);
    15191557
Note: See TracChangeset for help on using the changeset viewer.