Find the first element that satisfy a condition in a vector
6 views (last 30 days)
Show older comments
Hello! I have a homework: if v is [1 2 3 4 5 4 3 2 1] and n is 3, it will find 4 5 and 4 because their sum of 13 is the largest of any 3 consecutive elements of v. The function returns summa, the sum as the first output argument and index, the index of the first element of the n consecutive ones as the second output.
for example
- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],3)
- summa = 13
- index = 4
- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],1)
- summa = 5
- index = 5
- [summa, index] = max_sum([1 2 3 4 5 4 3 2 1],9)
- summa = 25
- index = 1
Then I have written the code. The summa Part is correct but the index part ist wrong. index is always equal to v(k-n+1). Could someone give me some idea?
Here is the result of my code:
- max_sum([1 2 3 4 5 4 3 2 1],1)
- summa =5
- index =1
function [summa,index] = max_sum(v,n)
k = length(v);
a = zeros(1,k-n+1);
if isscalar(n) == 1 && n > 0 && n == round(n)
if n <= k
for ii = 1:(k-n+1)
b = sum(v(ii:ii+(n-1)));
a(ii) = b;
summa = max(a);
end
index = v(ii);
else
summa = 0;
index = -1;
end
else
fprintf('wrong');
end
Accepted Answer
Andrei Bobrov
on 20 Mar 2019
Edited: Andrei Bobrov
on 20 Mar 2019
function [summa, index] = max_sum(A,n)
B = movsum(A(:),[0 n-1]);
summa = max(B);
index = find(summa == B);
end
or without movsum:
function [summa, index] = max_sum(A,n)
B = A((1:n) + (0:numel(A)-n)');
summa = max(B);
index = find(summa == B);
end
1 Comment
dpb
on 20 Mar 2019
I'm guessing if OP turns this one in, the instructor eyebrows will raise -- or at least they should! :)
More Answers (1)
Sritama Mitra
on 6 Sep 2020
function [summa,index]=max_sum(v,n)
k=length(v);
index=ones(1,1);
if n<=k
for i=1:(k-n+1)
b=sum(v(i:i+n-1));
a(i)=b;
summa=max(a);
end
x=find(a==summa);
[o,p]=size(x);
if p~=1
index=x(1);
else
index=x;
end
else
summa=0;
index=-1;
end
end
0 Comments
See Also
Categories
Find more on Loops and Conditional Statements 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!