MATLAB函数fminunc生成错误

时间:2014-09-08 13:37:37

标签: matlab

在最大似然估计的上下文中使用函数 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)

也没有帮助。我做错了什么?

提前谢谢!

1 个答案:

答案 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);