Azzera filtri
Azzera filtri

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

2 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

Stephen23
Stephen23 il 22 Mag 2017
Modificato: Stephen23 il 24 Mag 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 Commenti

Accedi per commentare.

Più risposte (2)

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

Accedi per commentare.


Andrei Bobrov
Andrei Bobrov il 24 Mag 2017
Modificato: Andrei Bobrov il 24 Mag 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!

Translated by