var('x')
def poisci_zlepek(a,b):
n=len(a)
h=[]
u=[]
bi=[]
v=[]
z=[]
for i in range (0,n-1):
h.append(a[i+1]-a[i])
bi.append(6/(h[i])*(b[i+1]-b[i]))
for j in range (1,n-1):
u.append(2*(h[j]+h[j-1]))
v.append(bi[j]-bi[j-1])
A=matrix(QQ, n-2, n-2, 0)
for m in range (0,n-2):
for k in range (0,n-2):
if (m==k):
A[m,k]=u[m]
else:
if (m+1==k):
A[m,k]=h[k]
else:
if (m==k+1):
A[m,k]=h[m]
B=vector(v)
Z1=A.solve_right(B)
z.append(0)
for s in range (0,n-2):
z.append(Z1[s])
z.append(0)
Q=[]
W=[]
E=[]
for f in range (0,n-1):
Q.append(1/(6*h[f])*(z[f+1]-z[f]))
W.append(z[f]/2)
E.append(-(h[f]/6)*(z[f+1])-(h[f]/3)*z[f]+(1/h[f])*(b[f+1]-b[f]))
S=[]
for p in range (0,n-1):
S.append(b[p]+(x-a[p])*(E[p]+(x-a[p])*(W[p]+(x-a[p])*Q[p])))
print html('<FONT color=Red>Naravni kubicni zlepki so:</FONT>')
for y in range (0,n-1):
print S[y]