rootscontract ..... 平方根・累乗根をまとめ関数

書式

rootscontract(累乗根の式)

で用い、累乗根同士の積・商を積・商の累乗根にまとめる。足し算や引き算は(当然)まとめられない。

(%i1) a^(1/2) * b^(1/2) / c^(1/2);

                           sqrt(a) sqrt(b)
(%o1)                      ---------------
                               sqrt(c)


(%i2) rootscontract(%);

                                   a b
(%o2)                         sqrt(---)
                                    c


(%i3) a^(1/2) * b^(1/2) - c^(1/2);

(%o3)                 sqrt(a) sqrt(b) - sqrt(c)


(%i4) rootscontract(%);

(%o4)                    sqrt(a b) - sqrt(c)

デフォルトでは変数 rootsconmode が true に設定されているため、指数の分母が同じ場合だけでなく、一方が他方の約数になっている場合もまとめられる(変数 rootsconmode については後述する)。

(%i5) a^(1/3) * c^(1/15);

                              1/3  1/15
(%o5)                        a    c


(%i6) rootscontract(%);

                                 1/5 1/3
(%o6)                        (a c   )


(%i7) b^(1/5) * c^(1/15);

                              1/5  1/15
(%o7)                        b    c


(%i8) rootscontract(%);

                                 1/3 1/5
(%o8)                        (b c   )


(%i9) a^(1/3) * b^(1/5) * c^(1/15);

                            1/3  1/5  1/15
(%o9)                      a    b    c


(%i10) rootscontract(%);

                            1/3  1/5  1/15
(%o10)                     a    b    c
最後の例 (%i10) は意地悪でした。こういった場合は、人間が判断すべきです。
(%i11) rootscontract(part(%o10, [1, 3])) * part(%o10, 2);

                           1/5     1/5 1/3
(%o11)                    b    (a c   )

変数 rootsconmode に all を代入しておくと、指数の分母の最小公倍数によってまとめられる。

(%i12) rootsconmode;

(%o12)                          true


(%i13) rootsconmode: all;

(%o13)                           all


(%i14) rootscontract(%o10);

                              5  3   1/15
(%o14)                      (a  b  c)


(%i15) a^(1/3) * b^(1/5) * c^(1/7);

                            1/3  1/5  1/7
(%o15)                     a    b    c


(%i16) rootscontract(%);

                           35  21  15 1/105
(%o16)                   (a   b   c  )

変数 rootsconmode には 3 つの値 false、true、all を代入でき、それぞれの場合の関数 rootscontract の挙動は下表の通り。

変数 rootsconmode の値 関数 rootscontract の挙動
false 指数の分母が一致している場合のみまとめられる
true(初期値) 一方の分母が他方の分母の約数になっている場合にその約数によってまとめられる
all 全ての分母の最小公倍数によってまとめられる

(%i17) rootsconmode: false;

(%o17)                          false


(%i18) a^(1/7) * b^(1/7);

                               1/7  1/7
(%o18)                        a    b


(%i19) rootscontract(%);

                                   1/7
(%o19)                        (a b)


(%i20) a^(1/7) * b^(1/14);

                              1/7  1/14
(%o20)                       a    b


(%i21) rootscontract(%);

                              1/7  1/14
(%o21)                       a    b

変数 rootsconmode に true や all が代入されている場合は、最後の例 (%i21) もまとめられる。なお、変数 rootsconmode の効果を一時的に変更したい場合は、例えば block 関数を用いれば良い。

(%i22) block([rootsconmode: true], rootscontract(%o20));

                                      1/7
(%o22)                     (a sqrt(b))


(%i23) block([rootsconmode: all], rootscontract(%o20));

                               2   1/14
(%o23)                       (a  b)


(%i24) rootscontract(%o20);

                              1/7  1/14
(%o24)                       a    b