- m = size(v); If want you want is the length of the vector, you may want to use m = length(v) instead. Otherwise, keep it, but then on the next operations, use m(2) instead since m contains both width & length of v.
- You may need to recheck the elseif statement. I think what you want is <= (less than or equal to)
- You need a third end, which is for the function.

# matlab loops/if statements help for a beginner

7 views (last 30 days)

Show older comments

Marilou
on 8 Oct 2019

Answered: ERTIZA HOSSAIN SHOPNIL
on 19 Aug 2020

Hello!I know that my code is totally wrong, but since i do not have a teacher I would like some help, in order to learn to think correctly. I have to do this exercise Write a function called max_sum that takes v, a row vector of numbers, and n, a positive integer as inputs. The function needs to find the n consecutive elements of v whose sum is the largest possible. In other words, 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. If multiple such sequences exist in v, max_sum returns the first one. 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. If the input n is larger than the number of elements of v, the function returns 0 as the sum and -1 as the index.

This is my code.

function [summa,index]=max_sum(v,n)

m=size(v);

if n>m

summa=0;

index=-1;

elseif n<- m

for v1=v(1:n-1:m)

summa=sum(max(v1));

index=v1(1);

end

end

### Accepted Answer

David K.
on 8 Oct 2019

So problem 1 is that size is outputting a vector and not a single value. It outputs both dimensions so for your example m is [1 9] which will not work in the if statements as written. Since you know v is a vector then the easiest change here is to change that line to

m = length(v); % outputs 9, the longest dimension

2) in your elseif you have n<-m which makes no sense. I expect you might have meant n<=m but that is really unnecessary anyways and you can remove that entirely to just be an else statement.

3) I do not know what you are trying to do with

v1=v(1:n-1:m)

but I do not think it will work. I would do it as such:

else

summa = 0;

for v1=1:m-n+1 % v1 will loop through 1 2 3 4 5 6 7 in the example

if summa < sum(v(v1:v1+n-1)) % this will sum the 3 consecutive values and check if it is larger than the previous largest summa

summa = sum(v(v1:v1+n-1)); % save the sum as summa

index=v1:v1+n-1; % save the indices that made it

end

end

end

For index do you want the output to be the actual indices [4 5 6] that the largest values occur or the largest values. If you want the largest values and not the indices simply replace the line with this:

index=v(v1:v1+n-1);

### More Answers (1)

ERTIZA HOSSAIN SHOPNIL
on 19 Aug 2020

function [summa,index]= max_sum(v,n)

m=length(v);

if m<n

summa=0;

index=-1;

else

summa = 0;

for i=1:m-n+1

if summa < sum(v(i:i+n-1))

summa = sum(v(i:i+n-1));

index=i;

end

end

end

end

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!