我有两个值向量,我想对它们进行统计比较。为了简单起见,假设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;
循环遍历向量的方式不是逐个元素,而是通过增加向量长度,也就是说,在每次迭代时比较以下内容:
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进行比较!
假设A
和B
是长度相同的向量(都是列向量或行向量),那么您需要函数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
如果要计算每个向量对差A(1,1:k)-B(1,1:k)
的直方图,也可以在循环中包含hist(A(1,1:k)-B(1,1:k))
。