小编Ror*_*ith的帖子

使用scipy.interpolate进行样条曲线表示:低振幅,快速振荡函数的插值不良

我需要(数值地)计算函数的一阶和二阶导数,我试图使用这两个函数splrepUnivariateSpline创建样条函数,以便插入函数来获取导数.

然而,对于大小为10 ^ -1或更低并且(快速)振荡的函数,似乎在样条表示本身存在固有问题.

例如,考虑以下代码在区间(0,6*pi)上创建正弦函数的样条曲线表示(因此函数仅振荡三次):

import scipy
from scipy import interpolate
import numpy
from numpy import linspace
import math
from math import sin

k = linspace(0, 6.*pi, num=10000) #interval (0,6*pi) in 10'000 steps
y=[]
A = 1.e0 # Amplitude of sine function

for i in range(len(k)):

  y.append(A*sin(k[i]))

tck =interpolate.UnivariateSpline(x, y, w=None, bbox=[None, None], k=5, s=2)
M=tck(k)
Run Code Online (Sandbox Code Playgroud)

下面是M的结果,A = 1.e0,A = 1.e-2

http://i.imgur.com/uEIxq.png幅度= 1

http://i.imgur.com/zFfK0.png振幅= 1/100

很明显,样条函数创建的插值函数完全不正确!第二个图甚至没有振荡正确的频率.

有没有人对这个问题有任何见解?或者知道在numpy/scipy中创建样条曲线的另一种方法?

干杯,罗里

python math interpolation scipy

4
推荐指数
1
解决办法
3441
查看次数

标签 统计

interpolation ×1

math ×1

python ×1

scipy ×1