MATLAB 中的指数曲线拟合不佳

Poor exponential curve fitting in MATLAB

我在 Matlab 中得到的指数曲线拟合结果很差。在 excel 中,指数趋势线产生 excel 贷款结果(恕我直言)。我在 Matlab 中做错了什么?

示例数据集:

1,0 1,0 0,8 0,8 0,8 0,8 1,1 1,1 0,9 0,9 0,8 0,8 0,8 0,8 0,7 0,7 0,6 0,6 0,7 0,7 1,1 1,1 1,0 1,0 0,9 0,9 0,8 0,8 0,9 0,9 2,1 2,1 1,9 1,9 2,1 2,1 6,5 6,5 6,0 6,0 5,7 5,7 6,4 6,4 11,1 11,1 10,9 10,9 10,2 10,2 8,5 8,5 12,6 12,6 11,8 11,8 9,9 9,9 11,6 11,6 10,6 10,6 9,7 9,7 9,6 9,6 8,2 8,2 10,1 10,1 9,0 9,0 9,0 9,0 8,9 8,9 8,9 8,9 8,2 8,2 11,8 11,8 15,8 15,8 13,1 13,1 14,8 14,8 13,4 13,4 13,6 13,6 15,4 15,4 16,9 16,9 16,7 16,7 25,9 25,9 23,4 23,4 24,5 24,5 26,6 26,6 24,2 24,2 22,7 22,7 21,2 21,2 21,0 21,0 17,3 17,3 42,1 42,1 40,8 40,8 41,3 41,3 39,7 39,7 42,4 42,4 42,6 42,6 89,0 89,0 196,2 196,2 228,1 228,1 385,4 385,4 746,7 746,7 701,8 701,8 633,7 633,7 1051,2 1051,2 1083,1 1083,1 1034,6 1034,6 1096,0 1096,0 1010,5 1010,5 1001,5 1001,5 835,6 835,6 886,1 886,1 1038,2 1038,2 867,4 867,4 821,8 821,8 753,8 753,8 704,5 704,5 616,4 616,4 555,5 555,5 854,1 854,1

产量

y = 0,4734*e^0,0442x, hence a = 0,4734 and b = 0,0442

但在 Matlab 中,代码为:

curveFitValues = fit(xdata,ydata,'exp1');
a = curveFitValues.a;
b = curveFitValues.b;

产量

y = 8,6631*e^0,0280x, hence a = 8,661 and b = 0,0280

结果不令人满意,如下图所示:

image

我做错了什么?

P.S:我需要对数百万个数据集进行指数曲线拟合并尝试找到最快的算法,有什么想法是最快的方法吗?

我已经使用 polyfit 函数成功拟合了您的数据。我没有曲线拟合工具箱,但通常只需使用 polyfit 就可以了。我在我的代码中将您的数据存储为变量 x

t = 1:numel(x);
p = polyfit(t, log(x), 1);
figure; hold on
plot(x)
plot(t, exp(p(2)) * exp(p(1)*t))
set(gca, 'yscale', 'log')
hold off

此代码采用 ln(x) 并使用最小二乘法将其拟合到 t。然后当你产生情节时你就转换回去。

p 具有值 p(1) = 0.0442exp(p(2)) = 0.4375.