2016-08-04 2 views
0

У меня есть «Матрица» (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» и «столбец 3». Для процедуры подбора должны быть выбраны только смежные значения, основанные на «столбце 1» (время). Также возьмите среднее значение для соответствующих данных в столбце 1 и столбце 4.

Например, в данной матрице можно получить результат двух кривых, как указано вручную. Аналогично, вручную может быть достигнуто соответствующее среднее значение для точек данных в столбце 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)) 

Выходной сигнал должен быть как следующее за «Матрица»

Output = 

    206.3093 Fit1.beta(1) Fit1.beta(2) 0.9851 
    206.3566 Fit2.beta(1) Fit1.beta(2) 1.0244 
+0

Не можете ли вы просто перебрать индекс строки и выполнить регрессию и средние вычисления для строк i и i + 1? –

+0

@VietTran: это правда только для 2 очков, но иногда от 3 до 5 смежных точек доступны в одном выборе. Поэтому он должен основываться на «столбце 1», например, выбирать только те точки данных, где «столбец 1» имеет два одинаковых десятичных знака. В данном примере «столбец 1» «.30» является общим для первых двух точек данных, а «.35» является общим для следующих двух точек данных. – Umar

+0

, поэтому ваш критерий для соседних точек данных состоит в том, что 'Matrix (i, 1) -Matrix (i + 1,1) <0.01'? –

ответ

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 
Смежные вопросы