Chapter 4方程式とグラフ

Mathematica に方程式を解かせ，その解を活用する方法を学ぼう．
また，Mathematica に備わっている強力なグラフィックス機能を活用することで，方程式の解の幾何学的な意味を表現しよう．

4.12 次方程式とグラフ普通の方程式（連立方程式もふくむ）は組込み関数 Solve で解くことができる．ただし，答えは「置換規則のリストのリスト」という特殊な形で返ってくるので，扱いにはそれなりの注意と工夫が必要である（くわしくは次節参照）．また解の様子をグラフで確認するには，グラフを描く関数 Plot を使うとよい．
[1] Solve で x2 − x − 1 = 0 を解き，結果を sol とおく：

sol = Solve[x^2 - x - 1 == 0, x]
11Out[1]=I1 - 5 M>, :x ®
I1 + 5 M>>::x ®
22Solve[...] の中の方程式は == で結ばれていることに注意しよう．（うっかり = と間違いやすい．）出力の x →... の部分が置換規則とよばれるものであった（2 章In[1]:=2.4 節）．
[2] N で厳密解から数値解へ：
In[2]:=

Out[2]=

N[sol]

88x ® -0.618034<, 8x ® 1.61803<<[3] NSolve で直接数値解を求める：
In[3]:=

NSolve[x^2 - x - 1 == 0, x]

2 次方程式とグラフ

4.1

Out[3]=

3788x ® -0.618034<, 8x ® 1.61803<<[4] 有効数字を 25 桁に指定して解く：
In[4]:=

Out[4]=NSolve[x^2 - x - 1 == 0, x, 25]
88x ® -0.6180339887498948482045868<,
8x ® 1.618033988749894848204587<<*1 ：[5] Plot で関数 x 7→ x2 − x − 1 のグラフを描く（範囲は −1 ≤ x ≤ 2）
In[5]:=

Plot[x^2 - x - 1, {x, -1, 2}]
1.00.5Out[5]=

-1.0

0.5

-0.5

1.0

1.5

2.0

-0.5
-1.0

グラフはデフォルトで青い線で描かれ，全体の縦横比が調整されて黄金比（約 1 : 1.62）となる．
グラフの線の色・太さ，全体の縦横比なども，必要に応じて自在に変えることができる．その方法はこのあと 4.4 節でまとめて紹介しよう．
問題 4.1 (解の図示) Solve を用いて方程式 x3 − 19x + 30 = 0 を解け．また Plotを用いて関数 f (x) = x3 − 19x + 30 のグラフを描け．ただし，x 軸との交点がわかるように適当な描画範囲を選ぶこと．
【解答】 [1] と同様に Solve を適用する：
In[ ]:=

Solve[x^3 - 19 x + 30 == 0, x]

Out[ ]=

88x ® -5<, 8x ® 2<, 8x ® 3<<[5] と同様に Plot で関数のグラフを描く．
（x の範囲は試行錯誤して適当に決めた）：
In[ ]:=*1 y

Plot[x^3 - 19 x + 30, {x, -6, 5}]= x^2 - x - 1; Plot[y, {x, -1, 2}] のように書いてもよい．

38

4方程式とグラフ

604020Out[ ]=-6-42-24-20-40-604.2¨

方程式の解を活用する

Solve 関数による方程式の答えは「置換規則のリストのリスト」になっている．その活用方法を紹介しよう．
[6] 置換規則の意味を復習しよう．x3 に x = 5 を代入したいときは，次のように書くのであった（2 章 2.4 節）：
In[6]:=

Out[6]=x^3 /. {x -> 5}

125[7] さきほど [1] で求めた方程式 x2 − x − 1 = 0 の解 sol を思い出そう：In[7]:=

Out[7]=sol::x ®

12

I1 -5 M>, :x ®

12

I1 +5 M>>{x → ...} の部分はひとつの置換規則だけからなるリストである．出力全体は，それがふたつあるので「置換規則のリストのリスト」となっている．なぜこのような形式が必要かは，Solve で連立方程式を解かせたときに理解できるだろう（4.3 節）．
[8] sol の解だけからなるリストを作成する：
In[8]:=

Out[8]=x /. sol
1: I1 25 M,

12

I1 +5 M>

入力式は x という文字に sol の置換規則をそれぞれ適用せよ，という意味である．

sol がリストなので，解もリストとなる．
[9] 二重括弧 [[In[9]:=Out[9]=]] （3 章 3.2 節）で sol からひとつ目の解だけを取り出す：

sol[[1]]
1I1 :x ®
25 M>

4.4

グラフのオプション

43211

Out[22]=問題 4.4 (直線 vs 円) 連立方程式 x + y = 1, x2 + y 2 = 2 を解き，陰関数としてのグラフを |x|, |y| ≤ 3 の範囲で描け．また，解について x7 + y 7 の値を求めよ．
【解答】 直線と円の交点を求める：
In[ ]:=

s = Solve[{x + y == 1, x^2 + y^2 == 2}, {x, y}]::x ®

Out[ ]=:x ®

1212I1 -3 M, y ®

I1 +3 M, y ®

1212I1 +3 M>,

I1 -3 M>>

陰関数のグラフ：In[ ]:=

ContourPlot[{x + y == 1, x^2 + y^2 == 2},{x, -3, 3}, {y, -3, 3}]32

10Out[ ]=-1-2-3-3

7-2-101237解 s を x + y に代入する．あらかじめ Simplify も施しておく：
In[ ]:=

Out[ ]=

4.4

Simplify[x^7 + y^7 /. s]
71 71,>:
88¨

グラフのオプション

Plot や ContourPlot などのグラフィクスを描画する組込み関数では，オプション(option) を指定することでグラフや軸のスタイル（線の太さや色）を変化させることができる．
ここでは Plot の場合に具体例を見ていこう．
[23] まずは Plot のデフォルトの様式：
In[23]:=

Plot[Sin[x], {x, -Pi, Pi}]

44

4

方程式とグラフ1.00.5Out[23]=-3-2

1-12

3-0.5-1.0

これにオプションを追加していってグラフを変化させてみよう．以下， Ctrl + L を使って入力の手間を省くこと（1 章 1.9 節）．
[24] オプション PlotStyle でグラフの線を緑色に：In[24]:=

Plot[Sin[x], {x, -Pi, Pi}, PlotStyle -> Green]
1.00.5Out[24]=-3-21-123-0.5-1.0[25] オプション PlotStyle でグラフの線を緑色かつ太く：
In[25]:=Plot[Sin[x], {x, -Pi, Pi}, PlotStyle -> {Green, Thick}]1.00.5Out[25]=-3-21-123-0.5-1.0[26] さらにオプション AspectRatio で縦横の縮尺を合わせる：
In[26]:=

Plot[Sin[x], {x, -Pi, Pi}, PlotStyle -> {Green, Thick},
AspectRatio -> Automatic]
1.00.5Out[26]=-3-2

1-123-0.5-1.0[27] さらにオプション Filling で x 軸と囲まれる部分を塗る：
In[27]:=

Plot[Sin[x], {x, -Pi, Pi}, PlotStyle -> {Green, Thick},
AspectRatio -> Automatic,4.6

研究：超越方程式の解の表現（おもにバージョン 9）47

Out[29]=Mathematica の 3 次元グラフは画像をマウスでドラッグすることで回転・拡大・平行移動ができる．簡単にまとめておこう：
ドラッグのみ：回転

Alt + 上下にドラッグ：

拡大・縮小

Shift + ドラッグ：

4.6

平行移動

研究：超越方程式の解の表現（おもにバージョン 9）2012 年冬に登場した Mathematica バージョン 9 では，組込み関数の動作にいくつか変更が加えられた．そのひとつが，Solve における三角関数や指数関数を含む方程式（いわゆる超越方程式）の解の表現である．いくつか具体例を紹介しておこう．
[30] たとえば方程式 sin x = 1 を解かせ，結果を ans とおく：
In[30]:=Out[30]=ans = Solve[Sin[x] == 1, x]::x ® ConditionalExpressionB

Π2+ 2 Π C@1D, C@1D Î IntegersF>>

なにやら難しいものが出てきたが，この解の意味は

x=π+ 2π C1 , ただし C1 ∈ Z2と同じである．ただし，Z は整数 (integer) 全体の集合を表す．バージョン 8 以前では，C1 = 0 の場合（x = π/2）しか解として出力されなかったので，新しいバージョ

研究

4.7

In[ ]:=49

kai = Solve[{Sin[x] + Sin[y] == Sqrt[3]/2,Cos[x] + Cos[y] == 1/2}, {x, y}]::x ® ConditionalExpression@2 Π C@1D, C@1D Î IntegersD,

Out[ ]=y ® ConditionalExpressionB:x ® ConditionalExpressionB2Π
32Π
3+ 2 Π C@2D, C@2D Î IntegersF>,+ 2 Π C@1D, C@1D Î IntegersF,y ® ConditionalExpression@2 Π C@2D, C@2D Î IntegersD>>

すなわち(x, y) = (2πC1 , 2π/3 + 2πC2 ) または (2π/3 + 2πC1 , 2πC2 )，ただし C1 , C2 ∈ Zという形の無限個の解の組が現れる．その様子を陰関数のグラフで確かめよう．解が周期的に現れる様子がわかるだろう：
In[ ]:=

ContourPlot[{Sin[x] + Sin[y] == Sqrt[3]/2
Cos[x] + Cos[y] == 1/2},{x, -2 Pi, 2 Pi}, {y, -2 Pi, 2 Pi}]
642Out[ ]=0-2-4-6-6

4.7-4-20246¨

研究• ドキュメントセンターを開き，方程式を解く組込み関数である Solve，Reduce,FindRoot について調べ，その違いを確認せよ．
• ド キ ュ メ ン ト セ ン タ ー を 開 き ，グ ラ フ を 描 く 組 込 み 関 数 で あ る Plot，ContourPlot，ContourPlot3D の詳細を調べよ．