Comments
Description
Transcript
数式の簡単化と式の書換え 簡単化のための基本コマンド
数式の簡単化と式の書換え Maple には、様々な変数や三角関数、特殊関数などを含む数式を簡単にするための機能が 豊富に用意されています。この資料では Maple に用意されている数式簡単化のための基本 的なコマンドに加えて、長い数式の別変数への置換えについても紹介します。 簡単化のための基本コマンド O restart simplify コマンド 基本的な使い方 simplify コマンドは、Maple が内部で持っている数式データベースを参照しなが ら式を簡単にするための機能を提供しています。もっとも代表的な例が次の三角 関数の簡単化です。 O eq1 d sin x 2 Ccos x 2 eq1 := sin x 2 Ccos x 2 (1.1.1.1) 式 eq1 に simplify コマンドを適用すると、1 という結果を得ます。つまり、 sin x 2 Ccos x 2 = 1 を Maple 上で実現しています。 O simplify eq1 1 (1.1.1.2) また、simplify コマンドには簡単化の目的に応じた色々なオプションを指定する ことも可能です。次の式 eq を用いて考えます。 1 2 O eq2 dK3 sin x 1 2 cos x 4 2 sin x m m 1 2 C3 sin x cos x 2 cos x n 1 2 C4 sin x cos x sin x K4 sin x cos x 4 cos x n eq2 := K3 sin x cos x 2 sin x m C3 sin x cos x 2 cos x n (1.1.1.3) C4 sin x cos x 4 sin x m K4 sin x cos x 4 cos x n この式 eq に simplify のみを適用した場合、次の結果です。 O simplify eq2 sin x cos x 2 K3 sin x m C3 cos x n C4 cos x 2 sin x m K4 cos x 2 C n (1.1.1.4) しかし、simplify コマンドに size オプションを付け加えて実行すると、より項の 個数の少ない結果が得られます。 O simplify eq2, size 3 K4 cos x 2 sin x Ksin x m Ccos x n K Ccos x 2 (1.1.1.5) 4 Maple は、simplify コマンドに size オプションを指定されると、 2 2 sin x Ccos x = 1 のように各種の三角関数の公式や式の変形を伴って項の個数 が最小になる結果を探し出します。 ユーザが指定するルールを適用した簡単化 Maple の簡単化では、Maple の数式データベースの公式だけではなく、ユーザが 特別に指定したルール(等式で与えられる、簡単化のための式の書換え規則)に 基づく手法を適用することも可能です。簡単化を適用するために次の式 eq3 を 考えます。 O eq3 d 8 s4 t C15 s2 t3 K15 s2 t C7 t5 K14 t3 C7 t eq3 := 8 s4 t C15 s2 t3 K15 s2 t C7 t5 K14 t3 C7 t (1.1.2.1) 例えば、s2 Ct2 = 1 という条件(副関係式)を使って式 eq3 がより簡単になるか どうかを試すには、条件式を2番目の引数として simplify コマンドに指定しま す。 O simplify eq3, s2 Ct2 = 1 0 (1.1.2.2) 簡単化の結果がなぜ 0 になるかを確認したい場合は、例えば、式に対して因数分 解を行うことで判断できます。 O factor eq3 t 8 s2 K7 C7 t2 s2 Ct2 K1 (1.1.2.3) 上記のように、この数式 eq3 については s2 Ct2 K1 という式が含まれており、 s2 Ct2 = 1 であることから式 eq3 全体として 0 という結果に簡単化されていま す。 また、Maple の簡単化は、有理式に対しても機能します。例えば、次の式 eq4 はある伝達関数式だとします。 5 s Cs Ck O eq4 d s Kk s5 Cs Ck eq4 := (1.1.2.4) s Kk この有理式に対して、k s5 Kk Ks = 0 という条件(副関係式)を用いて簡単化す るには、次のようにコマンドを記述します。 O simplify eq4, k s5 Kk Ks = 0 , tdeg s, k k s Ck2 Cs Ck (1.1.2.5) k s Kk2 ここで、tdeg s, k は、各単項式内の変数 s, k の次数の和(これを全次数と呼びま す)の順序を用いて簡単化を行うことを意味しています。(例えば、s2, s$t, t3 を tdeg の順序で並び替えると t3, s2, s$t となります) 異なる順序で簡単化を行うと、上記とは異なる結果が返されます。以下は、変数 に対する辞書式順序を用いて簡単化した例です。 5 O simplify eq4, k s Kk Ks = 0 , plex k, s s9 Cs5 Ks4 (1.1.2.6) K2 Cs5 このように simplify コマンドを用いて簡単化を行う場合は、変数の順序について も注意しなければなりません。 combine コマンド combine コマンドは、式を結合させるために用います。式の結合には simplify コマン ドと同様に Maple が内部で持っている公式データベースの情報が使われます。 例えば次の三角関数を含む数式を考えます。 O restart O eq5 d 4 sin x cos x 2 Ksin x C8 cos x 4 K8 cos x 2 C1 K 4 sin x cos x 2 Ksin x eq5 := 4 sin x cos x 2 Ksin x C8 cos x 4 K8 cos x 2 C1 (1.2.1) K 4 sin x cos x 2 Ksin x この式に combine コマンドを適用します。 O combine eq5 sin 3 x Ccos 4 x K sin 3 x (1.2.2) combine コマンドは式を簡単にするだけではなく、演算回数を減少させるという目 的においても利用できます。 また、ln 関数(対数関数)を含む式にも combine コマンドを用いることができま す。ただし、変数を含む対数関数に combine コマンドを用いる場合、その変数が対 数の定義に適合していなければなりません。例えば、次の式 eq6 を考えます。式 eq6 には変数 a, x が含まれています。 1 O eq6 d a ln x C3 ln x Kln 1 Kx C ln 1 Cx 2 1 eq6 := a ln x C3 ln x Kln 1 Kx C ln 1 Cx (1.2.3) 2 1 式 eq6 に combine コマンドのみを適用しても ln 1 Cx が ln 1 Cx に書き換わ 2 るだけです。 O combine eq6 a ln x C3 ln x Kln 1 Kx Cln 1 Cx (1.2.4) このような場合、combine コマンドを用いる際に、変数への仮定を与えることでさ らに結合させることが可能です。 O combine eq6 assuming a T real, x O 0 a ln x Kln 1 Kx Cln x3 1 Cx (1.2.5) さらに、combine コマンドに anything オプションを指定すると、対数に関する等式 変形をすべて適用して結合を行えます。 O combine eq6, anything assuming a T real, x O 0 ln 1 Cx xa C 3 Kln 1 Kx (1.2.6) さらに、変数 x の範囲が (0,1) であるという仮定を付加すると式の最終的な結合結果 が得られます。 O combine eq6, anything assuming a T real, x O 0 and x ! 1 1 Cx xa C 3 ln (1.2.7) 1 Kx O 長い数式における別変数を用いた置換え 数式処理の特徴は、面倒な数式計算を自動で行えることです。しかし一方で、計算結 果の数式は非常に膨大・長大になることもあります。そのような場合に、Maple の LargeExpressions パッケージと式の整理のための collect コマンドを併用すると、数式の 見た目の表現を簡単にすることが可能です。 O restart いま、分母・分子がそれぞれ 8 次、5 次の伝達関数があるとします。ここでは randpoly コマンドにより分母・分子の多項式をランダムに生成し、伝達関数式 tf1 を作ります。 O d1 d randpoly s, k , degree = 8, dense : n1 d randpoly s, l , degree = 5, dense : 分母 d1, 分子 n1 を用いて、伝達関数 tf1 は以下のようになります; n1 O tf1 d d1 tf1 := 72 K47 s5 C40 s4 l K81 s4 C91 s3 l2 C68 s3 l K10 s3 C31 s2 l3 K51 s2 l2 (2.1) C77 s2 l C95 s2 Cs l4 Cs l3 C55 s l2 K28 s l C16 s C30 l5 K27 l4 K15 l3 K59 l2 K96 l K49 C11 k C29 s C44 s k C87 s k2 K23 s k3 C72 s k5 C74 s k6 C6 s k7 C75 s2 k C22 s7 k K94 s6 k2 C87 s6 k K62 s5 k2 C97 s5 k K4 s4 k4 K83 s4 k3 K10 s4 k2 C62 s4 k C80 s3 k5 K44 s3 k4 C71 s3 k3 K17 s3 k2 K75 s3 k K7 s2 k6 K40 s2 k5 K55 s7 C95 k2 K56 s6 K50 s2 k3 K29 k3 K73 s5 K8 k4 K82 s4 K61 k5 K10 s3 C10 k6 K92 s2 K23 k7 C98 k8 C42 s2 k4 C37 s k4 K7 s8 C23 s2 k2 式の項数が多いため、非常に見にくい表現となっています。この伝達関数の見た目の 表現をシンプルにするには、s 以外の係数については別の変数で置き換える(各 s の次 数の係数部分の多項式を別変数で置き換える)ことを考えます。 この目的のために、Maple の LargeExpressions パッケージを呼び出します。 O with LargeExpressions LastUsed, Unveil, Veil (2.2) このパッケージには3つのコマンドが用意されています。ただし、これらのコマンド は単体で用いるのではなく、式の整理を行う collect コマンドと共に用います。Veil (ヴ ェール)とは隠すという意味です。 伝達関数式 tf1 を、変数 s について整理します。その際、collect コマンドの3番目に LargeExpressions パッケージで読み込んだ Veil コマンドを3番目の引数で指定します。 Veil M は、s の係数多項式を変数 M の配列で置き換える、という指定です。 O collect tf1, s, Veil M K47 s5 CM1 s4 CM2 s3 CM3 s2 CM4 s CM5 (2.3) K7 s8 C11 M6 s7 KM7 s6 KM8 s5 KM9 s4 CM10 s3 KM11 s2 CM12 s CM13 元の tf1 の数式表現に比べてとてもシンプルで見通しがつきやすくなります。 Veil コマンドによって置き換えられた各 Mi には、それぞれの係数(多項式)が割り当 てられています。確認するには seq コマンドと Unveil コマンドにより以下のように記 述します。Unveil コマンドは Veil によって置き換えられた変数の中身を参照するため のコマンドです。 O seq Mi = Unveil M Mi , i = 1 ..15 2 2 3 M1 = 40 l K81, M2 = 68 l K10 C91 l , M3 = 95 K51 l C77 l C31 l , M4 = K28 l C16 Cl3 C55 l2 Cl4, M5 = 72 K15 l3 K59 l2 C30 l5 K27 l4 K96 l, M6 = 2 k K5, M7 = 94 k2 K87 k C56, M8 = 62 k2 K97 k C73, M9 = 83 k3 K62 k C4 k4 C82 C10 k2, (2.4) M10 = K17 k2 K44 k4 C71 k3 K75 k C80 k5 K10, M11 = 50 k3 K23 k2 C7 k6 C92 K75 k K42 k4 C40 k5, M12 = 44 k C74 k6 K23 k3 C37 k4 C87 k2 C29 C72 k5 C6 k7, M13 = K49 C11 k K8 k4 K29 k3 C98 k8 C10 k6 K61 k5 C95 k2 K23 k7, M14 = M14, M15 = M15 Veil コマンド・collect コマンドを使うと、要素が多項式となっている行列でも微分方程 式等でも見た目の表現を整理することが可能です。 v, w を変数とするランダムな多項式を要素に持つ次の行列 G を定義します。行列であ るにも関わらず非常に見にくい表現です。 O G d Matrix 4, 4, i, j /randpoly v, w , degree = rand 1 ..2 G := 47 v K90 w C43, K91 K88 v K48 w C53 v2 K28 v w C5 w2, K10 v K82 w (2.5) C71, 83 C9 v K60 w K83 v2 C98 v w K48 w2 , 62 v C37 w C5, K17 C25 v C91 w C98 v w K64 w2, K90 K60 v K34 w K13 v2 C44 v w K2 w2, K47 v K39 w K53 , K97 C33 v C10 w C7 v2 K89 v w C65 w2, K25 K96 v C50 w K60 v2 K42 v w C7 w2, K70 v C34 w K68, 16 C52 v K20 w K4 v2 K89 v w K77 w2 , 80 v C28 w K42, 21 v K35 w C97, K64 C89 v K16 w C59 v2 K69 v w K46 w2, 87 v K34 w C40 map コマンドにより collect コマンドを用いた変数置換えをすべての要素に適用しま す。 O map p/collect p, v, Veil W , G 47 v KW24, 53 v2 K4 W18 v CW19, K10 v KW12, K83 v2 CW5 v KW6 , (2.6) 62 v CW23, W16 v KW17, K13 v2 C4 W10 v K2 W11, K47 v KW4 , 7 v2 KW21 v CW22, K60 v2 K6 W14 v CW15, K70 v C34 W9, K4 v2 KW2 v KW3 , 80 v C14 W20, 21 v KW13, 59 v2 KW7 v K2 W8, 87 v K2 W1 大文字の W で置き換えられた中身を確認するには、上と同様に Unveil コマンドを用い ます。LastUsed コマンドは変数で用いたインデックスの最後の番号を返します。 O for i from 1 to LastUsed W do Wi = Unveil W Wi end do W1 = 17 w K20 W2 = 89 w K52 2 W3 = K16 C77 w C20 w W4 = 39 w C53 W5 = 98 w C9 W6 = K83 C48 w2 C60 w W7 = 69 w K89 W8 = 32 C23 w2 C8 w W9 = w K2 W10 = 11 w K15 W11 = 45 Cw2 C17 w W12 = 82 w K71 W13 = 35 w K97 W14 = 7 w C16 W15 = K25 C7 w2 C50 w W16 = 25 C98 w W17 = 17 K91 w C64 w2 W18 = 7 w C22 W19 = K91 C5 w2 K48 w W20 = 2 w K3 W21 = 89 w K33 W22 = K97 C65 w2 C10 w W23 = 37 w C5 W24 = 90 w K43 (2.7) Maple に用意されている簡単化や式の整理のためのコマンドを用いることで、手計算を必 要とせずに式整理を効率的に行え、また簡単な計算間違いも軽減できます。 Copyright (c) CYBERNET SYSTEMS CO., LTD. 2009 All rights reserved.