【问题标题】:MATLAB - Error in finding maximum likelihood estimates of parametersMATLAB - 查找参数的最大似然估计时出错
【发布时间】:2020-10-31 03:54:19
【问题描述】:

Dattatreya 等人在“Angular Statistics”一书中使用以下 MATLAB 代码来查找某个概率分布的 mle。

function [fun]=w_eiw_fminmle(X)
    th=[8 9 13 13 14 18 22 27 30 34383840 44 45 47 48 48 48 48 50 53 56 57 58 58 61 63 64 64 64 65 65 68 70 73 78 78 78 83 83 88 88 88 90 92 92 93 95 96 98 100 103 106 113 118 138 153 153 155 204 215 223 226 237 238 243 244 250 251 257 268 285 319 343 350];
    th=th.*pi./180;
    th=sort(th); 
    n=76;
    c=X(1) 
    lambda=X(2)
    m=5;

    g=0;
    for k=0:m
        g=g+((lambda.*c).*((th+2*k*pi)).^(-(c+1))).*(exp(-(th+2*k*pi).^(-c)).^lambda); 
    end

    fun=0; 
    for i=1:n
        fun=fun+log(g(i)); 
    end

    fun=-(fun); 

return

我尝试在 MATLAB 中运行此代码并收到一条错误消息,指出 X 身份不明。如何解决此错误?

【问题讨论】:

    标签: matlab parameters distribution mle log-likelihood


    【解决方案1】:

    要使用此函数并显示其输出,请尝试添加类似

    your_input = [[1,2], [3,4]];
    [output] = w_eiw_fminmle(your_input);
    disp(output)
    

    在其余代码之前。这可能会解决您的错误,因为在您的代码中您没有显示用于输入函数的内容。此外,以g= 开头的第10 行以. 结尾,这是element-wise multiplication operator 的第一部分.*。这会给你一个错误,尝试将第 10 行和第 11 行合并为一行。

    g=g+((lambda.*c).*((th+2*k*pi)).^(-(c+1))).*(exp(-(th+2*k*pi).^(-c)).^lambda);
    

    在第 8 行中,您定义 g = 0,然后在第 9 行中迭代 k,并在其中迭代地更改它。 g 仍然是一个标量。稍后在第 12 行,您使用 g(i),其中 i 从 1 变为 76 (n = 76)。如您所见,g 有一个值,而您正试图获取其第 76 个元素的值,这会给您一个错误。

    如果此代码如您所说取自一本书,我可以想象有两种可能的情况,很可能是您键入函数时出错,或者书中的代码无法运行(书错字或糟糕的书)。我会仔细检查您的代码转录。祝你好运!

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多