2017-09-25 5 views
-1

私は自分のスクリプトの感度調査を実行しようとしています。私は(velocity、searchVolume1、およびsearchVolume2)の3つの主な変数をコード内で変更しています。しかし、変数のうちの1つ(searchVolume1)だけを変更できるスクリプトを書くことができましたが、他の2つは一定に保たれていました。私はスクリプトが2つの変数(searchvolume1とvelocity)を代わりに変更できるようにし、その後、3番目の変数(searchVolume2)を変更してプロシージャ全体を繰り返す再実行を行います。 1つの変数のみが変更された場合は、作品のスクリプトは次のとおりです。私は2番目の変数の変更が含まれるように(下記参照)、これを再編集したループ出力を動的に保存するにはどうすればよいですか?

searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]'; 
for kk = 1: numel(searchVolume1) 

    [xN, xU, xC] = myMfile_sensitivity(searchVolume, kk); 

    t1(:,kk) = xN(:,kk); 
    t2(:,kk) = xU(:,kk); 
    t3(:,kk) = xC(:,kk);  
end 

。ダイナミックストレージの作成を検討していますが、t1、t2、t3の結果を新しい変更で保存するにはどうすればよいか正確にはわかりません。 t1, t2, t3を3 velocitiesのすべてsearchVolume1のために:

Velocity = [10, 20, 30]; 
searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]'; 

for tt = 1: numel(velocity) 
    for kk = 1: numel(searchVolume1) 

    [xN, xU, xC] = myMfile_sensitivity(searchVolume, kk, velocity, tt); 

    t1(:,kk) = xN(:,kk); 
    t2(:,kk) = xU(:,kk); 
    t3(:,kk) = xC(:,kk);  
    end 
end 

上記は私が持っていることになってることを意味します。してください、任意のアイデア/助言/提案をいただければ幸いです。ありがとう

+1

a)ループ内で配列を成長させないでください。*** preallcoate ***を使用して時間を節約します。 b)多次元の配列、構造または細胞を調べ、感覚的に保存する。 – Adriaan

+0

xN、xU、xCのサイズはどれくらいですか?彼らは数字だけですか?配列ですか? –

答えて

0

アドリアン氏によると、出力変数のサイズを事前に割り当てて、処理を高速化する必要があります。 xN、xU、xCは定数であると仮定した。配列全体とインデックスをmyMfile_sensitivityに渡す代わりに、必要な番号が渡されるように単純に変更しました(例:searchVolume1(kk))。

velocity = [10, 20, 30]; 
searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]'; 
% I just copied searchVolume1 for this example 
searchVolume2 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]'; 

t1 = zeros((length(velocity),length(searchVolume1),length(searchVolume2)); 
t2 = zeros((length(velocity),length(searchVolume1),length(searchVolume2)); 
t3 = zeros((length(velocity),length(searchVolume1),length(searchVolume2)); 
for tt = 1: numel(velocity) 
    for kk = 1: numel(searchVolume1) 
     for jj = 1: numel(searchVolume2) 

      [xN, xU, xC] = myMfile_sensitivity(searchVolume1(kk), velocity(tt), searchVolume2(jj)); 

      t1(tt,kk,jj) = xN; 
      t2(tt,kk,jj) = xU; 
      t3(tt,kk,jj) = xC;  
     end 
    end 
end 
+0

'searchVolume1'の長さは' velocity'でも同じですが、velocityを変更しても同じではありません。たとえば、 'velocity = 10 'のときの' searchVolume1 = 28'の長さです。しかし、速度が20に変わると、searchVolume1の長さは44になります。 – User110

+0

現在のソリューションを実行すると、メインスクリプトの "myMfile_sensitivity"に内部エラーがあります。しかし、私はまた、私があなたの解決策に影響を与えるべきである上記のステートメントを信じたいでしょうか?あなたの助けをありがとう@Jeff Lapierre – User110

+0

速度とsearchVolume1 + 2の長さはこのコードのために重要ではありません。 「myMfile_sensitivity」にエラーが表示されるのは、作成した関数のように思えるからです。私はその機能が何をすると思われるのか分かりません。それはおそらくこれとは異なる質問でしょう。 –

関連する問題