numerical integraion with array limits

4 Ansichten (letzte 30 Tage)
Wenjuan
Wenjuan am 6 Dez. 2013
Bearbeitet: Sergio Quesada am 1 Jun. 2018
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?

Akzeptierte Antwort

Mike Hosea
Mike Hosea am 6 Dez. 2013
Bearbeitet: Mike Hosea am 6 Dez. 2013
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 Kommentare
Wenjuan
Wenjuan am 6 Dez. 2013
Bearbeitet: Wenjuan am 6 Dez. 2013
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 am 22 Jan. 2014
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);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sergio Quesada
Sergio Quesada am 1 Jun. 2018
Bearbeitet: Sergio Quesada am 1 Jun. 2018
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 !!

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by