Функция fzero
может решать всевозможные нелинейные уравнения.
Во-первых, рассчитать неполную бета-функцию как функцию X
(я вычитали c
, потому что мы хотим, чтобы найти x
, что делает Y=0
):
[email protected](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, мы constrai п решение быть в пределах [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)
Добро пожаловать в StackOverflow. Как вы можете видеть, этот сайт не поддерживает TeX/LaTeX. Вы можете улучшить свой вопрос, заменив кодированную формулу на изображение. – horchler