Filter löschen
Filter löschen

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

2 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Stephen23
Stephen23 am 22 Mai 2017
Bearbeitet: Stephen23 am 24 Mai 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 Kommentare

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

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

Melden Sie sich an, um zu kommentieren.


Andrei Bobrov
Andrei Bobrov am 24 Mai 2017
Bearbeitet: Andrei Bobrov am 24 Mai 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