How to | 方程式を解く方法
Wolfram言語にはさまざまな種類の方程式を解くことを可能にする強力な機能が数多く備わっている.
Solveを使って方程式を解くことができる.方程式には「=」ではなく「==」を使用しなくてはならないことに注意:
Solve[ArcSin[x] == 0, x]結果は2重にネストされたリストの中のRuleである.外側のリストが解のすべてを含み,内側のリストのそれぞれが単独の解を含む.ここでは,3つの解がある:
Solve[x ^ 3 + 3x == 0, x]Solve[{x ^ 2 - 1 == 0, x ^ 2 - 3x + 2 == 0}, x]ここでは連立方程式に2つの解が存在する.それぞれの解集合はそれ自身のリストにラップされている:
Solve[{x - y == 0, x ^ 2 + y ^ 2 == 1}, {x, y}]sol = Solve[x ^ 2 + y x + 3 == 0, x]これらの解の1つを計算で使いたい(ここでは最初の解が示されている)場合は,[[...]] (Partの簡略表記)を使ってそれを解のリストから抽出してから「/.」(ReplaceAllの短縮形)を使って規則を適用する:
x /. sol[[1]]例えば以下は,最初の解が正しいと想定した場合のyの異なる値に対するx^2 – y^2のプロットである:
Plot[x^2 - y^2 /. sol[[1]], {y, Sqrt[12], 10}]複数の変数を持つ方程式系では,第2引数のリストを使うことによって,一部あるいはすべての変数について解くことができる:
Solve[{x ^ 2 + y x + 3 == 0, x + y == 1}, {x, y}]方程式系が完全には指定されていない場合には,Wolfram言語は残りの変数について答を返す:
Solve[{x ^ 2 + y x + z == 0, x + y == 1}, {x, y}]Solveは方程式のいわゆる「一般」解として知られているものを求める.これらは,第2引数で指定されていない変数に依存しない解である.例えば:
Solve[x y == 0, x]yが何であれ,xに0を当てはめることによって方程式を解くことができる.しかし,yに依存するもう1つの解も存在する.つまりyを0に設定するという方法である.第2引数にyを加えることによって以下の解が表示される:
Solve[x y == 0, {x, y}]Solveがすべての解を求めないという場合もある.例えば:
Solve[x + Log[x] == 1 / 2, x]Solve[(1/x) + (1/Sqrt[x]) == 1, x]無理方程式では,Solveは寄生の解を破棄することに注意する.寄生の解も含めたすべての候補の解を見たい場合は,VerifySolutionsのオプションをFalseに設定する:
Solve[(1/x) + (1/Sqrt[x]) == 1, VerifySolutions -> False](1/x) + (1/Sqrt[x]) == 1 /. %//FullSimplifyReduceを使って方程式を解くこともできる:
Reduce[x ^ 3 + 3x == 0, x]Reduceの出力はSolveの出力とは異なる.Reduceはもとの方程式に等しい論理的な式を出力するため,解を削除することは決してない:
Reduce[x y == 0, x]Reduce[Cos[x] == 1 / 2, x]Wolfram言語を使うと,方程式の数値解を得ることもできる.
例えば,NをSolveの出力に使って記号解の近似数値を得ることができる:
nsol1 = Solve[x^2 + 2x - 7 == 0, x]N[nsol1]NSolveを使って直接数値解を得ることもできる.この方法は,NおよびSolveを組み合せて使うよりも速い:
NSolve[x^2 + 2x - 7 == 0, x]NSolveを使ってより複雑な多項式を解く:
poly = 3 + 3x - 7x^2 - x^3 + 2x^4 + 3x^7 - 3x^8 - x^9 + x^10;NSolve[poly == 0, x]NSolveは方程式系を数値的に解くのにも使える.Solveと同じシンタックスを使う:
NSolve[{x + y == 2, x - 3y + z == 3, x - y + z == 0}, {x, y, z}]方程式に一次関数あるいは多項式のみが含まれている場合には,NSolveを使ってすべての解に対する近似数値を得ることができる.しかし,方程式にもっと複雑な関数が含まれる場合には,一般にすべての解を数値的にでも求めるような系統だった方法はない.そのような場合には,FindRootを使って解を探すことができる.
FindRootを使い,1から始め,xの数値解を探す:
FindRoot[3Cos[x] == Log[x], {x, 1}]