gpt4 book ai didi

python - 稍后在 python 或 Matlab 中使用 scipy.interpolate.UnivariateSpline 的输出而不需要原始数据点

转载 作者:太空狗 更新时间:2023-10-30 00:03:18 30 4
gpt4 key购买 nike

我正在使用 scipy.interpolate.UnivariateSpline平滑地插入大量数据。效果很好。我得到一个像函数一样运行的对象。

现在我想保存样条点以备后用,并在不需要原始数据的情况下在 Matlab(以及 Python,但不那么紧迫)中使用它们。我该怎么做?

在 scipy 中我没有任何线索; UnivariateSpline 似乎没有提供具有先前计算的节点和系数的构造函数。

在 MATLAB 中,我尝试了 Matlab 函数 spline()pchip(),虽然两者都很接近,但它们在端点附近有错误,看起来有点像 Gibbs ears .

这是我拥有的一组样本数据,采用 Matlab 格式:

splinedata = struct('coeffs',[-0.0412739180955273 -0.0236463479425733 0.42393753107602 -1.27274336116436 0.255711720888164 1.93923263846732 -2.30438927604816 1.02078680231079 0.997156858475075 -2.35321792387215 0.667027554745454 0.777918416623834],...
'knots',[0 0.125 0.1875 0.25 0.375 0.5 0.625 0.75 0.875 0.9999],...
'y',[-0.0412739180955273 -0.191354308450615 -0.869601364377744 -0.141538578624065 0.895258135865578 -1.04292294390242 0.462652465278345 0.442550440125204 -1.03967756446455 0.777918416623834])

系数和节点是在 scipy UnivariateSpline 上调用 get_coeffs()get_knots() 的结果。 'y' 值是节点处 UnivariateSpline 的值,或更准确地说:

 y = f(f.get_knots())

其中 f 是我的 UnivariateSpline。

如何使用这些数据制作与 UnivariateSpline 的行为相匹配的样条,而不必使用曲线拟合工具箱?我不需要在 Matlab 中进行任何数据拟合,我只需要知道如何从节点/系数/样条值构建三次样条。

最佳答案

您可以使用 UnivariateSpline 类中的函数 _eval_args()_from_tck() 来完成。第一个返回样条参数,您可以存储这些参数,稍后使用第二个创建类似的样条对象。

这是一个例子:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline

x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) + 0.1 * np.random.randn(50)

spl1 = UnivariateSpline(x, y, s=.5)

xi = np.linspace(-3, 3, 1000)

tck = spl1._eval_args

spl2 = UnivariateSpline._from_tck(tck)

plt.plot(x, y, 'ro', ms=5, label='data')
plt.plot(xi, spl1(xi), 'b', label='original spline')
plt.plot(xi, spl2(xi), 'y:', lw=4, label='recovered spline')

plt.legend()
plt.show()

enter image description here

关于python - 稍后在 python 或 Matlab 中使用 scipy.interpolate.UnivariateSpline 的输出而不需要原始数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16928490/

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