sage/text/数の計算・基本的な関数
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
#contents
2011/06/16からのアクセス回数 &counter;
ここで紹介したSageワークシートは、以下のURLからダウンロー...
http://www15191ue.sakura.ne.jp:8000/home/pub/3/
また、Sageのサーバを公開しているサイト(http://www.sagenb...
アップロードし、実行したり、変更していろいろ動きを試すこ...
** 数の計算・基本的な関数 [#y45f4449]
*** よく使われる定数 [#t2806781]
数式でよく使われる定数をSageで使うには以下の様に表します。
sageへの入力:
#pre{{
hdr=["円周率", "自然体数の底", "虚数単位", "無限大"]
sts=[pi, e, I, oo]
html.table([(h, st, "%s"%st) for (h, st) in zip(hdr, sts)])
}}
&ref(out1.png);
*** 基本的な計算 [#w3be92bb]
四則演算をはじめ、Sageで使われる基本的な計算の表現方法を...
sageへの入力:
#pre{{
# よく使われる表現
var('a b x n')
hdr=["積", "商", "累乗", "平方根", "n乗根", "絶対値", "自...
sts=[a*b, a/b, a^b, sqrt(x), x^(1/n), abs(x), log(x), fac...
html.table([(h, st, "%s"%st) for (h, st) in zip(hdr, sts)])
}}
&ref(out2.png);
1から10までの和は55ですが、これをリストとsum関数を使って...
以下の様になります。
sageへの入力:
#pre{{
# 1から10までの和を計算
print 1+2+3+4+5+6+7+8+9+10
# リスト使って計算
L = range(1,11); print L
print sum(L) # リストLの和を求める
}}
sageの出力:
#pre{{
55
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55
}}
リスト内包を使うと簡単にリストの要素を変更することができ...
先ほどのリストLの要素を自乗に変えて、和を求めてみましょう。
#pre{{
リスト内包の書式
[ 式 for 変数 in リスト ]
}}
sageへの入力:
#pre{{
L2 = [i^2 for i in L]; print L2
print sum(L2)
}}
sageの出力:
#pre{{
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
385
}}
sumと並んでリストの要素の積を求めるprodもよく使われます。
1から5までの積をprodを使って計算してみましょう。
今回は、range関数の代わりにジェネレータを使って1から5ま...
リストを生成し、計算してみます。
#pre{{
(1..5)
}}
sageへの入力:
#pre{{
# 1から5までの積を計算
print 1*2*3*4*5
# リスト生成をまとめて
print prod(1..5)
}}
sageの出力:
#pre{{
120
120
}}
** 式の計算・簡単化 [#jd773f81]
次に中学で習った式の因数分解や展開もSageを使うと簡単に計...
*** 展開 [#la773368]
以下の関数f1をSageを使って展開してみます。展開にはexpand...
$$
f1(x) = (x - 1)(x^2 -1)
$$
sageへの入力:
#pre{{
f1 = (x - 1)*(x^2 - 1); view(f1) # f1を定義
f2 = expand(f1); view(f2) # f1を展開し、f2に代入
}}
&ref(out3.png);
多項式の係数は、coefficientsやcoeff関数で取得できます。
以下に、f2の係数をcoeeficents関数で取得する方法とxの2次の...
sageへの入力:
#pre{{
# 多項式の係数
print f2.coefficients(x) # 変数の[係数, 次数]のペアの...
print f2.coeff(x, 2) # 変数と次数を指定して係数を...
}}
sageの出力:
#pre{{
[[1, 0], [-1, 1], [-1, 2], [1, 3]]
-1
}}
*** 因数分解 [#ra76fb24]
f1を展開した結果f2を因数分解してみましょう。因数分解にはf...
結果がf1と異なりますが、
$$
(x^2 - 1) = (x - 1)(x + 1)
$$
の関係から、正しい結果になっていることが分かります。
sageへの入力:
#pre{{
view(factor(f2)) # f2を因数分解する
}}
&ref(out4.png);
*** 部分分数分解 [#cdb0b63a]
分数で表される式の積分やラブラス逆変換では部分分数分解を...
以下の様な関数f3を因数分解して、分数式f4に変えます。
$$
f3(x) = \frac{1}{(x - 2)} + \frac{1}{(x + 2)}
$$
sageへの入力:
#pre{{
# 分数の因数分解
f3 = 1/(x+2)+1/(x-2); view(f3)
}}
&ref(out5.png);
式の部分分数分解には、prtial_fraction()メソッドを使います...
sageへの入力:
#pre{{
f4 = factor(f3); view(f4) # 分数式f3の因数分解
view(f4.partial_fraction()) # 部分分数分解
}}
&ref(out6.png);
*** 式の整理 [#lc12be6a]
式を整理して簡単化する関数として、simplifyがあります。sim...
f1のような因数分解で整理されて式の場合には結果が変わりま...
さらに突っ込んだ整理をする場合には、simplify_fullメソッド...
sageへの入力:
#pre{{
view(simplify(I + x -x)) # 簡単化で不要な項を...
view(simplify(f1)) # 簡単化ではf1はその...
view(f1.simplify_full()) # simplify_fullメソ...
}}
&ref(out7.png);
*** 三角関数 [#t9e4d1c9]
三角関数も数式として計算するため、\( sin (\pi/4) \)も数値...
\( \frac{1}{2} \sqrt{2} \)の式が返ってきます。
値を得るには、N関数を使用します。
sageへの入力:
#pre{{
print sin(pi/4), N(sin(pi/4))
}}
sageの出力:
#pre{{
1/2*sqrt(2) 0.707106781186548
}}
また三角関数への入力単位は度ではなく、ラジアンで指定しま...
度とラジアンの変換には、以下の様な関数rad, degを定義する...
sageへの入力:
#pre{{
# 度とラジアンの変換関数
rad(x) = x*pi/180
deg(x) = x*180/pi
}}
sageへの入力:
#pre{{
print sin(rad(45)), sin(pi/4)
print atan(1), deg(atan(1))
}}
sageの出力:
#pre{{
1/2*sqrt(2) 1/2*sqrt(2)
1/4*pi 45
}}
*** 三角関数の簡単化 [#t88e774a]
三角関数や指数関数を含む式の簡単化には simplify_fullメソ...
例として、sin関数の倍角公式をsimplify_fullメソッドで求め...
sageへの入力:
#pre{{
# 倍角公式
fs = sin(2*x); view(fs)
view(fs.simplify_full())
}}
&ref(out8.png);
更に、simplify_fullでは三角関数の公式を活用して式を整理し...
以下の例では、以下の三角関数の公式を使って簡単化していま...
$$
cos^2 x + sin^2 x = 1
$$
sageへの入力:
#pre{{
f4 = cos(x)^2-sin(x)^2; view(f4) # cos(x)^2 + sin(x...
view(f4.simplify_full()) # 簡単化する
}}
&ref(out9.png);
*** 導関数 [#b4e05186]
高校で習った、導関数をSageを使って導いてみましょう。
関数f(x)と平均変化率g(x)を以下の様に定義します。
$$
f(x) = \frac{1}{2} x^3
$$
$$
g(x)= \frac{f(x+h)−f(x)}{h}
$$
変数x, hと関数f, gをSageで定義します。
sageへの入力:
#pre{{
x, h = var('x h')
f(x) = x^3/2; view(f)
}}
&ref(out10.png);
sageへの入力:
#pre{{
# 平均変化率
g =(f(x + h) - f(x))/h; view(g)
}}
&ref(out11.png);
gを展開して整理すると以下の様になり、h→0の極値(limit)を...
sageへの入力:
#pre{{
# 展開して整理すると
g1 = g.simplify_full(); view(g1)
}}
&ref(out12.png);
求める導関数は、以下の様になります。
sageへの入力:
#pre{{
# h→0の極値を取ると導関数が求まる
g2 = limit(g1, h=0); view(g2)
}}
&ref(out13.png);
*** 特殊な関数のリミット [#y4734f7b]
次のような特殊な関数fを考えます。
$$
f(x) = \frac{sin(x)}{x}
$$
この関数にx=0を代入するとゼロ割のエラーとなりますが、limi...
Sageではグラフの表示でも極値をきちんと計算しているので、...
sageへの入力:
#pre{{
# 特殊な関数のリミット
f = sin(x)/x
print f(x=0)
}}
sageの出力:
#pre{{
Traceback (most recent call last):
...
File "expression.pyx", line 3503, in sage.symbolic.expr...
RuntimeError: power::eval(): division by zero
}}
sageへの入力:
#pre{{
limit(f, x=0)
}}
sageの出力:
#pre{{
1
}}
sageへの入力:
#pre{{
plot(f, [x, -10, 10])
}}
&ref(out14.png);
*** 関係式 [#d5e6cf32]
Sageでの関係式の扱い方を以下の関係式eqを例に示します。
$$
x + 2 \le 0
$$
これをSageで表現すると以下の様になります。
sageへの入力:
#pre{{
eq = x + 2 <= 0
}}
関係式から左辺、等号、不等号のオペレータ、左辺を取得する...
sageへの入力:
#pre{{
print eq.lhs() # 左辺
print eq.operator() # 等号、不等号などのオペレータ
print eq.rhs() # 右辺
}}
sageの出力:
#pre{{
x + 2
<built-in function le>
0
}}
** コメント [#l8cd78a3]
#vote(おもしろかった[13],そうでもない[0],わかりずらい[3])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[FrontPage]]
#contents
2011/06/16からのアクセス回数 &counter;
ここで紹介したSageワークシートは、以下のURLからダウンロー...
http://www15191ue.sakura.ne.jp:8000/home/pub/3/
また、Sageのサーバを公開しているサイト(http://www.sagenb...
アップロードし、実行したり、変更していろいろ動きを試すこ...
** 数の計算・基本的な関数 [#y45f4449]
*** よく使われる定数 [#t2806781]
数式でよく使われる定数をSageで使うには以下の様に表します。
sageへの入力:
#pre{{
hdr=["円周率", "自然体数の底", "虚数単位", "無限大"]
sts=[pi, e, I, oo]
html.table([(h, st, "%s"%st) for (h, st) in zip(hdr, sts)])
}}
&ref(out1.png);
*** 基本的な計算 [#w3be92bb]
四則演算をはじめ、Sageで使われる基本的な計算の表現方法を...
sageへの入力:
#pre{{
# よく使われる表現
var('a b x n')
hdr=["積", "商", "累乗", "平方根", "n乗根", "絶対値", "自...
sts=[a*b, a/b, a^b, sqrt(x), x^(1/n), abs(x), log(x), fac...
html.table([(h, st, "%s"%st) for (h, st) in zip(hdr, sts)])
}}
&ref(out2.png);
1から10までの和は55ですが、これをリストとsum関数を使って...
以下の様になります。
sageへの入力:
#pre{{
# 1から10までの和を計算
print 1+2+3+4+5+6+7+8+9+10
# リスト使って計算
L = range(1,11); print L
print sum(L) # リストLの和を求める
}}
sageの出力:
#pre{{
55
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
55
}}
リスト内包を使うと簡単にリストの要素を変更することができ...
先ほどのリストLの要素を自乗に変えて、和を求めてみましょう。
#pre{{
リスト内包の書式
[ 式 for 変数 in リスト ]
}}
sageへの入力:
#pre{{
L2 = [i^2 for i in L]; print L2
print sum(L2)
}}
sageの出力:
#pre{{
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
385
}}
sumと並んでリストの要素の積を求めるprodもよく使われます。
1から5までの積をprodを使って計算してみましょう。
今回は、range関数の代わりにジェネレータを使って1から5ま...
リストを生成し、計算してみます。
#pre{{
(1..5)
}}
sageへの入力:
#pre{{
# 1から5までの積を計算
print 1*2*3*4*5
# リスト生成をまとめて
print prod(1..5)
}}
sageの出力:
#pre{{
120
120
}}
** 式の計算・簡単化 [#jd773f81]
次に中学で習った式の因数分解や展開もSageを使うと簡単に計...
*** 展開 [#la773368]
以下の関数f1をSageを使って展開してみます。展開にはexpand...
$$
f1(x) = (x - 1)(x^2 -1)
$$
sageへの入力:
#pre{{
f1 = (x - 1)*(x^2 - 1); view(f1) # f1を定義
f2 = expand(f1); view(f2) # f1を展開し、f2に代入
}}
&ref(out3.png);
多項式の係数は、coefficientsやcoeff関数で取得できます。
以下に、f2の係数をcoeeficents関数で取得する方法とxの2次の...
sageへの入力:
#pre{{
# 多項式の係数
print f2.coefficients(x) # 変数の[係数, 次数]のペアの...
print f2.coeff(x, 2) # 変数と次数を指定して係数を...
}}
sageの出力:
#pre{{
[[1, 0], [-1, 1], [-1, 2], [1, 3]]
-1
}}
*** 因数分解 [#ra76fb24]
f1を展開した結果f2を因数分解してみましょう。因数分解にはf...
結果がf1と異なりますが、
$$
(x^2 - 1) = (x - 1)(x + 1)
$$
の関係から、正しい結果になっていることが分かります。
sageへの入力:
#pre{{
view(factor(f2)) # f2を因数分解する
}}
&ref(out4.png);
*** 部分分数分解 [#cdb0b63a]
分数で表される式の積分やラブラス逆変換では部分分数分解を...
以下の様な関数f3を因数分解して、分数式f4に変えます。
$$
f3(x) = \frac{1}{(x - 2)} + \frac{1}{(x + 2)}
$$
sageへの入力:
#pre{{
# 分数の因数分解
f3 = 1/(x+2)+1/(x-2); view(f3)
}}
&ref(out5.png);
式の部分分数分解には、prtial_fraction()メソッドを使います...
sageへの入力:
#pre{{
f4 = factor(f3); view(f4) # 分数式f3の因数分解
view(f4.partial_fraction()) # 部分分数分解
}}
&ref(out6.png);
*** 式の整理 [#lc12be6a]
式を整理して簡単化する関数として、simplifyがあります。sim...
f1のような因数分解で整理されて式の場合には結果が変わりま...
さらに突っ込んだ整理をする場合には、simplify_fullメソッド...
sageへの入力:
#pre{{
view(simplify(I + x -x)) # 簡単化で不要な項を...
view(simplify(f1)) # 簡単化ではf1はその...
view(f1.simplify_full()) # simplify_fullメソ...
}}
&ref(out7.png);
*** 三角関数 [#t9e4d1c9]
三角関数も数式として計算するため、\( sin (\pi/4) \)も数値...
\( \frac{1}{2} \sqrt{2} \)の式が返ってきます。
値を得るには、N関数を使用します。
sageへの入力:
#pre{{
print sin(pi/4), N(sin(pi/4))
}}
sageの出力:
#pre{{
1/2*sqrt(2) 0.707106781186548
}}
また三角関数への入力単位は度ではなく、ラジアンで指定しま...
度とラジアンの変換には、以下の様な関数rad, degを定義する...
sageへの入力:
#pre{{
# 度とラジアンの変換関数
rad(x) = x*pi/180
deg(x) = x*180/pi
}}
sageへの入力:
#pre{{
print sin(rad(45)), sin(pi/4)
print atan(1), deg(atan(1))
}}
sageの出力:
#pre{{
1/2*sqrt(2) 1/2*sqrt(2)
1/4*pi 45
}}
*** 三角関数の簡単化 [#t88e774a]
三角関数や指数関数を含む式の簡単化には simplify_fullメソ...
例として、sin関数の倍角公式をsimplify_fullメソッドで求め...
sageへの入力:
#pre{{
# 倍角公式
fs = sin(2*x); view(fs)
view(fs.simplify_full())
}}
&ref(out8.png);
更に、simplify_fullでは三角関数の公式を活用して式を整理し...
以下の例では、以下の三角関数の公式を使って簡単化していま...
$$
cos^2 x + sin^2 x = 1
$$
sageへの入力:
#pre{{
f4 = cos(x)^2-sin(x)^2; view(f4) # cos(x)^2 + sin(x...
view(f4.simplify_full()) # 簡単化する
}}
&ref(out9.png);
*** 導関数 [#b4e05186]
高校で習った、導関数をSageを使って導いてみましょう。
関数f(x)と平均変化率g(x)を以下の様に定義します。
$$
f(x) = \frac{1}{2} x^3
$$
$$
g(x)= \frac{f(x+h)−f(x)}{h}
$$
変数x, hと関数f, gをSageで定義します。
sageへの入力:
#pre{{
x, h = var('x h')
f(x) = x^3/2; view(f)
}}
&ref(out10.png);
sageへの入力:
#pre{{
# 平均変化率
g =(f(x + h) - f(x))/h; view(g)
}}
&ref(out11.png);
gを展開して整理すると以下の様になり、h→0の極値(limit)を...
sageへの入力:
#pre{{
# 展開して整理すると
g1 = g.simplify_full(); view(g1)
}}
&ref(out12.png);
求める導関数は、以下の様になります。
sageへの入力:
#pre{{
# h→0の極値を取ると導関数が求まる
g2 = limit(g1, h=0); view(g2)
}}
&ref(out13.png);
*** 特殊な関数のリミット [#y4734f7b]
次のような特殊な関数fを考えます。
$$
f(x) = \frac{sin(x)}{x}
$$
この関数にx=0を代入するとゼロ割のエラーとなりますが、limi...
Sageではグラフの表示でも極値をきちんと計算しているので、...
sageへの入力:
#pre{{
# 特殊な関数のリミット
f = sin(x)/x
print f(x=0)
}}
sageの出力:
#pre{{
Traceback (most recent call last):
...
File "expression.pyx", line 3503, in sage.symbolic.expr...
RuntimeError: power::eval(): division by zero
}}
sageへの入力:
#pre{{
limit(f, x=0)
}}
sageの出力:
#pre{{
1
}}
sageへの入力:
#pre{{
plot(f, [x, -10, 10])
}}
&ref(out14.png);
*** 関係式 [#d5e6cf32]
Sageでの関係式の扱い方を以下の関係式eqを例に示します。
$$
x + 2 \le 0
$$
これをSageで表現すると以下の様になります。
sageへの入力:
#pre{{
eq = x + 2 <= 0
}}
関係式から左辺、等号、不等号のオペレータ、左辺を取得する...
sageへの入力:
#pre{{
print eq.lhs() # 左辺
print eq.operator() # 等号、不等号などのオペレータ
print eq.rhs() # 右辺
}}
sageの出力:
#pre{{
x + 2
<built-in function le>
0
}}
** コメント [#l8cd78a3]
#vote(おもしろかった[13],そうでもない[0],わかりずらい[3])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc