matlab loops/if statements help for a beginner

8 ビュー (過去 30 日間)
Marilou
Marilou 2019 年 10 月 8 日
回答済み: ERTIZA HOSSAIN SHOPNIL 2020 年 8 月 19 日
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 件のコメント
Renato SL
Renato SL 2019 年 10 月 8 日
A few things:
  1. 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.
  2. You may need to recheck the elseif statement. I think what you want is <= (less than or equal to)
  3. You need a third end, which is for the function.
Marilou
Marilou 2019 年 10 月 8 日
thank you very much!!

サインインしてコメントする。

採用された回答

David K.
David K. 2019 年 10 月 8 日
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);
  1 件のコメント
Marilou
Marilou 2019 年 10 月 8 日
thank you a lot!!

サインインしてコメントする。

その他の回答 (1 件)

ERTIZA HOSSAIN SHOPNIL
ERTIZA HOSSAIN SHOPNIL 2020 年 8 月 19 日
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

カテゴリ

Help Center および File ExchangeFunction Creation についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by