numerical integraion with array limits

조회 수: 6 (최근 30일)
Wenjuan
Wenjuan 2013년 12월 6일
편집: Sergio Quesada 2018년 6월 1일
I am trying to work out the integrals that are function of one of the limits, and both limits are vectors:
n=1:10;
t=2;
a=(n-1).*t;
b=n.*t;
Q=integral(@(x)lognpdf(b-x,2,1),a,b,'ArrayValued',true);
As a and b must be scalars, so integral won’t work here. Someone suggested using arrayfun in the answers to a similar question in April where only one limit is a vector, how to do this?

채택된 답변

Mike Hosea
Mike Hosea 2013년 12월 6일
편집: Mike Hosea 2013년 12월 6일
Assuming you want each individual integral to be
integral(@(x)lognpdf(b(j)-x,2,1),a(j),b(j))
then
Qab = @(aj,bj)integral(@(x)lognpdf(bj-x,2,1),aj,bj)
Q = arrayfun(Qab,a,b)
You don't have to rename a and b in Qab, as they are "scoped" to be distinct from the previously defined a and b vectors, but I just did it for clarity.
  댓글 수: 4
Wenjuan
Wenjuan 2013년 12월 6일
편집: Wenjuan 2013년 12월 6일
Now I am trying to work out double integral, where the limit of y is a function of x, like
fun=@(x,y)lognpdf(b-x,2,1).*lognpdf(y,3,2);
ymax=@(x) b-x;
Qab=@(a,b)integral2(fun,a,b,0,ymax);
Q=arrayfun(Qab,a,b);
but this returns error
"
Error using -
Matrix dimensions must agree.
Error in @(x)b-x"
Is this because b is a vector?
Mike Hosea
Mike Hosea 2014년 1월 22일
Yes, but the problem is that the value for b is obtained as a snapshot when @(x)b-x is created. You should be able to work around this problem by inlining the creating of ymax, i.e.
ab=@(a,b)integral2(fun,a,b,0,@(x)b-x);

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

추가 답변 (1개)

Sergio Quesada
Sergio Quesada 2018년 6월 1일
편집: Sergio Quesada 2018년 6월 1일
Hi everybody, I'm working on a similar easier case, but with no success... I'm trying to evaluate
liminf=ones(1,20); syms x;
integral(@(x)exp(-a./x.*log(x)),liminf,r)
beeing 'a' an escalar, and 'r' also a 1x20 array. That is, 20 different integrals from 1 to each value of 'r'
It sais:
Error using integral (line 85)
A and B must be floating-point scalars.
Thankyou so much !!

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by