4 views (last 30 days)

Show older comments

Hi

I would like to numerically compute the integral of a parametrized function to use it as a function of the parameter. Is this possible? (I know it works with a simple integral, but in the Help folder of integral3, they assign a value to the parameter BEFORE computing the integral so they do not get a function of the parameter in the end).

My function is the following one:

fun1 = @(k,e,x,y,z)((e.*psf(x,y,z)).^k).*exp(-e.*psf(x,y,z))/factorial(k)

Where psf is a function of x, y , z: @(x,y,z)exp(-2*(x.^2+y.^2)-2*z.^2) (a 3D Gaussian)

I would like to get the triple integral of fun1 between the limits -100 and 100 for x,yamd z (for example; the best woul be for me to be able to tune the limits of the integral) and use it as a function of k (which is a natural integer), to plot it for various values of e.

Thanks in advance

Bill

Mike Hosea
on 7 May 2015

Something like this?

psf = @(x,y,z)exp(-2*(x.^2+y.^2)-2*z.^2);

fun1 = @(k,e,x,y,z)((e.*psf(x,y,z)).^k).*exp(-e.*psf(x,y,z))/factorial(k);

% Make a function that takes a scalar k and a scalar e and returns the

% integral. Can use -100,100 limits (faster), or expressions involving k.

% Can use different tolerances.

scalar_k_scalar_e_fun = @(k,e)integral3(@(x,y,z)fun1(k,e,x,y,z),-inf,inf,-inf,inf,-inf,inf,'Abstol',1e-4,'RelTol',1e-3);

% Make the latter function work with an array input for e, to facilitate

% plotting.

scalar_k_array_e_fun = @(k,e)arrayfun(@(e)scalar_k_scalar_e_fun(k,e),e);

e = 0:0.1:1;

k = 3:5;

q = zeros(length(k),length(e));

for i = 1:length(k)

q(i,:) = scalar_k_array_e_fun(k(i),e);

end

hold on

for i = 1:length(k)

plot(e,q(i,:));

end

hold off

Walter Roberson
on 6 May 2015

No, you cannot do that numerically. There is a possibility that you could do it symbolically, but it would be common that no closed-form integral existed.

At the time you do numeric integration, all variables must be assigned particular values, with the particular x, y, z to integrate at being the only free variables. There is no way to produce a formula out of numeric integration. And that's what you seem to be wanting to do, produce a formula that has k as a free variable. If you want a formula output, then you need symbolic integration.

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

Start Hunting!