Python 获取由scipy创建的插值函数的公式

Python 获取由scipy创建的插值函数的公式,python,scipy,interpolation,pythonxy,Python,Scipy,Interpolation,Pythonxy,我在Python中做了一些工作,但我对scipy还是新手。我试图使用插值库中的方法得出一个函数,该函数将近似于一组数据 我已经查阅了一些示例以开始使用,可以获得下面的示例代码: 绘图显示如下: 现在,有没有办法得到表示由Rbf创建的插值函数的多项式表达式(即创建为Rbf\u interp的方法) 或者,如果Rbf不可能实现这一点,也欢迎使用不同的插值方法、另一个库或甚至不同的工具提出任何建议。Rbf可能代表。如果这是你想要的功能,我不会感到惊讶 然而,我怀疑你能否找到一个多项式表达式来表示你的

我在Python中做了一些工作,但我对
scipy
还是新手。我试图使用
插值
库中的方法得出一个函数,该函数将近似于一组数据

我已经查阅了一些示例以开始使用,可以获得下面的示例代码:

绘图显示如下:

现在,有没有办法得到表示由
Rbf
创建的插值函数的多项式表达式(即创建为
Rbf\u interp
的方法)

或者,如果Rbf不可能实现这一点,也欢迎使用不同的插值方法、另一个库或甚至不同的工具提出任何建议。

Rbf可能代表。如果这是你想要的功能,我不会感到惊讶

然而,我怀疑你能否找到一个多项式表达式来表示你的结果


如果您想尝试不同的插值方法,请检查相应的插值方法,这将提供RBF、样条函数的链接…

答案是否定的,没有“好”的方法来写下公式,或者至少没有一个简短的方法。某些类型的插值,如RBF和黄土,不会直接搜索参数数学函数以拟合数据,而是将每个新数据点的值作为其他点的函数分别计算

这些插值保证始终能很好地拟合数据(例如在您的案例中),其原因是为了描述它们,您需要大量的参数(基本上是所有数据点)。可以这样想:通过用直线连接连续数据点,可以进行线性插值。您可以通过这种方式拟合任何数据,然后以数学形式描述函数,但它需要大量参数(至少与点数相同)。事实上,你现在所做的是一个平滑的版本


如果您希望公式简短,这意味着您希望用一个没有很多参数的数学函数来描述数据(具体来说,参数的数量应该比数据点的数量少得多)。例如逻辑函数、多项式函数甚至正弦函数(用于生成数据)。显然,如果你知道哪个函数生成的数据将是你想要拟合的函数。

RBF使用你要求的任何函数,它当然是一个全局模型,因此有一个函数结果,但当然,你可能不喜欢它,因为它是许多高斯数的和。你得到:

 rbf.nodes   # the factors for each of the RBF (probably gaussians)
 rbf.xi      # the centers.
 rbf.epsilon # the width of the gaussian, but remember that the Norm plays a role too
因此,使用这些东西,您可以计算距离(使用
rbf.xi
,然后将距离与
rbf.nodes
rbf.epsilon
中的因子一起插入高斯函数(或您要求它使用的任何函数)。(您可以检查
\u call\u
\u call\u norm
的python代码)


<> >你得到一些类似于<代码>和(RBF.No.[i] *Gaussian(RBF.Epsion,SqRT((RBF.X-Center)** 2))的I,在枚举中心(RBF.节点))为了给出一些有趣的半代码/公式,RBFs函数写在文档中,但您也可以检查python代码。

我认为SciPy的RBF不会给出实际的函数。但是您可以做的一件事是对SciPy的RBF函数进行采样(即100分)。然后对这些点使用拉格朗日解释。这将为您生成一个多项式函数。下面是一个关于该函数的示例。如果您不想使用拉格朗日插值,也可以使用“牛顿红利差分法”生成多项式函数。

Hi@Pierre,可能我的问题不清楚。我已经在使用
scipy.interpolate.Rbf
。我想知道的是,我是否可以提取一个表示创建的插值函数的公式(例如
exp(x)+x^3-x^2
,等等)查看
scipy.interpolate.Rbf
scipy.interpolate
模块的文档,我看不到任何与您想要的内容相关的内容。我能想到的唯一方法是阅读源代码,了解函数是如何根据参数创建的,然后编写您自己的函数,该函数能够返回可读的re但是这将取决于实现细节。即使我看不出你是如何做到这一点的。考虑两个步骤:数据->曲线(用RBF或其他方法),然后曲线>分段多项式:样条。很容易保存样条参数,(NTAB + 1)。*4--进一步询问您是否希望这样做。您好@Bitwise,当然在上面的代码中我知道函数(
f(x)=sin(2*PI*x)+noise
);实际上,我在CSV中有一组数据,不知道函数是什么(我只能根据它的形状猜测,仅此而已)@Eduardo是的,这就是我的假设。重点是,如果你知道什么样的模型可能适合数据,无论是通过先验知识还是仅仅查看数据,这都可以告诉你应该使用什么样的函数类型。否则它可能是任何函数,你唯一能做的就是尝试不同的参数函数族我稍微修改了我的答案,并添加了一个简短的线性插值示例。
 rbf.nodes   # the factors for each of the RBF (probably gaussians)
 rbf.xi      # the centers.
 rbf.epsilon # the width of the gaussian, but remember that the Norm plays a role too