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

在Matlab中的两个已知行之间插入一行,matlab,insert,interpolation,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

我有一组如下所示的数据:

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

多谢各位

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
是矩阵的新旧版本,
x+1
是插入
newmat
0
行的索引

然后,假设您需要线性插值,类似于:

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

我想我犯了一些小错误,这对于您的示例来说是非常具体的,如果您在修复和归纳方面有困难,请更新您的问题或评论。

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

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

根据这些意见,我们有:

newrow = [2130, zeros(1,size(test,2)-1)]
p(size(p,1)+1,:) = newrow
p = sortrows(p)
(如果
2130
是新行的第一个值。)

这可能会帮助您:

% 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
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
如果只想用上一行和下一行的平均值填充从第二列到最后一列的元素为零的行

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         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
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
此代码假定:

  • 如果第一列元素为非零,则要填充行
  • 您希望用上一行和下一行值之间的平均值替换零
  • 只插值内部行

我希望这会有帮助。

我已经将ma数据集命名为oldmat,我记下了你在第一行给出的公式,它给了我一个与我的数组大小相同的数组,但其中包含所有的零。之后x是什么?它是速度吗?我是否必须将其作为函数,还是只将其写入命令窗口?更新以指示p
p
是保存数据的矩阵。请记住,我对matlab不是很在行。如何在p的末尾插入一个新行?
p(大小(p,1)+1,:)=[这里的新行]
p是一个47x22数组,我把你说的放进去,它给了我一个错误。然后我尝试pnew=p(大小(p,1)+1,:),它说“试图访问p(48,:);索引超出范围,因为大小(p)=[47,22]您不应该直接包括
[此处的新行]
。相反,请用您所在行的数据替换
[此处的新行]