How to find the largest product?
2 ビュー (過去 30 日間)
古いコメントを表示
Hi, I am trying to solve this homework. could anyone please help me to solve this?
* Write a function max_product that takes v a vector and n, a positive integer, as inputs and computes the largest product of n consecutive elements of v. It returns the product and the index of the element of v that is the first term of the product. If there are multiple such products in v, the function must return the one with the smallest starting index. As an example, the following call >> [product, ind] = max_product([1 2 2 1 3 1],3); will assign 6 to product and 3 to ind since the max 3-term product in the input vector is 2*1*3. If v has fewer than n elements, the function returns 0 and -1, respectively.
5 件のコメント
回答 (3 件)
Stephen23
2017 年 11 月 21 日
編集済み: Stephen23
2017 年 11 月 21 日
function [product,ind] = max_product(a,n)
product = 0;
ind = -1;
num = numel(a);
for k = 1:1+num-n
tmp = prod(a(k:k+n-1));
if tmp>product
product = tmp;
ind = k;
end
end
end
And tested:
>> [product, ind] = max_product([1 2 2 1 3 1],3)
product = 6
ind = 3
>> [product, ind] = max_product([1 2 2 1 3 9],3)
product = 27
ind = 4
>> [product, ind] = max_product([1 2 2 1 3 9],9)
product = 0
ind = -1
This could be vectorized, or you could use movprod, but using a loop makes the algorithm clear.
0 件のコメント
Jan
2017 年 11 月 21 日
編集済み: Jan
2017 年 11 月 21 日
And a vectorized version:
function [P, Ind] = max_product(v, n)
X = v((1:numel(v) - n + 1) + (0:n-1).');
[P, Ind] = max(prod(X, 1));
end
6 件のコメント
silvia a
2018 年 7 月 30 日
編集済み: silvia a
2018 年 7 月 30 日
thank you very much for your answer; I have solved it;
I do not know if you guys read these reviews. But I wanted to tell you that your answers and code examples help very much. I am very new to this but trying out your examples really helped me to get started and have a better grasp of things. Thank you!
Andrei Bobrov
2017 年 11 月 21 日
編集済み: Andrei Bobrov
2017 年 11 月 21 日
Op! Everyone solves someone else's homework ... I also want! :)
[product1, ind] = max(prod(hankel(a(1:end-b+1),a(end-b+1:end)),2))
as function:
function [product1,ind]=max_product(a,b)
try
[product1, ind] = max(prod(hankel(a(1:end-b+1),a(end-b+1:end)),2));
catch
product1 = 0;
ind = -1;
end
end
with conv2:
function [product1,ind]=max_product(a,b)
try
[product1, ind] = max(exp(conv2(log(a(:)),ones(b,1),'valid')));
catch
product1 = 0;
ind = -1;
end
end
with movsum
[product1, ind] = max(exp(movsum(log(a),[0, b-1])));
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!