2016-07-11 5 views
0

私はAFdataと呼ばれる(100x2)配列を出力するforループを実行しています。ループの繰り返しごとに、AFdataAFmatに保存します。しかし、すべての反復のすべてのAFdataAFmatの正しい箇所を埋めるように、列のアルゴリズムを解決することはできません。Matlab:forループ内の行列に配列を格納する

これは私が今使っているコードである:例えば

for i = 1:Nsections 
    AFdata = Airfoil.getDatFile(Input.airfoilList{i},airfoilDir); 
    if isfield(Input,'TcRatios') && ~isempty(Input.TcRatios) 
     AFdata(:,2) = AFdata(:,2)*(Input.TcRatios(i)... 
      /Airfoil.calculateThickness(AFdata(:,2))); 
    end 
end 

を:

最初の反復がAFdata = [1 0; 2 0; 3 0] 第2の反復がAFdata = [4 9; 6 9; 8 9]

を与え、従って、2回の反復の後、AFmatあるべき与えます[1 0 4 9; 2 0 6 9 ;3 0 8 9]

ありがとうございます!

答えて

2

最初に必要なサイズのAFmatを事前に割り当ててから、各繰り返しで適切な列を入力します。

AFmat = zeros(100, 2*Nsections); 
for i = 1:Nsections 
    % ... calc AFdata 
    AFmat(:,[2*i-1,2*i]) = AFdata; 
end 
0

cat()の機能を使用できます。ブランクマトリックスとしてAFmatを宣言し(正確な寸法がわからない場合)、その後に連結してください。

AFmat=[]; 
    for i = 1:Nsections 
    %calculate AFdata............... 
    AFmat=cat(2,AFmat,AFdata); 
    end 

私はこれが(行列を割り当てていない)コードのパフォーマンスに影響を与えますが、MATLABは文句ないことをコメントを聞きました。私は個人的にはこれが好きです。なぜなら、cat()関数の次元が最終行列プロパティを制御するのが簡単だからです。

関連する問題