Azzera filtri
Azzera filtri

Find the first element that satisfy a condition in a vector

12 visualizzazioni (ultimi 30 giorni)
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 Commenti
Eva Petrossova
Eva Petrossova il 28 Mar 2019
Hey, I can't manage with it, how did you do ?

Accedi per commentare.

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 20 Mar 2019
Modificato: Andrei Bobrov il 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 Commento
dpb
dpb il 20 Mar 2019
I'm guessing if OP turns this one in, the instructor eyebrows will raise -- or at least they should! :)

Accedi per commentare.

Più risposte (1)

Sritama Mitra
Sritama Mitra il 6 Set 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

Categorie

Scopri di più su Loops and Conditional Statements 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