Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB函数fminunc生成错误_Matlab - Fatal编程技术网

MATLAB函数fminunc生成错误

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 )); 我基本上执行以下代

在最大似然估计中使用函数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 ));
我基本上执行以下代码:

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
的结构、定义所有内容的嵌套函数、文件标识符等。我认为这取决于用户根据其具体情况选择最佳方法。