平差作業九

平差 GNSS 基線後的誤差橢圓計算。

變方協變方矩陣

平差過程與第八次作業大致相同,就不再列式, 直接進入間接觀測平差後,可以計算得所有未知數的變方協變方矩陣。

\hat \Sigma _ {\hat x} = \hat {\sigma_0} N^{-1} = \
\begin{bmatrix}
\sigma_{X_A} ^2  & \sigma_{X_A Y_A} & \dots \\
\sigma_{X_A Y_A} & \sigma_{Y_A} ^2  & \dots \\
\vdots
\end{bmatrix}

協變方矩陣中,各元素是變方或二未知數的協變方。 單一點上的 x y 座標的變方協變方矩陣, 就是其中的一小區塊。

%% xy_matrix(3) 就是取出第三點的 X Y 相關矩陣
xy_matrix = @(i) point_covariance_matrix(i*3-2:i*3-1, i*3-2:i*3-1);

誤差橢圓

有了 x y 的協變方矩陣,就能計算平面上的誤差橢圓。 誤差橢圓可以用三個參數表示, 分別是橢圓的長軸長、短軸長、長軸角度。

C_1 = \hat {\sigma_0} \sqrt \lambda_1 \\
C_2 = \hat {\sigma_0} \sqrt \lambda_2 \\
\theta = \frac{1}{2} arctan (
\frac { 2 \sigma_{x y} } {\sigma_x^2 - \sigma_y^2} )
function elips_parameter = compute_error_elips(xy_covariance, sigma0)
  eigenvalue = eig(xy_covariance);
  elips_parameter = zeros(1, 3);
  elips_parameter(1:2) = sqrt(eigenvalue(1:2)) * sigma0;

  orintation2 = atan2(
      2*xy_covariance(1,2),
      (xy_covariance(1,1) - xy_covariance(2,2))
  );
  elips_parameter(3) = orintation2 / 2;
end

繪圖

要從橢圓參數畫出誤差橢圓,我是用參數式與 sin cos 計算。

function xy = compute_ellipse_xy(long, short, orientation)
  m = 40;
  x = zeros(m,1);
  y = zeros(m,1);
  theta = linspace(0,2*pi,m);
  for k = 1:m
    x(k) = long * cos(theta(k));
    y(k) = short * sin(theta(k));
  end
  alpha = -orientation;
  R  = [cos(alpha) -sin(alpha)
        sin(alpha)  cos(alpha)];
  rCoords = R*[x' ; y'];
  xr = rCoords(1,:)';
  yr = rCoords(2,:)';

  xy = [xr'; yr'];
end

function plot_name(todo, file)
  fig = figure('visible', 'off');
  todo();
  print('-dpng', file);
  close(fig);
end


for i = 1:rows(point_vector)
  elips_parameter = compute_error_elips(
                        xy_matrix(i), variance_post);
  elips_xy = compute_ellipse_xy(
                 elips_parameter(1),
                 elips_parameter(2),
                 elips_parameter(3));
  plot_name(@() plot(elips_xy(1,:), elips_xy(2,:)),
            ['ellipse-' num2str(i) '.png']);
end

ellipse-1.png

ellipse-2.png

ellipse-3.png

ellipse-4.png

ellipse-5.png

但繪圖結果中的 X Y 座標軸好像不一致, 所以看起來變成橢圓,其實都是正圓。 從協變方矩陣中各點的 $\sigma_{x y}$ 都為 0, 也就是各點的 x y 座標無相關, 誤差橢圓的長短軸等長,即為正圓。