Asked by Christopher Kodama
on 29 Apr 2013

I'm trying to work with integrals that are functions of one of their limits:

For example,

phi = @(x) quad(@(L) besseli(1, (1+L)/(1-L)), 0, x);

What I'm trying to do is evaluate phi over an array of values, like:

phi([1,2,3,4]); %ERROR quad(@(L) besseli(1, (1+L)/(1-L)), 0, [1,2,3,4]); %ERROR

but these return errors. I could do this in a for loop, like:

nums=[1,2,3,4]; for(k=1:4) phi_eval = phi(nums(k)); end

but I was wondering if there was a better way to do things. Is there a no-for-loops way of doing this?

*No products are associated with this question.*

Answer by Shashank Prasanna
on 29 Apr 2013

Accepted Answer

Christopher, I can't run the loop as well. But phi([1,2,3,4]) will certainly not work because the vector is being passed to quad directly as limits which is wrong syntax for quad.

You can try the following:

arrayfun(phi,[1,2,3,4])

Leo Simon
on 11 Feb 2014

I too would like to specify vector valued integration limits. If anybody from mathworks is listening could you please respond? This should be really easy to implement I imagine, and hopefully will be in the next release?

Mike Hosea
on 10 Mar 2014

Please go to my profile. Where it says "email", click on "contact Mike Hosea" and tell me about your use cases for array-valued limits. If we're talking **generic** array limits, where there is no *a priori* relationship between the different elements of the limits, then no gain in efficiency can be had over writing a loop. E.g.

Q = zeros(size(a)); for k = 1:numel(Q) Q(k) = integral(f,a(k),b(k)); end

For scalar-valued integrations, that can also be accomplished efficiently with an application of arrayfun, e.g.

Qarray = @(a,b)arrayfun(@(ak,bk)integral(f,ak,bk),a,b); Q = Qarray(a,b);

However, if we are talking about table-building, where the limits represent a grid, then efficiency improvements are possible. The latter use case might be accomplished by some other means, however, such as providing scalar limits and a list of output points for the integrals over partial regions.

Ashish Bhatt
on 10 Apr 2017 at 8:40

it works with both array limits as well:

phi = matlabFunction(int(x^2,x,a,b)); arrayfun(phi,vec1,vec2)

Log in to comment.

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.