Find the first element that satisfy a condition in a vector
Mostrar comentarios más antiguos
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 comentarios
dpb
el 19 de Mzo. de 2019
You don't set index until after the loop finishes so ii is always the max it takes on in the loop...
Would be easier to compute all the sums first, then figure out which one of those is the winner...
Points for having "shown your work!" and having made the effort...
paul mary
el 20 de Mzo. de 2019
paul mary
el 20 de Mzo. de 2019
paul mary
el 20 de Mzo. de 2019
See also earlier question (different OP):
Eva Petrossova
el 28 de Mzo. de 2019
Hey, I can't manage with it, how did you do ?
Respuesta aceptada
Más respuestas (1)
Sritama Mitra
el 6 de Sept. de 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
Categorías
Más información sobre Matrix Indexing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!