我有一个' Matrix' (4x4)如下。
Matrix =
206.3088 9.4042 1.2780 0.9845
206.3099 4.6309 1.2050 0.9857
206.3559 9.4029 1.3192 1.0236
206.3573 4.6307 1.2421 1.0252
现在我需要在第2列和第2列之间进行多重自动曲线拟合。和第3栏'数据点。对于拟合程序,仅基于第1列和第1列的相邻值。 (时间)应该被选中。同时对第1列'列中的相应数据取平均值。和第4栏'。
例如,在给定的Matrix中,可以手动实现两个曲线拟合结果。同样,手动将第1列'列中的数据点的相应平均值。和第4列'可以实现。
Fit1=regstats(Matrix(1:2,3),Matrix(1:2,2),'linear','beta')
Fit2=regstats(Matrix(3:4,3),Matrix(3:4,2),'linear','beta')
C1 = mean (Matrix(1:2,1))
C2 = mean (Matrix(1:2,4))
对于' Matrix'
,输出应如下所示Output =
206.3093 Fit1.beta(1) Fit1.beta(2) 0.9851
206.3566 Fit2.beta(1) Fit1.beta(2) 1.0244
答案 0 :(得分:1)
假设相邻数据点的标准是第1列中的值差异小于0.01,则可以编写以下内容:
clear; close all;
Matrix = [206.3088 9.4042 1.2780 0.9845;
206.3099 4.6309 1.2050 0.9857;
206.3559 9.4029 1.3192 1.0236;
206.3573 4.6307 1.2421 1.0252];
groupsDelim = [0; find(diff(Matrix(:,1))>0.01); size(Matrix,1)];
%groupDelim are the indices of rows which mark the end of a group
%thus the start of a group is groupsDelim(ii)+1
Fits = cell(numel(groupsDelim)-1,1);
Cs = zeros(numel(groupsDelim)-1,2);
Output = zeros(numel(groupsDelim)-1,4);
for ii = 1:numel(groupsDelim)-1
groupRows = (groupsDelim(ii)+1):groupsDelim(ii+1);
Fits{ii}=regstats(Matrix(groupRows,3),Matrix(groupRows,2),'linear','beta');
Cs(ii,1) = mean (Matrix(groupRows,1));
Cs(ii,2) = mean (Matrix(groupRows,4));
Output(ii,:) = [Cs(ii,1), Fits{ii}.beta', Cs(ii,2)];
end