next up previous contents index
: Asirgui (Windows 版) : Asir の操作 : logon, logoff, キー操作 (Windows   目次   索引

Risa/Asir の起動法と電卓的な使い方

Unix の場合 Risa/Asir を起動するには ktermxterm などの シェルウインドーまたは Emacs のシェルウインドーで, asir と入力する.

 
bash-2.03$ asir RETURN
 
ここで bash-2.03$ は, シェルのプロンプト(入力促進記号)で 利用しているシステムやシェルによりいろいろ変わる. たとえば % (C-シェルのプロンプト) もよく見かけるであろう. なお, 入力行の編集機能を利用したい場合は fep asir と入力して Risa/Asir を起動する.

Windows の場合, Risa/Asir のインストールされている フォルダ(ディレクトリ)を ファイルエクスプローラで開き asirgui (Graphical User Inteface 版 Asir) のアイコン

\includegraphics{Figures/hopo_std.ps}
をダブルクリックする. なお, asirgui は Windows 風のユーザインタフェースを持っているように 見えるが実は全く違う. Unix の xterm 上で fep 付きで Asir を起動した 時と似た動作をするように作成してあるので, Windows 風インタフェースだと 思いこんで利用してはいけない. 以下 asirgui も単に asir とよぶ. asirgui の利用法については, 1.4 節をみよ.

Risa/Asir は次のように起動メッセージを出力し,

[ 数字 ]
なる asir のプロンプト(入力催促文字列) を出力する.
 
bash-2.03$ asir RETURN
 
This is Risa/Asir, Version 20010917 (Kobe Distribution).
Copyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.
Copyright 2000,2001, Risa/Asir committers, http://www.openxm.org/.
GC 5.3, copyright 1999, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.
PARI 2.0.17(beta), copyright (C) 1989-1999,
    C. Batut, K. Belabas, D. Bernardi, H. Cohen and M. Olivier.
 
[0]  
 
終了は Risa/Asirのプロンプトに対して quit; を入力する.

この節では, まず Asir を対話型電卓として利用する方法を説明する.

Asir は数や文字列の処理のみならず, 多項式の計算もできる. 電卓的に使うための要点を説明し例をあげよう.

例題 1.1   +,-,*,/,^ はそれぞれ足し算, 引き算, かけ算, 割算, 巾乗. たとえば,
2*(3+5^4);
と入力すると $ 2 (3+5^4)$ の値を計算して戻す.
 
[0] 2*(3+5^4); RETURN
1256

例題 1.2   sin(x), cos(x) はおなじみの三角関数. @pi は円周率を表す定数. $\sin(x)$$\cos(x)$ の近似値を求めるには
deval(sin(3.14));
と入力する. deval は 64 bit の浮動小数点数により計算する. bit や精度については 11 章でくわしく説明する.

例題 1.3       

\begin{displaymath}\left\{ \left(2+ \frac{2}{3}\right) 4 +\frac{1}{3} \right\} + 5 \end{displaymath}

を Asir で計算してみよう. ; (セミコロン) までを入力してから RETURN を押すと実行する. セミコロン RETURN の入力がないと実行がはじまらない. セミコロン の代わりに $ (ドル記号) を用いると, 計算した値を印刷しない. 数学ではかっことして, [,],{,}などがつかえるが Risa/Asir では (,) のみ. [,]{,}は別の意味である.
 
[0] ((2+2/3)*4+1/3)+5; RETURN
16
[1] ((2+2/3)*4+1/3)+5$ RETURN
[2]  
 

例題 1.4   Asir は多項式も計算できる.
  1. x2 と書くと, $x2$ という名前の多項式の変数となる. $x$ かける $2$x*2 と書く.
  2. poly ;poly を展開する.
  3. fctr( poly )poly を有理数係数の多項式環で因数分解する.
 
[0] fctr(x^10-1); RETURN
[[1,1],[x-1,1],[x+1,1],[x^4+x^3+x^2+x+1,1],[x^4-x^3+x^2-x+1,1]]
[1] (2*x-1)*(2*x+1); RETURN
4*x^2-1
[2] (x+y)^3; RETURN
y^3+3*x*y^2+3*x^2*y+x^3
 
fctr の出力は $x^{10}-1$

\begin{displaymath}(x-1)^1, (x+1)^1, (x^4+x^3+x^2+x+1)^1,
(x^4-x^3+x^2-x+1)^1
\end{displaymath}

の積に因数分解されることを意味している.

例題 1.5   plot(f);$x$の関数 $f$ のグラフを描く x の範囲を指定したいときはたとえば
plot(f,[x,0,10]) と入力すると, x は 0 から 10 まで変化する.
0
[1] plot(sin(x)); RETURN
0  
[2] plot(sin(2*x)+0.5*sin(3*x),[x,-10,10]); RETURN
 

例題 1.6   実行中の計算を中断したい時は CTRL + C (C は cancel の C) を入力する. すると
interrupt ?(q/t/c/d/u/w/?)
と表示されるので u RETURN を入力する. 次に
Abort this computation? (y or n)
と表示されるので y RETURN を入力する. (q/t/c/d/u/w/) の各文字の説明は ? を入力すれば読むことができる.
 
[0] fctr(x^1000-y^1000); RETURN
CTRL + C
  interrupt ?(q/t/c/d/u/w/?)      u RETURN
  Abort this computation? (y or n)      y RETURN
return to toplevel
[1]  
 

変数に値をとっておくこともできる. 変数名は大文字で始まる. 関数名等は小文字で始まる. 英字の大文字, 子文字を区別しているので注意. Risa/Asir では多項式計算ができるが小文字で始まる文字列は 多項式の変数名としても利用される.

例題 1.7       

 
[0] Kazu = 5; RETURN
5
[1] Hehehe = x+ 8; RETURN
x+8
[1] Kazu+Hehehe; RETURN
x+13
 

くりかえしになるが, セミコロン ; を入力しないと, RETURN キーを押しても実行ははじまらない. 計算機用語では ; RETURN で ``入力の評価が始まる'' という.

例題 1.8   Risa/Asir を用いて次の値を求めてみよう

\begin{displaymath}2 + \sqrt{3} , \quad \frac{1}{2-\sqrt{3}}. \end{displaymath}

 
[0] A=2+deval(3^(1/2)); RETURN
3.73205
[1] B=1/(2-deval(3^(1/2))); RETURN
3.73205
[2] A-B; RETURN
1.33227e-15
 
1.33227e-15 は $1.33227 \times 10^{-15}$ を意味する. $ 2 + \sqrt{3} = \frac{1}{2-\sqrt{3}}$ のはずなのに 値がちがっていることに注目しよう. これは計算機では小数が, 浮動小数点数という近似的な数で表現されるからである. 詳しくは 11 章を見よ.

この例では, 値が異なるのにどちらも同じ値 (3.73205) と表示されている. これは, 小数第 5 位まで表示するよう初期設定されているからである. これを変更するには

ctrl("real_digit",桁数)
を使えばよい.

 
[0] ctrl("real_digit",16); RETURN
16
[1] A=2+deval(3^(1/2)); RETURN
3.732050807568877
[2] B=1/(2-deval(3^(1/2))); RETURN
3.732050807568876
 
より, 確かに小数第 15 位で値が異なっていることがわかる. ただし, 16 桁より多く指定しても意味がない. これについても 詳しくは 11 章を見よ. ちなみに, 155302.42+157.05; と入力すると 155459 が戻るがこれも小数点以下が表示されていないだけで, やはり real_digit を調整すれば表示される. なお, デフォールトでは表示形式が小数点形式と指数表示で自動的に切り替わるが, ctrl("double_output",1) とすると指数表示への自動切替えが おきない.

さて Asir にはプログラム言語がくみこまれており, この言語の機能をもちいると複雑なことを実行できる. まず一番の基礎であるくりかえしおよび印刷の機能をためしてみよう.

  1. for (K=初期値; K<=終りの値; K++) {ループの中で実行するコマンド}; はあることを何度も繰り返したい時に用いる. for ループと呼ばれる. ``K<=N'' は, `` ${\tt K} \leq {\tt N}$か'' という意味である. 似た表現に, ``K>=N''があるが, これは `` ${\tt K} \geq {\tt N}$か'' という意味である. = のない ``K<N'' は, `` ${\tt K} < {\tt N}$か'' という意味である.
  2. ++K K++ K を 1 増やせという意味である. K = K+1 と書いてもよい. 同じく, ++K K++ K を 1 減らせという意味である.
  3. print( expr )expr を出力する.
  4. load("ファイル名"); コマンドで, ファイルを Risa/Asir にロード(読み込み), 実行できる. ファイルの最後の行には end$ を書いておくこと. asirgui では, ファイルメニューの ``開く'' でファイルをロードしてもよい.

例題 1.9   [02]      for による繰り返しを用いて $\sqrt{x}$ の数表をつくろう.

入力例 1.1       
 
[0] for (I=0; I<2; I = I+0.2) { RETURN
       print(I,0); print(" : ",0); RETURN
       print(deval(I^(1/2))); RETURN
  } RETURN
 
出力結果
0 : 0
0.2 : 0.447214
0.4 : 0.632456
0.6 : 0.774597
0.8 : 0.894427
1 : 1
1.2 : 1.09545
1.4 : 1.18322
1.6 : 1.26491
1.8 : 1.34164
2 : 1.41421
print(A) は変数 A の値を画面に表示する. print(文字列) は文字列を画面に表示する. print(A,0) は変数 A の値を画面に表示するが, 表示した あとの改行をしない. 空白も文字である.したがって, A=10; print(A,0); print(A+1); を実行すると, 1011 と表示されてしまう. A=10; print(A,0); print(" ",0);print(A+1); を実行すると, 10 11 と表示される.

なおこの例題では, 入力を間違えたら最初からやりなおすしかない. これは当然面倒くさい. したがって, 次の節で説明するように 通常はこの入力をファイルに書いておいてロードして実行する.

例題 1.10   [02]      Unix 版では help("fctr"); と入力すると関数 fctr の使い方の 説明が出る. このように help(関数名); で オンラインマニュアルを読むことが 可能である. flist() と入力すると現在定義されている関数の一覧を見ることが 可能である. Windows 版では, ヘルプメニューで, 各関数のオンラインマニュアルを読むことができる.

入力例 1.2       

 
[0] help("fctr"); RETURN
 
出力結果:
`fctr', `sqfr'
--------------

fctr(POLY)
     :: POLY を既約因子に分解する.

sqfr(POLY)
     :: POLY を無平方分解する.

RETURN
     リスト

POLY
     有理数係数の多項式

   * 有理数係数の多項式 POLY を因数分解する. `fctr()' は既約因子分解,
     `sqfr()' は無平方因子分解.

   * 結果は [[数係数,1],[因子,重複度],...] なるリスト.

   * 数係数 と 全ての 因子^重複度 の積が POLY と等しい.

   * 数係数 は, (POLY/数係数) が, 整数係数で, 係数の GCD が 1 となる
     ような多項式になるように選ばれている. (`ptozp()' 参照)

     [0] fctr(x^10-1);
     [[1,1],[x-1,1],[x+1,1],[x^4+x^3+x^2+x+1,1],[x^4-x^3+x^2-x+1,1]]
     [1] fctr(x^3+y^3+(z/3)^3-x*y*z);
     [[1/27,1],[9*x^2+(-9*y-3*z)*x+9*y^2-3*z*y+z^2,1],[3*x+3*y+z,1]]
     [2] A=(a+b+c+d)^2;
     a^2+(2*b+2*c+2*d)*a+b^2+(2*c+2*d)*b+c^2+2*d*c+d^2
     [3] fctr(A);
     [[1,1],[a+b+c+d,2]]
     [4] A=(x+1)*(x^2-y^2)^2;
     x^5+x^4-2*y^2*x^3-2*y^2*x^2+y^4*x+y^4
     [5] sqfr(A);
     [[1,1],[x+1,1],[-x^2+y^2,2]]
     [6] fctr(A);
     [[1,1],[x+1,1],[-x-y,2],[x-y,2]]

help コマンドを用いると, このように Asir の組み込み関数 についての解説が表示される. 説明が専門家向けの記述もあるので, 用語については, 数学や数式処理関係の本を参照する必要な場合もある. たとえば, 無平方分解 とはなにか調べよ.

Asir のマニュアルは Web ページおよび asirgui のヘルプメニューでもみることが可能である.

参考:
Asir の中には起動時に必要な関数達をよみこんでしまうものもある. たとえば, OpenXM 版の Risa/Asir の場合次の起動メッセージを出力する. この Risa/Asir を OpenXM/Risa/Asir とよぶ.

bash-2.03$ asir
This is Risa/Asir, Version 20020802 (Kobe Distribution).
Copyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.
Copyright 2000,2001, Risa/Asir committers, http://www.openxm.org/.
GC 6.1(alpha5) copyright 2001, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.
PARI 2.2.1(alpha), copyright (C) 2000,
     C. Batut, K. Belabas, D. Bernardi, H. Cohen and M. Olivier.
OpenXM/Risa/Asir-Contrib(20020808), Copyright 2000-2002, OpenXM.org
help("keyword"); ox_help(0); ox_help("keyword"); ox_grep("keyword");
     for help messages (unix version only). 
Loading ~/.asirrc
[873]

この例では, 最初のプロンプトは [873] であるが, この数は起動時によみこまれる Asir プログラムの サイズにより変化する. OpenXM/Risa/Asir の場合, Asir Contrib ライブラリを起動時に 読み込むので, この数が 873 になっている. Asir Contrib ライブラリには, 行列計算, TeX への変換など さまざまな便利な関数が用意されている.

現在の Asir 配布形態は下のように 2 通りある. どの版でも, version number が 20001200 以上のものなら この本のサンプルプログラムはすべて動作する.

  1. Head branch オリジナル版
  2. Head branch OpenXM 版 (OpenXM/Risa/Asir, オリジナル $+$ Asir-Contrib パッケージ )


next up previous contents index
: Asirgui (Windows 版) : Asir の操作 : logon, logoff, キー操作 (Windows   目次   索引
Nobuki Takayama 平成15年9月12日