私はあなたがしようとしているのはバイナリツリー再帰です。特に、このプロセスの結果としてあなたが望むものを知らなくても、問題の詳細を知らなくても良い解決策を提供することは難しいです。
私はこれを使って、これをどのように行うことができるかの例を挙げました。すべての結果がすべてのステップで保存されるため、必ずしも最も効率的ではありません。入力行列Aが与えられると、2出力関数[B, C] = MyFunction(A)
が計算され、isequal(A, B)
またはisequal(A, C)
のいずれかが検索されます。これが起こると、そのポイントでツリーの深さ、すなわち反復が起こるまでに何回反復が行われなければならなかったかを出力する。グローバル変数を持つビットはちょうど私が簡単な固定点(k番目の反復はちょうどA^k)で簡単な例を行うことができるようになっています。最大10回反復されます。だから、
function depth = myRecursor(A)
global A_orig;
A_orig = A;
depth = 1;
max_depth = 10;
pvs_level = cell(1);
pvs_level{1} = A;
while depth < max_depth,
this_level = cell(2*length(pvs_level), 1);
for ix = 1 : length(pvs_level),
[B, C] = MyFunction(pvs_level{ix})
if isequal(B, A) || isequal(C, A),
return;
end
this_level{2*ix - 1} = B;
this_level{2*ix} = C;
end
depth = depth + 1;
pvs_level = this_level;
end
function [B, C] = MyFunction(A)
global A_orig;
B = A_orig*A;
C = 2*A;
、例えばmyRecursor(eye(2))
は1(当たり前)を与えるとmyRecursor([0 1; 1 0])
は2
を与え、あなたは何を試してみましたか?それのどの部分が機能していないようですか?あなたはすべてのステップの出力を保存する必要がありますか? –
あなたは関数の行列の固定点を探していますか? http://en.wikipedia.org/wiki/Fixed_point_(mathematics) –
私の関数は行列Aをとり、その「いとこ」BとCを出力します。私はAのいとこ、そのいとこなどを探しています –