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!

 Akzeptierte Antwort

Torsten
Torsten am 11 Sep. 2022
Bearbeitet: Torsten am 11 Sep. 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 Kommentare

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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by