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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...