-1

我有两个值向量,我想对它们进行统计比较。为简单起见,假设 A = [2 3 5 10 15] 和 B = [2.5 3.1 4.8 10 18]。我想计算标准偏差、均方根误差 (RMSE)、平均值,并方便地呈现,可能是直方图。你能帮我怎么做,以便我理解吗?我知道问题可能很简单,但我是新手。非常感谢!

编辑:这就是我想要实现 RMSE 的方式。

dt = 1;
for k=1:numel(A)
err(k)=sqrt(sum(A(1,1:k)-B(1,1:k))^2/k);
t(k) = dt*k; 
end

然而,它给了我比我预期更大的值,因为例如 3 和 3.1 仅在 0.1 上有所不同。这就是我如何计算每个周期的参考值与该周期中相应估计值之间的误差。你能告诉我,我做对了吗,还是有什么问题?

abs_err = A-B;
4

1 回答 1

0

您循环遍历向量的方式不是逐个元素,而是通过增加向量长度,也就是说,您在每次迭代时比较以下内容:

      A(1,1:k)    B(1,1:k)
      --------    --------
k=1   [2]         [2.5]
 =2   [2 3]       [2.5 3.1]
 =3   [2 3 5]     [2.5 3.1 4.8]
....

您绝不比较2 和 2.1!

假设AB是相同长度的向量(并且都是列向量或行向量),那么您需要函数std(A-B), mean(A-B),并且如果您查看 matlab 交换,您会发现一个用户贡献的rmse(A-B),但您也可以将 RMSE 计算为sqrt(mean((A-B).^2))。至于显示直方图,请尝试hist(A-B).

在你的情况下:

dt = 1;
for k=1:numel(A)
    stdab(k) = std(A(1,1:k)-B(1,1:k));
    meanab(k) = mean(A(1,1:k)-B(1,1:k));
    err(k)=sqrt(mean((A(1,1:k)-B(1,1:k)).^2));
    t(k) = dt*k; 
end

hist(A(1,1:k)-B(1,1:k))如果要计算每个向量对差异的直方图,也可以包含在循环中A(1,1:k)-B(1,1:k)

于 2013-08-04T13:14:18.030 回答