Changeset 5807 in ntrip for trunk/BNC/src/bncutils.cpp


Ignore:
Timestamp:
Aug 6, 2014, 11:09:26 AM (10 years ago)
Author:
mervart
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/bncutils.cpp

    r5753 r5807  
    4646#include <QStringList>
    4747#include <QDateTime>
     48
     49#include <newmatap.h>
    4850
    4951#include "bncutils.h"
     
    285287}
    286288
     289//
     290////////////////////////////////////////////////////////////////////////////
     291double Frac (double x) {
     292  return x-floor(x);
     293}
     294
     295//
     296////////////////////////////////////////////////////////////////////////////
     297double Modulo (double x, double y) {
     298  return y*Frac(x/y);
     299}
     300
    287301// Round to nearest integer
    288302////////////////////////////////////////////////////////////////////////////
     
    548562  }
    549563}
     564
     565//
     566//////////////////////////////////////////////////////////////////////////////
     567void kalman(const Matrix& AA, const ColumnVector& ll, const DiagonalMatrix& PP,
     568            SymmetricMatrix& QQ, ColumnVector& dx) {
     569
     570  Tracer tracer("kalman");
     571
     572  int nPar = AA.Ncols();
     573  int nObs = AA.Nrows();
     574  UpperTriangularMatrix SS = Cholesky(QQ).t();
     575
     576  Matrix SA = SS*AA.t();
     577  Matrix SRF(nObs+nPar, nObs+nPar); SRF = 0;
     578  for (int ii = 1; ii <= nObs; ++ii) {
     579    SRF(ii,ii) = 1.0 / sqrt(PP(ii,ii));
     580  }
     581
     582  SRF.SubMatrix   (nObs+1, nObs+nPar, 1, nObs) = SA;
     583  SRF.SymSubMatrix(nObs+1, nObs+nPar)          = SS;
     584 
     585  UpperTriangularMatrix UU;
     586  QRZ(SRF, UU);
     587 
     588  SS = UU.SymSubMatrix(nObs+1, nObs+nPar);
     589  UpperTriangularMatrix SH_rt = UU.SymSubMatrix(1, nObs);
     590  Matrix YY  = UU.SubMatrix(1, nObs, nObs+1, nObs+nPar);
     591 
     592  UpperTriangularMatrix SHi = SH_rt.i();
     593 
     594  Matrix KT  = SHi * YY;
     595  SymmetricMatrix Hi; Hi << SHi * SHi.t();
     596
     597  dx = KT.t() * ll;
     598  QQ << (SS.t() * SS);
     599}
     600
Note: See TracChangeset for help on using the changeset viewer.