[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

20. Equations


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

20.1 Functions and Variables for Equations

システム変数: %rnum_list

デフォルト値: []

%rnum_listsolvealgsys による解で導入された変数のリストです。 %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

algsysalgepsilon を使います。

·

Categories:  Algebraic equations

オプション変数: algexact

デフォルト値: false

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

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

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

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

·

Categories:  Algebraic equations

関数: 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に関する EE_jの終結式を サブシステム S_iの中の残っている等式群 E_jのそれぞれに関して計算します。

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

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

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

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

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

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

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

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

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

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 (expr)
関数: allroots (eqn)

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

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

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

allrootsは非多項式を却下します。 ratされた分子が多項式であることを要求し、 分母はせいぜい複素数であることを要求します。 この結果、もし polyfactortrueなら、 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 (expr)
関数: bfallroots (eqn)

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

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

·

Categories:  Polynomials ·Numerical methods

オプション変数: backsubst

デフォルト値: true

backsubstfalseの時、 方程式を三角行列化した後 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

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

breakup: trueprogrammodefalseの時だけ効果を持ちます。

例:

 
(%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 (eqn)
関数: dimension (eqn_1, ..., eqn_n)

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

·

Categories:  Share packages

オプション変数: dispflag

デフォルト値: true

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

関数: 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

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

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

2つ以上の線形方程式以外の何かを解く時には、 solveglobalsolveを無視します。 方程式を解く他の関数(例えば 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は次を意味します: 適用可能な手法すべてを試みる); ntaylorか, neumann, firstkindseries, fredseries に関して扱う項の最大数です (微分法に関する再帰の最大深度でもあります); guessneumannfirstkindseriesに関する初期の推測です。

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

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

tech: first

n: 1

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

·

Categories:  Integral equations

オプション変数: ieqnprint

デフォルト値: true

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

[solution, technique used, nterms, flag]

を取ります。

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

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

·

Categories:  Integral equations

関数: lhs (expr)

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

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

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])

変数のリストに関して連立線形方程式のリストを解きます。 それぞれの式は変数に関する多項式でなければならず、等式も受け付けます。

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

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

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

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

 
(%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

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

·

Categories:  Linear equations

オプション変数: linsolve_params

デフォルト値: true

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

·

Categories:  Linear equations

システム変数: multiplicities

デフォルト値: not_set_yet

multiplicitiessolverealroots が返す個々の解の重複度のリストに設定されます。

·

Categories:  Algebraic equations ·Polynomials

関数: nroots (p, low, high)

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

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

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

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

·

Categories:  Polynomials ·Numerical methods

オプション変数: programmode

デフォルト値: true

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

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

·

Categories:  Algebraic equations ·Polynomials

オプション変数: realonly

デフォルト値: false

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

·

Categories:  Algebraic equations

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

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

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

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

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

グローバル変数 programmodetrueの時、 realrootsは形式 [x = x_1, x = x_2, …]のリストを返します。 programmodefalseの時、 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がアトムか、演算子が上で記載したもの以外の何かの時、 rhsexprを返します。

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

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

関数: rootscontract (expr)

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

radexpandtrueかつ domainrealの時、 rootscontractabssqrt に変換します。 例えば 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)

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

rootscontractlogcontract と似た方法で 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

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

·

Categories:  Polynomials ·Numerical methods

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

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

以下の方法を使います:

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

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

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

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

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

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

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

globalsolvetrueでかつ、問題が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

solvedecomposestrueの時、 もし多項式を解くように頼まれたなら、 solvepolydecomp をコールします。

·

Categories:  Algebraic equations

オプション変数: solveexplicit

デフォルト値: false

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

·

Categories:  Algebraic equations

オプション変数: solvefactors

デフォルト値: true

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

·

Categories:  Algebraic equations

オプション変数: solvenullwarn

デフォルト値: true

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

·

Categories:  Algebraic equations

オプション変数: solveradcan

デフォルト値: false

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

·

Categories:  Algebraic equations

オプション変数: solvetrigwarn

デフォルト値: true

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

·

Categories:  Algebraic equations


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は市川 雄二によって2014年4月月20日texi2html 1.82を用いて生成されました。