2012-04-19 70 views
1

我有以下所示的一组数据:插入两个已知行之间的行在Matlab

    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升/分钟)如图所示,有不同的压力。

1)我想知道如何插入一个新的行之间的两个这样的速度,例如,如果我有一个2030rpm的速度,我希望能够找到2030rpm是哪两个值之间插入一个MATLAB的 示范行下面hown:

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 

我真的很感激。如果任何人可以回答我的任何问题, erably第一个这样的IC实际得到第二步笑

谢谢你这么多

回答

0

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

追加新的行处的p结束,则: p = sortrows(p)

上跟进的意见,我们有:

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

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

+0

p是什么意思? – user1343968 2012-04-19 13:21:26

+0

已更新以指示'p'是保存数据的矩阵。 – 2012-04-19 13:38:10

+0

请记住,我不是那么好matlab.how我插入一个新的行在p的结尾? – user1343968 2012-04-19 13:48:41

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 s插入newmat

然后,假设你想线性插值,是这样的:

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

我希望我做了一些小的失误,这是相当具体到你的例子,如果你有麻烦固定和要概括,更新你的问题或评论。

+0

我已经命名为ma集数据oldmat,我放下了你在第一行给出的公式,它给了我一个与我的大小相同但是全部为零的数组。 之后,x会是什么?它会是速度吗? 我也必须将其作为一个函数或只是写在命令窗口? – user1343968 2012-04-19 13:38:05

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 

此代码假定:

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

我希望它有帮助。