FrontPage

2011/06/15からのアクセス回数 2191

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

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

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

表記方法

Sageを使用する際に知っていると便利な約束事(表記方法)があります。 代表的なものについて、以下に示します。

python文法

Sageは、pythonのインタプリタを使っているため、pythonの構文がそのまま使えます。

pythonでのコメント(実行に影響しない注釈)は、#記号から行末がコメントとして扱われます。 コメントには日本語も使用できますので、式の説明やメモを入れておくと後で役立ちます。

sageへの入力:

# print 1 + 3 この行はコメントです。
print 1 + 3 + 5

sageの出力:

9

複数の式を1行にまとめる

複数の式を1行にまとめるには、式を;(セミコロン)で区切ります。

セルを評価するとprint文やshowコマンドの結果、それと一番最後の結果が表示されます。 しかし、最後の代入文の結果は表示されないため、例のように;(セミコロン)の後に変数名 を入力します。

sageへの入力:

b = 1 + 3; print b # 複数の式を1行にまとめるには、式を;(セミコロン)で区切ります。
a = 1; a # 代入の結果は、値を返さないので;で区切って変数名を書いて代入結果を表示します。

sageの出力:

4
1

python変数への代入

計算結果をpython変数に代入するときには、= (イコール)を使います。 python変数と断っているのは、sageの数式で使われる変数と区別するためです。

aの値を数値として出力するには、N関数またはnメソッドを使います。

sageへの入力:

a = 1/2 + 1/3; print a
N(a)

sageの出力:

5/6
0.833333333333333

タプル

タプルは、カンマで区切られた値からなるシーケンスデータ型です。 タプルの出力は()カッコで括られたカンマ区切りの形式で表示されます。

タプルの変数への代入をタプル・パッキングと呼び、逆にタプルから変数への代入をシーケンス・アンパッキングと呼びます。 シーケンス・アンパッキングは変数への一括代入に使用すると便利です。

リストや辞書と合わせるために、あえてカッコ()をつけてタプルを使用しることにします。

sageへの入力:

t = (1, 2, 3); print t       # 変数tへのタプル(1, 2, 3)の代入(タプル・パッキング)
(x, y, z) = t; print x, y, z # タプルtから変数x, y, zへの代入(シーケンス・アンパッキング)

sageの出力:

(1, 2, 3)
1 2 3

リスト

sageでは、リストがもっとも重要なデータ構造になります。 タプルとは異なり、リストでは要素の参照の他に、要素の追加、削除、結合などの操作ができます。

sageへの入力:

L1 = [1, 2, 3]; print L1 # リストの生成
L2 = [9, 8, 7]
L1.append(4);   print L1 # 要素の追加
print L1[2]              # 要素の取得
print L1[1:3]            # 部分リストの取得
print L1[-1]             # 最後の要素は、-1で参照
print L1 + L2            # リストの結合

sageの出力:

[1, 2, 3]
[1, 2, 3, 4]
3
[2, 3]
4
[1, 2, 3, 4, 9, 8, 7]

辞書

辞書、別名「連想配列」と言われ、リストのインデックスの代わりにキーで値を取得することが できます。

  • 辞書の生成:キーと値のペアを:(コロン)ではさみ,(カンマ)で連結し{}カッコで括ります。
  • 要素の取得;[]カッコにキーを指定して要素を取得します。

sageへの入力:

ages = {'John':24, 'Sarah':28, 'Mike':31}; # 辞書の生成
print ages                                 # 辞書の出力
print ages['Sarah']                        # 要素の取得

sageの出力:

{'Sarah': 28, 'Mike': 31, 'John': 24}
28

変数の宣言

sageの式で変数として認識させるには変数をvar関数で宣言しなくてなりません。変数の宣言は、

var('変数名')

複数の変数を宣言する場合には、スペースを空けて指定します。 宣言される変数を参照したりする場合には、

x, y = var('x y')

のようにpython変数x, yに宣言したsage変数を代入します。

関数の定義

sageの関数には、以下の3種類の指定方法があります。必要に応じて使い分けて下さい。

  • シンボリック関数: f(x) = 式の形式で定義します。
  • python関数: pythonのdefを使って関数を定義します。
  • lambda関数: lambda 変数のリスト: 式の形式で定義します。 例では、\(sqrt(x)=x^{\frac{1}{2}}\)を返す関数をシンボリック関数、python関数、lambda関数を それぞれ symRoot, pyRoot, lamRoot として定義し、その使い方を説明します。 当然すべて、同じ結果になります。

sageへの入力:

# シンボリック関数
symRoot(x) = x^(1/2)
# python関数
def pyRoot(x):
    return x^(1/2)
# lambda関数
lamRoot = lambda x: x^(1/2)
# 関数の呼び出し
print symRoot(2), pyRoot(2), lamRoot(2)
# 数式が引数の場合
x, y = var('x y')
print symRoot(x+y), pyRoot(x+y), lamRoot(x+y)

sageの出力:

sqrt(2) sqrt(2) sqrt(2)
sqrt(x + y) sqrt(x + y) sqrt(x + y)

値の代入

変数の値を指定して関数の値を取得するには、以下の3つの方法があります。

  • 値を指定したい変数を引数とするシンボリック関数を定義する
  • 関数の引数にx=2のように変数に値を代入して参照する
  • subs関数を使って値を代入する

以下の例では\(f(x) = a x + b\)の関数をf(x)、g(x, a, b)で定義した場合のa, bの値の代入方法 を示しています。subsの場合には、a=2, b=1のようにカンマで区切って値をセットする方法と辞書形式 で与える方法が使用できます。var関数で変数を定義すればa=c, b=dのように別の変数への置換も可能です。

sageへの入力:

# 関数f, g、変数x, a, bを定義
var('x a b')
f(x) = a*x + b
g(x, a, b) = f
print g(x, 2, 1)
print f(a=2, b=1)
print f.subs(a=2, b=1)
print f.subs({a:2, b:1})
# 変数c, dへの置換
var('c d')
print f.subs(a=2*c, b=d+1)

sageの出力:

2*x + 1
2*x + 1
x |--> 2*x + 1
x |--> 2*x + 1
x |--> 2*c*x + d + 1

規則の代入

規則の代入には、subs_expr関数を使います。例として、関数hの\(x^2\)をwに置き換えてみます。

変数の置換では行えない変換もsub_exprを使うことによって可能になります。

sageへの入力:

var('w')
h = x^2 + 3; print h         # 関数hの定義
print h.subs_expr(x^2 == w)  # x^2をwに置き換える

sageの出力:

x^2 + 3
w + 3

前の出力結果の参照

直前の実行結果を _ で参照することができます。

sageへの入力:

[1, 2, 3]

sageの出力:

[1, 2, 3]

sageへの入力:

sum(_)   # 直前の実行結果を_で参照し、リストの和を求めます。

sageの出力:

6

コメント

選択肢 投票
おもしろかった 8  
そうでもない 0  
わかりずらい 0  

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

  • こまいことで恐縮ですが、「変数の宣言 」で「 宣言されたsage変数を参照する場合には、」と理解しました。sage を学ぶには大変役にたちました。 -- ysato? 2013-04-01 (月) 17:46:16
  • 宣言したsage変数をクリアする方法を教えてください。 -- ysato? 2013-04-01 (月) 18:02:43
  • Sageは、pythonで作られているので、del 変数名が使えるのではないかと思いますが、私はまだ試したことがありません。 -- 竹本 浩? 2013-04-01 (月) 21:02:08
  • googleで検索したところ、reset が見つかりクリアできました。del でクリアできることを確認しました。 -- ysato? 2013-04-02 (火) 10:30:15
  • Sage の例題では、Sage言語とpython言語が含まれています。それを見分ける簡単な方法がありましたら教えてください。ipython notebook を練習していると混乱してきたので質問した次第です。 -- ysato? 2014-01-23 (木) 16:07:47
  • ysatoさま、Sageはpythonで処理されており、Sageとpythonでの区別は特にありません。type(変数), class(変数)で変数が素性を確認することができます。 -- 竹本 浩? 2014-01-23 (木) 21:03:26

(Input image string)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-22 (金) 10:32:07 (943d)
SmartDoc