multi-variable function, sum over one variable

9 visualizzazioni (ultimi 30 giorni)
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?

Risposte (1)

Voss
Voss il 3 Mag 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 Commenti
Nicolas Couture
Nicolas Couture il 3 Mag 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 il 3 Mag 2022
The second parameter to sum() can be the dimension to sum over.

Accedi per commentare.

Categorie

Scopri di più su Numerical Integration and Differential Equations in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by