Добрый вечер! У меня возникла скорее математическая проблема. Необходимо построить кубический сплайн по заданным точкам. Пыталась построить, но кривая получается уж совсем кривая), извиняюсь за тавтологию. Видимо проблема с коэффициентами, но я не могу найти ошибку. Буду рада за любую помощь (простите за корявый код, только учусь)
x=[5,7.5,9.9,12.9,13.2,15.1,16.3,16.8]
y=[0.024,0.0437,0.0797,0.171,0.199,0.326,0.846,0.972]
n=len(x)
h=[ x[i]-x[i-1] for i in range(1,n)]
h1=[ x[i+1]-x[i] for i in range (n-1)]
#elements of matrix
a=[h[i] for i in range(1,n-2)]
c=[2.*(h[i]+h[i+1]) for i in range(n-2)]
b=[h[i] for i in range(2,n-1)]
f=[6.*((y[i+1]-y[i])/h[i]-(y[i]-y[i-1])/h[i-1]) for i in range(1,n-1)]
#progonochnye coefficienty
A=[0.]
B=[0.]
for m in range(len(a)):
B.append((f[m]-a[m]*B[-1])/(a[m]*A[-1]+c[m]))
A.append(-1.*b[m]/(A[-1]*a[m]+c[m]))
#koefficienty of splyne
C=[(f[-1]-a[-1]*B[-1])/(c[-1]+a[-1]*A[-1])]
for k in range (2,len(A)+1):
C.insert(0,A[-k]*C[-1]+B[-k])
C.insert(0,0.)
C.append(0.)
k3=[]
k2=[]
k1=[]
for j in range(1,len(C)):
k3.append((C[j]-C[j-1])/h[j-1])
k2.append((0.5*h[j-1]*C[j-1])-((1./6.)*((h[j-1])**2.)*k3[j-1])+((y[j]-y[j-1])/h[j-1]))
#k2.append(h[j-1]*(2.*C1[j]+C1[j-1])/6.+(y[j]-y[j-1])/h[j-1])
k1.append(y[j-1])
#zadanie function
def spline(z,xt,a1,b1,c1,d1):
return a1+b1*(z-xt)+(c1/2.)*((z-xt)**2.)+(d1/6.)*((z-xt)**3.)
#postroenie splyne
x2=[]
y2=[]
for i in range(n-1):
for j in range(11):
x2.append(x[i]+(h[i]/10.)*j)
y2.append(spline(x2[-1],x[i],k1[i],k2[i],C[i],k3[i]))
pylab.plot(x2,y2)