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!

 Accepted Answer

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 Comments

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!

Sign in to comment.

More Answers (0)

Products

Asked:

on 11 Sep 2022

Edited:

on 11 Sep 2022

Community Treasure Hunt

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

Start Hunting!