1

我有一组数据如下所示:

                    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

如果有人能回答我的任何问题,最好是第一个问题,我真的很感激,这样我就可以真正进入第二步了,哈哈

非常感谢

4

3 回答 3

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

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

其中oldmat,newmat是矩阵的新旧版本以及插入 sx+1的行的索引。0newmat

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

newmat(x+1,:) = newmat(x,:)+0.6*(newmat(x+2,:)-newmat(x,:))

我希望我犯了一些小错误,这对于您的示例非常具体,如果您在修复和概括时遇到问题,请更新您的问题或评论。

于 2012-04-19T13:09:40.477 回答
0

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

在 末尾追加新行p,然后: p = sortrows(p)

跟进评论,我们有:

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

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

于 2012-04-19T13:13:26.340 回答
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

矩阵 =

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

矩阵 =

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

此代码假定:

  • 您要填充的行只有第一列元素是非零的。
  • 您想用上一行和下一行值之间的平均值替换零。
  • 您只插入内部行。

我希望它有所帮助。

于 2012-04-19T14:37:06.733 回答