# I am trying to write a function that takes both an input vector and scalar (v and n respectively). It needs to output the maximum value of the sum of n consecutive integers of v, as well as the index of the first term in v.

13 views (last 30 days)
James Metz on 18 Mar 2020
Answered: James Metz on 18 Mar 2020
I am trying to write a function that takes both an input vector and scalar (v and n respectively). It needs to output the maximum value of the sum of n consecutive integers of v, as well as the index of the first term in v.
Here is an example of how the function should work:
>> [total ind] = maxval([1 2 3 4 5 4 3 2 1],3)
total = 13
ind = 4
Here is the code that I have so far:
I do not understand how to get the function to replace a current maximum with a newly calculated larger maximum. I'm also confused on how to find the index and how to construct the "else" statement.
function [total, ind] = maxval(v, n)
total = 0;
ind = 0;
for a = 1:length(v)
for b = a:(a+n)
if sum(v(b)) > v % at this point im confused :/
total = sum(v(b));
ind = v(a);
else
total = sum(v(b))
end
end
end
end

Ameer Hamza on 18 Mar 2020
Edited: Ameer Hamza on 18 Mar 2020
There is no need to use a for loop.
v = [1 2 3 4 5 4 3 2 1];
n = 3;
sums = movsum(v, n, 'Endpoints', 'discard');
[~, idx] = max(sums);
max_sum = sums(idx);
James Metz on 18 Mar 2020
Thanks so much for all your help!

James Metz on 18 Mar 2020
For anyone still confused by the above answer, here is the complete code:
function [max_sum, idx] = maxval(v, n)
sums = movsum(v, n, 'Endpoints', 'discard');
[~, idx] = max(sums);
max_sum = sums(idx);
end