численное интегрирование MATLAB в мою функцию дает мне много чисел, а не одно число

Численная интеграция MATLAB в мою функцию дает мне много чисел, а не одно число. Я плохо разбираюсь в MatLaB, поэтому не знаю в чем причина. Есть ли кто-нибудь, кто может мне помочь?

это моя функция.

function [ y ] = SucP( l,a,P,D,r,th );

d=2./a;
Ehd=integral(@(x)x.^d.*exp(-x),0,inf);
gam=gamma(1-d);
C1=1./(1+th.*(r/D).^a);
C2=1./(1+th.*P.*(r/D).^a);
hypgeo1=hypergeom([1,2],[2-d],th.*(r./D).^a.*C1);
hypgeo2=hypergeom([1,2],[2-d],th.*P.*(r./D).^a.*C2);
y=exp(-l.*pi.*(th).^d.*r.^2.*P.^d.*Ehd.*gam-C1+C2+th./(1-d).*r.^2.*(r./D).^(a-2).*(C1.^2.*hypgeo1-P.^d.*C2.^2.*hypgeo2));

end

И я хочу интегрировать

fun=@(l,a,P,D,r,z)SucP(l,a,P,D,r,2.^z-1);
y=integral(@(z)fun(l,a,P,D,r,z),0,inf);

Но эта интеграция дает мне следующий результат.

Columns 1 through 6

   0.999869167524854   0.998589370430984   0.994817933624792   0.987704371328770   0.976976845412355   0.962748430805626

  Columns 7 through 12

   0.945394762911001   0.925627034788835   0.904532141053543   0.883378353636190   0.863363119639727   0.845589211136565 ....

Columns 145 through 150

             NaN                 NaN                 NaN                 NaN                 NaN                 NaN


ans =

   NaN

Есть ли кто-нибудь, кто может мне помочь?


person JYoon    schedule 16.10.2015    source источник
comment
Похоже, ваш вывод представляет собой значения накопительной функции распределения, взятые при различных значениях случайной величины. Если, как я думаю, вы пытаетесь интегрировать функцию плотности вероятности, значение, которое вы ищете, является одним из значений, которые вы получаете на выходе. Я не могу сказать вам, какой из них, если вы не дадите нам свои входные данные   -  person BillBokeey    schedule 16.10.2015
comment
Спасибо за ваш добрый комментарий. Да, функция SucP(l,a,P,D,r,2^z-1) есть Prob(X›z) для некоторой случайной величины X. Итак, я хочу вычислить математическое ожидание X. И (l,a ,P,D,r) является параметром. Я использовал (0.5,3,0.2,10,2) в качестве параметра.   -  person JYoon    schedule 16.10.2015
comment
Ok. Если я обозначу f функцию плотности вероятности, связанную с вашей случайной величиной, вы правильно вычисляете интеграл от z до бесконечности f (x) dx. Но что вам нужно, чтобы вычислить математическое ожидание, так это вычислить интеграл от -бесконечности до +бесконечности от x*f(x)dx.   -  person BillBokeey    schedule 16.10.2015
comment
Спасибо за ваш комментарий, но моя теория не ошибочна. моя интеграция означает именно ожидание. Это просто проблема с матлабом, а не с математикой.   -  person JYoon    schedule 16.10.2015


Ответы (1)


Попробуйте что-нибудь вроде:

1) Вы должны избавиться от этих значений NaN. Причина их появления следующая:

Вы пытаетесь интегрировать свою функцию

SucP(l,a,P,D,r,2.^z-1)

С z=0 по infinity. Но при определенном значении z 2^z-1 будет больше, чем самое большое число, с которым может работать Matlab.

Что вам нужно сделать, чтобы избежать этого, так это изменить границы вашей интеграции, чтобы 2^z-1 никогда не превышало realmax (это самое большое значение, которое может обработать MATLAB).

Верхняя граница вашей интеграции будет:

Upperbound=log(realmax)/log(2)-4;

2) Вы должны изменить свою декларацию fun принципа, которую вы декларируете, на:

fun=@(z)SucP(l,a,P,D,r,2.^z-1);

А затем позвоните:

Y=integral(fun,0,log(realmax)/log(2)-4);
person BillBokeey    schedule 16.10.2015
comment
ты прав. После того, как я поставил 100 вместо inf, Matlab дал мне одно число, а не NaN. Но log(realmax)/log(2)-1 не работает. это снова дало мне NaN. - person JYoon; 16.10.2015
comment
Попробуйте с log(realmax)/log(2)-4 - person BillBokeey; 16.10.2015
comment
Я использую MATLAB R2014a. - person JYoon; 16.10.2015
comment
Попробуйте с -4 вместо -1, как я вам говорил - person BillBokeey; 16.10.2015
comment
(проблема в том, что значение может стать еще больше ВНУТРИ функции, в зависимости от параметров (l, alP, D, r), что означает, что нам нужно снова уменьшить максимальное значение) - person BillBokeey; 16.10.2015