Young87

当前位置:首页 >个人收藏

拉格朗日插值python实现

拉格朗日插值公式
其中
也就是两层for循环,内层求Pj(x),然后与外层的yi相乘结果存在返回值中,主要注意公式中相乘的条件是i!=j
代码如下:

import matplotlib.pyplot as mpl
import numpy as np
import scipy as sp

def getdata():
    a = np.zeros(10,np.double)
    b = np.zeros(10,np.double)
    for i in range(len(a)):
        a[i] = np.random.uniform(-255,255)
        b[i] = np.random.uniform(-255,255)
        print '(%f,%f)' %(a[i],b[i]),
    print 
    return a,b 

a = np.array([0,10,20,30,40,50,60,70,80,90,100,110,120],np.float32)
b = np.array([5,1,7.5,3,4.5,8.8,15.5,6.5,-5,-10,-2,4.5,7],np.float32)
# a = np.array([-2,2,5],np.float32)
# b = np.array([0,3,6],np.float32)
def Larange(x,y,a):
    #t = np.zeros(len(a))
    #t = a.copy()
    ans = 0.0
    for i in range(len(y)):
        t = y[i]
        for j in range(len(y)):
            if i != j:
                t *= (a-x[j])/(x[i]-x[j])
        ans += t
    return ans

y2 = Larange(a,b,65)
print y2
mpl.plot(a,b,'--*')

# y1 = Larange(a,b,10)
# print y1
# xi = np.arange(-20,20,1)
# yi = np.zeros(len(xi))
# 
# for i in range(len(xi)):
#     yi[i] = Larange(a,b,xi[i])
# mpl.plot(xi,yi)

"""
ai = np.array([1,2])
bi = np.array([1,3])

for i in range(len(xi)):
    yi[i] = Larange(ai,bi,xi[i])
mpl.plot(xi,yi)
print Larange(ai,bi,18)
"""
mpl.show()

通过x=1,2 y= 1,3得到的拉格朗日差值一次函数图像
通过x=1,2 y= 1,3得到的拉格朗日差值一次函数图像

通过随机生成的10个点生成的拉格朗日差值函数图像
通过随机生成的10个点生成的拉格朗日差值函数图像

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 将qint8类型的数组放进float类型的数组里面

下一篇: Github错误:fatal: Authentication failed for 'https://github.com/ ...

精华推荐