xenter=[0.1,0.2,0.4,0.9,1.2,1.5,1.6,1.8,2.1,2.7,2.9,3.5]
yenter=[0.42,0.407,0.33,0.222,0.245,0.283,0.271,0.256,0.256,0.295,0.327,0.327]
def polinnewton (u,y):
def divide(x):
if len(x)==1:
return y[0]
if len(x) ==2:
return((y[u.index(x[1])]-y[u.index(x[0])])/(x[1]-x[0]))
else:
return ((divide(x[1:])-divide(x[:-1]))/(x[-1]-x[0]))
z=[divide(u)]
print(z)
for i in range(1,len(u)):
z.append(divide(u[:-i]))
print(z[-1])
z.reverse()
def counting (p):
c=[]
for i in range(len(z)):
b=1
for j in range(i):
b=b*(p-u[j])
c.append(b*z[i])
return sum(c)
print('table of values')
yts =[]
for n in range(1,int(xenter[-1]*10+1)):
o=n/10
gh=counting(o)
yts.append(gh)
print(gh)
sum=0
for ty in range(len(xenter)):
sum +=(counting(xenter[ty])-yenter[ty])
print(sum)
polinnewton(xenter,yenter)