多重自​​动曲线拟合

multiple automated curve fitting

我有一个 '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

现在我需要在 'column 2' 和 'column 3' 数据点之间进行多重自动曲线拟合。对于拟合程序,仅应选择基于 'column 1'(时间)的相邻值。同样对'column 1'和'column 4'中的相应数据取平均值。

例如在给定的矩阵中,两条曲线的拟合结果可以手动实现如下。同理,'column 1'和'column 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

假设相邻数据点的标准是第 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