|
1.5.7 方程式の解法
x^2 + 2 x - 7 == 0のような式は, Mathematicaでは方程式を表す.このような方程式を解くことがしばしば必要になる.それには等号関係を真とする xの値を見出せばよい.
Solveを使い2次方程式 を解く.解は2つ求まり,xの変換規則として返される.
In[1]:= Solve[x^2 + 2x - 7 == 0, x]
Out[1]= 
こうすると,数値解を得ることがで きる.
In[2]:= N[ % ]
Out[2]= 
置換演算子を使い Solveにより生成された規則を xに適用することで, xの実際の解をリスト形式で得ることができる.
In[3]:= x /. %
Out[3]= 
これらの規則は, xを含んだ他の式にも同様に適用することができる.
In[4]:= x^2 + 3 x /. %%
Out[4]= 

方程式の解法と解の代入
Solveを使うと,必ず方程式の解の明示的な式の導出が試みられる.しかし,数学の基本的な結果として判明しているように,式が十分に複雑ならば,明示的な形の解を得ることは不可能である.変数が1つしかなく,最大でも次数が4次以下なら, Mathematicaは必ずその解を式として求めることができる.しかし,5次以上の方程式では,すべての解を明示的な代数式として求めることは数学的に不可能である.
単一変数で5次より低い代数方程式なら, Mathematicaは必ず解くことができる.
In[5]:= Solve[x^4 - 5 x^2 - 3 == 0, x]
Out[5]= 
方程式によっては,それより高次でも解くことができる.
In[6]:= Solve[x^6 == 1, x]
Out[6]= 
いくつかの方程式は,解は存在してもそれを明示的な式として表すことは不可能である.ここでは, Rootオブジェクトで解が表現される.
In[7]:= Solve[2 - 4 x + x^5 == 0, x]
Out[7]= 
明示的な式が得られなくても,数値的に解を得ることは可能である.
In[8]:= N[ % ]
Out[8]= 
Mathematicaは,純粋な代数方程式だけでなく,種類は限られているが特殊な関数を含んだ方程式を解くこともできる.
警告が出るが,方程式に対して1つの解が求まる.
In[9]:= Solve[ Sin[x] == a, x ]

Out[9]= 
のような方程式の解は無限個あることに気を付けなければいけない.この式の場合,解は の倍数で違う.しかし,Solveは,デフォルトで1つの解だけしか返さない.ただし,他に可能な解が存在する旨を伝えるメッセージは表示する.Reduceを用いるとより詳しい情報が得られる.
この式のような超越方程式には,「代数閉体内」の解は存在しない.
In[10]:= Solve[ Cos[x] == x, x ]

Out[10]= 
FindRootを使い, xの初期値を与えることで,近似数値解を求めることができる.
In[11]:= FindRoot[ Cos[x] == x, {x, 0} ]
Out[11]= 
Solveを使い未知の関数を含んだ方程式を解くことも可能である.その場合も,警告が発せられるが,形式的な逆関数を使った結果を得ることができる.
Mathematicaはfの正式な逆関数として結果を返す.
In[12]:= Solve[ f[x^2] == a, x ]

Out[12]= 

連立方程式の解法
Mathematicaを使い,連立方程式も解くことができる.解きたい方程式の組を列挙したリストを与え,解く対象となる変数を列挙したリストを指定するだけでよい.
2つの連立方程式をリスト形式で列挙し,変数 , について解く.
In[13]:= Solve[{a x + y == 0, 2 x + (1-a) y == 1}, {x, y}]
Out[13]= 
少々複雑な連立方程式を解いてみる.出力される2つの解は xと yの2組の変換規則のリストとして与えられる.
In[14]:= Solve[{x^2 + y^2 == 1, x + 3 y == 0}, {x, y}]
Out[14]= 
求まった解を使い式 x + yを評価してみる.
In[15]:= x + y /. %
Out[15]= 
Mathematicaは,連立した線形の方程式ならどんな組合せのものでも解くことができる.さらに,大きなクラスの連立整方程式を解くこともできる.明示的に方程式を解くことができないときでも, Mathematicaは普通,式を簡約された形に還元することができる.
複数の変数について連立方程式を解く場合,キャンセルできる変数があればあらかじめ打ち消しておくと解が得やすくなる.
Eliminateを使い,2つの方程式から yを打ち消し,1つの方程式にまとめ直す.
In[16]:= Eliminate[{a x + y == 0, 2 x + (1-a) y == 1}, y]
Out[16]= 
複数の方程式があるとき,特定の変数について連立解が1つでも存在するという保証はない.
これらの方程式において矛盾しない解は存在しない.このため, Mathematicaは,解の集合が空であることを示したリスト {}を返してくる.
In[17]:= Solve[{x==1, x==2}, x]
Out[17]= 
ほとんどすべての aの値について,これらの方程式の連立解は存在しない.
In[18]:= Solve[{x==1, x==a}, x]
Out[18]= 
一般に連立方程式が解を持つか持たないかは極めて微妙な問題である.例えば,連立方程式 {x==1, x==a}において, aのほとんどの値に対して連立方程式は矛盾するため,解は存在しない.唯一, aが 1に等しいときに,連立方程式は解を持つ. Solveは,方程式の一般解を求めるように設定されている,パラメータ間の特別な制約条件が満たされるときだけに存在する解は切り捨てられる.
Solveの代りに Reduceを使えば, Mathematicaは,パラメータに関する特別条件を満足する特殊解を含む,連立方程式のすべての可能な解を保持しておく.
これは,方程式がa==1のときのみ解を持つことを示す.a==1 && x==1という表記はa==1と x==1がともにTrueであるという条件を表す.
In[19]:= Reduce[{x==a, x==1}, x]
Out[19]= 
これは,方程式の可能な解の完全な集合を与える.答は簡約された方程式の組合せとして表される. &&は,同時に満たされなければならない方程式を示し, ||は代替条件を示す.
In[20]:= Reduce[a x - b == 0, x]
Out[20]= 
こうするとより複雑な式の組合せが与えられる.
In[21]:= Reduce[a x^2 - b == 0, x]
Out[21]= 
これはすべての解の記号表示である.
In[22]:= Reduce[Sin[x] == a, x]
Out[22]= 

方程式の解法と整理を行う関数
Reduceは実数や整数の方程式を扱う強力な機能も備えている.これについては3.4.9でより詳しく説明する.
これはxとyが複素数であると仮定して式を簡約する.
In[23]:= Reduce[x^2 + y^2 == 1, y]
Out[23]= 
これにはxとyが実数であるという制約条件が含まれる.
In[24]:= Reduce[x^2 + y^2 == 1, y, Reals]
Out[24]= 
これは整数解しか与えない.
In[25]:= Reduce[x^2 + y^2 == 1, y, Integers]
Out[25]= 
|