Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / ja / to_poly_solve.texi
blob4f8700dab18830ba985997010adcc43bf79dd94d
1 @menu
2 * Functions and Variables for to_poly_solve::
3 @end menu
5 @node Functions and Variables for to_poly_solve,  , to_poly_solve, to_poly_solve
6 @section Functions and Variables for to_poly_solve
8 パッケージ @code{to_poly}と @code{to_poly_solve}は実験的なものです;
9 これらのパッケージの関数の仕様は変更の可能性があり、
10 これらのパッケージの関数のいくつかは他のMaxima関数にマージされるかもしれません。
12 Barton Willis (University of Nebraska at Kearneyの数学科の教授)が
13 @code{to_poly}と @code{to_poly_solve}パッケージと
14 これらのパッケージのための英語のユーザードキュメンテーションを書きました。
16 @deffn {Operator} %and
17 @ifinfo
18 @fnindex Logical conjunction
19 @end ifinfo
21 演算子 @code{%and}は整理化(simplifying)非短絡論理積です。
22 Maximaは
23 @code{%and}式をtrueかfalseか論理的に同値ですが整理された式に整理します。
24 演算子 @code{%and}は結合的で可換でべき等的です。
25 そして、
26 @code{%and}が名詞形を返す時、
27 @code{%and}の引数は非冗長なソートされたリストを形成します;
28 例えば、
30 @example
31 (%i1) a %and (a %and b);
32 (%o1)                       a %and b
33 @end example
35 もし積の引数の1つが @i{明示的に}もう一つの引数の否定なら、
36 @code{%and}はfalseを返します:
38 @example
39 (%i2) a %and (not a);
40 (%o2)                         false
41 @end example
43 積のいずれかのメンバーがfalseなら、
44 たとえ他のメンバーが明白に非ブーリアンでも積はfalseに整理されます;
45 例えば、
47 @example
48 (%i3) 42 %and false;
49 (%o3)                         false
50 @end example
52 inequation(すなわち、不等もしくは等式)の@code{%and}式の任意の引数は
53 Fourier消去パッケージを使って整理されます。
54 Fourier消去整理器は
55 すべてでないですがいくつかの非線形inequationを線形inequationに変換する
56 プリプロセッサを持ちます;
57 例えば、Fourier消去コードは
58 @code{abs(x) + 1 > 0}を trueに整理します。だから、
60 @example
61 (%i4) (x < 1) %and (abs(x) + 1 > 0);
62 (%o4)                         x < 1
63 @end example
65 @b{注釈}  
66 @itemize @bullet
67 @item
68 オプション変数 @code{prederror}は
69 @code{%and}式の整理を変え@i{ません}。
71 @item
72 演算子の優先順位エラーを避けるため、
73 演算子 @code{%and, %or}と @code{not}を含む複合式は完全に括弧でくくらなくてはいけません。
75 @item
76 Maxima演算子 @code{and}と @code{or}はどちらも短絡的です。
77 なので @code{and}は結合的でなかったり可換ではなかったりします。
79 @end itemize
81 @b{制限} 積 @code{%and}はinequationを
82 @i{大域的にではなく局所的に}整理します。
83 これは以下のような積はfalseに整理@i{されない}ことを意味します。
85 @example
86 (%i5) (x < 1) %and (x > 1);
87 (%o5)                 (x > 1) %and (x < 1)
88 @end example
90 また、 Fourier消去コードは事実データベースを@i{無視します}。
92 @example
93 (%i6) assume(x > 5);
94 (%o6)                        [x > 5]
95 (%i7) (x > 1) %and (x > 2);
96 (%o7)                 (x > 1) %and (x > 2)
97 @end example
99 最終的に、同値の線形inequationに容易に変換されない非線形inequationは整理されません。
101 @code{%or}上に @code{%and}を分配するためのサポートはありません;
102 @code{%and}上に論理否定を分配するサポートもありません。
104 @b{利用のためには} @file{load(to_poly_solve)}
106 @b{関連関数} @code{%or, %if, and, or, not}
108 @b{状況} 演算子 @code{%and}は実験的です;
109 この関数の仕様は変更の可能性があり、
110 その機能は他のMaxima関数にマージされるかもしれません。
112 @end deffn
114 @deffn {演算子} %if (@var{bool}, @var{a}, @var{b})
115 @ifinfo
116 @fnindex conditional evaluation
117 @end ifinfo
119 演算子 @code{%if}は整理化条件文です。
120 @i{条件} @var{bool}はブーリアン値でなければいけません。
121 条件がtrueの時、二番目の引数を返します;
122 条件がfalseの時、三番目の引数を返します;
123 その他の場合、名詞形を返します。
125 Maxima inequations (不等式か等式)はブーリアン値では@i{ありません};
126 例えば、 Maximaは @math{5 < 6}をtrueに整理 @i{しません}し、
127 @math{5 = 6}をfalseに整理しません;
128 しかしながら、 to false; however, in
129 the context of a conditional to an 
130 @code{%if}文への条件の文脈では、
131 Maximaは @i{自動的に}inequationの真値を決定しようとします。
132 例:
134 @example
135 (%i1) f : %if(x # 1, 2, 8);
136 (%o1)                 %if(x - 1 # 0, 2, 8)
137 (%i2) [subst(x = -1,f), subst(x=1,f)];
138 (%o2)                        [2, 8]
139 @end example
141 もし条件がinequationを含むなら、
142 MaximaはFourier消去パッケージを使ってそれを整理します。
144 @b{注釈} 
146 @itemize @bullet
147 @item
148 もし条件が明白に非ブーリアンなら、Maximaは名詞形を返します:
149 @end itemize
151 @example
152 (%i3) %if(42,1,2);
153 (%o3)                     %if(42, 1, 2)
154 @end example
156 @itemize @bullet
157 @item
158 Maxima演算子 @code{if}はn項演算子ですが、演算子 @code{%if}は n項演算子@i{ではないです}。
159 @end itemize
161 @b{制限} Fourier消去コードは
162 同値の線形inequationに容易に変換可能な非線形inequationだけを
163 整理します。
165 @b{利用には:} @file{load(to_poly_solve)}
167 @b{状況:} 演算子 @code{%if}は実験的です;
168 仕様は変更の可能性があり、
169 機能は他のMaxima関数にマージされるかもしれません。
171 @end deffn
172   
173 @deffn {演算子} %or
174 @ifinfo
175 @fnindex Logical disjunction
176 @end ifinfo
178 演算子 @code{%or}は整理化非短絡論理和です。
179 Maximaは
180 @code{%or}式をtrueかfalseか論理的に同値ですが整理された式に整理します。
181 演算子 @code{%or}は結合的で可換でべき等です。
182 そして
183 @code{%or}が名詞形を返す時、
184 @code{%or}の引数は非冗長なソートされたリストを形成します;
185 例えば、
187 @example
188 (%i1) a %or (a %or b);
189 (%o1)                        a %or b
190 @end example
192 もし和のメンバーの1つが@i{明示的に}他のメンバーの否定なら、
193 @code{%or}はtrueを返します:
195 @example
196 (%i2) a %or (not a);
197 (%o2)                         true
198 @end example
200 もし和の任意のメンバーがtrueなら、
201 たとえ和の他のメンバーが明白に非ブーリアンでも和はtrueに整理されます。
202 例えば
204 @example
205 (%i3) 42 %or true;
206 (%o3)                         true
207 @end example
209 inequation(不等式か等式)である @code{%or}式の任意の引数は
210 Fourier消去パッケージを使って整理されます。
211 Fourier消去コードは @code{abs(x) + 1 > 0}をtrueに整理します。
212 なので、
214 @example
215 (%i4) (x < 1) %or (abs(x) + 1 > 0);
216 (%o4)                         true
217 @end example
219 @b{注釈}  
220 @itemize @bullet
221 @item
222 オプション変数 @code{prederror}は
223 @code{%or}式の整理を変更@i{しません}。
225 @item
226 演算子 @code{%and, %or}, @code{not}を含む複合式は括弧でくくらなければいけません;
227 これらの演算子の結合力は期待と一致しないことがあります。
229 @item
230 Maxima演算子 @code{and}と @code{or}はどちらも短絡的です。
231 なので @code{or}は結合的でないか可換でないかです。
233 @end itemize
235 @b{制限} 和 @code{%or}はinequationを
236 @i{大域的にではなく、局所的に}整理します。
237 これは以下のような和はtrueに整理@i{されない}ことを意味します。
239 @c TODO: IN MAXIMA 5.24POST THIS SIMPLIFIES TO TRUE.
241 @example
242 (%i1) (x < 1) %or (x >= 1);
243 (%o1) (x > 1) %or (x >= 1)
244 @end example
246 更に Fourier消去コードは事実データベースを無視します:
248 @example
249 (%i2) assume(x > 5);
250 (%o2)                        [x > 5]
251 (%i3) (x > 1) %and (x > 2);
252 (%o3)                 (x > 1) %and (x > 2)
253 @end example
255 最終的に、同値の線形inequationに容易に変換されない非線形inequationは整理されません。
257 両方ともfalseである項を探すアルゴリズムは弱いものです;
258 また、@code{%and}上に @code{%or}を分配するためのサポートはありません;
259 @code{%or}上に論理否定を分配するサポートもありません。
261 @b{利用のためには} @file{load(to_poly_solve)}
263 @b{関連関数} @code{%or, %if, and, or, not}
265 @b{状況} 演算子 @code{%or}は実験的です;
266 仕様は変更の可能性があり、
267 機能は他のMaxima関数にマージされるかもしれません。
269 @end deffn
271 @deffn {関数} complex_number_p (@var{x})
273 もし引数が
274  @code{a + %i * b}, @code{a}, @code{%i b}, @code{%i}のいずれかなら、
275 述語論理 @code{complex_number_p}はtrueを返します。
276 ここで @code{a}と @code{b}は有理数か(多倍長浮動小数点数を含む)浮動小数点数です;
277 他のすべての入力に対して、
278 @code{complex_number_p}はfalseを返します; 例えば
280 @example
281 (%i1) map('complex_number_p,[2/3, 2 + 1.5 * %i, %i]);
282 (%o1)                  [true, true, true]
283 (%i2) complex_number_p((2+%i)/(5-%i));
284 (%o2)                         false
285 (%i3) complex_number_p(cos(5 - 2 * %i));
286 (%o3)                         false
287 @end example
289 @b{関連関数} @code{isreal_p}
291 @b{利用するには} @file{load(to_poly_solve)}
293 @b{状況} 関数 @code{complex_number_p}は実験的です;
294 仕様は変更の可能性があり、
295 機能は他のMaxima関数にマージされるかもしれません。
297 @end deffn
299 @deffn {関数} compose_functions (@var{l})
301 関数コール @code{compose_functions(l)}は
302 リスト @var{l}の中の関数の合成をラムダ形を返します。
303 関数は@i{右}から @i{左}へ適用されます; 例えば
305 @example
306 (%i1) compose_functions([cos, exp]);
307                                         %g151
308 (%o1)             lambda([%g151], cos(%e     ))
309 (%i2) %(x);
310                                   x
311 (%o2)                       cos(%e )
312 @end example
314 関数リストが空のとき、恒等関数を返します:
316 @example
317 (%i3) compose_functions([]);
318 (%o3)                lambda([%g152], %g152)
319 (%i4)  %(x);
320 (%o4)                           x
321 @end example
323 @b{注釈} 
324 @itemize @bullet
325 @item
326 Maximaがリストメンバーがシンボルやラムダ形でないか決める時、
327 (@code{compose_functions}@i{ではなく}) @code{funmake}がエラーをシグナルします:
328 @end itemize
330 @example
331 (%i5) compose_functions([a < b]);
333 funmake: first argument must be a symbol, subscripted symbol,
334 string, or lambda expression; found: a < b
335 #0: compose_functions(l=[a < b])(to_poly_solve.mac line 40)
336  -- an error. To debug this try: debugmode(true);
337 @end example
339 @itemize @bullet
340 @item
341 名前の衝突を避けるために、独立変数は
342 関数 @code{new_variable}が決めます。
344 @end itemize
346 @example
347 (%i6) compose_functions([%g0]);
348 (%o6)              lambda([%g154], %g0(%g154))
349 (%i7) compose_functions([%g0]);
350 (%o7)              lambda([%g155], %g0(%g155))
351 @end example
353 @itemize
354 @item
355  独立変数が違っても、
356 Maximaはこれらのラムダ形が意味的に等しいことを演繹できます:
357 @end itemize
359 @example
360 (%i8) is(equal(%o6,%o7));
361 (%o8)                         true
362 @end example
364 @b{利用するには} @file{load(to_poly_solve)}
366 @b{状況} 関数 @code{compose_functions}は実験的です;
367 仕様は変更の可能性があり、
368 機能は他のMaxima関数にマージされるかもしれません。
369 @end deffn
371 @deffn {関数} dfloat (@var{x})
373 関数 @code{dfloat}は
374 @code{float}に似ていますが、
375 @code{float}が IEEE 倍精度浮動小数点数に評価するのを失敗した時、
376 関数 @code{dfloat}は
377 @code{rectform}を適用します; 例えば
379 @example
380 (%i1) float(4.5^(1 + %i));
381                                %i + 1
382 (%o1)                       4.5
383 (%i2) dfloat(4.5^(1 + %i));
384 (%o2)        4.48998802962884 %i + .3000124893895671
385 @end example
387 @b{注釈} 
389 @itemize @bullet
390 @item
391 式の直交形は
392 数値評価には不完全で合わないかもしれません--例えば、
393 直交形は不必要に浮動小数点数の差(桁落ち)を含むかもしれません。
395 @item
396 識別子 @code{float}は(デフォルト値がfalseの)オプション変数であり
397 かつ関数名です。
399 @end itemize
401 @b{関連関数} @code{float, bfloat}
403 @b{利用するには} @file{load(to_poly_solve)}
405 @b{状況} 関数 @code{dfloat}は実験的です;
406 仕様は変更の可能性があり、
407 機能は他のMaxima関数にマージされるかもしれません。
409 @end deffn
411 @deffn {関数} elim (@var{l}, @var{x})
413 関数 @code{elim}は
414 集合もしくはリスト @code{l}内の等式から
415 集合もしくはリスト@code{x}内の変数を消去します。
416 @code{x}のメンバーそれぞれはシンボルでなければいけません;
417  must be a symbol; the members of 
418 @code{l}のメンバーは等式か零に等しいと仮定される式であり得ます。
420 関数 @code{elim}は2つのリストのリストを返します;
421 一番目は変数が消去された式のリストです;
422 二番目はピボットのリストです;
423 二番目のリストは
424 @code{elim}が変数を消去するのに使った式のリストです。
426 以下は線形方程式を消去する例です:
428 @example
429 (%i1) elim(set(x + y + z = 1, x - y  - z = 8, x - z = 1), 
430            set(x,y));
431 (%o1)            [[2 z - 7], [y + 7, z - x + 1]]
432 @end example
434 @code{x}と @code{y}の消去は一つの等式 @code{2 z - 7 = 0}をもたらします;
435 等式 @code{y + 7 = 0}と @code{z - z + 1 = 1}がピボットとして使われました。
436 これらの等式から3つの変数すべての消去は、線形系を三角化します:
438 @example
439 (%i2) elim(set(x + y + z = 1, x - y  - z = 8, x - z = 1),
440            set(x,y,z));
441 (%o2)           [[], [2 z - 7, y + 7, z - x + 1]]
442 @end example
444 もちろん、等式は線形である必要はありません:
446 @example
447 (%i3) elim(set(x^2 - 2 * y^3 = 1,  x - y = 5), [x,y]);
448                      3    2
449 (%o3)       [[], [2 y  - y  - 10 y - 24, y - x + 5]]
450 @end example
452 ユーザーは変数が消去される順序を制御しません。
453 確かに、アルゴリズムは
454 最良のピボットと最良の消去順序を選ぼうとする発見的方法を使います。
456 @b{注釈} 
458 @itemize @bullet
459 @item
460 関連関数 @code{eliminate}と違い、
461 等式の数が変数の数と等しい時、関数 @code{elim}は
462 @code{solve}を呼び出し@i{ません}。
464 @item
465 関数 @code{elim}は終結式を適用することで機能します;
466 オプション変数 @code{resultant}は
467 Maximaがどのアルゴリズムを使うか決めます。
468 @code{sqfr}を使って、 Maximaは
469 それぞれの終結式を因数分解し、
470 多重零点を抑制します。
472 @item
473 @code{elim}は多項式方程式の非線形一式を三角化します;
474 三角化された集合の解集合は
475 三角化されていない集合の解集合よりも大きい@i{かもしれません}。
476 例えば、、
477 三角化された方程式は@i{見せかけの}解を持ち得ます。
478 @end itemize
480 @b{関連関数} @i{elim_allbut, eliminate_using, eliminate}
482 @b{オプション変数} @i{resultant}
484 @b{利用するには} @file{load(to_poly)}
486 @b{状況} 関数 @code{elim}は実験的です;
487 仕様は変更の可能性があり、
488 機能は他のMaxima関数にマージされるかもしれません。
490 @end deffn
492 @deffn {関数} elim_allbut (@var{l}, @var{x})
494 この関数は
495  @code{elim}に似ています。
496 等式のリスト @code{l}内の
497 リスト @code{x}内の変数を @i{除いて}
498 変数すべてを消去することを除いて
500 @example
501 (%i1) elim_allbut([x+y = 1, x - 5*y = 1],[]);
502 (%o1)                 [[], [y, y + x - 1]]
503 (%i2) elim_allbut([x+y = 1, x - 5*y = 1],[x]);
504 (%o2)                [[x - 1], [y + x - 1]]
505 @end example
507 @b{利用するには} @file{load(to_poly)}
509 @b{オプション変数} @i{resultant}
511 @b{関連関数} @i{elim, eliminate_using, eliminate}
513 @b{状況} 関数 @code{elim_allbut}は実験的です;
514 仕様は変更の可能性があり、
515 機能は他のMaxima関数にマージされるかもしれません。
517 @end deffn
519 @deffn {関数} eliminate_using (@var{l}, @var{e}, @var{x})
521 Using @code{e} as the pivot, eliminate the symbol @code{x} from the
522 list or set of equations in @code{l}.  The function @code{eliminate_using}
523 returns a set.
525 @example
526 (%i1) eq : [x^2 - y^2 - z^3 , x*y - z^2 - 5, x - y + z];
527                3    2    2     2
528 (%o1)      [- z  - y  + x , - z  + x y - 5, z - y + x]
529 (%i2) eliminate_using(eq,first(eq),z);
530         3              2      2      3    2
531 (%o2) @{y  + (1 - 3 x) y  + 3 x  y - x  - x , 
532                         4    3  3       2  2             4
533                        y  - x  y  + 13 x  y  - 75 x y + x  + 125@}
534 (%i3) eliminate_using(eq,second(eq),z);
535         2            2       4    3  3       2  2             4
536 (%o3) @{y  - 3 x y + x  + 5, y  - x  y  + 13 x  y  - 75 x y + x
537                                                            + 125@}
538 (%i4) eliminate_using(eq, third(eq),z);
539         2            2       3              2      2      3    2
540 (%o4) @{y  - 3 x y + x  + 5, y  + (1 - 3 x) y  + 3 x  y - x  - x @}
541 @end example
543 @b{オプション変数} @i{resultant}
545 @b{関連関数} @i{elim, eliminate, elim_allbut}
547 @b{利用するには} @file{load(to_poly)}
549 @b{状況} 関数 @code{elimimate_using}は実験的です;
550 仕様は変更の可能性があり、
551 機能は他のMaxima関数にマージされるかもしれません。
553 @end deffn
555 @deffn {関数} fourier_elim ([@var{eq1}, @var{eq2}, @dots{}], [@var{var1}, @var{var}, @dots{}])
557 Fourier消去は
558 Gauss消去の線形inequation(等式か不等式)に関する類似物です。
559 関数コール @code{fourier_elim([eq1, eq2, ...], [var1, var2, ...]}は
560 線形inequationsのリスト @code{[eq1, eq2, ...]}上の
561 変数 @code{[var1, var2, ...]}に関するFourier消去です;
562 例えば
564 @example
565 (%i1) fourier_elim([y-x < 5, x - y < 7, 10 < y],[x,y]);
566 (%o1)            [y - 5 < x, x < y + 7, 10 < y]
567 (%i2) fourier_elim([y-x < 5, x - y < 7, 10 < y],[y,x]);
568 (%o2)        [max(10, x - 7) < y, y < x + 5, 5 < x]
569 @end example
571 Eliminating first with respect to
572 最初に @math{x}を次に @math{y}を消去することは
573 @math{y}に依存する、@math{x}に関する下限と上限、
574 そして@math{y}に関する下限と上限(それらは数です)ををもたらします。
575 他の順序での消去は
576 @math{x}依存の@math{y}の下限と上限、
577 そして@math{x}の数値的下限と上限を与えます。
579 必要な時、 @code{fourier_elim}はinequationのリストの@emph{論理和}を返します:
581 @example
582 (%i3) fourier_elim([x # 6],[x]);
583 (%o3)                  [x < 6] or [6 < x]
584 @end example
586 解集合が空の時、 @code{fourier_elim}は @code{emptyset}を返し、
587 解集合が実数すべての時、 @code{fourier_elim}は @code{universalset}を返します;
588 例えば
590 @example
591 (%i4) fourier_elim([x < 1, x > 1],[x]);
592 (%o4)                       emptyset
593 (%i5) fourier_elim([minf < x, x < inf],[x]);
594 (%o5)                     universalset
595 @end example
597 非線形inequationに対して、 @code{fourier_elim}は
598 (幾分) 整理されたinequationsのリストを返します:
600 @example
601 (%i6) fourier_elim([x^3 - 1 > 0],[x]);
602 @group
603                2                             2
604 (%o6) [1 < x, x  + x + 1 > 0] or [x < 1, - (x  + x + 1) > 0]
605 @end group
606 (%i7) fourier_elim([cos(x) < 1/2],[x]);
607 (%o7)                  [1 - 2 cos(x) > 0]
608 @end example
610 inequationのリストの代わりに、
611 @code{fourier_elim}の一番目の引数は
612 論理和か論理積であるかもしれません:
614 @example
615 (%i8) fourier_elim((x + y < 5) and (x - y >8),[x,y]);
616                                               3
617 (%o8)            [y + 8 < x, x < 5 - y, y < - -]
618                                               2
619 (%i9) fourier_elim(((x + y < 5) and x < 1) or  (x - y >8),[x,y]);
620 (%o9)          [y + 8 < x] or [x < min(1, 5 - y)]
621 @end example
623 関数 @code{fourier_elim}は
624 inequation演算子 @code{<, <=, >, >=, #}, @code{=}をサポートします。
626 Fourier消去コードは
627 絶対値や最小、最大関数を含むいくつかの非線形inequationを
628 線形inequationに変換する
629 プリプロセッサを持ちます.
630 加えて、プリプロセッサは
631 線形項の積か商であるいくつかの式を扱います:
633 @example
634 (%i10) fourier_elim([max(x,y) > 6, x # 8, abs(y-1) > 12],[x,y]);
635 (%o10) [6 < x, x < 8, y < - 11] or [8 < x, y < - 11]
636  or [x < 8, 13 < y] or [x = y, 13 < y] or [8 < x, x < y, 13 < y]
637  or [y < x, 13 < y]
638 (%i11) fourier_elim([(x+6)/(x-9) <= 6],[x]);
639 (%o11)           [x = 12] or [12 < x] or [x < 9]
640 (%i12) fourier_elim([x^2 - 1 # 0],[x]);
641 (%o12)      [- 1 < x, x < 1] or [1 < x] or [x < - 1]
642 @end example
644 @b{利用するには} @file{load(fourier_elim)}
646 @end deffn
648 @deffn {関数} isreal_p (@var{e})
650 述語論理 @code{isreal_p}は、
651 Maximaが
652 @code{e}が実数線@i{全体}上で実数値であることを
653 決められる時
654 trueを返します;
655 Maximaが
656 実数線の空でないある部分集合上で@code{e}が実数値で @i{ない}ことを
657 決められる時
658 falseを返します;
659 他の場合、名詞形を返します。
661 @example
662 (%i1) map('isreal_p, [-1, 0, %i, %pi]);
663 (%o1)               [true, true, false, true]
664 @end example
666 Maxima変数は実と仮定されます; たとえば
668 @example
669 (%i2) isreal_p(x);
670 (%o2)                         true
671 @end example
673 関数 @code{isreal_p}は事実データベースを検査します:
675 @example
676 (%i3) declare(z,complex)$
678 (%i4) isreal_p(z);
679 (%o4)                      isreal_p(z)
680 @end example
682 @b{制限}
683 頻繁すぎるほど @code{isreal_p}は
684 falseを返すことができる時に名詞形を返します;
685 対数函数は実数線全体で実数値ではありません。
686 だから @code{isreal_p(log(x))}はfalseを返すべきです;
687 しかしながら
689 @example
690 (%i5) isreal_p(log(x));
691 (%o5)                   isreal_p(log(x))
692 @end example
694 @b{利用するには} @file{load(to_poly_solve)}
696 @b{関連関数} @i{complex_number_p}
698 @b{状況} 関数 @code{real_p}は実験的です;
699 仕様は変更の可能性があり、
700 機能は他のMaxima関数にマージされるかもしれません。
701 @end deffn
704 @deffn {関数} new_variable (type)
706  @code{%[z,n,r,c,g]k}という形のユニークなシンボルを返します。
707 ここで @code{k}は整数です
708 @math{type}に許される値は @i{integer, natural_number, real, natural_number,} @i{general}です。
709 (自然数(natural number)は @i{非負整数}を意味します;
710 なので零は自然数です
711 自然数の定義のすべてではありませんがいくつかは零を@i{除外します}。)
713 @math{type}が許される値の1つでない時、
714 @math{type}は @math{general}にデフォルト設定されます。
715 整数、自然数、複素数に対して、
716 Maximaは自動的にこの情報を事実データベースに追加します。
718 @example
719 (%i1) map('new_variable,
720           ['integer, 'natural_number, 'real, 'complex, 'general]);
721 (%o1)          [%z144, %n145, %r146, %c147, %g148]
722 (%i2) nicedummies(%);
723 (%o2)               [%z0, %n0, %r0, %c0, %g0]
724 (%i3) featurep(%z0, 'integer);
725 (%o3)                         true
726 (%i4) featurep(%n0, 'integer);
727 (%o4)                         true
728 (%i5) is(%n0 >= 0);
729 (%o5)                         true
730 (%i6) featurep(%c0, 'complex);
731 (%o6)                         true
732 @end example
734 @b{注釈} 一般に、@code{new_variable}の引数はクォートすべきです。
735 クォートは以下に似たエラーを防ぎます。
737 @example
738 (%i7) integer : 12$
740 (%i8) new_variable(integer);
741 (%o8)                         %g149
742 (%i9) new_variable('integer);
743 (%o9)                         %z150
744 @end example
746 @b{関連関数} @i{nicedummies}
748 @b{利用するには} @file{load(to_poly_solve)}
750 @b{状況} 関数 @code{new_variable}は実験的です;
751 仕様は変更の可能性があり、
752 機能は他のMaxima関数にマージされるかもしれません。
754 @end deffn
756 @deffn {関数} nicedummies
758 関数 @code{nicedummies}は
759 @code{new_variable}が導入した式の中の変数を零から再インデックスします;
761 @example
762 (%i1) new_variable('integer) + 52 * new_variable('integer);
763 (%o1)                   52 %z136 + %z135
764 (%i2) new_variable('integer) - new_variable('integer);
765 (%o2)                     %z137 - %z138
766 (%i3) nicedummies(%);
767 (%o3)                       %z0 - %z1
768 @end example
770 @b{関連関数} @i{new_variable}
772 @b{利用するには} @file{load(to_poly_solve)}
774 @b{状況} 関数 @code{nicedummies}は実験的です;
775 仕様は変更の可能性があり、
776 機能は他のMaxima関数にマージされるかもしれません。
778 @end deffn
780 @deffn {関数} parg (@var{x})
782 関数 @code{parg}は
783 複素偏角関数 @code{carg}の整理化バージョンです;
784 例えば
786 @example
787 (%i1) map('parg,[1,1+%i,%i, -1 + %i, -1]);
788                         %pi  %pi  3 %pi
789 (%o1)               [0, ---, ---, -----, %pi]
790                          4    2     4
791 @end example
793 一般に非定数入力に対して @code{parg}は名詞形を返します;例えば
795 @example
796 (%i2) parg(x + %i * sqrt(x));
797 (%o2)                 parg(x + %i sqrt(x))
798 @end example
800 @code{sign}を使って入力が正の実数か負の実数か決めることができる時
801 @code{parg}は非定数入力に対して非名詞形を返します。
802 以下は2つの例です:
804 @c TODO: THE FIRST RESULT IS A NOUNFORM IN MAXIMA 5.24POST
806 @example
807 (%i3) parg(abs(x));
808 (%o3) 0
809 (%i4) parg(-x^2-1);
810 (%o4)                          %pi
811 @end example
813 @b{注釈} @code{sign}関数は
814 複素数と宣言された変数(@code{declare(x,complex)})を
815 ほとんど無視します;
816 複素数と宣言された変数に対して、
817 @code{parg}は間違った値を返す可能性があります;
818 例えば
820 @c TODO: IN MAXIMA 5.24POST THE RESULT IS A NOUNFORM.
822 @example
823 (%i1) declare(x,complex)$
825 (%i2) parg(x^2 + 1);
826 (%o2) 0
827 @end example
829 @b{Related function} @i{carg, isreal_p}
831 @b{利用するには} @file{load(to_poly_solve)}
833 @b{状況} 関数 @code{parg}は実験的です;
834 仕様は変更の可能性があり、
835 機能は他のMaxima関数にマージされるかもしれません。
837 @end deffn
839 @deffn {関数} real_imagpart_to_conjugate (@var{e})
841 関数 @code{real_imagpart_to_conjugate}は
842 @code{realpart}と @code{imagpart}をすべて
843 @code{conjugate}を含む代数的に同値な式に置き換えます。
845 @example
846 (%i1) declare(x, complex)$
848 (%i2) real_imagpart_to_conjugate(realpart(x) +  imagpart(x) = 3);
849           conjugate(x) + x   %i (x - conjugate(x))
850 (%o2)     ---------------- - --------------------- = 3
851                  2                     2
852 @end example
854 @b{利用するには} @file{load(to_poly_solve)}
856 @b{状況} 関数 @code{real_imagpart_to_conjugate}は実験的です;
857 仕様は変更の可能性があり、
858 機能は他のMaxima関数にマージされるかもしれません。
860 @end deffn
862 @deffn {関数} rectform_log_if_constant (@var{e})
864 関数 @code{rectform_if_constant}は
865 @code{ log(c)}の形の項をすべて
866 @code{rectform(log(c))}に変換します。
867 ここで @code{c}は宣言された定数式か明示的に宣言された定数です。
869 @example
870 (%i1) rectform_log_if_constant(log(1-%i) - log(x - %i));
871                                  log(2)   %i %pi
872 (%o1)            - log(x - %i) + ------ - ------
873                                    2        4
874 (%i2) declare(a,constant, b,constant)$
876 (%i3) rectform_log_if_constant(log(a + %i*b));
877                        2    2
878                   log(b  + a )
879 (%o3)             ------------ + %i atan2(b, a)
880                        2
881 @end example
883 @b{利用するには} @file{load(to_poly_solve)}
885 @b{状況} 関数 @code{rectform_log_if_constant}は実験的です;
886 仕様は変更の可能性があり、
887 機能は他のMaxima関数にマージされるかもしれません。
889 @end deffn
891 @deffn {関数} simp_inequality (@var{e})
893 関数 @code{simp_inequality}は
894 inequationの論理積と論理和にいくつかの整理を適用します。
896 @b{制限} 関数 @code{simp_inequality}は少なくとも2つの点で制限されます;
897 第一に整理が局所的です; 例えば
899 @c TODO: IN MAXIMA 5.24POST THE RESULT IS SIMPLIFIED.
901 @example
902 (%i1) simp_inequality((x > minf) %and (x < 0));
903 (%o1) (x>1) %and (x<1)
904 @end example
906 第二に @code{simp_inequality}は事実データベースを参照しません:
908 @example
909 (%i2) assume(x > 0)$
911 (%i3) simp_inequality(x > 0);
912 (%o3)                         x > 0
913 @end example
915 @b{利用するには} @file{load(to_poly_solve)}
917 @b{状況} 関数 @code{simp_inequality}は実験的です;
918 仕様は変更の可能性があり、
919 機能は他のMaxima関数にマージされるかもしれません。
921 @end deffn
923 @deffn {関数} standardize_inverse_trig (@var{e})
925 この関数は
926 恒等式 @code{cot(x) = atan(1/x), acsc(x) = asin(1/x),}と
927  @code{asec, acoth, acsch} @code{asech}に関する類似
928 の恒等式を式に適応します。
929 Abramowitz and Stegun, 
930 Eqs. 4.4.6 から 4.4.8までと 4.6.4から 4.6.6までを参照してください。
932 @b{利用するには} @file{load(to_poly_solve)}
934 @b{状況} 関数 @code{standardize_inverse_trig}は実験的です;
935 仕様は変更の可能性があり、
936 機能は他のMaxima関数にマージされるかもしれません。
937 @end deffn
939 @deffn {関数} subst_parallel (@var{l}, @var{e})
941 @code{l}が単一の等式か等式のリストの時、
942 それぞれの等式の右辺側を左辺に代入します。
943 代入は並列に行われます; 例えば
945 @example
946 (%i1) load(to_poly_solve)$
948 (%i2) subst_parallel([x=y,y=x], [x,y]);
949 (%o2)                        [y, x]
950 @end example
952 これを順にされる代入と比較します:
954 @example
955 (%i3) subst([x=y,y=x],[x,y]);
956 (%o3)                        [x, x]
957 @end example
959 関数 @code{subst_parallel}は
960 @code{subst_parallel}は非アトムの代入を許すことを除いて
961 @code{sublis}と似ています;
962 例えば
964 @example
965 (%i4) subst_parallel([x^2 = a, y = b], x^2 * y);
966 (%o4)                          a b
967 (%i5) sublis([x^2 = a, y = b], x^2 * y);
969                                                              2
970 sublis: left-hand side of equation must be a symbol; found: x
971  -- an error. To debug this try: debugmode(true);
972 @end example
974 @code{subst_parallel}が行う代入は文字通りであり意味論的ではありません;
975 なので
976 @code{subst_parallel}は
977 @math{x * y}が @math{x^2 * y}の部分式であることを認識@i{しません}
979 @example
980 (%i6) subst_parallel([x * y = a], x^2 * y);
981                                2
982 (%o6)                         x  y
983 @end example
985 関数 @code{subst_parallel}は整理の@i{前に}すべての代入を完了します。
986 これは、もし整理が前に行われていたらエラーが起こるような
987 条件式への代入を許します:
989 @example
990 (%i7) subst_parallel([x = 0], %if(x < 1, 5, log(x)));
991 (%o7)                           5
992 (%i8) subst([x = 0], %if(x < 1, 5, log(x)));
994 log: encountered log(0).
995  -- an error. To debug this try: debugmode(true);
996 @end example
998 @b{関連関数} @i{subst, sublis, ratsubst}
1000 @b{利用するには} @file{load(to_poly_solve_extra.lisp)}
1002 @b{状況} 関数 @code{subst_parallel}は実験的です;
1003 仕様は変更の可能性があり、
1004 機能は他のMaxima関数にマージされるかもしれません。
1006 @end deffn
1008 @deffn {関数} to_poly (@var{e}, @var{l})
1010 関数 @code{to_poly}は
1011 等式 @code{e}を
1012 inequation制約を伴う多項式系に変換しようとします;
1013 制約を満たす多項式系の解は
1014 等式 @code{e}の解です。
1015 非公式には @code{to_poly}は
1016 等式 @var{e}を多項式化しようとします; 
1017 例がわかりやすいかもしれません:
1019 @example
1020 (%i1) load(to_poly_solve)$
1022 (%i2) to_poly(sqrt(x) = 3, [x]);
1023                             2
1024 (%o2) [[%g130 - 3, x = %g130 ], 
1025                       %pi                               %pi
1026                    [- --- < parg(%g130), parg(%g130) <= ---], []]
1027                        2                                 2
1028 @end example
1030 条件 @code{-%pi/2<parg(%g6),parg(%g6)<=%pi/2}は
1031 @code{%g6}が平方根関数の範囲内であることを告げます。
1032 これがtrueの時、
1033 @code{sqrt(x) = 3}に設定された解は
1034 @code{%g6-3,x=%g6^2}に設定された解と同じです。
1036 三角式を多項式化するには、
1037 非代数的代入の導入が必要です;
1038 これらの非代数的代入は
1039 @code{to_poly}が返す三番目のリスト内で返されます;
1040 例えば
1042 @example
1043 (%i3) to_poly(cos(x),[x]);
1044                 2                                 %i x
1045 (%o3)    [[%g131  + 1], [2 %g131 # 0], [%g131 = %e    ]]
1046 @end example
1048 数字1が変数リストのメンバーでない限り定数項は多項式化されません;
1049 例えば
1051 @example
1052 (%i4) to_poly(x = sqrt(5),[x]);
1053 (%o4)                [[x - sqrt(5)], [], []]
1054 (%i5) to_poly(x = sqrt(5),[1,x]);
1055                             2
1056 (%o5) [[x - %g132, 5 = %g132 ], 
1057                       %pi                               %pi
1058                    [- --- < parg(%g132), parg(%g132) <= ---], []]
1059                        2                                 2
1060 @end example
1062 根の1つとして@math{sqrt(5) + sqrt(7)}を持つ多項式を生成するには、
1063 以下のコマンドを使います。
1065 @example
1066 (%i6) first(elim_allbut(first(to_poly(x = sqrt(5) + sqrt(7),
1067                                       [1,x])), [x]));
1068                           4       2
1069 (%o6)                   [x  - 24 x  + 4]
1070 @end example
1072 @b{関連関数} @i{to_poly_solve}
1074 @b{利用するには} @file{load(to_poly)}
1076 @b{状況:} 関数 @code{to_poly}は実験的です;
1077 仕様は変更の可能性があり、
1078 機能は他のMaxima関数にマージされるかもしれません。
1080 @end deffn
1082 @deffn {関数} to_poly_solve (@var{e}, @var{l}, [options])
1084 関数 @code{to_poly_solve}は
1085 等式 @math{e}を
1086 変数 @math{l}について解こうとします。
1087 等式 @math{e}は単一の式か式の集合もしくはリストでありえます;
1088 同様に @math{l}は単一のシンボルかシンボルの集合のリストでありえます;
1089 @math{e}のメンバーが明示的に等式でない時(例えば @math{x^2 -1})、
1090 ソルバは式は0に等しいと仮定します。
1092 @code{to_poly_solve}の基本戦略は
1093 入力を多項式形に変換するために @code{to_poly}を使い、
1094 多項式系上で @code{algsys}をコールします。
1095 なので Thus user options that affect 
1096 @code{algsys}に影響を与えるユーザーオプション、特に
1097 @code{algexact}は @code{to_poly_solve}にも影響を与えます。
1098 @code{algexact}のデフォルト値はfalseですが、
1099 @code{to_poly_solve}のためには、、一般的に @code{algexact}はtrueであるべきです。
1100 関数 @code{to_poly_solve}は
1101 @code{algexact}を局所的にtrueに設定しません。
1102 @code{algsys}が厳密は解を決定することができない時
1103 trueに設定すると近似解を見つけることが不可能になるためです。
1105 @code{to_poly_solve}が解集合を決定できる時、
1106 解集合のそれぞれのメンバーは
1107 @code{%union}オブジェクト内のリストです:
1109 @example
1110 (%i1) load(to_poly_solve)$
1112 (%i2) to_poly_solve(x*(x-1) = 0, x);
1113 (%o2)               %union([x = 0], [x = 1])
1114 @end example
1116 @code{to_poly_solve}が解集合を決定@i{できない}時
1117 @code{%solve}名詞形が返されます。(この場合、警告が印字されます。)
1119 @example
1120 (%i3) to_poly_solve(x^k + 2* x + 1 = 0, x);
1122 Nonalgebraic argument given to 'to_poly'
1123 unable to solve
1124                           k
1125 (%o3)            %solve([x  + 2 x + 1 = 0], [x])
1126 @end example
1128 @code{%solve}名詞形への代入は時々解に帰着します。
1130 @example
1131 (%i4) subst(k = 2, %);
1132 (%o4)                   %union([x = - 1])
1133 @end example
1135 特に三角等式の場合、
1136 ソルバは時々任意整数の導入を必要とします。
1137 これらの任意整数は
1138 @code{%zXXX}という形を持ちます。
1139 ここで @code{XXX}は整数です;
1140 例えば
1142 @example
1143 (%i5) to_poly_solve(sin(x) = 0, x);
1144 (%o5)   %union([x = 2 %pi %z33 + %pi], [x = 2 %pi %z35])
1145 @end example
1147 これらの変数を零から再インデックスするには @code{nicedummies}を使います:
1149 @example
1150 (%i6) nicedummies(%);
1151 (%o6)    %union([x = 2 %pi %z0 + %pi], [x = 2 %pi %z1])
1152 @end example
1154 時折、ソルバは
1155 @code{%cXXX}という形の任意複素数か
1156 @code{%rXXX}という形の任意実数を導入します。
1157 関数 @code{nicedummies}はこれらの識別子を零から再インデックスします。
1159 解集合は時々
1160 論理積、論理和、含意に関してそれぞれ
1161 @code{%and}か, @code{%or}, @code{%if}を含む様々な論理演算子の
1162 整理化バージョンを含みます;
1163 例えば
1165 @example
1166 (%i7) sol : to_poly_solve(abs(x) = a, x);
1167 (%o7) %union(%if(isnonnegative_p(a), [x = - a], %union()), 
1168                       %if(isnonnegative_p(a), [x = a], %union()))
1169 (%i8) subst(a = 42, sol);
1170 (%o8)             %union([x = - 42], [x = 42])
1171 (%i9) subst(a = -42, sol);
1172 (%o9)                       %union()
1173 @end example
1175 空集合は @code{%union}によって表現されます。
1177 関数 @code{to_poly_solve}は
1178 有理数や非有理べき、絶対値、三角関数、最小最大を含む等式の(すべてではありませんが)
1179 いくつかを解くことができます。
1180 Lambert W 函数を使って解くことができるいくつかの等式も解くことができます;
1181 例:
1183 @example
1184 (%i1) load(to_poly_solve)$
1186 (%i2) to_poly_solve(set(max(x,y) = 5, x+y = 2), set(x,y));
1187 (%o2)      %union([x = - 3, y = 5], [x = 5, y = - 3])
1188 (%i3) to_poly_solve(abs(1-abs(1-x)) = 10,x);
1189 (%o3)             %union([x = - 10], [x = 12])
1190 (%i4) to_poly_solve(set(sqrt(x) + sqrt(y) = 5, x + y = 10),
1191                     set(x,y));
1192                      3/2               3/2
1193                     5    %i - 10      5    %i + 10
1194 (%o4) %union([x = - ------------, y = ------------], 
1195                          2                 2
1196                                 3/2                 3/2
1197                                5    %i + 10        5    %i - 10
1198                           [x = ------------, y = - ------------])
1199                                     2                   2
1200 (%i5) to_poly_solve(cos(x) * sin(x) = 1/2,x,
1201                     'simpfuncs = ['expand, 'nicedummies]);
1202                                          %pi
1203 (%o5)              %union([x = %pi %z0 + ---])
1204                                           4
1205 (%i6) to_poly_solve(x^(2*a) + x^a + 1,x);
1206                                         2 %i %pi %z81
1207                                         -------------
1208                                   1/a         a
1209                   (sqrt(3) %i - 1)    %e
1210 (%o6) %union([x = -----------------------------------], 
1211                                   1/a
1212                                  2
1213 @group
1214                                                   2 %i %pi %z83
1215                                                   -------------
1216                                             1/a         a
1217                           (- sqrt(3) %i - 1)    %e
1218                      [x = -------------------------------------])
1219                                            1/a
1220                                           2
1221 @end group
1222 (%i7) to_poly_solve(x * exp(x) = a, x);
1223 (%o7)              %union([x = lambert_w(a)])
1224 @end example
1226 @i{線形}不等式に対して、 @code{to_poly_solve}は自動的にFourier消去を行います:
1228 @example
1229 (%i8) to_poly_solve([x + y < 1, x - y >= 8], [x,y]);
1230                                7
1231 (%o8) %union([x = y + 8, y < - -], 
1232                                2
1233                                                               7
1234                                  [y + 8 < x, x < 1 - y, y < - -])
1235                                                               2
1236 @end example
1238 @code{to_poly_solve}のオプション引数のそれぞれは等式でなければいけません;
1239 一般にこれらのオプションの順序は問題になりません.
1241 @itemize @bullet
1242 @item
1243 @code{simpfuncs = l}, 
1244 ここで @code{l}は函数のリストです。
1245 lのメンバーの合成をそれぞれの解に適用します。
1246 @end itemize
1248 @example
1249 (%i1) to_poly_solve(x^2=%i,x);
1250                                1/4             1/4
1251 (%o1)       %union([x = - (- 1)   ], [x = (- 1)   ])
1252 (%i2) to_poly_solve(x^2= %i,x, 'simpfuncs = ['rectform]);
1253                       %i         1             %i         1
1254 (%o2) %union([x = - ------- - -------], [x = ------- + -------])
1255                     sqrt(2)   sqrt(2)        sqrt(2)   sqrt(2)
1256 @end example
1258 @itemize
1259 @item
1260 時々追加の整理は整理を戻すことがあります;
1261 例えば
1262 @end itemize
1264 @example
1265 (%i3) to_poly_solve(x^2=1,x);
1266 (%o3)              %union([x = - 1], [x = 1])
1267 (%i4) to_poly_solve(x^2= 1,x, 'simpfuncs = [polarform]);
1268                                         %i %pi
1269 (%o4)            %union([x = 1], [x = %e      ]
1270 @end example
1272 @itemize
1273 @item
1274 Maximaは
1275 関数リスト @code{l}のそれぞれのメンバーが純粋に整理であるかチェックしようとしません;
1276 例えば
1277 @end itemize
1279 @example
1280 (%i5) to_poly_solve(x^2 = %i,x, 'simpfuncs = [lambda([s],s^2)]);
1281 (%o5)                   %union([x = %i])
1282 @end example
1284 @itemize
1285 @item
1286 それぞれの解を倍精度浮動小数点数に変換するには
1287 @code{simpfunc = ['dfloat]}を使います:
1288 @end itemize
1290 @example
1291 (%i6) to_poly_solve(x^3 +x + 1 = 0,x, 
1292                     'simpfuncs = ['dfloat]), algexact : true;
1293 (%o6) %union([x = - .6823278038280178], 
1294 [x = .3411639019140089 - 1.161541399997251 %i], 
1295 [x = 1.161541399997251 %i + .3411639019140089])
1296 @end example
1298 @itemize @bullet
1299 @item
1300 @code{use_grobner = true}
1301 このオプションを使うと
1302 解を企てる前に関数 @code{poly_reduced_grobner}が
1303 等式に適用されます
1304 主として、このオプションは
1305 関数 @code{algsys}の弱みに対する応急措置を提供します。
1306 以下はそんな応急措置の例です:
1307 @end itemize
1309 @example
1310 (%i7) to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y],
1311                     'use_grobner = true);
1312 @group
1313                     sqrt(7) - 1      sqrt(7) + 1
1314 (%o7) %union([x = - -----------, y = -----------], 
1315                          2                2
1316 @end group
1317                                  sqrt(7) + 1        sqrt(7) - 1
1318                             [x = -----------, y = - -----------])
1319                                       2                  2
1320 (%i8) to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y]);
1321 (%o8)                       %union()
1322 @end example
1324 @itemize @bullet
1325 @item
1326 @code{maxdepth = k},
1327 ここで @code{k}は正の整数です。
1328 この関数はソルバの最大再帰深さを制御します。
1329 @code{maxdepth}のデフォルト値は5です。
1330 再帰深さを越えた時、ソルバはエラーをシグナルします:
1331 @end itemize
1333 @example
1334 (%i9) to_poly_solve(cos(x) = x,x, 'maxdepth = 2);
1336 Unable to solve
1337 Unable to solve
1338 (%o9)        %solve([cos(x) = x], [x], maxdepth = 2)
1339 @end example
1341 @itemize @bullet
1342 @item
1343 @code{parameters = l},
1344 ここで @code{l}はシンボルのリストです。
1345 ソルバは
1346 リスト @code{l}のメンバーすべてに有効な解を返そうとします;
1347 例えば:
1348 @end itemize
1350 @example
1351 (%i10) to_poly_solve(a * x = x, x);
1352 (%o10)                   %union([x = 0])
1353 (%i11) to_poly_solve(a * x = x, x, 'parameters = [a]);
1354 (%o11) %union(%if(a - 1 = 0, [x = %c111], %union()), 
1355                                %if(a - 1 # 0, [x = 0], %union()))
1356 @end example
1358 @itemize
1359 @item
1360 @code{(%o2)}で、ソルバはダミー変数を導入しました;
1361 これらのダミー変数を再インデックスするには、
1362 関数 @code{nicedummies}を使います:
1363 @end itemize
1365 @example
1366 (%i12) nicedummies(%);
1367 (%o12) %union(%if(a - 1 = 0, [x = %c0], %union()), 
1368                                %if(a - 1 # 0, [x = 0], %union()))
1369 @end example
1371 @math{f(a) = f(b)}という形の等式を解くために
1372 @code{to_poly_solve}は
1373 ハッシュ配列 @code{one_to_one_reduce}に記憶されたデータを使います。
1374 割り当て @code{one_to_one_reduce['f,'f] : lambda([a,b], a=b)}は
1375 @code{to_poly_solve}に
1376 @math{f(a) = f(b)}の解集合が@math{a=b}の解集合に等しいことを告げます;
1377 例えば
1379 @example
1380 (%i13) one_to_one_reduce['f,'f] : lambda([a,b], a=b)$
1382 (%i14) to_poly_solve(f(x^2-1) = f(0),x);
1383 (%o14)             %union([x = - 1], [x = 1])
1384 @end example
1386 さらに一般的に、
1387 割り当て @code{one_to_one_reduce['f,'g] : lambda([a,b], w(a, b) = 0}は
1388 @code{to_poly_solve}に
1389 @math{f(a) = f(b)}の解集合が @math{w(a,b) = 0}の解集合に等しいことを告げます;
1390 例えば
1392 @example
1393 (%i15) one_to_one_reduce['f,'g] : lambda([a,b], a = 1 + b/2)$
1395 (%i16) to_poly_solve(f(x) - g(x),x);
1396 (%o16)                   %union([x = 2])
1397 @end example
1399 加えて、@math{f(a) = b}という形の等式を解くために
1400 関数 @code{to_poly_solve}は
1401 ハッシュ配列 @code{function_inverse}に記憶されたデータを使います。
1402 割り当て @code{function_inverse['f] : lambda([s], g(s))}は
1403 @code{to_poly_solve}に
1404 @code{f(x) = b}に設定された解が
1405 @code{x = g(b)}に設定された解に等しいことを知らせます;
1406 2つの例:
1408 @example
1409 (%i17) function_inverse['Q] : lambda([s], P(s))$
1411 (%i18) to_poly_solve(Q(x-1) = 2009,x);
1412 (%o18)              %union([x = P(2009) + 1])
1413 (%i19) function_inverse['G] : lambda([s], s+new_variable(integer));
1414 (%o19)       lambda([s], s + new_variable(integer))
1415 (%i20) to_poly_solve(G(x - a) = b,x);
1416 (%o20)             %union([x = b + a + %z125])
1417 @end example
1420 @b{注釈}
1422 @itemize
1423 @item
1424 解く変数はシンボルである必要はありません;
1425 @code{fullratsubst}が適切に代入できる時、
1426 解く変数は非シンボルであり得ます:
1427 @end itemize
1429 @example
1430 (%i1) to_poly_solve([x^2 + y^2 + x * y = 5, x * y = 8],
1431                     [x^2 + y^2, x * y]);
1432                                   2    2
1433 (%o1)           %union([x y = 8, y  + x  = - 3])
1434 @end example
1436 @itemize
1437 @item
1438 複素共役を含む等式に対して、
1439 ソルバは自動的に共役等式を追加します;
1440 例えば
1441 @end itemize
1443 @example
1444 (%i1) declare(x,complex)$
1446 (%i2) to_poly_solve(x + (5 + %i) * conjugate(x) = 1, x);
1447                                    %i + 21
1448 (%o2)              %union([x = - -----------])
1449                                  25 %i - 125
1450 (%i3) declare(y,complex)$
1452 (%i4) to_poly_solve(set(conjugate(x) - y = 42 + %i,
1453                         x + conjugate(y) = 0), set(x,y));
1454                            %i - 42        %i + 42
1455 (%o4)        %union([x = - -------, y = - -------])
1456                               2              2
1457 @end example
1459 @itemize
1460 @item
1461 絶対値関数を含む等式に対して、
1462 @code{to_poly_solve}は
1463 絶対値の引数が複素数値か決めるため
1464 事実データベースに問い合わせます。
1465 @end itemize
1467 @example
1468 (%i1) to_poly_solve(abs(x) = 6, x);
1469 (%o1)              %union([x = - 6], [x = 6])
1470 (%i2) declare(z,complex)$
1472 (%i3) to_poly_solve(abs(z) = 6, z);
1473 (%o3) %union(%if((%c11 # 0) %and (%c11 conjugate(%c11) - 36 = 
1474                                        0), [z = %c11], %union()))
1475 @end example
1477 @itemize
1478 @item
1479 @i{これはソルバが事実データベースを参照する唯一の状況です。例えば、もし解く変数が整数と宣言されていたら、@code{to_poly_solve}はこの宣言を無視します}。
1480 @end itemize
1482 @b{Relevant option variables} @i{algexact, resultant, algebraic}
1484 @b{関連関数} @i{to_poly}
1486 @b{利用するには} @file{load(to_poly_solve)}
1488 @b{状況:} 関数 @code{to_poly_solve}は実験的です;
1489 仕様は変更の可能性があり、
1490 機能は他のMaxima関数にマージされるかもしれません。
1491 @end deffn