Maxima Frontier

Maxima の利用例を掲載していこうとするシリーズです。いずれの文書も B5 用紙 2 ページ程度で、しかも、(幸か不幸か)高度な知識は全く不要なため、すぐに読むことが出来ます。

[PDF]Lucas テスト

Mersenne 数が素数か否かを判定する Lucas テストの実験です。

(%i2) merpp(3217);
(%o2)                                prime

[PDF]Monte Carlo 法

乱数を用いた数値積分法である Monte Carlo 法を用いて、円周率の近似値を計算してみました。

(%i2) monte(10);
(%o2)                                 3.6
(%i3) monte(100);
(%o3)                                3.28
(%i4) monte(1000);
(%o4)                                 3.2
(%i5) monte(10000);
(%o5)                                3.134

montecarlo

[PDF]エラトステネスの篩

エラトステネスの篩で素数表を作成し、それを利用して素因数分解する関数を作ってみました。

(%i2) eratosthenes(30);
2 
3 
5 
7 
11 
13 
17 
19 
23 
29 
(%o2)                                done
(%i3) factor_e(12345);
(%o3)                             [823, 5, 3]
(%i4) apply("*", %);
(%o4)                                12345

[PDF]レプユニット

素数レプユニットについて調べようと努力してみました。

(%i2) prup(10, 1000);
(%o2)                                  4

[PDF]単位分数分解

欲張りアルゴリズムによって、単位分数分解を求める関数を作成してみました。

(%i2) unit_frac_decomp_g(7/101);
                                1    1     1
(%o2)                          [--, ---, ------]
                                15  379  574185

[PDF]完全数

Maxima を使って完全数を探そうとしてみました。

(%i2) for i: 1 thru 10000 do if perfectp(i) then print(i);
6
28
496
8128
(%o2)                                done

[PDF]平方完成

多項式を引数にとり、平方完成形を返す関数を作ってみました。

(%i2) f(x) := 3*x^2 - 4*x + 5;
                                       2
(%o2)                       f(x) := 3 x  - 4 x + 5
(%i3) elim_2nd(f(x), x);
                                       2 2   11
(%o3)                           3 (x - -)  + --
                                       3     3

[PDF]式の一部を抽出

式の中から、特定の部分を抽出する関数を作ってみました。

(%i2) 'integrate((x + 7) * log(x + 9) + sin(2 * x), x);
                     /
                     [
(%o2)                I ((x + 7) log(x + 9) + sin(2 x)) dx
                     ]
                     /
(%i3) pickup(%, log);
(%o3)                            [log(x + 9)]

[PDF]恒等式

恒等式を解く(係数に未知数を含む恒等式に対して、その未知数を決定する)関数を作ってみました。

(%i2) (x - 1)*(2*x - 3) + A = B*(x + 2)*x + C*(x + 1);
(%o2)           A + (x - 1) (2 x - 3) = (x + 1) C + x (x + 2) B
(%i3) solve_identity(%, x);
(%o3)                    [[A = - 12, B = 2, C = - 9]]

[PDF]極大・極小(1 変数の場合)

1 変数関数の極値(極大・極小)を求めるバッチファイルを作ってみました。

(%i2) rmmpt(x^3 - x^2);
Relative Minimum Point: 
                                    2    4
                                   [-, - --]
                                    3    27

Relative Maximum Point: 
                                    [0, 0]

(%o2)                                done

[PDF]極大・極小(2 変数の場合)

2 変数関数の極値(極大・極小)を求めるバッチファイルを作ってみました。

(%i2) rmmpt_two(2*x - 4*y - x^2 - y^2);
Relative Maximum Point: 
                                  [1, - 2, 5]

(%o2)                                done