How to calculate the integral of the complicated functions of function handles in a cell?

Hi, I stuck for two days. I don't know how to calculate the integral of the sum of function handles in a cell. Please see the below examples:
f{1} = @(x) x;
f{2} = @(x) x^2;
g = @(x) sum(cellfun(@(y) y(x), f));
integral(@(x) g, -3,3);
Error: Input function must return 'double' or 'single' values. Found 'function_handle'.
PS: please don't change the formula, because this is just an example. My real problem is far more complicated than this. It has log and exp of this sum (integral(log(sum), -inf, inf)). So I can't break them up to do the integral individually and sum the integrals.I need to use sum(cellfun). Thank you.
Version: Matlab R2012a
Can anyone help me? Really appreciate.

2 comentarios

Patrik Ek
Patrik Ek el 1 de Abr. de 2014
Editada: Patrik Ek el 1 de Abr. de 2014
integral(f{1}+f{2}) = integral(f{1}) + integral(f{2}). This is a fundamental theorem of mathematics.
Hi Patrik,
Thanks for the tip. As I said, my problem is comlicated than this example. It is not a sum, it has log and exp. So I can't break them up to do the integral individually and sum the integrals.

Iniciar sesión para comentar.

 Respuesta aceptada

f{1} = @(x) x;
f{2} = @(x) x.^2;
g=@(x) f{1}(x)+f{2}(x)
integral(@(x) g(x), -3,3)

3 comentarios

Thank you Azzi, is there any way that you can work it out using sum? Because in my real problem, the sun-function has dynamic range, i.e., f{1},...f{i}... It depends on another input.
Maybe there is better. for the moment I have one solution using eval
f{1} = @(x) x;
f{2} = @(x) x.^2;
n=numel(f)
d=['g=@(x)' sprintf('f{%d}(x)+',1:n)]
d(end)=[]
eval(d)
integral(@(x) g(x), -3,3)
This is great! I think this is the solution I am looking for. Thanks Azzi.

Iniciar sesión para comentar.

Más respuestas (1)

Here's a method that scales:
f{1} = @(x) x;
f{2} = @(x) x.^2;
f{3} = @(x) exp(x)-log(x);
I = sum(cellfun(@(fun)integral(fun,-3,3),f))
Instead of using cellfun to evaluate the functions, use it to evaluate the integral and sum the integrals as Patrik suggested above.
Note you need to vectorize the functions (. before /*^)

3 comentarios

Hi Sean,
Thanks for the tip. As I said, my problem is comlicated than this example. It is not a sum, it has log and exp. So I can't break them up to do the integral individually and sum the integrals.
Huh?
cellfun(@(fun)integral(fun,-3,3),f)
Evaluates the integral over the range for each function in funs. Do with this info as you wish!
Smashing, you have to be clear, your question was about the sum. If there is something else, please edit your question and make it precise.

Iniciar sesión para comentar.

Categorías

Preguntada:

el 1 de Abr. de 2014

Editada:

el 1 de Abr. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by