Find the first element that satisfy a condition in a vector
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
paul mary
am 19 Mär. 2019
Beantwortet: Sritama Mitra
am 6 Sep. 2020
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
Akzeptierte Antwort
Andrei Bobrov
am 20 Mär. 2019
Bearbeitet: Andrei Bobrov
am 20 Mär. 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 Kommentar
dpb
am 20 Mär. 2019
I'm guessing if OP turns this one in, the instructor eyebrows will raise -- or at least they should! :)
Weitere Antworten (1)
Sritama Mitra
am 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 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!