可以这样来编写程序:clc; clear all; close all;
A = magic(5); % 真实值
B = A + rand(5, 5); % 估计值
C = A - B; % 残差数据
D = sum(C(:)^2) 结果:D = 125776你的命令和你的想法就不匹配 。
如果是std(a)
那么 就是 sqrt([(a(1)-mean(a))^2 + (a(2)-mean(a))^2 + /(n-1)])
如果是std(a, 1)
那么 就是 sqrt([(a(1)-mean(a))^2 + (a(2)-mean(a))^2 + /n])
其中mean(a) = a(1) + a(2) + /n
上面两者的区别在于用n或者n-1进行单位化的问题,主要是就是对无偏估计的一种修正,相对来说,n-1用得广泛一些。
你这样的命令std(a, b)
其实就等于是给a中的每一个元素赋了一个权重,因为在默认的状态下,a中的每个人元素是等权重的,但是现在你用了b,在算法里面会被自动单位化:
b1 = [5/17 4/17 3/17 5/17]
然后这个b1就被视为是a中每个元素相对应的权重,来以此进行下一步的std运算。
把std的定义搞清楚就行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)