integral2 error message
Show older comments
Suppose I use
D=120, A=3,C=1
pdf = @(x,y) D*power(x,A)*power(1-y,C);
integral2(pdf, 0, 1, 0, 1)
(note that this pdf is defined on {X<Y})
then I get an error message
Error in ABC>@(x,y)D*power(x,A)*power(1-y,C)
Error in integral2Calc>integral2t/tensor (line 237)
Z1 = FUN(X(VTSTIDX),Y(VTSTIDX)); NFE = NFE + 1;
Error in integral2Calc>integral2t (line 55)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 9)
[q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 106)
Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
Error in UPA (line 85)
integral2(pdf, 0, 1, 0, 1)
Please advise.
4 Comments
Torsten
on 28 Mar 2018
Note that your function is separable such that
int = D*integral(@(x)x.^A,0,1)*integral(@(y)(1-y).^C,0,1)
Best wishes
Torsten.
alpedhuez
on 28 Mar 2018
Torsten
on 29 Mar 2018
D=120;
A=3;
C=1;
fun = @(x,y) D*x.^A.*(1-y).^C;
ymin = @(x) x;
q = integral2(fun,0,1,ymin,1)
Best wishes
Torsten.
alpedhuez
on 29 Mar 2018
Answers (1)
Walter Roberson
on 28 Mar 2018
"The function fun must accept two arrays of the same size and return an array of corresponding values. It must perform element-wise operations."
However, the code line
pdf = @(x,y) D*power(x,A)*power(1-y,C);
does not do that. It does not do element-wise operations, and it fails if the two arrays do not happen to be square (which they typically are not.)
Remember that the * operator in MATLAB is algebraic matrix multiplication, not element-wise multiplication. Element-wise multiplication is the .* operator.
7 Comments
alpedhuez
on 28 Mar 2018
Steven Lord
on 28 Mar 2018
A and C are scalars by the way you defined them. The x and y inputs with which integral2 calls your function may not be scalars. As Walter quoted from the documentation, with some emphasis added:
"The function fun must accept two arrays of the same size and return an array of corresponding values. It must perform element-wise operations."
integral2 may call your function with scalars. It may call your function with non-scalar vectors. I don't think it will call the function with matrices due to the way it's implemented, but if you've used element-wise operations like .*, ./, .^, etc. it shouldn't matter if it does now or at some point in the future.
alpedhuez
on 28 Mar 2018
Steven Lord
on 28 Mar 2018
See the "Integrate Triangular Region with Singularity at the Boundary" example on the integral2 documentation page. It shows how to compute the integral over a non-rectangular region.
alpedhuez
on 28 Mar 2018
Walter Roberson
on 28 Mar 2018
For X<Y you should reverse the order of integration,
pdf = @(y,x) D*power(x,A)*power(1-y,C);
and then use integral2() with
integral2(pdf, 0, 1, 0, @(y) y)
alpedhuez
on 28 Mar 2018
Categories
Find more on Solver Outputs and Iterative Display in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!