CHISTART.M
上传用户:sfyaiting
上传日期:2009-10-25
资源大小:320k
文件大小:4k
源码类别:

GPS编程

开发平台:

Matlab

  1. function Chi2 = chistart (D,L,a,ncands,factor)
  2. %CHISTART: Computes the initial size of the search ellipsoid
  3. %
  4. % This routine computes or approximates the initial size of the
  5. % search ellipsoid. If the requested number of candidates is not
  6. % more than the dimension + 1, this is done by computing the squared
  7. % distances of partially rounded float vectors to the float vector in
  8. % the metric of the covariance matrix. Otherwise an approximation is used.
  9. %
  10. % Input arguments
  11. %    L,D   : LtDL-decomposition of the variance-covariance matrix of
  12. %            the float ambiguities (preferably decorrelated)
  13. %    a     : float ambiguites (preferably decorrelated)
  14. %    ncands: Requested number of candidates (default = 2)
  15. %    factor: Multiplication factor for the volume of the resulting
  16. %            search ellipsoid (default = 1.5)
  17. %
  18. % Output arguments:
  19. %    Chi2  : Size of the search ellipsoid
  20. % ----------------------------------------------------------------------
  21. % File.....: chistart.m
  22. % Date.....: 19-MAY-1999
  23. % Author...: Peter Joosten
  24. %            Mathematical Geodesy and Positioning
  25. %            Delft University of Technology
  26. % ----------------------------------------------------------------------
  27. % ------------------
  28. % --- Initialize ---
  29. % ------------------
  30. if nargin < 4; ncands = 2  ; end;
  31. if nargin < 5; factor = 1.5; end;
  32. n = max(size(a));
  33. % ----------------------------------------------------------------------
  34. % --- Computation depends on the number of candidates to be computed ---
  35. % ----------------------------------------------------------------------
  36. if ncands == 1;
  37.   
  38.   % ---------------------------------------------------
  39.   % --- The squared norm, based on the bootstrapped ---
  40.   % --- solution will be computed                   ---
  41.   % ---------------------------------------------------
  42.   afloat = a;
  43.   afixed = a;
  44.   for i = 1:n;
  45.     dw = 0;
  46.     for j = 1:n-1;
  47.       dw = dw + L(i,j) * (a(j) - afixed(j));
  48.     end;
  49.     a(i) = a(i) - dw;
  50.     afixed(i) = round (a(i));
  51.    
  52.   end;
  53.   Chi2 = (afloat-afixed)' * inv(L'*diag(D)*L) * (afloat-afixed) + 1d-6;
  54.   
  55. elseif ncands <= n+1;
  56.   % ----------------------------------------------
  57.   % --- The right squared norm can be computed ---
  58.   % ----------------------------------------------
  59.    
  60.    Linv = inv(L);
  61.    Dinv = 1./D;
  62.    
  63.    dist = round(a) - a;
  64.    e    = Linv'*dist;
  65.    Chi  = [zeros(1,n) sum(Dinv' .* e .* e)];
  66.    % ------------------------------------------
  67.    % --- Compute the real squared distances ---
  68.    % ------------------------------------------
  69.    for i = 1:n;
  70.       Chi(i) = 0;
  71.       for j = 1:i; 
  72.          Chi(i) = Chi(i) + Dinv(j) * Linv(i,j) * (2*e(j)+Linv(i,j));
  73.       end;
  74.       Chi(i) = Chi(n+1) + abs(Chi(i));
  75.    
  76.    end;
  77.    % ---------------------------------------------------------------
  78.    % --- Sort the results, and return the appropriate number     ---
  79.    % --- Add an "eps", to make sure there is no boundary problem ---
  80.    % ---------------------------------------------------------------
  81.    Chi  = sort(Chi);
  82.    Chi2 = Chi(ncands) + 1d-6;
  83.    
  84. else
  85.    % -----------------------------------------------------
  86.    % An approximation for the squared norm is computed ---
  87.    % -----------------------------------------------------
  88.    Linv = inv(L);
  89.    Dinv = 1./D;
  90.    
  91.    Vn   = (2/n) * (pi ^ (n/2) / gamma(n/2));
  92.    Chi2 = factor * (ncands / sqrt((prod(1 ./ Dinv)) * Vn)) ^ (2/n);
  93. end;
  94. % ----------------------------------------------------------------------
  95. % End of routine: chistart
  96. % ----------------------------------------------------------------------