我scipy.interpolate.UnivariateSpline
用来平滑地插入大量数据。效果很好。我得到一个像函数一样的对象。
现在我想保存样条点供以后使用,并在 Matlab 中使用它们(还有 Python,但这不那么紧急),而不需要原始数据。我怎样才能做到这一点?
在 scipy 中我不知道;UnivariateSpline 似乎没有提供具有先前计算的结和系数的构造函数。
在 MATLAB 中,我尝试了 Matlab 函数spline()
和pchip()
,虽然两者都很接近,但它们在看起来有点像Gibbs ear的端点附近有错误。
这是我拥有的一组样本数据,采用 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])
系数和结是调用get_coeffs()
和get_knots()
在 scipy UnivariateSpline 上的结果。'y' 值是节点处的 UnivariateSpline 的值,或更准确地说:
y = f(f.get_knots())
其中 f 是我的 UnivariateSpline。
如何使用这些数据制作与 UnivariateSpline 的行为相匹配的样条曲线,而无需使用曲线拟合工具箱?我不需要在 Matlab 中进行任何数据拟合,我只需要知道如何从节点/系数/样条值构造三次样条。