Next: , Previous:   [Contents][Index]

10 Mathematical Functions


10.1 Functions for Numbers

関数: abs (expr)

exprの絶対値を返します。もしexprが複素数なら、exprの絶対値(modulus)を返します。

absはリスト上、行列上、等式上に分配されます。 distribute_overを参照してください。

関数: ceiling (x)

xが実数の時、x以上の最小の整数を返します。

もしxが定数式(例えば10 * %pi)なら、 ceilingは、xを多倍長浮動小数点数を使って評価し、 その多倍長浮動小数点数にceilingを適用します。 ceilingは浮動小数点を使うので、ほとんど起こりえませんが、 ceilingは定数入力に対して間違った値を返す可能性があります。 このエラーを起こさないようにするには、fpprecの3つの値を使って浮動小数点評価を行います。

定数でない入力に関しては、ceilingは整理された値を返そうとします。 以下は、ceilingが知っている式整理の例です:

(%i1) ceiling (ceiling (x));
(%o1)                      ceiling(x)
(%i2) ceiling (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
(%o4)                [n, abs(n), max(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) ceiling (x);
(%o6)                           1
(%i7) tex (ceiling (a));
$$\left \lceil a \right \rceil$$
(%o7)                         false

関数ceilingは、自動ではリストや行列上にマップしません。 最終的に、明らかに複雑な入力すべてに対して、ceilingは名詞形を返します。

もし関数の範囲が整数の部分集合なら、 integervaluedに宣言できます。 ceilingfloor関数両方とも、この情報を使います; 例えば:

(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1
関数: entier (x)

xが数値の場合、x以下の最大の整数を返します。 (fixnumにおける)fixはこれの別名で、 fix(x)は正確に同じです。

関数: floor (x)

xが実数の時、x以下の最大の整数を返します。

もしxが定数式(例えば10 * %pi)なら、 floorは、多倍長浮動小数点数を使ってxを評価し、 結果の多倍長浮動小数点にfloorを適用します。 floorは浮動小数点を使うので、ほとんど起こりえませんが、 floorは定数入力に対して間違った値を返す可能性があります。 このエラーを起こさないようにするには、fpprecの3つの値を使って浮動小数点評価を行います。

定数でない入力に関しては、floorは整理された値を返そうとします。 以下は、ceilingが知っている式整理の例です:

(%i1) floor (ceiling (x));
(%o1)                      ceiling(x)
(%i2) floor (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
(%o4)                [n, abs(n), min(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) floor (x);
(%o6)                           0
(%i7) tex (floor (a));
$$\left \lfloor a \right \rfloor$$
(%o7)                         false

関数floorは、自動ではリストや行列上にマップしません。 最終的に、明らかに複雑な入力すべてに対して、floorは名詞形を返します。

もし関数の範囲が整数の部分集合なら、 integervaluedに宣言できます。 ceilingfloor関数両方とも、この情報を使います; 例えば:

(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1
関数: fix (x)

entier (x)の別名です。

関数: lmax (L)

Lがリストもしくは集合の時、apply ('max, args (L))を返します。 Lがリストでも集合でもない時、エラーを示します。

関数: lmin (L)

Lがリストもしくは集合の時、apply ('min, args (L))を返します。 Lがリストでも集合でもない時、エラーを示します。

関数: max (x_1, ..., x_n)

x_1からx_nの中の最大値に関して整理された値を返します。 get (trylevel, maxmin)が2以上の時、 maxは、式整理max (e, -e) --> |e|を使います。 get (trylevel, maxmin)が3以上の時、 maxは、2つの他の引数の間の式を消去しようとします; 例えば、max (x, 2*x, 3*x) --> max (x, 3*x)trylevelを2に設定するには、put (trylevel, 2, maxmin)を使います。

関数: min (x_1, ..., x_n)

x_1からx_nの中の最小値に関して整理された値を返します。 get (trylevel, maxmin)が2以上の時、 maxは、式整理max (e, -e) --> |e|を使います。 get (trylevel, maxmin)が3以上の時、 maxは、2つの他の引数の間の式を消去しようとします; 例えば、max (x, 2*x, 3*x) --> max (x, 3*x)trylevelを2に設定するには、put (trylevel, 2, maxmin)を使います。

maxlmin.も参照してください。

関数: round (x)

xが実数の時、xに最も近い整数を返します。 1/2を掛けてroundして2を掛けると、最も近い偶数に丸められます。 xの評価は、floorceilingに似ています。

関数: signum (x)

実数か複素数xに対して、もしxが0ならsignum関数は0を返します; 非ゼロ数値入力xに対して、signum関数はabs(x)/xを返します。

非数値入力に対して、Maximaは入力の符号を決定しようと試みます。 符号が負、ゼロ、正いずれかの時、signumはそれぞれ、-1, 0, 1を返します。 符号に関する他の値すべてに対して、signumは式整理された同値形を返します。 式整理は(signum(-x)-signum(x)を与える)反転と (signum(x*y)signum(x) * signum(y)を与える)乗法恒等式を含みます。

signum関数はリスト、行列もしくは等式上に分配されます。 distribute_overを参照してください。


10.2 Functions for Complex Numbers

関数: cabs (expr)

exprの複素数の絶対値を返します。

関数: carg (z)

zの複素偏角を返します。 複素偏角は、 r exp (theta %i) = zrzの絶対値)を満たす (-%pi, %pi]の間の角thetaです。

cargは、計算関数であって、式整理関数ではありません。

abs (複素絶対値), polarform, rectform, realpart, imagpartも参照してください。

例:

(%i1) carg (1);
(%o1)                           0
(%i2) carg (1 + %i);
                               %pi
(%o2)                          ---
                                4
(%i3) carg (exp (%i));
(%o3)                           1
(%i4) carg (exp (%pi * %i));
(%o4)                          %pi
(%i5) carg (exp (3/2 * %pi * %i));
                                %pi
(%o5)                         - ---
                                 2
(%i6) carg (17 * exp (2 * %i));
(%o6)                           2
関数: conjugate (x)

xの複素共役を返します。

(%i1) declare ([aa, bb], real, cc, complex, ii, imaginary);

(%o1)                         done
(%i2) conjugate (aa + bb*%i);

(%o2)                      aa - %i bb
(%i3) conjugate (cc);

(%o3)                     conjugate(cc)
(%i4) conjugate (ii);

(%o4)                         - ii
(%i5) conjugate (xx + yy);

(%o5)             conjugate(yy) + conjugate(xx)
関数: imagpart (expr)

exprの虚部を返します。

imagpartは、計算関数であり、整理関数ではありません。

abs, carg, polarform, rectform, realpartも 参照してください。

関数: polarform (expr)

exprと同値な式r %e^(%i theta)を返します。 ここで、rthetaは純粋な実数です。

関数: realpart (expr)

exprの実部を返します。 realpartimagpartは、 平方根、対数関数、指数関数はもちろん三角関数や双曲関数を含む式上で機能します。

関数: rectform (expr)

exprと同値な式a + b %iを返します。 ここでabは純粋な実数です。


10.3 Combinatorial Functions

演算子: !!

二重階乗演算子。

整数や浮動小数点、有理数 nに対して、 n!!は、 積 n (n-2) (n-4) (n-6) ... (n - 2 (k - 1))kentier (n/2)、すなわち n/2以下の最大整数に等しい)に評価します。 この定義は、非整数の引数に対して他の出版物の定義と一致しないことに注意してください。

偶数(もしくは奇数) nに対して、 n!!は、2(もしくは1)からnまでのすべての偶数 (もしくは奇数)の積に評価されます。

整数でも浮動小数点でも有理数でもない引数 nに対して、 n!!は名詞形 genfact (n, n/2, 2)を返します。

関数: binomial (x, y)

二項係数x!/(y! (x - y)!)。 もしxyが整数なら、 二項係数の数値が計算されます。 もしyもしくはx - yが整数なら、 二項係数は多項式として表現されます。

例:

(%i1) binomial (11, 7);
(%o1)                          330
(%i2) 11! / 7! / (11 - 7)!;
(%o2)                          330
(%i3) binomial (x, 7);
        (x - 6) (x - 5) (x - 4) (x - 3) (x - 2) (x - 1) x
(%o3)   -------------------------------------------------
                              5040
(%i4) binomial (x + 7, x);
      (x + 1) (x + 2) (x + 3) (x + 4) (x + 5) (x + 6) (x + 7)
(%o4) -------------------------------------------------------
                               5040
(%i5) binomial (11, y);
(%o5)                    binomial(11, y)
関数: factcomb (expr)

例えば、(n + 1)*n!(n + 1)!に変換することによって、 exprの中の階乗の係数を階乗それ自身と結合しようとします。

もしsumsplitfactfalseに設定されたなら、 minfactorialfactcombの後適用されるようになります。

関数: factorial
演算子: !

階乗演算子。

(整数、有理数、実数を含む)負の整数を除いた任意の複素数 xに対して、 x!gamma(x+1)として定義されます。

整数 xに対して、 x!は1からxまでの整数の積に整理されます。 0!は1に整理されます。 浮動小数点または多倍長浮動小数点精度の実数または複素数 xに対して、 x!gamma(x+1)の値に整理されます。 xn/2nは奇数)に等しい時、 (gamma (1/2)sqrt (%pi)に等しいから) x!は有理因子にsqrt (%pi)を掛けたものに整理されます。

変数 factlim, gammalimは整数や有理数の引数の階乗の数値評価を制御します。 関数 minfactorial, factcombは階乗を含む式の整理を制御します。 factlim, gammalim, minfactorial, factcombを参照してください。

関数 gamma, bffac, cbffacはガンマ関数の変形です。 多倍長浮動小数点精度の実数と複素数のガンマ関数を評価するために、 gammaは内部で bffaccbffacをコールします。

makegammaは階乗や関係した関数にgammaを代入します。

Maximaは階乗関数の導関数や、負の整数のような特殊な値の極限を知っています。

オプション変数 factorial_expand(n+x)!のような式の整理を制御します。 ここでnは整数です。

binomialも参照してください。

オペランドがfactlimより大きくないなら、整数の階乗は正確な値に整理されます。 実数と複素数の階乗は浮動小数点または多倍長浮動小数点精度に評価されます。

(%i1) factlim : 10;
(%o1)                          10
(%i2) [0!, (7/2)!, 8!, 20!];
                            105 sqrt(%pi)
(%o2)                   [1, -------------, 40320, 20!]
                                 16
(%i3) [4.77!, (1.0+%i)!];
(%o3)    [81.44668037931197, 
          .3430658398165454 %i + .6529654964201665]
(%i4) [2.86b0!, (1.0b0+%i)!];
(%o4) [5.046635586910012b0, 
       3.430658398165454b-1 %i + 6.529654964201667b-1]

既知の定数や一般式の階乗は整理されません。 オペランドを評価した後階乗を整理できたとしても整理はされません。

(%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
(%o1)      [(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
(%i2) ev (%, numer, %enumer);
(%o2) [.3430658398165454 %i + .6529654964201665, 
       7.188082728976031, 
       4.260820476357003, 1.227580202486819]
(%i1) kill (foo);
(%o1)                         done
(%i2) foo!;
(%o2)                         foo!

階乗の計算は整理であって、評価ではありません。 従って、x!はクォートされた式の中でも置き換えられます。

(%i1) '([0!, (7/2)!, 4.77!, 8!, 20!]);
          105 sqrt(%pi)
(%o1) [1, -------------, 81.44668037931199, 40320, 
               16
                                             2432902008176640000]

Maximaは階乗関数の導関数を知っています。

(%i1) diff(x!,x);
(%o1)                           x! psi (x + 1)
                                      0

オプション変数factorial_expandは、 階乗関数を含む式の展開と整理を制御します。

(%i1) (n+1)!/n!,factorial_expand:true;
(%o1)                                n + 1
オプション変数: factlim

デフォルト値: -1

factlimは、自動的に展開される最高の階乗を指定します。 もし-1なら、すべての整数は展開されます。

オプション変数: factorial_expand

デフォルト値: false

オプション変数factorial_expand(n+1)!のような式の整理を制御します。 ここでnは整数です。 例は!を参照してください。

関数: genfact (x, y, z)

一般化された階乗を返します。 x (x-z) (x - 2 z) ... (x - (y - 1) z)のように定義されます。 それゆえに、整数xに関して、 genfact (x, x, 1) = x!であり、genfact (x, x/2, 2) = x!!です。

関数: minfactorial (expr)

整数だけ違う2つの階乗の出現に関して exprを検査します。 そして、minfactorialは、 一方を多項式掛ける他方に変えます。

(%i1) n!/(n+2)!;
                               n!
(%o1)                       --------
                            (n + 2)!
(%i2) minfactorial (%);
                                1
(%o2)                    ---------------
                         (n + 1) (n + 2)
オプション変数: sumsplitfact

デフォルト値: true

sumsplitfactfalseの時、 minfactorialは、factcombの後に適用されます。


10.4 Root, Exponential and Logarithmic Functions

オプション変数: %e_to_numlog

デフォルト値: false

trueの時、 rをある有理数、xをある式とすると、 %e^(r*log(x))x^rに整理されます。 radcanコマンドもこの変換を行い、その上この同類のさらに複雑な変換をすることに注意すべきです。 logcontractコマンドはlogを含む式を「短縮」します。

オプション変数: %emode

デフォルト値: true

%emodetrueの時、 %e^(%pi %i x)は以下のように整理されます。

もしxが浮動小数点、整数、もしくは1/2, 1/3, 1/4, 1/6の整数倍なら、 %e^(%pi %i x)cos (%pi x) + %i sin (%pi x)に整理された後、 さらに整理されます。

他の数値xに関して、 %e^(%pi %i x)は、%e^(%pi %i y)に整理されます。 ここでyx - 2 kkabs(y) < 1が成り立つような整数)です。

%emodefalseの時には、 %e^(%pi %i x)の特別な整理は実行されません。

オプション変数: %enumer

デフォルト値: false

%enumertrueの時、 numertrueの時はいつでも、 %eは数値2.718...に置き換えられます。

%enumerfalseの時、 %e^xの指数が数に評価される時だけ、 この代入が実行されます。

ev, numerも参照してください。

関数: exp (x)

指数関数を表します。 入力にあるexp (x)のインスタンスは、%e^xに整理されます; expは整理された式の中には現れません。

もしdemoivretrueで、かつ、 b%iを含まないなら、 %e^(a + b %i)%e^(a (cos(b) + %i sin(b)))に整理されます。 demoivreを参照してください。

%emodetrueの時、 %e^(%pi %i x)は整理されます。 %emodeを参照してください。

%enumertrueの時、 numertrueの時にはいつでも %eは2.718...に置き換えれます。 %enumerを参照してください。

関数: li [s] (z)

次数s、引数zの多重対数関数を表します。 これは、以下の無限級数で定義されます。

                                 inf
                                 ====   k
                                 \     z
                        Li (z) =  >    --
                          s      /      s
                                 ====  k
                                 k = 1

li [1]は、- log (1 - z)です。 li [2]li [3]は、それぞれ、dilogarithm関数、trilogarithm関数です。

次数が1の時、多重対数関数は- log (1 - z)に整理され、 もしzが実数もしくは複素数の浮動小数点数、もしくは、numer評価フラグが有効なら、さらに数値に整理されます。

次数が2もしくは3の時、 もしzが実数の浮動小数点数、もしくはnumer評価フラグが有効なら、 多重対数関数は数値に整理されます。

例:

(%i1) assume (x > 0);
(%o1)                        [x > 0]
(%i2) integrate ((log (1 - t)) / t, t, 0, x);
(%o2)                       - li (x)
                                2
(%i3) li [2] (7);
(%o3)                        li (7)
                               2
(%i4) li [2] (7), numer;
(%o4)        1.24827317833392 - 6.113257021832577 %i
(%i5) li [3] (7);
(%o5)                        li (7)
                               3
(%i6) li [2] (7), numer;
(%o6)        1.24827317833392 - 6.113257021832577 %i
(%i7) L : makelist (i / 4.0, i, 0, 8);
(%o7)   [0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
(%i8) map (lambda ([x], li [2] (x)), L);
(%o8) [0, .2676526384986274, .5822405249432515, 
.9784693966661848, 1.64493407, 2.190177004178597
 - .7010261407036192 %i, 2.374395264042415
 - 1.273806203464065 %i, 2.448686757245154
 - 1.758084846201883 %i, 2.467401098097648
 - 2.177586087815347 %i]
(%i9) map (lambda ([x], li [3] (x)), L);
(%o9) [0, .2584613953442624, 0.537213192678042, 
.8444258046482203, 1.2020569, 1.642866878950322
 - .07821473130035025 %i, 2.060877505514697
 - .2582419849982037 %i, 2.433418896388322
 - .4919260182322965 %i, 2.762071904015935
 - .7546938285978846 %i]
関数: log (x)

xの自然対数(基数eの対数)を表します。

Maximaは、基数10や他の基数の対数の組み込み関数を持ちません。 log10(x) := log(x) / log(10)は、役立つ定義です。

対数の整理と評価は、いくつかのグローバルフラグによって管理されます:

logexpand

log(a^b)b*log(a)にします。 もしallに設定されているなら、 log(a*b)log(a)+log(b)に整理されます。 もしsuperに設定されているなら, 有理数a/bただしa#1についてlog(a/b)log(a)-log(b)に整理されます。 (整数bに関してlog(1/b)はいつも整理されます。) もしfalseに設定されているなら、 これらのすべての整理は止められます。

logsimp

もしfalseなら、 %eは、logを含む累乗へ整理がなされます。

lognumer

もしtrueなら、 引数は、logの計算の前に絶対値に変換されます。 もしnumertrueなら、 logの引数に負の整数を与えたとき、 引数は、logの計算の前に絶対値に変換されます。

lognegint

もしtrueなら、正の整数nに対して規則 log(-n) -> log(n)+%i*%pi が実装されます。

%e_to_numlog

trueの時、 rをある有理数、xをある式とすると、 式%e^(r*log(x))x^rに整理されます。 radcanコマンドもこの変換を行い、その上この同類のさらに複雑な変換をすることに注意すべきです。 logcontractコマンドはlogを含む式を「短縮」します。

オプション変数: logabs

デフォルト値: false

例えばintegrate(1/x,x)のように、logが生成される不定積分を実行する時、 もしlogabstrueなら もしlogabsfalseなら 答えは、log(...)の形で与えられます。 定積分については、 終端での不定積分の「評価」がしばしば必要になるので、logabs:true設定が使われます。

オプション変数: logarc
関数: logarc (expr)

グローバル変数logarctrueの時、 逆円関数や逆双曲線関数は、同値の対数関数に置き換えられます。 logarcのデフォルト値はfalseです。

関数logarc(expr)は、 グローバル変数logarcを設定することなしに、式exprに対して上記置き換えを実行します。

オプション変数: logconcoeffp

デフォルト値: false

logcontractを使った時、どの係数が短縮されるかを制御します。 引数1つの述語論理関数の名前に設定することができます。 例えば、もしSQRTを生成したいなら、 logconcoeffp:'logconfun$ logconfun(m):=featurep(m,integer) or ratnump(m)$を実行できます。 すると、 logcontract(1/2*log(x));log(sqrt(x))を与えるでしょう。

関数: logcontract (expr)

形式a1*log(b1) + a2*log(b2) + cの部分式を log(ratsimp(b1^a1 * b2^a2)) + cに変換しながら、 再帰的に式exprを走査します。

(%i1) 2*(a*log(x) + 2*a*log(y))$
(%i2) logcontract(%);
                                 2  4
(%o2)                     a log(x  y )

declare(n,integer);を実行すると、 logcontract(2*a*n*log(x));は、a*log(x^(2*n))に整理されます。 この方法で「短縮」される係数は、ここで2やnに当たるもので、featurep(coeff,integer)を満たします。 ユーザーは、 オプションlogconcoeffpを引数1つの述語論理関数名に設定することで、 どの係数を短縮するか制御できます。 例えば、もしSQRTを生成したいなら、 logconcoeffp:'logconfun$ logconfun(m):=featurep(m,integer) or ratnump(m)$を実行できます。 すると、 logcontract(1/2*log(x));log(sqrt(x))を与えるでしょう。

オプション変数: logexpand

デフォルト値: false

もしtrueなら、 log(a^b)b*log(a)になるようにします。 もしallに設定されているなら、 log(a*b)log(a)+log(b)に整理されます。 もしsuperに設定されているなら, 有理数a/bただしa#1についてlog(a/b)log(a)-log(b)に整理されます。 (整数bに関してlog(1/b)はいつも整理されます。) もしfalseに設定されているなら、 これらのすべての整理は止められます。

オプション変数: lognegint

デフォルト値: false

もしtrueなら、正の整数nに対して規則 log(-n) -> log(n)+%i*%pi が実装されます。

オプション変数: lognumer

デフォルト値: false

もしtrueなら、 引数は、logの計算の前に絶対値に変換されます。 もしnumertrueなら、 logの引数に負の整数を与えたとき、 引数は、logの計算の前に絶対値に変換されます。

オプション変数: logsimp

デフォルト値: true

もしfalseなら、 %eは、logを含む累乗へ整理がなされます。

関数: plog (x)

-%pi < carg(x) <= +%piを虚部係数とする複素数値の自然対数の主値を表します。

関数: sqrt (x)

xの平方根。 内部的にはx^(1/2)で表現されます。 rootscontractも参照してください。

radexpandtrueなら、nのべき乗となる積の因子のn番目の根を 累乗根の外部に押し出すようにします。 例えば、 radexpandtrueの時だけ、sqrt(16*x^2)4*xになります。


10.5 Trigonometric Functions


10.5.1 Introduction to Trigonometric

Maximaは、定義されたたくさんの三角関数を持ちます。 すべての三角恒等式がプログラムされているわけではありませんが、 ユーザーは、システムのパターンマッチング能力を使ってそれらの多くを追加することができます。 Maximaで定義された三角関数は以下の通りです: acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cos, cosh, cot, coth, csc, csch, sec, sech, sin, sinh, tan, tanh。 特に三角関数を扱うためのたくさんのコマンドがあります。 trigexpand, trigreduce, スイッチtrigsignを参照してください。 2つの共用パッケージntrig, atrig1は、 Maximaに組み込まれた整理規則を拡張します。 詳しくは、describe(command)を実行してください。


10.5.2 Functions and Variables for Trigonometric

オプション変数: %piargs

デフォルト値: true

%piargstrueの時で、 引数が %pi, %pi/2, %pi/3, %pi/4, %pi/6のいずれか の整数倍の時は、 三角関数は、代数定数に整理されます。

Maximaは、 %pi などが、整数変数(すなわち、整数に宣言されたシンボル)倍された時適用できる いくつかの恒等式を知っています。

例:

(%i1) %piargs : false$
(%i2) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                %pi       %pi
(%o2)            [sin(%pi), sin(---), sin(---)]
                                 2         3
(%i3) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                      %pi       %pi       %pi
(%o3)            [sin(---), sin(---), sin(---)]
                       4         5         6
(%i4) %piargs : true$
(%i5) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                sqrt(3)
(%o5)                    [0, 1, -------]
                                   2
(%i6) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                         1         %pi   1
(%o6)                [-------, sin(---), -]
                      sqrt(2)       5    2
(%i7) [cos (%pi/3), cos (10*%pi/3), tan (10*%pi/3),
       cos (sqrt(2)*%pi/3)];
                1    1               sqrt(2) %pi
(%o7)          [-, - -, sqrt(3), cos(-----------)]
                2    2                    3

%pi and %pi/2 が整数変数にかけられた時、いくつかの恒等式が適用されます。

(%i1) declare (n, integer, m, even)$
(%i2) [sin (%pi * n), cos (%pi * m), sin (%pi/2 * m),
       cos (%pi/2 * m)];
                                      m/2
(%o2)                  [0, 1, 0, (- 1)   ]
オプション変数: %iargs

デフォルト値: true

%iargstrueの時、 引数が明らかに、虚数単位 %i を掛けたものの時、 三角関数は双曲線関数に整理されます。

引数が明らかに実数の時でさえ、整理は実行されます; Maximaは、ただ、引数が、 %i を文字通り掛けたものかどうかを考慮します。

例:

(%i1) %iargs : false$
(%i2) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o2)           [sin(%i x), cos(%i x), tan(%i x)]
(%i3) %iargs : true$
(%i4) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o4)           [%i sinh(x), cosh(x), %i tanh(x)]

引数が明らかに実数の時でさえ、整理は実行されます。

(%i1) declare (x, imaginary)$
(%i2) [featurep (x, imaginary), featurep (x, real)];
(%o2)                     [true, false]
(%i3) sin (%i * x);
(%o3)                      %i sinh(x)
関数: acos (x)

– 逆余弦

関数: acosh (x)

– 逆双曲余弦

関数: acot (x)

– 逆余接

関数: acoth (x)

– 逆双曲余接

関数: acsc (x)

– 逆余割

関数: acsch (x)

– 逆双曲余割

関数: asec (x)

– 逆正割

関数: asech (x)

– 逆双曲正割

関数: asin (x)

– 逆正弦

関数: asinh (x)

– 逆双曲正弦

関数: atan (x)

– 逆正接

関数: atan2 (y, x)

-%piから%piまでの間のatan(y/x)の値をもたらします。

関数: atanh (x)

– 逆双曲正接

パッケージ: atrig1

atrig1パッケージは、逆三角関数のためのいくつかの追加の整理規則を含みます。 Maximaが既に知っている規則と合わせて、 以下の角度が完全に実装されます: 0, %pi/6, %pi/4, %pi/3, %pi/2。 他の3象限の対応する角度も利用可能です。 これらを使うには、load("atrig1");を実行してください。

関数: cos (x)

– 余弦

関数: cosh (x)

– 双曲余弦

関数: cot (x)

– 余接

関数: coth (x)

– 双曲余接

関数: csc (x)

– 余割

関数: csch (x)

– 双曲余割

オプション変数: halfangles

デフォルト値: false

halfanglestrueの時、 引数expr/2の三角関数は、exprの関数に整理されます。

区間0 < x < 2*%piの実引数xに関して、 半角の正弦は簡単な公式に整理されます:

                         sqrt(1 - cos(x))
                         ----------------
                             sqrt(2)

複雑な因子は すべての複素引数zでこの公式を正しくするために必要です:

           realpart(z)
     floor(-----------)
              2 %pi
(- 1)                   (1 - unit_step(- imagpart(z))

                            realpart(z)            realpart(z)
                      floor(-----------) - ceiling(-----------)
                               2 %pi                  2 %pi
                ((- 1)                                          + 1))

Maximaは、この因子と、 関数sin, cos, sinh, coshに関する類似の因子を知っています。 引数zの特別な値に関して、 これらの因子は相応に整理されます。

例:

(%i1) halfangles:false;
(%o1)                                false
(%i2) sin(x/2);
                                        x
(%o2)                               sin(-)
                                        2
(%i3) halfangles:true;
(%o3)                                true
(%i4) sin(x/2);
                                                    x
                                            floor(-----)
                                                  2 %pi
                      sqrt(1 - cos(x)) (- 1)
(%o4)                 ----------------------------------
                                   sqrt(2)
(%i5) assume(x>0, x<2*%pi)$
(%i6) sin(x/2);
                               sqrt(1 - cos(x))
(%o6)                          ----------------
                                   sqrt(2)
パッケージ: ntrig

ntrigパッケージは、 引数が形式f(n %pi/10)fは関数 sin, cos, tan, csc, sec, cotのいずれか― の三角関数を整理するのに使われる整理規則の集合を含みます。

関数: sec (x)

– 正割

関数: sech (x)

– 双曲正割

関数: sin (x)

– 正弦

関数: sinh (x)

– 双曲正弦

関数: tan (x)

– 正接

関数: tanh (x)

– 双曲正接

関数: trigexpand (expr)

exprの中に現れる角の和や角の倍数の三角関数、双曲線関数を展開します。 最もよい結果では、exprは展開されるべきです。 整理のユーザー制御を強化するために、 この関数は、一度に1レベルのみ、角の和もしくは角の倍数を展開します。 ただちにサインとコサインへの完全な展開を得るには、 スイッチtrigexpand: trueを設定してください。

trigexpandは、以下のグローバルフラグによって決定されます:

trigexpand

もしtrueなら、 続いて現れるサインやコサインを含んでいる式すべての展開を起こします。

halfangles

もしtrueなら、 半角が整理されます。

trigexpandplus

trigexpandの「和」規則を制御します。 和(例えばsin(x + y))の展開は、 trigexpandplustrueの時だけ起こります。

trigexpandtimes

trigexpandの「積」規則を制御します。 積(例えばsin(2 x))の展開は、 trigexpandtimestrueの時だけ起こります。

例:

(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
                         2           2
(%o1)               - sin (x) + 3 cos (x) + x
(%i2) trigexpand(sin(10*x+y));
(%o2)          cos(10 x) sin(y) + sin(10 x) cos(y)
オプション変数: trigexpandplus

デフォルト値: true

trigexpandplusは、trigexpandの「和」規則を制御します。 trigexpandコマンドが使われるか、もしくは trigexpandスイッチがtrueに設定されている時 和(例えばsin(x+y)))の展開は、 trigexpandplustrueの時だけ起こります。

オプション変数: trigexpandtimes

デフォルト値: true

trigexpandtimesは、trigexpandの「積」規則を制御します。 trigexpandコマンドが使われるか、もしくは、 trigexpandスイッチがtrueに設定されている時、 積(例えばsin(2*x))の展開は、 trigexpandtimestrueの時だけ起こります。

オプション変数: triginverses

デフォルト値: true

triginversesは、 三角関数や双曲線関数とそれらの逆関数の合成の整理を制御します。

もしallなら、 例えば、atan(tan(x))tan(atan(x))のどちらもxに整理されます。

もしtrueなら、 arcfun(fun(x))の整理は止められます。

もしfalseなら、 arcfun(fun(x))fun(arcfun(x))のどちらの整理も止められます。

関数: trigreduce (expr, x)
関数: trigreduce (expr)

xを引数とする三角と双曲の正弦、余弦の積とべきを xの倍数のそれらに結合します。 これらの関数が分母に現れた時、これらを消去しようともします。 もしxが省略されたら、exprの中の変数すべてが使われます。

poissimpも参照してください。

(%i1) trigreduce(-sin(x)^2+3*cos(x)^2+x);
               cos(2 x)      cos(2 x)   1        1
(%o1)          -------- + 3 (-------- + -) + x - -
                  2             2       2        2
オプション変数: trigsign

デフォルト値: true

trigsigntrueの時、 三角関数への負の引数の整理を認めます。 例えば、sin(-x)は、 trigsigntrueの時だけ、 -sin(x)になります。

関数: trigsimp (expr)

tan, secなどを含む式をsin, cos, sinh, coshに整理するために、 恒等式 sin(x)^2 + cos(x)^2 = 1cosh(x)^2 - sinh(x)^2 = 1 を使います。

trigreduce, ratsimp, radcan は、結果を更に整理できるかもしれません。

demo ("trgsmp.dem")は、trigsimpのいくつかの例を表示します。

関数: trigrat (expr)

三角関数の整理された標準疑似線形形式を与えます; exprは、sin, cosもしくはtanのいくつかの有理分数であり、 それらの引数は、整数係数を持つ、いくつかの変数(もしくは核)と%pi/n (nは整数)の線形形式です。 結果は、分子と分母がsincosに関して線形の整理された分数です。 trigratはいつも可能なときは線形化します。

(%i1) trigrat(sin(3*a)/sin(a+%pi/3));
(%o1)            sqrt(3) sin(2 a) + cos(2 a) - 1

以下の例は、 Davenport, Siret, and TournierのCalcul Formel, Masson (もしくは英語版ではAddison-Wesley), 1.5.5節, モーレイの定理から取られました。

(%i1) c : %pi/3 - a - b$
(%i2) bc : sin(a)*sin(3*c)/sin(a+b);
                                          %pi
                  sin(a) sin(3 (- b - a + ---))
                                           3
(%o2)             -----------------------------
                           sin(b + a)
(%i3) ba : bc, c=a, a=c;
                                         %pi
                    sin(3 a) sin(b + a - ---)
                                          3
(%o3)               -------------------------
                                  %pi
                          sin(a - ---)
                                   3
(%i4) ac2 : ba^2 + bc^2 - 2*bc*ba*cos(b);
         2         2         %pi
      sin (3 a) sin (b + a - ---)
                              3
(%o4) ---------------------------
                2     %pi
             sin (a - ---)
                       3
                                       %pi
 - (2 sin(a) sin(3 a) sin(3 (- b - a + ---)) cos(b)
                                        3
             %pi            %pi
 sin(b + a - ---))/(sin(a - ---) sin(b + a))
              3              3
      2       2              %pi
   sin (a) sin (3 (- b - a + ---))
                              3
 + -------------------------------
                2
             sin (b + a)
(%i5) trigrat (ac2);
(%o5) - (sqrt(3) sin(4 b + 4 a) - cos(4 b + 4 a)
 - 2 sqrt(3) sin(4 b + 2 a) + 2 cos(4 b + 2 a)
 - 2 sqrt(3) sin(2 b + 4 a) + 2 cos(2 b + 4 a)
 + 4 sqrt(3) sin(2 b + 2 a) - 8 cos(2 b + 2 a) - 4 cos(2 b - 2 a)
 + sqrt(3) sin(4 b) - cos(4 b) - 2 sqrt(3) sin(2 b) + 10 cos(2 b)
 + sqrt(3) sin(4 a) - cos(4 a) - 2 sqrt(3) sin(2 a) + 10 cos(2 a)
 - 9)/4

10.6 Random Numbers

関数: make_random_state (n)
関数: make_random_state (s)
関数: make_random_state (true)
関数: make_random_state (false)

ランダムステートオブジェクトは、乱数生成器の状態を表します。 状態は、627個の32ビットワードで構成されます。

make_random_state (n)は、 nを2^32で割った余りに等しい整数シードの値から新しいランダムステートオブジェクトを 生成します。nは負でもいいです。

make_random_state (s)は、ランダムステートsのコピーを返します。

make_random_state (true)は、新しいランダムステートオブジェクトを返します。 シードとしてコンピュータの現在時刻を使います。

make_random_state (false)は、乱数生成器の現在のステートのコピーを返します。

関数: set_random_state (s)

sを乱数生成器状態にコピーします。

set_random_stateはいつもdoneを返します。

関数: random (x)

疑似乱数を返します。 もしxが整数なら、random (x)は、0からx - 1までの 整数を返します。 もしxが浮動小数点なら、random (x)は、xより小さい非負の浮動小数点を返します。 もしxが整数でも浮動小数点でもなかったり、xが正でなければ、 randomは、エラーを出力します。

関数make_random_stateset_random_stateは、 乱数生成器の状態を保守します。

Maximaの乱数生成器は、メルセンヌ・ツイスタ MT 19937の実装です。

例:

(%i1) s1: make_random_state (654321)$
(%i2) set_random_state (s1);
(%o2)                         done
(%i3) random (1000);
(%o3)                          768
(%i4) random (9573684);
(%o4)                        7657880
(%i5) random (2^75);
(%o5)                11804491615036831636390
(%i6) s2: make_random_state (false)$
(%i7) random (1.0);
(%o7)                   .2310127244107132
(%i8) random (10.0);
(%o8)                   4.394553645870825
(%i9) random (100.0);
(%o9)                   32.28666704056853
(%i10) set_random_state (s2);
(%o10)                        done
(%i11) random (1.0);
(%o11)                  .2310127244107132
(%i12) random (10.0);
(%o12)                  4.394553645870825
(%i13) random (100.0);
(%o13)                  32.28666704056853

Next: , Previous:   [Contents][Index]