# +----------------------------------------------------+
# |                  Lekce 3 - demo 3                  |
# +----------------------------------------------------+
# Jako demo 2, ale na Chebychevove gridu

#inticializace modulu "Turtle graphics"
import turtle
x1=-3.0
x2=3.0
turtle.setworldcoordinates(x1*1.1,-0.5,x2*1.1,1.5)
turtle.hideturtle()
turtle.delay(0)
turtle.penup()

#Interpolovana funcke
def f(t):
    return 1.0/(1.0+t*t)

#Konstrukce Chebychevovy site a vypocet funce f na ni
n=36
from math import cos
from math import pi
x=[0.5*(x1+x2+(x2-x1)*cos((2*t+1)/(n+1)*pi/2)) for t in range(n+1)]
y=[f(t) for t in x]

#Vykresleni bodu site
turtle.color('red')
for i in range(n+1):
    turtle.goto(x[i],y[i])
    turtle.dot()

#Vypocet Lagrangeovy interpolace AN-algoritmem
def Aitken_Neville(t):
    p=list(y)
    for m in range(1,n+1):
        for i in range(n+1-m):
            p[i]=((t-x[i+m])*p[i]+(x[i]-t)*p[i+1])/(x[i]-x[i+m])
    return p[0]

#Vykresleni bodu interpolacniho polynomu
np=1000
turtle.color('blue')
turtle.goto(x1*1.1,Aitken_Neville(x1*1.1))
turtle.pendown()
for i in range(np):
    t=(x1+(x2-x1)*i/np)*1.1
    turtle.goto(t,Aitken_Neville(t))

