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 ~ 4250 rpm) と流量 (1 ~ 6 L/min) では、圧力が異なります。

1) これらの 2 つの速度の間に新しい行を挿入する方法を知りたいです。たとえば、速度が 2030rpm の場合、2030rpm がどの 2 つの値の間にあるかを見つけて、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) 私の 2 番目の問題は、以下の 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)

ここでoldmatnewmatは行列の古いバージョンと新しいバージョン、およびに挿入された 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)

(if2130は新しい行の最初の値です。)

于 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

2番目から最後の列までの要素がゼロである行を、前後の行の平均値で埋めたいだけの場合。

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 に答える