| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
14.1 方程式に関する諸定義
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
この様にALGEXACTl:TRUEは厳密解のみを保証するものでは無く、ALGSYSが最初に厳密解 を計算しようと試み、結局、ALLか失敗した時に近似解のみを生成する。
その手法は以下の通り;
方程式が単変数でしかも線型、二次、或いは四次で、もし、近似が導入されていなけ れば、SOLVEが再び呼出される。近似が導入されている場合や方程式が単変数で線型、 二次又は四次の何れでも無い場合、REALONLY[FALSE]スイッチがTRUEであれば、関数 REALROOTSが実数値解を見付ける為に呼び出される。
REALONLY:FALSEであれば、ALLROOTSが実数と複素値解を求める為に呼び出される。 要求されるよりも明瞭にALGSYSが低い精度の解を生成するならば、利用者は ALGEPSILON[10^8]の値をより高い値に変更して良い。ALGEXACT[FALSE]がTRUEであれば、 SOLVEが常に呼び出される。
"ALGSYS cannot solve - system too complicated." (意味:"ALGSYSでは解けません - 系があまりにも複雑です。") |
RADCANを用いた操作で、大きくて混み入った式を生成する事が出来る。この場合、 利用者はPICKAPARTやREVEALを解の解析に使える。
稀に、RADCANは本当に実数値解であるにもかかわらず、解の中に%iを入れる事がある。 例題はEXAMPLE(ALGSYS);を実行せよ。
POLYFACTOR[FALSE]フラグがTRUEの時、ALLROOTSは多項式が実係数であれば実数上、 複素係数であれば複素数上で因子分解を行う。ALLROOTSは重複解を持つ場合は不正確 な結果を戻す事がある(polyが実で、不正確な解が戻った場合、ALLROOTS(%I*poly)を 試しても良い)。例はEXAMPLE(ALLROOTS);を実行せよ。
ALLROOTSは多項式以外には使えない。RAT命令を実行した後に分子は多項式でなければ ならなず、分母は高々複素数である事が要求される。POLYFACTORがTRUEであれば、 このALLROOTSの結果として常に同値な式(但し、因子分解されたもの)が返される。
(C1) FUNCSOLVE((N+1)*FOO(N)-(N+3)*FOO(N+1)/(N+1) =
(N-1)/(N+2),FOO(N));
N
(D1) FOO(N) = ---------------
(N + 1) (N + 2)
(* 訳者注:一次線形結合の漸化式が解けると云う事。*)
|
(* 訳者注: 即ち、連立方程式を解くと、その変数に解が代入されるかを指定するフラグである。 以下の例で簡単に示す: (C101) GLOBALSOLVE:TRUE; (D101) TRUE (C102) solve([xx*2+yy*3-1=0,xx+yy=10],[xx,yy]); (D102) [[xx : 29, yy : - 19]] (C103) xx; (D103) 29 (C104) yy; (D104) - 19 (C105) GLOBALSOLVE:FALSE; (D105) FALSE (C106) solve([mm*2+nn*3-1=0,mm+nn=10],[mm,nn]); (D106) [[mm = 29, nn = - 19]] (C107) mm;nn; (D107) mm (C107) (D107) nn 尚、GLOBALSOLVE:TRUEとした状態で、ある方程式を解いた後に、同じ変数の方程式を 解こうとすると次のエラーが出るので注意する。例えば、上記の例の(C106)行の方程式 以下の行で置き換えれば、 (C106) solve([xx*2+yy*3-1=0,xx+yy=10],[xx,yy]); A number was found where a variable was expected -SOLVE -- an error. Quitting. To debug this try DEBUGMODE(TRUE);) (C107) となる。 |
ieを積分方程式; unkを未知関数; techを上で与えられたものから試すべき手法 (tech=FIRSTの意味は: 解を見付ける最初の手法を試みる;tech=ALLの意味は:全ての 適用可能な手法を試みる)であり、nはTAYLOR,NEUMANN,FIRSTKINDSERIESやFEDSERIES (微分手法に対する繰り返しの最大深度でもある)から取るべき項の最大数;guessは NEUMANNやFIRSTKINDSERIESへの予測値の初期値である。第二から第五の助変数に対す る初期値は:unk: P(X)、ここでPは第一の関数で、MACSYMAの未知関数となる被積分 関数に現れるものであり、そして、Xは第2種の方程式の場合、積分の外側で現われる Pの第一の出現に対応する引数として現われるか、第1種の方程式で積分変数を除いた その他の変数となる。Xを探す事に失敗すると、利用者は独立変数を与える事を要求 される;
tech: FIRST; n: 1; guess: NONE, これでNEUMANNとFIRSTKINDSERIESを初期予測値としてF(X)を用いる事 となる。
[SOLUTION, TECHNIQUE USED, NTERMS, FLAG] |
ここで、解が完全(exact)であればFLAGは不在になる。そうでなければ、不完全や 非閉形式解に各々対応するAPPROXIMATEかINCOMOLETEと云う語になる。級数による手法 が用いられると、NTERMSは取られた項の数(これは、エラーがより多くの項の生成を 妨げた場合、IEQNに対して与えられたnよりも小さくなる)を与える。
(* 訳者注:
方程式は=の両方に式が配置されたものである。以下に実際の例を示す。
(C113) zz:2*x^2+3*x-5=sin(x)*x+4;
2
(D113) 2 x + 3 x - 5 = x SIN(x) + 4
(C114) lhs(zz);
2
(D114) 2 x + 3 x - 5
LHSがあれば、その反対側の右辺を返すRHSも存在する。
(C115) rhs(zz);
(D115) x SIN(x) + 4
但し、不等式には使えない。
(C117) zz:2*x^2+3*x-5>=sin(x)*x+4;
2
(D117) 2 x + 3 x - 5 >= x SIN(x) + 4
(C118) lhs(zz);
2
(D118) 2 x + 3 x - 5 >= x SIN(x) + 4
(C119) rhs(zz);
(D119) 0
*)
|
線形連立方程式のリストを変数リストに対して解く。expiは各々、その変数の多項式 でなければならないが、方程式であっても良い。GLOBALSOLVE[FALSE]がTRUEであれば、 SOLVEで解かれた変数に連立方程式の集合の解が設定される。
BACKSUBST[TRUE] FALSEであれば、方程式が三角関数化された後に戻し代入を妨げる。 これは非常に大きな問題で、戻し代入でとてつもなく大きな式を生成する原因となり かねない場合には必要である(MCでこれは保存容量を消耗する原因となる)。
LINSOLVE_PARAMS[TRUE] TRUEであれば、LINSOLVEは記号%Riを生成して、ALGSYSで 手入力した任意の助変数を表現する為に用いる。FALSEであれば、LINSOLVEは以前と 同様の挙動をする。つまり、不定方程式(Diophantus方程式)に出会うと他の項の引数 の幾つかに対して解く。
(C1) X+Z=Y$ (C2) 2*A*X-Y=2*A**2$ (C3) Y-2*Z=2$ (C4) LINSOLVE([D1,D2,D3],[X,Y,Z]),GLOBALSOLVE:TRUE; SOLUTION (E4) X : A + 1 (E5) Y : 2 A (E6) Z : A - 1 (D6) [E4, E5, E6] |
FALSEであれば、以前の様にLINSOLVEは動作する。つまり、不定方程式型に対しては、 他の項の幾つかの引数に対して解く。
(C1) POLY1:X**10-2*X**4+1/2$ (C2) NROOTS(POLY1,-6,9.1); RAT REPLACED 0.5 BY 1/2 = 0.5 (D2) 4 |
(* 訳者注:
(C1) nthroot(x^2+2*x+1,2);
(D1) x + 1
(C2) nthroot(x^3+3*x^2+3*x+1,2);
Not an nth power
-- an error. Quitting. To debug this try DEBUGMODE(TRUE);)
(C3) nthroot(1-3*x+3*x^2-x^3,3);
(D3) 1 - x
(C4) nthroot(-1+3*x-3*x^2+x^3,3);
(D4)
x - 1
の様に使える。
*)
|
(* 訳者注: (C1) PROGRAMMODE:FALSE; (D1) FALSE (C2) solve(x^2+1,x); Solution: (E2) x = - %I (E3) x = %I (D3) [E9, E10] (C3) PROGRAMMODE:TRUE; (D3) TRUE (C4) solve(x^2+1,x); (D4) [x = - %I, x = %I] PROGRAMMODE:TRUEで中間行(Ei)が出ていない事に注目。 *) |
例はEXAMPLE(REALROOTS);を実行せよ。
(* 訳者注:
(C1) rhs(x^2+2*x+1=0);
(D1) 0
(C2) lhs(x^2+2*x+1=0);
2
(D2) x + 2 x + 1
(C3) rhs(0=x^2+2*x+1);
2
(D3) x + 2 x + 1
方程式は"a=b"の形式であり、右側とはb、左側とはaの事で、"="のどちらかの側にある
かと云う意味である。その為、式の順番を変更した場合には(C1)と(C3)の結果が入替
わる。
*)
|
例えば、
ROOTSCONTRACT(SQRT(X)*Y^(3/2)) ==> SQRT(X*Y^3) |
ROOTSCONTRACT(ABS(X)*SQRT(Y)) ==> SQRT(X^2*Y) |
オプションのROOTSCONMODE(デフォルト値はTRUE)もあり、ROOTSCONTRACTに次の影響を 与える:
問題 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) |
上の例と多くの例は次を入力すると良い。
EXAMPLE(ROOTSCONTRACT); |
ROOTSCONMODEがFALSEならば、ROOTSCONTRACTはwrt有理数の指数の分母が同じ指数の もののみを約分する。ROOTSCONMODE:TRUE$の例に対するキーは、単に2が4を割切るが、 3はそうでない事である。ROOTSCONMODE:ALL$は指数の分母のlcm(最小公倍数)を取って 纏める。ROOTSCONTRACTはLOGCONTRACT(マニュアルを見よ)と似た手法でRATSIMPを用い る。
(*訳者注: x^2+2*x+1だけの式はSOLVEの側でx^2+2*x+1=0と自動的に設定される事を意味する。 *) |
varは関数(例えば、F(X))や他の和や積を除く非原子的な式で良い。expが1変数のみの 場合、varを省略しても良い。expは有理式でも良く、三角関数、指数関数等を含んで いても良い。次に述べる手法が用いられている:Eを式、Xを変数とする。もし、EがX の線形結合であれば、Xについて自明に解かれる。一方で、EがA*X**N+Bの形式であれ ば、その解は(-B/A)**(1/N)に1のN乗根を掛けたものとなる。
EがXに関して線形結合ではなく、Eに含まれるXの指数のGCD(Nとする)が指数を割切り、 根の重複度はN倍される。そして、SOLVEはその結果について再び呼出される。もし、 Eが因子であれば、各因子に対してSOLVEが呼出される。最後に、SOLVEは二次、三次、 又は四次の解の公式を必要があれば用いる。Eが解くべき変数の関数の多項式、F(X) とする、であれば、最初にF(X)に対して解き(結果をCとする)、そして、方程式 F(X)=Cを既知関数Fの逆で与えられるXを解く事が可能である。
BREAKUP[TRUE] FALSEであれば、SOLVEが三次と四次方程式の解を、デフォルトの幾つ かの共通の部分式から構築されたものでは無く、単一の式として表示する事になる。
MULTIPLICITIES[NOT_SET_YET] - SOLVE,REALROOTSやALLROOTSによって返された個々の 解の重複度のリストが設定される。SOLVEに影響するスイッチに関しては、 APROPOS(SOLVE)を試す事。もし、それらの目的が明確でなければ、個々のスイッチ名で DESCRIBEを用いても良い。
SOLVE([eq1, ..., eqn], [v1, ..., vn])は連立(線形、又は非線形)多項式の方程式系 を、LINSOLVEかALGSYSを用いて解き、その変数で解のリストを返す。LINSOLVEの場合、 このリストは解の単一のリストを含む。それは二つのリストを引数として取る。最初 のリスト(eqi,i=1,..,n)は解くべき方程式を表現する;第二のリストは決定すべき 未知変数のリストである。もし、方程式中の変数の総数が方程式の数と等しければ、 第二の引数リストは省略しても良い。線形系に対しては与えられた方程式が十分で ない場合、INCONSISTENTと云うメッセージが表示される(SOLVE_INCONSISTENT_ERROR スイッチを見よ);もし、単一な解が存在しない場合はSINGULARが表示される。 例題はEXAMPLE(SOLVE);を実行せよ。
FALSEであれば、この場合は[]を返す。(これは新しいモードであり、以前は、ALGSYS を呼び出した場合のみであった。)
(* 訳者注: imslパッケージはMaxima-5.6には含まれていない。 *) |
(* 訳者注: imslパッケージはMaxima-5.6には含まれていない。 *) |
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |