Matlab中的优化:如何定义参数约束

Matlab中的优化:如何定义参数约束,matlab,optimization,Matlab,Optimization,我试图在Matlab中估计一个贝塔二项模型(数据集可用) 我的似然函数: function out= log_Lik(x,Data); ms=Data(:,1); xs=Data (:,2); alpha=x(1) beta=x(2) P12=exp(gammaln(ms+1)-gammaln(xs+1)-gammaln(ms- xs+1)).*exp(gammaln(alpha+xs)+gammaln(beta+ms-xs)-gammaln(alpha+beta+ms)); P3=

我试图在Matlab中估计一个贝塔二项模型(数据集可用)

我的似然函数:

function  out= log_Lik(x,Data);

ms=Data(:,1);
xs=Data (:,2);

alpha=x(1)
beta=x(2)


P12=exp(gammaln(ms+1)-gammaln(xs+1)-gammaln(ms- xs+1)).*exp(gammaln(alpha+xs)+gammaln(beta+ms-xs)-gammaln(alpha+beta+ms));
P3= exp(gammaln(alpha+beta)-gammaln(alpha)-gammaln(beta));
P=P12.*P3;
Like=log(P);
out= -sum(Like);
我的最大似然估计代码:

Data=readtable('prob3.xls');

ms=Data.m_s;
xs=Data.x_s;

%% Data parsed to optimisation function
Data = [ms xs ];

f = @(x)log_Lik(x, Data);

%%
options = optimoptions('fminunc','Display','iter','Algorithm','quasi-  newton','MaxIter',10000,'TolX',10^-30,'TolFun',10^-30);
alpha0 = 1;
beta0=1;
x0 = [alpha0 beta0];
[x,fval,exitflag,output,grad,hessian] = fminunc(f,x0,options)
但是,当我运行上述代码时,会出现一个错误,错误是:

Error using gammaln
Input must be nonnegative.

我相信这是由于在优化似然函数的同时,将随机负值传递给α。现在我想知道在运行优化命令时,是否有任何方法可以为作为参数传递的值定义约束(
alpha
beta
)。如有任何提示,将不胜感激

fminunc
,您当前使用的函数,用于查找无约束优化问题的局部最小值

另一方面,找到约束优化问题的局部极小值

似乎您有一个alpha应该为正的约束,因此您应该使用fmincon并传入约束

fmincon的操作与fminunc类似。您应该将“optimoptions('fminunc'…”更改为“optimoptions('fmincon'…”

您希望设置
[0;-inf]
的下限以保持alpha为非负。对于其他您不关心的输入,只需传递一个空数组
[]


这将比我有时间在这里写的任何东西都要清楚。

使用fmincon并添加一个约束以保持alpha-positiveThanks-Matthew!您能告诉我代码中的位置以及如何适应它吗?对不起,我对matlab非常陌生