加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

python插值

(2015-01-12 22:02:32)
标签:

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):
    n=len(x)
    m=len(x0)
    s=range(m)
    for k in range(m):
        t=0.0
        for j in range(n):
            u=1.0
            for i in range(n):
                if i!=j:
                    u=u*(x0[k]-x[i])/(x[j]-x[i])
            t=t+u*y[j]
        s[k]=t
    return s
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这个属性,没法指定字体,其他地方中文都正常显示了。

http://s15/mw690/003cvAxDgy6YbvWV29w0e&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有