最佳答案
fzero
函数可以求解各种非线性方程。
首先,计算不完全 beta 函数作为 X
的函数(我减去了 c
因为我们想要找到使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);
现在使用 fzero
,因为 x
必须介于 0 和 1 之间,我们将解限制在 [0 1]
内:
x=fzero(Y,[0 1])
如果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)
关于matlab - 求解积分极限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978885/