2017-02-04 9 views
0

У меня есть функция плотности f_N, которая определяется следующим образом (K_nu(z) является модифицированная функция Бесселя):Интеграция функции на MATLAB

enter image description here

Я хочу, чтобы вычислить следующий интеграл для каждого значения N:

enter image description here

Ниже приводится реализация выше в MATLAB.

for N=1:100 
    syms z 
    f [email protected](z) (1/(gamma(N)*sqrt(pi))*(z/2).^(N-0.5).*besselk(0.5-N,z)); 
    g = @(z) f(z).*log(f(z)); 
    val=integral(g,0,Inf); 

Но когда я запускаю приведенный выше код, он всегда возвращался NaN для varoious значений N со следующим предупреждением:

Warning: Infinite or Not-a-Number value encountered 

Может кто-то предложить простой способ сделать это или избежать этой проблемы?

+0

замените '^' на '. ^' И сообщите нам, что произойдет. –

+0

Я получаю эту ошибку: 'Ошибка использования * Размеры внутренней матрицы должны совпадать.' – pikachuchameleon

+0

Вам также нужно заменить '*' на.. * '. Эта точка такова, что операции являются элементарными –

ответ

0

Я не думаю, что вы делаете то, что думаете, что делаете. Ваше объявление z как символа будет переопределено определением дескриптора функции. Это означает, что интеграл не является символическим, а является числовым. Итак, вам просто нужно отказаться от нотации функции «@ (z)» и сделать интеграл символически ...

Мое предположение, без тщательного анализа этого, заключается в том, что одна из точек в вашем домене интеграции [0, inf] дает значение f (x) = inf, что разрушит метод цифровой интеграции, но, возможно, не символический.

+0

Но мне нужно числовое значение интеграла, а не символьного. – pikachuchameleon

+0

Да. Я это понимаю. Однако в этом случае символический интеграл должен просто оцениваться с константой –

+0

Например, если мы попытаемся интегрировать cos (t) из t = 0 ... pi, вы получите некоторое число. Но вы можете прийти к этому числу два пути ... либо вы можете интегрировать его символически, чтобы получить точное решение, либо численно получить приблизительный –