python插值

标签:
python分段线性插值拉格朗日插值样条插值scipy |
分类: python |
博主最近在学习python,结合自己专业课计算方法写下python如何做插值的3个实例。
import matplotlib.pyplot as plt
import numpy as np
#下面是numpy内置的插值函数(分段线性插值)的用法,请仔细观察学习各种画图命令
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
xvals=np.linspace(0,2*np.pi,20)
yinterp = np.interp(xvals, x, y)
plot1=plt.plot(x, y, 'o',label='original values')
plot2=plt.plot(xvals, yinterp, '-x',label='interped values')
#plot1=plt.plot(x, y, 'o',label=u'真实值')#采用unicode编码
#plot2=plt.plot(xvals, yinterp, '-x',label=u'插值')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend()
plt.show()
plt.savefig('c1.png')
#保存在当前目录文件夹
http://s4/bmiddle/003cvAxDzy6P84rNpdhc3&690
#自己编写的Lagrange插值函数,纯属闲着蛋疼
#潘海东,2015/1/12
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
xvals=np.linspace(0,2*np.pi,20)
def Lagrange(x,y,x0):
yinterp = Lagrange(x,y,xvals)
plot1=plt.plot(x, y, '*',label='original values')
plot2=plt.plot(xvals, yinterp, 'r',label='interped values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend()
plt.show()
plt.savefig('c2.png')
#保存在当前目录文件夹
http://s16/bmiddle/003cvAxDzy6P84rP90j4f&690
#功能超强的python插值模块interpolate
import
scipy.interpolate as itp
#导入插值库,读者可以dir(itp)查看里面有哪些插值函数
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
xvals=np.linspace(0,2*np.pi,20)
yinterp = itp.spline(x,y,xvals)#调用样条插值函数
plot1=plt.plot(x, y, 'b*',label='original values')
plot2=plt.plot(xvals, yinterp, 'r-x',label='interped values')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend()
plt.show()
plt.title('Spline')
plt.savefig('c3.png')
#保存在当前目录文件夹
http://s15/bmiddle/003cvAxDzy6P84rR2eq8e&690
或许你要问画的图是不能显示中文的,这个问题我百度了好久,结论是通过修改指定字体是可以显示中文的,程序如下:
import matplotlib.pyplot as plt
import scipy
import numpy as np
from pylab import *
myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttf')
mpl.rcParams['axes.unicode_minus'] = False
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
xvals=np.linspace(0,2*np.pi,20)
yinterp = np.interp(xvals, x, y)
plot1=plt.plot(x, y, 'o')#采用unicode编码
plot2=plt.plot(xvals, yinterp, '-x')
plt.xlabel(u'x轴',fontproperties=myfont)
plt.ylabel(u'y轴',fontproperties=myfont)
plt.title(u'插值',fontproperties=myfont)
plt.legend([u'真实值',u'插值'])
plt.show()
如下图所示,由于legend函数没有fontproperties这个属性,没法指定字体,其他地方中文都正常显示了。