MATLAB中向量的插值取决于另一向量的变化



我有两个列向量'a'和'b'。两个向量中的第一列都是时间。

A =
35.2985    5.7057
35.2991    5.7098
35.2997    5.6880
35.3004    5.6739
35.3010    5.7140
35.3016    6.0141
35.3022    6.3620
35.3029    6.4793
35.3035    6.4663
35.3041    6.4665
35.3047    6.4646
35.3053    6.4844
35.3060    6.4743
35.3066    6.4865
35.3072    6.4878
35.3078    6.4975
35.3085    6.4952
35.3091    6.4958
35.3097    6.4734
35.3103    6.4082
35.3109    6.3767
35.3116    6.3786
35.3122    6.3796
35.3128    6.5867
35.3134    7.0733
35.3141    7.3427
35.3147    7.3238
35.3153    7.3093
35.3159    7.3188
35.3166    7.3436
B =
35.2985    1.0500
35.3053    1.0600
35.3085    1.0400
35.3166    1.0700

通过以下绘图

plotyy(A(:,1),Binter,A(:,1),A(:,2))

" A"具有三个不同的级别是可以看到的。对于" A"的每个级别,都有相应的" B"值。现在,我需要根据时间A(:,1)获得B(:,2)的插值值。'binter'是长度'a'的列。

Binter= interp1(B(:,1),B(:,2),A(:,1),'linear')
Binter =
NaN
1.0509
1.0518
1.0527
1.0537
1.0546
1.0555
1.0564
1.0573
1.0582
1.0591
1.0597
1.0558
1.0519
1.0481
1.0442
1.0403
1.0421
1.0444
1.0468
1.0491
1.0514
1.0537
1.0560
1.0583
1.0606
1.0629
1.0652
1.0675
1.0698

但我需要开始对a(::,2)迅速更改的periond进行插值[diff(a(a(:,2))> = 0.1]。其余的不应进行任何插值,而应考虑原始值。排名应该是这样的

Required_Output =
   NaN
1.0500
1.0500
1.0500
1.0500
1.0525
1.0550
1.0575
1.0600
1.0600
1.0600
1.0600
1.0558
1.0519
1.0481
1.0442
1.0400
1.0400
1.0400
1.0400
1.0400
1.0400
1.0400
1.0475
1.0550
1.0625
1.0700
1.0700
1.0700
1.0700

在" quilt_output"中在" A(::,2)"的不同级别上可用。在没有任何插值的情况下,在" B(b(::,2)"中使用的单个可用点。"对于" A(::,2)"中的不同级别。感谢您的建议/专业知识。

第一件事应该很简单:只需定义插值步骤

B = [100.3716    1.0500;  100.3894    1.0600];
step = 100.3741:0.0006:100.3869; %true for you actual matrix A
Binter = interp1(B(:,1),B(:,2),step,'linear');

第二个问题可以颠倒(更容易):第一个计算Binter,然后检查A(i,2)是否不是>快速更改。当然,可以在A(i,2)和A(i-1,2)之间定义差异。我认为diff(A(:,2))>=0.1不是一个好线代码,而是尝试此(未进行完全测试

N = size(Binter,2);
C = diff(A);
for i=1:N-1
    if (C(i,2)<0.1) && (i < N/2)
      Binter(i) = B(1,2);
    else if (C(i,2)<0.1) && (i >= N/2) 
         Binter(i) = B(2,2);
        end
    end
end
Binter(N) = B(2,2);
disp('Required Output =');
disp(Binter');

假设Binter的中间至少有一些要更改的点,而这些点仅在Binter的中间。为了不用C(n,2)而失败,它将导致"超出界限",我选择将n-1作为循环中的限制,并添加最后一个更改的行Binter(N) = B(2,2);

最新更新