- 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
    14 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Marilou
      
 le 8 Oct 2019
  
    
    
    
    
    Réponse apportée : ERTIZA HOSSAIN SHOPNIL
 le 19 Août 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
2 commentaires
  Renato SL
      
 le 8 Oct 2019
				A few things:
Réponse acceptée
  David K.
      
 le 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);
Plus de réponses (1)
  ERTIZA HOSSAIN SHOPNIL
 le 19 Août 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 commentaires
Voir également
Catégories
				En savoir plus sur Matrix Indexing dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!