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

Torsten
Torsten 2018년 3월 28일

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
alpedhuez 2018년 3월 28일
yes but the integral should be on {X<Y}. Please advise.
Torsten
Torsten 2018년 3월 29일
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
alpedhuez 2018년 3월 29일
Thank you.

댓글을 달려면 로그인하십시오.

답변 (1개)

Walter Roberson
Walter Roberson 2018년 3월 28일

0 개 추천

"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

alpedhuez
alpedhuez 2018년 3월 28일
Yes this is what I would like to understand. x, y, A, and C are all scalars. Why will it be a problem?
Steven Lord
Steven Lord 2018년 3월 28일
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
alpedhuez 2018년 3월 28일
I see that the function does not see x and y are scalars at the time of definition. Then how about the restriction to the domain of the integration {X<Y}?
Steven Lord
Steven Lord 2018년 3월 28일
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
alpedhuez 2018년 3월 28일
Let me work on it.
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
alpedhuez 2018년 3월 28일
Thank you very much.

댓글을 달려면 로그인하십시오.

카테고리

제품

태그

질문:

2018년 3월 28일

댓글:

2018년 3월 29일

Community Treasure Hunt

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

Start Hunting!

Translated by