方程式の解法

のような式は,Wolfram言語では方程式を表す.このような方程式を解くことがしばしば必要になる.それには等号関係を真とするの値を見出せばよい.

二次方程式 を解く.解は2つ求まり,の変換規則として返される.
In[1]:=
Click for copyable input
Out[1]=
こうすると,数値解を得ることができる.
In[2]:=
Click for copyable input
Out[2]=
置換演算子を使いSolveにより生成された規則をに適用することで,の実際の解をリスト形式で得ることができる.
In[3]:=
Click for copyable input
Out[3]=
これらの規則は,を含んだ他の式にも同様に適用することができる.
In[4]:=
Click for copyable input
Out[4]=
Solve[lhs==rhs,x]方程式を解く(答は x への置換規則のリストとして出力する)
x/.solution答の置換規則を作用させ x 値のみをリスト出力する
expr/.solution答の置換規則を作用させ式の値をリスト出力する

方程式の解法と解の代入

Solveを使うと,必ず方程式の解の明示的な式の導出が試みられる.しかし,数学の基本的な結果として判明しているように,式が十分に複雑ならば,根基による明示的な形の解を得ることは不可能である.変数が1つしかなく,最大でも次数が四次以下なら,Wolfram言語は必ずその解を式として求めることができる.しかし,五次以上の方程式では,すべての解を明示的な代数式として求めることは数学的に不可能である.

単一変数で五次より低い代数方程式なら,Wolfram言語は必ず解くことができる.
In[5]:=
Click for copyable input
Out[5]=
方程式によっては,それより高次でも解くことができる.
In[6]:=
Click for copyable input
Out[6]=
いくつかの方程式は,解は存在してもそれを明示的な式として表すことは不可能である.ここでは,Rootオブジェクトで解が表現される.
In[7]:=
Click for copyable input
Out[7]=
明示的な式が得られなくても,数値的に解を評価することは可能である.
In[8]:=
Click for copyable input
Out[8]=

Wolfram言語は,純粋な代数方程式だけでなく,種類は限られているが特殊な関数を含んだ方程式を解くこともできる.

警告が出るが,方程式に対して1つの解が求まる.
In[9]:=
Click for copyable input
Out[9]=

のような方程式の解は無限個あることに気を付けなければいけない.この式の場合,解は の倍数で違う.しかし,Solveは,デフォルトで1つの解だけしか返さない.ただし,他に可能な解が存在する旨を伝えるメッセージは表示する.Reduceを用いるとより詳しい情報が得られる.

この式のような超越方程式には,「代数閉体内」の解は存在しない.
In[10]:=
Click for copyable input
Out[10]=
FindRootを使い,の初期値を与えることで,近似数値解を求めることができる.
In[11]:=
Click for copyable input
Out[11]=

Solveを使い未知の関数を含んだ方程式を解くことも可能である.その場合も,警告が発せられるが,形式的な逆関数を使った結果を得ることができる.

Wolfram言語はの正式な逆関数として結果を返す.
In[12]:=
Click for copyable input
Out[12]=
Solve[{lhs1==rhs1,lhs2==rhs2,},{x,y,}]
変数 x, y, について連立方程式を解く

連立方程式の解法

Wolfram言語を使い,連立方程式も解くことができる.解きたい方程式の組を列挙したリストを与え,解く対象となる変数を列挙したリストを指定するだけでよい.

2つの連立方程式をリスト形式で列挙し,変数について解く.
In[13]:=
Click for copyable input
Out[13]=
少々複雑な連立方程式を解いてみる.出力される2つの解はの2組の変換規則のリストとして与えられる.
In[14]:=
Click for copyable input
Out[14]=
求まった解を使い式を評価してみる.
In[15]:=
Click for copyable input
Out[15]=

Wolfram言語は,連立した線形方程式あるいは整方程式ならどんな組合せのものでも解くことができる.

複数の変数について連立方程式を解く場合,キャンセルできる変数があればあらかじめ打ち消しておくと解が得やすくなる.

以下のようにして,2つの方程式からを打ち消し,の方程式にまとめ直す.
In[16]:=
Click for copyable input
Out[16]=

複数の方程式があるとき,特定の変数について連立解がひとつでも存在するという保証はない.

これらの方程式において矛盾しない解は存在しない.このため,Wolfram言語は解の集合が空であることを示したリストを返してくる.
In[17]:=
Click for copyable input
Out[17]=
ほとんどすべてのの値について,これらの方程式の連立解は存在しない.
In[18]:=
Click for copyable input
Out[18]=

一般に連立方程式が解を持つか持たないかは極めて微妙な問題である.例えば,連立方程式において,のほとんどの値に対して連立方程式は矛盾するため,の解は存在しない.唯一,に等しいときに,連立方程式は解を持つ.Solveは,方程式の一般解を求めるように設定されている,パラメータ間の特別な制約条件が満たされるときだけに存在する解は切り捨てられる.

Solveの代りにReduceを使えば,Wolfram言語は,パラメータに関する特別条件を満足する特殊解を含む,連立方程式のすべての可能な解を保持しておく.

これは,方程式がのときのみ解を持つことを示す.という表記はがともにTrueであるという条件を表す.
In[19]:=
Click for copyable input
Out[19]=
これは,方程式の可能な解の完全な集合を与える.答は簡約された方程式の組合せとして表される.は,同時に満たされなければならない方程式を示し,は代替条件を示す.
In[20]:=
Click for copyable input
Out[20]=
こうするとより複雑な式の組合せが与えられる.
In[21]:=
Click for copyable input
Out[21]=
これはすべての解の記号表示である.
In[22]:=
Click for copyable input
Out[22]=
Solve[lhs==rhs,x]x について方程式を解く
Solve[{lhs1==rhs1,lhs2==rhs2,},{x,y,}]
x, y, について連立方程式を解く
Eliminate[{lhs1==rhs1,lhs2==rhs2,},{x,}]
連立方程式において x, を消去する
Reduce[{lhs1==rhs1,lhs2==rhs2,},{x,y,}]
連立方程式を変形・簡約し,条件付きであっても解を探す

方程式の解法と整理を行う関数

Reduceは実数や整数の方程式を扱う強力な機能も備えている.これについては「領域上の等式と不等式」でより詳しく説明する.

これはが複素数であると仮定して式を簡約する.
In[23]:=
Click for copyable input
Out[23]=
これにはが実数であるという制約条件が含まれる.
In[24]:=
Click for copyable input
Out[24]=
これは整数解しか与えない.
In[25]:=
Click for copyable input
Out[25]=