integral2 error message
古いコメントを表示
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
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
2018 年 3 月 28 日
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
2018 年 3 月 29 日
回答 (1 件)
Walter Roberson
2018 年 3 月 28 日
"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
2018 年 3 月 28 日
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
2018 年 3 月 28 日
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
2018 年 3 月 28 日
Walter Roberson
2018 年 3 月 28 日
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
2018 年 3 月 28 日
カテゴリ
ヘルプ センター および File Exchange で Solver Outputs and Iterative Display についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!