#!/usr/bin/python3

print('Graf interpolacije vrednosti telemetrije z opletanjem - 21.09.2020')

#[cas,meritev]
data = [[1,61.4],[3.2,65.7], [6, 67.87],[9.87,65.3],[12.9,67.2],[15.7,64.9],[17,64.2],[20,63.12],[23.2,62.5],[26, 65.2],[28.6,65.8],[32,63.56]]

def inter(data,izbrani):		#izracun linearne interpolacije
	dolzina=len(data)
	stevec=0
	novi=data[0]
	while stevec<dolzina:
		stari=novi
		novi=data[stevec]
		stevec=stevec+1
		if novi[0]>izbrani:
			stevec=dolzina+99

	razlika=novi[0]-stari[0]
	razdol=izbrani-stari[0]
	razgor=novi[0]-izbrani

	if stevec>dolzina:		#potrebno za najbolj neumne zahteve!
		if razlika>0.0000000001:
			interpolacija=stari[1]*razgor/razlika+novi[1]*razdol/razlika
		else:
			interpolacija=stari[1]
	else:
		interpolacija=novi[1]
	return interpolacija

def blizu(data,izbrani):		#poisci najblizjo vrednost v podatkih
	dolzina=len(data)
	stevec=0
	stari=9999999999999
	while stevec<dolzina:
		novi=data[stevec]
		stevec=stevec+1
		razlika=abs(izbrani-novi[0])
		if razlika<stari:
			stari=razlika
			dobri=novi[1]
	return dobri

import math,random		#zanka za izracun sdev
stevec=0
s1=0
s2=0
while stevec<len(data):
	novi=data[stevec]
	s1=s1+novi[1]/len(data)
	s2=s2+novi[1]*novi[1]/len(data)
	stevec=stevec+1
sdev=math.sqrt(s2-(s1*s1))
print('Tocke: ',len(data),'Srednje kvadratno odstopanje: ',sdev)

def opleta(sdev):		#izracunaj opletanje
	r=random.random()-0.5
	return sdev*r*abs(r) 

zacetek=-10				#zanka za izracun grafov
konec=50
tocke=333
x=[]
y=[]
z=[]
s=[]
izbrani=zacetek
while izbrani<=konec:
	x=x+[izbrani]
	y=y+[inter(data,izbrani)]
	z=z+[blizu(data,izbrani)]
	s=s+[inter(data,izbrani)+opleta(sdev)]
	izbrani=izbrani+((konec-zacetek)/float(tocke))
#	print 'Izbrani cas interpolacije: ',izbrani,' Vrednost interpolacije: ',inter(data,izbrani)

import matplotlib.pyplot as plt		#risanje grafa interpolacije in izvorne funkcije z matplotlib
plt.plot(x,y,'b-',lw=1)
plt.plot(x,z,'r-',lw=1)
plt.plot(x,s,'g-',lw=1)
plt.show()

#konec programa

