微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MATLAB-查找参数的最大似然估计时出错

如何解决MATLAB-查找参数的最大似然估计时出错

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

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无法识别。如何解决错误

解决方法

要使用此功能并显示其输出,请尝试添加类似内容

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个元素的值,这会给您带来错误。

如果您说的是从书中摘录的代码,我可以想象有两种可能的情况,最有可能是您键入函数时出现错误,或者书中的代码无法运行(书中的拼写错误)或糟糕的书)。我会仔细检查您的代码转录。祝你好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。