function [list] = linearFitting_Judge(f, xMin, xMax, list, e)
%% 打印正在拟合的区间
fprintf('calculating in [ %f, %f ] \n', xMin, xMax);
%% 计算中点两边两段的斜率、截距和最大误差
[xMin, y1, xMax, y2, xMid, yMid, k1, k2, b1, b2, err1, err2] = linearFitting_Calc(f, xMin, xMax, e);
%% 计算索引拼合列表
index = find(list(1, :) == xMin);
list = [list(:, 1:index - 1), [xMin, xMid; y1, yMid; k1, k2; b1, b2; err1, err2], list(:, index + 1:end)];
%% 通过最大误差决定接下来在哪一段进行拟合,并递归调用进行下一轮拟合
if (err1 > e && err2 > e)
[list] = linearFitting_Judge(f, xMin, xMid, list, e);
[list] = linearFitting_Judge(f, xMid, xMax, list, e);
elseif (err1 > e && err2 <= e)
hold on;
plot([xMid, xMax], [yMid, y2]);
drawnow
[list] = linearFitting_Judge(f, xMin, xMid, list, e);
elseif (err1 <= e && err2 > e)
hold on;
drawnow
plot([xMin, xMid], [y1, yMid]);
[list] = linearFitting_Judge(f, xMid, xMax, list, e);
else
%% 拟合从这里结束
hold on;
drawnow
plot([xMin, xMid, xMax], [y1, yMid, y2]);
end
end
一键复制
编辑
Web IDE
原始数据
按行查看
历史