Encontrar picos y valles locales en una serie temporal usando Matlab

Estoy usando el siguiente código para calcular los picos en una serie de datos de varios activos. El pico se define como cualquier punto en la serie de tiempo que es mayor que sus puntos vecinos. Según el número de picos, calculo una puntuación en el código como se muestra a continuación. Input_args tiene este formato y rc tiene el tamaño de input_args. Este código funciona bien pero toma mucho tiempo cuando lo llamo a través de activos para series de tiempo largas. Es su forma de hacer que este código sea más eficiente. Estoy buscando una solución a través de la cual pueda hacer una matriz lógica para identificar los puntos en series de tiempo que satisfacen la condición de ser un pico y luego aislarlos para calcular la puntuación.

Data:-
1
0.997
0.979
0.952
0.935
0.942
0.987
1.027
1.036
1.049

function [maxhill] = hill_calc(input_args,rc)
for i=2:rc(1)-1    
    if and(input_args(i)>input_args(i+1),input_args(i)>input_args(i-1))
    output_args_hills(i-1) = 2*input_args(i)-input_args(i+1)-input_args(i-1);
    else output_args_hills(i-1) = NaN;
    end
end
maxhill = max(output_args_hills);   
end

Respuestas a la pregunta(2)

Su respuesta a la pregunta