multi-variable function, sum over one variable
Show older comments
I have a function of three variables N(z,t,n). I'd like to sum over only integers of n such that I am left with N(z,t), where z and t can be arrays of any length.
I've tried:
NN = 1:2000;
sum_function = @(z,t) sum(f(z,t,NN));
where f is a previously defined function of @(z,t,n), but this still requires that z and t have the same size as NN.
How do I evaluate this sum properly?
Answers (1)
Maybe something like this
z = 1:3;
t = 1:4;
NN = 1:2000;
% Evaluate f(z,t,n) for each element of NN,
% storing all results in cell array C
C = arrayfun(@(n)f(z,t,n),NN,'uni',0);
% Inspect the first and last elements of C
disp(C{1}); disp(C{end});
% Concatenate all elements of C along the 3rd dimension
% and then sum that 3d matrix along the 3rd dimension.
% This will work as long as all elements of C are the
% same size; whether that's true depends on the
% definition of f.
result = sum(cat(3,C{:}),3)
function out = f(z,t,n)
% Some function where z and t are vectors, n is a scalar.
% In this case, out is a matrix of size numel(z)-by-numel(t),
% but out can be any size as long as its size only depends on
% the sizes of z and t.
out = z(:).*t(:).'.*n;
end
4 Comments
Walter Roberson
on 3 May 2022
I would use a variation on that:
sum_function = @(z,t) sum(arrayfun(@(n)f(z,t,n),NN));
That'll work if f returns a scalar
z = 1:3;
t = 1:4;
NN = 1:2000;
sum_function = @(z,t) sum(arrayfun(@(n)f_scalar(z,t,n),NN));
sum_function(z,t)
But not otherwise
sum_function = @(z,t) sum(arrayfun(@(n)f_non_scalar(z,t,n),NN));
sum_function(z,t)
[Even then, the outputs from f have to be the same size for all n (and if that's not the case then the question doesn't make sense - at least, not to me).]
Of course, without knowing what f is, it's hard to say how general the solution needs to be.
function out = f_scalar(z,t,n)
out = n;
end
function out = f_non_scalar(z,t,n)
out = n*ones(1,10);
end
Nicolas Couture
on 3 May 2022
Walter Roberson
on 3 May 2022
The second parameter to sum() can be the dimension to sum over.
Categories
Find more on Numerical Integration and Differential Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!