我正在尝试使用 gnuplot代码将功效曲线拟合到我的数据中。
set termoption enhanced
f(x) = a*x**b;
fit f(x) 'data.txt' via a,b
plot 'data.txt' with points title 'data points', \
f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b)
适用于x轴的非冗余数据。 (没有重复)。
但是对于以下类型的数据:它只适用于第一个x值的点,即1,( 已加星标 )。而不是整个数据集。
数据:
1 2194*
1 2675*
1 1911*
2 966
2 1122
2 951
2 1356
3 935
3 934
4 851
4 886
4 849
4 597
答案 0 :(得分:2)
您必须为a
和b
设置合适的起始值,因为非线性拟合通常没有唯一的最小值。如果您没有指定任何起始值,则假定为1
,这在您的情况下完全错误的方向。
所以,使用以下脚本
set termoption enhanced
f(x) = a*x**b
b = -1
a = 2000
fit f(x) 'data.txt' via a,b
plot 'data.txt' with points title 'data points', \
f(x) with lines title sprintf('power fit curve f(x) = %.2f·x^{%.2f}', a, b)
你得到了合适的人选: