Numerical integration with array limits
1 view (last 30 days)
Show older comments
Christopher Kodama
on 29 Apr 2013
Commented: Ashish Bhatt
on 10 Apr 2017
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?
0 Comments
Accepted Answer
Shashank Prasanna
on 29 Apr 2013
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])
6 Comments
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
it works with both array limits as well:
phi = matlabFunction(int(x^2,x,a,b));
arrayfun(phi,vec1,vec2)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!