Sziasztok,
Periodiszitast kell tesztelnem kulombozo fuggvenyeken. Irtam, egy megoldast (Python-ban) ami ugy nez ki mukodik:
""" Visulation """
import matplotlib.pyplot as plt
""" szamitas """
from numpy import median, mean, greater, less, array as narray, append as nappend
from scipy.signal import argrelextrema
f, sp = plt.subplots(2, sharex=True)
X = [ i for i in range(0,len(fuggveny))]
sp[0].plot( X, fuggveny, c='red' )
def periodic(threshold):
""" fuggveny eltolasa es az eredetihez kepesti kulombbsegenek szamitasa """
diff = []
for i in range(0,len(threshold)):
diff.append( sum(map(lambda x,y: abs(x-y), threshold,threshold[-i:] + threshold[0:-i])))
"""
" A fuggveny szelsoertekeinek szamitasa
"""
localmax = argrelextrema(narray(diff), greater)
localmin = argrelextrema(narray(diff), less)
if len(localmax) > len(localmin) :
periodlen = [ localmax[0][i+1]-localmax[0][i] for i in range(0,len(localmax[0])-1) ]
else:
periodlen = [ localmin[0][i+1]-localmin[0][i] for i in range(0,len(localmin[0])-1) ]
"""
" Eredmeny tesztelese:
" ha tobb mint 4 lehetseges periodosunk van
" elfogadjuk a periodicitast ha a fuggveny szelsoertekek kozotti tavolsag szimetrikusak
"""
if len(periodlen) > 4 :
medianp = median(periodlen)
if ( mean(periodlen) > 0.95*medianp) and (mean(periodlen) < 1.05*medianp):
print "There is periodicity! Length of period: " + str(int(medianp))
""" eredmeny abrazolasa """
sp[1].plot( [ i for i in range(0,len(diff)) ], diff)
return int(medianp)
else:
return periodic(diff)
else:
return 0
periodic(fuggveny)
plt.show()
A kovetkezo kerdeseim lennenek:
* helyese-e? Ugy ertem van-e olyan bemenet ami vegtelen ciklusba kuldi?
* tudtok-e gyorsabb megoldast, az eddigi teszteken elegedet voltam az eredmennyel, de ugy erzem eleg eroforras igenyes, mivel n* kell eltolnunk minden egyes tesztelesnel, igy ha jol lattom n^2 matrix-al dolgozun. Biztos, vagyok benne, hogy van valami gyorsabb algoritmus erre. Statisztikai elemzeshez kell, muszaly rubusztnak lennie.