4-й интеграл в Matlab - PullRequest
       71

4-й интеграл в Matlab

1 голос
/ 29 июня 2019

Я пытаюсь оценить интеграл, используя MATLAB с уравнением, содержащим 4 связанные случайные величины, таким образом, границы интегралов не являются постоянными.

Есть 2 экспоненциальных PDF-файла и 2 других гиперэкспоненциальных, и 1 CDF Рейли, все умноженные вместе и с (x - y - z).

Я пытаюсь оценить это с помощью интегралаQ = (@ (w) интеграл3 (@ (x, y, z, w), xmin, xmax, ymin, ymax, zmin, zmax), wmin, wmax);

Я получаю ошибкувсегда.это мой код здесь:

u_x = 10; %  rate!
x_th = .3;
sigma = 1.33;
u_y = 10;
u_w = 100;
a= 1;
fun = @(x,y,z,w) (x - y - z )*u_x*exp(-u_x*x)*u_y*exp(-u_y*y)*((a/(a+1))*(a*u_w)*exp(-a*u_w*w)+((1/(a+1))*(u_w/a))*exp(-u_w*w/a))*((a/(a+1))*(a*u_w)*exp(-a*u_w*z)+((1/(a+1))*(u_w/a))*exp(-u_w*z/a))*(1-exp(-x_th/sigma^2))

xmin = @(y)y;
xmax = @(y,w)y + w;
ymin = 0;
ymax = inf;
zmin = 0;
zmax = @(w) w;
wmin = 0;
wmax = inf;

Q = integral(@(w) integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax),wmin,wmax);

СООБЩЕНИЕ ОБ ОШИБКЕ:

Ошибка при использовании целочисленного значения 3 (строка 63) XMIN должен быть скаляром с плавающей запятой.

Ошибка в числовой_int> @(w) integra3 (веселье, xmin, xmax, ymin, ymax, zmin, zmax)

Ошибка в IntegRalc / iterateScalarValued (строка 314) fx = FUN (t);

Ошибка в IntegralCalc/ vadapt (строка 132) [q, errbnd] = iterateScalarValued (u, tinterval, pathlen);

Ошибка в integraCalc (строка 83) [q, errbnd] = vadapt (@ AToInfInvTransform, интервал);

Ошибка в интеграле (строка 88) Q = integraCalc (fun, a, b, opstruct);

Ошибка в numeric_int (строка 28) Q = интеграл (@ (w) Integral3 (Fun, Xmin), Xmax, Ymin, уты, Zmin, Zmax), Wmin, Wmax);

1 Ответ

3 голосов
/ 29 июня 2019
  • integral3() требует все нижние границы , чтобы быть действительное число
  • int() нет, но нужно использовать функцию syms вместо дескриптор функции
  • для поэлементно вычисление с использованием оператора точка ., за которым следует соответствующий оператор как
1)     * ---> .*           2)     / ---> ./                3) ^ ---> .^

Читайте это для получения дополнительной информации о том, как использовать int() для nd интеграл


Код выглядит следующим образом

syms x y z w
u_x = 10; %  rate!
x_th = .3;
sigma = 1.33;
u_y = 10;
u_w = 100;
a= 1;

fun = (x - y - z ).*u_x.*exp(-u_x*x).*u_y.*exp(-u_y.*y)...
    .*((a./(a+1)).*(a.*u_w).*exp(-a.*u_w.*w)+((1./(a+1)).*(u_w./a))...
    .*exp(-u_w.*w./a)).*((a./(a+1)).*(a*u_w)*exp(-a.*u_w.*z)...
    +((1./(a+1)).*(u_w./a))*exp(-u_w.*z./a)).*(1-exp(-x_th./sigma.^2));

xmin = y;
xmax = y + w;
ymin = 0;
ymax = inf;
zmin = 0;
zmax =  w;
wmin = 0;
wmax = inf;

% Integrate along x
intx = int(fun, x, xmin, xmax);

% Integrate along y
intxy = int(intx, y, ymin, ymax);

% Integrate along z
intxyz = int(intxy, z, zmin, zmax);

% Integrate along w
intxyzw = int(intxyz, w, wmin, wmax);

value = vpa(intxyzw, 3);

% 2.14e-5
...