根据给定的公式创建三次样条

问题描述

因此,我首先尝试使用以下公式从头开始编写三次样条曲线 主要问题是如何正确实施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 (将#修改为@)