[[FrontPage]]

#contents

2011/06/17からのアクセス回数 &counter;

ここで紹介したSageワークシートは、以下のURLからダウンロードできます。

http://www15191ue.sakura.ne.jp:8000/home/pub/5/

また、Sageのサーバを公開しているサイト(http://www.sagenb.org/, http://www15191ue.sakura.ne.jp:8000/)にユーザIDを作成することで、ダウンロードしたワークシートを
アップロードし、実行したり、変更していろいろ動きを試すことができます。



** 方程式の解法 [#ec110b1a]

数式処理システムで使いたい機能の一つに、方程式の解法があります。

方程式の解法にはsolve関数を使用します。solve関数の呼び出し形式は以下の通りです。

#pre{{
solve(解きたい方程式また方程式のリスト, 解を得る変数)			
}}


*** 一次方程式の解 [#t69fad05]

以下の一次方程式をsolveを使って解いてみましょう。
$$
f(x)=2x+1
$$
solverの戻り値は、解のリストです。一次方程式では1個の解、\(x = −\frac{1}{2}\)
が得られます。		


sageへの入力:
#pre{{
# 一次方程式の解法
var('x')
f = 2*x + 1
sol = solve(f, x); view(sol)
}}

&ref(out1.png);


*** 一次方程式のグラフ表現 [#h273aa36]

先のf(x)をyとすると、直線の式が得られます。
$$
y = 2x + 1
$$	

この直線をプロットしてみると、以下のようになります。
直線とX軸が交わる点が、方程式の解になっていることがわかります。


sageへの入力:
#pre{{
# 一次方程式のグラフ
plot(f, [x, -2, 2])
}}

&ref(out2.png);


** 2次方程式 [#z922ca78]

同様に、以下の2次方程式について見てみましょう。
$$
f(x) = x^2 + x - 1
$$		

f(x)の定義と因数分解の結果を表示します。

sageへの入力:
#pre{{
# 2次方程式
f = x^2 + x - 1
view(factor(f))
}}

&ref(out3.png);


*** 2次方程式の解とグラフ表現 [#id0224cf]

solve関数の解は、2個の実数が求まります。

この場合のグラフは、X軸で交わる点が2個存在します。

sageへの入力:
#pre{{
# 2次方程式の解
sol = solve(f, x); view(sol)
}}

&ref(out4.png);


sageへの入力:
#pre{{
# 2次方程式のグラフ
plot(f, [x, -2, 2])
}}

&ref(out5.png);


*** 重根の場合 [#u5029954]

2次方程式の解が同じ値を持つ場合(重根)の場合には、X軸との交点が1個となります。

重根の場合、解をaとすると因数分解の形は、以下のようになります。
$$
f(x) = (x -a)^2
$$		

sageへの入力:
#pre{{
# 重根の場合
f = x^2 - 2*x + 1
view(factor(f))
}}

&ref(out6.png);


sageへの入力:
#pre{{
# 2次方程式の解(重根の場合)
sol = solve(f, x); view(sol)
}}

&ref(out7.png);


sageへの入力:
#pre{{
# 2次方程式のグラフ(重根の場合)
plot(f, [x, -2, 2])
}}

&ref(out8.png);


*** 複素数の場合 [#u8f8f839]

2次方程式の解が複素数の場合には、グラフはX軸と交わりません。

sageへの入力:
#pre{{
# 複素数
f = x^2 + x + 1
view(factor(f))
}}

&ref(out9.png);


sageへの入力:
#pre{{
# 2次方程式の解
sol = solve(f, x); view(sol)
}}

&ref(out10.png);


sageへの入力:
#pre{{
# 2次方程式のグラフ
plot(f, [x, -2, 2])
}}

&ref(out11.png);


*** 多項式と数値解 [#q831a9d9]

多項式の例として、以下の3次多項式をみてみましょう。
$$
f(x) = x^3 - 2 x + 4
$$

solveの結果は、1個の実数と2個の複素数が求まります。ここから予想されるグラフの形は、X軸と交わる点が1個の3次曲線です。

このように関数の解を求めたり、グラフと解の関係を理解する上で、Sageはとても有効です。


sageへの入力:
#pre{{
# 3次方程式
var('x')
f = x^3-2*x+4
view(factor(f))
}}

&ref(out12.png);


sageへの入力:
#pre{{
# 3次方程式の解
sol = solve(f, x); view(sol)
}}

&ref(out13.png);


sageへの入力:
#pre{{
# 3次方程式のグラフ
plot(f, -2.5, 2.5)
}}

&ref(out14.png);


*** 数値解法 [#ae06cd27]

solveが解析的に解を求めたのに対し、与えられた範囲で解となる点を数値解法で求める
関数が、find_rootです。

find_rootの呼び出し形式は以下の通りです。fには1変数の関数を与えます。
#pre{{
find_root(f, 計算開始点, 計算終了点)
}}		

先の関数f(x)をfind_rootで求めると、解析解(x = 2)に非常に近い値が求まります。
$$
f(x) = x^3 - 2 x + 4
$$

sageへの入力:
#pre{{
# グラフから-3から3の範囲で数値解を求める
find_root(f, -3, 3)
}}
sageの出力:
#pre{{
-1.9999999999999949
}}


*** 連立方程式 [#q5349683]

連立方程式の解とグラフの関係をSageを使ってみてみましょう。

先に解いた一次方程式と2次方程式を1つの連立方程式にして解いてみましょう。
$$
\left\{ \begin{eqnarray}
y & = & 2 x + 1 \\
y & = & x^2 + x - 1
\end{eqnarray} \right.
$$

方程式のリストをsolve関数に与えることで、連立方程式の解を得ることができます。

グラフから1次曲線と2次曲線の交点(-1, -1), (2, 5)が、連立方程式の解となっていることが分かります。


sageへの入力:
#pre{{
var('x y')
eq = [y == 2*x + 1, y == x^2 + x - 1]
# 解を求める
view(solve(eq, [x, y]))
# グラフから解を求める
p1 = plot(x^2 + x - 1, [x, -2, 3])
p2 = plot(2*x + 1, [x, -2, 3])
(p1+p2).show(ymin=-3, ymax=8)    # 不等号の例と描画範囲を合せた
}}

&ref(out15.png);


** 不等式とグラフ [#ebf86f29]

region_plot関数を使うことで不等式の範囲をグラフで表示することができます。

region_plotの引数には、xとy2変数の関係式または2変数を引数に持つ関数とx変数とy変数の
描画範囲を指定します。

以下に1次不等式の例を示します。
$$
y \le 2 x + 1
$$

sageへの入力:
#pre{{
(x, y) = var('x y')
f(x, y) = y <= 2*x + 1
region_plot(f(x, y), [x, -2, 3], [y, -3, 8])
}}

&ref(out16.png);


incol, outcolで領域内、領域外の色を指定したり、bordercolで境界線の色を指定することができます。

以下では、2次不等式にincolに薄い青、境界線に灰色を指定して表示した例を示します。
$$
y > x^2 + x -1
$$		

sageへの入力:
#pre{{
g(x, y) = y > x^2 + x - 1
region_plot(g(x, y), [x, -2, 3], [y, -3, 8], incol='lightblue', bordercol='gray')
}}

&ref(out17.png);


*** 連立不等式のグラフ [#jef588e0]

region_plotに複数の式または関数をリストで与えることによって、連立不等式の
範囲を表示することができます。

以下に、先の2つの不等式を組み合わせた連立不等式の例を示します。
$$
\left\{ \begin{eqnarray}
y & \le & 2 x + 1 \\
y & > & x^2 + x - 1
\end{eqnarray} \right.
$$


sageへの入力:
#pre{{
region_plot([f, g], [x, -2, 3], [y, -3, 8])
}}

&ref(out18.png);


** コメント [#s07eb9eb]
#vote(おもしろかった[4],そうでもない[0],わかりずらい[0])
#vote(おもしろかった[5],そうでもない[0],わかりずらい[0])

皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc