2016-08-30 5 views
1

ループの開始時にコードの最大値がuで1(xの長さが1)です。 newftn()を呼び出した後、長さはxになります。私のループは新しい長さのxに従いますが、1サイクル後に終了します(つまり、最初の長さはxです)。どのようにして目的の動作を達成できるのかをお勧めします。ループが開始した後、制御変数の最初に決定された最大値を変更できますか?

x(1) = 1; 
for u = 1:length(x) 
    p = 3; 
    newftn(); 
end 
function newftn() 
    c = [4,5]; 
    x = horzcat(x,c); 
end 
+1

書き込む予定のループが終了します。これはXY問題のようなにおいをしますが、実際に何をしたいのですか? – Bernhard

+0

私はこれがあまりにも単純化されていると信じています。既に必要な機能を果たす機能があるかもしれません。投稿を明確にすれば、より良い答えを得ることができるかもしれません。 (ちなみに、他の人の質問には答えられないので、どこにいても私には分かりません。 – patrik

+0

@Patrik ....はい私はそれを単純化しすぎたと思うが...とにかくそれを解決した。私は私の解決策を共有したいと思っていましたが、私はそれがあまりに単純化された質問として質問した質問に直接関係しません。とにかくur提案のおかげで! –

答えて

4
  1. を一度ノーのでforループを使用するときは、これを避けることはできません。 forの反復の数が決定され、後で変更することはできません。 whileループを使用して、目的の動作を達成できます。
  2. ループのサイズを大きくする代わりに、ベクトルのメモリを割り当てるほうがよいでしょう。例えばx= zeros(1,n)を入力し、値を置き換えます。

  3. あなたがここで何をしようとしているのは、無限のサイズのメモリを必要とする無限ループのようです。私はこれがあなたが望むものではないと確信しています!コードを変更する必要があります。

1

代わりwhileループでこれを行うことができます。

x(1) = 1; 
c = [4 , 5]; 
u = 0; 
while u < length(x) 
    u = u + 1; 
    p = 3; 
    x = horzcat(x,c); 
end 
+1

あなたは@ TariqIslamを歓迎していますが、あなたが 'u'を見ると、1,2,3の順番になります。通常は、forループをwhileループに置き換えることができます。 – erfan

関連する問題