[[FrontPage]] #contents 2011/06/15からのアクセス回数 &counter; ここで紹介したSageワークシートは、以下のURLからダウンロードできます。 http://www15191ue.sakura.ne.jp:8000/home/pub/2/ また、Sageのサーバを公開しているサイト(http://www.sagenb.org/, http://www15191ue.sakura.ne.jp:8000/)にユーザIDを作成することで、ダウンロードしたワークシートを アップロードし、実行したり、変更していろいろ動きを試すことができます。 ** 表記方法 [#x5f15435] Sageを使用する際に知っていると便利な約束事(表記方法)があります。 代表的なものについて、以下に示します。 *** python文法 [#z9e4a790] Sageは、pythonのインタプリタを使っているため、pythonの構文がそのまま使えます。 pythonでのコメント(実行に影響しない注釈)は、#記号から行末がコメントとして扱われます。 コメントには日本語も使用できますので、式の説明やメモを入れておくと後で役立ちます。 sageへの入力: #pre{{ # print 1 + 3 この行はコメントです。 print 1 + 3 + 5 }} sageの出力: #pre{{ 9 }} *** 複数の式を1行にまとめる [#ec08335d] 複数の式を1行にまとめるには、式を;(セミコロン)で区切ります。 セルを評価するとprint文やshowコマンドの結果、それと一番最後の結果が表示されます。 しかし、最後の代入文の結果は表示されないため、例のように;(セミコロン)の後に変数名 を入力します。 sageへの入力: #pre{{ b = 1 + 3; print b # 複数の式を1行にまとめるには、式を;(セミコロン)で区切ります。 a = 1; a # 代入の結果は、値を返さないので;で区切って変数名を書いて代入結果を表示します。 }} sageの出力: #pre{{ 4 1 }} *** python変数への代入 [#x8e66a0c] 計算結果をpython変数に代入するときには、= (イコール)を使います。 python変数と断っているのは、sageの数式で使われる変数と区別するためです。 aの値を数値として出力するには、N関数またはnメソッドを使います。 sageへの入力: #pre{{ a = 1/2 + 1/3; print a N(a) }} sageの出力: #pre{{ 5/6 0.833333333333333 }} *** タプル [#d0c05aed] タプルは、カンマで区切られた値からなるシーケンスデータ型です。 タプルの出力は()カッコで括られたカンマ区切りの形式で表示されます。 タプルの変数への代入をタプル・パッキングと呼び、逆にタプルから変数への代入をシーケンス・アンパッキングと呼びます。 シーケンス・アンパッキングは変数への一括代入に使用すると便利です。 リストや辞書と合わせるために、あえてカッコ()をつけてタプルを使用しることにします。 sageへの入力: #pre{{ t = (1, 2, 3); print t # 変数tへのタプル(1, 2, 3)の代入(タプル・パッキング) (x, y, z) = t; print x, y, z # タプルtから変数x, y, zへの代入(シーケンス・アンパッキング) }} sageの出力: #pre{{ (1, 2, 3) 1 2 3 }} *** リスト [#x8157ac1] sageでは、リストがもっとも重要なデータ構造になります。 タプルとは異なり、リストでは要素の参照の他に、要素の追加、削除、結合などの操作ができます。 sageへの入力: #pre{{ 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の出力: #pre{{ [1, 2, 3] [1, 2, 3, 4] 3 [2, 3] 4 [1, 2, 3, 4, 9, 8, 7] }} *** 辞書 [#j91c2fe6] 辞書、別名「連想配列」と言われ、リストのインデックスの代わりにキーで値を取得することが できます。 - 辞書の生成:キーと値のペアを:(コロン)ではさみ,(カンマ)で連結し{}カッコで括ります。 - 要素の取得;[]カッコにキーを指定して要素を取得します。 sageへの入力: #pre{{ ages = {'John':24, 'Sarah':28, 'Mike':31}; # 辞書の生成 print ages # 辞書の出力 print ages['Sarah'] # 要素の取得 }} sageの出力: #pre{{ {'Sarah': 28, 'Mike': 31, 'John': 24} 28 }} *** 変数の宣言 [#u1428887] sageの式で変数として認識させるには変数をvar関数で宣言しなくてなりません。変数の宣言は、 #pre{{ var('変数名') }} 複数の変数を宣言する場合には、スペースを空けて指定します。 宣言される変数を参照したりする場合には、 #pre{{ x, y = var('x y') }} のようにpython変数x, yに宣言したsage変数を代入します。 *** 関数の定義 [#f5b82d50] sageの関数には、以下の3種類の指定方法があります。必要に応じて使い分けて下さい。 - シンボリック関数: f(x) = 式の形式で定義します。 - python関数: pythonのdefを使って関数を定義します。 - lambda関数: lambda 変数のリスト: 式の形式で定義します。 例では、\(sqrt(x)=x^{\frac{1}{2}}\)を返す関数をシンボリック関数、python関数、lambda関数を それぞれ symRoot, pyRoot, lamRoot として定義し、その使い方を説明します。 当然すべて、同じ結果になります。 sageへの入力: #pre{{ # シンボリック関数 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の出力: #pre{{ sqrt(2) sqrt(2) sqrt(2) sqrt(x + y) sqrt(x + y) sqrt(x + y) }} *** 値の代入 [#z5bb1d65] 変数の値を指定して関数の値を取得するには、以下の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への入力: #pre{{ # 関数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の出力: #pre{{ 2*x + 1 2*x + 1 x |--> 2*x + 1 x |--> 2*x + 1 x |--> 2*c*x + d + 1 }} *** 規則の代入 [#m12a13ff] 規則の代入には、subs_expr関数を使います。例として、関数hの\(x^2\)をwに置き換えてみます。 変数の置換では行えない変換もsub_exprを使うことによって可能になります。 sageへの入力: #pre{{ var('w') h = x^2 + 3; print h # 関数hの定義 print h.subs_expr(x^2 == w) # x^2をwに置き換える }} sageの出力: #pre{{ x^2 + 3 w + 3 }} *** 前の出力結果の参照 [#u0d14985] 直前の実行結果を _ で参照することができます。 sageへの入力: #pre{{ [1, 2, 3] }} sageの出力: #pre{{ [1, 2, 3] }} sageへの入力: #pre{{ sum(_) # 直前の実行結果を_で参照し、リストの和を求めます。 }} sageの出力: #pre{{ 6 }} ** コメント [#e3f6d041] #vote(おもしろかった,そうでもない,わかりずらい) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha