抱歉,之前的代码中有一个错误。在绘制粒子搜索历史图时,需要先定义 `particles_history` 变量并将每次更新时的粒子位置记录下来。以下是修正后的代码示例:
```
% 提取时间和距离数据
time = time;
truedistance = truedistance;
APD=APD;
% 将时间转换为秒
time = time * 60;
t = length(time);
% 定义非线性拟合模型
fun = @(a, b, t) a .* exp(b .* t);
% 创建子图
figure;
plot(time,truedistance,'linewidth',8) ;
hold on;
% 预初始化拟合结果的 cell 数组
fittedmodel = cell(t-1, 1);
for i = 1:(t-1)
% 拿出相邻两点,作为单独的分段数据进行拟合
xs = time(i:i+1);
ys = truedistance(i:i+1);
% 将 xs 和 ys 转换为列向量
xs = xs(:);
ys = ys(:);
% 非线性拟合指数模型
[curve, gof] = fit(xs, ys, 'exp1');
fittedmodel{i} = curve;
% 输出拟合函数和R方值
fprintf("第%d个分段的拟合函数: \n%s\nR2: %f\n", i, formula(curve), gof.rsquare);
% 绘制拟合曲线
xfit = linspace(min(xs), max(xs), 1000);
yfit = feval(curve, xfit);
plot(xfit, yfit,'linewidth',2)
end
% 添加标题、标签和图例
title('分段函数的拟合曲线图');
xlabel('x');
ylabel('y');
grid on;
hold off;
% 获取最终拟合结果的系数 a 和 b
a = curve.a;
b = curve.b;
fprintf("a = %.8f, b = %.8f\n", a, b