2016-04-07 32 views
1

azalmaya bittiği yerde böyle bir dizi tanımlamak verilere sahip bulun: Ben noktalarını güçlü azalan başlar ve biter hesaplanırken ilgileniyorumbir işlev başlar ve

enter image description here

.

enter image description here

Yani benim fonksiyonunun ikinci türevi calcuted ve negatif minimum orada (azalan başlayın) puan ve pozitif maksimum olsun: İşte öyle.

Ama vakaların çoğunda elde neyi benzerdir:

enter image description here

Burada yanlış? Yanlış bir şey yapmıyoruz

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.interpolate import InterpolatedUnivariateSpline 

# set x and y 
y = data_series 
x = range(len(data_series)) 

# interpolation 
f = InterpolatedUnivariateSpline(x, y) 

# gen function points 
new_x = np.linspace(min(x), max(x), num=1000, endpoint=True) 
new_y = f(new_x) 

# calculate second derivative 
y_df1 = np.insert(np.diff(y), 0, 0) 
y_df2 = np.insert(np.diff(y_df1), 0, 0) 

# points where the decrease starts and ends 
# (where the second derivative is minimum and maximum) 
x_dec = np.where(y_df2 == min(y_df2))[0][0] 
x_inc = np.where(y_df2 == max(y_df2))[0][0] 

# plot 
plt.plot(new_x, new_y, 'b', lw=3, alpha=0.7) 
plt.plot(x_dec, f(x_dec), 'ro', ms= 8) 
plt.plot(x_inc, f(x_inc),'ro', ms=8) 
plt.show()   

cevap

2

:

İşte benim piton kodu vardır. Aldığınız grafikteki ilk nokta aslında ilk türevin düşmesinin durduğu noktadır ve böylece ikinci türev sıfır (en yakın) sıfırıdır.

+0

Grafikteki ilk nokta, ikinci türevin sıfıra en yakın olmadığı, ancak asgari (ve negatif bir değer) olduğu yerdir. Bununla birlikte, düşüşün başladığı noktada eğri üzerindeki noktayı yakalamak için herhangi bir yol var mı (50 civarında x olmalıdır)? – Ewybe

+0

Np.where (y_df1 <0) [0] [0] 'gibi bir şey mi kastediyorsunuz? Bu size, 'y' in ilk türevinin negatif olduğu ilk endeksi verir. (Keyfi bir sınır almak için acdr