Matlab中的4D积分

时间:2019-06-29 14:08:52

标签: matlab matlab-cvst

我正尝试使用包含4个相关随机变量的方程式使用MATLAB评估积分,因此积分的边界不是恒定的。

有2个指数pdf,2个其他超指数和1个Reyleigh 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必须是浮点标量。

numerical_int> @(w)integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax)中的错误

integrateCalc / iterateScalarValued中的错误(第314行)                 fx = FUN(t);

integrateCalc / vadapt中的错误(第132行)             [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

integrateCalc中的错误(第83行)         [q,errbnd] = vadapt(@ AToInfInvTransform,interval);

积分错误(第88行) Q = integerCalc(fun,a,b,opstruct);

numerical_int错误(第28行) Q =积分(@(w)积分3(fun,xmin,xmax,ymin,ymax,zmin,zmax),wmin,wmax);

1 个答案:

答案 0 :(得分:3)

  • integral3()要求 all (所有) 下界 真实 号码
  • int()不需要,但是需要使用 syms函数 代替 函数 处理
  • 对于 逐个元素 计算,请使用 .运算符,然后使用 有关的运营商like
1)     * ---> .*           2)     / ---> ./                3) ^ ---> .^
  

阅读this,了解有关如何将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