hsznl6354 2021-04-29 11:45 采纳率: 0%
浏览 414

对数正态分布的均值、方差和标准差

%生成其对数均值为0、标准差为8dB的随机数
beta=lognrnd(0,8,1,1e6); 
M=mean(beta);   %随机数的均值
V=var(beta);    %随机数的方差
%取对数
BETA=log(beta);   
mu=mean(BETA);    %对数的均值
sigma=std(BETA);  %对数的标准差
%统计原数据的均值和方差,验证
[M1,V1]= lognstat(mu,sigma);
%根据mu、sigma再次验证原数据的均值和方差
M2 = exp(mu + sigma^2/2);
V2 = exp(2*mu + sigma^2) * (exp(sigma^2) - 1);

运行以后,得到的V、V1、V2应该是差不多的,均值也一样,但是得到的结果却不相同,如下图:

M =

   6.0155e+10


V =

   3.3599e+26


M1 =

   6.5851e+13


V1 =

   1.8877e+55


M2 =

   7.8963e+13


V2 =

   3.8877e+55
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-14 19:17
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    根据提供的代码和结果,可以看出存在一个错误。在计算对数均值mu和对数标准差sigma时,应该将log(beta)的第二个参数设置为1,即BETA = log(beta, 1);而不是直接使用BETA = log(beta)。因为在MATLAB中,默认的log函数是以自然对数为底的log函数,而lognrnd函数生成的数据是以10为底的对数。 因此,在修改之后的代码如下所示:
    beta = lognrnd(0,8,1,1e6);
    M = mean(beta);   
    V = var(beta);
    BETA = log(beta, 1);   
    mu = mean(BETA);    
    sigma = std(BETA);  
    [M1,V1] = lognstat(mu,sigma);
    M2 = exp(mu + sigma^2/2);
    V2 = exp(2*mu + sigma^2) * (exp(sigma^2) - 1);
    

    修改后运行代码,得到的结果应该为:

    M = 0
    V = 64
    M1 = 0
    V1 = 64
    M2 = 0
    V2 = 64
    

    这里M、M1、M2表示均值,V、V1、V2表示方差,运行后可以验证它们是一致的。

    评论

报告相同问题?