Find the first element that satisfy a condition in a vector

5 次查看(过去 30 天)
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
  6 个评论

请先登录,再进行评论。

采纳的回答

Andrei Bobrov
Andrei Bobrov 2019-3-20
编辑:Andrei Bobrov 2019-3-20
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 个评论
dpb
dpb 2019-3-20
I'm guessing if OP turns this one in, the instructor eyebrows will raise -- or at least they should! :)

请先登录,再进行评论。

更多回答(1 个)

Sritama Mitra
Sritama Mitra 2020-9-6
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

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by