Nightlybuild/nightlytest scripts: Add documentation.
[maxima.git] / doc / info / ja / Equations.texi
blob1e12de361b2b0548e8b9b70591c891698cb7e58b
1 @menu
2 * Functions and Variables for Equations::   
3 @end menu
5 @c -----------------------------------------------------------------------------
6 @node Functions and Variables for Equations,  , Equations, Equations
7 @section Functions and Variables for Equations
8 @c -----------------------------------------------------------------------------
10 @c NEED A DESCRIPTION OF %rnum AS WELL
12 @c -----------------------------------------------------------------------------
13 @anchor{%rnum_list}
14 @defvr {システム変数} %rnum_list
15 デフォルト値: @code{[]}
17 @code{%rnum_list}は、
18 @mref{solve}や@mref{algsys}による解で導入された
19 変数のリストです。
20 @code{%r}変数は、それらが生成された順に
21 @code{%rnum_list}に追加されます。
22 これは、あとで解への代入を行うのに便利です。
23 @c WHAT DOES THIS STATEMENT MEAN ??
24 @code{concat ('%r, j)}をするよりこのリストを使うことを推奨します。
26 @c ===beg===
27 @c solve ([x + y = 3], [x,y]);
28 @c %rnum_list;
29 @c sol : solve ([x + 2*y + 3*z = 4], [x,y,z]);
30 @c %rnum_list;
31 @c for i : 1 thru length (%rnum_list) do
32 @c   sol : subst (t[i], %rnum_list[i], sol)$
33 @c sol;
34 @c ===end===
35 @example
36 @group
37 (%i1) solve ([x + y = 3], [x,y]);
38 (%o1)              [[x = 3 - %r1, y = %r1]]
39 @end group
40 @group
41 (%i2) %rnum_list;
42 (%o2)                       [%r1]
43 @end group
44 @group
45 (%i3) sol : solve ([x + 2*y + 3*z = 4], [x,y,z]);
46 (%o3)   [[x = - 2 %r3 - 3 %r2 + 4, y = %r3, z = %r2]]
47 @end group
48 @group
49 (%i4) %rnum_list;
50 (%o4)                     [%r2, %r3]
51 @end group
52 @group
53 (%i5) for i : 1 thru length (%rnum_list) do
54         sol : subst (t[i], %rnum_list[i], sol)$
55 @end group
56 @group
57 (%i6) sol;
58 (%o6)     [[x = - 2 t  - 3 t  + 4, y = t , z = t ]]
59                      2      1           2       1
60 @end group
61 @end example
63 @opencatbox
64 @category{Algebraic equations}
65 @closecatbox
66 @end defvr
68 @c -----------------------------------------------------------------------------
69 @anchor{algepsilon}
70 @defvr {オプション変数} algepsilon
71 デフォルト値: 10^8
73 @c WHAT IS algepsilon, EXACTLY ??? describe ("algsys") IS NOT VERY INFORMATIVE !!!
74 @code{algsys}が
75 @mref{algepsilon}を使います。
77 @opencatbox
78 @category{Algebraic equations}
79 @closecatbox
80 @end defvr
82 @c -----------------------------------------------------------------------------
83 @anchor{algexact}
84 @defvr {オプション変数} algexact
85 デフォルト値: @code{false}
87 @code{algexact}は、以下のように@mref{algsys}の振る舞いに影響を与えます:
89 もし@code{algexact}が@code{true}なら、
90 @code{algsys}はいつも@mref{solve}をコールし、
91 @code{solve}の失敗時には@mref{realroots}を使います。
93 もし@code{algexact}が@code{false}なら、
94 問題が1変数でないときだけ、
95 もしくは、方程式が二次もしくは四次なら
96 @code{solve}がコールされます。
98 このように、@code{algexact: true}は、
99 厳密解だけを保証せず、ただ、
100 @code{algsys}は最初に厳密解を与えるように最大限努力して、
101 他のすべてが失敗した時近似をもたらすことだけを保証します。
103 @c ABOVE DESCRIPTION NOT TOO CLEAR -- MAYBE EXAMPLES WILL HELP
105 @opencatbox
106 @category{Algebraic equations}
107 @closecatbox
108 @end defvr
110 @c -----------------------------------------------------------------------------
111 @anchor{algsys}
112 @deffn  {関数} algsys ([@var{expr_1}, @dots{}, @var{expr_m}], [@var{x_1}, @dots{}, @var{x_n}])
113 @deffnx {関数} algsys ([@var{eqn_1}, @dots{}, @var{eqn_m}], [@var{x_1}, @dots{}, @var{x_n}])
115 同時多項式@var{expr_1}, @dots{}, @var{expr_m}
116 または多項式方程式@var{eqn_1}, @dots{}, @var{eqn_m}
117 を変数@var{x_1}, @dots{}, @var{x_n}について解きます。
118 式@var{expr}は、等式@code{@var{expr} = 0}と同値です。
119 変数より等式が多い場合も逆もあります。
121 @code{algsys}は、解のリストを返します。
122 ここで、それぞれの解は、
123 方程式系を満たす変数@var{x_1}, @dots{}, @var{x_n}の値を指定する等式のリストとして
124 与えられます。
125 もし@code{algsys}が解を見つけられなければ、
126 空のリスト@code{[]}が返されます。
128 シンボル@code{%r1}, @code{%r2}, @dots{},
129 が、解の任意パラメータを表すために、必要に応じて導入されます;
130 これらの変数は、リスト @mref{%rnum_list}にも追加されます。
132 方法は以下の通りです:
134 @enumerate
135 @item
136 最初に、方程式は因数分解され、サブシステムに分割されます。
138 @item
139 それぞれのサブシステム@var{S_i}に関して、等式@var{E}と変数@var{x}が選択されます。
140 変数はゼロでない最低次を持つよう選ばれます。
141 そして、
142 @var{x}に関する@var{E}と@var{E_j}の終結式が
143 サブシステム@var{S_i}の中の残っている等式群@var{E_j}のそれぞれに関して計算されます。
145 これは、@var{x}が消去されるので、
146 1つ変数の少ない新しいサブシステム@var{S_i'}をもたらします
147 ここでプロセスは(1)に戻ります。
149 @item
150 いつか、1つの等式から成るサブシステムが得られます。
151 もし等式が多変数なら、浮動小数点数の形式の近似は導入されず、
152 厳密解を見つけるために@mref{solve}がコールされます。
154 いくつかの場合、@code{solve}は解を見つけることができないか、
155 もし見つけたら、絵が非常に大きな式になるかもしれません。
157 @c REMAINDER OF (3) IS PRETTY COMPLEX. HOW CAN IT BE CLARIFIED ??
158 もし等式が1変数で、線形か二次か四次なら、
159 もし近似が導入されないなら、再び@code{solve}がコールされます。
160 もし近似が導入されるか、等式が1変数でなく、線形でも二次でも、四次でもないなら、
161 もしスイッチ@mref{realonly}が@code{true}なら、
162 実数解を見つけるため関数@mref{realroots}がコールされます。
163 もし@code{realonly}が@code{false}なら、
164 実数解と複素数解を探す@mref{allroots}がコールされます。
166 もし@code{algsys}が
167 要求よりも有効数字が少ない解を生成するなら、
168 ユーザーは@mref{algepsilon}の値をより高い値に変更できます。
170 もし@code{algexact}が@code{true}に設定されているなら、
171 いつも@code{solve}がコールされます。
172 @c algepsilon IS IN Floating.texi -- MAY WANT TO BRING IT INTO THIS FILE
174 @item
175 最終的に、ステップ(3)で得られた解は以前のレベルに代入され、解処理は(1)に戻ります。
176 @c "PREVIOUS LEVELS" -- WHAT ARE THOSE ??
177 @end enumerate
179 @code{algsys}が(通常、初期の段階での厳密解発見の失敗による)浮動小数点近似を含む多変数方程式に出会う時、
180 厳密な方法をそんな方程式に適用しようとせず、かわりにメッセージを表示します:
181 "@code{algsys} cannot solve - system too complicated."
183 @mref{radcan}との対話は、多きなもしくは複雑な式を生成することができます。
184 この場合、@mref{pickapart}または @mref{reveal}を使って結果の一部を分離することができるかもしれません。
186 時々、@code{radcan}は、実際には実数値の解に虚数単位@code{%i}を導入するかもしれません。
188 例:
190 @c ===beg===
191 @c e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
192 @c e2: a2 - a1;
193 @c e3: a1*(-y - x^2 + 1);
194 @c e4: a2*(y - (x - 1)^2);
195 @c algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
196 @c e1: x^2 - y^2;
197 @c e2: -1 - y + 2*y^2 - x + x^2;
198 @c algsys ([e1, e2], [x, y]);
199 @c ===end===
200 @example
201 (%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
202 (%o1)              2 (1 - a1) x - 2 a2 (x - 1)
203 (%i2) e2: a2 - a1; 
204 (%o2)                        a2 - a1
205 (%i3) e3: a1*(-y - x^2 + 1); 
206                                    2
207 (%o3)                   a1 (- y - x  + 1)
208 (%i4) e4: a2*(y - (x - 1)^2);
209                                        2
210 (%o4)                   a2 (y - (x - 1) )
211 (%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
212 (%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0], 
214                                   [x = 1, y = 0, a1 = 1, a2 = 1]]
215 (%i6) e1: x^2 - y^2;
216                               2    2
217 (%o6)                        x  - y
218 (%i7) e2: -1 - y + 2*y^2 - x + x^2;
219                          2        2
220 (%o7)                 2 y  - y + x  - x - 1
221 (%i8) algsys ([e1, e2], [x, y]);
222                  1            1
223 (%o8) [[x = - -------, y = -------], 
224               sqrt(3)      sqrt(3)
226         1              1             1        1
227 [x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
228      sqrt(3)        sqrt(3)          3        3
229 @end example
231 @opencatbox
232 @category{Algebraic equations}
233 @closecatbox
234 @end deffn
236 @c -----------------------------------------------------------------------------
237 @anchor{allroots}
238 @deffn  {関数} allroots (@var{expr})
239 @deffnx {関数} allroots (@var{eqn})
241 1変数多項式@var{expr}もしくは1変数多項式方程式@var{eqn}の実数と複素数の根の数値近似を
242 計算する。
244 フラグ@mref{polyfactor}が@code{true}の時、
245 @code{allroots}は、多項式が実数なら多項式を実数上で因数分解し、
246 多項式が複素数なら複素数上で因数分解します。
248 @code{allroots}は、多重根の場合、不正確な結果をもたらすことがあります。
249 もし多項式が実数なら、@code{allroots (%i*@var{p})}は、
250 @code{allroots (@var{p})}より精確な近似を生成します。
251 @code{allroots}はこの場合異なるアルゴリズムを呼ぶので。
253 @code{allroots}は非多項式を却下します。
254 @code{rat}された分子が多項式であることを要求し、
255 分母はせいぜい複素数であることを要求します。
256 この結果、もし@code{polyfactor}が@code{true}なら、
257 @code{allroots}はいつも(因数分解された)同値の式を返します。
259 複素多項式のために、JenkinsとTraubのアルゴリズムが使われます
260 (Algorithm 419, Comm. ACM, vol. 15, (1972), @.97)。
261 実多項式のために、Jenkinsのアルゴリズム
262 (Algorithm 493, ACM TOMS, vol. 1, (1975), p.178)が使われます。
264 例:
266 @c ===beg===
267 @c eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
268 @c soln: allroots (eqn);
269 @c for e in soln
270 @c         do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
271 @c polyfactor: true$
272 @c allroots (eqn);
273 @c ===end===
274 @example
275 (%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
276                             3          5
277 (%o1)              (2 x + 1)  = 13.5 (x  + 1)
278 (%i2) soln: allroots (eqn);
279 (%o2) [x = .8296749902129361, x = - 1.015755543828121, 
281 x = .9659625152196369 %i - .4069597231924075, 
283 x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
284 (%i3) for e in soln
285         do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
286                       - 3.5527136788005E-15
288                      - 5.32907051820075E-15
290          4.44089209850063E-15 %i - 4.88498130835069E-15
292         - 4.44089209850063E-15 %i - 4.88498130835069E-15
294                        3.5527136788005E-15
296 (%o3)                         done
297 (%i4) polyfactor: true$
298 (%i5) allroots (eqn);
299 (%o5) - 13.5 (x - 1.0) (x - .8296749902129361)
301                            2
302  (x + 1.015755543828121) (x  + .8139194463848151 x
304  + 1.098699797110288)
305 @end example
307 @opencatbox
308 @category{Polynomials}
309 @category{Numerical methods}
310 @closecatbox
311 @end deffn
313 @c -----------------------------------------------------------------------------
314 @anchor{bfallroots}
315 @deffn  {関数} bfallroots (@var{expr})
316 @deffnx {関数} bfallroots (@var{eqn})
318 1変数の多項式@var{expr}または多項式等式@var{eqn}の実数根と複素数根の数値近似
319 を計算します。
321 @code{bfallroots}は多倍長浮動小数点を使って根を計算する以外の
322 すべての点で、@code{bfallroots}は@code{allroots}と同一です。
323 詳しい情報については@mref{allroots}を参照してください。
325 @opencatbox
326 @category{Polynomials}
327 @category{Numerical methods}
328 @closecatbox
329 @end deffn
331 @c -----------------------------------------------------------------------------
332 @anchor{backsubst}
333 @defvr {オプション変数} backsubst
334 デフォルト値: @code{true}
336 @c WHAT IS THE CONTEXT HERE ?? (TO WHICH OTHER FUNCTION DOES THIS APPLY ??)
337 @c --- According to the documentation, to linsolve
338 @code{backsubst}が@code{false}の時、
339 方程式が三角行列化された後、@mref{linsolve}の後退代入を妨げます。
340 これは、後退代入が極端に大きな式の生成のもととなる非常に大きな問題に関して役立つかもしれません。
342 @example
343 (%i1) eq1 : x + y + z = 6$
344 (%i2) eq2 : x - y + z = 2$
345 (%i3) eq3 : x + y - z = 0$
346 (%i4) backsubst : false$
347 @group
348 (%i5) linsolve ([eq1, eq2, eq3], [x,y,z]);
349 (%o5)             [x = z - y, y = 2, z = 3]
350 @end group
351 (%i6) backsubst : true$
352 @group
353 (%i7) linsolve ([eq1, eq2, eq3], [x,y,z]);
354 (%o7)               [x = 1, y = 2, z = 3]
355 @end group
356 @end example
358 @opencatbox
359 @category{Algebraic equations}
360 @closecatbox
361 @end defvr
363 @c -----------------------------------------------------------------------------
364 @anchor{breakup}
365 @defvr {オプション変数} breakup
366 デフォルト値: @code{true}
368 @code{breakup}が@code{true}の時、
369 @mref{solve}は、三次と四次の方程式の解を共通部分式を使って表現します。
370 共通部分式は、中間式ラベル(@code{%t1}, @code{%t2}, など)に割り当てられます。
371 そうでなければ、共通部分式は同定されません。
373 @code{breakup: true}は、
374 @mref{programmode}が@code{false}の時だけ、効果を持ちます。
376 例:
378 @example
379 (%i1) programmode: false$
380 (%i2) breakup: true$
381 (%i3) solve (x^3 + x^2 - 1);
383                         sqrt(23)    25 1/3
384 (%t3)                  (--------- + --)
385                         6 sqrt(3)   54
386 Solution:
388                                       sqrt(3) %i   1
389                                       ---------- - -
390                 sqrt(3) %i   1            2        2   1
391 (%t4)    x = (- ---------- - -) %t3 + -------------- - -
392                     2        2            9 %t3        3
394                                       sqrt(3) %i   1
395                                     - ---------- - -
396               sqrt(3) %i   1              2        2   1
397 (%t5)    x = (---------- - -) %t3 + ---------------- - -
398                   2        2             9 %t3         3
400                                    1     1
401 (%t6)                  x = %t3 + ----- - -
402                                  9 %t3   3
403 (%o6)                    [%t4, %t5, %t6]
404 (%i6) breakup: false$
405 (%i7) solve (x^3 + x^2 - 1);
406 Solution:
408              sqrt(3) %i   1
409              ---------- - -
410                  2        2        sqrt(23)    25 1/3
411 (%t7) x = --------------------- + (--------- + --)
412              sqrt(23)    25 1/3    6 sqrt(3)   54
413           9 (--------- + --)
414              6 sqrt(3)   54
416                                               sqrt(3) %i   1    1
417                                            (- ---------- - -) - -
418                                                   2        2    3
419 @group
420            sqrt(23)    25 1/3  sqrt(3) %i   1
421 (%t8) x = (--------- + --)    (---------- - -)
422            6 sqrt(3)   54          2        2
424                                             sqrt(3) %i   1
425                                           - ---------- - -
426                                                 2        2      1
427                                       + --------------------- - -
428                                            sqrt(23)    25 1/3   3
429                                         9 (--------- + --)
430                                            6 sqrt(3)   54
431 @end group
432             sqrt(23)    25 1/3             1             1
433 (%t9)  x = (--------- + --)    + --------------------- - -
434             6 sqrt(3)   54          sqrt(23)    25 1/3   3
435                                  9 (--------- + --)
436                                     6 sqrt(3)   54
437 (%o9)                    [%t7, %t8, %t9]
438 @end example
440 @opencatbox
441 @category{Algebraic equations}
442 @closecatbox
443 @end defvr
445 @c -----------------------------------------------------------------------------
446 @anchor{dimension}
447 @deffn  {関数} dimension (@var{eqn})
448 @deffnx {関数} dimension (@var{eqn_1}, ..., @var{eqn_n})
450 @code{dimen}は、次元解析パッケージです。
451 @code{load ("dimen")}はこのパッケージをロードします。
452 @code{demo ("dimen")}は短いデモンストレーションを表示します。
453 @c I GUESS THIS SHOULD BE EXPANDED TO COVER EACH FUNCTION IN THE PACKAGE
455 @opencatbox
456 @category{Share packages}
457 @closecatbox
458 @end deffn
460 @c -----------------------------------------------------------------------------
461 @anchor{dispflag}
462 @defvr {オプション変数} dispflag
463 デフォルト値: @code{true}
465 @c WHAT DOES THIS MEAN ??
466 もし@code{block}内で@code{false}に設定されたら
467 @code{block}内でコールされた解法関数が生成する出力の表示を抑制します。
468 @code{block}をドル記号$で終端すると、
469 @code{dispflag}を@code{false}に設定します。
471 @opencatbox
472 @category{Algebraic equations}
473 @category{Display flags and variables}
474 @closecatbox
475 @end defvr
477 @c THIS COULD BENEFIT FROM REPHRASING
479 @c -----------------------------------------------------------------------------
480 @anchor{funcsolve}
481 @deffn {関数} funcsolve (@var{eqn}, @var{g}(@var{t}))
483 @var{eqn}を満たす有理関数@code{@var{g}(@var{t})}が存在するかどうかに依存して、
484 @code{[@var{g}(@var{t}) = ...]}または@code{[]}を返します。
485 ここで、@var{eqn}は(この場合)
486 @code{@var{g}(@var{t})}と@code{@var{g}(@var{t}+1)}に関して
487 一次、線形多項式でなければいけません。
489 @example
490 (%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1) =
491       (n - 1)/(n + 2);
492                             (n + 3) f(n + 1)   n - 1
493 (%o1)        (n + 1) f(n) - ---------------- = -----
494                                  n + 1         n + 2
495 (%i2) funcsolve (eqn, f(n));
497 Dependent equations eliminated:  (4 3)
498                                    n
499 (%o2)                f(n) = ---------------
500                             (n + 1) (n + 2)
501 @end example
503 警告: これはとても未熟な実装です -- 多くの安全性チェックや
504 明らかな一般化が忘れられています。
506 @opencatbox
507 @category{Algebraic equations}
508 @closecatbox
509 @end deffn
511 @c -----------------------------------------------------------------------------
512 @anchor{globalsolve}
513 @defvr {オプション変数} globalsolve
514 デフォルト値: @code{false}
516 @code{globalsolve}が@code{true}の時、
517 2つ以上の線形方程式を解く時、
518 解くべき変数が、@code{linsolve}や@mref{solve}が見つけた解の値に割り当てられます。
520 @code{globalsolve}が@code{false}の時、
521 2つ以上の線形方程式を解く時、
522 @mref{linsolve}や@code{solve}が見つけた解は、
523 等式として表現され、
524 解くべき変数は割り当てられません。
526 2つ以上の線形方程式以外の何かを解く時には、
527 @code{solve}は@code{globalsolve}を無視します。
528 方程式を解く他の関数(例えば@mref{algsys})はいつも@code{globalsolve}を無視します。
530 例:
532 @example
533 (%i1) globalsolve: true$
534 (%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
535 Solution
537                                  17
538 (%t2)                        x : --
539                                  7
541                                    1
542 (%t3)                        y : - -
543                                    7
544 (%o3)                     [[%t2, %t3]]
545 (%i3) x;
546                                17
547 (%o3)                          --
548                                7
549 (%i4) y;
550                                  1
551 (%o4)                          - -
552                                  7
553 (%i5) globalsolve: false$
554 (%i6) kill (x, y)$
555 (%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
556 Solution
558                                  17
559 (%t7)                        x = --
560                                  7
562                                    1
563 (%t8)                        y = - -
564                                    7
565 (%o8)                     [[%t7, %t8]]
566 (%i8) x;
567 (%o8)                           x
568 (%i9) y;
569 (%o9)                           y
570 @end example
572 @opencatbox
573 @category{Linear equations}
574 @closecatbox
575 @end defvr
577 @c THIS DESCRIPTION NEEDS WORK AND EXAMPLES
578 @c MERGE IN TEXT FROM share/integequations/inteqn.usg
579 @c AND EXAMPLES FROM .../intexs.mac
581 @c --- I'm not sure that all examples from share/integequations/intexs.mac
582 @c are handled correctly by ieqn.
584 @c -----------------------------------------------------------------------------
585 @anchor{ieqn}
586 @deffn {関数} ieqn (@var{ie}, @var{unk}, @var{tech}, @var{n}, @var{guess})
588 @code{inteqn}は、積分方程式を解くためのパッケージです。
589 @code{load ("inteqn")}はこのパッケージをロードします。
591 @var{ie}は、積分方程式です;
592 @var{unk}は、未知の関数です;
593 @var{tech}は、上で与えられたこれらから試される手法です;
594  is the
595 technique to be tried from those given above
596  (@var{tech} = @code{first}は以下を意味します: 解を見つける最初の手法を試みる;
597 @var{tech} = @code{all}は以下を意味します: 適用可能な手法すべてを試みる);
598 @var{n}は、
599 @code{taylor}, @code{neumann}, @code{firstkindseries}, または@code{fredseries}
600 に関して扱う項の最大数です (微分法に関する再帰の最大深度でもあります);
601 @var{guess}は、@code{neumann}または@code{firstkindseries}に関する
602 初期の推測です。
604 2番目から5番目までのパラメータのデフォルト値は、以下の通りです:
606 @var{unk}: @code{@var{p}(@var{x})}。
607 ここで、@var{p}は被積分関数の中で出会うMaximaが知らない最初の関数であり、
608 @var{x}は、@code{secondkind}方程式の場合の積分の外側で見つかった@var{p}
609 の最初の出現時の引数、または、@code{firstkind}方程式の中の積分変数を除いた唯一の残りの変数
610 です。
611 もし@var{x}を探す企てが失敗したら、ユーザーは独立変数を供給するよう尋ねられるでしょう。
613 tech: @code{first}
615 n: 1
617 guess: @code{neumann}と@code{firstkindseries}が
618 初期推測として@code{@var{f}(@var{x})}を使うようにする@code{none}
620 @opencatbox
621 @category{Integral equations}
622 @closecatbox
623 @end deffn
625 @c -----------------------------------------------------------------------------
626 @anchor{ieqnprint}
627 @defvr {オプション変数} ieqnprint
628 デフォルト値: @code{true}
630 @code{ieqnprint}は、@code{ieqn}コマンドが返す結果の振る舞いを決めます。
631 @code{ieqnprint}が@code{false}の時、
632 @mref{ieqn}関数が返すリストは、形式
634    [@var{solution}, @var{technique used}, @var{nterms}, @var{flag}]
636 を取ります。
638 ここで、もし解が厳密なら@var{flag}はありません。
640 そうでなければ、厳密でない解か閉じていない形の解かに対応して、それぞれ、単語@code{approximate}または@code{incomplete}です。
641 もし級数法が使われたら、
642 @var{nterms}は、取った項の数を与えます。
643 (項の数は、もしエラーが更なる項の生成を防いだなら、@code{ieqn}に与えられたnよりも小さいこともあり得ます。)
645 @opencatbox
646 @category{Integral equations}
647 @closecatbox
648 @end defvr
650 @c -----------------------------------------------------------------------------
651 @anchor{lhs}
652 @deffn {関数} lhs (@var{expr})
654 @var{expr}の演算子が関係演算子@code{< <= = # equal notequal >= >}の1つ、
655 @c MENTION -> (MARROW) IN THIS LIST IF/WHEN THE PARSER RECOGNIZES IT
656 割り当て演算子@code{:= ::= : ::}の1つ、
657 または@mref{infix}で宣言されたユーザー定義の二項中置演算子の時、
658 式@var{expr}の左辺(すなわち、最初の項)
659 を返します。
661 @var{expr}がアトムか、演算子が上で記載したもの以外の何かの時、
662 @code{lhs}は@var{expr}を返します。
664 @mref{rhs}も参照してください。
666 例:
668 @c ===beg===
669 @c e: aa + bb = cc;
670 @c lhs (e);
671 @c rhs (e);
672 @c [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb), 
673 @c        lhs (aa > bb)];
674 @c [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)), 
675 @c        lhs (notequal (aa, bb))];
676 @c e1: '(foo(x) := 2*x);
677 @c e2: '(bar(y) ::= 3*y);
678 @c e3: '(x : y);
679 @c e4: '(x :: y);
680 @c [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
681 @c infix ("][");
682 @c lhs (aa ][ bb);
683 @c ===end===
684 @example
685 (%i1) e: aa + bb = cc;
686 (%o1)                     bb + aa = cc
687 (%i2) lhs (e);
688 (%o2)                        bb + aa
689 (%i3) rhs (e);
690 (%o3)                          cc
691 (%i4) [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb),
692        lhs (aa > bb)];
693 (%o4)                   [aa, aa, aa, aa]
694 (%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)),
695        lhs (notequal (aa, bb))];
696 (%o5)                   [aa, aa, aa, aa]
697 (%i6) e1: '(foo(x) := 2*x);
698 (%o6)                     foo(x) := 2 x
699 (%i7) e2: '(bar(y) ::= 3*y);
700 (%o7)                    bar(y) ::= 3 y
701 (%i8) e3: '(x : y);
702 (%o8)                         x : y
703 (%i9) e4: '(x :: y);
704 (%o9)                        x :: y
705 (%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
706 (%o10)               [foo(x), bar(y), x, x]
707 (%i11) infix ("][");
708 (%o11)                         ][
709 (%i12) lhs (aa ][ bb);
710 (%o12)                         aa
711 @end example
713 @opencatbox
714 @category{Expressions}
715 @closecatbox
716 @end deffn
718 @c REVISIT -- THERE'S PROBABLY MORE TO SAY HERE
720 @c -----------------------------------------------------------------------------
721 @anchor{linsolve}
722 @deffn {関数} linsolve ([@var{expr_1}, @dots{}, @var{expr_m}], [@var{x_1}, @dots{}, @var{x_n}])
724 変数のリストに関して同時線形方程式のリストを解きます。
725 それぞれの式は変数に関する多項式でなければならず、等式も取り得ます。
727 @mref{globalsolve}が@code{true}の時、
728 解くべき変数それぞれは、方程式の解の値にバインドされます。
730 @mref{backsubst}が@code{false}の時、
731 @code{linsolve}は、方程式が三角行列化された後、後退代入を実行しません。
732 これは、後退代入が極端に大きな式の生成の原因となる非常に大きな問題に関して
733 必要とされるかもしれません。
735 @mref{linsolve_params}が@code{true}の時、
736 @code{linsolve}は
737 @mref{algsys}の下のマニュアルの中で記述された任意のパラメータを表すのに使われる
738 @code{%r}シンボルも生成します。
739 そうでなければ、
740 @code{linsolve}は、他を使って表現されたいくつかの変数を持つ
741 決定中の方程式系を解きます。
743 @mref{programmode}が@code{false}の時、
744 @code{linsolve}は、中間式(@code{%t})ラベルを使って解を表示し、
745 ラベルのリストを返します。
747 @c ===beg===
748 @c e1: x + z = y;
749 @c e2: 2*a*x - y = 2*a^2;
750 @c e3: y - 2*z = 2;
751 @c [globalsolve: false, programmode: true];
752 @c linsolve ([e1, e2, e3], [x, y, z]);
753 @c [globalsolve: false, programmode: false];
754 @c linsolve ([e1, e2, e3], [x, y, z]);
755 @c ''%;
756 @c [globalsolve: true, programmode: false];
757 @c linsolve ([e1, e2, e3], [x, y, z]);
758 @c ''%;
759 @c [x, y, z];
760 @c [globalsolve: true, programmode: true];
761 @c linsolve ([e1, e2, e3], '[x, y, z]);
762 @c [x, y, z];
763 @c ===end===
764 @example
765 (%i1) e1: x + z = y;
766 (%o1)                       z + x = y
767 (%i2) e2: 2*a*x - y = 2*a^2;
768                                        2
769 (%o2)                   2 a x - y = 2 a
770 (%i3) e3: y - 2*z = 2;
771 (%o3)                      y - 2 z = 2
772 (%i4) [globalsolve: false, programmode: true];
773 (%o4)                     [false, true]
774 (%i5) linsolve ([e1, e2, e3], [x, y, z]);
775 (%o5)            [x = a + 1, y = 2 a, z = a - 1]
776 (%i6) [globalsolve: false, programmode: false];
777 (%o6)                    [false, false]
778 (%i7) linsolve ([e1, e2, e3], [x, y, z]);
779 Solution
781 (%t7)                       z = a - 1
783 (%t8)                        y = 2 a
785 (%t9)                       x = a + 1
786 (%o9)                    [%t7, %t8, %t9]
787 (%i9) ''%;
788 (%o9)            [z = a - 1, y = 2 a, x = a + 1]
789 (%i10) [globalsolve: true, programmode: false];
790 (%o10)                    [true, false]
791 (%i11) linsolve ([e1, e2, e3], [x, y, z]);
792 Solution
794 (%t11)                      z : a - 1
796 (%t12)                       y : 2 a
798 (%t13)                      x : a + 1
799 (%o13)                 [%t11, %t12, %t13]
800 (%i13) ''%;
801 (%o13)           [z : a - 1, y : 2 a, x : a + 1]
802 (%i14) [x, y, z];
803 (%o14)                 [a + 1, 2 a, a - 1]
804 (%i15) [globalsolve: true, programmode: true];
805 (%o15)                    [true, true]
806 (%i16) linsolve ([e1, e2, e3], '[x, y, z]);
807 (%o16)           [x : a + 1, y : 2 a, z : a - 1]
808 (%i17) [x, y, z];
809 (%o17)                 [a + 1, 2 a, a - 1]
810 @end example
812 @opencatbox
813 @category{Linear equations}
814 @closecatbox
815 @end deffn
817 @c DO ANY FUNCTIONS OTHER THAN linsolve RESPECT linsolvewarn ??
819 @c -----------------------------------------------------------------------------
820 @anchor{linsolvewarn}
821 @defvr {オプション変数} linsolvewarn
822 デフォルト値: @code{true}
824 @code{linsolvewarn}が@code{true}の時、
825 @code{linsolve}はメッセージ"Dependent equations eliminated"を表示します。
827 @opencatbox
828 @category{Linear equations}
829 @closecatbox
830 @end defvr
832 @c -----------------------------------------------------------------------------
833 @anchor{linsolve_params}
834 @defvr {オプション変数} linsolve_params
835 デフォルト値: @code{true}
837 @code{linsolve_params}が@code{true}の時、
838 @mref{linsolve}は、
839 @mref{algsys}の下のマニュアルに記述された任意のパラメータを表すのに使われる@code{%r}シンボルも生成します。
840 それでなければ、@code{linsolve}は、
841 他を使って表現されたいくつかの変数を使った
842 決定中の方程式系を解きます。
844 @opencatbox
845 @category{Linear equations}
846 @closecatbox
847 @end defvr
849 @c -----------------------------------------------------------------------------
850 @anchor{multiplicities}
851 @defvr {システム変数} multiplicities
852 デフォルト値: @code{not_set_yet}
854 @code{multiplicities}は、
855 @mref{solve}や@mref{realroots}が返す個々の解の多様性のリストに設定されます。
856 @c NEED AN EXAMPLE HERE
858 @opencatbox
859 @category{Algebraic equations}
860 @category{Polynomials}
861 @closecatbox
862 @end defvr
864 @c -----------------------------------------------------------------------------
865 @anchor{nroots}
866 @deffn {関数} nroots (@var{p}, @var{low}, @var{high})
868 半開区間@code{(@var{low}, @var{high}]}の中の
869 実数一変数多項式@var{p}の実根の数を返します。
870 区間の端点は@code{minf}もしくは@code{inf}、無限大かもしれません。
871 マイナス無限大とプラス無限大。
873 @code{nroots}は、Sturm列の方法を使います。
875 @example
876 (%i1) p: x^10 - 2*x^4 + 1/2$
877 (%i2) nroots (p, -6, 9.1);
878 (%o2)                           4
879 @end example
881 @opencatbox
882 @category{Polynomials}
883 @category{Numerical methods}
884 @closecatbox
885 @end deffn
887 @c NEEDS WORK
889 @c -----------------------------------------------------------------------------
890 @anchor{nthroot}
891 @deffn {関数} nthroot (@var{p}, @var{n})
892 pは整数係数多項式で、
893 nは正の整数ですが、
894 q^n=pのような整数上の多項式qを返すか、
895 pが完全なn番目のべきでないことを示すエラーメッセージを表示します。
896 このルーチンは、@mref{factor}より、また@mref{sqfr}よりさえもっと速いです。
898 @opencatbox
899 @category{Polynomials}
900 @closecatbox
901 @end deffn
903 @c -----------------------------------------------------------------------------
904 @anchor{polyfactor}
905 @defvr {オプション変数} polyfactor
906 デフォルト値: @code{false}
908 オプション変数@code{polyfactor}が@code{true}の時、
909 @mref{allroots}と@mref{bfallroots}は
910 もし多項式が実数なら実数上で、もし多項式が複素数なら複素数上で多項式を因数分解します。
912 例は@code{allroots}を参照してください。
914 @opencatbox
915 @category{Polynomials}
916 @category{Numerical methods}
917 @closecatbox
918 @end defvr
920 @c -----------------------------------------------------------------------------
921 @anchor{programmode}
922 @defvr {オプション変数} programmode
923 デフォルト値: @code{true}
925 @code{programmode}が@code{true}の時、
926 @mref{solve}, @mref{realroots}, @mref{allroots}, @mref{linsolve}は、
927 リストの中の要素として解を返します。
928 @c WHAT DOES BACKSUBSTITUTION HAVE TO DO WITH RETURN VALUES ??
929 (@mref{backsubst}が@code{false}設定されている時―
930 その場合、@code{programmode: false}が仮定されます―を除いて)
932 @code{programmode}が@code{false}の時、
933 @code{solve}などは、中間式ラベル@code{%t1}, @code{t2}など生成し、
934 解をそれらに割り当てます。
935 @c NEED AN EXAMPLE HERE
937 @opencatbox
938 @category{Algebraic equations}
939 @category{Polynomials}
940 @closecatbox
941 @end defvr
943 @c -----------------------------------------------------------------------------
944 @anchor{realonly}
945 @defvr {オプション変数} realonly
946 デフォルト値: @code{false}
948 @code{realonly}が@code{true}の時、
949 @mref{algsys}は、
950 @code{%i}を含まないそれらの解だけを返します。
952 @opencatbox
953 @category{Algebraic equations}
954 @closecatbox
955 @end defvr
957 @c -----------------------------------------------------------------------------
958 @anchor{realroots}
959 @deffn  {関数} realroots (@var{expr}, @var{bound})
960 @deffnx {関数} realroots (@var{eqn}, @var{bound})
961 @deffnx {関数} realroots (@var{expr})
962 @deffnx {関数} realroots (@var{eqn})
964 変数多項式@var{expr}もしくは1変数多項方程式@var{eqn}の実根の有理近似を、
965 @code{bound}の許容誤差の範囲内で計算します。
966 @var{expr}もしくは@var{eqn}の係数はリテラル数でなければなりません。
967 @code{%pi}のようなシンボル定数は却下されます。
969 @code{realroots}は、みつけた根の多様性を
970 グローバル変数@mref{multiplicities}に割り当てます。
972 @code{realroots}は、それぞれの根を囲むためSturm列を構成し、
973 近似を精密化するため二分法を適用します。
974 根を探索する前に、すべての係数は同値の有理数に変換され、
975 正確な有理算術によって計算が実行されます。
976 たとえ係数が浮動小数点でも、
977 (@mref{float}もしくは@mref{numer}フラグによって浮動小数点が強要されない限り)結果は有理数です。
979 @var{bound}が1よりも小さい時、全ての整数根は正確に計算されます。
980 @var{bound}がしてされない時、グローバル変数@mref{rootsepsilon}と等しいと仮定されます。
982 グローバル変数@mref{programmode}が@code{true}の時、
983 @code{realroots}は形式@code{[x = @var{x_1}, x = @var{x_2}, @dots{}]}のリストを
984 返します。
985 @code{programmode}が@code{false}の時、@code{realroots}は
986 中間式ラベル@code{%t1}, @code{%t2}, @dots{}を生成し、
987 結果をそれらに割り当て、ラベルのリストを返します。
989 例:
991 @c ===beg===
992 @c realroots (-1 - x + x^5, 5e-6);
993 @c ev (%[1], float);
994 @c ev (-1 - x + x^5, %);
995 @c ===end===
997 @example
998 (%i1) realroots (-1 - x + x^5, 5e-6);
999                                612003
1000 (%o1)                     [x = ------]
1001                                524288
1002 (%i2) ev (%[1], float);
1003 (%o2)                 x = 1.167303085327148
1004 (%i3) ev (-1 - x + x^5, %);
1005 (%o3)                - 7.396496210176905E-6
1006 @end example
1008 @c ===beg===
1009 @c realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
1010 @c multiplicities;
1011 @c ===end===
1013 @example
1014 (%i1) realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
1015 (%o1)                 [x = 1, x = 2, x = 3]
1016 (%i2) multiplicities;
1017 (%o2)                       [5, 3, 1]
1018 @end example
1020 @opencatbox
1021 @category{Polynomials}
1022 @category{Numerical methods}
1023 @closecatbox
1024 @end deffn
1026 @c -----------------------------------------------------------------------------
1027 @anchor{rhs}
1028 @deffn {関数} rhs (@var{expr})
1030 @var{expr}の演算子が関係演算子@code{< <= = # equal notequal >= >}の1つ、
1031 @c MENTION -> (MARROW) IN THIS LIST IF/WHEN THE PARSER RECOGNIZES IT
1032 割り当て演算子@code{:= ::= : ::}の1つ、または、
1033 @mref{infix}で宣言されたユーザー定義の二項中置演算子の時
1034 式@var{expr}の右辺(すなわち、二番目の項)を返します。
1036 @var{expr}がアトムか、演算子が上で記載したもの以外の何かの時、
1037 @code{rhs}は@var{expr}を返します。
1039 @mref{lhs}も参照してください。
1041 例:
1043 @c ===beg===
1044 @c e: aa + bb = cc;
1045 @c lhs (e);
1046 @c rhs (e);
1047 @c [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb), 
1048 @c        rhs (aa > bb)];
1049 @c [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)), 
1050 @c        rhs (notequal (aa, bb))];
1051 @c e1: '(foo(x) := 2*x);
1052 @c e2: '(bar(y) ::= 3*y);
1053 @c e3: '(x : y);
1054 @c e4: '(x :: y);
1055 @c [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
1056 @c infix ("][");
1057 @c rhs (aa ][ bb);
1058 @c ===end===
1059 @example
1060 (%i1) e: aa + bb = cc;
1061 (%o1)                     bb + aa = cc
1062 (%i2) lhs (e);
1063 (%o2)                        bb + aa
1064 (%i3) rhs (e);
1065 (%o3)                          cc
1066 (%i4) [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb),
1067        rhs (aa > bb)];
1068 (%o4)                   [bb, bb, bb, bb]
1069 @group
1070 (%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)),
1071        rhs (notequal (aa, bb))];
1072 @end group
1073 (%o5)                   [bb, bb, bb, bb]
1074 (%i6) e1: '(foo(x) := 2*x);
1075 (%o6)                     foo(x) := 2 x
1076 (%i7) e2: '(bar(y) ::= 3*y);
1077 (%o7)                    bar(y) ::= 3 y
1078 (%i8) e3: '(x : y);
1079 (%o8)                         x : y
1080 (%i9) e4: '(x :: y);
1081 (%o9)                        x :: y
1082 (%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
1083 (%o10)                  [2 x, 3 y, y, y]
1084 (%i11) infix ("][");
1085 (%o11)                         ][
1086 (%i12) rhs (aa ][ bb);
1087 (%o12)                         bb
1088 @end example
1090 @opencatbox
1091 @category{Expressions}
1092 @closecatbox
1093 @end deffn
1095 @c -----------------------------------------------------------------------------
1096 @anchor{rootsconmode}
1097 @defvr {オプション変数} rootsconmode
1098 デフォルト値: @code{true}
1100 @code{rootsconmode}は、@code{rootscontract}コマンドの振る舞いを決定します。
1101 詳細は@mref{rootscontract}を参照してください。
1103 @opencatbox
1104 @category{Expressions}
1105 @category{Simplification flags and variables}
1106 @closecatbox
1107 @end defvr
1109 @c NEEDS WORK
1111 @c -----------------------------------------------------------------------------
1112 @anchor{rootscontract}
1113 @deffn {関数} rootscontract (@var{expr})
1115 根の積を積の根に変換します。
1116 例えば、
1117 @code{rootscontract (sqrt(x)*y^(3/2))}は@code{sqrt(x*y^3)}をもたらします。
1119 @mref{radexpand}が@code{true}かつ@mref{domain}が@code{real}の時、
1120 @code{rootscontract}は、 converts 
1121 @mref{abs}を@mref{sqrt}に変換します。
1122 例えば、@code{rootscontract (abs(x)*sqrt(y))}は@code{sqrt(x^2*y)}をもたらします。
1124 以下のように@mref{rootscontract}に影響するオプション@code{rootsconmode}があります:
1126 @example
1127 問題               rootsconmodeの値 rootscontractを適用した値
1128       
1129 x^(1/2)*y^(3/2)      false          (x*y^3)^(1/2)
1130 x^(1/2)*y^(1/4)      false          x^(1/2)*y^(1/4)
1131 x^(1/2)*y^(1/4)      true           (x*y^(1/2))^(1/2)
1132 x^(1/2)*y^(1/3)      true           x^(1/2)*y^(1/3)
1133 x^(1/2)*y^(1/4)      all            (x^2*y)^(1/4)
1134 x^(1/2)*y^(1/3)      all            (x^3*y^2)^(1/6)
1135 @end example
1137 @code{rootsconmode}が@code{false}の時、
1138 @code{rootscontract}は、分母が同じ有理数指数に関してだけ短縮します。
1139 @code{rootsconmode: true}の例のキーは、
1140 単に、4は2で割り切れますが、4は2で割り切れないということです。
1141 @code{rootsconmode: all}は、指数の分母の最小公倍数を取ることを伴います。
1143 @code{rootscontract}は、
1144 @mref{logcontract}と似た方法で、@mref{ratsimp}を使います。
1146 例:
1148 @c ===beg===
1149 @c rootsconmode: false$
1150 @c rootscontract (x^(1/2)*y^(3/2));
1151 @c rootscontract (x^(1/2)*y^(1/4));
1152 @c rootsconmode: true$
1153 @c rootscontract (x^(1/2)*y^(1/4));
1154 @c rootscontract (x^(1/2)*y^(1/3));
1155 @c rootsconmode: all$
1156 @c rootscontract (x^(1/2)*y^(1/4));
1157 @c rootscontract (x^(1/2)*y^(1/3));
1158 @c rootsconmode: false$
1159 @c rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
1160 @c                     *sqrt(sqrt(1 + x) - sqrt(x)));
1161 @c rootsconmode: true$
1162 @c rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
1163 @c ===end===
1164 @example
1165 (%i1) rootsconmode: false$
1166 (%i2) rootscontract (x^(1/2)*y^(3/2));
1167                                    3
1168 (%o2)                      sqrt(x y )
1169 (%i3) rootscontract (x^(1/2)*y^(1/4));
1170                                    1/4
1171 (%o3)                     sqrt(x) y
1172 (%i4) rootsconmode: true$
1173 (%i5) rootscontract (x^(1/2)*y^(1/4));
1174 (%o5)                    sqrt(x sqrt(y))
1175 (%i6) rootscontract (x^(1/2)*y^(1/3));
1176                                    1/3
1177 (%o6)                     sqrt(x) y
1178 (%i7) rootsconmode: all$
1179 (%i8) rootscontract (x^(1/2)*y^(1/4));
1180                               2   1/4
1181 (%o8)                       (x  y)
1182 (%i9) rootscontract (x^(1/2)*y^(1/3));
1183                              3  2 1/6
1184 (%o9)                      (x  y )
1185 (%i10) rootsconmode: false$
1186 (%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
1187                     *sqrt(sqrt(1 + x) - sqrt(x)));
1188 (%o11)                          1
1189 (%i12) rootsconmode: true$
1190 (%i13) rootscontract (sqrt(5+sqrt(5)) - 5^(1/4)*sqrt(1+sqrt(5)));
1191 (%o13)                          0
1192 @end example
1194 @opencatbox
1195 @category{Simplification functions}
1196 @closecatbox
1197 @end deffn
1199 @c -----------------------------------------------------------------------------
1200 @anchor{rootsepsilon}
1201 @defvr {オプション変数} rootsepsilon
1202 デフォルト値: 1.0e-7
1204 @code{rootsepsilon}は、
1205 @mref{realroots}関数が見つけた根に関する信頼区間を確立する許容誤差です。
1206 @c IS IT GUARANTEED THAT |ACTUAL - ESTIMATE| < rootepsilon OR IS IT SOME OTHER NOTION ??
1207 @c NEED EXAMPLE HERE
1209 @opencatbox
1210 @category{Polynomials}
1211 @category{Numerical methods}
1212 @closecatbox
1213 @end defvr
1215 @c NEEDS WORK
1217 @c -----------------------------------------------------------------------------
1218 @anchor{solve}
1219 @deffn  {関数} solve (@var{expr}, @var{x})
1220 @deffnx {関数} solve (@var{expr})
1221 @deffnx {関数} solve ([@var{eqn_1}, @dots{}, @var{eqn_n}], [@var{x_1}, @dots{}, @var{x_n}])
1223 代数等式@var{expr}を@var{x}について解き、@var{x}の解等式のリストを返します。
1224 もし@var{expr}の等式でなければ、等式@code{@var{expr} = 0}が仮定されます。
1225 @var{x}は関数(例えば@code{f(x)})でも他のアトムでない式でも問題ありません。
1226 (sumやproductは除きます。)@var{expr}が変数を1つだけ含む場合、@var{x}は省略できます。
1227 @var{expr}は有理式でも、三角関数や指数関数を含むことができます。
1229 以下の方法が使われます:
1231 @var{E}を式、@var{X}を変数とします。
1232 もし@var{E}が@var{X}に関して線形なら、@var{X}について自明に解かれます。
1233 そうでなければ、もし@var{E}が@code{A*X^N + B}の形なら、
1234 結果は、@code{(-B/A)^(1/N)}かける1の@code{N}乗根です。
1236 もし@var{E}が@var{X}について線形でなければ、
1237 @var{E}の中の@var{X}の指数のgcd(以下@var{N}とする)が指数に割られ、
1238 根に@var{N}がかけられます。
1239 その後、結果に対して@code{solve}が再びコールされます。
1240 もし@var{E}が因数分解されるなら、@code{solve}は因子のそれぞれに対してコールされます。
1241 最後に、@code{solve}は2次方程式、3次方程式、4次方程式の解の公式を必要に応じて使います。
1243 @var{E}が解くべき変数のある関数(以下@code{F(X)})の多項式の場合,
1244 最初に@code{F(X)}について解かれ(結果を@var{C}と呼ぶ)、
1245 関数@var{F}の逆関数がわかっている場合、等式@code{F(X)=C}が@var{X}について解かれます。
1247 @mref{breakup}が@code{false}なら、
1248 @code{solve}は3次もしくは4次方程式の解を、
1249 デフォルトであるいくつかの共通部分式から成る表現ではなく、
1250 単一の式で表現されます。
1252 @code{multiplicities}は、@code{solve}や@mref{realroots}, @mref{allroots}が返した
1253 多数の独立の解のリストに設定されます。
1254 @code{slove}に影響するスイッチについては、@code{apropos (solve)}を試してください。
1255 もしスイッチの目的がはっきりしないなら、
1256 個々のスイッチ名について@mref{describe}を使うことができます。
1258 @code{solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])}
1259 は、@mref{linsolve}もしくは@mref{algsys}をコールすることで,
1260 同時(線形もしくは非線形)代数方程式系を解き、変数の解リストのリストを返します。
1261 @code{linsolve}の場合、このリストは解の単一リストを含みます。
1262 引数に2つのリストをとります。
1263 最初のリストは解くべき等式を示し、2番目のリストは決定すべき未知数のリストです。
1264 もし等式の変数の総数が等式の数に等しいなら、2番目の引数リストは省略できます。
1266 @c I think this is not true --hgeyer
1268 @c if no unique
1269 @c solution exists, then @code{singular} will be displayed.
1271 @mref{programmode}が@code{false}の時、
1272 @code{solve}は中間式(@code{%t})ラベルを持つ解を表示し、ラベルのリストを返します。
1274 @mref{globalsolve}が@code{true}、かつ、問題が2つ以上の線形方程式を解くことである場合、
1275 それぞれの解くべき変数は方程式の解の値にバインドされます。
1277 例:
1279 @c FOLLOWING ADAPTED FROM example (solve)
1280 @c ===beg===
1281 @c solve (asin (cos (3*x))*(f(x) - 1), x);
1282 @c ev (solve (5^f(x) = 125, f(x)), solveradcan);
1283 @c [4*x^2 - y^2 = 12, x*y - x = 2];
1284 @c solve (%, [x, y]);
1285 @c solve (1 + a*x + x^3, x);
1286 @c solve (x^3 - 1);
1287 @c solve (x^6 - 1);
1288 @c ev (x^6 - 1, %[1]);
1289 @c expand (%);
1290 @c x^2 - 1;
1291 @c solve (%, x);
1292 @c ev (%th(2), %[1]);
1293 @c ===end===
1294 @example
1295 (%i1) solve (asin (cos (3*x))*(f(x) - 1), x);
1297 solve: using arc-trig functions to get a solution.
1298 Some solutions will be lost.
1299                             %pi
1300 (%o1)                  [x = ---, f(x) = 1]
1301                              6
1302 (%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
1303                                 log(125)
1304 (%o2)                   [f(x) = --------]
1305                                  log(5)
1306 (%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
1307                       2    2
1308 (%o3)             [4 x  - y  = 12, x y - x = 2]
1310 (%i4) solve (%, [x, y]);
1311 (%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
1312  - .1331240357358706, y = .07678378523787788
1313  - 3.608003221870287 %i], [x = - .5202594388652008 %i
1314  - .1331240357358706, y = 3.608003221870287 %i
1315  + .07678378523787788], [x = - 1.733751846381093, 
1316 y = - .1535675710019696]]
1318 (%i5) solve (1 + a*x + x^3, x);
1320                                        3
1321               sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
1322 (%o5) [x = (- ---------- - -) (--------------- - -)
1323                   2        2      6 sqrt(3)      2
1325         sqrt(3) %i   1
1326        (---------- - -) a
1327             2        2
1328  - --------------------------, x = 
1329               3
1330       sqrt(4 a  + 27)   1 1/3
1331    3 (--------------- - -)
1332          6 sqrt(3)      2
1334                           3
1335  sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
1336 (---------- - -) (--------------- - -)
1337      2        2      6 sqrt(3)      2
1339          sqrt(3) %i   1
1340       (- ---------- - -) a
1341              2        2
1342  - --------------------------, x = 
1343               3
1344       sqrt(4 a  + 27)   1 1/3
1345    3 (--------------- - -)
1346          6 sqrt(3)      2
1348          3
1349  sqrt(4 a  + 27)   1 1/3               a
1350 (--------------- - -)    - --------------------------]
1351     6 sqrt(3)      2                  3
1352                               sqrt(4 a  + 27)   1 1/3
1353                            3 (--------------- - -)
1354                                  6 sqrt(3)      2
1355 (%i6) solve (x^3 - 1);
1356              sqrt(3) %i - 1        sqrt(3) %i + 1
1357 (%o6)   [x = --------------, x = - --------------, x = 1]
1358                    2                     2
1359 (%i7) solve (x^6 - 1);
1360            sqrt(3) %i + 1      sqrt(3) %i - 1
1361 (%o7) [x = --------------, x = --------------, x = - 1, 
1362                  2                   2
1364                      sqrt(3) %i + 1        sqrt(3) %i - 1
1365                x = - --------------, x = - --------------, x = 1]
1366                            2                     2
1367 (%i8) ev (x^6 - 1, %[1]);
1368 @group
1369                                       6
1370                       (sqrt(3) %i + 1)
1371 (%o8)                 ----------------- - 1
1372                              64
1373 @end group
1374 (%i9) expand (%);
1375 (%o9)                           0
1376 (%i10) x^2 - 1;
1377                               2
1378 (%o10)                       x  - 1
1379 (%i11) solve (%, x);
1380 (%o11)                  [x = - 1, x = 1]
1381 (%i12) ev (%th(2), %[1]);
1382 (%o12)                          0
1383 @end example
1385 シンボル@code{%r}は、解の中で任意定数を示すのに使われます。
1387 @example
1388 (%i1) solve([x+y=1,2*x+2*y=2],[x,y]);
1390 solve: dependent equations eliminated: (2)
1391 (%o1)                      [[x = 1 - %r1, y = %r1]]
1392 @end example
1394 更に知るには、@mref{algsys}と @mref{%rnum_list}.
1396 @opencatbox
1397 @category{Algebraic equations}
1398 @closecatbox
1399 @end deffn
1401 @c -----------------------------------------------------------------------------
1402 @defvr {オプション変数} solvedecomposes
1403 デフォルト値: @code{true}
1405 @code{solvedecomposes}が@code{true}の時、
1406 もし多項式を解くように頼まれたなら、
1407 @code{solve}は、@mref{polydecomp}をコールします。
1408 @c OTHERWISE WHAT HAPPENS -- CAN'T SOLVE POLYNOMIALS, OR SOME OTHER METHOD IS USED ??
1410 @opencatbox
1411 @category{Algebraic equations}
1412 @closecatbox
1413 @end defvr
1415 @c -----------------------------------------------------------------------------
1416 @anchor{solveexplicit}
1417 @defvr {オプション変数} solveexplicit
1418 デフォルト値: @code{false}
1420 @code{solveexplicit}が@code{true}の時、
1421 @mref{solve}が
1422 陰解―すなわち、@code{F}がある関数である形式@code{F(x) = 0}の解―
1423 を返すことを妨げます。
1424 @c NEED AN EXAMPLE HERE
1426 @opencatbox
1427 @category{Algebraic equations}
1428 @closecatbox
1429 @end defvr
1431 @c -----------------------------------------------------------------------------
1432 @anchor{solvefactors}
1433 @defvr {オプション変数} solvefactors
1434 デフォルト値: @code{true}
1436 @c WHAT IS THIS ABOUT EXACTLY ??
1437 @code{solvefactors}が@code{false}の時、
1438 @mref{solve}は、式を因数分解しようとしません。
1439 @code{false}設定は、
1440 因数分解が不要ないくつかの場合に望まれるかもしれません。
1441 @c NEED AN EXAMPLE HERE
1443 @opencatbox
1444 @category{Algebraic equations}
1445 @closecatbox
1446 @end defvr
1448 @c -----------------------------------------------------------------------------
1449 @anchor{solvenullwarn}
1450 @defvr {オプション変数} solvenullwarn
1451 デフォルト値: @code{true}
1453 @code{solvenullwarn}が@code{true}の時、
1454 もし空の等式リストか空の変数リストを引数にコールされたら
1455 @mref{solve}は、警告メッセージを表示します。
1456 例えば、@code{solve ([], [])}は、2つの警告メッセージを表示し、
1457 @code{[]}を返します。
1459 @opencatbox
1460 @category{Algebraic equations}
1461 @closecatbox
1462 @end defvr
1464 @c -----------------------------------------------------------------------------
1465 @anchor{solveradcan}
1466 @defvr {オプション変数} solveradcan
1467 デフォルト値: @code{false}
1469 @code{solveradcan}が@code{true}の時、
1470 @mref{solve}は@code{radcan}をコールし、@code{solve}は遅くなりますが、
1471 指数と対数を含むある問題が解けるようになります。
1472 @c NEED AN EXAMPLE HERE
1474 @opencatbox
1475 @category{Algebraic equations}
1476 @closecatbox
1477 @end defvr
1479 @c -----------------------------------------------------------------------------
1480 @anchor{solvetrigwarn}
1481 @defvr {オプション変数} solvetrigwarn
1482 デフォルト値: @code{true}
1484 @c MAYBE THIS CAN BE CLARIFIED
1485 @code{solvetrigwarn}が@code{true}の時、
1486 @mref{solve}は、
1487 方程式を解くために逆三角関数を使い、ゆえに解を失っていることを示す
1488 メッセージを表示するかもしれません。
1489 @c NEED AN EXAMPLE HERE
1491 @opencatbox
1492 @category{Algebraic equations}
1493 @closecatbox
1494 @end defvr