新規にノートブックを作成するには、「Files」タグの右端にある「New」プルダウンメニューから「SageMath 7.2」を選択します。
In[ ]: と表示されている入力用セルに式を入力して、その値を評価してみましょう。
以下の2行を入力して、シフトキーを押さえながらリターンキーを押してください(以下shift-returnと表します)。または既に入力されているIn [n]のセルの式をクリックして選択した後、shift-returnを押します。
5/6と数値ではなく、分数で返ってくるところが数式システムならではの芸当です。
a = 1/2 + 1/3
a
5/6
複雑な数式を入力すると、テキストベースの結果では分かりづらいです。そんな時には、show関数を使って表示すると数式がきれいに表示されます。
show(a)
中学の数学に出てきた多項式をSageで処理してみましょう。
以下の様な3次多項式を持つ関数$f(x)$をSageで定義します。 $$ f(x) = x^3 - x^2 - 2x $$
最初に変数xをvar関数で定義します。次に上記の多項式を変数fにセットします。
x = var('x')
f(x) = x^3 - x^2 - 2*x
show(f(x))
多項式の因数分解には、factor関数を使います。
因数分解の結果から、関数fはx=-1, x=0, x=2でX軸と交わります。
factor(f)
(x + 1)*(x - 2)*x
先ほどの3次多項式$f(x)$をプロットして、X軸と交差する位置を確認してみましょう。
plot関数には、表示したい関数とその範囲を指定します。ここではx=-2.5からx=2.5の範囲を指定します。
Sageの図化機能を使うことで簡単に$f(x)$の特徴を理解することができます。
一番最初は、以下の様なワーニングがでますが、2回目以降はでません。
/usr/lib/sagemath/local/lib/python2.7/site-packages/matplotlib-1.5.1-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
plot(f, [x, -2.5, 2.5], figsize=5)
3次多項式$f(x)$の極は、関数の接線の傾きが0(傾きがX軸と平行)の場所です。 関数の極を求めるには$f(x)$を微分し、その値が0となるxを求めます。
関数の微分には、diff関数を使います。diff関数には、微分したい関数とその変数を引数とします。
df(x) = diff(f, x)
show(df(x))
関数solverは関数が0となる変数の値を求めます。solverの引数は、解を求めたい関数とその変数を指定します。
関数fとそれを微分した関数dfのグラフを比べると関数dfがX軸と交わる点で、 関数fの接線の傾きが0となっていることが見て取れます。
sol = solve(df, x)
show(sol)
plot(df, [x, -2.5, 2.5], figsize=5)
Sageは数式処理システムなので、関数solverの結果が数式で返ってきます。 数値解が欲しい場合にはfind_root関数を使います。
このようにSageを使って関数fをプロットしたり、解を求めることによって関数fの理解を深めることができます。
print( find_root(df, -2, 0), find_root(df, 0, 2) )
(-0.5485837703548542, 1.2152504370215302)