| Download
All published worksheets from http://sagenb.org
Project: sagenb.org published worksheets
Views: 168703Image: ubuntu2004
Hiroshi TAKEMOTO([email protected])
計算してみよう
変数の宣言と値の代入
これまで式の変数は宣言しないで使っていましたが、正式には変数はvar関数で宣言して 使います。 変数の値を指定して、関数の返す値を調べるには、f1(x=1.5)のように式を表す変数にカッコを付けて、x=1.5と値を指定するとその時の関数の値が表示されます。
0.625000000000000
変数をx, yと複数存在する場合の例をです。f5にを定義し、f5(x=2, y=3)でx=2, y=3の時の値を出力します。
7
規則の代入
規則の代入は方法は、subs_exprを使います。x^2 + 1
w + 1
関数の定義
sageで関数を定義する方法が2つあります。- pythonの関数を定義する
- lambda式を使って関数を定義する
python関数の定義
手続き的な関数を定義する場合には、python関数を使うと便利です。pythonでは
def 関数名(引数のリスト): 関数の本体のように定義します。
以下にを返す関数cubeをpythonの関数を使って定義しました。
8
(x + y)^3
lambda関数の定義
つぎにlambda式を使って関数を定義する方法を示します。 のように式で表現できる場合には、lambda関数が便利です。lambda 変数のリスト: 式のように定義します。 先ほどと同じを返す関数の例を以下に示します。
8
(x + y)^3
方程式の解法
数式処理で助かる機能は、方程式の解法でしょう。方程式の解法は、solve関数を使って以下のように行います。
solve(解放したい関数また関数のリスト, 解を得る変数)例として、の一次方程式を解いてみます。結果からが得られたので、を代入して解の値を取得します。
[x == -b/a]
-1/2
これだと、解から式をもう一度入力しなくてはなりません。そこで、も変数として関数を定義し、solveでをセットするようにします。こうすれば簡単に解の値が確認できます。
[x == -b/a]
[x == (-1/2)]
解の値がほしいときには、find_root関数で数値解析で値を計算します。
find_root(関数, 計算する変数の開始値、終了値)先ほどの関数の解をの範囲で数値解析します。
-0.5
多項式の解
一次方程式ではあまりに簡単なので、多項式の解を求めてみます。
のプロットズを以下に表示します。軸と交差しているのはです。-1と1付近に極値があります。
solveの結果、を得ました。
[x == (-I + 1), x == (I + 1), x == -2]
因数分解の結果からも、この解が正しいことがわかります。
(x + 2)*(x^2 - 2*x + 2)
plotで可視化することでfind_rootでの計算範囲を大まかに把握することができます。
find_rootの値は、以下の通りです。
-1.9999999999999949
連立方程式の解
同様にsolveに関数に式のリストを与えることで、連立方程式の解を得ることができます。
の解を例に以下に示します。
[[x == 2, y == 1], [x == 0, y == -1]]
上記関数のプロット結果は、以下のとおりです。
もう一つ、
の解を例に以下に示します。
[[x == 1, y == 0], [x == 0, y == -1]]
この関数をプロットで、implicit_plotを使って関係式の形をそのまま使ってプロットしてみます。
円のなので、aspect_ratio=1としました。
導関数
高校で習った、導関数をsageを使って導いてみましょう。関数とします。
平均変化率は、を以下のように定義します。
1/2*((h + x)^3 - x^3)/h
を展開し、整理すると
1/2*h^2 + 3/2*h*x + 3/2*x^2
となります。
ここで、の極値を取ったものが求める導関数です。
3/2*x^2
結果は、をで微分したものと同じになります。
3/2*x^2
微分
高校で習う微分の公式は、
sageの微分diff関数は、以下のように使います。
diff(関数, 微分する変数)上記公式のsageで結果は、以下のようになります。
0
n*x^(n - 1)
sageで変数xの関数fを以下のように定義し微分すると、は以下のようにD[0](f)(x)となります。
x = var('x') f = function('f', x)これで変数xの関数fを定義したことになります。
D[0](f)(x)
このD[0](f)をと読み替えると、
- $(f(g(x)))'= f'(g(x))g'(x)
c*D[0](f)(x)
D[0](f)(x) + D[0](g)(x)
D[0](f)(x)*g(x) + f(x)*D[0](g)(x)
(D[0](f)(x)*g(x) - D[0](g)(x)*f(x))/g(x)^2
-D[0](g)(x)/g(x)^2
D[0](f)(g(x))*D[0](g)(x)
いろんな関数の微分
以下の関数を微分した結果を示します。6*(x^2 + 1)^2*x
3*sin(x)^2*cos(x)
1/sqrt(-x^2 + 1)
e^x
1/x
微分の応用
微分の応用として、接線の方程式とその法線を計算してみましょう。 の接線は、
となります。 また、法線は、
となります。
微分した式をgとし、x=1での接線と法線を計算し、プロットしてみます。
e^(-x^2)
-2*x*e^(-x^2)
-2*e^(-1)
積分
sageでは積分は、integrate関数で計算します。integrate(被積分関数, 積分変数) また integrate(被積分関数, 積分変数, 積分範囲) とすると定積分を計算します。を計算した後、その微分を求めています。
1/2*x^2
x
以下の関数を積分した結果示します。
- 定数
c*x
log(x)
e^x
x*log(x) - x
-cos(x)
log(f(x))
定積分
次に定積分の計算を示します。1
もう一つ
の例を示し、
-2*cos(3) + 11
上記結果を数値とすると以下のようになります。
12.9799849932009
数値積分
数値積分は、numerical_integral関数を使って計算します。numerical_integral(被関分館数, 積分範囲)で戻り値は、積分結果と誤差を返します。
以下は、を0からで数値積分した結果です。
(1.9999999999999998, 2.2204460492503128e-14)
[removed]
積分の応用
積分の応用例として、サイクロイドの計算をしてみます。サイクロイドは、tをパラメータとして、以下のような式で表されます。
この曲線の長さを計算すると、
となります。解析解では、この結果は16となります。
残念ながら、定積分は結果がでませんでした。
integrate(sqrt(4*(cos(t) - 1)^2 + 4*sin(t)^2), t, 0, 2*pi)
数値積分で、期待した結果となりました。
(15.999999999999998, 1.7763568394002502e-13)