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

时间:2015-03-30 18:28:11

标签: matlab matrix data-fitting

我需要从矩阵中排除一些错误数据。我知道什么数据是正确的,我试图插入值之间,所以我可以得到不错的图表,没有那么大的错误。我必须使用那种形式的矩阵,我必须保持其形状。我只能替换一些标记为错误的数据。到目前为止,我将告诉你我的工作:

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点的点。这是有效的,但我想进行修改。

我的问题是:如何选择错误值并将其删除,但在邻居之间插入空格。我想使用M矩阵值作为我的参考(不是我的例子)。

2 个答案:

答案 0 :(得分:0)

好吧,您可以通过使用find命令查找错误元素(这将返回索引)开始。这也适用于矩阵。

然后,您可以抓住每个索引周围的元素,并在其间插入,就像您一样。

答案 1 :(得分:0)

假设您知道哪些元素不正确,您可以使用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将返回该数据。在其他地方,它将使用两个最近的邻居进行插值。

请尝试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的所有值。