Matlab 伽马参数估计的数值求解

Matlab 伽马参数估计的数值求解,matlab,numerical,Matlab,Numerical,我试图用Matlab中的fzero数值求解一个方程。这是一项更大运动的一部分。我没有在这里发布太多信息,所以不确定你需要多少关于这个练习的背景信息,所以我会尽量简短 这是我的代码: fun = @(a)log(a/xBar) + (1/n) * log(dataProd) + diff(gamma(a))/gamma(a); x0 = 0.8014; x = fzero(fun,x0) 这些是价值观: n=209 xBar为0.6078 dataProd=3.1554e-77 我在Matlab

我试图用Matlab中的fzero数值求解一个方程。这是一项更大运动的一部分。我没有在这里发布太多信息,所以不确定你需要多少关于这个练习的背景信息,所以我会尽量简短

这是我的代码:

fun = @(a)log(a/xBar) + (1/n) * log(dataProd) + diff(gamma(a))/gamma(a);
x0 = 0.8014;
x = fzero(fun,x0)
这些是价值观: n=209 xBar为0.6078 dataProd=3.1554e-77

我在Matlab中得到以下错误消息:

| |和&&运算符的操作数必须可转换为逻辑运算符 标量值

fzero中的错误(第306行)

elseif~isfinite(fx)| | ~isreal(fx)


知道我为什么会收到这个错误消息吗?

我猜,在搜索解决方案的过程中,fzero试图在a=0时计算函数,导致无穷大。要检查是否存在这种情况,请查看是否可以将优化参数“display”设置为“iter”,或者在您的Matlab版本中设置类似的参数。否则,您只需将函数移动到单独的m文件,并在第一行调用disp(a)。这样,您将能够看到fzero正在做什么,以及a的哪个值导致了问题

什么是
diff
?因为
diff
计算数组中相邻值之间的差异。单值数组中的值之间的差异为“不存在”或
[]
,因此
diff(gamma(a))
[]
。这使得
有趣(a)
返回
[]
a
是单个值时,此
fzero
失败。实际上,您的
fun
仅为单个值定义,因此它总是返回
[]
如果您所指的
diff
是gamma函数的导数,请查看Matlab函数
psi
。你可以用它来计算伽马的导数。但因为我们不知道你想做什么,这只是一个猜测。我正在看这个页面:。这就是为什么我认为diff是函数的微分。所以我想要的是点a处的伽马导数除以伽马。我觉得这就是psi(a)的含义。我把diff(gamma(a))/gamma(a)改为psi(a)。谢谢:)