在最大似然估计的上下文中使用函数 fminunc 时,我遇到错误。我担心它非常直接,但我对MATLAB的经验非常有限。
功能"正常"包含对数似然函数。我试图估计期望和标准。给定存储在变量x中的观测值的正态分布的偏差。
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版本 注释,分配非结构变量作为结构显示警告,以获取详细信息。
在34的createOptionFeedback中 在prepareOptionsForSolver 31 在fminunc at 157 警告:结构字段分配使用类" double"覆盖值。参见MATLAB R14SP2版本 注释,分配非结构变量作为结构显示警告,以获取详细信息。 在fminunc在203 使用feval时出错 未定义的功能'正常'输入参数类型为' double'。
fminunc出错(第254行) f = feval(funfcn {3},x,varargin {:});
引起: 初始用户提供的目标函数评估失败。 FMINUNC无法继续。
不幸的是,手册没有帮我修复代码。致电
[est, fval, exitflag, output, grad, hessian] = fminunc(f, x, theta)
也没有帮助。我做错了什么?
提前谢谢!
答案 0 :(得分:1)
您使用错误的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);