Maxima/三角関数・双曲線関数

出典: フリー教科書『ウィキブックス(Wikibooks)』

三角関数・双曲線関数[編集]

Maximaでは、以下の関数・逆関数が定義されている。

atan2とatanの違い
関数種 通常 その逆関数
三角関数 sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan2(y,x)
割三角関数 csc(x)
sec(x)
cot(x)
acsc(x)
asec(x)
acot(x)
双曲線関数 sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)
割双曲線関数 csch(x)
sech(x)
coth(x)
acsch(x)
asech(x)
acoth(x)

角度の単位はラジアン(radian)で、円周率%piを用いてあらわすことができる。atan2(y,x)は座標(x,y)の極座標変換などの際に、プログラム言語等で良く用いられる偏角を求める関数

(ここでsgn(y)はyの符号を返す関数)のことで、値域(-%pi,%pi]を返す関数である。(図およびMaxima/複素数#偏角(carg)参考)

簡略化[編集]

三角関数は通常は関数として扱われ、特に指示しない限り簡略化が行われない。

(%i1) sin(x)/cos(x);
                                    sin(x)
(%o1)                               ------
                                    cos(x)

自動的に簡略化される場合[編集]

引数に%pi/6の整数倍の定数項がある場合は、自動的に簡略化される。 引数が%iの項だけの場合は三角関数と双曲線関数の変換が行われる。

(%i1) sin(%pi/2);
(%o1)             1;

(%i2) sin(x+%pi/2);
(%o2)             cos(x);

(%i3) cos(%i*x);
(%o3)             cosh(x);

三角関数それぞれの係数をまとめる(trigsimp)[編集]

trigsimp(式)を用いると、

  • 三角関数ごとの項にまとめられる。
  • sin2(x) + cos2(x) = 1などの単純化が施される。
(%i1) trigsimp(1-sin(x)^2);
                                       2
(%o1)                               cos (x)

(%i2) trigsimp(1+tan(x)^2);
                                       1
(%o2)                               -------
                                       2
                                    cos (x)

(%i3) (a*sin(x)-b*cos(x))^2+(a*cos(x)+c*sin(x))^2;
                                    2                        2
(%o3)          (c sin(x) + a cos(x))  + (a sin(x) - b cos(x))

(%i4) expand(%);
       2    2       2    2
(%o4) c  sin (x) + a  sin (x) + 2 a c cos(x) sin(x) - 2 a b cos(x) sin(x)
                                                        2    2       2    2
                                                     + b  cos (x) + a  cos (x)

(%i5) trigsimp(%);
                                           2    2     2       2    2
(%o5)    (2 a c - 2 a b) cos(x) sin(x) + (b  - c ) cos (x) + c  + a

引数を外に展開する(trigexpand)[編集]

trigexpand(式)は、加法定理・倍角公式などを用いて、引数を関数外に展開する。

(%i1) trigexpand(sin(x+y));
(%o1)                    cos(x) sin(y) + sin(x) cos(y)

(%i2) trigexpand(cos(x+y));
(%o2)                    cos(x) cos(y) - sin(x) sin(y)

(%i3) trigexpand(tan(x+y));
                                tan(y) + tan(x)
(%o3)                          -----------------
                               1 - tan(x) tan(y)

(%i4) trigexpand(sin(2*x));
(%o4)                           2 cos(x) sin(x)

三角関数の積を極力へらし、引数内に収める(trigreduce)[編集]

trigreduce(式)は、

  • 三角関数の積・自乗などを、半角・積和公式などを用いて引数に収める。
  • sin(x)/cos(x)=tan(x)など三角関数間の変換が行われる。

積分前準備や周波数解析などに便利。

(%i1) trigreduce(sin(x)*cos(y));
                            sin(y + x)   sin(y - x)
(%o1)                       ---------- - ----------
                                2            2

(%i2) trigreduce(1/cos(x));
(%o2)                               sec(x)

指数関数表式にする(exponentialize)[編集]

exponentializeフラグがtrueの時、三角関数・双曲線関数は指数関数で表されるようになる。初期状態はfalseである。

(%i1) exponentialize:true;
(%o1)                                true
(%i2) sin(3*x);
                                 3 %i x     - 3 %i x
                           %i (%e       - %e        )
(%o2)                    - --------------------------
                                       2
(%i3) cosh(x);
                                    x     - x
                                  %e  + %e
(%o3)                             -----------
                                       2

ただし、逆三角関数は対数関数表式になることはない。

(%i4) acos(cos(x));
                                  %i x     - %i x
                                %e     + %e
(%o4)                      acos(-----------------)
                                        2
(%i5) exponentialize:false;
(%o5)                               false
(%i6) acos(cos(x));
(%o6)                                 x

逆三角関数の簡略化[編集]

現時点のMaximaでは、逆三角関数・逆双曲線関数の簡略化は、引数によく知られている定数が代入されている時、1対1対応する三角関数が代入されているときに限られている。

(%i1) atan(1/sqrt(3));
                                     %pi
(%o1)                                ---
                                      6
(%i2) atan(tan(x));
(%o2)                                 x
(%i3) asin(sin(x));
(%o3)                                 x
(%i4) asin(cos(x));
(%o4)                           asin(cos(x))

引数内をどうにか対応させると簡略化が行われる。

(%i5) asin(2*sin(x)*cos(x));
(%o5)                       asin(2 cos(x) sin(x))
(%i6) trigreduce(%);
(%o6)                                2 x

逆に三角関数の引数に逆関数があるときはよく対応する。

(%i7) cos(asin(x));
                                          2
(%o7)                           sqrt(1 - x )

ただし、(%o7)の簡略化はどのような場合も正しいが、(%o2)と(%o3)の簡略化は-%pi/2 < x < %pi/2の場合以外は間違いである。そのため、このような簡略化を制御するために、triginversesフラグが用意されている。

triginversesの値 実行される簡略化
all(初期値) sin(asin(x)) -> x
asin(sin(x)) -> x
true sin(asin(x)) -> x
false 簡略化禁止

微分・積分[編集]

微分・積分公式が適用される。ただし計算結果は全く簡略化されていないので、後で簡略化を行うべきである。

(%i1) diff(asin(x));
                                    del(x)
(%o1)                            ------------
                                           2
                                 sqrt(1 - x )

(%i2) diff(sinh(x),x);
(%o2)                               cosh(x)

(%i3) diff(sin(x)+cos(3*x)-tan(x^2),x);
                              2  2
(%o3)                - 2 x sec (x ) - 3 sin(3 x) + cos(x)

(%i4) integrate(sin(2*x),x);
                                    cos(2 x)
(%o4)                             - --------
                                       2

(%i5) integrate(tan(2*x),x);
                                 log(sec(2 x))
(%o5)                            -------------
                                       2

(%i6) integrate(sin(x),x,0,1);
(%o6)                             1 - cos(1)

(%i7) integrate(1/sqrt(2-x^2),x);
                                      2 x
(%o7)                            asin(----)
                                       3/2
                                      2

多項式化[編集]

三角関数を変数に置き換える。ratsubst(置き換える変数の多項式,置き換えられる関数,式)を用いる。

(%i1) cos(x)^4 + cos(x)^3 + cos(x)^2 + cos(x) + 1;
                     4         3         2
(%o1)             cos (x) + cos (x) + cos (x) + cos(x) + 1
(%i2) ratsubst(t, cos(x), %);
                          4    3    2    
(%o2)                    t  + t  + t  + t + 1

ただし、この例ではsin(x),tan(x)は同時に置き換えてくれない。

cos(x)をsin(x)に置き換える事もできる。これも置き換える数式が間違っていても強制的に置き換えるので注意。(この例もcos(x)<0の時には正しくない。)

(%i3) ratsubst (sqrt(1 - sin(x)^2), cos(x), %o1);
              2    2           2    3/2               2          2
(%o3) (1 - sin (x))  + (1 - sin (x))    + sqrt(1 - sin (x)) - sin (x) + 2

演習問題[編集]

関数が最大値を取るときの、を求めよ。ただしである。

解答

関連項目[編集]

Wikipedia[編集]

外部リンク[編集]