如何解决根据给定的公式创建三次样条
因此,我首先尝试使用以下公式从头开始编写三次样条曲线 主要问题是如何正确实施mk的公式
https://i.stack.imgur.com/4oxTH.png [2]:https://i.stack.imgur.com/klqLc.png
a0-a3是多项式的系数
我的代码看起来像这样:
a0=[]
a1=[]
a2=[]
a3=[]
hk=[]
dk=[]
ro=[]
lam=[]
mk=np.zeros(len(x))
for p in range(len(x)-1):
hk.append(x[p+1]-x[p])
dk.append(y[p+1]-y[p])
for i in range(len(x)-1):
if i == 0:
ro.append(hk[i-1]/(hk[i-1]+hk[i]))
lam.append(hk[i]/(hk[i-1]+hk[i]))
mk[0]=dk[0]/hk[0]-(mk[i-1]*ro[i]/2)
else:
ro.append(hk[i-1]/(hk[i-1]+hk[i]))
lam.append(hk[i]/(hk[i-1]+hk[i]))
w=(3*(dk[i]-dk[i-1])/(hk[i-1]+hk[i]))
mk[i]=w-(mk[i-1]*ro[i]/2)
for h in range(len(x)-2,-1,-1):
mk[h]=mk[h]-(mk[h+1]*lam[h]/2)
i=0
for i in range(len(x)-1):
b0=(y[i])
g=(hk[i]*(2*mk[i]+mk[i+1])/6)
b1=dk[i]-g
b2=(mk[i]/2)
b3=(mk[i+1]-mk[i])/(6*hk[i])
a0.append(b0-(b1*x[i])+(b2*x[i]*x[i])-(b3*x[i]*x[i]*x[i]))
a1.append(b1-(2*b2*x[i])+(3*b3*x[i]*x[i]))
a2.append(b2-(3*b3*x[i]))
a3.append(b3)
return (a0,a1,a2,a3)
根据公式,我几乎可以确定所有实现(不计算mk变量)都是正确的 所以主要问题是如何正确实施mk的公式
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。