- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要(以数字方式)计算函数的一阶和二阶导数,为此我尝试同时使用 splrep
和 UnivariateSpline
来创建样条曲线插值函数的导数。
但是,对于幅度为 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)
下面是 A = 1.e0 和 A = 1.e-2 时 M 的结果
http://i.imgur.com/uEIxq.png振幅 = 1
http://i.imgur.com/zFfK0.png振幅 = 1/100
显然,由样条曲线创建的插值函数是完全不正确的!第二张图甚至没有以正确的频率振荡。
有没有人对这个问题有任何见解?或者知道在 numpy/scipy 中创建样条的另一种方法?
干杯,罗里
最佳答案
<罢工>我猜你的问题是由于别名造成的。
什么是
x
在你的例子中?
如果
x
您插值的值比原始点的间距小,您将固有地丢失频率信息。这完全独立于任何类型的插值。它是下采样所固有的。
不要在意上面关于别名的部分。它不适用于这种情况(尽管我仍然不知道您的示例中的
x
是什么...
我刚刚意识到当您使用非零平滑因子 (
s
) 时,您是在
原始输入点上评估您的点。
根据定义,平滑不会完全适合数据。尝试输入
s=0
相反。
举个简单的例子:
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
x = np.linspace(0, 6.*np.pi, num=100) #interval (0,6*pi) in 10'000 steps
A = 1.e-4 # Amplitude of sine function
y = A*np.sin(x)
fig, axes = plt.subplots(nrows=2)
for ax, s, title in zip(axes, [2, 0], ['With', 'Without']):
yinterp = interpolate.UnivariateSpline(x, y, s=s)(x)
ax.plot(x, yinterp, label='Interpolated')
ax.plot(x, y, 'bo',label='Original')
ax.legend()
ax.set_title(title + ' Smoothing')
plt.show()
您只能清楚地看到低振幅平滑效果的原因是平滑因子的定义方式。请参阅 scipy.interpolate.UnivariateSpline
的文档更多细节。
即使振幅更高,如果使用平滑,插值数据也不会与原始数据匹配。
例如,如果我们只是将振幅 ( A
) 更改为 1.0
在上面的代码示例中,我们仍然会看到平滑的效果...
关于python - 具有 scipy.interpolate : Poor interpolation for low-amplitude, 快速振荡函数的样条表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906126/
我正在尝试使用 AngularJS 将 YouTube 视频插入到我的网站中,但我一直收到相同的错误: Error: $interpolate:interr Interpolation Error 为
我正在尝试将动态链接从 json 加载到我的 iframe 模板中。当我加载 iframe 页面时,会弹出此错误。我真的不知道为什么。这是我第一次看到这个错误。下面是代码。 Controller ap
我想从 x 进行插值到 z .但有一个警告: 取决于状态y , 我有一个不同的 xGrid - 我需要对其进行插值。 我有一个 y 的网格, yGrid .说 yGrid=[0,1] .和 xGrid
我是 javascript 的新手,但几周前刚刚钻研 d3.js 尝试创建时空可视化。 我想要实现的是基于以下代码的类似 ( https://jsfiddle.net/dmatekenya/mz5fx
scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0,
Scipy 函数 griddata和 Rbf两者都可以用于对随机分散的 n 维数据进行插值。它们之间有什么区别?其中之一在准确性或性能方面更胜一筹吗? IMO,这不是 this question 的重
我需要(以数字方式)计算函数的一阶和二阶导数,为此我尝试同时使用 splrep 和 UnivariateSpline 来创建样条曲线插值函数的导数。 但是,对于幅度为 10^-1 或更低的函数,样条表
好的,所以我最近一直在研究插值。遗憾的是,我读过的几乎每篇文章都只讨论精确到 0.0 到 1.0 的小数级别的插值。我想插入整数整数,不管它们有多大,或者是否有负数或其他什么。我用线性插值完成了这个:
如何在 FORTRAN 中实现二维插值,其中数据如下所示。 x 和 y 是两个坐标,z 是依赖于它们的值 x 间隔均匀但 y 不均匀间隔且 y 的最大值 对应于 x 的统一值不断增加。 在不损失太多准
在彼得阿尔弗雷德的 article关于多元散点数据插值,他提到,从各种方案中,只有少数方案真正受到从业者的欢迎。例如,他命名为 Shepard 方法和 Hardy Multiquadrics。但那篇文
我不清楚图像处理中重采样和插值之间的区别。如果我有一个 geotiff 并且我想提高它的分辨率,我应该使用重采样方法,例如最近邻,对吗?例如,我发现 gdalwarp 函数可以做到这一点。 插值方法,
对于这个有点令人困惑的标题,我感到很抱歉,但我不确定如何更清楚地总结这一点。 我有两组 X,Y 数据,每组对应一个总体值。它们是从原始数据中相当密集地采样的。我正在寻找一种方法,为任何给定的 Y 找到
我很抱歉标题有点困惑,但我不确定如何更清楚地总结这一点。 我有两组X,Y数据,每组对应一个大概的整体值。它们是从原始数据中相当密集地采样的。我正在寻找的是一种方法,可以为我已有的集合之间的值找到任何给
我是 D3 新手,正在尝试一些图表。在使用 D3 V4 构建折线图时,我遇到了以下错误。 d3.line(...).x(...).y(...).interpolate is not a functio
问候, 在我正在开发的网络应用程序中,我想做如下事情: 我有一个 bean class Gene{ String geneid; String sequence; .. } // EL express
有什么方法可以将 Angular 的 $interpolate 与数组而不是对象一起使用? 示例代码: var exp = $interpolate('Hello {{name}}!'); var r
我是编程新手,我会尝试编写一个线性插值函数: from bisect import bisect_left def interpolate((x_list, y_list), x_test):
我启动了一个带有共享元素的场景转换的 Activity,它工作正常。 ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTr
背景分析 在传统的html页面中我们可以定义变量吗?当然不可以,那我们假如希望通过变量的方式实现页面内容的数据操作也是不可以的。当然我们可以在服务端通过定义html标签库方式,然后以html作为模
我在 wikipedia 上阅读了关于双三次插值的信息.我遇到了变量 t这是没有定义的。 等式是: 谁能告诉我这个变量是什么意思以及它的常用值是什么? 最佳答案 t 是 0 到 1 之间的任何数字。
我是一名优秀的程序员,十分优秀!