max_product that t takes v as vector and n as positive integer

1 view (last 30 days)
My code that's not working. Please help
function [prodout,ind] = max_product(A,n)
A=0;
prodout = exp( conv(log(A),ones(1,n),'valid') );
if isreal(A), prodout=real(prodout);
end

Accepted Answer

Stephen23
Stephen23 on 22 May 2017
Edited: Stephen23 on 24 May 2017
Method one: slidefun: Download Jos' excellent FEX submission slidefun, then you just need:
>> max_product = @(v,n)max(slidefun(@prod,n,v,'forward'))
>> [p,x] = max_product([1,2,2,1,3,1],3)
p = 6
x = 3
>> [p,x] = max_product([1,2,3,4,5,6,7,8,9,10], 2)
p = 90
x = 9
Method two: toeplitz:
>> max_product = @(v,n)max(prod(toeplitz(v(n:-1:1),v(n:end)),1));
>> [p,x] = max_product([1,2,2,1,3,1],3)
p = 6
x = 3
>> [p,x] = max_product([1,2,3,4,5,6,7,8,9,10],2)
p = 90
x = 9
  8 Comments

Sign in to comment.

More Answers (2)

Guillaume
Guillaume on 24 May 2017
Edited: Guillaume on 24 May 2017
Another possible way:
slide = toeplitz(v(1:n), v);
[product, ind] = max(prod(slide(:, n:end)));
  3 Comments
Guillaume
Guillaume on 24 May 2017
For some reason, I'd inverted the order of the arguments to toeplitz.
Now fixed.

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 24 May 2017
Edited: Andrei Bobrov on 24 May 2017
max_product = @(A,n)max(exp(conv2(log(A(:)),ones(n,1),'valid')));
use:
>> [value,ii] = max_product([1 2 3 4 5 6 7 8 9 10], 2)
value =
90
ii =
9
>>
or with function hankel:
max_prod_hankel = @(A,n)max(prod(hankel(A(1:n),A(n:end))));
use:
>> [v,ii] = max_prod_hankel([1 2 3 4 5 6 7 8 9 10], 2)
v =
90
ii =
9
>>

Community Treasure Hunt

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

Start Hunting!