Why am I getting "incompatible array size error" when I am using only scalars in a nested integration problem

lambda_p=1;
lambda_d=20;
a=0.25;
alpha=3.5;
tau=linspace(0.01,30,5);
cov_prob=zeros(1,length(tau));
g= @(r,s) (1/a).*r.*(abs(r-s)<a);
attenuation= @(r) (abs(r)).^(-alpha);
f= @(u,r,s,tau) (1./(1+tau.*(attenuation(u)./attenuation(r)))) .* g(u,s);
in= @(r,s,tau) integral(@(u) f(u,r,s,tau),r,inf);
CC= @(r,s,tau) exp(-lambda_d.*(1-in(r,s,tau)));
fc= @(r,x,tau) g(r,x).*CC(r,x,tau);
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf);
i2= @(r,tau) integral(@(x) 1-CC(r,x,tau),0,inf);
disp(fc(1,1,1.1)) %works fine
0.0038
disp(i1(1,1.1)) % causing error
Arrays have incompatible sizes for this operation.

Error in solution (line 10)
g= @(r,s) (1/a).*r.*(abs(r-s)<a);

Error in solution (line 12)
f= @(u,r,s,tau) (1./(1+tau.*(attenuation(u)./attenuation(r)))) .* g(u,s);

Error in solution (line 13)
in= @(r,s,tau) integral(@(u) f(u,r,s,tau),r,inf);

Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);

Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);

Error in solution (line 13)
in= @(r,s,tau) integral(@(u) f(u,r,s,tau),r,inf);

Error in solution (line 14)
CC= @(r,s,tau) exp(-lambda_d.*(1-in(r,s,tau)));

Error in solution (line 15)
fc= @(r,x,tau) g(r,x).*CC(r,x,tau);

Error in solution (line 16)
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf);

Error in integralCalc/iterateScalarValued (line 323)
fx = FUN(t).*w;

Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);

Error in solution (line 16)
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf);
for i=1:length(tau)
disp(i);
fcc= @(r) i1(r,tau(i)).*exp(-lambda_p.*i2(r,tau(i)));
i_f= integral(@(r) fcc(r),0,inf);
cov_prob(i)=lambda_d.*lambda_p.*i_f;
end
g,f,in,CC,fc: these functions are returning valid outputs. Error starts origination from functions i1, i2 onwards.
Any help/leads will be greatly appreciated. Thanks!

 Respuesta aceptada

Torsten
Torsten el 11 de Sept. de 2022
Editada: Torsten el 11 de Sept. de 2022
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf,'ArrayValued',true);
i2= @(r,tau) integral(@(x) 1-CC(r,x,tau),0,inf,'ArrayValued',true);
instead of
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf);
i2= @(r,tau) integral(@(x) 1-CC(r,x,tau),0,inf);

3 comentarios

Hi,
Thanks for your quick reply. I made the change. I am encountering a new error.
lambda_p=1;
lambda_d=20;
a=0.25;
alpha=3.5;
tau=linspace(0.01,30,5);
cov_prob=zeros(1,length(tau));
g= @(r,s) (1/a).*r.*(abs(r-s)<a);
attenuation= @(r) (abs(r)).^(-alpha);
f= @(u,r,s,tau) (1./(1+tau.*(attenuation(u)./attenuation(r)))) .* g(u,s);
in= @(r,s,tau) integral(@(u) f(u,r,s,tau),r,inf);
CC= @(r,s,tau) exp(-lambda_d.*(1-in(r,s,tau)));
fc= @(r,x,tau) g(r,x).*CC(r,x,tau);
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf,'ArrayValued',true);
i2= @(r,tau) integral(@(x) 1-CC(r,x,tau),0,inf,'ArrayValued',true);
for i=1:length(tau)
disp(i);
fcc= @(r) i1(r,tau(i)).*exp(-lambda_p.*i2(r,tau(i)));
i_f= integral(@(r) fcc(r),0,inf);
cov_prob(i)=lambda_d.*lambda_p.*i_f;
end
1
Error using integral
Limits of integration must be double or single scalars.

Error in solution (line 13)
in= @(r,s,tau) integral(@(u) f(u,r,s,tau),r,inf);

Error in solution (line 14)
CC= @(r,s,tau) exp(-lambda_d.*(1-in(r,s,tau)));

Error in solution (line 15)
fc= @(r,x,tau) g(r,x).*CC(r,x,tau);

Error in solution (line 16)
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf,'ArrayValued',true);

Error in integralCalc/iterateArrayValued (line 156)
fxj = FUN(t(1)).*w(1);

Error in integralCalc/vadapt (line 130)
[q,errbnd] = iterateArrayValued(u,tinterval,pathlen);

Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);

Error in solution (line 16)
i1= @(r,tau) integral(@(x) fc(r,x,tau),0,inf,'ArrayValued',true);

Error in solution (line 22)
fcc= @(r) i1(r,tau(i)).*exp(-lambda_p.*i2(r,tau(i)));

Error in solution (line 23)
i_f= integral(@(r) fcc(r),0,inf);

Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);

Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 83)
[q,errbnd] = vadapt(@AToInfInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);
Also I was curious to know why were we required to set 'arrayvalued' as true when I am operating only with scalar numbers?
I had to substitute the same for all other integral functions. It worked. Thanks!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Operators and Elementary Operations en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 11 de Sept. de 2022

Editada:

el 11 de Sept. de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by