我有一个csv文件,其中包含如下数据:[第一行是标题]
Element,State,Time
Water,Solid,1
Water,Solid,2
Water,Solid,3
Water,Solid,4
Water,Solid,5
Water,Solid,2
Water,Solid,3
Water,Solid,4
Water,Solid,5
Water,Solid,6
Water,Solid,7
Water,Solid,8
Water,Solid,7
Water,Solid,6
Water,Solid,5
Water,Solid,4
Water,Solid,3
对状态重复类似的模式:用液体和气体代替“固体”。 而且元素“水”也可以被其他元素取代。 作为整数的时间以秒为单位(简化)但可以是任何实数。 另外,文件之间可能会有一些以#开头的注释行。
问题陈述:我想消除时间值的第一次下降并使用一些二次或三次或多项式插值平滑[请注意第一次更改从5> 2 ---> 8。我想将这些数字替换为中间值,从5 ---> 8]逐渐/平滑地增加。
我希望元素和状态的所有组合都能完成。
这可以通过Matlab等中的某种编码实现吗?
任何指针都会有所帮助!!
提前致谢:)
答案 0 :(得分:1)
您可以使用interp1
功能进行1D插值。语法是
yi = interp1(x,y,xi,method)
其中x
是您的原始坐标,y
是您的原始值,xi
是您希望插值的坐标,而yi
是内插值。 method
可以是'spline'
(三次样条插值),'pchip'
(分段式Hermite),'cubic'
(三次多项式)等等(有关详细信息,请参阅文档)。< / p>
答案 1 :(得分:1)
这里有很多选项,它实际上取决于数据的性质,但我会从简单的移动平均(MA)过滤器开始(用相邻数据点的平均值替换每个数据点),看到那些需要我。它很容易实现,并且在一些样本数据上对MA-span进行几次微调通常就足够了。
http://www.mathworks.se/help/curvefit/smoothing-data.html
我不会尝试将多项式拟合到整个数据集,除非我真的需要压缩它,(但为此你可以使用polyfit
函数)。