gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:55:21 25 4
gpt4 key购买 nike

我用 Python 做过一些工作,但我是 scipy 的新手。我正在尝试使用 interpolate 库中的方法来提出一个函数来近似一组数据。

我查阅了一些示例以开始使用,并且可以使下面的示例代码在 Python(x,y) 中运行:

import numpy as np
from scipy.interpolate import interp1d, Rbf
import pylab as P

# show the plot (empty for now)
P.clf()
P.show()

# generate random input data
original_data = np.linspace(0, 1, 10)

# random noise to be added to the data
noise = (np.random.random(10)*2 - 1) * 1e-1

# calculate f(x)=sin(2*PI*x)+noise
f_original_data = np.sin(2 * np.pi * original_data) + noise

# create interpolator
rbf_interp = Rbf(original_data, f_original_data, function='gaussian')

# Create new sample data (for input), calculate f(x)
#using different interpolation methods
new_sample_data = np.linspace(0, 1, 50)
rbf_new_sample_data = rbf_interp(new_sample_data)

# draw all results to compare
P.plot(original_data, f_original_data, 'o', ms=6, label='f_original_data')
P.plot(new_sample_data, rbf_new_sample_data, label='Rbf interp')
P.legend()

剧情显示如下:

interpolation-plot

现在,有什么方法可以得到表示由 Rbf 创建的插值函数的多项式表达式(即创建为 rbf_interp 的方法)?

或者,如果使用 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.nodesrbf.epsilon 到 gaussian(或者你要求它使用的任何函数)。(你可以检查 __call___call_norm 的 python 代码)

所以你得到类似 sum(rbf.nodes[i] * gaussian(rbf.epsilon, sqrt((rbf.xi - center)**2)) for i, center in enumerate(rbf.nodes )) 给一些搞笑的一半代码/公式,RBFs函数写在文档中,不过你也可以查看python代码。

关于python - 获取由 scipy 创建的插值函数的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12600989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com