数学建模中的插值问题

2 Scipy一维插值方法

=============

2.1 直接法——splrep&splev


(1)参数

#求取一维曲线的 B-spline 插值,

给定一组数据点 (x[i],y[i])(x[i],y[i])(x[i],y[i]),确定在区间xb≤x≤xe 上 k 次的光滑样条逼近。

scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)

#求取 N 维曲线的 B-spline 插值

scipy.interpolate.splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None, full_output=0, nest=None, per=0, quiet=1)

其中,x 和 y 是点的横纵坐标,xb 和 xe 是间隔,k 为样条拟合度,建议使用三次样条(cubic splines),通常 1≤k≤5

接下来介绍 scipy.interpolate 里面两大杀器:splrep 和 splev。两个函数名称都是以 spl 开头,全称 spline (样条),可以理解这两个函数都和样条有关。不同的是,两个函数名称以 rep 和 ev 结尾。splrep 和 splev 像是组合拳 (one two punch):

*前者将 x, y 和插值方式转换成「样条对象」

*tck后者利用它在 xnew 上生成 ynew,把 x 和 tck 丢进 splev 函数,我们可以插出在 x 点对应的值 iy。

(2)案例

(3)代码实现 (包含画图的模板库)

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from scipy import interpolate

import matplotlib as mpl

mpl.rcParams[“font.sans-serif”] = [“SimHei”]

mpl.rcParams[“axes.unicode_minus”] = False

Import data

file = pd.read_excel(‘Three moment method.xlsx’, header=None, names=[‘x’, ‘value’])

data = pd.DataFrame(file)

数组切片

x = data[‘x’] # Take the first column of data

y = data[‘value’] # Take the second column of data

Spline interpolation of correlation functions in SciPy Library

tck = interpolate.splrep(x, y) # (t,c,k)包含节点向量、B样条曲线系数和样条曲线阶数的元组。

xx = np.linspace(min(x), max(x), 200)

yy = interpolate.splev(xx, tck, der=0)

x1, x2 = -0.02, 2.56

y1 = interpolate.splev(x1, tck, der=0)

y2 = interpolate.splev(x2, tck, der=0)

print(‘When x = -0.02, the value of Y is:’, y1)

print(‘When x = 2.56, the value of Y is:’, y2)

print(yy)

plt.figure(‘cubic spline’)

plt.plot(x, y, ‘ro’, xx, yy, ‘b’)

plt.legend([‘true’, ‘cubic spline’])

plt.xlabel(‘X’)

plt.ylabel(‘Y’)

plt.grid(True)

plt.title(‘Three moment method of cubic spline interpolation’)

Save picture

plt.savefig(‘out2.png’, dpi=600)

Set the resolution at which you want to save the picture

plt.show()

#===画图方法,论文改字体

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值