[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20. Equations


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.1 Functions and Variables for Equations

システム変数: %rnum

デフォルト値: 0

%rnumは solveと algsysが階の中で導入する %r変数のカウンタです。 次の %r変数は %rnum+1に番号付けされます。

%rnum_listも参照してください。

Categories:  Algebraic equations

システム変数: %rnum_list

デフォルト値: []

%rnum_listは solveや algsysによる解で導入された変数のリストです。 %r変数はそれらが生成された順に %rnum_listに追加されます。 これはあとで解への代入を行うのに便利です。 concat ('%r, j)とするより このリストを使うことを推奨します。

 
(%i1) solve ([x + y = 3], [x,y]);
(%o1)              [[x = 3 - %r1, y = %r1]]
(%i2) %rnum_list;
(%o2)                       [%r1]
(%i3) sol : solve ([x + 2*y + 3*z = 4], [x,y,z]);
(%o3)   [[x = - 2 %r3 - 3 %r2 + 4, y = %r3, z = %r2]]
(%i4) %rnum_list;
(%o4)                     [%r2, %r3]
(%i5) for i : 1 thru length (%rnum_list) do
        sol : subst (t[i], %rnum_list[i], sol)$
(%i6) sol;
(%o6)     [[x = - 2 t  - 3 t  + 4, y = t , z = t ]]
                     2      1           2       1

Categories:  Algebraic equations

オプション変数: algepsilon

デフォルト値: 10^8

algsysが algepsilonを使います。

Categories:  Algebraic equations

オプション変数: algexact

デフォルト値: false

algexactは以下のように algsysの振る舞いに影響を与えます:

もし algexactが trueなら、 algsysはいつも solveをコールし、 solveの失敗時には realrootsを使います。

もし algexactが falseなら、 問題が1変数でないときだけ、または方程式が二次か四次なら (only if the eliminant was not univaririate, or if it was a quadratic or biquadratic) solveがコールされます。

このように algexact: trueは厳密解だけを保証しません。 ただ、 algsysは最初に厳密解を与えるように最大限努力して、 他のすべてが失敗した時近似をもたらすことだけを保証します。

Categories:  Algebraic equations

関数: algsys  
    algsys ([expr_1, …, expr_m], [x_1, …, x_n])  
    algsys ([eqn_1, …, eqn_m], [x_1, …, x_n])

同時多項式 expr_1, …, expr_m または多項式方程式 eqn_1, …, eqn_m を変数 x_1, …, x_nについて解きます。 式 exprは等式 expr = 0と同値です。 変数より等式が多い場合も逆もあります。

algsysは解のリストを返します。 ここで、それぞれの解は方程式系を満たす変数 x_1, …, x_nの値を指定する等式のリストとして与えられます。 もし algsysが解を見つけられないなら、 空のリスト []が返されます。

シンボル %r1, %r2, …が 解の任意パラメータを表すために必要に応じて導入されます; これらの変数はリスト %rnum_listにも追加されます。

方法は以下の通りです:

  1. 最初に方程式は因数分解され、サブシステムに分割されます。
  2. それぞれのサブシステム S_iに関して等式 Eと変数 xを選択します。 変数をゼロでない最低次を持つよう選びます。 そして、 xに関する Eと E_jの終結式を サブシステム S_iの中の残っている等式群 E_jのそれぞれに関して計算します。

    xが消去されるので1つ変数の少ない新しいサブシステム S_i'が得られます。 ここでプロセスは(1)に戻ります。

  3. そのうち1つの等式からなるサブシステムが得られます。 もし等式が多変数なら、浮動小数点数の形式の近似は導入されず、 厳密解を見つけるために solveをコールします。

    いくつかの場合、 solveが解を見つけることができないか、 もし見つけたても、解が非常に大きな式になるかもしれません。

    等式が1変数で、線形か二次か四次の場合、 もし近似が導入されないなら、再び solveをコールします。 もし近似が導入されるか、等式が1変数でなく、線形でも二次でも、四次でもない場合、 もしスイッチ realonlyが trueなら、 実数解を見つけるため関数 realrootsをコールします。 もし realonlyが falseなら、 実数解と複素数解を探す allrootsをコールします。

    もし algsysが要求よりも有効数字が少ない解を生成するなら、 ユーザーは algepsilonの値をより高い値に変更できます。

    もし algexactが trueに設定されているなら、 いつも solveをコールします。

  4. 最終的にステップ(3)で得られた解は以前のレベルに代入され、解処理は(1)に戻ります。

algsysが(通常、初期の段階での厳密解発見の失敗による) 浮動小数点近似を含む多変数方程式に出会う時、 厳密な方法をそんな方程式に適用しようとせず、かわりにメッセージを表示します: "algsys cannot solve - system too complicated."

radcanを使うと大きな式や複雑な式を生成することができます。 この場合、 pickapartか revealを使って結果の一部を分離することができるかもしれません。

radcanは時々、実際には実数値の解に虚数単位%iを導入するかもしれません。

例:

 
(%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
(%o1)              2 (1 - a1) x - 2 a2 (x - 1)
(%i2) e2: a2 - a1;
(%o2)                        a2 - a1
(%i3) e3: a1*(-y - x^2 + 1);
                                   2
(%o3)                   a1 (- y - x  + 1)
(%i4) e4: a2*(y - (x - 1)^2);
                                       2
(%o4)                   a2 (y - (x - 1) )
(%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
(%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0],

                                  [x = 1, y = 0, a1 = 1, a2 = 1]]
(%i6) e1: x^2 - y^2;
                              2    2
(%o6)                        x  - y
(%i7) e2: -1 - y + 2*y^2 - x + x^2;
                         2        2
(%o7)                 2 y  - y + x  - x - 1
(%i8) algsys ([e1, e2], [x, y]);
                 1            1
(%o8) [[x = - -------, y = -------],
              sqrt(3)      sqrt(3)

        1              1             1        1
[x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
     sqrt(3)        sqrt(3)          3        3

Categories:  Algebraic equations

関数: allroots  
    allroots (expr)  
    allroots (eqn)

1変数多項式 exprもしくは1変数多項式方程式 eqnの実数と複素数の根の数値近似を計算します。

フラグ polyfactorが trueの時、 allrootsは多項式が実数なら多項式を実数上で因数分解し、 多項式が複素数なら複素数上で因数分解します。

allrootsは多重根の場合、不正確な結果をもたらすことがあります。 もし多項式が実数なら、allroots (%i*p)は allroots (p)より精確な近似を生成します。 allrootsはこの場合異なるアルゴリズムを呼ぶからです。

allrootsは非多項式を却下します。 ratされた分子が多項式であることを要求し、 分母はせいぜい複素数であることを要求します。 この結果、もし polyfactorが trueなら、 allrootsはいつも(因数分解された)同値の式を返します。

複素多項式のために、JenkinsとTraubのアルゴリズムが使われます (Algorithm 419, Comm. ACM, vol. 15, (1972), .97)。 実多項式のために、Jenkinsのアルゴリズム (Algorithm 493, ACM TOMS, vol. 1, (1975), p.178)が使われます。

例:

 
(%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
                            3          5
(%o1)              (2 x + 1)  = 13.5 (x  + 1)
(%i2) soln: allroots (eqn);
(%o2) [x = .8296749902129361, x = - 1.015755543828121,

x = .9659625152196369 %i - .4069597231924075,

x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
(%i3) for e in soln
        do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
                      - 3.5527136788005E-15

                     - 5.32907051820075E-15

         4.44089209850063E-15 %i - 4.88498130835069E-15

        - 4.44089209850063E-15 %i - 4.88498130835069E-15

                       3.5527136788005E-15

(%o3)                         done
(%i4) polyfactor: true$
(%i5) allroots (eqn);
(%o5) - 13.5 (x - 1.0) (x - .8296749902129361)

                           2
 (x + 1.015755543828121) (x  + .8139194463848151 x

 + 1.098699797110288)

Categories:  Polynomials · Numerical methods

関数: bfallroots  
    bfallroots (expr)  
    bfallroots (eqn)

1変数の多項式 exprまたは多項式方程式 eqnの実数根と複素数根の数値近似を計算します。

bfallrootsは多倍長浮動小数点を使って根を計算する以外のすべての点で allrootsと同一です。 詳しい情報については allrootsを参照してください。

Categories:  Polynomials · Numerical methods

オプション変数: backsubst

デフォルト値: true

backsubstが falseの時、 方程式を三角行列化した後 linsolveの後退代入を抑制します。 これは 後退代入が極端に大きな式の生成のもととなる非常に大きな問題に対して役立つかもしれません。

 
(%i1) eq1 : x + y + z = 6$
(%i2) eq2 : x - y + z = 2$
(%i3) eq3 : x + y - z = 0$
(%i4) backsubst : false$
(%i5) linsolve ([eq1, eq2, eq3], [x,y,z]);
(%o5)             [x = z - y, y = 2, z = 3]
(%i6) backsubst : true$
(%i7) linsolve ([eq1, eq2, eq3], [x,y,z]);
(%o7)               [x = 1, y = 2, z = 3]

Categories:  Algebraic equations

オプション変数: breakup

デフォルト値: true

breakupが trueの時、 solveは三次と四次の方程式の解を共通部分式を使って表現します。 共通部分式は中間式ラベル(%t1, %t2, など)に割り当てられます。 そうでないなら共通部分式は同定されません。

breakup: trueは programmodeが falseの時だけ効果を持ちます。

例:

 
(%i1) programmode: false$
(%i2) breakup: true$
(%i3) solve (x^3 + x^2 - 1);

                        sqrt(23)    25 1/3
(%t3)                  (--------- + --)
                        6 sqrt(3)   54
Solution:

                                      sqrt(3) %i   1
                                      ---------- - -
                sqrt(3) %i   1            2        2   1
(%t4)    x = (- ---------- - -) %t3 + -------------- - -
                    2        2            9 %t3        3

                                      sqrt(3) %i   1
                                    - ---------- - -
              sqrt(3) %i   1              2        2   1
(%t5)    x = (---------- - -) %t3 + ---------------- - -
                  2        2             9 %t3         3

                                   1     1
(%t6)                  x = %t3 + ----- - -
                                 9 %t3   3
(%o6)                    [%t4, %t5, %t6]
(%i6) breakup: false$
(%i7) solve (x^3 + x^2 - 1);
Solution:

             sqrt(3) %i   1
             ---------- - -
                 2        2        sqrt(23)    25 1/3
(%t7) x = --------------------- + (--------- + --)
             sqrt(23)    25 1/3    6 sqrt(3)   54
          9 (--------- + --)
             6 sqrt(3)   54

                                              sqrt(3) %i   1    1
                                           (- ---------- - -) - -
                                                  2        2    3
           sqrt(23)    25 1/3  sqrt(3) %i   1
(%t8) x = (--------- + --)    (---------- - -)
           6 sqrt(3)   54          2        2

                                            sqrt(3) %i   1
                                          - ---------- - -
                                                2        2      1
                                      + --------------------- - -
                                           sqrt(23)    25 1/3   3
                                        9 (--------- + --)
                                           6 sqrt(3)   54
            sqrt(23)    25 1/3             1             1
(%t9)  x = (--------- + --)    + --------------------- - -
            6 sqrt(3)   54          sqrt(23)    25 1/3   3
                                 9 (--------- + --)
                                    6 sqrt(3)   54
(%o9)                    [%t7, %t8, %t9]

Categories:  Algebraic equations

関数: dimension  
    dimension (eqn)  
    dimension (eqn_1, …, eqn_n)

dimenは、次元解析パッケージです。 load ("dimen")はこのパッケージをロードします。 demo ("dimen")は短いデモンストレーションを表示します。

Categories:  Share packages

オプション変数: dispflag

デフォルト値: true

もし block内で falseに設定されたら block内でコールされた解法関数が生成する出力の表示を抑制します。 blockをドル記号$で終端すると、 dispflagを falseに設定します。

関数: funcsolve (eqn, g(t))

eqnを満たす有理関数 g(t)が存在するかどうかに依存して、 [g(t) = ...]か []を返します。 ここで、 eqnは(この場合) g(t)とg(t+1)に関して 一次、線形多項式(first order, linear polynomial)でなければいけません。

 
(%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1) =
      (n - 1)/(n + 2);
                            (n + 3) f(n + 1)   n - 1
(%o1)        (n + 1) f(n) - ---------------- = -----
                                 n + 1         n + 2
(%i2) funcsolve (eqn, f(n));

Dependent equations eliminated:  (4 3)
                                   n
(%o2)                f(n) = ---------------
                            (n + 1) (n + 2)

警告: これはとても未完成な実装です - 多くの安全性チェックや明らかな一般化が忘れられています。

Categories:  Algebraic equations

オプション変数: globalsolve

デフォルト値: false

globalsolveが trueの場合、 2つ以上の線形方程式を解く時、 解くべき変数が linsolveや solveが見つけた解の値に割り当てられます。

globalsolveが falseの時、 2つ以上の線形方程式を解く時、 linsolveや solveが見つけた解は等式として表現され、 解くべき変数は割り当てられません。

2つ以上の線形方程式以外の何かを解く時には、 solveは globalsolveを無視します。 方程式を解く他の関数(例えば algsys)はいつも globalsolveを無視します。

例:

 
(%i1) globalsolve: true$
(%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

                                 17
(%t2)                        x : --
                                 7

                                   1
(%t3)                        y : - -
                                   7
(%o3)                     [[%t2, %t3]]
(%i3) x;
                               17
(%o3)                          --
                               7
(%i4) y;
                                 1
(%o4)                          - -
                                 7
(%i5) globalsolve: false$
(%i6) kill (x, y)$
(%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

                                 17
(%t7)                        x = --
                                 7

                                   1
(%t8)                        y = - -
                                   7
(%o8)                     [[%t7, %t8]]
(%i8) x;
(%o8)                           x
(%i9) y;
(%o9)                           y

Categories:  Linear equations

関数: ieqn (ie, unk, tech, n, guess)

inteqnは積分方程式を解くためのパッケージです。 load ("inteqn")はこのパッケージをロードします。

ieは積分方程式です; unkは未知の関数です; techは上で与えられたこれらから試される手法です; (tech = firstは次を意味します: 解を見つける最初の手法を試みる; tech = allは次を意味します: 適用可能な手法すべてを試みる); nは taylorか, neumann, firstkindseries, fredseries に関して扱う項の最大数です (微分法に関する再帰の最大深度でもあります); guessは neumannか firstkindseriesに関する初期の推測です。

2番目から5番目までのパラメータのデフォルト値は、以下の通りです:

unk: p(x)。 ここで pは被積分関数の中で出会う Maximaが知らない最初の関数であり、 xは secondkind方程式の場合の積分の外側で見つかった pの最初の出現時の引数か firstkind方程式の中の積分変数を除いた唯一の残りの変数です。 もし xを探す企てが失敗したら、ユーザーは独立変数を提供するよう尋ねられるでしょう。

tech: first

n: 1

guess: none とすると、 neumannと firstkindseriesは初期推測として f(x)を使うようになります。

Categories:  Integral equations

オプション変数: ieqnprint

デフォルト値: true

ieqnprintは ieqnコマンドが返す結果の振る舞いを決めます。 ieqnprintが falseの時、 ieqn関数が返すリストは形式

[solution, technique used, nterms, flag]

を取ります。

ここでもし解が厳密なら flagはありません。

そうでないなら、厳密でない解か閉じていない形の解かに対応してそれぞれ、単語 approximateか incompleteです。 もし級数法が使われたら、 ntermsは取った項の数を与えます。 (もしエラーが更なる項の生成を防いだなら、項の数は ieqnに与えたnよりも小さいこともあり得ます。)

Categories:  Integral equations

関数: lhs (expr)

exprの演算子が関係演算子 < <= = # equal notequal >= >の1つか 割り当て演算子 := ::= : ::の1つ、 infixで宣言されたユーザー定義の二項中置演算子のいずれかの時、 式 exprの左辺(すなわち、最初の項)を返します。

exprがアトムか、演算子が上で記載したもの以外の何かの時、 lhsは exprを返します。

rhsも参照してください。

例:

 
(%i1) e: aa + bb = cc;
(%o1)                     bb + aa = cc
(%i2) lhs (e);
(%o2)                        bb + aa
(%i3) rhs (e);
(%o3)                          cc
(%i4) [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb),
       lhs (aa > bb)];
(%o4)                   [aa, aa, aa, aa]
(%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)),
       lhs (notequal (aa, bb))];
(%o5)                   [aa, aa, aa, aa]
(%i6) e1: '(foo(x) := 2*x);
(%o6)                     foo(x) := 2 x
(%i7) e2: '(bar(y) ::= 3*y);
(%o7)                    bar(y) ::= 3 y
(%i8) e3: '(x : y);
(%o8)                         x : y
(%i9) e4: '(x :: y);
(%o9)                        x :: y
(%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
(%o10)               [foo(x), bar(y), x, x]
(%i11) infix ("][");
(%o11)                         ][
(%i12) lhs (aa ][ bb);
(%o12)                         aa

Categories:  Expressions

関数: linsolve ([expr_1, …, expr_m], [x_1, …, x_n])

変数のリストに関して連立線形方程式のリストを解きます。 それぞれの式は変数に関する多項式でなければならず、等式も受け付けます。 もし変数のリストの長さが解くべき線形に独立な方程式の数に一致しないなら 結果は空のリストになります。

globalsolveが trueの時、 解くべき変数それぞれは方程式の解の値にバインドされます。

backsubstが falseの時、 linsolveは方程式を三角行列化した後、後退代入を実行しません。 これは後退代入が極端に大きな式の生成の原因となる非常に大きな問題に対して 必要とされるかもしれません。

linsolve_paramsが trueの時、 linsolveは algsysの下のマニュアルの中で記述された任意のパラメータを表すのに使われる %rシンボルも生成します。 そうでないなら、 linsolveは他を使って表されたいくつかの変数を使って決定中の方程式系を解きます。 (solves an under-determined system of equations with some variables expressed in terms of others.)

programmodeが falseの時、 linsolveは中間式(%t)ラベルを使って解を表示し、ラベルのリストを返します。

algsysや eliminate、 solveも参照してください。

例:

 
(%i1) e1: x + z = y;
(%o1)                       z + x = y
(%i2) e2: 2*a*x - y = 2*a^2;
                                       2
(%o2)                   2 a x - y = 2 a
(%i3) e3: y - 2*z = 2;
(%o3)                      y - 2 z = 2
(%i4) [globalsolve: false, programmode: true];
(%o4)                     [false, true]
(%i5) linsolve ([e1, e2, e3], [x, y, z]);
(%o5)            [x = a + 1, y = 2 a, z = a - 1]
(%i6) [globalsolve: false, programmode: false];
(%o6)                    [false, false]
(%i7) linsolve ([e1, e2, e3], [x, y, z]);
Solution

(%t7)                       z = a - 1

(%t8)                        y = 2 a

(%t9)                       x = a + 1
(%o9)                    [%t7, %t8, %t9]
(%i9) ''%;
(%o9)            [z = a - 1, y = 2 a, x = a + 1]
(%i10) [globalsolve: true, programmode: false];
(%o10)                    [true, false]
(%i11) linsolve ([e1, e2, e3], [x, y, z]);
Solution

(%t11)                      z : a - 1

(%t12)                       y : 2 a

(%t13)                      x : a + 1
(%o13)                 [%t11, %t12, %t13]
(%i13) ''%;
(%o13)           [z : a - 1, y : 2 a, x : a + 1]
(%i14) [x, y, z];
(%o14)                 [a + 1, 2 a, a - 1]
(%i15) [globalsolve: true, programmode: true];
(%o15)                    [true, true]
(%i16) linsolve ([e1, e2, e3], '[x, y, z]);
(%o16)           [x : a + 1, y : 2 a, z : a - 1]
(%i17) [x, y, z];
(%o17)                 [a + 1, 2 a, a - 1]

Categories:  Linear equations

オプション変数: linsolvewarn

デフォルト値: true

linsolvewarnが trueの時、 linsolveはメッセージ"Dependent equations eliminated"を表示します。

Categories:  Linear equations

オプション変数: linsolve_params

デフォルト値: true

linsolve_paramsが trueの時、 linsolveは algsysの下のマニュアルに記述された任意のパラメータを表すのに使われる %rシンボルも生成します。 それでないなら、linsolveは他を使って表されたいくつかの変数を使って 決定中の方程式系を解きます。

Categories:  Linear equations

システム変数: multiplicities

デフォルト値: not_set_yet

multiplicitiesは solveや realrootsが返す個々の解の重複度のリストに設定されます。

Categories:  Algebraic equations · Polynomials

関数: nroots (p, low, high)

半開区間 (low, high]の中の実数一変数多項式 pの実根の数を返します。 区間の端点は minfか infかもしれません。

nrootsは、Sturm列の方法を使います。

 
(%i1) p: x^10 - 2*x^4 + 1/2$
(%i2) nroots (p, -6, 9.1);
(%o2)                           4

Categories:  Polynomials · Numerical methods

関数: nthroot (p, n)

pは整数係数多項式で、 nは正の整数です。 q^n = pのような整数上の多項式 qを返すか、 pが完全な n番目のべき (a perfect nth pwer)でないことを示すエラーメッセージを表示します。 このルーチンは factorより、また sqfrよりさえもっと速いです。

Categories:  Polynomials

オプション変数: polyfactor

デフォルト値: false

オプション変数 polyfactorが trueの時、 allrootsと bfallrootsは もし多項式が実数なら実数上で、もし多項式が複素数なら複素数上で多項式を因数分解します。

例は allrootsを参照してください。

Categories:  Polynomials · Numerical methods

オプション変数: programmode

デフォルト値: true

programmodeが trueの時、 solve, realroots, allroots, linsolveはリストの中の要素として解を返します。 (backsubstが false設定されている時を除きます― その場合はprogrammode: falseが仮定されます―)

programmodeが falseの時、 solveなどは中間式ラベル %t1, %t2など生成し、解をそれらに割り当てます。

Categories:  Algebraic equations · Polynomials

オプション変数: realonly

デフォルト値: false

realonlyが trueの時、 algsysは %iを含まないそれらの解だけを返します。

Categories:  Algebraic equations

関数: realroots  
    realroots (expr, bound)  
    realroots (eqn, bound)  
    realroots (expr)  
    realroots (eqn)

変数多項式 exprか1変数多項方程式 eqnの実根の有理近似を boundの許容誤差の範囲内で計算します。 exprか eqnの係数はリテラル数でなければなりません。 %piのようなシンボル定数は却下されます。

realrootsはみつけた根の重複度をグローバル変数 multiplicitiesに割り当てます。

realrootsはそれぞれの根を囲むために Sturm列を構成し、 それから近似を精密化するために二分法を適用します。 根を探索する前にすべての係数を同値の有理数に変換し、 計算は正確な有理算術で実行します。 たとえ係数が浮動小数点でも、 (floatか numerフラグによって浮動小数点が強要されない限り)結果は有理数です。

boundが1よりも小さい時、全ての整数根は正確に計算されます。 boundが指定されない時、グローバル変数 rootsepsilonと等しいと仮定されます。

グローバル変数 programmodeが trueの時、 realrootsは形式 [x = x_1, x = x_2, …]のリストを返します。 programmodeが falseの時、 realrootsは中間式ラベル %t1, %t2, …を生成し、 結果をそれらに割り当て、ラベルのリストを返します。

例:

 
(%i1) realroots (-1 - x + x^5, 5e-6);
                               612003
(%o1)                     [x = ------]
                               524288
(%i2) ev (%[1], float);
(%o2)                 x = 1.167303085327148
(%i3) ev (-1 - x + x^5, %);
(%o3)                - 7.396496210176905E-6
 
(%i1) realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
(%o1)                 [x = 1, x = 2, x = 3]
(%i2) multiplicities;
(%o2)                       [5, 3, 1]

Categories:  Polynomials · Numerical methods

関数: rhs (expr)

exprの演算子が関係演算子 < <= = # equal notequal >= >の1つか、 割り当て演算子:= ::= : ::の1つ、 infixで宣言されたユーザー定義の二項中置演算子のいずれかの時 式 exprの右辺(すなわち、二番目の項)を返します。

exprがアトムか、演算子が上で記載したもの以外の何かの時、 rhsは exprを返します。

lhsも参照してください。

例:

 
(%i1) e: aa + bb = cc;
(%o1)                     bb + aa = cc
(%i2) lhs (e);
(%o2)                        bb + aa
(%i3) rhs (e);
(%o3)                          cc
(%i4) [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb),
       rhs (aa > bb)];
(%o4)                   [bb, bb, bb, bb]
(%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)),
       rhs (notequal (aa, bb))];
(%o5)                   [bb, bb, bb, bb]
(%i6) e1: '(foo(x) := 2*x);
(%o6)                     foo(x) := 2 x
(%i7) e2: '(bar(y) ::= 3*y);
(%o7)                    bar(y) ::= 3 y
(%i8) e3: '(x : y);
(%o8)                         x : y
(%i9) e4: '(x :: y);
(%o9)                        x :: y
(%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
(%o10)                  [2 x, 3 y, y, y]
(%i11) infix ("][");
(%o11)                         ][
(%i12) rhs (aa ][ bb);
(%o12)                         bb

Categories:  Expressions

オプション変数: rootsconmode

デフォルト値: true

rootsconmodeは rootscontractコマンドの振る舞いを決定します。 詳細は rootscontractを参照してください。

関数: rootscontract (expr)

根の積を積の根に変換します。 例えば、 rootscontract (sqrt(x)*y^(3/2))は sqrt(x*y^3)となります。

radexpandが trueかつ domainが realの時、 rootscontractは absを sqrtに変換します。 例えば rootscontract (abs(x)*sqrt(y))は sqrt(x^2*y)をもたらします。

以下のように rootscontractに影響するオプション rootsconmodeがあります:

 
問題               rootsconmodeの値 rootscontractを適用した値

x^(1/2)*y^(3/2)      false          (x*y^3)^(1/2)
x^(1/2)*y^(1/4)      false          x^(1/2)*y^(1/4)
x^(1/2)*y^(1/4)      true           (x*y^(1/2))^(1/2)
x^(1/2)*y^(1/3)      true           x^(1/2)*y^(1/3)
x^(1/2)*y^(1/4)      all            (x^2*y)^(1/4)
x^(1/2)*y^(1/3)      all            (x^3*y^2)^(1/6)

rootsconmodeが falseの時、 rootscontractは分母が同じ有理数指数に関してだけ短縮します。 rootsconmode: trueの例のキーは、 単に、4は2で割り切れますが4は2で割り切れないということです。 rootsconmode: allは指数の分母の最小公倍数を取るようになります。

rootscontractは logcontractと似た方法で ratsimpを使います。

例:

 
(%i1) rootsconmode: false$
(%i2) rootscontract (x^(1/2)*y^(3/2));
                                   3
(%o2)                      sqrt(x y )
(%i3) rootscontract (x^(1/2)*y^(1/4));
                                   1/4
(%o3)                     sqrt(x) y
(%i4) rootsconmode: true$
(%i5) rootscontract (x^(1/2)*y^(1/4));
(%o5)                    sqrt(x sqrt(y))
(%i6) rootscontract (x^(1/2)*y^(1/3));
                                   1/3
(%o6)                     sqrt(x) y
(%i7) rootsconmode: all$
(%i8) rootscontract (x^(1/2)*y^(1/4));
                              2   1/4
(%o8)                       (x  y)
(%i9) rootscontract (x^(1/2)*y^(1/3));
                             3  2 1/6
(%o9)                      (x  y )
(%i10) rootsconmode: false$
(%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
                    *sqrt(sqrt(1 + x) - sqrt(x)));
(%o11)                          1
(%i12) rootsconmode: true$
(%i13) rootscontract (sqrt(5+sqrt(5)) - 5^(1/4)*sqrt(1+sqrt(5)));
(%o13)                          0

Categories:  Simplification functions

オプション変数: rootsepsilon

デフォルト値: 1.0e-7

rootsepsilonは realroots関数が見つけた根に関する信頼区間を確立する許容誤差です。

Categories:  Polynomials · Numerical methods

関数: solve  
    solve (expr, x)  
    solve (expr)  
    solve ([eqn_1, …, eqn_n], [x_1, …, x_n])

代数等式 exprを xについて解き、 xの解等式のリストを返します。 もし exprが等式でなければ、等式 expr = 0を仮定します。 xは関数(例えば f(x))でも他のアトムでない式でも問題ありません。 (sumやproductは除きます。) exprが変数を1つだけ含む場合 xは省略できます。 exprは有理式でもよく、三角関数や指数関数を含むこともできます。

以下の方法を使います:

Eを式、 Xを変数とします。 もし Eが Xに関して線形なら Xについて自明に解きます。 そうでない場合、もし Eが A*X^N + Bの形なら、 結果は (-B/A)^(1/N)かける1の N乗根です。

もし Eが Xについて線形でないなら、 Eの中の Xの指数の gcd(以下 Nとする)で指数を割り、 根にNを掛けます。 その後、結果に対して solveを再びコールします。 もし Eが因数分解されるなら、 solveを因子のそれぞれに対してコールします。 最後に solveは2次方程式、3次方程式、4次方程式の解の公式を必要に応じて使います。

Eが解くべき変数のある関数(以下 F(X))の多項式の場合, 最初に F(X)について解き(結果をCと呼びます)、 関数 Fの逆関数がわかっている場合、等式 F(X)=CをXについて解きます。

もし breakupが falseなら、 solveは3次もしくは4次方程式の解を、 デフォルトの、いくつかの共通部分式から成る表現ではなく、 単一の式で表現します。

multiplicitiesは solveや realroots, allrootsが返す多数の独立の解のリストに設定されます。 solveに影響するスイッチについては apropos (solve)を試してください。 スイッチの目的がはっきりしない時は、 describeで個々のスイッチ名を調べましょう。

solve ([eqn_1, ..., eqn_n], [x_1, ..., x_n])は linsolveか algsysをコールすることで, 同時(線形もしくは非線形)代数方程式系を解き、変数の解リストのリストを返します。 linsolveの場合、このリストは解の単一リストを含みます。 引数に2つのリストを取ります。 最初のリストは解くべき等式を示し、2番目のリストは決定すべき未知数のリストです。 もし等式の変数の総数が等式の数に等しいなら、2番目の引数リストは省略できます。

programmodeが falseの時、 solveは中間式 (%t)ラベルを持つ解を表示し、ラベルのリストを返します。

globalsolveが trueでかつ、問題が2つ以上の線形方程式を解くことである場合、 それぞれの解くべき変数は方程式の解の値にバインドされます。

例:

 
(%i1) solve (asin (cos (3*x))*(f(x) - 1), x);

solve: using arc-trig functions to get a solution.
Some solutions will be lost.
                            %pi
(%o1)                  [x = ---, f(x) = 1]
                             6
(%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
                                log(125)
(%o2)                   [f(x) = --------]
                                 log(5)
(%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
                      2    2
(%o3)             [4 x  - y  = 12, x y - x = 2]

(%i4) solve (%, [x, y]);
(%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
 - .1331240357358706, y = .07678378523787788
 - 3.608003221870287 %i], [x = - .5202594388652008 %i
 - .1331240357358706, y = 3.608003221870287 %i
 + .07678378523787788], [x = - 1.733751846381093,
y = - .1535675710019696]]

(%i5) solve (1 + a*x + x^3, x);

                                       3
              sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
(%o5) [x = (- ---------- - -) (--------------- - -)
                  2        2      6 sqrt(3)      2

        sqrt(3) %i   1
       (---------- - -) a
            2        2
 - --------------------------, x =
              3
      sqrt(4 a  + 27)   1 1/3
   3 (--------------- - -)
         6 sqrt(3)      2

                          3
 sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
(---------- - -) (--------------- - -)
     2        2      6 sqrt(3)      2

         sqrt(3) %i   1
      (- ---------- - -) a
             2        2
 - --------------------------, x =
              3
      sqrt(4 a  + 27)   1 1/3
   3 (--------------- - -)
         6 sqrt(3)      2

         3
 sqrt(4 a  + 27)   1 1/3               a
(--------------- - -)    - --------------------------]
    6 sqrt(3)      2                  3
                              sqrt(4 a  + 27)   1 1/3
                           3 (--------------- - -)
                                 6 sqrt(3)      2
(%i6) solve (x^3 - 1);
             sqrt(3) %i - 1        sqrt(3) %i + 1
(%o6)   [x = --------------, x = - --------------, x = 1]
                   2                     2
(%i7) solve (x^6 - 1);
           sqrt(3) %i + 1      sqrt(3) %i - 1
(%o7) [x = --------------, x = --------------, x = - 1,
                 2                   2

                     sqrt(3) %i + 1        sqrt(3) %i - 1
               x = - --------------, x = - --------------, x = 1]
                           2                     2
(%i8) ev (x^6 - 1, %[1]);
                                      6
                      (sqrt(3) %i + 1)
(%o8)                 ----------------- - 1
                             64
(%i9) expand (%);
(%o9)                           0
(%i10) x^2 - 1;
                              2
(%o10)                       x  - 1
(%i11) solve (%, x);
(%o11)                  [x = - 1, x = 1]
(%i12) ev (%th(2), %[1]);
(%o12)                          0

シンボル %rが解の中で任意定数を示すのに使われます。

 
(%i1) solve([x+y=1,2*x+2*y=2],[x,y]);

solve: dependent equations eliminated: (2)
(%o1)                      [[x = 1 - %r1, y = %r1]]

更に知るには algsysと %rnum_listを参照してください。

Categories:  Algebraic equations

オプション変数: solvedecomposes

デフォルト値: true

solvedecomposesが trueの時、 もし多項式を解くように頼まれたなら、 solveは polydecompをコールします。

Categories:  Algebraic equations

オプション変数: solveexplicit

デフォルト値: false

solveexplicitが trueの時、 solveが陰解―すなわち、Fがある関数である形式F(x) = 0の解― を返すことを抑制します。

Categories:  Algebraic equations

オプション変数: solvefactors

デフォルト値: true

solvefactorsが falseの時、 solveは式を因数分解しようとしません。 false設定は因数分解が不要ないくつかの場合に望まれるかもしれません。

Categories:  Algebraic equations

オプション変数: solvenullwarn

デフォルト値: true

solvenullwarnが trueの時、 もし空の等式リストか空の変数リストを引数にコールされたら solveは警告メッセージを表示します。 例えば solve ([], [])は2つの警告メッセージを表示し、 []を返します。

Categories:  Algebraic equations

オプション変数: solveradcan

デフォルト値: false

solveradcanが trueの時、 solveは radcanをコールします。 solveは遅くなりますが、指数と対数を含むある問題が解けるようになります。

Categories:  Algebraic equations

オプション変数: solvetrigwarn

デフォルト値: true

solvetrigwarnが trueの時、 solveは、方程式を解くために逆三角関数を使い そのため解を失っていることを示す メッセージを表示するかもしれません。

Categories:  Algebraic equations


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 市川雄二 on October, 4 2018 using texi2html 1.76.