使用MATLAB的标准差

Ari*_*rif 2 matlab

我正在尝试使用公式计算MATLAB中的标准偏差

for i=1:n 
s=sqrt(sum((h(i)-mean(h))^2)/(n-1));
end
Run Code Online (Sandbox Code Playgroud)

其中n是单个列向量中的行数,但结果与计算不同std(h)。在我的项目中,我无法使用std function

请帮我。

Ben*_*_11 5

在我看来,最好不要使用for循环,而应使用矢量化代码。

s1 = sqrt(sum((h - mean(h)).^2)./(n-1))
Run Code Online (Sandbox Code Playgroud)

在这里要sum注意由for循环完成的求和。

如果确实要使用for循环,则要在循环内添加每个单独的项,然后取其平方根;即不要sum在循环内使用:

clc
clear

h = rand(1,100);
M = mean(h);

n = length(h);

s0 = 0; %// Initialize s0, the standard deviation you wish to calculate.
for i=1:n     
    s0 = s0 + (h(i)- M)^2; %// add each calculated s0 to its previous value. That's the sum.
end

s0 = sqrt(s0/(n-1))

%// Calculate values using vectorized code of Matlab std function.
s1 = sqrt(sum((h - mean(h)).^2)./(n-1))
s2 = std(h)
Run Code Online (Sandbox Code Playgroud)

检查s0,s1和s2:

s0 =

    0.2842


s1 =

    0.2842


s2 =

    0.2842
Run Code Online (Sandbox Code Playgroud)