Development Environment | ![]() ![]() |
デバッグの例題 - Collatz 問題
例題となるデバッグセッションの実行には、2つのM-ファイル, collatz.m
、及び、collatzplot.m
の作成が必要となります。この2 つのM-ファイルは、collatz問題に関するデータを生成するファイルです。ある与えられた正の整数 n
について、Collatz 関数は、常に1 に戻る数列を生成します。n
が偶数の場合、数列でつぎに来る整数値は、n
番目の整数値を2で割った値となります。これに対し、n
が奇数の場合、数列でつぎに来る整数値は、n
番目の整数値を3倍して、1を加えた値となります。このような計算プロセスを数列で、つぎの整数値が1 になるまで繰り返します。数列を構成する整数の数は、数列の開始値 n
の値によって決定されます。
Collatz 問題は、この Collatz 関数が全ての正の整数について、1に還元していくことを証明するものです。このデバッグ例題で用いられるM -ファイルは、このCollatz問題を研究する上で役立ちます。ファイル collatz.m
は、ある与えられた正の整数n
について、整数列を生成します。一方、ファイル collatzplot.m
は、ある与えられた正の整数 n
について、数列を構成する整数の数を計算し、計算結果をプロットします。出力されるプロット表示は、より一歩進んだ研究の対象となりうるパターンを示すことになります。
n
が、1、2、または、3の場合、計算結果は、つぎのとおりです。
n |
数列 |
数列を構成する整数の数 |
1 |
1 |
1 |
2 |
2 1 |
2 |
3 |
3 10 5 16 8 4 2 1 |
8 |
Collatz 問題用の M-ファイル
つぎの2つの M-ファイルは。デバッグの例題で使用するものです。ユーザのシステムにこれらのファイルを作成するには、2つの新しい M-ファイルをオープンします。ヘルプブラウザからつぎのコードを選択し、コピーして、M-ファイルにペーストします。そして、ファイル名 collatz.m
とcollatzplot.m
として保存します。それらを保存するとき、ユーザのカレントディレクトリであるか、または、保存したディレクトリを、ユーザのサーチパスに付加していることを確認してください。ファイルの中の一つが、デバッグ用にエラーを組み込んでいます。
function sequence=collatz(n) % Collatz 問題。整数数列は、1に収束するように作成 % 任意の正の整数 n に対して、 % n が偶数の場合、2で割り、 % n が奇数の場合、3を掛け、1を加えます。 % 結果が1になるまで、繰り返します。 sequence = n; next_value = n; while next_value > 1 if rem(next_value,2)==0 next_value = next_value/2; else next_value = 3*next_value+1; end sequence = [sequence, next_value]; end
function collatzplot(n) % Collatz 問題の数列長をプロット % フィギュアを用意 clf set(gcf,'DoubleBuffer','on') set(gca,'XScale','linear') % % 数列長を計算し、プロットします。 for m = 1:n plot_seq = collatz(m); seq_length(m) = length(plot_seq); line(m,plot_seq,'Marker','.','MarkerSize',9,'Color','blue') drawnow end
![]() | M-ファイルのデバッグ | 例題の試行 | ![]() |