MATLAB函数fminunc生成错误
在最大似然估计中使用函数fminunc时,我面临一个错误。我担心这是非常直截了当的,但是我使用MATLAB的经验非常有限 函数“normal”包含对数似然函数。我试图估计正态分布的期望值和标准偏差,给出存储在变量x中的观察值MATLAB函数fminunc生成错误,matlab,Matlab,在最大似然估计中使用函数fminunc时,我面临一个错误。我担心这是非常直截了当的,但是我使用MATLAB的经验非常有限 函数“normal”包含对数似然函数。我试图估计正态分布的期望值和标准偏差,给出存储在变量x中的观察值 function f = normal(X, theta) mean = theta(1); sigma = theta(2); z = (X-mean)./sigma; f = -(sum(-log(sigma) -(1/2).*z.^2 )); 我基本上执行以下代
function f = normal(X, theta)
mean = theta(1);
sigma = theta(2);
z = (X-mean)./sigma;
f = -(sum(-log(sigma) -(1/2).*z.^2 ));
我基本上执行以下代码:
theta = [1,1]
f = @(theta)normal(x, theta)
[est, fval, exitflag, output, grad, hessian] = fminunc('normal', x, theta)
错误如下:
警告:结构字段赋值将覆盖类为“double”的值。请参见MATLAB R14SP2版本
注意,将非结构变量指定为结构将显示警告,以获取详细信息
在createOptionFeedback第34页
在准备阶段,在31岁时解决问题
在fminunc的157处
警告:结构字段赋值将覆盖类为“double”的值。请参见MATLAB R14SP2版本
注意,将非结构变量指定为结构将显示警告,以获取详细信息。
在203的fminunc中
使用feval时出错
类型为“double”的输入参数的未定义函数“normal”
fminunc中的错误(第254行)
f=feval(funfcn{3},x,varargin{:})
原因:
初始用户提供的目标函数评估失败。FMINUNC无法继续
不幸的是,手册没有帮助我修复代码。召唤
[est, fval, exitflag, output, grad, hessian] = fminunc(f, x, theta)
也没有帮助。我做错了什么
提前谢谢你 您使用错误的sintax调用了
fminunc
,请参阅文档
修复代码的一种方法是定义函数normal
只接受一个参数:theta
function f = normal(theta)
global X
mean = theta(1);
sigma = theta(2);
z = (X-mean)./sigma;
f = -(sum(-log(sigma) -(1/2).*z.^2 ));
并使用调用fminunc
global X
X = randn(100, 1); % A possible time series.
theta0 = [1,1];
[est, fval, exitflag, output, grad, hessian] = fminunc(@normal, theta0);
为什么
global
而不是匿名函数?这是一种继续的方式。其他可能性包括:具有theta
和X
的结构、定义所有内容的嵌套函数、文件标识符等。我认为这取决于用户根据其具体情况选择最佳方法。