Nara Women's University Digital Information Repository Title 数式処理システムREDUSEへの招待 Author(s) 加古, 富志雄 Citation 加古富志雄:奈良女子大学情報処理センター広報 Issue Date 2012-03 Description URL http://hdl.handle.net/10935/3789 Textversion publisher This document is downloaded at: 2015-02-01T00:33:12Z http://nwudir.lib.nara-w.ac.jp/dspace 利用の事例 数式処理システム REDUCEへの招待 理学部情報科学科加古富志雄 REDUCEは A .C .Hearn博士によって作成された数式処理システムです。これは最初は量子力 学の計算を計算機で実行させるために作成されたもので、行列計算や、高エネルギ一物理学のパッ ケージが入っていました。後に不定積分や因数分解のパッケージが組み込まれ、より広い範囲の物 理数学での計算をサポート出来るようになっています。 . 4で、これにはもともと Hearnが作成したパッケージ以外に、 REDUCE 現在の版は REDUCE3 の利用者が作成したパッケージが追加され、 1 . 数式の展開、整理 2 . 項の置換、代入およびパターンマッチによる式の変形 3 . 微積分 4. 多項式の因数分解 5 . 多倍長整数および浮動少数点数計算 6 . 行列計算(四則計算、行列式、トレースや転置行列) 7 . 方程式の求解 8 . 高エネルギ一物理学の計算 9 . 非可換代数の計算 1 0 . 平方根を含む式の不定積分 1 1 . 代数的数体上の計算 1 2 . ベクトル計算、ベクトル解析 1 3 . 外微分の計算 1 4 . 級数の積和の計算 1 5 . テーラー展開 1 6 . 極限計算 1 7 . グレブナー基底(多項式イデアルの標準基底)の計算 1 8 . 偏微分方程式の対称性の計算 1 9 . FORTRAN,C ,RATFORへのプログラムの作成 2 0 . 数式の TEX,LATEX形式での出力 2 1 . 関数グラフの作図 のような計算が可能となっています。 REDUCEは LISPという言葉で書かれており、ソースを含めて配付されているので LISP言語 7 0 の処理系さえあれば動かすことが出来ます。このため、多くの計算機( IBMの大型機やスーパー コンピューターから、ワークステ}ションやノマソコン)で動いています。筆者の所でも REDUCE を動かすために LISPの処理系を SUNのワークステーション上で作成し、これを使って REDUCE を動かしています。またこの LISPを APPLEの Macintoshの上にも移植し、動かしています。 1 . REDUCEの起動方法 ここでは、筆者が移植した REDUCEの使い方を説明します。奈良女子大学情報処理センターの FACOMでも REDUCEが使えますが、現在センターに入っている REDUCEは3 . 3版のものであ り、少しこれとは違っています。しかし、起動方法等を除けばほとんど同じです。ただし、 3 . 4版 になってから追加された機能(前に述べた 1 0から 2 1まで)は残念ながら使えません O 1 .1 REDUCEの使い方 ワークステーション(SUN3もしくは S p a r c S t a t i o n)で REDUCE3.4を起動するには、 reduce と入力(小文字で)して最後にリターンキイを押します O これで REDUCE3.4が起動します O 起 動すると、 *** KSlisp/Sparc (ver. 9.08 Wed Jan 29 13:27:16 1992) 2097152 bytes With Japanese code(EUC) REDUCE 3. 4 , 15-Jul-91.. . のようにメッセージが現われ、 REDUCEの入力促進文字(プロンプト文字) 1 : を出力し” 1:”の直後にカーソルが現れます。ここで、例えば、 (x+y)**2; と入力して改行すれば x*Y+Y2 x2+2* 2 : のように(x+y)の 2乗を計算(展開)しその結果を表示します。続いて次の入力促進文字” 2” : を表示します。 REDUCEの入力は最後にセミコロン(;)またはドル記号($)で区切ります。 セミコロンで区切った場合には、計算した結果を表示し、ドル記号で区切った場合には、結果を表 示しません O 例えば、 7 1 2 : ~ (x+y)**5$ と入力すると結果を表示せずに、直ちに次の入力促進文字” 3:”を表示します O また、改行する前 にセミコロンかドル記号を忘れると 3 : (x+y+z)**2 3 : のように同じ入力促進文字” 3:”が表示されます。これは、 3番目の入力がまだ終了していないこ とを意味しています O この状態でセミコロンを入力すれば計算が実行されます。 REDUCEは入力された式を展開し、整理して同類項をまとめた結果を出力します。 REDUCEの入力は上の例のように小文字でも大文字でもかまいません O 大文字で入力した場合 には、小文字に変換されます。 REDUCEを終了するには、 BYEか QUITで行います。 QUITで終了した場合には現在の RED UCEの内容をファイルに書き出して終了します。このファイルはかなり大きなサイズ(約数 M バ イト)になりますので、ディスク容量に気を付けて下さい。 4 : bye; と入力すれば、 end of run を表示して終了します。また、 4 : quit; と入力すれば、 Reduce environment is saved to image.reduce end of run を表示して終了します。このとき、ファイル i m a g e .r e d u c eにセッションの記録をセーブします。 ここで q u i tや b y eの後にセミコロン(;)を忘れないようにして下さい o QUITで終了した後、 セーブしたセッションを再開するには、 reduce image.reduce のようにして REDUCEを起動すれば、 *** KSlisp/Sparc (ver. 9.08 Wed Jan 29 13:27:16 1992) 2097152 bytes With Japanese code(EUC) Reduce 3.4 4 : 7 2 image saved at Feb 14 1992 12:00:00 とセーブした日付と時刻が表示されます。この後、前の計算の続きを行ないます。この後でまた QUITで終了すれば、以前にセーブしたファイルは消去され新たに現在のメモリの内容が Image. r e d u c eのファイルに書きだされます。もし前のファイルを保存しておきたい場合には、 i m a g e .r e d u c e のファイルを別の名前のファイルにコピーして下さい。 REDUCEを起動するときにコピーしたファ イル名を指定すればその状態のセッションが回復されます。またセッションファイルは不要になれ ば消去してください。 REDUCEには ENDというコマンドがあります。これは REDUCEを終了して LISPモードに 入ります。このときには 4: end; と入力すると、 Entering LISP NIL 〉 と表示されます O ”>”が LISPモードでの入力促進文字になっています。この状態から REDUCE に戻るには (BEGIN) と入力してください。また終了するには (BYE) でシステムに戻ります。 1 .2 割り込み(ブレーク) REDUCEの結果を出力中に一時的に出力を停止したい場合には Ctrl-S (コントロールキーを 押しながら Sを押す。以下同様)を押します。再開するには Ctrl-Qを押します。 REDUCEの実行中や結果を出力中に中断したい場合には、端末からブレークキイ(通常は CtrlC、コントロールキイを押しながら Cを押します)を押してください。 * * *Lisp attention ! ? (q/c/t) = と表示されますので、小文字の qまたは cを一文字入力して改行してください。 q と入力した場 合には REDUCEの実行を終了してシステムに戻ります。 cを入力した場合にはエラーを起こした ものとして、実行を中断して、エラーメッセージを表示した後、 REDUCEの入力待ちの状態に戻 ります O 場合によってはミ入力待ちの状態に戻らず、実行を続けることがありますが、このときには、再 度ブレークキイを押してください。もしルーフ。に入った場合などでどうしても中断できない場合に は、ブレークをかけたときに小文字の tを入力してください。 LISPのトップループに戻ります。 この状態から REDUCEに戻るには 7 3 (BEGIN) と入力してください。 Entering REDUCE と出力され、 REDUCEの入力待ちの状態に戻ります。また、割り込みをかけたときに q ,c ,t以 外の文字または改行のみを入力した場合には、そのまま実行を続けます。 割り込みをかけたときに場合によっては * * *Busy. Attention ignored. と表示される場合があります。このときは、数秒待ってから再度(割り込みが受け付けられるまで) 割り込みキイを押してください。 1 .3 起勤時のオプション REDUCEの起動時のオプションの指定の仕方は、 reduce [オプション] [イメージファイル名] [〈入力ファイル名] [〉出力ファイル名] です。それぞれのオプションは一つ以上の空白で区切ります。入出力ファイル名は標準入出力(通 常端末に割り当てられています)をファイル等に切り替えるとき指定します。イメージファイルは、 起動時に取り込むファイル名で、 q u i t等で作成したファイルの名前を指定します O オプションとしては、 cxx メモリサイズを xxKバイト使う o sx x スタックサイズをは語に設定する bxxBPS (バイナリープログラムを格納する領域)のサイズを口語に設定する。 ,s ,bの直後(空白を入れないで)に十進数で指定します O です。数字は c 通常は reduceだけで起動できます O このときには主記憶として 2Mバイト確保します。もし大 きな計算を行う必要があればオプションでメモリサイズをもっと大きく確保するように起動してく ださし、。 reduce -c25000 とすれば、 25Mバイトの領域が確保されます。もし、主記憶が不足して指定しただけで確保でき ないときには、確保できる最大の領域を LISPで取ります。実際に確保された領域の大きさは起動 時のメッセージに出力されます O 1 .4 ファイルの取扱 REDUCEから結果をファイルに書き出したりファイルから入力する場合 I N ,OUTコマンドで 7 4 行いますが、このときファイル名はダブルクオート””で囲います。例えば in ’ 'r educe.text ; ” と入力すると以後の入力はファイル r e d u c e .t e x tから読み込みます。また、ファイル名として環境 変数が使える様にしています。例えば out ” $HOME/reduce.log’ I; in ” $HOME/reduce.text; ” では自分のホームディレクトリのファイル r e d u c e .t e x tから入力し、結果を同じくホームディレク トリのファイル r e d u c e .l o gに書き出します。 REDUCEで 工isplogopen "ログ・ファイ jレ 名 付 ; と入力すると以後入出力した文字はすべて”ログ・ファイル”に書きだされます O 中止するには lisp logclose( ) ; と入力すれば中止します。 1 .5 Macintoshでの使い方 Macintoshに移植した REDUCEは基本的にはワークステーションの REDUCEをそのまま移 植しています。起動の仕方は REDUCEのフォルダーの中の r e d u c e3 . 4というアプリケーション をダブルクリックすればよいのです O このとき、コマンドのオプションを聞いてきますが、通常は 何も指定しなくて、 OKボタンを押すだけでよいのです。 REDUCEの使い方はワークステーショ ンの上の REDUCEと全く同じです。 現在のところ、 Macintoshのウインドウ・インターフェースを入れていないためちょっと使い づらい所があります O また、割り込み( Appleキイ+.)を押すとプログラムが終了してしまうと いう問題があります。 7 5 s File ~ E d i t run Search Option Window setup p console StandardInput: l e : StandardOutput: ⑥ console ⑨ console 0 file O file 0console+file O console+printer Co『nmandL i n e : l Reduce3.4I K OK J (Cancel) 車蝉掴曲師盟恒唖蝿匝慣揖唖強脂血蝿蝿歯菌蝿塗園醐画面鑑担輯費量 s File E d i t run Search Option Window setup console 岡 市制ドホ KSugar/ 門αcinlosh/5.0.7 <υer 9.4 Sep 30,1991 SN 鈴0 100> : 1966080 bytes ' I ith Jαpαnese code <ShifL.JIS> 68000 version REDUCE 3.4, 15-Apr-91 1 : <x+y>申市 2 ; 司4 4 内 H ヨ H宮 市 + ﹃ ,h × ホ + × 2: df(ws,x); 2市 < x + y> 3: inl<sin<x>,x>; t t 必﹃ 島沼田町 7 6 - cos< × 〉 p 品 目 一 ~ 2 . 計算例一一水の上を伝わる波 深さ hの浅い水路を考え、その表面を伝わる浅水波の運動を、非粘性・二次元渦なしの仮定の もとで考えます。水平方向に x軸、鉛直方向に y軸をとります。波の高さを ρそれに水の速度ポ テンシャルを φとすると、基礎方程式は θ争 ( 2 ) o < I >βρ θρθ争 1θφηθ<I> Tt=gp+2 ({友}:!+{ 8 Y } 2 ) , 'l / EA 噌 θ < I > ay=O, (y=-h) 言 = 7iY 一石否~' 、l δ 2 < J > 〆,,‘‘、 θ2争 石す+石ヲ= 0 , (-h: S yく p ) (y=p) ( 3 ) (y=p) ( 4 ) となります O 速度 cで進む浅水波を考えます。小さなパラメーター εを導入し、次の変数変換および展開を 行ないます O p 1 / 2 ( x-c t ) 一 ε ( 5 ) . . = f.P1+f.2ρ2+. ( 6 ) . 1 / 2争1+f . 3 / 2 φ 2+. . . < I > 一 f ( 7 ) c一 C Q+f C 1+c 2 C 2十... ( 8 ) ( 1) を (2 )の境界条件のもとで y について解くと 争 1 = 争 1( ご ) JJ. 2F I E '. r 1 , υ ハ d e . 、 、 EA 2 ’ 〆、 、 ‘ = 一( y+h ) 2d 2争1 , < , ・ 咽 争 つ ( 9 ) 等が得られます。これを、(旬、(4)式に代入して εの低次の項を調べると、 Co=/ ; h , d争1 g d e =;P1 が得られます O さらに計算すると、 3 d 3 p 1 は ρl d ρ 1 h" ー で : ; − +9 ρ 1 一一一 6 d e 3 r . 1 .d ご c1h一一= d e 0 A を満たすことが分かります。この方程式は適当な変数変換を行うことによって良く知られた KdV 方程式 θ u θ u θ3u θ t δx 8x3 一一= 6u一一+一一 7 7 − を f=x λtで動く座標系で見た方程式になります。この方程式は P 1= 州s e c h 2 (, /~~) v 2 h 2 という解(ソリトン解と呼ばれる孤立波解)を持ちます O この計算を順次 εの高次の項まで行なうことによって浅水波の摂動解が得られます O しかし、実 際にこれらの計算を手で行なうのは大変です。これを、 REDUCEを使って計算すると次のような 結果が得られます。 2 :i n1 1 p d e . r e d 1 1 ; ; l e te p s料 7= O o p e r a t o rf , g ; ゐr a l li jl e td f ( f ( i j) バ ) =f ( i j + l ) ; f o r a l li jl e td f ( g ( i j ) , x ) = g ( i j +1) ; p:=f o ri : = 0 : 9sume p s林 (i ) * (1 ) 料 (j)*(Y+h) * 本 (2 * j ) / f a c t o r i a l ( 2 * j) * i ( i j, 2 * j )) $ ( f o rj : = O : isumー q : =f o ri : = 0 : 9su1ne p s料 (i ) * g ( i , 0 ) $ p x : = d f ( pス)$ p y : = d f ( p , y ) $ ( 2本C * P Xp y林 2 e p s本P X * * 2 ) $ e q a : =2本gキq eqb:=pye p s * ( c+ e p s * p x ) * d f (q , x ) $ c:=cO ヰ( l+eps八 1*cl+eps八2*c2+eps八3*c3+eps八4*c4+eps八5*c5+eps/\6*c6+eps八1~ +eps 八8 本c 8+eps八9 * c 9 ) $ y : = e p s本q $ ( 在e q a , e p s , z a ) ; c o e i l lnol o n g e rs u p p o r t e d- u s el i s t si n s t e a d * * * * *IDf 7 8 * * *za6za5za4za3za2zalzaOarenonzero 6 c o e f f (eqb, e p s, zb ) ; **本料 IDf i l lnol o n g e rsupported- u s el i s t si n s t e a d * * *zb6zb5zb4zb3zb2zblarenonzero 6 end; とここまでの計算で、(3 ) 、 (4 )式を εで展開した方程式がそれぞれ変数 Z a i ,Zbiに入りますO ここで、 let eps**7 =O; としているのは、 6次の項まで計算することにして、 7次以上の項は無視(ゼロに)する様にして います。また g ( i , j)三 竺dご ! . i j f ( i , j) = - d i< I > ; 一一よ d~i と置いています。後は、 z αら Zbiがゼロになるように係数を決めていけば解が求められます。 4次 までの結果は以下のようになります。 + 号2ci+ 妥3cf+詩的) c 一 ./ih(l+£C1 ρ 一 2cc1hsech2(与と) 一 + <2cihsech + / 嘉 ご ) { ♂ 占3cih + さらに高次の項まで計算するのには次のフ。ログラムを REDUCEで実行すればよいのです。最初 の行で指定した n次までの計算を行ってくれます O 7 9 n : = 8 ; procedurel e t e p s ( n ) ; l e te p s * * I l= O ; l e t e p s ( n + l ) ; h : = l ;g g : = l ; o p e r a t o rf , g ; ス ) =f ( i j + l ) ; f o r a l li jl e td f ( f ( i j) f o r a l li jl e td f ( g ( i j) ス ) =g ( i j + l ) ; p:=f o ri : = O : nsume p s料 (i ) * 料 (j ) * ( y +h) * * (2 * j )/ f a . c t o r i a . 1 ( 2牢j ) * f ( i j , 2 * . D) $ ( f o rj : = O : isum( 1) q : =f o ri : = O : nsume p s * * ( i ) * g ( i , 0 ) $ p x : = d f ( pぷ)$p y : = d f ( p , y ) $ e q a : =2本g g * q ( 2 * C牢pxP Y * * 2 e p s * p x料 2 ) $ eqb:=pye p s* ( ”c+ eps*px 本 )d f ( q , x ) $ c O : = l ;c : = c O * ( l + f o ri : = l : nsum( e p s 八日 m k i d (c c , i ) ) ) ; y : = e p s * q $ z a : = c o e f f (e q a , e p s) $z b : = c o e f f (e q b , e p s) $ f o r a l lxl e tt . a r 州 x) 林2=1-sech(x) * 牢2 ; a r r a yf a (2 0 ) ; f o ri : = 0 : 2 0dof a ( i ) : = m k i d ( f f , i ) ; a r r a yg a ( 2 0 ) ; procedurel e t g ( n , u ) ;f o r a l ljl e tg ( n j ) = d f ( u , x j ) ; procedurel e t f ( n , u ) ;f o r a l ljsuchthatj>Ol e tf ( n j ) = d f ( uム j 1 ) ; b $ z b : = r e s tr e sもz p p : = f i r s tz a ; f f : = c o e f f ( p p , f ( 0 , 1) ) ; ) " ) ; i fl e n g t h (f f )neq2thenr e d e r rl i s t ( p p , " n o t linenerfor f(i,1 8 0 l e t f (0 , f i r s t (f f )/ s e c o n d (f f ) ) ; w r i t e, . f( 0, 1): = ” ,f ( 0 , 1) ; z a : = r e s tz a $ f o ri : = O : ndo《 g a ( i ) : = f o rj : = l : i + lsummkid(丸山 2 0 + j ) * s e c h ( b * X ) * * ( 2 * j ) ; l e t g ( i , g a ( i )) ; = 五r s tz b ; p p : = f i r s tz a ;qq: z a : = r e s tz a ;z h : = r e s もz b ; 汀 : =c o e f f ( p p , f ( i 十1 , 1 ) ) ; 川0七 linenerforf(i,1) ” ) ; i fl e n g t h (f f )neq2thenr e de r rl i s t ( p p, l e t f ( i +1 , f i r s t( 汀 ) /second( 官 ) ) ; r r : = r e v e r s ec o e f f (q q , s e c h ( b収 ) ) ; l : = l e n g t hr r ; i n d : = i * 2 0 + i + l ; f o rk:=1 : 1do《 i ff i r s tr rneq0then《 i fk= l2then《 c c c : = c o e f f 五 (r s tr r, m k i d (c c , i +1 ) ) ; i fl e n g t h (c c c )= 2then s e t ( m k i d (c c , i +1 ) , f i r s t (c c c ) / s e c o n d (c c c ) ) e l s er e d e r rl i s t (c c c, 川o七 solvable"); ” : = " , −f i r 品 (c c c ) / s e c o n何c c c)》 w r i t e" c c ", i + l, e l s e《v a r : = m k i d (a , i n d ) ; a a : = c o e ( 在f i r s tr r , v a r ) ; i fl e n g t h (a a )= 3then《 i fn o t ( f i r s t ( a a )= 0 )then ) ; r e < l e r rl i s t (a a . ," n o℃ solvable for a” s e t (v a r, s e c o n d (a . a ) / t h i r d (a a )) ;i n d : = i n d 1》 e l s ei fl e n g t h ( a a ) = 2then《 s e t (v a r, f i r s t (a a ) / s e c o n d (a a ) ) ;i n d : = i n d 1》 e l s er e d e r rl i s t (aa, 川o tsolvable' ・ ) 》 》 ; r r : = r c s tr r》 ; w r i t e" z a ", i , " := ” ,p p ;w r i t e" z b ", i, ' ‘ : = ” ,q q ; w r i t e" f( り+ 1, ”1 ): = ” ,f ( i + l , 1 ) ;w r i t e" g( ” ,i , ヘ O) : = ” ,g ( i , O ) ; cリ+ 1 , ” : = ” ,mkid(c c , i +1 ) 》 ; w r i t e” end; 8 1 3 .最 後 に 現在、数式処理システムとして Macsyma,Mathematica,M a p l e ,R e d u c e ,D e r i v e,…等の多く のシステムが利用できるようになっています。これらのシステムの多くはウインドウ・インターフェ ース、グラフィック・ユーザー・インターフェースや、計算結果を図形化して表示する機能を持っ ています O これに対して、 REDUCEにはいまだ計算結果をグラフに表示する機能を持っていませ ん。そういう意味で遅れているわけですが、これは、通常の市販ソフトとは異なり REDUCEがユー ザーによってサポートされているということにもよるのでしょう。実際 Hearnは REDUCE3に ついて、ライセンス料は取る(従って PDSとして公開されているわけではない)がソース込みで 5 0 0ドルという手数料のみしか取らないと言っています(もっとも将来にわたってこれが続くとい う保証はないが)。 他のシステムと違って、ソースが付いていることで自分で新しく機能を追加したりシステムをい じることが出来ます。もっともそれには LISPについて良く知っていることが必要ですが。 参考文献 [1] AnthonyC .Hearn, ” REDUCEUSER’ S乱1ANUALv e r s i o n3 . 4 , ” TheRandC o r p o r a t i o n SantaMonica,CA9 0 4 0 6 2 1 3 8 ,( J u l y1 9 9 1 ) . [2] GerhardRayna, ” REDUCES oftwaref o rA l g e b r a i cComputation , ”S p r i n g e r V e r l a g , ( 1 9 8 7 ) . [3] A .C .ハーン,(戸島ひろし訳)「REDUCEユーザーズマニュアル」,マグロウヒル,( 1 9 8 8 年 8月 ) . [4J 広田良吾,伊藤雅明「REDUCE入門」,サイエンス社,( 1 9 8 9 ) . [5] D . シュタウファー, F .W.へール, v .ヴィンケルマン, J .G .ザボリツキー,(金田康正監 ,シュプ 訳)「よくわかる計算機物理一コンピュータ・シミュレーションと計算機代数入門 J 9 9 0年 4月 ) . リンガー・フェアラーク東京( 1 [6J 森本光生「パソコンによる数式処理」,朝倉書店( 1 9 9 0年 8月 ) . [7J 落合豊行、永友清和「REDUCEによる線形代数」,近代科学社( 1 9 9 0年 1月 ) . [8J 大河内茂美「REDUCEで数学を」,森北出版( 1 9 9 0年 2月 ) . 8 2
© Copyright 2024