2015-04-30 7 views
2

Мне нужно найти предел интеграла численным способом, зная результат этого интеграла. Что мне нужно решить это:Решите для интегрального предела

Integral equation to solve

Как вы можете видеть, что это неполная бета-функция. Я знаю a, b и c. И интегральные лимиты от 0 до x. Мне нужно найти x.

+0

Добро пожаловать в StackOverflow. Как вы можете видеть, этот сайт не поддерживает TeX/LaTeX. Вы можете улучшить свой вопрос, заменив кодированную формулу на изображение. – horchler

ответ

2

Функция 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) 
+0

Спасибо за ваш быстрый ответ. На самом деле я не могу использовать функцию betainc, поэтому я должен сделать это, следуя определению. Будет ли такая же процедура? –

+0

См. Редактирование. Я думаю, что на самом деле это должно быть «бета (a, b) * betainc (X, a, b)», а также определение «betainc» в Matlab. – David

+0

Привет, я должен еще раз поблагодарить вас, используя бета-версию и betainc, результат - именно то, что я ожидал (вы были прав насчет умножения бета-версии (a, b)). Но использование символической алгебры дает мне эту ошибку '>> matlabFunction (int (t^(v2/2-1) * (1-t)^(v1/2-1), t, 0, x) -5); Ошибка при использовании symengine> makeFhandle (строка 109) Ошибка: несбалансированные или неожиданные скобки или скобки. «Надеюсь, вы можете мне помочь. –