如何从矩阵中排除误差数据并包括拟合值 - Matlab

How to exclude error data from matrix and include fitted values- Matlab

我需要从矩阵中排除一些错误数据。我知道哪些数据是正确的,我正在尝试在两者之间插入值,这样我就可以获得没有那么大错误的体面图表。我必须使用那种形式的矩阵并且我必须保持它的形状。我必须只替换一些标记为错误的数据。我将向您展示我目前的工作:

M=[0.1000
0.6000
0.7000
0.8000
0.9000
0.9500
1.0000
1.0500
1.1000
1.1500
1.2000
1.2500
1.3000
1.5000
1.7500
2.0000
2.2500
2.5000
3.0000];

CZ1=[ 9.4290
9.5000
9.3250
9.2700
9.2950
9.4350
9.6840
10.0690
10.1840
10.2220
10.2160
9.6160
9.6890
9.4880
9.5000
9.5340
9.3370
9.0990
8.5950];

N1=11;
Nn=13;

Mx1=M(N1);
Mx2=M(Nn);
Mx=[Mx1 Mx2]';
CN1=CZ1(N1);
CN2=CZ1(Nn);
CNy=[C1 C2]';

y1=interp1q(Mx,CNy,M(N1:Nn));

CNf=CZ1;

NEWRangeC=y1;


Cfa=changem(CZ1,[NEWRangeC], [CNf(N1:Nn)]);

figure
plot(M,Cf,'-*b',M,Cfa,'r')

就您所见,我使用了点 11 和 13,我排除了点 12,该点从 11 到 13 进行插值。这是可行的,但我想进行修改。

我的问题是:我如何 select 值是错误的并删除它们,但在它们的邻居之间插入 space。我想使用 M 矩阵值作为我的参考(不是点作为我的例子)。

好吧,您可以使用 find 命令找到错误的元素(这将 return 索引)。这也适用于矩阵。

然后您可以抓取每个索引周围的元素,并在它们之间进行插值,就像您所做的那样。

假设您知道哪些元素不正确,您可以使用 Matlab 的 interp1 函数对它们进行插值(这仅在 M 矩阵实际上是向量时有效`:

error_indices = [11 13];

all_indices = 1:length(M)

% Get the indices where we have valid data
all_correct_indices = setdiff(all_indices, error_indices)

% the first two arguments are the available data. 
% the third arguments is what indices you are looking for 
M_new = interp1(all_correct_indices, M(all_correct_indices), all_indices)

以上在 all_indices 处插入值——包括缺失的元素。在您已有有效数据 (all_correct_indices) 的情况下,Matlab 将 return 该数据。在其他地方,它将使用两个最近的邻居进行插值。

尝试 help interp1 了解有关此功能如何工作的更多信息。

更新 - 一个例子

 x = 1:10; % all indices
 y = x*10;  

 e = 3:7;  % the unknown indices
 s = setdiff(x, e);  % the known indices

 y_est = interp1(s, y(s), x)

 ans =
    10    20    30    40    50    60    70    80    90   100

并且我们看到 interp1 已经使用可用数据(特别是相邻点 20 和 80)线性插值了从 30 到 70 的所有值。