【发布时间】:2017-06-24 21:24:02
【问题描述】:
我正在尝试在 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)
知道为什么我会收到此错误消息吗?
【问题讨论】:
-
diff对你来说是什么?因为diff计算数组中相邻值之间的差异。 1 值数组中的值之间的差异是“不存在”或[],因此diff(gamma(a))是[]。当a是单个值时,这使得fun(a)返回[],这fzero失败。实际上你的fun只为单个值定义,所以它总是返回[] -
如果您所说的
diff是伽马函数的导数,那么请查看 Matlab 函数psi。您可以使用它来计算 Gamma 的导数。但由于我们不知道您要做什么,这只是一个猜测。 -
我在看这个页面:se.mathworks.com/help/symbolic/differentiation.html。这就是为什么我认为 diff 是函数的微分。所以我想要的是伽玛在点a处的导数除以伽玛。我似乎这就是 psi(a) 是什么。我将 diff(gamma(a))/gamma(a) 更改为 psi(a)。谢谢:)