2016-05-29 22 views
-2

Matlabの再帰関数で実行する反復回数を設定するにはどうすればよいですか? 私はそれが10^3反復を実行する以下の機能Matlabの再帰関数で実行する反復回数を設定するにはどうすればよいですか?

function t=m(x1,x2) 
if x1<0.5 
    if x2<0.5 
     t=(0+m(2*x2, 2*x1))/4; 
    else 
     t=(1+m(2*x1, 2*x2-1))/4; 
    end 
else 
    if x2>=0.5 
     t=(2+m(2*x1-1, 2*x2-1))/4; 
    else 
     t=(3+m(1-2*x2, 2-2*x1))/4; 
    end 
end 

end 

を持っています。

私は

function t=m(x1,x2,iter) 
while iter<=10^3 
     if x1<0.5 
     if x2<0.5 
      t=(0+m(2*x2, 2*x1, iter+1))/4; 
     else 
      t=(1+m(2*x1, 2*x2-1, iter+1))/4; 
     end 
     else 
     if x2>=0.5 
      t=(2+m(2*x1-1, 2*x2-1, iter+1))/4; 
     else 
      t=(3+m(1-2*x2, 2-2*x1, iter+1))/4; 
     end 
     end 
end 
end 

とメイン

x1=0.3; 
    x2=0.4; 
    iter=0; 
    t=m(x1,x2,iter); 

にしようとしたが、それは私にいくつかのエラーが発生します。どんな助け?

+0

あなたの質問は絶対に意味がありません。これは、繰り返し実行する反復回数を選択できる反復収束プロセスの一部ではありません。あなたが再帰を定義するとき、別の再帰呼び出しなしで結果を計算するいくつかの辺のケースがあるはずです。あなたが解決しようとしている実際の問題は何ですか? –

+0

ありがとうございます。あなたが反復の数= 10^3ストップを打つと、あなたが持っているものを私に与えたときに、エッジケースができないのですか? – user3285148

+1

はい、それはあなたの大文字小文字になりますが、 'if(iter> = 1e3)、t = _some_value_;戻る;終わり。あなたは再帰に加えて 'while'ループを必要とせず、'あなたが持っているもの 'によって何を意味するのか明確ではありません - 'x1'と' x2'の組み合わせでなければなりません。 –

答えて

1

まず、ループを関数内に配置しないでください。反復は再帰の役割です。

は今、あなたはこのようなあなたの関数を呼び出すことができます(あなたはそれが最後の繰り返しの後に0を返すようにしたいと仮定)

function t=m(x1,x2,iter) 
t = 0; 
if iter > 0 
     if x1<0.5 
     if x2<0.5 
      t=(0+m(2*x2, 2*x1, iter-1))/4; 
     else 
      t=(1+m(2*x1, 2*x2-1, iter-1))/4; 
     end 
     else 
     if x2>=0.5 
      t=(2+m(2*x1-1, 2*x2-1, iter-1))/4; 
     else 
      t=(3+m(1-2*x2, 2-2*x1, iter-1))/4; 
     end 
     end  
end 
end 

::だからにあなたの関数を変更

m(0.3, 0.4, 10^3) 

しかし、その前に、

set(0,'RecursionLimit',10^3+2) 

これらの入力では、わずか8回の反復で0.1808に収束します。

+0

ありがとうございます。まさに私が望んでいたもの。可能であれば、「リターン」を含めることが代替案となるかどうか尋ねてもらえますか? – user3285148

関連する問題