Borrar filtros
Borrar filtros

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

2 visualizaciones (últimos 30 días)
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

Respuesta aceptada

Stephen23
Stephen23 el 22 de Mayo de 2017
Editada: Stephen23 el 24 de Mayo de 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 comentarios
Wasi von Deutschland
Wasi von Deutschland el 24 de Mayo de 2017
I really appreciate your effort

Iniciar sesión para comentar.

Más respuestas (2)

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

Iniciar sesión para comentar.


Andrei Bobrov
Andrei Bobrov el 24 de Mayo de 2017
Editada: Andrei Bobrov el 24 de Mayo de 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
>>

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by