在Matlab中的两个已知行之间插入一行

时间:2012-04-19 12:46:59

标签: matlab insert interpolation

我有一组数据显示如下:

                    flow Rate (L/min) 
Speed(rpm)      1      1.25      1.5     1.75    2       2.25    2.5    2.77    ...  6
                            Pressure (Pa)
2000       15251.2  15232   15200   15168   15027.2 14912   14752   0       ...  0
2050       16000    15840   15808   15744   15680   15520   15488   15232   ...  0
2100       16384    16256   16217.6 16192   16128   16064   16032   15872   ...  0
2150       17088    17024   16992   16960   16928   16832   16704   16512   ...  0
.           .            .       .       .        .       .      .       .            .
.           .            .       .       .        .       .      .       .            .
.           .            .       .       .        .       .      .       .            .
4250       61120    60800   60768   60736   60672   60736   60608   60416  ...  56960

如图所示,在特定速度(从2000-4250rpm)和流速(从1-6 L / min)出现不同的压力。

1)我想知道如何在这两种速度之间插入一个新行,例如,如果我的速度为2030rpm,我希望能够找到2030rpm中哪两个值并插入一行在matlab上 演示如下:

2000    15251.2 15232   15200   15168   15027.2 14912   14752   0   ...  0
2030    0           0     0         0     0         0      0     0
2050    16000   15840   15808   15744   15680   15520   15488   15232   ...  0

2)我的第二个问题是我如何在下面的两个值之间进行插值(零为零并得到一个值。

15232   
  0          
16000

我真的很感激,如果有人可以回答我的任何问题,最好是第一个,所以实际上可以进入第二步lol

非常感谢

3 个答案:

答案 0 :(得分:2)

newmat = zeros(size(oldmat,1)+1,size(oldmat,2))

newmat(1:x) = oldmat(1:x)
newmat(x+2:end) = oldmat(x+1:end)

其中oldmatnewmat是您的矩阵的旧版本和新版本,x+1是插入0的{​​{1}}行的索引。

然后,假设您想要线性插值,例如:

newmat

我希望自己犯了一些小错误,如果您在修复和推广方面遇到困难,更新您的问题或评论,这就非常具体。

答案 1 :(得分:0)

假设数据存储在名为p的矩阵中,用于以正确的顺序自动定位新行:

将新行添加到p的末尾,然后: p = sortrows(p)

跟进评论,我们有:

newrow = [2130, zeros(1,size(test,2)-1)]
p(size(p,1)+1,:) = newrow
p = sortrows(p)

(如果2130是新行的第一个值。)

答案 2 :(得分:0)

这可能会对您有所帮助:

% Matrix dimensions
nCols = 10;
nRows = 8;

% Synthetic data
matrix = [ linspace(2000,4250,nRows)' , 2000*rand(nRows,nCols-1)];
matrix([2,4],2:end) = zeros(2,nCols-1); % where some rows are zeros (2 and 4 on this example)
matrix
  

matrix =

     

1.0e + 03 *

2.0000    1.7810    1.3674    1.4983    0.7329    1.5439    1.5639    0.2246    0.8653    1.5379
2.3214         0         0         0         0         0         0         0         0         0
2.6429    1.4687    1.4454    1.4801    1.3701    0.7765    0.5881    0.5831    0.2195    0.5459
2.9643         0         0         0         0         0         0         0         0         0
3.2857    0.1458    0.2350    1.4699    1.5787    0.4579    1.0617    1.9288    0.3749    1.3466
3.6071    0.1771    1.2814    1.9412    0.7353    1.2839    0.1830    0.8650    0.5324    0.8591
3.9286    1.5967    0.6576    1.7339    0.4121    0.9690    0.8106    1.3895    1.5957    0.9035
4.2500    1.8860    1.3076    0.1725    0.1733    0.3037    0.2097    1.5162    0.9752    1.2197

如果您只想填充第二列到最后一列的元素为零的行,其中包含前一行和下一行的平均值。

for i=2:nRows-1
  if ( sum(matrix(i,2:end))==0 )
    matrix(i,2:end) = mean( matrix([i-1,i+1],2:end) );
  end
end
matrix
  

matrix =

     

1.0e + 03 *

2.0000    1.7810    1.3674    1.4983    0.7329    1.5439    1.5639    0.2246    0.8653    1.5379
2.3214    1.6248    1.4064    1.4892    1.0515    1.1602    1.0760    0.4039    0.5424    1.0419
2.6429    1.4687    1.4454    1.4801    1.3701    0.7765    0.5881    0.5831    0.2195    0.5459
2.9643    0.8072    0.8402    1.4750    1.4744    0.6172    0.8249    1.2560    0.2972    0.9462
3.2857    0.1458    0.2350    1.4699    1.5787    0.4579    1.0617    1.9288    0.3749    1.3466
3.6071    0.1771    1.2814    1.9412    0.7353    1.2839    0.1830    0.8650    0.5324    0.8591
3.9286    1.5967    0.6576    1.7339    0.4121    0.9690    0.8106    1.3895    1.5957    0.9035
4.2500    1.8860    1.3076    0.1725    0.1733    0.3037    0.2097    1.5162    0.9752    1.2197

此代码假定:

  • 您想要填充的行只有第一列元素非零。
  • 您希望将前一行与下一行值之间的平均值替换为零。
  • 您只插入内部行。

我希望它有所帮助。