maxima入門

コラッツ予想:コラッツ樹を求める

数論の未解決問題にコラッツ予想というものがあります。
「正の数nについて、nが偶数なら2で割り、nが奇数なら3*n+1する」
このルールのもとでどんな数も必ず4->2->1のループにたどり着く
というのがコラッツ予想です。
世界中の数学者が挑んでも解けない難問ですので
これを解くことはしませんが、
かわりに、maximaの力を使ってnが未知数のままの
系統樹(コラッツ樹)を求めてみようというのが
このページのテーマです。

以下がプログラム

コラッツ樹

clz(x):=if x=1 then [1] else if mod(x,2)=0 then cons(x,clz(x/2)) else cons(x,clz(3*x+1)); c1(x):=ratsimp(x/2); c2(x):=ratsimp(3*x+1); evenf(x,n):=if n=0 then [c1(x),c2(x)] else flatten([c1(evenf(x,n-1)),c2(oddf(x,n-1))]); oddf(x,n):=if n=0 then c1(x) else c1(evenf(x,n-1)); col(x,n):=evenf(x,n-1); col(x,2); col(x,3); col(x,4);
maximaを使えば結構短く済むものです。 ちょっと改良して別の数式で試したりいろいろと遊んでみてください。
since 2014/03/23