gnuplot中

时间:2015-06-01 18:19:21

标签: gnuplot smoothing

我在点x_i处有数据点f(x_i)(函数f未知,只有数字),f(0)= 0.数据显示小x处的峰状结构,然后是缓慢的肩峰衰减较大的x设置在最大值的一半。我想通过这些数据点绘制平滑的线条。 如果我使用bezier,那么f(0)= 0确实没问题,但峰值显着(降低约25%),降低。如果我使用acsplines,那么峰值看起来会好一些,但不保持f(0)= 0。 如何在不丢失重要信息(f(0)= 0)或分布的峰高的情况下平滑该数据集?

1 个答案:

答案 0 :(得分:8)

使用acsplines平滑绘制近似三次样条曲线,它不会通过原始数据点。

更好的方法可能是使用三次样条曲线smooth csplines,它会遍历所有数据点,但可能显示尖峰的过冲。

在您的情况下,最好的解决方案是使用单调三次样条,smooth mcsplines,它保持原始数据点的单调性和凸性(参见FN Fritsch和RE Carlson," Monotone Piecewise Cubic Interpolation& #34;,SIAM Journal on Numerical Analysis 17,pp.238-246(1980))。

这是一个显示这些差异的简短示例:

test.dat文件包含点

0 0
0.2 1
0.4 10
0.6 80
1 30
2 20
3 13
4 7
5 2
6 1 
7 0

绘制它们的脚本是

set xzeroaxis
set style data lines
set samples 500
plot 'test.dat' u 1:2 smooth acsplines title 'acsplines', \
     '' u 1:2 smooth csplines title 'csplines', \
     '' u 1:2 smooth mcsplines lw 2 title 'mcsplines',\
     '' u 1:2 w p pt 7 title 'data points'

enter image description here