multi-variable function, sum over one variable

5 views (last 30 days)
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)

Voss
Voss on 3 May 2022
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});
1 2 3 4 2 4 6 8 3 6 9 12 2000 4000 6000 8000 4000 8000 12000 16000 6000 12000 18000 24000
% 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)
result = 3×4
2001000 4002000 6003000 8004000 4002000 8004000 12006000 16008000 6003000 12006000 18009000 24012000
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
Nicolas Couture
Nicolas Couture on 3 May 2022
To elaborate, f is the solution of a differential equation I solved analytically with a Fourier series
The issue I am running into is that when I use sum, matlab is summing over z or t instead of n. I'm trying to keep my result as a function handle since I need this function to solve another differential equation, but get an error when trying to plot f(z,t) while keeping one of z/t constant, e.g.
plot(z,f(z,0))
% Error: Vectors must be the same length.
which leads me to believe the wrong variable is being summed over.
Walter Roberson
Walter Roberson on 3 May 2022
The second parameter to sum() can be the dimension to sum over.

Sign in to comment.

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!