The fzero
函数可以求解各种非线性方程。
首先,计算不完全 beta 函数作为以下函数X
(我减去了c
因为我们想要找到x
这使得Y=0
):
Y=@(X) beta(a,b)*betainc(X,a,b)-c
或者,不使用内置的betainc
函数,并使用符号代数:
syms t x
Y=matlabFunction(int(t^(a-1)*(1-t)^(b-1),t,0,x)-c);
Now use fzero
, since x
必须在 0 和 1 之间,我们将解限制在[0 1]
:
x=fzero(Y,[0 1])
If fzero
不起作用,尝试的最简单的数值方法是二分搜索。它很简单,而且在这里效果很好,所以为什么不使用它呢。我确实假设Y(x)
单调递增[0 1]
,但我认为情况总是如此。
x=0.5;
xmin=0;
xMAX=1;
tol=1e-12;
numIts=0;
while abs(Y(x))>tol
if Y(x)>0
xMAX=x;
elseif Y(x)<0
xmin=x;
end
x=(xmin+xMAX)/2;
numIts=numIts+1;
if numIts>237 %// If it's not working, stop
disp('Solution has not converged, there is probably no solution in [0,1]')
break
end
end
x
Y(x)