@interact
def _(xexp = input_box(default=[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0], label="Хэксп"),\
yexp = input_box(default=[5.1,10.9,21.1,34.9,53.7,73,103,131.2,160,208], label="Yэксп"),\
p = slider(vmin=1, vmax=10,step_size=1,default=2,label="Степень: ")
):
html("Полиномиальная аппроксимация по методу наименьших квадратов")
n=min(len(xexp),len(yexp))
xexp=vector(xexp)
yexp=vector(yexp).transpose()
X=matrix(n,p+1)
for i in range(0,n):
for j in range(0,p+1):
X[i,j]=xexp[i]^(p-j)
a=((X.transpose()*X)^-1)*X.transpose()*yexp
x=var('x')
k=[]
for j in range(0,p+1):
k.append(x^(p-j))
k=vector(k)
f(x)=(k*a)[0]
s=0
for i in range(0,n):
s=s+(f(xexp[i])-yexp[i][0])^2
p=[]
for i in range(0,n):
p.append((xexp[i],yexp[i][0]))
show(point(p)+plot(f,(x,min(xexp),max(xexp)), rgbcolor='green'))
show(f)
print "Отклонение =",sqrt(s/n).n()