matlab如何进行周期函数简单线性拟合?
已有如下图数据及周期峰值点,如何进行分段拟合?并按周期重复

基于Monster 组和GPT的调写:
在Matlab中进行周期函数简单线性拟合,可以使用Matlab中的polyfit函数。该函数可以对给定的一组数据点进行线性拟合,并返回拟合的系数。
假设有一个周期函数的数据点,可以先通过找到峰值点确定一个周期。然后,将数据点按周期分段,对每个段进行拟合。可以使用Matlab中的mod函数将数据点按周期分段,然后分别对每个段使用polyfit函数进行拟合。最后,将所有段的拟合结果合并起来即可得到周期函数的简单线性拟合。
以下是一个示例代码,假设数据点为x和y,周期为period,峰值点为peak:
% 计算周期起始点
start = peak - floor(period/2);
% 按周期分段
num_periods = floor(length(x)/period);
segments = cell(1,num_periods);
for i = 1:num_periods
indices = start + (1:period) + (i-1)*period;
segments{i} = [x(indices); y(indices)];
end
% 对每个段进行拟合
coeffs = cell(1,num_periods);
for i = 1:num_periods
segment = segments{i};
p = polyfit(segment(1,:), segment(2,:), 1);
coeffs{i} = p;
end
% 合并拟合结果
all_coeffs = [coeffs{:}];
a = all_coeffs(1:2:end);
b = all_coeffs(2:2:end);
x_fit = linspace(min(x), max(x), 100);
y_fit = zeros(size(x_fit));
for i = 1:num_periods
indices = (i-1)*period+1:i*period;
y_fit(indices) = a(i)*x(indices) + b(i);
end
% 绘制拟合结果
plot(x, y, 'o', x_fit, y_fit);
在上面的代码中,首先计算了每个周期的起始点,并将数据点按周期分段。然后,对每个段使用polyfit函数进行线性拟合,并将拟合结果保存在coeffs变量中。最后,将所有拟合结果合并起来,得到整个周期函数的拟合结果。最后,将数据点和拟合结果绘制在同一张图上,以便比较。