查找黑盒函数不连续性的最佳方法是什么?


20

有人建议,对于这个问题,这可能比我之前问过的 Mathematics Stack Exchange更好。

假设有一个黑匣子函数,可以在指定间隔任何位置(便宜地)对其进行评估并且没有噪音(例如,浮点粒度除外)。找到此功能不连续性的最佳方法是什么?我不知道可能有多少间断点,也可能没有间断点。[a,b]

我可以想到一些简单的方法(统一采样,在样本之间存在较大差异的地方进行细化,...),但是也许有更好的方法?

该函数是“合理的”,因为可以假设它最多具有有限的不连续性,对于高阶导数也是如此,我不介意是否遗漏了小的病理不连续性...(该应用程序是对一维函数的自动绘制) 。

-

感谢所有答复,特别是佩德罗。Pachón,Platte和Trefethen中描述的方法似乎是对我最好的方法,所以我现在去实现它


我想知道是否有任何建议的方法可以处理
1x1x
JM

@JM:完成实现后,我将添加此函数的图。
n00b 2012年

@ n00b:您可能会发现此概念很有用。:mathoverflow.net/q/165038/14414
Rajesh Dachiraju 2015年

Answers:


18

如果您使用的是Matlab,则可能会对Chebfun项目感兴趣。Chebfun接受一个函数,对其进行采样,然后尝试将其表示为多项式插值。如果您的函数有不连续性,Chebfun应该可以使用该splitting on命令检测到它们。您可以在此处找到一些示例。

如果您对基础算法感兴趣,可以参考Pachón,Platte和Trefethen的论文“ Piecewise Smooth Chebfuns ”。


谢谢Pedro,我对Chebfun很熟悉,虽然它很棒,但是却很庞大(通过Matlab许可会带来不菲的隐性成本)。因此,我真的在寻找一种小型紧凑算法来解决此问题,我将自己实现。
2012年

@ n00b:好点。我已经为描述基础算法(例如边缘检测)的论文添加了参考。
2012年

啊,太好了!我没有看过这篇论文,并且与我的预期相反,Chebfun不连续性查找器似乎实际上并未使用Chebfuns,因此这看起来非常有用。我会仔细阅读并检查相应的代码..
n00b

11

我怀疑chebfun算法一定看起来更实用,但是有必要提一下另一种检测不连续性的方法,即离散小波变换。您可以通过查看Mathematica文档页面来了解其工作原理,请参阅部分>应用程序>检测不连续性和边缘。

F


8

加权基本非振荡(WENO)方法使用“平滑度指示器”来检测有限体积和差异方法中的不连续性。从Pedro给出的Chebfun的描述来看,似乎总的思路是相同的:构造一组插值多项式,并使用它们来计算平滑度。

参见GS Jiang和CW Shu,《加权ENO方案的有效实施》,J.Comput.Phys。,第1卷。126,第202--228页,1996。


5

与@Pedro一起,我将研究边缘检测算法。不连续性是导数上的无穷大,因此请考虑查看日益精细的网格并定位感兴趣的区域。

随着网格的细化,对连续函数导数的有限差分近似应减小。比较网格之间的导数的有限差分结果可以发现梯度的发散,这表明不连续。

FX=s一世GñX|X|X=0HX0


1
问题的一个细微之处是,尽管可以将间断看作是导数上的无穷大,但事实并非如此-函数sign(x)* sqrt(| x |)在x = 0时是完美连续的,但那里的导数是无限的
n00b'5

我也不同意“任何连续函数都应该在足够小的规模上保持平滑”的说法。平滑度与连续导数有关。原始功能的连续性是必要条件,但不是充分条件。
杰夫·奥克斯伯里

1
@GeoffOxberry:删除了该语句。在FD中这是合理的结果,但在分析上却不是。
菲尔H
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.