[Top] [Contents] [Index] [ ? ]

Maxima 5.40.0 Manual

Maximaはコンピュータ代数システムです。Lispで実装されています。

MaximaはMacsymaシステムから派生したものです。 Macsymaシステムは、MITで1968年から1982年にかけてプロジェクトMACの一部として開発されました。 MITは、1982年にMacsymaソースコードのコピーをエネルギー省に引き渡しました; そのバージョンは現在、DOE Macsymaとして知られています。 DOE Macsymaのコピーは、テキサス大学のWilliam F. Schelter教授によって、 1982年から教授がなくなる2001年まで保守されました。 1998年にSchelterは、 エネルギー省からDOE MacsymaソースコードをGNU Public Licenseの下で公開する許可を得て、 2000年に彼は、 DOE Macsymaを保守・開発するために、MaximaプロジェクトをSourceForgeで始めました。 だから、Maximaと呼ばれています。

Maximaの基盤


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. Introduction to Maxima

コマンド"maxima"でMaximaを起動してください。 Maximaがバージョン情報とプロンプトを表示します。 それぞれのMaximaコマンドにはセミコロンを終わりに付けてください。 コマンド"quit();"でセッションが終了します。 以下は、セッションのサンプルです。

 
[wfs@chromium]$ maxima
Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp CMU Common Lisp 19a
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) factor(10!);
                            8  4  2
(%o1)                      2  3  5  7
(%i2) expand ((x + y)^6);
       6        5       2  4       3  3       4  2      5      6
(%o2) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i3) factor (x^6 - 1);
                              2            2
(%o3)       (x - 1) (x + 1) (x  - x + 1) (x  + x + 1)
(%i4) quit();
[wfs@chromium]$

Maximaはインフォページを検索できます。 コマンドの情報や、文字列を含むコマンドや変数すべてを表示させるには、 describeコマンドを使ってください。 クエスチョンマーク? (完全一致検索)と 二重クエスチョンマーク??(部分一致検索)はdescribeの省略形です:

 
(%i1) ?? integ
 0: Functions and Variables for Elliptic Integrals
 1: Functions and Variables for Integration
 2: Introduction to Elliptic Functions and Integrals
 3: Introduction to Integration
 4: askinteger  (Functions and Variables for Simplification)
 5: integerp  (Functions and Variables for Miscellaneous Options)
 6: integer_partitions  (Functions and Variables for Sets)
 7: integrate  (Functions and Variables for Integration)
 8: integrate_use_rootsof  (Functions and Variables for Integration)
 9: integration_constant_counter  (Functions and Variables for
    Integration)
 10: nonnegintegerp  (Functions and Variables for linearalgebra)
Enter space-separated numbers, `all' or `none': 5 4

 -- Function: integerp (<expr>)
     Returns `true' if <expr> is a literal numeric integer, otherwise
     `false'.

     `integerp' returns false if its argument is a symbol, even if the
     argument is declared integer.

     Examples:

          (%i1) integerp (0);
          (%o1)                         true
          (%i2) integerp (1);
          (%o2)                         true
          (%i3) integerp (-17);
          (%o3)                         true
          (%i4) integerp (0.0);
          (%o4)                         false
          (%i5) integerp (1.0);
          (%o5)                         false
          (%i6) integerp (%pi);
          (%o6)                         false
          (%i7) integerp (n);
          (%o7)                         false
          (%i8) declare (n, integer);
          (%o8)                         done
          (%i9) integerp (n);
          (%o9)                         false

 -- Function: askinteger (<expr>, integer)
 -- Function: askinteger (<expr>)
 -- Function: askinteger (<expr>, even)
 -- Function: askinteger (<expr>, odd)
     `askinteger (<expr>, integer)' attempts to determine from the
     `assume' database whether <expr> is an integer.  `askinteger'
     prompts the user if it cannot tell otherwise, and attempt to
     install the information in the database if possible.  `askinteger
     (<expr>)' is equivalent to `askinteger (<expr>, integer)'.

     `askinteger (<expr>, even)' and `askinteger (<expr>, odd)'
     likewise attempt to determine if <expr> is an even integer or odd
     integer, respectively.

(%o1)                                true

結果を後で使うには、結果を変数に割り当てるか、 自動的に供給されるラベルで参照することができます。 加えて、%は直前の計算結果を示します:

 
(%i1) u: expand ((x + y)^6);
       6        5       2  4       3  3       4  2      5      6
(%o1) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i2) diff (u, x);
         5         4       2  3       3  2       4        5
(%o2) 6 y  + 30 x y  + 60 x  y  + 60 x  y  + 30 x  y + 6 x
(%i3) factor (%o2);
                                    5
(%o3)                      6 (y + x)

Maximaは複素数や数値定数について知っています:

 
(%i1) cos(%pi);
(%o1)                          - 1
(%i2) exp(%i*%pi);
(%o2)                          - 1

Maximaは微積分法ができます:

 
(%i1) u: expand ((x + y)^6);
       6        5       2  4       3  3       4  2      5      6
(%o1) y  + 6 x y  + 15 x  y  + 20 x  y  + 15 x  y  + 6 x  y + x
(%i2) diff (%, x);
         5         4       2  3       3  2       4        5
(%o2) 6 y  + 30 x y  + 60 x  y  + 60 x  y  + 30 x  y + 6 x
(%i3) integrate (1/(1 + x^3), x);
                                  2 x - 1
                2            atan(-------)
           log(x  - x + 1)        sqrt(3)    log(x + 1)
(%o3)    - --------------- + ------------- + ----------
                  6             sqrt(3)          3

Maximaは1次方程式系や3次方程式を解くことができます:

 
(%i1) linsolve ([3*x + 4*y = 7, 2*x + a*y = 13], [x, y]);
                        7 a - 52        25
(%o1)              [x = --------, y = -------]
                        3 a - 8       3 a - 8
(%i2) solve (x^3 - 3*x^2 + 5*x = 15, x);
(%o2)       [x = - sqrt(5) %i, x = sqrt(5) %i, x = 3]

Maximaは非線形方程式系を解くことができます。 もし結果を表示させたくなければ、コマンドの終わりに;の代わりに$をつければよいことに注意してください:

 
(%i1) eq_1: x^2 + 3*x*y + y^2 = 0$
(%i2) eq_2: 3*x + y = 1$
(%i3) solve ([eq_1, eq_2]);
              3 sqrt(5) + 7      sqrt(5) + 3
(%o3) [[y = - -------------, x = -----------], 
                    2                 2

                               3 sqrt(5) - 7        sqrt(5) - 3
                          [y = -------------, x = - -----------]]
                                     2                   2

Maximaは関数のプロットが生成できます:

 
(%i1) plot2d (sin(x)/x, [x, -20, 20])$

figures/introduction1

 
(%i2) plot2d ([atan(x), erf(x), tanh(x)], [x, -5, 5], [y, -1.5, 2])$

figures/introduction2

 
(%i3) plot3d (sin(sqrt(x^2 + y^2))/sqrt(x^2 + y^2), 
         [x, -12, 12], [y, -12, 12])$

figures/introduction3

Categories:  Help


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. Bug Detection and Reporting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 Functions and Variables for Bug Detection and Reporting

関数: run_testsuite ([options])

Maximaのテストスイートを走らせます。 望みの答えを生成したテストは「パス」とみなされます。 望みの答えを生成しないテストも同様ですが、既知のバグとしてマークされています。

run_testsuiteは、以下のオプションキーワード引数を取ります。

display_all

テストすべてを表示します。 通常は、テストが失敗しない限りテストを表示しません。 (デフォルトでは falseに設定されます。)

display_known_bugs

既知のバグとしてマークされているテストを表示します。 (デフォルトでは falseに設定されます。)

tests

これは、実行するテスト(単体の場合)、もしくはテストのリストです。 それぞれのテストは文字列かシンボルで指定することができます。 デフォルトではテストすべてを実行します。 テストの完全な組は testsuite_filesで指定されています。

time

時間情報を表示します。 もし trueならそれぞれのテストファイルにかかった時間を表示します。 もし allなら display_alltrueの時、 それぞれ個々のテストにかかった時間を示します。 デフォルトはfalseで、時間情報を示しません。

share_tests

shareディレクトリに関する追加のテストをロードします。 もし trueなら、テストスイートの一部としてこれらの追加のテストが走ります。 もし falseなら、 shareディレクトリからのテストは走りません。 もし onlyなら、 shareディレクトリからのテストだけが走ります。 もちろん、テストの実際の集合は、 testsオプションで制御することができます。 デフォルトは falseです。

例えば、 run_testsuite(display_known_bugs = true, tests=[rtest5])は、 テスト rtest5だけを走らせ、既知のバグとしてマークされているテストを表示します。

run_testsuite(display_all = true, tests=["rtest1", rtest1a])は、 テスト rtest1rtest2を走らせ、 テストそれぞれを表示します。

run_testsuiteは、Maxima環境を変更します。 通常は、テストスクリプトは 既知の環境(すなわちユーザー定義の関数や変数のない環境)を確立するために killを実行し、 それからテストにふさわしい関数や変数を定義します。

run_testsuitedoneを返します。

Categories:  Debugging

オプション変数: testsuite_files

testsuite_filesrun_testsuiteが実行するテスト一式です。 それは実行するテストを含むファイル名のリストです。 もしファイルの中のテストのいくつかが失敗することが既知なら、 ファイル名をリストする代わりに、 ファイル名と失敗するテスト番号を含むリストを使います。

例えば、以下はデフォルトのテスト一式の一部です:

 
 ["rtest13s", ["rtest14", 57, 63]]

これは、ファイル"rtest13s", "rtest14"から成るテストスイートを指定しますが、 "rtest14" は失敗することが既知の2つのテスト57と63を含みます。

Categories:  Debugging · Global variables

オプション変数: share_testsuite_files

share_testsuite_filesは、run_testsuiteがテストスイートの一部として走らせる shareディレクトリからのテストの集合です。

Categories:  Debugging · Global variables

関数: bug_report ()

MaximaとLispのバージョン番号を表示し、Maximaプロジェクトのバグレポートウェブサイトへのリンクを与えます。 バージョン情報はbuild_infoがレポートするものと同じです。

バグをレポートする時、 MaximaとLispのバージョン情報をバグレポートにコピーしてもらえると助かります。

bug_reportは空の文字列 ""を返します。

Categories:  Debugging

関数: build_info ()

(defstructで定義された) Maxima構造体として Maximaビルドのパラメータのまとめを表示します。 構造体のフィールドは以下です: version, timestamp, host, lisp_name, lisp_version。 (display2dにより)プリティプリントがイネーブルの時、 構造体は短いテーブルとして表示されます。

bug_report.も参照してください。

例:

 
(%i1) build_info ();
(%o1)
Maxima version: "5.36.1"
Maxima build date: "2015-06-02 11:26:48"
Host type: "x86_64-unknown-linux-gnu"
Lisp implementation type: "GNU Common Lisp (GCL)"
Lisp implementation version: "GCL 2.6.12"
(%i2) x : build_info ()$
(%i3) x@version;
(%o3)                               5.36.1
(%i4) x@timestamp;
(%o4)                         2015-06-02 11:26:48
(%i5) x@host;
(%o5)                      x86_64-unknown-linux-gnu
(%i6) x@lisp_name;
(%o6)                        GNU Common Lisp (GCL)
(%i7) x@lisp_version;
(%o7)                             GCL 2.6.12
(%i8) x;
(%o8)
Maxima version: "5.36.1"
Maxima build date: "2015-06-02 11:26:48"
Host type: "x86_64-unknown-linux-gnu"
Lisp implementation type: "GNU Common Lisp (GCL)"
Lisp implementation version: "GCL 2.6.12"

The Maxima version string can (here 5.36.1) can look very different:

 
(%i1) build_info();
(%o1)
Maxima version: "branch_5_37_base_331_g8322940_dirty"
Maxima build date: "2016-01-01 15:37:35"
Host type: "x86_64-unknown-linux-gnu"
Lisp implementation type: "CLISP"
Lisp implementation version: "2.49 (2010-07-07) (built 3605577779) (memory 3660647857)"

その場合、Maximaはリリースされたソースコードからビルドされておらず、 ソースコードのGITチェックアウトから直接ビルドされていました。 この例では、チェックアウトは最新のGITタグ(普通Maxima(メジャー)リリース(この例の場合5.37))から 331コミットあり、最後のコミットの短縮されたコミットハッシュは"8322940"でした。

Categories:  Debugging


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Help


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 Documentation

このMaximaのオンラインユーザーズマニュアルは、違った形でも見ることができます。 Maximaの対話プロンプトから?コマンド(すなわちdescribe関数)を使うと、テキスト形式でユーザーズマニュアルが表示されます。infoビューアを使うと、ユーザーズマニュアルは、infoハイパーテキストとして表示され、通常のウェブブラウザを使えば、ウェブページとして表示されます。

exampleはたくさんのMaxima関数の使用例を表示します。 例えば、

 
(%i1) example (integrate);

は、

 
(%i2) test(f):=block([u],u:integrate(f,x),ratsimp(f-diff(u,x)))
(%o2) test(f) := block([u], u : integrate(f, x),
                                         ratsimp(f - diff(u, x)))
(%i3) test(sin(x))
(%o3)                           0
(%i4) test(1/(x+1))
(%o4)                           0
(%i5) test(1/(x^2+1))
(%o5)                           0

という感じでさらに出力を表示します。

Categories:  Console interaction


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Functions and Variables for Help

関数: apropos (string)

stringを含むMaxima上の名前を検索します。 例えば、apropos ("exp")は、 (expand, exp, exponentializeのように) expを名前の一部として含むフラグ、関数すべてのリストを返します。 このように、もしなにかの名前の一部だけ覚えていたなら、 このコマンドを使って名前の残りを見つけることができます。 同様に、 apropos ("tr_")とすれば、翻訳器に関係した多くのスイッチのリストを 見つけることができます。翻訳器に関係したスイッチのほとんどはtr_で始まります。

apropos("")は、Maximaの名前すべてのリストを返します。

もし名前が見つからなければ、aproposは空のリスト[]を返します。

例:

"gamma"を含むMaximaシンボルすべてを表示します:

 
(%i1) apropos("gamma");
(%o1) [%gamma, gamma, gammagreek, gammalim, gamma_expand, gammagreek,
gamma_incomplete, gamma_incomplete_generalized,
gamma_incomplete_regularized, Gamma, log_gamma, makegamma,
prefer_gamma_incomplete, gamma-incomplete,
gamma_incomplete_generalized_regularized]

Categories:  Help

関数: demo (filename)

filenameの中のMaxima式を評価し、結果を表示します。 demoはそれぞれの式を評価した後 停止し、 ユーザーがリターンキーを入力すると続きを実行します。 (Xmaximaで走らせている場合、 demoはセミコロン;に続けて改行を入力する必要があります。)

demoは、filnameのファイルを探すため、 ディレクトリfile_search_demoのリストを検索します。 もしファイルの拡張子が.demなら、拡張子は省略できます。 file_searchも参照してください。

demoは引数を評価します。 demoはデモンストレーションファイルの名前を返します。

例:

 
(%i1) demo ("disol");

batching /home/wfs/maxima/share/simplification/disol.dem
 At the _ prompt, type ';' followed by enter to get next demo
(%i2)                      load(disol)

_
(%i3)           exp1 : a (e (g + f) + b (d + c))
(%o3)               a (e (g + f) + b (d + c))

_
(%i4)                disolate(exp1, a, b, e)
(%t4)                         d + c

(%t5)                         g + f

(%o5)                   a (%t5 e + %t4 b)

_

Categories:  Help · Console interaction · File input

関数: describe  
    describe (string)  
    describe (string, exact)  
    describe (string, inexact)

describe(string)describe(string, exact)と同値です。

describe(string, exact)は(大文字小文字は区別せず)stringに等しいタイトルを持った項目があれば、それを見つけます。

describe(string, inexact)はタイトルの中にstringを含むすべての項目を見つけます。 もし複数あれば、Maximaはユーザーに項目を選択するよう尋ねます。

対話プロンプトでは、 ? foo(?fooの間にスペース)は describe("foo", exact)と同値であり、 ?? foodescribe("foo", inexact)と同値です。

describe("", inexact)は、オンラインマニュアルでドキュメント化されたすべてのトピックのリストを出力します。

describeは引数をクォートします。 describeは、ドキュメントが見つかればtrueを返し、見つからなければfalseを返します。

Documentationも参照してください。

例:

 
(%i1) ?? integ
 0: Functions and Variables for Elliptic Integrals
 1: Functions and Variables for Integration
 2: Introduction to Elliptic Functions and Integrals
 3: Introduction to Integration
 4: askinteger  (Functions and Variables for Simplification)
 5: integerp  (Functions and Variables for Miscellaneous Options)
 6: integer_partitions  (Functions and Variables for Sets)
 7: integrate  (Functions and Variables for Integration)
 8: integrate_use_rootsof  (Functions and Variables for
    Integration)
 9: integration_constant_counter  (Functions and Variables for
    Integration)
 10: nonnegintegerp  (Functions and Variables for linearalgebra)
Enter space-separated numbers, `all' or `none': 7 8

 -- Function: integrate (<expr>, <x>)
 -- Function: integrate (<expr>, <x>, <a>, <b>)
     Attempts to symbolically compute the integral of <expr> with
     respect to <x>.  `integrate (<expr>, <x>)' is an indefinite
     integral, while `integrate (<expr>, <x>, <a>, <b>)' is a
     definite integral, [...]

 -- Option variable: integrate_use_rootsof
     Default value: `false'

     When `integrate_use_rootsof' is `true' and the denominator of
     a rational function cannot be factored, `integrate' returns
     the integral in a form which is a sum over the roots (not yet
     known) of the denominator.
     [...]

この例では、項目7と8を選択しました。 ([...]でほのめかされているように出力は省略されています。) allnoneを入力すると、項目すべてを選択したり、1つも選ばなかったりできます。 それぞれaもしくはnと省略形を使うことができます。

Categories:  Help · Console interaction

関数: example  
    example (topic)  
    example ()

example (topic)は、topicの例をいくつか表示します。 topicはシンボルもしくは文字列です。 ifdolambdaのような演算子の例を得るには、引数は文字列でなければなりません。例えば、 example ("do")exampleは、大文字小文字を区別しません。トピックのほとんどは関数名です。

example ()はわかっているトピックすべてのリストを表示します。

例を含むファイル名は、グローバル変数manual_demoで与えられます。デフォルトは"manual.demo"です。

exampleは引数をクォートします。 exampleはエラーがあったり引数がなかったりしなければdoneを返します。 引数がない場合には わかっているトピックすべてのリストを表示します。

例:

 
(%i1) example(append);
(%i2) append([y+x,0,-3.2],[2.5e+20,x])
(%o2)             [y + x, 0, - 3.2, 2.5e+20, x]
(%o2)                         done
(%i3) example("lambda");
(%i4) lambda([x,y,z],x^2+y^2+z^2)
                                    2    2    2
(%o4)            lambda([x, y, z], x  + y  + z )
(%i5) %(1,2,a)
                              2
(%o5)                        a  + 5
(%i6) 1+2+a
(%o6)                         a + 3
(%o6)                         done

Categories:  Help · Console interaction

オプション変数: manual_demo

デフォルト値: "manual.demo"

manual_demoは、 関数exampleのための例が入っているファイルの名前を指定します。 exampleを参照してください。

Categories:  Help · Global variables


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. Command Line


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 Introduction to Command Line


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 Functions and Variables for Command Line

システム変数: __

__は、現在評価中の入力式です。 すなわち、入力式 exprが評価されている間、 __exprです。

__は、入力が整理されたり評価されたりする前に入力式に割り当てられます。 しかし表示される時、__の値は(評価はされませんが)整理されます。

batchload__を認識します。 batchが処理するファイル内では、 __は対話プロンプトでのそれと同じ意味になります。 loadが処理するファイル内では、 __は対話プロンプトやバッチファイルの中で直前に入力された入力式にバインドされています; __は処理中のファイル内の入力式にはバインドされません。 特に、 load (filename)が対話プロンプトからコールされた時、 __は、ファイルが処理されている間、 load (filename)にバインドされます。

_%も参照してください。

例:

 
(%i1) print ("I was called as", __);
I was called as print(I was called as, __)
(%o1)              print(I was called as, __)
(%i2) foo (__);
(%o2)                     foo(foo(__))
(%i3) g (x) := (print ("Current input expression =", __), 0);
(%o3) g(x) := (print("Current input expression =", __), 0)
(%i4) [aa : 1, bb : 2, cc : 3];
(%o4)                       [1, 2, 3]
(%i5) (aa + bb + cc)/(dd + ee + g(x));
                            cc + bb + aa
Current input expression = --------------
                           g(x) + ee + dd
                                6
(%o5)                        -------
                             ee + dd

Categories:  Global variables

システム変数: _

_は直前の入力式です。 (例えば、%i1, %i2, %i3, …)

_は、入力が整理されたり評価されたりする前に、入力式に割り当てられます。 しかし、 _の値は、表示される時(評価はされませんが)整理されます。

batchload_を認識します。 batchが処理するファイル内では、 _は対話プロンプトでのそれと同じ意味になります。 loadが処理するファイル内では、 _は、対話プロンプトやバッチファイルの中で、直前に入力された入力式にバインドされます; _は処理中のファイル内の入力式にはバインドされません。

__%も参照してください。

例:

 
(%i1) 13 + 29;
(%o1)                          42
(%i2) :lisp $_
((MPLUS) 13 29)
(%i2) _;
(%o2)                          42
(%i3) sin (%pi/2);
(%o3)                           1
(%i4) :lisp $_
((%SIN) ((MQUOTIENT) $%PI 2))
(%i4) _;
(%o4)                           1
(%i5) a: 13$
(%i6) b: 29$
(%i7) a + b;
(%o7)                          42
(%i8) :lisp $_
((MPLUS) $A $B)
(%i8) _;
(%o8)                         b + a
(%i9) a + b;
(%o9)                          42
(%i10) ev (_);
(%o10)                         42

システム変数: %

%はMaximaが直前に計算した出力式です。 (例えば、 %o1, %o2, %o3, …) 出力の表示には無関係です。

batchload%を認識します。 batchが処理するファイル内では、 %は対話プロンプトでのそれと同じ意味になります。 loadが処理するファイル内では、 %は、対話プロンプトやバッチファイルの中で、直前に計算された出力式にバインドされます; %は、処理中のファイル内の出力式にはバインドされません。

_, %%, %thも参照してください。

システム変数: %%

合成文、すなわちblock, lambda, もしくは(s_1, ..., s_n)の中で、 %%は前の文の値です。

合成文の最初の文もしくは合成文の外側では%%は未定義です。

%%は、batchloadで認識され、 対話プロンプトでのそれと同じ意味になります。

%も参照してください。

例:

以下の二つの例は同じ結果になります。

 
(%i1) block (integrate (x^5, x), ev (%%, x=2) - ev (%%, x=1));
                               21
(%o1)                          --
                               2
(%i2) block ([prev], prev: integrate (x^5, x),
               ev (prev, x=2) - ev (prev, x=1));
                               21
(%o2)                          --
                               2

合成文は他の合成文を含むかもしれません。 文が単文か合成文かに関係なく、 %%は前の文の値です。

 
(%i3) block (block (a^n, %%*42), %%/6);
                                 n
(%o3)                         7 a

合成文の中ではブレイクプロンプトで%%の値を検査することができます。 ブレイクプロンプトは break関数を実行することで開きます。 例えば、以下の例で%%;を入力すると、42が出力されます。

 
(%i4) block (a: 42, break ())$

Entering a Maxima break point. Type 'exit;' to resume.
_%%;
42
_

Categories:  Global variables

関数: %th (i)

i番前の出力式の値。 すなわち、計算される次の式をn番目の出力とすると %th (m)は、(n - m)番目の出力です。

batchload%thを認識されます。 batchが処理するファイル内では、 %thは、対話プロンプトでのそれと同じ意味になります。 loadが処理するファイル内では、 %thは、対話プロンプトやバッチファイルの中で、直前に計算された出力式にバインドされます; %thは、処理中のファイル内の出力式にはバインドされません。

%%%も参照してください。

例:

batchファイルの中でとか、出力式のグループを参照する時%thは役立ちます。 この例はsを最後の5つの出力式の和に設定します。

 
(%i1) 1;2;3;4;5;
(%o1)                           1
(%o2)                           2
(%o3)                           3
(%o4)                           4
(%o5)                           5
(%i6) block (s: 0, for i:1 thru 5 do s: s + %th(i), s);
(%o6)                          15

Categories:  Console interaction

特殊シンボル: ?

関数名や変数名の前置としての?は、 名前が、Maximaの名前ではなくLispの名前であることを意味します。 例えば、?roundは、Lisp関数ROUNDを意味します。 この点に関して更に知るにはLisp and Maximaを参照してください。

表記? word (空白を空けて単語が続くクエスチョンマーク)は describe("word")と同値です。 クエスチョンマークは入力ラインの先頭になければいけません; そうでなければドキュメンテーションのリクエストとして認識されません。 describeも参照してください。

Categories:  Help · Console interaction

特殊シンボル: ??

表記?? word(空白を空けて単語が続く??)は describe("word", inexact)と同値です。 クエスチョンマークは入力行の先頭になければいけません; そうでなければドキュメンテーションのリクエストとして認識されません。 describeも参照してください。

Categories:  Help · Console interaction

入力終端子: $

ドル記号 $ は入力式を終端して、 結果を最新出力 %%o1のような出力ラベルに割り当てますが、結果は表示しません。

; も参照してください。

Example:

 
(%i1) 1 + 2 + 3 $
(%i2) %;
(%o2)                           6
(%i3) %o1;
(%o3)                           6

入力終端子: ;

セミコロン ; は入力式を終端して、結果の出力を表示します。

$ も参照してください。

Example:

 
(%i1) 1 + 2 + 3;
(%o1)                           6

オプション変数: inchar

デフォルト値: %i

incharはユーザーが入力した式のラベルの前置です。 Maximaは、 incharlinenumを連結することで、 入力式それぞれのラベルを自動的に構成します。

incharは単一文字である必要はなく、 任意の文字列もしくはシンボルを割り当てられます。 Maximaは内部的に前置の最初の文字だけを考慮するので、 前置inchar, outchar, linecharは異なる最初の文字を持たなければいけません。 そうでなければkill(inlabels)のようないくつかのコマンドは期待通りに動きません。

labelsも参照してください。

例:

 
(%i1) inchar: "input";
(%o1)                         input
(input2) expand((a+b)^3);
                     3        2      2      3
(%o2)               b  + 3 a b  + 3 a  b + a

システム変数: infolists

デフォルト値: []

infolistsはMaximaに関する情報リストすべての名前のリストです。 これらは以下の通りです:

labels

すべてのバインドされた%i, %o, %tラベル

values

:::や関数バインドが生成する、 ユーザー変数であって、Maximaオプションやスイッチでない、 すべてのバインドされたアトム

functions

:=defineが生成するすべてのユーザー定義関数

arrays

:, ::, または:=が生成するすべての宣言配列と未宣言配列

macros

::=が生成したすべてのユーザー定義マクロ関数

myoptions

(それらが後にデフォルト値に再設定されようがされまいが) ユーザーが再設定したすべてのオプション

rules

tellsimp, tellsimpafter, defmatch, またはdefruleが生成するすべてのユーザー定義パターンマッチングと整理規則

aliases

alias, ordergreat, orderless関数が生成するか、 declareを使ってアトムをnounとして宣言することで生成された、 ユーザー定義エーリアスを持つすべてのアトム

dependencies

dependsdependencies, gradef関数が生成する関数依存性を持つすべてのアトム

gradefs

gradef関数が生成するユーザー定義の導関数を持つすべての関数

props

declare関数で確立されるプロパティはもちろん、 atvaluematchdeclareなどが確立するプロパティで、 上で述べたもの以外の任意のプロパティを持つすべてのアトム

let_rule_packages

特別パッケージdefault_let_rule_packageに加えて すべてのユーザー定義let規則パッケージ (default_let_rule_packageは、 ユーザーが陽に設定していない時使われる規則パッケージの名前です。)

関数: kill  
    kill (a_1, …, a_n)  
    kill (labels)  
    kill (inlabels, outlabels, linelabels)  
    kill (n)  
    kill ([m, n])  
    kill (values, functions, arrays, …)  
    kill (all)  
    kill (allbut (a_1, …, a_n))

引数a_1, …, a_nからすべてのバインド(値、関数、配列、ルール)を解除します。 引数a_kはシンボルか配列要素を取り得ます。 a_kが配列要素の時、killは配列の他の要素には影響することなくその要素をアンバインドします。

いくつかの特殊な引数が認識されます。 例えば、kill (inlabels, functions, allbut (foo, bar))のように、異なる引数の種類が組み合わされます。

kill (labels)はそれまでに作られた入力、出力、中間式のラベルすべてをアンバインドします。 kill (inlabels)incharの現在の値で始まる入力ラベルのみをアンバインドします。 同様に、 kill (outlabels)outcharの現在の値で始まる出力ラベルのみをアンバインドし、 kill (linelabels)linecharの現在の値で始まる中間式ラベルのみをアンバインドします。

kill (n)(nは整数)は入力、出力ラベルの最近のn個をアンバインドします。

kill ([m, n])は入力、出力ラベルmからnまでをアンバインドします。

kill (infolist)infolistの中のすべての項目をアンバインドします。 ここで、infolistは(values, functions, arraysのような) infolistsの中の任意の項目です。 infolistsも参照してください。

kill (all)はinfolistsのすべての項目をアンバインドします。 kill (all)はグローバル変数をデフォルト値にリセットしません; この点に関してはresetを参照してください。

kill (allbut (a_1, ..., a_n))は、 a_1, ..., a_nを除いて すべてのinfolistsの中のすべての項目をアンバインドします。 kill (allbut (infolist))infolistinfolistvalues, functions, arraysなど) 上の項目を除いてすべての項目をアンバインドします。

バインドされたプロパティによって使われたメモリは、すべてのシンボルがプロパティからアンバインドされるまで解放されません。 特に、シンボルの値によって使われているメモリを解放するには、 シンボルそのもののアンバインドだけでなく、バインドされた値を表示する出力ラベルをアンバインドします。

killは引数をクォートします。 引数を評価するにはクォートクォート演算子''を使います。

kill (symbol)はシンボルのすべてのプロパティをアンバインドします。 対照的に、関数remvalue, remfunction, remarray, remruleは特定のプロパティをアンバインドします。

kilは常に、たとえ引数がバインドされていなくても、doneを返します。

関数: labels (symbol)   symbolで始まる入力、出力、中間式ラベルのリストを返します。

symbolは、inchar, outchar, もしくはlinecharの値が典型的です。 もしsymbolで始まるラベルがなければ、labelsは空のリストを返します。

デフォルトで、Maximaはそれぞれのユーザー入力式の結果を表示し、結果に出力ラベルが与えられます。 入力を;(セミコロン)の代わりに$(ドル記号)で終了することで、出力表示は抑制されます。 出力ラベルが構成され、結果にバインドされますが、表示されません。 ラベルは表示された出力ラベルと同じ方法で参照できます。 %%%, %thも参照してください。

いくつかの関数では中間式ラベルが生成されることがあります。 フラグprogrammodesolveや他の関数が式のリストを返す代わりに中間式ラベルを生成するかどうかを制御します。 ldisplayのようないくつかの他の関数は常に中間式ラベルを生成します。

incharoutchar, linechar, infolistsも参照してください。

システム変数: labels

変数labelsは入力、出力、中間式ラベルのリストです。 inchar, outchar, もしくはlinecharが再定義されても、以前のラベルすべてを含みます。

オプション変数: linechar

デフォルト値: %t

linecharは Maximaが生成する中間式のラベルの前置です。 Maximaは(もし表示されるなら) linecharlinenumを連結することで 中間式それぞれのラベルを構成します。

linecharは単一文字である必要はなく、 任意の文字列もしくはシンボルを割り当てられます。 Maximaは内部的に 前置の最初の文字だけを考慮するので、 前置inchar, outchar, linecharは異なる最初の文字を持たなければいけません。 そうでなければ kill(inlabels)のようないくつかのコマンドは期待通りに動きません。

中間式は表示されるかもしれませんし、表示されないかもしれません。 programmodelabelsも参照してください。

システム変数: linenum

入力出力式の現在のペアの行番号。

システム変数: myoptions

デフォルト値: []

myoptionsはユーザーが再設定したオプションすべてのリストです。 初期値に再設定されたか否かに関わらずです。

オプション変数: nolabels

デフォルト値: false

nolabelstrueであれば、 入力と出力結果のラベル(それぞれ%i%o)は表示されますが、 ラベルは結果にバインドされず、labelsリストにも追加されません。 ラベルは結果にバインドされないので、 ガーベッジコレクションは結果が使ったメモリを回復することができます。

そうでなければ、入力と出力の結果のラベルは結果にバインドされ、labelsリストに追加されます。

中間式ラベル(%t)はnolabelsに影響されません; nolabelstrueでもfalseでも、中間式ラベルはバインドされ、labelsリストに追加されます。

batchloadlabelsも参照してください。

Categories:  Global flags · Session management

オプション変数: optionset

デフォルト値: false

optionsettrueの時、Maximaは、Maximaオプションが再設定されるといつでも、メッセージを表示します。 もしユーザーがあるオプションの綴りが怪しく、割り当てた変数が本当にオプション変数か確認したいなら便利です。

例:

 
(%i1) optionset:true;
assignment: assigning to option optionset
(%o1)                         true
(%i2) gamma_expand:true;
assignment: assigning to option gamma_expand
(%o2)                         true

オプション変数: outchar

デフォルト値: %o

outcharはMaximaが計算した式のラベルの前置です。 outcharlinenumを連結することで、 Maximaは計算された式それぞれのラベルを自動的に構成します。 outcharは、単一文字である必要はなく、 任意の文字列もしくはシンボルを割り当てられます。 Maximaは内部的に前置の最初の文字だけを考慮するので、 前置inchar, outchar, linecharは異なる最初の文字を持たなければいけません。 そうでなければ、kill(inlabels)のようないくつかのコマンドは期待通りに動きません。

labelsも参照してください。

例:

 
(%i1) outchar: "output";
(output1)                    output
(%i2) expand((a+b)^3);
                     3        2      2      3
(output2)           b  + 3 a b  + 3 a  b + a

関数: playback  
    playback ()  
    playback (n)  
    playback ([m, n])  
    playback ([m])  
    playback (input)  
    playback (slow)  
    playback (time)  
    playback (grind)

入力、出力、中間式を表示します。再計算はしません。 playbackはラベルにバインドされた式表示するだけです; (printdescribeで表示されたテキストやエラーメッセージなど)他の出力は表示されません。 labelsも参照してください。

playbackは引数をクォートします。 引数を評価するにはクォートクォート演算子''を使います。 playbackは常にdoneを返します。

playback ()(引数なし)は今までに生成された入力、出力、中間式すべてを表示します。 たとえ計算時に$終端子で出力が抑制されていても、 出力式は表示されます。

playback (n)は最近のn個の式を表示します。 入力、出力、中間式それぞれを1と数えます。

playback ([m, n])m番目からn番目までの入力、出力、中間式を表示します。

playback ([m])playback ([m, m])と同値です; これは普通、入力と出力の式のペアを1つ表示します。

playback (input)は今までに生成された入力式をすべて表示します。

playback (slow)は式の間でポーズし、ユーザーが enterを入力するのを待ちます。 これは demoと似たような振る舞いです。 playback (slow)は、savestringoutと関連して、 役立つ式を取り出すために2次記憶ファイルを生成するときに便利です。

playback (time)はそれぞれの式の計算時間を表示します。

playback (grind)は入力式を grind関数と同じ形式で表示します。 出力式は grindオプションで影響を受けません。 grindを参照してください。

例えば、playback ([5, 10], grind, time, slow)のように、 引数を組み合わせられます。

オプション変数: prompt

デフォルト値: _

promptは、demo関数やplayback (slow)モード、 (breakで呼び出された)Maximaブレイクループのプロンプトシンボルです。

関数: quit ()

Maximaセッションを終了します。 関数は、quitではなく、quit();もしくはquit()$として呼び出さなければいけないことに注意してください。

長い計算を中断するには control-Cをタイプしてください。 デフォルトの動作では Maximaプロンプトに戻ります。 もし*debugger-hook*nilなら、 control-CはLispデバッガを開きます。 debuggingも参照してください。

Categories:  Console interaction

関数: read (expr_1, …, expr_n)

expr_1, …, expr_nを表示し、 コンソールから式1つを読み込み、評価された式を返します。 式はセミコロン;もしくはドル記号$で終了します。

readonlyも参照してください。

 
(%i1) foo: 42$
(%i2) foo: read ("foo is", foo, " -- enter new value.")$
foo is 42  -- enter new value.
(a+b)^3;
(%i3) foo;
                                     3
(%o3)                         (b + a)

Categories:  Console interaction

関数: readonly (expr_1, …, expr_n)

expr_1, …, expr_nを表示し、 コンソールから式を1つ読み込み、 式を(評価せずに)返します。 式はセミコロン;もしくはドル記号$で終了します。

readも参照してください。

例:

 
(%i1) aa: 7$
(%i2) foo: readonly ("Enter an expression:");
Enter an expression:
2^aa;
                                  aa
(%o2)                            2
(%i3) foo: read ("Enter an expression:");
Enter an expression:
2^aa;
(%o3)                            128

Categories:  Console interaction

関数: reset ()

多くのグローバル変数やオプション、いくつかの他の変数をデフォルト値に再設定します。

resetは Lispリスト*variable-initial-values*上の変数を処理します。 Lispマクロdefmvarは(他の動作の間に)このリストに変数を置きます。 すべてではありませんが多くのグローバル変数やオプションがdefmvarによって定義されており、 また、defmvarで定義されたいくつかの変数はグローバル変数でもオプションでもありません。

Categories:  Session management

オプション変数: showtime

デフォルト値: false

showtimetrueの時、出力式と一緒に計算時間と経過時間を表示します。

計算時間は常に記録されており、 showtimefalseの時でも、 timeplaybackで計算時間を表示することができます。

timerも参照してください。

関数: to_lisp ()

Maximaの下のLispシステムに入ります。(to-maxima)でMaximaに戻ります。

例:

関数を定義し、Maximaの下のLispシステムに入ります。 定義をプロパティリスト上で検査します。そして、関数定義を抽出し、因数分解し、 変数$resultに格納します。 変数はMaximaに戻った後、Maximaで使うことができます。

 
(%i1) f(x):=x^2+x;
                                  2
(%o1)                    f(x) := x  + x
(%i2) to_lisp();
Type (to-maxima) to restart, ($quit) to quit Maxima.

MAXIMA> (symbol-plist '$f)
(MPROPS (NIL MEXPR ((LAMBDA) ((MLIST) $X)
                             ((MPLUS) ((MEXPT) $X 2) $X))))
MAXIMA> (setq $result ($factor (caddr (mget '$f 'mexpr))))
((MTIMES SIMP FACTORED) $X ((MPLUS SIMP IRREDUCIBLE) 1 $X))
MAXIMA> (to-maxima)
Returning to Maxima
(%o2)                         true
(%i3) result;
(%o3)                       x (x + 1)

Categories:  Console interaction

システム変数: values

初期値: []

valuesは(Maximaのオプションやスイッチではなく)バインドされたユーザー変数すべてのリストです。 リストは、:::でバインドされたシンボルを含みます。

もし変数の値がコマンドkillや, remove, remvalueで削除されたら、 変数はvaluesから削除されます。

ユーザー定義関数のリストに関しては functionsを参照してください。

例:

最初、valuesはシンボルa, b, cを示しますが、 dも―それは値にバインドされていません―ユーザー関数fも示しません。 値は変数から削除されます。valuesは空のリストです。

 
(%i1) [a:99, b:: a-90, c:a-b, d, f(x):= x^2];
                                           2
(%o1)              [99, 9, 90, d, f(x) := x ]
(%i2) values;
(%o2)                       [a, b, c]
(%i3) [kill(a), remove(b,value), remvalue(c)];
(%o3)                   [done, done, [c]]
(%i4) values;
(%o4)                          []

Categories:  Evaluation · Global variables


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.3 Functions and Variables for Display

オプション変数: %edispflag

デフォルト値: false

%edispflagtrueの時、 Maximaは %eの負の指数乗を商として表示します。 例えば、%e^-x1/%e^xと表示されます。 exptdispflagも参照してください。

例:

 
(%i1) %e^-10;
                               - 10
(%o1)                        %e
(%i2) %edispflag:true$
(%i3) %e^-10;
                               1
(%o3)                         ----
                                10
                              %e

オプション変数: absboxchar

デフォルト値: !

absboxcharは1行より広い式の回りに絶対値記号を描くのに使われる文字です。

例:

 
(%i1) abs((x^3+1));
                            ! 3    !
(%o1)                       !x  + 1!

関数: disp (expr_1, expr_2, …)

displayのようですが、 等式ではなく引数の値だけが表示されます。 これは名前を持たない複雑な引数や引数の値だけに興味があって 名前には興味がない引数に役立ちます。

ldispprintも参照してください。

例:

 
(%i1) b[1,2]:x-x^2$
(%i2) x:123$
(%i3) disp(x, b[1,2], sin(1.0));
                               123

                                  2
                             x - x

                             0.8414709848078965

(%o3)                         done

Categories:  Display functions

関数: display (expr_1, expr_2, …)

左辺が未評価のexpr_iで、右辺が式の値の等式を行の中央に表示します。 この関数は、中間結果を表示するのにブロックやfor文の中で役立ちます。 displayの引数は、通常アトムや、添字付き変数、関数コールです。 dispも参照してください。

ldisplay, disp, ldispも参照してください。

例:

 
(%i1) b[1,2]:x-x^2$
(%i2) x:123$
(%i3) display(x, b[1,2], sin(1.0));
                             x = 123

                                      2
                         b     = x - x
                          1, 2

                          sin(1.0) = 0.8414709848078965

(%o3)                         done

Categories:  Display functions

オプション変数: display2d

デフォルト値: true

display2dfalseの時、 コンソール表示は(2次元)形式ではなく文字列(1次元)形式です。

等式の左寄せ表示と中央表示の間を切り替えるには、 leftjustも参照してください。

例:

 
(%i1) x/(x^2+1);
                               x
(%o1)                        ------
                              2
                             x  + 1
(%i2) display2d:false$
(%i3) x/(x^2+1);
(%o3) x/(x^2+1)

オプション変数: display_format_internal

デフォルト値: false

display_format_internaltrueの時、 式は数学的内部表現を隠すように変換されることなく表示されます。 表示はpartではなくinpartが返すものに対応します。

例:

 
User     part       inpart
a-b;      a - b     a + (- 1) b

           a            - 1
a/b;       -         a b
           b
                       1/2
sqrt(x);   sqrt(x)    x

          4 X        4
X*4/3;    ---        - X
           3         3

関数: dispterms (expr)

exprをパーツ毎に一行ずつ使って表示します。 すなわち、最初にexprの演算子が表示され、 それぞれの項が別々に表示されます。 もしexprが他の方法で表示するには大きすぎるなら、 これは役に立ちます。 例えば、もしP1, P2, ...が非常に大きな式なら、 P1 + P2 + ...を一度に表示しようとする場合、 表示プログラムは保存の空き領域を使い尽くすかもしれません。 しかしながら、 dispterms (P1 + P2 + ...)は、 P1を表示し、その下にP2を表示し、という具合です。 disptermsを使わない時、 もし指数式がA^Bのように表示するには広すぎるなら、 それはexpt (A, B) (もしくはA^^Bの場合、ncexpt (A, B))のように現れます。

Categories:  Display functions

関数: expt (a, b)
関数: ncexpt (a, b)

もし指数式がa^bのように表示するには広すぎるなら、 expt (a, b) (もしくは、a^^bの場合、ncexpt (a, b) のように現れます。

exptncexptは入力では認識されません。

オプション変数: exptdispflag

デフォルト値: true

exptdispflagtrueの時、 Maximaは式を商を使って負の指数の式を表示します。

例:

 
(%i1) exptdispflag:true;
(%o1)                         true
(%i2) 10^-x;
                                1
(%o2)                          ---
                                 x
                               10
(%i3) exptdispflag:false;
(%o3)                         false
(%i4) 10^-x;
                                - x
(%o4)                         10

関数: grind (expr)

関数grindは コンソールにMaximaへの入力に適した形でexprを印刷します。 grindはいつもdoneを返します。

exprが関数名やマクロ名の時、 grindは、名前だけでなく関数やマクロ定義を出力します。

stringも参照してください。 それは出力を印刷する代わりに文字列を返します。 grindstringの出力より若干読みやすい方法で 式を印刷しようとします。

grindは引数を評価します。

例:

 
(%i1) aa + 1729;
(%o1)                       aa + 1729
(%i2) grind (%);
aa+1729$
(%o2)                         done
(%i3) [aa, 1729, aa + 1729];
(%o3)                 [aa, 1729, aa + 1729]
(%i4) grind (%);
[aa,1729,aa+1729]$
(%o4)                         done
(%i5) matrix ([aa, 17], [29, bb]);
                           [ aa  17 ]
(%o5)                      [        ]
                           [ 29  bb ]
(%i6) grind (%);
matrix([aa,17],[29,bb])$
(%o6)                         done
(%i7) set (aa, 17, 29, bb);
(%o7)                   {17, 29, aa, bb}
(%i8) grind (%);
{17,29,aa,bb}$
(%o8)                         done
(%i9) exp (aa / (bb + 17)^29);
                                aa
                            -----------
                                     29
                            (bb + 17)
(%o9)                     %e
(%i10) grind (%);
%e^(aa/(bb+17)^29)$
(%o10)                        done
(%i11) expr: expand ((aa + bb)^10);
         10           9        2   8         3   7         4   6
(%o11) bb   + 10 aa bb  + 45 aa  bb  + 120 aa  bb  + 210 aa  bb
         5   5         6   4         7   3        8   2
 + 252 aa  bb  + 210 aa  bb  + 120 aa  bb  + 45 aa  bb
        9        10
 + 10 aa  bb + aa
(%i12) grind (expr);
bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6
     +252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2
     +10*aa^9*bb+aa^10$
(%o12)                        done
(%i13) string (expr);
(%o13) bb^10+10*aa*bb^9+45*aa^2*bb^8+120*aa^3*bb^7+210*aa^4*bb^6\
+252*aa^5*bb^5+210*aa^6*bb^4+120*aa^7*bb^3+45*aa^8*bb^2+10*aa^9*\
bb+aa^10
(%i14) cholesky (A):= block ([n : length (A), L : copymatrix (A),
  p : makelist (0, i, 1, length (A))],
  for i thru n do for j : i thru n do
  (x : L[i, j], x : x - sum (L[j, k] * L[i, k], k, 1, i - 1),
  if i = j then p[i] : 1 / sqrt(x) else L[j, i] : x * p[i]),
  for i thru n do L[i, i] : 1 / p[i],
  for i thru n do for j : i + 1 thru n do L[i, j] : 0, L)$
define: warning: redefining the built-in function cholesky
(%i15) grind (cholesky);
cholesky(A):=block(
         [n:length(A),L:copymatrix(A),
          p:makelist(0,i,1,length(A))],
         for i thru n do
             (for j from i thru n do
                  (x:L[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),
                   if i = j then p[i]:1/sqrt(x)
                       else L[j,i]:x*p[i])),
         for i thru n do L[i,i]:1/p[i],
         for i thru n do (for j from i+1 thru n do L[i,j]:0),L)$
(%o15)                        done
(%i16) string (fundef (cholesky));
(%o16) cholesky(A):=block([n:length(A),L:copymatrix(A),p:makelis\
t(0,i,1,length(A))],for i thru n do (for j from i thru n do (x:L\
[i,j],x:x-sum(L[j,k]*L[i,k],k,1,i-1),if i = j then p[i]:1/sqrt(x\
) else L[j,i]:x*p[i])),for i thru n do L[i,i]:1/p[i],for i thru \
n do (for j from i+1 thru n do L[i,j]:0),L)

Categories:  Display functions

オプション変数: grind

変数grindtrueの時、 stringstringoutの出力は grindのそれと同じフォーマットです; そうでなければ、それらの関数の出力を特別にフォーマットしようとはしません。 変数grindのデフォルト値はfalseです。

grindplaybackの引数としても指定できます。 grindが存在する時、 playbackgrind関数と同じフォーマットで入力式を印刷します。 そうでなければ、入力式を特にフォーマットしようとはしません。

オプション変数: ibase

デフォルト値: 10

ibaseは Maximaが読む整数の基数です。

ibaseは2から(十進数で)36までの任意の整数を割り当てられます。 ibaseが10よりも大きい時、 数値は十進数字0から9に加えて、 ibaseディジットに必要なアルファベット A, B, C, …で構成されます。 最初のディジットが0から9の時だけ文字はディジットとして解釈されます。

大文字小文字は区別されません。 許容される最も大きな基数36の数値は0から9までと Aから Zまでから構成されます。

ibaseの値がいくつでも、 整数が小数点で終了する時は基数10として解釈されます。

obaseも参照してください。

例:

ibase less than 10 (例えば2進数).

 
(%i1) ibase : 2 $
(%i2) obase;
(%o2)                          10
(%i3) 1111111111111111;
(%o3)                         65535

10より大きなibase。 最初のディジットが0から9までの時だけ文字はディジットとして解釈されます。 16進数は0をつけてディジットのふりをする必要があるかもしれません。

 
(%i1) ibase : 16 $
(%i2) obase;
(%o2)                          10
(%i3) 1000;
(%o3)                         4096
(%i4) abcd;
(%o4)                         abcd
(%i5) symbolp (abcd);
(%o5)                         true
(%i6) 0abcd;
(%o6)                         43981
(%i7) symbolp (0abcd);
(%o7)                         false

整数が小数点で終了する時、基数10として解釈されます。

 
(%i1) ibase : 36 $
(%i2) obase;
(%o2)                          10
(%i3) 1234;
(%o3)                         49360
(%i4) 1234.;
(%o4)                         1234

Categories:  Console interaction

関数: ldisp (expr_1, …, expr_n)

expr_1, ..., expr_nをコンソールに印刷出力として表示します。 ldispは 引数それぞれに中間式ラベルを割り当て、ラベルのリストを返します。

disp, display, ldisplayも参照してください。

例:

 
(%i1) e: (a+b)^3;
                                   3
(%o1)                       (b + a)
(%i2) f: expand (e);
                     3        2      2      3
(%o2)               b  + 3 a b  + 3 a  b + a
(%i3) ldisp (e, f);
                                   3
(%t3)                       (b + a)

                     3        2      2      3
(%t4)               b  + 3 a b  + 3 a  b + a

(%o4)                      [%t3, %t4]
(%i4) %t3;
                                   3
(%o4)                       (b + a)
(%i5) %t4;
                     3        2      2      3
(%o5)               b  + 3 a b  + 3 a  b + a

Categories:  Display functions

関数: ldisplay (expr_1, …, expr_n)

expr_1, ..., expr_nをコンソールに印刷出力として表示します。 式それぞれは、 lhsldisplayの引数の1つで、rhsがその値の、 形式lhs = rhsの等式として表示されます。 典型的には引数それぞれは変数です。 ldispは式それぞれに中間式ラベルを割り当て、ラベルのリストを返します。

display, dispも参照してください。

例:

 
(%i1) e: (a+b)^3;
                                   3
(%o1)                       (b + a)
(%i2) f: expand (e);
                     3        2      2      3
(%o2)               b  + 3 a b  + 3 a  b + a
(%i3) ldisplay (e, f);
                                     3
(%t3)                     e = (b + a)

                       3        2      2      3
(%t4)             f = b  + 3 a b  + 3 a  b + a

(%o4)                      [%t3, %t4]
(%i4) %t3;
                                     3
(%o4)                     e = (b + a)
(%i5) %t4;
                       3        2      2      3
(%o5)             f = b  + 3 a b  + 3 a  b + a

Categories:  Display functions

オプション変数: leftjust

デフォルト値: false

leftjusttrueの時、 2D表示での等式を中央揃えではなく左寄せで描きます。

1D表示と2D表示の間を切り替えるには、display2dも参照してください。

例:

 
(%i1) expand((x+1)^3);
                        3      2
(%o1)                  x  + 3 x  + 3 x + 1
(%i2) leftjust:true$
(%i3) expand((x+1)^3);
       3      2
(%o3) x  + 3 x  + 3 x + 1

オプション変数: linel

デフォルト値: 79

linelはコンソールディスプレイの仮定された(文字単位の)幅です。 linelはユーザーによって任意の値に割り当てられます。 非常に小さい値や非常に大きな値は実用的ではありませんが。 エラーメッセージやdescribeの出力のように、 Maximaの組み込み関数が表示するテキストはlinelの影響を受けません。

オプション変数: lispdisp

デフォルト値: false

lispdisptrueの時、 Lispシンボルはクエスチョンマーク?を先頭文字として表示されます。 そうでなければ、Lispシンボルは先頭文字を持ちません。 これは1-d表示でも2-d表示でも同様の効果を持ちます。

例:

 
(%i1) lispdisp: false$
(%i2) ?foo + ?bar;
(%o2)                       foo + bar
(%i3) lispdisp: true$
(%i4) ?foo + ?bar;
(%o4)                      ?foo + ?bar

オプション変数: negsumdispflag

デフォルト値: true

negsumdispflagtrueの時、 x - y- y + xでなくx - yと表示されます。 falseに設定すると、 2つの式の違いに関する表示での特殊なチェックがされないようになります。 1つの応用は、例えば、a + %i*ba - %i*bを同じ表示にすることです。

オプション変数: obase

デフォルト値: 10

obaseはMaximaが表示する整数の基数です。

obaseは2から(十進数で)36までの任意の整数を割り当てられます。 obaseが10よりも大きい時、 数値は十進数字0から9に加えて、 必要な大文字アルファベットA, B, C, ...で構成されます。 もし先頭ディジットがそうでなければ文字なら、0ディジットが先頭に表示されます。 許容される最も大きな基数36の数値は0から9までとAからZまでから構成されます。

ibaseも参照してください。

例:

 
(%i1) obase : 2;
(%o1)                          10
(%i2) 2^8 - 1;
(%o10)                      11111111
(%i3) obase : 8;
(%o3)                          10
(%i4) 8^8 - 1;
(%o4)                       77777777
(%i5) obase : 16;
(%o5)                          10
(%i6) 16^8 - 1;
(%o6)                       0FFFFFFFF
(%i7) obase : 36;
(%o7)                          10
(%i8) 36^8 - 1;
(%o8)                       0ZZZZZZZZ

オプション変数: pfeformat

デフォルト値: false

pfeformattrueの時、 整数の比は斜線(スラッシュ)文字で表示され、 整数分母nは掛け算項1/nとして先に表示されます。

 
(%i1) pfeformat: false$
(%i2) 2^16/7^3;
                              65536
(%o2)                         -----
                               343
(%i3) (a+b)/8;
                              b + a
(%o3)                         -----
                                8
(%i4) pfeformat: true$
(%i5) 2^16/7^3;
(%o5)                       65536/343
(%i6) (a+b)/8;
(%o6)                      1/8 (b + a)

オプション変数: powerdisp

デフォルト値: false

powerdisptrueの時、 べきを増やす順に項を使って和が表示されます。 例えば、 多項式は切り詰められたべき級数として表示され、 最初に定数項最後に最高次項となります。

デフォルトでは和の項はべきを減らす順に表示されます。

関数: print (expr_1, …, expr_n)

expr_1, …, expr_nを1つ1つ、左から右へ評価し、 コンソールディスプレイの左端から表示します。

printが返す値は最後の引数の値です。 printは中間式ラベルを生成しません。

display, disp, ldisplay, ldispも参照してください。 これらの関数は一行ずつ1つの式を表示しますが、 printは一行に2つ以上の式を表示しようとします。

ファイルの中身を表示するには printfileを参照してください。

例:

 
(%i1) r: print ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
      radcan (log (a^10/b)))$
            3        2      2      3
(a+b)^3 is b  + 3 a b  + 3 a  b + a  log (a^10/b) is

                                              10 log(a) - log(b)
(%i2) r;
(%o2)                  10 log(a) - log(b)
(%i3) disp ("(a+b)^3 is", expand ((a+b)^3), "log (a^10/b) is",
      radcan (log (a^10/b)))$
                           (a+b)^3 is

                     3        2      2      3
                    b  + 3 a b  + 3 a  b + a

                         log (a^10/b) is

                       10 log(a) - log(b)

Categories:  Display functions

オプション変数: sqrtdispflag

デフォルト値: true

sqrtdispflagfalseの時、 sqrtを指数1/2で表示するようにします。

オプション変数: stardisp

デフォルト値: false

stardisptrueの時 掛け算はオペランドの間のアスタリスク*で表示されます。

オプション変数: ttyoff

デフォルト値: false

ttyofftrueの時、 出力式は表示されません。 出力式は計算され、ラベルに割り当てられます。 labelsを参照してください。

エラーメッセージやdescribeの出力のように、組み込みMaxima関数によって出力されたテキストは ttyoffの影響を受けません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. Data Types and Structures


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 Numbers


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.1 Introduction to Numbers

Complex numbers

Maximaでは複素数式を式の実部と%iかける虚部の足し算で指定します。 例えば、等式 x^2 - 4*x + 13 = 0の根は 2 + 3*%i2 - 3*%iです。 複素数式の積の整理は積を展開することで影響を受けるかもしれないことに注意してください。 複素数式の商や根、他の関数の整理は普通、 realpart, imagpart, rectform, polarform, abs, carg関数を使って達成することができます。

Categories:  Complex variables


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.2 Functions and Variables for Numbers

関数: bfloat (expr)

exprの中のすべての数や数の関数を多倍長浮動小数点に変換します。 戻り値の多倍長浮動小数点の有効桁数は、 グローバル変数fpprecによって規定されます。

float2bffalseの場合、 浮動小数点が多倍長浮動小数点に変換される時 (精度が落ちることを意味するので)警告メッセージが出力されます。

Categories:  Numerical evaluation

関数: bfloatp (expr)

もしexprが多倍長浮動小数点数ならtrueを、そうでなければfalseを返します。

オプション変数: bftorat

デフォルト値: false

bftoratは多倍長浮動小数点の有理数への変換を制御します。 bftoratfalseの時、 ratepsilonが変換を制御するのに使われます。 (これは比較的小さな有理数になります。) bftorattrueの時、 生成された有理数は多倍長浮動小数点を正確に表します。

注意: bftoratは関数 rationalizeを使った有理数への変換に関して効果を持ちません。

例:

 
(%i1) ratepsilon:1e-4;
(%o1)                         1.e-4
(%i2) rat(bfloat(11111/111111)), bftorat:false;
`rat' replaced 9.99990999991B-2 by 1/10 = 1.0B-1
                               1
(%o2)/R/                       --
                               10
(%i3) rat(bfloat(11111/111111)), bftorat:true;
`rat' replaced 9.99990999991B-2 by 11111/111111 = 9.99990999991B-2
                             11111
(%o3)/R/                     ------
                             111111

Categories:  Numerical evaluation

オプション変数: bftrunc

デフォルト値: true

bftruncは、非ゼロの多倍長浮動小数点数の中のずるずる続くゼロを表示しないようにします。 例えば、もしbftruncfalseなら、 bfloat (1)1.000000000000000B0と表示されます。 そうでなければ、これは、1.0B0と表示されます。

Categories:  Numerical evaluation

関数: evenp (expr)

もし exprが偶数なら trueを、そうでなければ falseを返します。

たとえ exprevenと宣言されていても もし exprがシンボルなら、evenpfalseを返します。

Categories:  Predicate functions

関数: float (expr)

exprの中の整数、有理数、多倍長浮動小数点を浮動小数点に変換します。 floatevflagでもあり、 非整数有理数と多倍長浮動小数点を浮動小数点に変換します。

オプション変数: float2bf

デフォルト値: true

float2bffalseの場合、 浮動小数点が多倍長浮動小数点に変換される時、 (これは精度の無駄使いとなるかもしれないので、) 警告メッセージが表示されます。

Categories:  Numerical evaluation

関数: floatnump (expr)

もしexprが浮動小数点なら trueを返し、そうでないなら falseを返します。

オプション変数: fpprec

デフォルト値: 16

fpprecは多倍長浮動小数点上の代数のための有効桁数です。 fpprecは通常の浮動小数点上の計算に影響を与えません。

bfloatfpprintprecも参照してください。

Categories:  Numerical evaluation

オプション変数: fpprintprec

デフォルト値: 0

fpprintprecは、通常の浮動小数点もしくは多倍長浮動小数点を表示する時の 表示する桁数です。

通常の浮動小数点に関しては、 fpprintprecが2から16までの値を持つ時、 表示されるディジット数はfpprintprecに等しいです。 そうでなければ、fpprintprecは0もしくは16より大きく、 表示されるディジット数は16です。

多倍長浮動小数点に関しては、 fpprintprecが2からfpprecまでの値を持つ時、 表示される桁数は、fpprintprecに等しいです。 そうでなければ、fpprintprecは、0もしくはfpprecより大きく、 表示される桁数はfpprecに等しいです。

通常の浮動小数点でも多倍長浮動小数点でも、後置ゼロは抑制されます。 もし後置ゼロがあれば、表示される実際の桁数は fpprintprecを小さくなります。

fpprintprecは1にはできません。

関数: integerp (expr)

もしexprが整数リテラルなら trueを、 そうでないなら falseを返します。

たとえ exprintegerと宣言されていても、もし exprがシンボルなら integerpfalseを返します。

例:

 
(%i1) integerp (0);
(%o1)                         true
(%i2) integerp (1);
(%o2)                         true
(%i3) integerp (-17);
(%o3)                         true
(%i4) integerp (0.0);
(%o4)                         false
(%i5) integerp (1.0);
(%o5)                         false
(%i6) integerp (%pi);
(%o6)                         false
(%i7) integerp (n);
(%o7)                         false
(%i8) declare (n, integer);
(%o8)                         done
(%i9) integerp (n);
(%o9)                         false

Categories:  Predicate functions

オプション変数: m1pbranch

デフォルト値: false

m1pbranch-1のべき乗の主枝です。 (-1)^(1/3)(すなわち、「奇」の有理指数)や (-1)^(1/4)(すなわち、「偶」の有理指数) のような量は以下のように扱われます:

 
              domain:real

(-1)^(1/3):      -1
(-1)^(1/4):   (-1)^(1/4)

             domain:complex
m1pbranch:false          m1pbranch:true
(-1)^(1/3)               1/2+%i*sqrt(3)/2
(-1)^(1/4)              sqrt(2)/2+%i*sqrt(2)/2

Categories:  Expressions · Global flags

関数: nonnegintegerp (n)

n >= 0かつ nが整数の時だけtrueを返します。

関数: numberp (expr)

もしexprが文字リテラルか、有理数か、浮動小数点数か、多倍長浮動小数点なら trueを、 そうでなければ falseを返します。

たとえ expr%pi%iのようなシンボリックな数でも、また、 even, odd, integer, rational, irrational, real, imaginary, complexのいずれかに宣言されていても、 もし exprがシンボルなら numberpfalseを返します。

例:

 
(%i1) numberp (42);
(%o1)                         true
(%i2) numberp (-13/19);
(%o2)                         true
(%i3) numberp (3.14159);
(%o3)                         true
(%i4) numberp (-1729b-4);
(%o4)                         true
(%i5) map (numberp, [%e, %pi, %i, %phi, inf, minf]);
(%o5)      [false, false, false, false, false, false]
(%i6) declare (a, even, b, odd, c, integer, d, rational,
     e, irrational, f, real, g, imaginary, h, complex);
(%o6)                         done
(%i7) map (numberp, [a, b, c, d, e, f, g, h]);
(%o7) [false, false, false, false, false, false, false, false]

Categories:  Predicate functions

特殊シンボル: numer

numerは数値の引数を持つ(指数関数を含む)いくつかの数学関数を 浮動小数点に評価するようにします。 数値が与えられたexprの中の変数を値に置き換えるようにします。 それは floatスイッチをオンにもします。

%enumerも参照してください。

例:

 
(%i1) [sqrt(2), sin(1), 1/(1+sqrt(3))];
                                        1
(%o1)            [sqrt(2), sin(1), -----------]
                                   sqrt(3) + 1
(%i2) [sqrt(2), sin(1), 1/(1+sqrt(3))],numer;
(%o2) [1.414213562373095, .8414709848078965, .3660254037844387]

オプション変数: numer_pbranch

デフォルト値: false

オプション変数numer_pbranchは 負の整数、有理数、または浮動小数点数のべきの数値評価を制御します。 numer_pbranchtrueでかつ、指数が浮動小数点数であるか オプション変数numertrueの時、 Maximaは主枝を使って数値結果を評価します。 そうでなければ、式整理されたが未評価の結果が返されます。

例:

 
(%i1) (-2)^0.75;
                                 0.75
(%o1)                       (- 2)
(%i2) (-2)^0.75,numer_pbranch:true;
(%o2)       1.189207115002721 %i - 1.189207115002721
(%i3) (-2)^(3/4);
                               3/4  3/4
(%o3)                     (- 1)    2
(%i4) (-2)^(3/4),numer;
                                          0.75
(%o4)              1.681792830507429 (- 1)
(%i5) (-2)^(3/4),numer,numer_pbranch:true;
(%o5)       1.189207115002721 %i - 1.189207115002721

Categories:  Numerical evaluation

関数: numerval (x_1, expr_1, …, x_n, expr_n)

変数x_1, …, x_nexpr_1, …, expr_nに等しい数値を持つ変数だと宣言します。 もし numerフラグが trueなら、 変数が現れる任意の式にて、数値は評価され、変数に代入されます。 evも参照してください。

expr_1, …, expr_nは、任意の式を取り得ます。数値である必要はありません。

関数: oddp (expr)

もし expが奇数リテラルであれば trueを、そうでなければ falseを返します。

たとえ exproddと宣言されていても もし exprがシンボルなら oddpfalseを返します。

Categories:  Predicate functions

オプション変数: ratepsilon

デフォルト値: 2.0e-15

オプション変数 bftoratが値 falseを持つ時、 ratepsilonは浮動小数点数を有理数に変換する際に使われる許容誤差です。 例はbftoratを参照してください。

関数: rationalize (expr)

Maximaの式exprの中の倍精度浮動小数点やビッグフローすべてを同値の有理数に変換します。 もし浮動小数点の2値表現に詳しくなれば、rationalize (0.1)が1/10に等しくないことに 驚くかもしれません。 この振る舞いはMaximaに特別なわけではありません。―1/10は2値の循環小数表現を持ちます。

 
(%i1) rationalize (0.5);
                                1
(%o1)                           -
                                2
(%i2) rationalize (0.1);
                        3602879701896397
(%o2)                   -----------------
                        36028797018963968
(%i3) fpprec : 5$
(%i4) rationalize (0.1b0);
                             209715
(%o4)                        -------
                             2097152
(%i5) fpprec : 20$
(%i6) rationalize (0.1b0);
                     236118324143482260685
(%o6)                ----------------------
                     2361183241434822606848
(%i7) rationalize (sin (0.1*x + 5.6));
               3602879701896397 x   3152519739159347
(%o7)      sin(------------------ + ----------------)
               36028797018963968    562949953421312

Categories:  Numerical evaluation

関数: ratnump (expr)

もしexprが整数リテラルもしくは整数リテラルの比なら trueを返し、 そうでなければ falseを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 Strings


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.1 Introduction to Strings

文字列(クォートされた文字の列)は入力の際にはダブルクォートマーク "で括り、 グローバル変数 stringdispに依存して、クォートマークありだったりなしだったりで 表示されます。

文字列は、埋め込みタブ、改行、キャリッジリターン文字を含む任意の文字を含み得ます。 列 \"は文字通りダブルクォートとして認識され、 \\は文字通りバックスラッシュとして認識されます。 バックスラッシュが行の終わりに現れる時、 バックスラッシュと(改行かキャリッジリターンと改行かいずれかの)行終端を無視します。 そして、文字列は次の行に続きます。 他にバックスラッシュともう一つの文字の組み合わせで特殊なものはありません; "か, \, 行終端以外の任意の文字の前にバックスラッシュが現れる時、 バックスラッシュは無視されます。 文字列の中に文字リテラルを埋め込むことを除いて (タブ、改行、キャリッジリターンのような)特殊文字を表す方法はありません。

Maximaでは文字タイプはありません; 文字単体は1文字の文字列として表されます。

stringprocアドオンパッケージは文字列に機能する多くの関数を含みます。

例:

 
(%i1) s_1 : "This is a string.";
(%o1)                   This is a string.
(%i2) s_2 : "Embedded \"double quotes\" and backslash \\ characters.";
(%o2) Embedded "double quotes" and backslash \ characters.
(%i3) s_3 : "Embedded line termination
(%o3) Embedded line termination
in this string.
(%i4) in this string.";
(%o4) Ignore the line termination characters in this string.
(%i5) s_4 : "Ignore the \
(%o5)                         false
(%i6) line termination \
(%o6)                   This is a string.
(%i7) characters in \
(%o7)                         true
(%i8) this string.";
(%o8)                  "This is a string."
(%i9) stringdisp : false;

Categories:  Syntax


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.2 Functions and Variables for Strings

関数: concat (arg_1, arg_2, …)

引数を連結します。 引数はアトムに評価されなければいけません。 もし最初の引数がシンボルなら戻り値はシンボルで、 そうでなければ文字列です。

concatは引数を評価します。 シングルクォート'は評価を抑制します。

sconcateval_stringも参照してください。

 
(%i1) y: 7$
(%i2) z: 88$
(%i3) concat (y, z/2);
(%o3)                          744
(%i4) concat ('y, z/2);
(%o4)                          y44

concatによって組み立てられたシンボルは値に割り当てられたり、式の中に現れたりします。 :: (ダブルコロン)割り当て演算子は左辺を評価します。

 
(%i5) a: concat ('y, z/2);
(%o5)                          y44
(%i6) a:: 123;
(%o6)                          123
(%i7) y44;
(%o7)                          123
(%i8) b^a;
                               y44
(%o8)                         b
(%i9) %, numer;
                               123
(%o9)                         b

concat (1, 2)は数のように見えますが、文字列であることに注意してください。

 
(%i10) concat (1, 2) + 3;
(%o10)                       12 + 3

Categories:  Expressions · Strings

関数: sconcat (arg_1, arg_2, ...)

引数を文字列に連結します。 concatと違い、引数はアトムである必要はありません

concateval_stringも参照してください。

 
(%i1) sconcat ("xx[", 3, "]:", expand ((x+y)^3));
(%o1)               xx[3]:y^3+3*x*y^2+3*x^2*y+x^3

Categories:  Expressions · Strings

関数: string (expr)

exprを、ただまるでタイプされたようにMaximaの線形表記に変換します。

stringの戻り値は文字列であり、 計算の中で使うことはできません。

Categories:  Strings

オプション変数: stringdisp

デフォルト値: false

stringdisptrueの時、 文字列はダブルクォートマークで囲まれて表示されます。 そうでなければクォートマークは表示されません。

関数定義を表示する時はいつも、stringdisptrueです。

例:

 
(%i1) stringdisp: false$
(%i2) "This is an example string.";
(%o2)              This is an example string.
(%i3) foo () :=
      print ("This is a string in a function definition.");
(%o3) foo() :=
              print("This is a string in a function definition.")
(%i4) stringdisp: true$
(%i5) "This is an example string.";
(%o5)             "This is an example string."


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 Constants


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 Functions and Variables for Constants

定数: %e

%eはEuler数としても知られる自然対数の基数を表します。 %eの数値は倍精度浮動小数点数2.718281828459045d0です。

Categories:  Constants

定数: %i

%iは虚数単位sqrt(- 1)を表します。

Categories:  Constants

定数: false

falseは同じ名前のブーリアン定数を表します。 Maximaは、Lispの値NILfalseを実装しています。

Categories:  Constants

定数: %gamma

Euler-Macheroni定数0.5772156649015329 ....

Categories:  Constants

定数: ind

indは有界で不定の結果を表します。

limitも参照してください。

例:

 
(%i1) limit (sin(1/x), x, 0);
(%o1)                          ind

Categories:  Constants

定数: inf

infは実数の正の無限大を表します。

Categories:  Constants

定数: infinity

infinityは複素数の無限大を表します。

Categories:  Constants

定数: minf

minfは実数のマイナスの(すなわち負の)無限大を表します。

Categories:  Constants

定数: %phi

%phi黄金比と呼ばれる(1 + sqrt(5))/2を表します。 %phiの数値は倍精度浮動小数点数1.618033988749895d0です。

fibtophiは、%phiを使って フィボナッチ数fib(n)を表現します。

デフォルトでは、Maximaは %phiの代数的プロパティを知りません。 tellrat(%phi^2 - %phi - 1)algebraic: trueを評価した後、 ratsimp%phiを含むいくつかの式を整理できます。

例:

fibtophiは、%phiを使って フィボナッチ数fib(n)を表現します。

 
(%i1) fibtophi (fib (n));
                           n             n
                       %phi  - (1 - %phi)
(%o1)                  -------------------
                           2 %phi - 1
(%i2) fib (n-1) + fib (n) - fib (n+1);
(%o2)          - fib(n + 1) + fib(n) + fib(n - 1)
(%i3) fibtophi (%);
            n + 1             n + 1       n             n
        %phi      - (1 - %phi)        %phi  - (1 - %phi)
(%o3) - --------------------------- + -------------------
                2 %phi - 1                2 %phi - 1
                                          n - 1             n - 1
                                      %phi      - (1 - %phi)
                                    + ---------------------------
                                              2 %phi - 1
(%i4) ratsimp (%);
(%o4)                           0

デフォルトでは、Maximaは %phiの代数的プロパティを知りません。 tellrat(%phi^2 - %phi - 1)algebraic: trueを評価した後、 ratsimp%phiを含むいくつかの式を整理できます。

 
(%i1) e : expand ((%phi^2 - %phi - 1) * (A + 1));
                 2                      2
(%o1)        %phi  A - %phi A - A + %phi  - %phi - 1
(%i2) ratsimp (e);
                  2                     2
(%o2)        (%phi  - %phi - 1) A + %phi  - %phi - 1
(%i3) tellrat (%phi^2 - %phi - 1);
                            2
(%o3)                  [%phi  - %phi - 1]
(%i4) algebraic : true;
(%o4)                         true
(%i5) ratsimp (e);
(%o5)                           0

Categories:  Constants

定数: %pi

%piは直径に体する円周の比を表します。 %piの数値は倍精度浮動小数点数3.141592653589793d0です。

Categories:  Constants

定数: true

trueは同じ名前のブーリアン定数を表します。 MaximaはLispの値Ttrueを実装しています。

Categories:  Constants

定数: und

undは未定義の結果を表します。

limitも参照してください。

例:

 
(%i1) limit (x*sin(x), x, inf);
(%o1)                          und

Categories:  Constants

定数: zeroa

zeroaはゼロの上の無限小を表します。 zeroaは式の中で使うことができます。 limitは無限小を含む式を整理します。

zeroblimitも参照してください。

例:

limitは無限小を含む式を整理します:

 
(%i1) limit(zeroa);
(%o1)                           0
(%i2) limit(x+zeroa);
(%o2)                           x

Categories:  Constants

定数: zerob

zerobはゼロの下の無限小を表します。 zerobは式の中で使うことができます。 limitは無限小を含む式を整理します。

zeroalimitも参照してください。

Categories:  Constants


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 Lists


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5.1 Introduction to Lists

リストはMaximaとLispにとって基本的な構成要素です。 配列、ハッシュテーブル、数以外のデータタイプすべてはLispのリストとして表現されます。 これらのLispのリストは 式 a+2を示すために以下の形式を取ります。

 
((MPLUS) $A 2)

Maximaレベルでは中置表記a+2を見ることになるでしょう。 Maximaには、以下のようにプリントされるリストもあります。

 
[1, 2, 7, x+y]

これは4要素のリストの場合の例です。 内部的には、これは以下の形式のLispのリストに対応します。

 
((MLIST) 1 2 7 ((MPLUS) $X $Y))

Maxima式のタイプフィールドを意味するフラグはそれ自体リストです。 整理器を通った後、上のリストは以下のようになるでしょう。

 
((MLIST SIMP) 1 2 7 ((MPLUS SIMP) $X $Y))


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5.2 Functions and Variables for Lists

演算子: [
演算子: ]

[]は、それぞれ、リストの始まりと終わりをマークします。

[]は、リスト、配列、ハッシュ配列、配列関数の添字もくくります。 配列と違い、リストの n番目の要素にアクセスすることは おおよそ nに比例する時間が必要かもしれないことに注意してください。 See section Performance considerations for Lists.

例:

 
(%i1) x: [a, b, c];
(%o1)                       [a, b, c]
(%i2) x[3];
(%o2)                           c
(%i3) array (y, fixnum, 3);
(%o3)                           y
(%i4) y[2]: %pi;
(%o4)                          %pi
(%i5) y[2];
(%o5)                          %pi
(%i6) z['foo]: 'bar;
(%o6)                          bar
(%i7) z['foo];
(%o7)                          bar
(%i8) g[k] := 1/(k^2+1);
                                  1
(%o8)                     g  := ------
                           k     2
                                k  + 1
(%i9) g[10];
                                1
(%o9)                          ---
                               101

Categories:  Lists · Operators

関数: append (list_1, …, list_n)

list_1の要素のあとに list_2の要素が続き、… という1つのリストを返します。 appendは一般式上でも機能します。 例えば、 append (f(a,b), f(c,d,e));f(a,b,c,d,e)をもたらします。

addrow, addcol, joinも参照してください。

例を見るには、 example(append);を実行してください。

Categories:  Lists · Expressions

関数: assoc  
    assoc (key, list, default)  
    assoc (key, list)

この関数は入力 listの左辺の中で keyを探します。 list引数はリストでなければならず、その要素のそれぞれは正確に2つの部分を持つ式です。 最も普通には、listの要素はそれ自身リストで、それぞれが2つの要素を持ちます。

assoc関数は listに従って、それぞれの要素の最初の部分が keyと等しいかチェックを 繰り返します。 もし比較が真になる要素が見つかったら、 assocはその要素の二番目の部分を返します。 もしリストの中にそんな要素が存在しなければ、 assocfalseか、もし与えられていれば defaultを返します。

例えば、 式 assoc (y, [[x,1], [y,2], [z,3]])の場合、 assoc関数はリスト [[y,1],[x,2]]の左辺に yを探して、第二項にそれを見つけて、 2を返します。 assoc (z, [[x,1], [z,2], [z,3]])の場合、 探索は zで始まる最初の項で止まり、 2を返します。 assoc(x, [[y,1]])の場合、マッチする要素がないので、 assocfalseを返します。

 
(%i1) assoc (y, [[x,1], [y,2],[z,3]]);
(%o1)                           2
(%i2) assoc (z, [[x,1], [z,2], [z,3]]);
(%o2)                           2
(%i3) assoc (x, [[y,1]]);
(%o3)                         false

Categories:  Lists · Expressions

関数: cons  
    cons (expr, list)  
    cons (expr_1, expr_2)

cons (expr, list) は 要素 exprを一番目の要素とし、listの要素が続くように構成された新しいリストを返します。 これは Lisp言語の構成演算 "cons"に類似したものです。

Maxima 関数 consは二番目の引数がリストとは別のものであるような使い方もでき、役に立つかもしれません。 この場合、 cons (expr_1, expr_2)expr_2と同じ演算子に引数 cons(expr_1, args(expr_2))を渡した式を返します。 例:

 
(%i1) cons(a,[b,c,d]);
(%o1)                     [a, b, c, d]
(%i2) cons(a,f(b,c,d));
(%o2)                     f(a, b, c, d)

一般的にはリストでないものに適用した consは意味がありません。 例えば、'^'は3つの引数を取れないので cons(a,b^c)は違法な式になります。

inflagが真の時、 consは式の内部構造上に演算し、そうでなければ consは表示形式上に演算します。 特に inflagが真の時、リストでないものに適用されあt consは時々驚くべき結果を与えます; 例えば

 
(%i1) cons(a,-a), inflag : true;
                                 2
(%o1)                         - a
(%i2) cons(a,-a), inflag : false;
(%o2)                           0

Categories:  Lists · Expressions

関数: copylist (list)

リスト listのコピーを返します。

Categories:  Lists

関数: create_list (form, x_1, list_1, …, x_n, list_n)

list_1の要素それぞれにバインドされた x_1で、 また、それぞれのバインドに対して、 x_2list_2の要素それぞれにバインドして、... それらのバインドを使って formを評価することによって リストを生成します。 結果の要素の数はそれぞれのリストの要素の数の積です。 それぞれの変数 x_iは実際に、シンボルでなければいけません。ーそれは評価されません。 リスト引数は繰り返しの始めに一度だけ評価されます。

 
(%i1) create_list(x^i,i,[1,3,7]);
                 3   7
(%o1)       [x, x , x ]

二重の繰り返しで:

 
(%i1) create_list([i,j],i,[a,b],j,[e,f,h]);
(%o1) [[a, e], [a, f], [a, h], [b, e], [b, f], [b, h]]

list_iの代わりに、 それぞれが数に評価される2つの引数を供給することもできます。 これらは繰り返しの下限と上限になります。

 
(%i1) create_list([i,j],i,[1,2,3],j,1,i);
(%o1) [[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]]

j変数の範囲やリストは iの現在値に依存することができることに注意してください。

Categories:  Lists

関数: delete  
    delete (expr_1, expr_2)  
    delete (expr_1, expr_2, n)

delete(expr_1, expr_2)は、 expr_2から そのトップレベル演算子の引数のうち、 expr_1と("="で決定される意味で)同じ引数を取り除きます。 "="は、同値ではなく、形式的な同一をテストすることに注意してください。 部分式の引数には影響しないことにも注意してください。

expr_1はアトムか、非アトムの式を取り得ます。 expr_2は任意の非アトムの式を取り得ます。 deleteは新しい式を返します; expr_2を変更しません。

delete(expr_1, expr_2, n)は、

expr_2から そのトップレベル演算子の引数のうち、 expr_1と同じ最初の n個の引数を取り除きます。 もしそんな引数が n個より少ないなら、 該当するすべての引数が取り除かれます。

例:

リストから要素を削除。

 
(%i1) delete (y, [w, x, y, z, z, y, x, w]);
(%o1)                  [w, x, z, z, x, w]

和から項を削除。

 
(%i1) delete (sin(x), x + sin(x) + y);
(%o1)                         y + x

積から因子を削除。

 
(%i1) delete (u - x, (u - w)*(u - x)*(u - y)*(u - z));
(%o1)                (u - w) (u - y) (u - z)

任意の式から引数を削除。

 
(%i1) delete (a, foo (a, b, c, d, a));
(%o1)                     foo(b, c, d)

削除する引数の数を制限。

 
(%i1) delete (a, foo (a, b, a, c, d, a), 2);
(%o1)                    foo(b, c, d, a)

引数が expr_1と同じかどうかは"="で決定されます。 equalですが、"="でない引数は取り除かれません。

 
(%i1) [is(equal(0, 0)), is(equal(0, 0.0)), is(equal(0, 0b0))];
(%o1)                  [true, true, true]
(%i2) [is (0 = 0), is (0 = 0.0), is (0 = 0b0)];
(%o2)                 [true, false, false]
(%i3) delete (0, [0, 0.0, 0b0]);
(%o3)                     [0.0, 0.0b0]
(%i4) is (equal ((x + y)*(x - y), x^2 - y^2));
(%o4)                         true
(%i5) is ((x + y)*(x - y) = x^2 - y^2);
(%o5)                         false
(%i6) delete ((x + y)*(x - y), [(x + y)*(x - y), x^2 - y^2]);
                              2    2
(%o6)                       [x  - y ]

Categories:  Lists · Expressions

関数: eighth (expr)

式またはリスト exprの8番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: endcons  
    endcons (expr, list)  
    endcons (expr_1, expr_2)

endcons (expr, list)listの要素に exprが続くように構成された新しいリストを返します。 Maxima 関数 endconsは二番目の引数がリストとは別のものであるような使い方もでき、役に立つかもしれません。 この場合、 endcons (expr_1, expr_2)expr_2と同じ演算子に引数 endcons(expr_1, args(expr_2))を渡した式を返します。 例:

 
(%i1) endcons(a,[b,c,d]);
(%o1)                     [b, c, d, a]
(%i2) endcons(a,f(b,c,d));
(%o2)                     f(b, c, d, a)

一般的にはリストでないものに適用した endconsは意味がありません。 例えば、'^'は3つの引数を取れないので endcons(a,b^c)は違法な式になります。

inflagが真の時、 endconsは式の内部構造上に演算し、そうでなければ endconsは表示形式上に演算します。 特に inflagが真の時、リストでないものに適用されあt endconsは時々驚くべき結果を与えます; 例えば

 
(%i1) endcons(a,-a), inflag : true;
                                 2
(%o1)                         - a
(%i2) endcons(a,-a), inflag : false;
(%o2)                           0

Categories:  Lists · Expressions

関数: fifth (expr)

式またはリスト exprの5番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: first (expr)

リストの最初の要素、行列の最初の行、和の最初の項などに帰着する、 exprの最初の部分を返します:

 
(%i1) matrix([1,2],[3,4]);
                                   [ 1  2 ]
(%o1)                              [      ]
                                   [ 3  4 ]
(%i2) first(%);
(%o2)                              [1,2]
(%i3) first(%);
(%o3)                              1
(%i4) first(a*b/c+d+e/x);
                                   a b
(%o4)                              ---
                                    c
(%i5) first(a=b/c+d+e/x);
(%o5)                              a

firstとその関連関数 restlastは、 入力時にタイプした形式ではなく、 exprの表示形式上で機能することに注意してください。 しかしながら、もし変数 inflagtrueに設定されているなら、 これらの関数は exprの内部形式を見ます。 これが違いを生む理由の1つは、整理器が式を並べ替えするからです:

 
(%i1) x+y;
(%o1)                              y+1
(%i2) first(x+y),inflag : true;
(%o2)                              x
(%i3) first(x+y),inflag : false;
(%o3)                              y

関数 secondtenthは 入力引数の二番目から十番目の部分をもたらします。

firstn, partも参照してください。

Categories:  Lists · Expressions

関数: firstn (expr, count)

もし exprが少なくとも count個の引数を持つなら、 exprの、先頭から count個のの引数を返します。 もし expr count個より少ないの引数を持つなら、 exprを返します。

exprはノンアトミックな任意の式です。 exprがリスト以外の何かの時、 firstnexprと同じ演算子を持つ式を返します。 countは非負整数でなければいけません。

firstnは、 式の内部形式が処理されるか(inflagがtrueの時)、 表示形式が処理されるか(inflagがfalseの時)を決定する 大域フラグ inflagに従います。

firstn(expr, 1)は最初の引数を含むノンアトミックな式を返しますが、 それは、 最初の引数そのものを返す first(expr)とは同じでないことに 注意してください。

lastn, restも参照してください。

例:

もし exprが少なくとも count個の引数を持つなら、 firstnは 、exprの先頭から count個の要素を返します。

 
(%i1) mylist : [1, a, 2, b, 3, x, 4 - y, 2*z + sin(u)];
(%o1)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]
(%i2) firstn (mylist, 0);
(%o2)                          []
(%i3) firstn (mylist, 1);
(%o3)                          [1]
(%i4) firstn (mylist, 2);
(%o4)                        [1, a]
(%i5) firstn (mylist, 7);
(%o5)               [1, a, 2, b, 3, x, 4 - y]

もし expr count個より少ないの引数を持つなら、 exprを返します。

 
(%i1) mylist : [1, a, 2, b, 3, x, 4 - y, 2*z + sin(u)];
(%o1)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]
(%i2) firstn (mylist, 100);
(%o2)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]

exprはノンアトミックな任意の式です。

 
(%i1) myfoo : foo(1, a, 2, b, 3, x, 4 - y, 2*z + sin(u));
(%o1)      foo(1, a, 2, b, 3, x, 4 - y, 2 z + sin(u))
(%i2) firstn (myfoo, 4);
(%o2)                    foo(1, a, 2, b)
(%i3) mybar : bar[m, n](1, a, 2, b, 3, x, 4 - y, 2*z + sin(u));
(%o3)    bar    (1, a, 2, b, 3, x, 4 - y, 2 z + sin(u))
            m, n
(%i4) firstn (mybar, 4);
(%o4)                  bar    (1, a, 2, b)
                          m, n
(%i5) mymatrix : genmatrix (lambda ([i, j], 10*i + j), 10, 4) $
(%i6) firstn (mymatrix, 3);
                       [ 11  12  13  14 ]
                       [                ]
(%o6)                  [ 21  22  23  24 ]
                       [                ]
                       [ 31  32  33  34 ]

firstnは大域フラグ inflagに従います。

 
(%i1) myexpr : a + b + c + d + e;
(%o1)                   e + d + c + b + a
(%i2) firstn (myexpr, 3), inflag=true;
(%o2)                       c + b + a
(%i3) firstn (myexpr, 3), inflag=false;
(%o3)                       e + d + c

firstn(expr, 1)first(expr)と同じじゃないことに注意してください。。

 
(%i1) firstn ([w, x, y, z], 1);
(%o1)                          [w]
(%i2) first ([w, x, y, z]);
(%o2)                           w

Categories:  Lists · Expressions

関数: fourth (expr)

式またはリスト exprの4番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: join (l, m)

リストlmの要素を交互に含む新しいリストを生成します。 結果は、要素 [l[1], m[1], l[2], m[2], ...]を持ちます。 リスト lmは、任意のタイプの要素を含めます。

もしリストの長さが違ったら、 joinは長いリストの要素を無視します。

もし lmがリストでなかったら、 Maximaは文句を言います。

appendも参照してください。

例:

 
(%i1) L1: [a, sin(b), c!, d - 1];
(%o1)                [a, sin(b), c!, d - 1]
(%i2) join (L1, [1, 2, 3, 4]);
(%o2)          [a, 1, sin(b), 2, c!, 3, d - 1, 4]
(%i3) join (L1, [aa, bb, cc, dd, ee, ff]);
(%o3)        [a, aa, sin(b), bb, c!, cc, d - 1, dd]

Categories:  Lists

関数: last (expr)

expr最後の(項、行、要素など)部分を返します。

lastnも参照してください。

Categories:  Lists · Expressions

関数: lastn (expr, count)

もし exprが少なくとも count個の引数をもつなら、 exprの後ろからcount個の引数を返します。 もし exprcount個より少ない引数をもつなら、 exprを返します。

exprはノンアトミックな任意の式です。 exprがリスト以外の何かの時、 lastnexprと同じ演算子を持つ式を返します。 countは非負の整数でなければいけません。

lastnは 式の内部形式が処理されるか(inflagがtrueの時)、 表示形式が処理されるか(inflagがfalseの時)を決定する 大域フラグ inflagに従います。

Note that lastn(expr, 1)は最後の引数を含むノンアトミックな式を返しますが、 それは、 最後の引数自体を返す last(expr)とは同じでないことに注意してください。

firstnrestも参照してください。

例:

もし exprが少なくとも count個の引数をもつなら、 exprの後ろからcount個の要素を返します。

 
(%i1) mylist : [1, a, 2, b, 3, x, 4 - y, 2*z + sin(u)];
(%o1)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]
(%i2) lastn (mylist, 0);
(%o2)                          []
(%i3) lastn (mylist, 1);
(%o3)                    [2 z + sin(u)]
(%i4) lastn (mylist, 2);
(%o4)                 [4 - y, 2 z + sin(u)]
(%i5) lastn (mylist, 7);
(%o5)         [a, 2, b, 3, x, 4 - y, 2 z + sin(u)]

もし exprcount個より少ない引数をもつなら、 exprを返します。

 
(%i1) mylist : [1, a, 2, b, 3, x, 4 - y, 2*z + sin(u)];
(%o1)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]
(%i2) lastn (mylist, 100);
(%o2)        [1, a, 2, b, 3, x, 4 - y, 2 z + sin(u)]

exprはノンアトミックな任意の式です。

 
(%i1) myfoo : foo(1, a, 2, b, 3, x, 4 - y, 2*z + sin(u));
(%o1)      foo(1, a, 2, b, 3, x, 4 - y, 2 z + sin(u))
(%i2) lastn (myfoo, 4);
(%o2)            foo(3, x, 4 - y, 2 z + sin(u))
(%i3) mybar : bar[m, n](1, a, 2, b, 3, x, 4 - y, 2*z + sin(u));
(%o3)    bar    (1, a, 2, b, 3, x, 4 - y, 2 z + sin(u))
            m, n
(%i4) lastn (mybar, 4);
(%o4)          bar    (3, x, 4 - y, 2 z + sin(u))
                  m, n
(%i5) mymatrix : genmatrix (lambda ([i, j], 10*i + j), 10, 4) $
(%i6) lastn (mymatrix, 3);
                     [ 81   82   83   84  ]
                     [                    ]
(%o6)                [ 91   92   93   94  ]
                     [                    ]
                     [ 101  102  103  104 ]

lastnは大域フラグ inflagに従います。

 
(%i1) myexpr : a + b + c + d + e;
(%o1)                   e + d + c + b + a
(%i2) lastn (myexpr, 3), inflag=true;
(%o2)                       e + d + c
(%i3) lastn (myexpr, 3), inflag=false;
(%o3)                       c + b + a

lastn(expr, 1)last(expr)と同じでないことに注意してください。

 
(%i1) lastn ([w, x, y, z], 1);
(%o1)                          [z]
(%i2) last ([w, x, y, z]);
(%o2)                           z

Categories:  Lists · Expressions

関数: length (expr)

(デフォルトでは) exprの外部(表示)形式の部分の数を返します。 リストに関しては、これは要素の数を返し、 行列に関しては行数であり、 和に関しては項数です。 (dispformを参照してください。)

lengthコマンドは inflagスイッチに影響されます。 だから例えば、 length(a/(b*c));は、 (exptdispflagtrueと仮定して) もし inflagfalseなら2を与えますが、 もし inflagtrueなら3を与えます。 (内部表現は本質的には a*b^-1*c^-1です。)

リストの長さを決定するには通常リストの要素の数に比例する時間が必要です。 なので、もしループの中でリストの長さを使っているなら、ループの外で長さを計算させれば 劇的にパフォーマンスが改善されるかもしれません。

Categories:  Lists · Expressions

オプション変数: listarith

デフォルト値: true - もし falseなら、 リストを伴う任意の算術演算が抑制されるようになります; trueの時、リスト-行列演算では、 リストが行列に変換されるようになり、いつも行列の結果をもたらすよう連鎖します。 しかしながら、リスト-リスト演算はリストを返します。

Categories:  Lists · Global flags

関数: listp (expr)

もし exprがリストなら true、 そうでなければ falseを返します。

Categories:  Lists · Predicate functions

関数: lreduce  
    lreduce (F, s)  
    lreduce (F, s, s_0)

2項関数 Fを合成で n項関数に拡張します。 sはリストです。

lreduce(F, s)F(... F(F(s_1, s_2), s_3), ... s_n)を返します。 オプション引数 s_0を与えた時には、 結果は lreduce(F, cons(s_0, s))と同値です。

関数 Fはリストのleftmost要素に最初に適用されるので "lreduce"という名前です。

rreduce, xreduce, tree_reduceも参照してください。

例:

オプション引数なしの lreduce

 
(%i1) lreduce (f, [1, 2, 3]);
(%o1)                     f(f(1, 2), 3)
(%i2) lreduce (f, [1, 2, 3, 4]);
(%o2)                  f(f(f(1, 2), 3), 4)

オプション引数ありの lreduce

 
(%i1) lreduce (f, [1, 2, 3], 4);
(%o1)                  f(f(f(4, 1), 2), 3)

組み込み2項演算子に適用された lreduce/は除算演算子です。

 
(%i1) lreduce ("^", args ({a, b, c, d}));
                               b c d
(%o1)                       ((a ) )
(%i2) lreduce ("/", args ({a, b, c, d}));
                                a
(%o2)                         -----
                              b c d

Categories:  Lists

関数: makelist  
    makelist ()  
    makelist (expr, n)  
    makelist (expr, i, i_max)  
    makelist (expr, i, i_0, i_max)  
    makelist (expr, i, i_0, i_max, step)  
    makelist (expr, x, list)

一番目の形 makelist ()は空のリストを生成します。 二番目の形 makelist (expr)exprを1つの要素とするリストを生成します。 makelist (expr, n)exprから生成される n個の要素のリストを生成します。

最も一般的な形 makelist (expr, i, i_0, i_max, step)i_0から i_1に等しい jに対して ev (expr, i=j)が以下の数列の要素 jに 適用された時得られる要素のリストを返します: i_0, i_0 + step, i_0 + 2*step, ..., ただし、|j||i_max|以下。

増分 stepは(正でも負でも)数であったり、式であったりします。 もし省略されたら、デフォルト値 1が使われます。 もし i_0stepの両方が省略されたら、 それらはデフォルト値 1を取ります。

makelist (expr, x, list)は、 1から length (list)に等しい jに対して、 j番目の要素が ev (expr, x=list[j])に等しい リストを返します。

例:

 
(%i1) makelist (concat (x,i), i, 6);
(%o1)               [x1, x2, x3, x4, x5, x6]
(%i2) makelist (x=y, y, [a, b, c]);
(%o2)                 [x = a, x = b, x = c]
(%i3) makelist (x^2, x, 3, 2*%pi, 2);
(%o3)                        [9, 25]
(%i4) makelist (random(6), 4);
(%o4)                     [2, 0, 2, 5]
(%i5) flatten (makelist (makelist (i^2, 3), i, 4));
(%o5)        [1, 1, 1, 4, 4, 4, 9, 9, 9, 16, 16, 16]
(%i6) flatten (makelist (makelist (i^2, i, 3), 4));
(%o6)         [1, 4, 9, 1, 4, 9, 1, 4, 9, 1, 4, 9]

Categories:  Lists

関数: member (expr_1, expr_2)

もし args(expr_2)の中のある要素aに対して is(expr_1 = a)なら trueを返し、 そうでなければ falseを返します。

expr_2は通常リストです。 その場合、 args(expr_2) = expr_2かつ expr_2の中のある要素 aに対して、 is(expr_1 = a)であることがテストです。

memberexpr_2の引数の部分を検査しません。 だから、 たとえ expr_1expr_2のある引数の部分であっても falseを返すかもしれません。

elementpも参照してください。

例:

 
(%i1) member (8, [8, 8.0, 8b0]);
(%o1)                         true
(%i2) member (8, [8.0, 8b0]);
(%o2)                         false
(%i3) member (b, [a, b, c]);
(%o3)                         true
(%i4) member (b, [[a, b], [b, c]]);
(%o4)                         false
(%i5) member ([b, c], [[a, b], [b, c]]);
(%o5)                         true
(%i6) F (1, 1/2, 1/4, 1/8);
                               1  1  1
(%o6)                     F(1, -, -, -)
                               2  4  8
(%i7) member (1/8, %);
(%o7)                         true
(%i8) member ("ab", ["aa", "ab", sin(1), a + b]);
(%o8)                         true

Categories:  Lists · Expressions · Predicate functions

関数: ninth (expr)

式またはリスト exprの9番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: pop (list)

popは、リスト listから最初の要素を取り除き、返します。 引数 listは空でないリストにバインドされたmapatomでなければいけません。 もし引数 listが空でないリストにバインドされてなければ、 Maximaはエラーシグナルを発します。

例には pushも参照してください。

Categories:  Lists · Expressions

関数: push (item, list)

pushは項目 itemをリスト listの先頭に追加し、 新しいリストのコピーを返します。 2番目の引数 listは空でないリストにバインドされたmapatomでなければいけません。 1番目の引数 itemは任意のMaximaシンボルや式が使えます。

もし引数 listが空でないリストにバインドされてなければ、 Maximaはエラーシグナルを発します。

リストから最初の項目を取り除くには popを参照してください。

例:

 
(%i1) ll: [];
(%o1)                          []
(%i2) push (x, ll);
(%o2)                          [x]
(%i3) push (x^2+y, ll);
                                 2
(%o3)                      [y + x , x]
(%i4) a: push ("string", ll);
                                     2
(%o4)                  [string, y + x , x]
(%i5) pop (ll);
(%o5)                        string
(%i6) pop (ll);
                                  2
(%o6)                        y + x
(%i7) pop (ll);
(%o7)                           x
(%i8) ll;
(%o8)                          []
(%i9) a;
                                     2
(%o9)                  [string, y + x , x]

Categories:  Lists · Expressions

関数: rest  
    rest (expr, n)  
    rest (expr)

もし nが正なら、 頭の n個の要素を取り除いた exprを返し、 もし nが負なら、 お尻の - n個の要素を取り除いた exprを返します。 もし nが1なら、省略できます。 1番目の引数 exprは、リスト、行列、他の式を取り得ます。 exprがアトムの時、 restはエラーシグナルを発します; exprが 空のリストで partswitchが真の時、 restendを返します。

restf(a,b,c)のような式に適用すると f(b,c)を返します。 一般的には、リストでないものに restを適用することは意味がありません。 例えば、 '^'は2つの引数を要求するので、 rest(a^b)はエラーメッセージを出力します。 args(a^b)[a,b]を返し、 op(a^b)は ^を返すので 関数 argsopも役に立つかもしれません

firstnlastnも参照してください。

 
(%i1) rest(a+b+c);
(%o1) b+a
(%i2) rest(a+b+c,2);
(%o2) a
(%i3) rest(a+b+c,-2);
(%o3) c

Categories:  Lists · Expressions

関数: reverse (list)

list のメンバーの順序を逆にします。 (メンバー自身は変えません。) reverseは、一般式でも機能します。 例えば、 reverse(a=b);b=aを与えます。

Categories:  Lists · Expressions

関数: rreduce  
    rreduce (F, s)  
    rreduce (F, s, s_{n + 1})

2項関数 Fを合成でn項関数に拡張します。 sはリストです。

rreduce(F, s)F(s_1, ... F(s_{n - 2}, F(s_{n - 1}, s_n)))を返します。 オプション引数 s_{n + 1}を与えた時には、 結果は rreduce(F, endcons(s_{n + 1}, s))と同値です。

関数 Fはリストのrightmost要素に最初に適用されるので "rreduce"という名前です。

lreduce, tree_reduce, xreduceも参照してください。

例:

オプション引数なしの rreduce

 
(%i1) rreduce (f, [1, 2, 3]);
(%o1)                     f(1, f(2, 3))
(%i2) rreduce (f, [1, 2, 3, 4]);
(%o2)                  f(1, f(2, f(3, 4)))

オプション引数ありの rreduce

 
(%i1) rreduce (f, [1, 2, 3], 4);
(%o1)                  f(1, f(2, f(3, 4)))

組み込み2項演算子に適用された rreduce/は除算演算子です。

 
(%i1) rreduce ("^", args ({a, b, c, d}));
                                 d
                                c
                               b
(%o1)                         a
(%i2) rreduce ("/", args ({a, b, c, d}));
                               a c
(%o2)                          ---
                               b d

Categories:  Lists

関数: second (expr)

式またはリスト exprの二番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: seventh (expr)

式またはリスト exprの7番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: sixth (expr)

式またはリスト exprの6番目の項を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: sort  
    sort (L, P)  
    sort (L)

sort(L, P)は 2つの引数の述語論理Pに従ってリストLをソートします。 PLの要素上で厳密で弱い順序を定義します。 もし [P(a, b)trueなら、 結果の中でabより先に現れます。 もし [P(a, b)[P(b, a)trueでないなら、 abは等価で、入力と同じ順序で結果の中に現れます。 すなわち、 sortは安定ソートです。

もしLの中のある要素で [P(a, b)[P(b, a)両方とも trueなら、 Pは有効なソート述語論理ではなく、結果は未定義です。 もし P(a, b)trueでも falseでもない別の何かなら、 sortはエラーをシグナルします。

述語論理は関数や2値中値演算子の名前として、lambda式として指定されるかもしれません。 もし演算子名として指定するなら、名前を「ダブルクォート」でくくらなければいけません。

ソートされたリストは新しいオブジェクトとして返されます; Lは変更されません。

sort(L)(L, ordderlessp)と同値です。

orderlesspが決定するように、デフォルトのソート順序は昇順です。 述語論理 ordergreatpはリストを降順にソートします。

Maximaのアトムと式すべては、orderlesspordergreatpの下で比較可能です。

演算子 <>は数、定数、定数式を大きさで順序付けします。 orderlesspordergreatpは数、定数、定数式を大きさで順序付けしないことに注意してください。

述語論理 ordermagnitudep<と同じように 数や定数、定数式の順序付けし、 他の要素すべてをorderlesspと同じように順序付けします。

例:

sortは リストの要素上で厳密で弱い順序を定義する 引数2つの述語論理Pに従ってリストLをソートします。

 
(%i1) sort ([1, a, b, 2, 3, c], 'orderlessp);
(%o1)                  [1, 2, 3, a, b, c]
(%i2) sort ([1, a, b, 2, 3, c], 'ordergreatp);
(%o2)                  [c, b, a, 3, 2, 1]

述語論理は関数や2値中値演算子の名前として、lambda式として指定されるかもしれません。 もし演算子名として指定するなら、名前を「ダブルクォート」でくくらなければいけません。

 
(%i1) L : [[1, x], [3, y], [4, w], [2, z]];
(%o1)           [[1, x], [3, y], [4, w], [2, z]]
(%i2) foo (a, b) := a[1] > b[1];
(%o2)                 foo(a, b) := a  > b
                                    1    1
(%i3) sort (L, 'foo);
(%o3)           [[4, w], [3, y], [2, z], [1, x]]
(%i4) infix (">>");
(%o4)                          >>
(%i5) a >> b := a[1] > b[1];
(%o5)                  (a >> b) := a  > b
                                    1    1
(%i6) sort (L, ">>");
(%o6)           [[4, w], [3, y], [2, z], [1, x]]
(%i7) sort (L, lambda ([a, b], a[1] > b[1]));
(%o7)           [[4, w], [3, y], [2, z], [1, x]]

sort(L)sort(L, orderlessp)と同値です。

 
(%i1) L : [a, 2*b, -5, 7, 1 + %e, %pi];
(%o1)             [a, 2 b, - 5, 7, %e + 1, %pi]
(%i2) sort (L);
(%o2)             [- 5, 7, %e + 1, %pi, a, 2 b]
(%i3) sort (L, 'orderlessp);
(%o3)             [- 5, 7, %e + 1, %pi, a, 2 b]

orderlesspが決めるようにデフォルトのソート順は昇順です。 述語論理 ordergreatpはリストを降順にソートします。

 
(%i1) L : [a, 2*b, -5, 7, 1 + %e, %pi];
(%o1)             [a, 2 b, - 5, 7, %e + 1, %pi]
(%i2) sort (L);
(%o2)             [- 5, 7, %e + 1, %pi, a, 2 b]
(%i3) sort (L, 'ordergreatp);
(%o3)             [2 b, a, %pi, %e + 1, 7, - 5]

Maximaのアトムや式すべては orderlesspordergreatpの下で比較可能です。

 
(%i1) L : [11, -17, 29b0, 9*c, 7.55, foo(x, y), -5/2, b + a];
                                                 5
(%o1)  [11, - 17, 2.9b1, 9 c, 7.55, foo(x, y), - -, b + a]
                                                 2
(%i2) sort (L, orderlessp);
                5
(%o2)  [- 17, - -, 7.55, 11, 2.9b1, b + a, 9 c, foo(x, y)]
                2
(%i3) sort (L, ordergreatp);
                                                  5
(%o3)  [foo(x, y), 9 c, b + a, 2.9b1, 11, 7.55, - -, - 17]
                                                  2

演算子 <>は数、定数、定数式を大きさで順序付けします。 orderlesspordergreatpは数、定数、定数式を大きさで順序付けしないことに注意してください。

 
(%i1) L : [%pi, 3, 4, %e, %gamma];
(%o1)                [%pi, 3, 4, %e, %gamma]
(%i2) sort (L, ">");
(%o2)                [4, %pi, 3, %e, %gamma]
(%i3) sort (L, ordergreatp);
(%o3)                [%pi, %gamma, %e, 4, 3]

述語論理 ordermagnitudep<と同じように 数や定数、定数式の順序付けし、 他の要素すべてをorderlesspと同じように順序付けします。

 
(%i1) L : [%i, 1+%i, 2*x, minf, inf, %e, sin(1), 0, 1, 2, 3, 1.0, 1.0b0];
(%o1) [%i, %i + 1, 2 x, minf, inf, %e, sin(1), 0, 1, 2, 3, 1.0,
                                                           1.0b0]
(%i2) sort (L, ordermagnitudep);
(%o2) [minf, 0, sin(1), 1, 1.0, 1.0b0, 2, %e, 3, inf, %i,
                                                     %i + 1, 2 x]
(%i3) sort (L, orderlessp);
(%o3) [0, 1, 1.0, 2, 3, sin(1), 1.0b0, %e, %i, %i + 1, inf,
                                                       minf, 2 x]

Categories:  Lists

関数: sublist (list, p)

述語論理ptrueを返すlistの要素のリストを返します。

例:

 
(%i1) L: [1, 2, 3, 4, 5, 6];
(%o1)                  [1, 2, 3, 4, 5, 6]
(%i2) sublist (L, evenp);
(%o2)                       [2, 4, 6]

Categories:  Lists

関数: sublist_indices (L, P)

述語論理 maybe(P(x))trueを返す、 リスト Lの要素 xのインデックスを返します; これは falseはもちろん unknownも除外します。 Pは関数名かラムダ式を取り得ます。 Lはリストリテラルでなければいけません。

例:

 
(%i1) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b],
                       lambda ([x], x='b));
(%o1)                     [2, 3, 7, 9]
(%i2) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], symbolp);
(%o2)                  [1, 2, 3, 4, 7, 9]
(%i3) sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0],
                       identity);
(%o3)                       [1, 4, 5]
(%i4) assume (x < -1);
(%o4)                       [x < - 1]
(%i5) map (maybe, [x > 0, x < 0, x < -2]);
(%o5)                [false, true, unknown]
(%i6) sublist_indices ([x > 0, x < 0, x < -2], identity);
(%o6)                          [2]

Categories:  Lists

関数: tenth (expr)

式かリスト exprの10番目の項目を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: third (expr)

式かリスト exprの3番目の項目を返します。 詳細は firstを参照してください。

Categories:  Lists · Expressions

関数: tree_reduce  
    tree_reduce (F, s)  
    tree_reduce (F, s, s_0)

2項関数 Fを合成で n項関数に拡張します。 sは集合かリストです。

tree_reduceは以下と同値です: 隣同士の要素のペアに Fを適用して、 新たなリスト [F(s_1, s_2), F(s_3, s_4), ...]を形成します。 もし要素の数が奇数なら最後の要素はそのままリストに載ります。 そして、リストが要素1つになるまで繰り返します。その結果が戻り値です。

オプション引数 s_0を与えた時には、 結果は tree_reduce(F, cons(s_0, s))と同値です。

浮動小数点数の加算に関して、 tree_reduceは、rreducelreduceよりも小さな丸め誤差の和を返すことができます。

sの要素と部分的な結果を深さ最小2分木で整理できるので、 "tree_reduce"という名前です。

例:

偶数個の要素を持つリストに適用された tree_reduce

 
(%i1) tree_reduce (f, [a, b, c, d]);
(%o1)                  f(f(a, b), f(c, d))

奇数個の要素を持つリストに適用された tree_reduce

 
(%i1) tree_reduce (f, [a, b, c, d, e]);
(%o1)               f(f(f(a, b), f(c, d)), e)

Categories:  Sets · Lists

関数: unique (L)

リスト Lの重複しない要素を返します。

Lの要素すべてが重複しない時、 uniqueは、 L自身ではなく、 Lの浅いコピーを返します。

もし Lがリストでないなら、 uniqueLを返します。

例:

 
(%i1) unique ([1, %pi, a + b, 2, 1, %e, %pi, a + b, [1]]);
(%o1)              [1, 2, %e, %pi, [1], b + a]

関数: xreduce  
    xreduce (F, s)  
    xreduce (F, s, s_0)

関数 Fを合成で n項関数に拡張します。 もしくはもし Fが既に n項関数なら Fsに適用します。 Fがn項関数でない時、 xreducelreduceと同じです。 sは集合かリストです。

n項関数と知られている関数は 加算 +, 乗算 *, and, or, max, min, と appendです。 declare(F, nary)で関数が宣言されているかもしれません。 これらの関数に関して、 xreducerreducelreduceより速いことが期待できます。

オプション引数 s_0を与えた場合、 結果は xreduce(s, cons(s_0, s))と同値です。

浮動小数点加算は厳密には結合的ではないです; それはともかく sが浮動小数点数を含む時、 xreduceは Maximaの n項加算を適用します。

例:

n項関数と知られている関数へ適用された xreduceFはすべての引数で1度だけ呼ばれます。

 
(%i1) declare (F, nary);
(%o1)                         done
(%i2) F ([L]) := L;
(%o2)                      F([L]) := L
(%i3) xreduce (F, [a, b, c, d, e]);
(%o3)                    [a, b, c, d, e]

n項関数と知られていない関数へ適用された xreduceGは2つの引数を与えられながら数回呼ばれます。

 
(%i1) G ([L]) := L;
(%o1)                      G([L]) := L
(%i2) xreduce (G, [a, b, c, d, e]);
(%o2)                 [[[[a, b], c], d], e]
(%i3) lreduce (G, [a, b, c, d, e]);
(%o3)                 [[[[a, b], c], d], e]

Categories:  Sets · Lists

c h---------------------------------------------------


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5.3 Performance considerations for Lists

リストは要素を追加したり削除したりする効率的な方法を提供します。 最終的な次元を知ることなしに生成することができます。 リストはリストをコピーしたり扱ったりする効率的な手段を提供します。 また、入れ子のリストは厳格に矩形である必要はありません。 宣言された配列に対するこれらの利点の代わりに、 リスト内のランダムな要素へのアクセスに必要な時間がランダムな要素の頭からの距離におおよそ比例するかもしれない欠点があります。 しかし、リストをスタックやFIFOとして使うことで、リストを効率的に横断することは可能です:

 
(%i1) l:[Test,1,2,3,4];
(%o1)                  [Test, 1, 2, 3, 4]
(%i2) while l # [] do
   disp(pop(l));
                              Test

                                1

                                2

                                3

                                4

(%o2)                         done

別のより速い例:

 
(%i1) l:[Test,1,2,3,4];
(%o1)                  [Test, 1, 2, 3, 4]
(%i2) for i in l do
   disp(pop(l));
                              Test

                                1

                                2

                                3

                                4

(%o2)                         done

reverse ()を使ってリストを逆順にすれば、 リストの最後の要素から横断を始められます。 もし長いリストの要素を違った順序で処理するなら、 初めにリストを宣言された配列に変換することで パフォーマンスを向上させられるかもしれません。

forループの終了条件は毎回テストされることにも注意してください。 それは、 終了条件で lengthの結果が使われるなら、それはキャッシュすべきということを意味します:

 
(%i1) l:makelist(i,i,1,100000)$
(%i2) lngth:length(l);
(%o2)                        100000
(%i3) x:1;
(%o3)                           1
(%i4) for i:1 thru lngth do
    x:x+1$
(%i5) x;
(%o5)                        100001


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6 Arrays


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7 Functions and Variables for Arrays

関数: array  
    array (name, dim_1, …, dim_n)  
    array (name, type, dim_1, …, dim_n)  
    array ([name_1, …, name_m], dim_1, …, dim_n)

n次元の配列を生成します。 nは5以下を取り得ます。 i番目の次元のための添字は0からdim_iまで動く整数です。

array (name, dim_1, ..., dim_n)は 一般的な配列を生成します。

array (name, type, dim_1, ..., dim_n)は 指定されたタイプの要素を持つ配列を生成します。 typeには 制限されたサイズの整数にはfixnumが使え、 また、浮動小数点にはflonumが使えます。

array ([name_1, ..., name_m], dim_1, ..., dim_n) は同じ次元のm個の配列を生成します。

もしユーザーが対応する配列を宣言する前に添字付き変数に割り当てたら、 未宣言配列が生成されます。 (ハッシュコーディングが添字上でされるので)別名ハッシュド配列と知られる未宣言配列は、 宣言配列よりもっと一般的です。 ユーザーは最大サイズを宣言せず、さらなる要素が値に割り当てられる時、ハッシュすることで それらは動的に成長します。 未宣言配列の添字は数である必要すらありません。 しかしながら、 配列がむしろ疎でないなら、 未宣言のまま放っておくより、可能な時に宣言した方がおそらく効率的です。 array関数は未宣言配列を宣言配列に変換するのに使うことができます。

Categories:  Arrays

関数: arrayapply (A, [i_1, … i_n])

A [i_1, ..., i_n]を評価します。 ここで、Aは配列、i_1, …, i_nは整数です。

これは、最初の引数が関数の代わりに配列だということを除いて、 applyを連想させます。

Categories:  Expressions · Arrays

関数: arrayinfo (A)

配列Aに関する情報を返します。 引数Aは、宣言配列、未宣言(ハッシュド)配列、配列関数、または添字付き関数を取り得ます。

宣言配列では、 arrayinfoは、 アトムdeclaredと、次元数、それぞれの次元のサイズを含むリストを返します。 配列の要素は、バインドされたものもそうでないものも、listarrayで返されます。

未宣言配列(ハッシュド配列)では、 arrayinfoは、 アトムhashedと、添字の数、値を持つすべての要素の添字を含むリストを返します。 値は listarrayで返されます。

配列関数では、 arrayinfoは、 アトムhashedと、添字の数、 記憶された関数値がある添字の値すべてを含むリストを返します。 記憶された関数値は、listarrayで返されます。

添字付き関数では、、 arrayinfoは、 returns a list comprising the アトムhashedと、添字の数、 ラムダ式がある添字の値すべてを含むリストを返します。 ラムダ式は listarrayで返されます。

listarrayも参照してください。

例:

宣言配列に適用されたarrayinfolistarray

 
(%i1) array (aa, 2, 3);
(%o1)                          aa
(%i2) aa [2, 3] : %pi;
(%o2)                          %pi
(%i3) aa [1, 2] : %e;
(%o3)                          %e
(%i4) arrayinfo (aa);
(%o4)                 [declared, 2, [2, 3]]
(%i5) listarray (aa);
(%o5) [#####, #####, #####, #####, #####, #####, %e, #####,
                                        #####, #####, #####, %pi]

未宣言(ハッシュド)配列に適用されたarrayinfolistarray

 
(%i1) bb [FOO] : (a + b)^2;
                                   2
(%o1)                       (b + a)
(%i2) bb [BAR] : (c - d)^3;
                                   3
(%o2)                       (c - d)
(%i3) arrayinfo (bb);
(%o3)               [hashed, 1, [BAR], [FOO]]
(%i4) listarray (bb);
                              3         2
(%o4)                 [(c - d) , (b + a) ]

配列関数に適用されたarrayinfolistarray

 
(%i1) cc [x, y] := y / x;
                                     y
(%o1)                      cc     := -
                             x, y    x
(%i2) cc [u, v];
                                v
(%o2)                           -
                                u
(%i3) cc [4, z];
                                z
(%o3)                           -
                                4
(%i4) arrayinfo (cc);
(%o4)              [hashed, 2, [4, z], [u, v]]
(%i5) listarray (cc);
                              z  v
(%o5)                        [-, -]
                              4  u

添字付き関数に適用されたarrayinfolistarray

 
(%i1) dd [x] (y) := y ^ x;
                                     x
(%o1)                     dd (y) := y
                            x
(%i2) dd [a + b];
                                    b + a
(%o2)                  lambda([y], y     )
(%i3) dd [v - u];
                                    v - u
(%o3)                  lambda([y], y     )
(%i4) arrayinfo (dd);
(%o4)             [hashed, 1, [b + a], [v - u]]
(%i5) listarray (dd);
                         b + a                v - u
(%o5)      [lambda([y], y     ), lambda([y], y     )]

Categories:  Arrays

関数: arraymake (A, [i_1, …, i_n])

A[i_1, ..., i_n]を返します。 結果は未評価の配列参照です。

arraymakeは、 戻り値は、未評価関数コールの代わりに未評価の配列参照だということを除いて、 funmakeを連想させます。

例:

 
(%i1) arraymake (A, [1]);
(%o1)                          A
                                1
(%i2) arraymake (A, [k]);
(%o2)                          A
                                k
(%i3) arraymake (A, [i, j, 3]);
(%o3)                       A
                             i, j, 3
(%i4) array (A, fixnum, 10);
(%o4)                           A
(%i5) fillarray (A, makelist (i^2, i, 1, 11));
(%o5)                           A
(%i6) arraymake (A, [5]);
(%o6)                          A
                                5
(%i7) ''%;
(%o7)                          36
(%i8) L : [a, b, c, d, e];
(%o8)                    [a, b, c, d, e]
(%i9) arraymake ('L, [n]);
(%o9)                          L
                                n
(%i10) ''%, n = 3;
(%o10)                          c
(%i11) A2 : make_array (fixnum, 10);
(%o11)          {Array:  #(0 0 0 0 0 0 0 0 0 0)}
(%i12) fillarray (A2, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
(%o12)          {Array:  #(1 2 3 4 5 6 7 8 9 10)}
(%i13) arraymake ('A2, [8]);
(%o13)                         A2
                                 8
(%i14) ''%;
(%o14)                          9

Categories:  Expressions · Arrays

システム変数: arrays

デフォルト値: []

arraysは割り当てられた配列のリストです。 これらは、arrayで宣言された配列、 (なにかw配列要素に割り当てられた)陰の定義で構成されたハッシュド配列、 :=defineで定義された配列関数を含みます。 make_arrayで定義された配列は含まれません。

array, arrayapply, arrayinfo, arraymake, fillarray, listarray, rearrayも参照してください。

例:

 
(%i1) array (aa, 5, 7);
(%o1)                          aa
(%i2) bb [FOO] : (a + b)^2;
                                   2
(%o2)                       (b + a)
(%i3) cc [x] := x/100;
                                   x
(%o3)                      cc  := ---
                             x    100
(%i4) dd : make_array ('any, 7);
(%o4)       {Array:  #(NIL NIL NIL NIL NIL NIL NIL)}
(%i5) arrays;
(%o5)                     [aa, bb, cc]

Categories:  Arrays · Global variables

関数: arraysetapply (A, [i_1, …, i_n], x)

xA[i_1, ..., i_n]に割り当てます。 ここで、Aは配列で、i_1, …, i_nは整数です。

arraysetapplyは引数を評価します。

Categories:  Expressions · Arrays

関数: fillarray (A, B)

配列ABから埋めます。 ここで、Bはリストか配列です。

もし生成時に特定のタイプがAのために宣言されたら、 その同じタイプの要素でだけ埋めることができます; もし違ったタイプの要素をコピーする試みがなされたらエラーです。

もし配列ABの次元が違ったら、 Aは行優先順で埋められます。 もしBの中の要素が十分でないなら、 Aの残りを埋めるのに最後の要素が使われます。 もし多すぎるなら、残りは無視されます。

fillarrayは最初の引数を返します。

例:

9個の要素の配列を生成し、リストから埋めます。

 
(%i1) array (a1, fixnum, 8);
(%o1)                          a1
(%i2) listarray (a1);
(%o2)              [0, 0, 0, 0, 0, 0, 0, 0, 0]
(%i3) fillarray (a1, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
(%o3)                          a1
(%i4) listarray (a1);
(%o4)              [1, 2, 3, 4, 5, 6, 7, 8, 9]

配列を埋めるのに要素が足らない時、 最後の要素が繰り返されます。 要素が多すぎる時、余分の要素は無視されます。

 
(%i1) a2 : make_array (fixnum, 8);
(%o1)             {Array:  #(0 0 0 0 0 0 0 0)}
(%i2) fillarray (a2, [1, 2, 3, 4, 5]);
(%o2)             {Array:  #(1 2 3 4 5 5 5 5)}
(%i3) fillarray (a2, [4]);
(%o3)             {Array:  #(4 4 4 4 4 4 4 4)}
(%i4) fillarray (a2, makelist (i, i, 1, 100));
(%o4)             {Array:  #(1 2 3 4 5 6 7 8)}

多次元配列は行優先順に埋められます。

 
(%i1) a3 : make_array (fixnum, 2, 5);
(%o1)        {Array:  #2A((0 0 0 0 0) (0 0 0 0 0))}
(%i2) fillarray (a3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
(%o2)        {Array:  #2A((1 2 3 4 5) (6 7 8 9 10))}
(%i3) a4 : make_array (fixnum, 5, 2);
(%o3)     {Array:  #2A((0 0) (0 0) (0 0) (0 0) (0 0))}
(%i4) fillarray (a4, a3);
(%o4)     {Array:  #2A((1 2) (3 4) (5 6) (7 8) (9 10))}

Categories:  Arrays

関数: listarray (A)

配列Aの要素のリストを返します。 引数Aは、宣言配列、未宣言(ハッシュド)配列、配列関数、添字付き関数を取り得ます。

要素は行優先順にリストされます。 すなわち、要素は、最初のインデックスに従って振り分けられ、次に二番目のインデックスに従って、などなど。 インデックス値の振り分け順は、 orderlessが確立する順と同じです。

未宣言配列や、配列関数、添字付き関数では、 要素はarrayinfoが返すインデックス値に対応します。

宣言された一般配列のバインドされていない要素(すなわち、fixnumでもflonumでもない要素)は、 #####として返されます。 宣言されたfixnum配列またはflonum配列のバイドされていない要素は、 それぞれ0または0.0として返されます。 未宣言配列、配列関数、添字付き関数のバインドされていない要素は返されません。

例:

宣言配列に適用されたlistarrayarrayinfo

 
(%i1) array (aa, 2, 3);
(%o1)                          aa
(%i2) aa [2, 3] : %pi;
(%o2)                          %pi
(%i3) aa [1, 2] : %e;
(%o3)                          %e
(%i4) listarray (aa);
(%o4) [#####, #####, #####, #####, #####, #####, %e, #####,
                                        #####, #####, #####, %pi]
(%i5) arrayinfo (aa);
(%o5)                 [declared, 2, [2, 3]]

未宣言(ハッシュド)配列に適用されたlistarrayarrayinfo

 
(%i1) bb [FOO] : (a + b)^2;
                                   2
(%o1)                       (b + a)
(%i2) bb [BAR] : (c - d)^3;
                                   3
(%o2)                       (c - d)
(%i3) listarray (bb);
                              3         2
(%o3)                 [(c - d) , (b + a) ]
(%i4) arrayinfo (bb);
(%o4)               [hashed, 1, [BAR], [FOO]]

配列関数に適用されたlistarrayarrayinfo

 
(%i1) cc [x, y] := y / x;
                                     y
(%o1)                      cc     := -
                             x, y    x
(%i2) cc [u, v];
                                v
(%o2)                           -
                                u
(%i3) cc [4, z];
                                z
(%o3)                           -
                                4
(%i4) listarray (cc);
                              z  v
(%o4)                        [-, -]
                              4  u
(%i5) arrayinfo (cc);
(%o5)              [hashed, 2, [4, z], [u, v]]

添字付き関数に適用されたlistarrayarrayinfo

 
(%i1) dd [x] (y) := y ^ x;
                                     x
(%o1)                     dd (y) := y
                            x
(%i2) dd [a + b];
                                    b + a
(%o2)                  lambda([y], y     )
(%i3) dd [v - u];
                                    v - u
(%o3)                  lambda([y], y     )
(%i4) listarray (dd);
                         b + a                v - u
(%o4)      [lambda([y], y     ), lambda([y], y     )]
(%i5) arrayinfo (dd);
(%o5)             [hashed, 1, [b + a], [v - u]]

Categories:  Arrays

関数: make_array (type, dim_1, ..., dim_n)

Lisp配列を生成し、返します。 typeは、any, flonum, fixnum, hashed, functionalを取り得ます。 n個のインデックスがあり、 i番目のインデックスは0からdim_i - 1まで動きます。

make_arrayarrayに対する利点は、 戻り値が名前を持たないことであり、 一旦、それへのポインタが消えると、それも消えます。 例えば、もしy: make_array (...)なら、 yは領域を取るオブジェクトを指しますが、 y: falseの後、yはそのオブジェクトをもはや指さないので、 オブジェクトはガーベッジコレクトされることができます。

例:

 
(%i1) A1 : make_array (fixnum, 10);
(%o1)           {Array:  #(0 0 0 0 0 0 0 0 0 0)}
(%i2) A1 [8] : 1729;
(%o2)                         1729
(%i3) A1;
(%o3)          {Array:  #(0 0 0 0 0 0 0 0 1729 0)}
(%i4) A2 : make_array (flonum, 10);
(%o4) {Array:  #(0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)}
(%i5) A2 [2] : 2.718281828;
(%o5)                      2.718281828
(%i6) A2;
(%o6)
     {Array:  #(0.0 0.0 2.718281828 0.0 0.0 0.0 0.0 0.0 0.0 0.0)}
(%i7) A3 : make_array (any, 10);
(%o7) {Array:  #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)}
(%i8) A3 [4] : x - y - z;
(%o8)                      - z - y + x
(%i9) A3;
(%o9) {Array:  #(NIL NIL NIL NIL ((MPLUS SIMP) $X ((MTIMES SIMP)\
 -1 $Y) ((MTIMES SIMP) -1 $Z))
  NIL NIL NIL NIL NIL)}
(%i10) A4 : make_array (fixnum, 2, 3, 5);
(%o10) {Array:  #3A(((0 0 0 0 0) (0 0 0 0 0) (0 0 0 0 0)) ((0 0 \
0 0 0) (0 0 0 0 0) (0 0 0 0 0)))}
(%i11) fillarray (A4, makelist (i, i, 1, 2*3*5));
(%o11) {Array:  #3A(((1 2 3 4 5) (6 7 8 9 10) (11 12 13 14 15))
    ((16 17 18 19 20) (21 22 23 24 25) (26 27 28 29 30)))}
(%i12) A4 [0, 2, 1];
(%o12)                         12

Categories:  Arrays

関数: rearray (A, dim_1, ..., dim_n)

配列の次元を変えます。 新しい配列は 行優先順に古いものの配列で埋められます。 もし古い配列が小さすぎるなら、 残りの要素は、 配列のタイプに依って、 false, 0.0または0で埋められます。 配列のタイプは変えられません。

Categories:  Arrays

関数: remarray  
    remarray (A_1, …, A_n)  
    remarray (all)

配列と関数に関連づけられた配列を削除し、占められた領域を開放します。 引数は、宣言配列、未宣言(ハッシュド)配列、配列関数、添字付き関数を取り得ます。

remarray (all)は、 グローバルリストarraysの中の項目すべてを削除します。

もしハッシュド配列の中の値を再定義することが望ましいなら、この関数を使うことが必要になるかもしれません。

remarrayは削除された配列のリストを返します。

remarrayはクォートします。

Categories:  Arrays

関数: subvar (x, i)

添字付き式x[i]を評価します。

subvarは引数を評価します。

arraymake (x, [i])は 式x[i]を構成しますが、 それを評価はしません。

例:

 
(%i1) x : foo $
(%i2) i : 3 $
(%i3) subvar (x, i);
(%o3)                         foo
                                 3
(%i4) foo : [aa, bb, cc, dd, ee]$
(%i5) subvar (x, i);
(%o5)                          cc
(%i6) arraymake (x, [i]);
(%o6)                         foo
                                 3
(%i7) ''%;
(%o7)                          cc

Categories:  Expressions · Arrays

関数: subvarp (expr)

もしexprが例えばa[i]のように添字された変数なら、trueを返します。

Categories:  Predicate functions

オプション変数: use_fast_arrays

デフォルト値: false

use_faset_arraystrueの時、 非宣言の配列と arrayが宣言した配列はプロパティでなく値であり、 非宣言の配列は Lispハッシュテーブルとして実装されます。

use_faset_arraysfalseの時、 非宣言の配列と arrayが宣言した配列はプロパティであり、 非宣言の配列は Maxima自身のハッシュテーブル実装で実装されます。

use_fast_arraysmake_arrayが生成した配列には影響しません。

translate_fast_arraysも参照してください。

Categories:  Arrays · Global flags

オプション変数: translate_fast_arrays

デフォルト値: false

translate_fast_arraystrueの時、 Maxima-to-Lispトランスレータが、 use_fast_arraystrueであるかのように 配列がプロパティでなく値であると仮定したコードを生成します。

translate_fast_arraysfalseの時、 Maxima-to-Lispトランスレータが、 use_fast_arraysfalseであるかのように 配列がプロパティであると仮定したコードを生成します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8 Structures


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8.1 Introduction to Structures

Maximaは構造体と呼ばれる簡単なデータ集合体を提供します。 構造体は 引数が名前(フィールド名)によって識別され、式全体が演算子(構造体名)によって識別される式です。 フィールド名は任意の式を取り得ます。

構造体はdefstruct関数によって定義されます; グローバル変数structuresはユーザー定義の構造体のリストです。 関数newは構造体のインスタンスを生成します。 @演算子はフィールドを参照します。 kill(S)は構造体定義Sを取り除き、 kill(x@ a)は 構造体インスタンスxのフィールドaをアンバインドします。

(display2dtrueで使う)プリティプリンティングのコンソール表示では、 構造体インスタンスは、 左辺側にフィールド名、右辺側に値の式として表されたそれぞれのフィールドの値と一緒に 表示されます。 (等式は単に表示物です; 値だけが実際に保存されます。) (grindを介してか、display2dfalseで使う)1次元表示では 構造体はフィールド名ないで表示されます。

フィールド値はラムダ式でありえますが、フィールド名を関数名として使う方法はありません。 フィールドの値はあるタイプに制約することもできません; 任意のフィールドにはどんな種類の式に割り当てることができます。 フィールドを、違った文脈でアクセス可能にしたり不可能する方法はありません; すべてのフィールドはいつも可視です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8.2 Functions and Variables for Structures

グローバル変数: structures

structuresdefstructで定義されたユーザー定義の構造体のリストです。

Categories:  Structures · Global variables

関数: defstruct  
    defstruct (S(a_1, …, a_n))  
    defstruct (S(a_1 = v_1, …, a_n = v_n))

構造体を定義します。 構造体はシンボルSと関連付けられた名前フィールドのリストa_1, …, a_nです。

構造体のインスタンスは演算子Sと正確にn個の引数を持つただの式です。 new(S)は構造体Sの新しいインスタンスを生成します。

ただのシンボルaである引数はフィールド名を指定します。 等式a = vである引数は フィールド名aとデフォルト値vを指定します。 デフォルト値は任意の式を取り得ます。

defstructは ユーザー定義の構造体のリストstructures上にSを入れます。

kill(S)は ユーザー定義の構造体のリストからSを取り除き、構造体定義を取り除きます。

例:

 
(%i1) defstruct (foo (a, b, c));
(%o1)                    [foo(a, b, c)]
(%i2) structures;
(%o2)                    [foo(a, b, c)]
(%i3) new (foo);
(%o3)                     foo(a, b, c)
(%i4) defstruct (bar (v, w, x = 123, y = %pi));
(%o4)             [bar(v, w, x = 123, y = %pi)]
(%i5) structures;
(%o5)      [foo(a, b, c), bar(v, w, x = 123, y = %pi)]
(%i6) new (bar);
(%o6)              bar(v, w, x = 123, y = %pi)
(%i7) kill (foo);
(%o7)                         done
(%i8) structures;
(%o8)             [bar(v, w, x = 123, y = %pi)]

Categories:  Structures

関数: new  
    new (S)  
    new (S (v_1, …, v_n))

newは構造体の新しいインスタンスを生成します。

new(S)は 構造体Sの新しいインスタンスを生成します。 それぞれのフィールドは、もしデフォルト値があればデフォルト値を割り当てられ、 もしデフォルト値が構造体定義で指定されなかったなら、割り当てなしになります。

new(S(v_1, ..., v_n))は フィールドが値v_1, …, v_nに割り当てられた 構造体Sの新しいインスタンスを生成します。

例:

 
(%i1) defstruct (foo (w, x = %e, y = 42, z));
(%o1)              [foo(w, x = %e, y = 42, z)]
(%i2) new (foo);
(%o2)               foo(w, x = %e, y = 42, z)
(%i3) new (foo (1, 2, 4, 8));
(%o3)            foo(w = 1, x = 2, y = 4, z = 8)

Categories:  Structures

演算子: @

@構造体フィールドアクセス演算子です。 式x@ aは 構造体インスタンスxのフィールドaの値を参照します。 フィールド名は評価されません。

もしxのフィールドaが値を割り当てられていないなら、 x@ aはそれ自身に評価されます。

kill(x@ a)xのフィールド値aを値を取り除きます。

例:

 
(%i1) defstruct (foo (x, y, z));
(%o1)                    [foo(x, y, z)]
(%i2) u : new (foo (123, a - b, %pi));
(%o2)           foo(x = 123, y = a - b, z = %pi)
(%i3) u@z;
(%o3)                          %pi
(%i4) u@z : %e;
(%o4)                          %e
(%i5) u;
(%o5)            foo(x = 123, y = a - b, z = %e)
(%i6) kill (u@z);
(%o6)                         done
(%i7) u;
(%o7)              foo(x = 123, y = a - b, z)
(%i8) u@z;
(%o8)                          u@z

フィールド名は評価されません。

 
(%i1) defstruct (bar (g, h));
(%o1)                      [bar(g, h)]
(%i2) x : new (bar);
(%o2)                       bar(g, h)
(%i3) x@h : 42;
(%o3)                          42
(%i4) h : 123;
(%o4)                          123
(%i5) x@h;
(%o5)                          42
(%i6) x@h : 19;
(%o6)                          19
(%i7) x;
(%o7)                    bar(g, h = 19)
(%i8) h;
(%o8)                          123

Categories:  Structures · Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 Introduction to Expressions

変数名として使えないたくさんの予約語があります。 これらを使うと不可解な構文法エラーの原因となります。

 
integrate            next           from                 diff
in                   at             limit                sum
for                  and            elseif               then
else                 do             or                   if
unless               product        while                thru
step

Maximaのほとんどのものは式です。 括弧で囲みコンマで区切ることで、式の列が構成できます。 これは C言語のコンマ式に似ています。

 
(%i1) x: 3$
(%i2) (x: x+1, x: x^2);
(%o2)                          16
(%i3) (if (x > 17) then 2 else 4);
(%o3)                           4
(%i4) (if (x > 17) then x: 2 else y: 4, y+x);
(%o4)                          20

Maximaではループでさえ式です。ループが返す値はあまり役に立たないdoneですけれども。

 
(%i1) y: (x: 1, for i from 1 thru 10 do (x: x*i))$
(%i2) y;
(%o2)                         done

ということなので、本当にしたいことはたぶん、コンマ式に 実際に値を返す3番目の項を含めることです。

 
(%i3) y: (x: 1, for i from 1 thru 10 do (x: x*i), x)$
(%i4) y;
(%o4)                        3628800


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 Nouns and Verbs

Maximaは「名詞(Noun)」演算子と「動詞(Verb)」演算子を区別します。 動詞は実行される演算子です。 名詞は式の中で実行されずシンボルとして現れる演算子です。 デフォルトでは関数名は動詞です。 関数名をクォートするか、nounify関数を適用することで、 動詞を名詞に変えることができます。 verbify関数を適用することで名詞を動詞に変えることができます。 評価フラグnounsevを式の中の名詞を評価するようにします。

動詞形は、対応するLispシンボル上では先頭のドル記号$で区別されます。 対照的に、 名詞形は、対応するLispシンボル上では先頭のパーセント記号%で区別されます。 'integrateや(diffが返す)'derivativeのように いくつかの名詞は特別な表示プロパティを持ちますが、ほとんどは特別な表示を持ちません。 デフォルトでは、表示の際、関数の名詞形も動詞形も同じです。 グローバルフラグnoundispを立てると、 Maximaは先頭にクォートマーク'をつけて名詞形を表示します。

noun, nouns, nounify, やverbifyも参照してください。

例:

 
(%i1) foo (x) := x^2;
                                     2
(%o1)                     foo(x) := x
(%i2) foo (42);
(%o2)                         1764
(%i3) 'foo (42);
(%o3)                        foo(42)
(%i4) 'foo (42), nouns;
(%o4)                         1764
(%i5) declare (bar, noun);
(%o5)                         done
(%i6) bar (x) := x/17;
                                    x
(%o6)                     bar(x) := --
                                    17
(%i7) bar (52);
(%o7)                        bar(52)
(%i8) bar (52), nouns;
(%o8)                        bar(52)
(%i9) integrate (1/x, x, 1, 42);
(%o9)                        log(42)
(%i10) 'integrate (1/x, x, 1, 42);
                             42
                            /
                            [   1
(%o10)                      I   - dx
                            ]   x
                            /
                             1
(%i11) ev (%, nouns);
(%o11)                       log(42)

Categories:  Evaluation · Nouns and verbs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 Identifiers

Maximaの識別子は、アルファベット文字と 0から9までの数詞と バックスラッシュ\文字に続く任意の特別文字で構成されます。

もしバックスラッシュが先行するなら、数詞は識別子の最初の文字となることができます。 2番目や後の文字の数詞はバックスラッシュが先行する必要はありません。

文字は declare関数によってアルファベットと宣言することができます。 もし宣言されたら、識別子の中でバックスラッシュで先行する必要はありません。 アルファベット文字は、AからZまで, aから zまで, %,と_が初期設定です。

Maximaは大文字小文字を区別します。 識別子foo, FOO, とFooは別の物です。 この点に関してLisp and Maximaを参照してください。

Maximaの識別子はドル記号$で始まるLispのシンボルです。 Maximaの中で現れる時、他の任意のLispシンボルはクエスチョンマーク?で始まります。 この点に関してLisp and Maximaを参照してください。

例:

 
(%i1) %an_ordinary_identifier42;
(%o1)               %an_ordinary_identifier42
(%i2) embedded\ spaces\ in\ an\ identifier;
(%o2)           embedded spaces in an identifier
(%i3) symbolp (%);
(%o3)                         true
(%i4) [foo+bar, foo\+bar];
(%o4)                 [foo + bar, foo+bar]
(%i5) [1729, \1729];
(%o5)                     [1729, 1729]
(%i6) [symbolp (foo\+bar), symbolp (\1729)];
(%o6)                     [true, true]
(%i7) [is (foo\+bar = foo+bar), is (\1729 = 1729)];
(%o7)                    [false, false]
(%i8) baz\~quux;
(%o8)                       baz~quux
(%i9) declare ("~", alphabetic);
(%o9)                         done
(%i10) baz~quux;
(%o10)                      baz~quux
(%i11) [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
(%o11)                [false, false, false]
(%i12) :lisp (defvar *my-lisp-variable* '$foo)
*MY-LISP-VARIABLE*
(%i12) ?\*my\-lisp\-variable\*;
(%o12)                         foo

Categories:  Syntax


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 Inequality

Maximaは不等式演算子<, <=, >=, >, #, notequalを持ちます。 条件式の記述に関しては、ifを参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.5 Functions and Variables for Expressions

関数: alias (new_name_1, old_name_1, …, new_name_n, old_name_n)

(利用者もしくはシステム)関数や変数、配列等に対して別名を与えます。 任意の偶数個の引数を取ります。

システム変数: aliases

デフォルト値: []

aliasesは、 (alias, ordergreat, orderless関数で設定されるか、 declareでアトムをnounに宣言することで設定される) ユーザー定義のエーリアスを持つ アトムのリストです。

キーワード: allbut

partコマンド(すなわち、part,inpart,substpart, substinpart,dpart, lpart)と共に動作します。例えば、

 
(%i1) expr : e + d + c + b + a;
(%o1)                   e + d + c + b + a
(%i2) part (expr, [2, 5]);
(%o2)                         d + a

一方、

 
(%i1) expr : e + d + c + b + a;
(%o1)                   e + d + c + b + a
(%i2) part (expr, allbut (2, 5));
(%o2)                       e + c + b

killallbutを認識します。

 
(%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
(%o1)                 [11, 22, 33, 44, 55]
(%i2) kill (allbut (cc, dd));
(%o0)                         done
(%i1) [aa, bb, cc, dd];
(%o1)                   [aa, bb, 33, 44]

kill(allbut(a_1, a_2, ...))は、 シンボルa_1, a_2, …をキルしないよう除外して kill(all)を実行します。

関数: args (expr)

exprの引数のリストを返します。 ここで exprはアトム以外のいかなる種類の式を取り得ます。 トップレベル演算子の引数だけが抽出されます; exprの部分式は、要素としてか引数のリストの要素の部分式として現れます。

リストの中の項目の順序はグローバルフラグinflagに依存するかもしれません。

args (expr)substpart ("[", expr, 0)と同値です。 substpartapply, funmake, opも参照してください。

行列を入れ子のリストに変換する方法:

 
(%i1) M:matrix([1,2],[3,4]);
                            [ 1  2 ]
(%o1)                       [      ]
                            [ 3  4 ]
(%i2) args(M);
(%o2)                   [[1, 2], [3, 4]]

maximaは n項の和を内部的に n個の引数の加算コマンドとして扱うので、 args()は和の項のリストを抽出できます:

 
(%i1) a+b+c;
(%o1)                       c + b + a
(%i2) args(%);
(%o2)                       [c, b, a]

Categories:  Expressions

関数: atom (expr)

もし exprがアトム(すなわち、数や名前や文字)なら true、そうでなければ falseを返します。 例えば、 atom(5)trueですが、 (a[1]xはバインドされていないと仮定して) atom(a[1])atom(sin(x))falseです。

Categories:  Expressions · Predicate functions

関数: box  
    box (expr)  
    box (expr, a)

枠で囲んだexprを返します。 返り値は、演算子としてboxを持ち引数としてexprを持つ式です。 display2dtrueの時、ディスプレイ上に枠が描かれます。

box (expr, a)は シンボルaでラベルされた枠でexprを囲みます。 もし枠の幅より長ければ、ラベルは切りつめられます。

boxは引数を評価します。 しかしながら、枠に入れられた式は中身に評価されないので、 枠に入れられた式は計算から効果的に除外されます。 remboxは再び枠を取り除きます。

boxcharは、box, dpart, lpart関数において 枠を描くのに使われる文字です。

rembox, dpart, lpartも参照してください。

例:

 
(%i1) box (a^2 + b^2);
                            """""""""
                            " 2    2"
(%o1)                       "b  + a "
                            """""""""
(%i2) a : 1234;
(%o2)                         1234
(%i3) b : c - d;
(%o3)                         c - d
(%i4) box (a^2 + b^2);
                      """"""""""""""""""""
                      "       2          "
(%o4)                 "(c - d)  + 1522756"
                      """"""""""""""""""""
(%i5) box (a^2 + b^2, term_1);
                      term_1""""""""""""""
                      "       2          "
(%o5)                 "(c - d)  + 1522756"
                      """"""""""""""""""""
(%i6) 1729 - box (1729);
                                 """"""
(%o6)                     1729 - "1729"
                                 """"""
(%i7) boxchar: "-";
(%o7)                           -
(%i8) box (sin(x) + cos(y));
                        -----------------
(%o8)                   -cos(y) + sin(x)-
                        -----------------

Categories:  Expressions

オプション変数: boxchar

デフォルト値: "

boxcharbox, dpart, lpart関数において 枠を描くのに使われる文字です。

式の中の枠すべては boxcharの現在値で描かれます; 描画文字は枠式に保存されていません。

Categories:  Expressions

関数: collapse (expr)

共通の(すなわち等しい)部分式すべてを共用する(すなわち、同じセルを使用する)ことで、 exprを縮約しスペースを節約します。 (collapseoptimizeコマンドによって使われるサブルーチンです。) 例えば,collapseをコールすることは saveファイルに積んだ後役に立つかもしれません。 collapse ([expr_1, ..., expr_n])を使うことでいくつかの式を 一緒に縮約できます。 同様に collapse (listarray ('A))を実行することで配列 Aの要素を縮約できます。

Categories:  Expressions

関数: copy (e)

Maxima式 eのコピーを返します。 eは任意の Maxima式ですが、コピー関数は eはリストか行列の時最も役に立ちます; 以下を考えてください:

 
(%i1) m : [1,[2,3]]$
(%i2) mm : m$
(%i3) mm[2][1] : x$
(%i4) m;
(%o4)                      [1, [x, 3]]
(%i5) mm;
(%o5)                      [1, [x, 3]]

同じ実験をしてみましょう。しかし今回 mmmのコピーとします。

 
(%i1) m : [1,[2,3]]$
(%i2) mm : copy(m)$
(%i3) mm[2][1] : x$
(%i4) m;
(%o4)                      [1, [2, 3]]
(%i5) mm;
(%o5)                      [1, [x, 3]]

今回、 mmへの割り当ては mの値を変えません。

Categories:  Expressions

関数: disolate (expr, x_1, …, x_n)

ユーザーに複数の変数を同時に隔離できるようにすることを除いて、 isolate (expr, x)に似ています。 例えば、もし多重積分の中で変数を変えようとしていて それが2つ以上の積分変数を含んだ変数変換なら、これは役立つかもしれません。 この関数は `simplification/disol.mac'から自動ロードされます。 demo("disol")$でデモが入手可能です。

Categories:  Expressions

関数: dispform  
    dispform (expr)  
    dispform (expr, all)

exprの外部表現を返します。

dispform(expr)は主(トップレベル)演算子に関して外部表現を返します。 dispform(expr, all)exprの中の演算子すべてに関して 外部表現を返します。

part, inpart, inflagも参照してください。

例:

- xの内部表現は「-1掛けるx」ですが、 外部表現は「マイナスx」です。

 
(%i1) - x;
(%o1)                          - x
(%i2) ?format (true, "~S~%", %);
((MTIMES SIMP) -1 $X)
(%o2)                         false
(%i3) dispform (- x);
(%o3)                          - x
(%i4) ?format (true, "~S~%", %);
((MMINUS SIMP) $X)
(%o4)                         false

sqrt(x)の内部表現は「xの1/2乗」ですが、 外部表現は「xの平方根」です。

 
(%i1) sqrt (x);
(%o1)                        sqrt(x)
(%i2) ?format (true, "~S~%", %);
((MEXPT SIMP) $X ((RAT SIMP) 1 2))
(%o2)                         false
(%i3) dispform (sqrt (x));
(%o3)                        sqrt(x)
(%i4) ?format (true, "~S~%", %);
((%SQRT SIMP) $X)
(%o4)                         false

オプション引数allの使用。

 
(%i1) expr : sin (sqrt (x));
(%o1)                     sin(sqrt(x))
(%i2) freeof (sqrt, expr);
(%o2)                         true
(%i3) freeof (sqrt, dispform (expr));
(%o3)                         true
(%i4) freeof (sqrt, dispform (expr, all));
(%o4)                         false

Categories:  Expressions

関数: dpart (expr, n_1, …, n_k)

partと同じ部分式を選択しますが、 その部分式を値として返すだけの代わりに 枠の中に表示されて選択された部分式を持つ式全体を返します。 枠は実際に式の一部です。

 
(%i1) dpart (x+y/z^2, 1, 2, 1);
                             y
(%o1)                       ---- + x
                               2
                            """
                            "z"
                            """

Categories:  Expressions

オプション変数: exptisolate

デフォルト値: false

exptisolatetrueの時、 isolate (expr, var)varを含む(%eのような)アトムの指数を検査します。

Categories:  Expressions

オプション変数: exptsubst

デフォルト値: false

exptsubsttrueの時、 %e^(a x)の中の%e^xyを代入するような代入を許します。

 
(%i1) %e^(a*x);
                                a x
(%o1)                         %e
(%i2) exptsubst;
(%o2)                         false
(%i3) subst(y, %e^x, %e^(a*x));
                                a x
(%o3)                         %e
(%i4) exptsubst: not exptsubst;
(%o4)                         true
(%i5) subst(y, %e^x, %e^(a*x));
                                a
(%o5)                          y

関数: freeof (x_1, …, x_n, expr)

もしx_1と等しいexprの部分式がないか、 x_1exprの中でダミー変数としてのみ現れるか、 x_1exprの中で任意の演算子の名詞形でも動詞形でもないなら、 freeof (x_1, expr)trueを返します。 そうでなければ falseを返します。

freeof (x_1, ..., x_n, expr)は、 freeof (x_1, expr)かつ、 ...かつfreeof (x_n, expr)と同値です。

引数x_1, …, x_n は、 関数や変数の名前、添字付き名前、(ダブルクォートでくくられた)演算子、もしくは一般式 を取り得ます。 freeofは引数を評価します。

freeofは(整理と評価の後)式そのままで expr上でのみ機能し、 ある同値の表現が違った結果を与えるかどうかを決定しようとはしません。 特に、整理は、同値ですがexprの原型とは違った要素を含む異なる式を生成するかもしれません。

もし式の外部にバインドを持たなければ、変数は式の中のダミー変数です。 freeofによって認識されたダミー変数は、 和や積のインデックス、limitの中の極限変数、 integrateの定積分形の中の積分変数、 laplaceの中のオリジナル変数、 at式の中の形式変数、 lambda式の中の引数です。

integrateの不定積分形は積分変数から自由ではありません

例:

引数は、関数、変数、添字付き名前、演算子、式の名前です。 freeof (a, b, expr)freeof (a, expr) and freeof (b, expr)と同値です。

 
(%i1) expr: z^3 * cos (a[1]) * b^(c+d);
                                 d + c  3
(%o1)                   cos(a ) b      z
                             1
(%i2) freeof (z, expr);
(%o2)                         false
(%i3) freeof (cos, expr);
(%o3)                         false
(%i4) freeof (a[1], expr);
(%o4)                         false
(%i5) freeof (cos (a[1]), expr);
(%o5)                         false
(%i6) freeof (b^(c+d), expr);
(%o6)                         false
(%i7) freeof ("^", expr);
(%o7)                         false
(%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
(%o8)                         true

freeofは引数を評価します。

 
(%i1) expr: (a+b)^5$
(%i2) c: a$
(%i3) freeof (c, expr);
(%o3)                         false

freeofは同値の式を考慮しません。 整理は、同値ですが異なる式を生成します。

 
(%i1) expr: (a+b)^5$
(%i2) expand (expr);
          5        4       2  3       3  2      4      5
(%o2)    b  + 5 a b  + 10 a  b  + 10 a  b  + 5 a  b + a
(%i3) freeof (a+b, %);
(%o3)                         true
(%i4) freeof (a+b, expr);
(%o4)                         false
(%i5) exp (x);
                                 x
(%o5)                          %e
(%i6) freeof (exp, exp (x));
(%o6)                         true

和や定積分はダミー変数から自由です。 不定積分は積分変数から自由ではありません。

 
(%i1) freeof (i, 'sum (f(i), i, 0, n));
(%o1)                         true
(%i2) freeof (x, 'integrate (x^2, x, 0, 1));
(%o2)                         true
(%i3) freeof (x, 'integrate (x^2, x));
(%o3)                         false

Categories:  Expressions

オプション変数: inflag

デフォルト値: false

inflagtrueの時、 部分抽出のための関数は exprの内部形式を検査します。

整理器は式を再順序付けすることに注意してください。 例えば、 もしinflagtrueなら first (x + y)xを返し、 もし inflagfalseなら yを返します。 (first (y + x)は同じ結果を与えます。)

また、inflagtrueに設定し partsubstpartをコールすることは、 inpartsubstinpartをコールすることと同じです。

inflagの設定に影響される関数は以下の通りです: part, substpart, first, rest, last, length, for ... in構成子, map, fullmap, maplist, reveal, pickapart

Categories:  Expressions

関数: inpart (expr, n_1, ..., n_k)

partに似ていますが、表示形式ではなく内部表現上で機能し、 フォーマットが実行されないのでより速いかもしれません。 (内部形式での変数の順序はしばしば表示形式でのそれと異なるので) 和や積の中の部分式の順序や、 (以下の演算子は式から取り除かれるので)単項マイナス、引き算、割り算を扱う際の部分式の順序 に関して注意が必要です。 part (x+y, 0)inpart (x+y, 0)+を返しますが、 演算子を参照するため、"で囲まれたものになります。 例えば、... if inpart (%o9,0) = "+" then ....

例:

 
(%i1) x + y + w*z;
(%o1)                      w z + y + x
(%i2) inpart (%, 3, 2);
(%o2)                           z
(%i3) part (%th (2), 1, 2);
(%o3)                           z
(%i4) 'limit (f(x)^g(x+1), x, 0, minus);
                                  g(x + 1)
(%o4)                 limit   f(x)
                      x -> 0-
(%i5) inpart (%, 1, 2);
(%o5)                       g(x + 1)

Categories:  Expressions

関数: isolate (expr, x)

xを含まない部分式を (%t1, %t2, ...のようなアトムシンボルの)中間式ラベルで置き換えた exprを返します。部分式は和の形を取ります。 興味のある変数を含まない部分式の不必要な展開を避けるのにしばしば役立ちます。 中間ラベルは部分式にバインドされるので、 それらが現れる式を評価すると、部分式をすべて代入し元に戻すことができます。

もしexptisolate (デフォルト値: false)がtrueなら、 isolatexを含むか、(%eのような)アトムの指数を検査します。

もしisolate_wrt_timestrueなら、 isolateは積に関しても隔離します。 isolate_wrt_timesを参照してください。 disolateも参照してください。

サンプルを見るには example (isolate)を実行してください。

Categories:  Expressions

オプション変数: isolate_wrt_times

デフォルト値: false

isolate_wrt_timestrueの時, isolateは積に関しても隔離します。 例えば、スイッチの両方の設定を比較すると、

 
(%i1) isolate_wrt_times: true$
(%i2) isolate (expand ((a+b+c)^2), c);

(%t2)                          2 a


(%t3)                          2 b

                          2            2
(%t4)                    b  + 2 a b + a

                     2
(%o4)               c  + %t3 c + %t2 c + %t4
(%i4) isolate_wrt_times: false$
(%i5) isolate (expand ((a+b+c)^2), c);
                     2
(%o5)               c  + 2 b c + 2 a c + %t4

Categories:  Expressions

オプション変数: listconstvars

デフォルト値: false

listconstvarstrueの時、 listofvarsが返すリストは %e, %pi, %iのような定数変数や exprの中に現れる定数として宣言された任意の変数を含みます。 変数はdeclareを介してconstant型として宣言されて、 constantpconstantとして宣言されたすべての変数に対して trueを返します。 デフォルトでは listofvarsの戻り値から定数変数を省略します。

Categories:  Expressions

オプション変数: listdummyvars

デフォルト値: true

listdummyvarsfalseの時、 式の中の「ダミー変数」は listofvarsが返すリストの中に含まれません。 (「ダミー変数」の意味はfreeofで与えられているものです。 「ダミー変数」は和や積のインデックスや、極限変数、定積分変数のように数学的なものです。)

例:

 
(%i1) listdummyvars: true$
(%i2) listofvars ('sum(f(i), i, 0, n));
(%o2)                        [i, n]
(%i3) listdummyvars: false$
(%i4) listofvars ('sum(f(i), i, 0, n));
(%o4)                          [n]

Categories:  Expressions

関数: listofvars (expr)

exprの中の変数のリストを返します。

listconstvarstrueの時、 もし %e, %pi, %iや 定数と宣言された任意の変数が exprの中で現れたなら、 listofvarsはそれらを戻り値のリストの中に含みます。 デフォルトはこれらを省略します。

変数のリストのなかの「ダミー変数」を除外したり含めたりするには、オプション変数 listdummyvarsも参照してください。

 
(%i1) listofvars (f (x[1]+y) / g^(2+a));
(%o1)                     [g, a, x , y]
                                  1

Categories:  Expressions

関数: lfreeof (list, expr)

listのそれぞれのメンバーmに関して、 freeof (m, expr)をコールします。 もしfreeofのコールのいずれかがfalseを返すなら、 falseを返し、そうでなければ trueを返します。

例:

 
(%i1) lfreeof ([ a, x], x^2+b);
(%o1)                         false
(%i2) lfreeof ([ b, x], x^2+b);
(%o2)                         false
(%i3) lfreeof ([ a, y], x^2+b);
(%o3)                         true

Categories:  Expressions

関数: lpart (label, expr, n_1, …, n_k)

dpartに似ていますが、ラベルされた枠を使います。 ラベルされた枠は dpartによって生成されたものに似ていますが、 トップラインの中での名前を持ちます。

Categories:  Expressions

プロパティ: mainvar

変数を mainvarに宣言することができます。 アトムに関する順序付けスケールは本質的に以下の通りです: 数 < 定数 (例えば、%e, %pi) < スカラー < 他の変数 < mainvars。 例えば、 expand ((X+Y)^4)(declare (x, mainvar), expand ((x+y)^4))と比較してください。 (注意: 上記の特長を使うことを決めたら注意が必要です。 例えば、もし、 mainvarであるxを含む式を mainvarでないxを含む式から引くなら、 もし打ち消しが起こるようにするには 例えばev (expr, simp)のような再整理が必要かもしれません。 また、mainvarであるxを含む式を保存するなら、 xもまた保存すべきです。)

宣言: noun

noundeclareコマンドのオプションの1つです。 関数を「名詞」に宣言するのに使います。 「名詞」は自動的には評価されないことを意味します。

例:

 
(%i1) factor (12345678);
                             2
(%o1)                     2 3  47 14593
(%i2) declare (factor, noun);
(%o2)                         done
(%i3) factor (12345678);
(%o3)                   factor(12345678)
(%i4) ''%, nouns;
                             2
(%o4)                     2 3  47 14593

Categories:  Nouns and verbs

オプション変数: noundisp

デフォルト値: false

noundisptrueの時、 名詞が単一クォートで表示されます。 このスイッチは、関数定義を表示する時には常にtrueです。

関数: nounify (f)

関数名fの名詞形を返します。 もし動詞関数の名前を名詞のように参照したいならこれが必要になります。 もしある引数に関して関数が評価されないなら、 いくつかの動詞関数は名詞形を返すことに注意してください。 これは、クォートに関数コールが続く時返される形式でもあります。

verbifyも参照してください。

Categories:  Nouns and verbs

関数: nterms (expr)

式が完全に展開されて項の打ち消しや結合が起こらないという仮定の下、 exprが持つ項の数を返します。 sin (expr), sqrt (expr), exp (expr), などのような式は、 exprが(もしそれが和なら) どんなにたくさんの項を持とうと1項と数えます。

Categories:  Expressions

関数: op (expr)

exprの主演算子を返します。 op (expr)part (expr, 0)と同値です。

もし主演算子が組み込みもしくはユーザー定義の前置、二項もしくはn項中置、後置、マッチフィックス、無項いずれかの演算子なら、 opは文字列を返します。 そうでなければ、 もしexprが添字付き関数式なら、 opは添字付き関数を返します; この場合、戻り値はアトムではありません。 それ意外の場合、 exprは配列関数もしくは通常の関数式であり、 opはシンボルを返します。

opはグローバルフラグ inflagの値を見ています。

opは引数を評価します。

argsも参照してください。

例:

 
(%i1) stringdisp: true$
(%i2) op (a * b * c);
(%o2)                          "*"
(%i3) op (a * b + c);
(%o3)                          "+"
(%i4) op ('sin (a + b));
(%o4)                          sin
(%i5) op (a!);
(%o5)                          "!"
(%i6) op (-a);
(%o6)                          "-"
(%i7) op ([a, b, c]);
(%o7)                          "["
(%i8) op ('(if a > b then c else d));
(%o8)                         "if"
(%i9) op ('foo (a));
(%o9)                          foo
(%i10) prefix (foo);
(%o10)                        "foo"
(%i11) op (foo a);
(%o11)                        "foo"
(%i12) op (F [x, y] (a, b, c));
(%o12)                        F
                               x, y
(%i13) op (G [u, v, w]);
(%o13)                          G

Categories:  Expressions · Operators

関数: operatorp  
    operatorp (expr, op)  
    operatorp (expr, [op_1, …, op_n])

もしopexprの演算子に等しければ、 operatorp (expr, op)trueを返します。

もしある要素op_1, ..., op_nexprに等しければ、 operatorp (expr, [op_1, …, op_n])trueを返します。

Categories:  Operators · Predicate functions

オプション変数: opsubst

デフォルト値: true

opsubstfalseの時、 substは式の中の演算子に代入を試みません。 例えば、 (opsubst: false, subst (x^2, r, r+r[0]))はうまくいきます。

 
(%i1) r+r[0];
(%o1)                        r + r
                                  0
(%i2) opsubst;
(%o2)                         true
(%i3) subst (x^2, r, r+r[0]);
                            2     2
(%o3)                      x  + (x )
                                    0
(%i4) opsubst: not opsubst;
(%o4)                         false
(%i5) subst (x^2, r, r+r[0]);
                              2
(%o5)                        x  + r
                                   0

Categories:  Expressions

関数: optimize (expr)

exprと同じ値と副作用を生成する式を返しますが、 共通の部分式の再計算を避けることによってより効率的に行います。 optimizeは、共通の部分式すべてが共用されるように引数を縮約する副作用も持ちます。 例を見るには、example (optimize)を実行してください。

Categories:  Expressions

オプション変数: optimprefix

デフォルト値: %

optimprefixoptimizeコマンドによって生成されたシンボルのために 使われる前置です。

Categories:  Expressions

関数: ordergreat (v_1, …, v_n)
関数: orderless (v_1, …, v_n)

ordergreatは、 v_1v_2に続き、v_2は、…, v_nに続き、 そしてv_nは 引数として言及されなかった他の任意のシンボルに続くというように、 Maximaの式の標準の順序付けを変えます。

orderlessは、 v_1v_2に先行し、v_2は、…, v_nに先行し、 そしてv_nは 引数として言及されなかった他の任意のシンボルに先行するというように、 Maximaの式の標準の順序付けを変えます。

ordergreatorderlessによって確立される順序は、 unorderによって解消されます。 ordergreatorderlessは、 unorderがコールされるまで、 それぞれ一度だけコールすることができます; ordergreatorderlessの最後のコールだけが効果を持ちます。

ordergreatpも参照してください。

Categories:  Expressions

関数: ordergreatp (expr_1, expr_2)
関数: orderlessp (expr_1, expr_2)

もしMaximaの式の標準の順序付けの中で、expr_1expr_2に続くなら、 ordergreatpは、trueを返し、 そうでなければ、falseを返します。

もしMaximaの式の標準の順序付けの中で、expr_1expr_2に先行するなら、 orderlesspは、trueを返し、 そうでなければ、falseを返します。

Maximaのアトムや式のすべては ordergreatporderlesspの下で比較可能です。これらの述語論理が推移的でないような式の孤立した例はあるけれども; それはバグです。

アトム(シンボル、数リテラル、文字列)の標準の順序付けは以下の通りです。

(整数と浮動小数点)は以下に先行 (多倍長浮動小数点)は以下に先行 (宣言された定数)は以下に先行 (文字列)は以下に先行 (宣言されたスカラー)は以下に先行 (orderlessの最初の引数)は以下に先行 …は以下に先行 (orderlessの最後の引数) は以下に先行 (他のシンボル) は以下に先行 (ordergreatの最後の引数)は以下に先行 …は以下に先行 (ordergreatの最初の引数)は以下に先行 (宣言されたメイン変数)

アトムでない式に関して、標準の順序付けはアトムの順序付けから演繹されます。 組み込みの+ * ^演算子に関しては、 順序付けは簡単にはまとめられません。 他の組み込み演算子と他の半数や演算子、式すべてに関しては、 (最初の引数から始めて)それらの引数によって順序付けされ、 それから演算子や関数の名前によって順序付けされます。 添字付き式の場合、 添字付きのシンボルは演算子と、添字は引数と考えられます。

式の標準の順序付けは、関数ordergreatorderlessと、 mainvar, constant, scalar宣言によって変更されます。

sortも参照してください。

例:

通常のシンボルや定数の順序付け。 %piは数値に従って順序付けされないことに注意してください。

 
(%i1) stringdisp : true;
(%o1)                         true
(%i2) sort ([%pi, 3b0, 3.0, x, X, "foo", 3, a, 4, "bar", 4.0, 4b0]);
(%o2) [3, 3.0, 4, 4.0, 3.0b0, 4.0b0, %pi, "bar", "foo", X, a, x]

ordergreatorderless関数の効果。

 
(%i1) sort ([M, H, K, T, E, W, G, A, P, J, S]);
(%o1)           [A, E, G, H, J, K, M, P, S, T, W]
(%i2) ordergreat (S, J);
(%o2)                         done
(%i3) orderless (M, H);
(%o3)                         done
(%i4) sort ([M, H, K, T, E, W, G, A, P, J, S]);
(%o4)           [M, H, A, E, G, K, P, T, W, J, S]

mainvar, constant, scalar宣言の効果

 
(%i1) sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
(%o1)   [A1, B1, C1, aa, bar, baz, bb, cc, dd, foo, quux]
(%i2) declare (aa, mainvar);
(%o2)                         done
(%i3) declare ([baz, quux], constant);
(%o3)                         done
(%i4) declare ([A1, B1], scalar);
(%o4)                         done
(%i5) sort ([aa, foo, bar, bb, baz, quux, cc, dd, A1, B1, C1]);
(%o5)   [baz, quux, A1, B1, C1, bar, bb, cc, dd, foo, aa]

アトムでない式の順序付け

 
(%i1) sort ([1, 2, n, f(1), f(2), f(2, 1), g(1), g(1, 2), g(n),
       f(n, 1)]);
(%o1) [1, 2, f(1), g(1), g(1, 2), f(2), f(2, 1), n, g(n),
                                                         f(n, 1)]
(%i2) sort ([foo(1), X[1], X[k], foo(k), 1, k]);
(%o2)            [1, X , foo(1), k, X , foo(k)]
                      1              k

Categories:  Expressions · Predicate functions

関数: part (expr, n_1, …, n_k)

exprの表示形式のパーツを返します。 exprの最初のパーツn_1、それから、パーツn_2などなど、 結果は、exprのパーツn_1のパーツn_2の, ...パーツn_kです。 もし添字が指定されないなら、exprを返します。

partはリストの要素や行列の行を得るのに使うことができます。

もしpart関数の最後の引数がインデックスのリストなら、 それぞれがリストのインデックスに対応するいくつかの部分式が抽出されます。 従って、part (x + y + z, [1, 3])z+xです。

part関数を使ったとき、 pieceは選択された最後の式を保持します。 それは関数の実行中にセットされ、以下で示すように関数自身の中で参照されることもあります。

もし partswitchtrueに設定されているなら、 式の選択されたパーツが存在しないとき endが返されます。 そうでなければ、エラーメッセージが出力されます。

inpart, substpart, substinpart, dpart, lpartも参照してください。

例:

 
(%i1) part(z+2*y+a,2);
(%o1)                          2 y
(%i2) part(z+2*y+a,[1,3]);
(%o2)                         z + a
(%i3) part(z+2*y+a,2,1);
(%o3)                           2

example (part)でさらに例を見ることができます。

Categories:  Expressions

関数: partition (expr, x)

2つの式のリストを返します。 それらは、 (式が積か和かリストに応じて) 一番目の要素は xを含まないexprの因子、exprの項、リストで、 二番目の要素は xを含む因子、項、リストです。

例:

 
(%i1) partition (2*a*x*f(x), x);
(%o1)                     [2 a, x f(x)]
(%i2) partition (a+b, x);
(%o2)                      [b + a, 0]
(%i3) partition ([a, b, f(a), c], a);
(%o3)                  [[b, c], [a, f(a)]]

Categories:  Expressions

オプション変数: partswitch

デフォルト値: false

partswitchtrueの場合、 式の選択された部分が存在しない時 endが返されます。 そうでない時はエラーメッセージが出力されます。

Categories:  Expressions

関数: pickapart (expr, n)

exprの 深さ nの部分式に中間式ラベルを割り当てます。 より大きなもしくは小さな深さでの部分式はラベルに割り当てられません。 pickapartは元の式exprと同値の中間式の項による式を返します。

part, dpart, lpart, inpart, revealも参照してください。

例:

 
(%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
                                          2
                                     sin(x )   b + a
(%o1)       - log(sqrt(x + 1) + 1) + ------- + -----
                                        3        2
(%i2) pickapart (expr, 0);
                                          2
                                     sin(x )   b + a
(%t2)       - log(sqrt(x + 1) + 1) + ------- + -----
                                        3        2
(%o2)                          %t2
(%i3) pickapart (expr, 1);

(%t3)                - log(sqrt(x + 1) + 1)


                                  2
                             sin(x )
(%t4)                        -------
                                3


                              b + a
(%t5)                         -----
                                2

(%o5)                    %t5 + %t4 + %t3
(%i5) pickapart (expr, 2);

(%t6)                 log(sqrt(x + 1) + 1)


                                  2
(%t7)                        sin(x )


(%t8)                         b + a

                         %t8   %t7
(%o8)                    --- + --- - %t6
                          2     3
(%i8) pickapart (expr, 3);

(%t9)                    sqrt(x + 1) + 1


                                2
(%t10)                         x

                  b + a              sin(%t10)
(%o10)            ----- - log(%t9) + ---------
                    2                    3
(%i10) pickapart (expr, 4);

(%t11)                     sqrt(x + 1)
                      2
                 sin(x )   b + a
(%o11)           ------- + ----- - log(%t11 + 1)
                    3        2
(%i11) pickapart (expr, 5);

(%t12)                        x + 1

                   2
              sin(x )   b + a
(%o12)        ------- + ----- - log(sqrt(%t12) + 1)
                 3        2
(%i12) pickapart (expr, 6);
                  2
             sin(x )   b + a
(%o12)       ------- + ----- - log(sqrt(x + 1) + 1)
                3        2

Categories:  Expressions

システム変数: piece

part関数を使った時m、選択された最後の式を返します。 関数の実行中に設定され、関数そのものの中で参照されることもあります。

Categories:  Expressions

関数: psubst  
    psubst (list, expr)  
    psubst (a, b, expr)

psubst(a, b, expr)substに似ています。 substを参照してください。

substとは違って、 もし最初の引数listが等式のリストなら 関数psubstは平行代入します。

並列代入するには sublisも参照してください。

例:

最初の例は psubstを使った平行代入を示します。 二番目の例は 関数substでの結果を示します。それは逐次代入します。

 
(%i1) psubst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o1)                    sin(b) + sin(a)
(%i2) subst ([a^2=b, b=a], sin(a^2) + sin(b));
(%o2)                       2 sin(a)

Categories:  Expressions

関数: rembox  
    rembox (expr, unlabelled)  
    rembox (expr, label)  
    rembox (expr)

exprから枠を取り除きます。

rembox (expr, unlabelled)exprからラベルされていない枠すべてを取り除きます。

rembox (expr, label)labelを運ぶ枠のみを取り除きます。

rembox (expr)は、ラベルされているか否か問わず 枠すべてを取り除きます。

枠は box, dpart, lpart関数によって描画されます。

例:

 
(%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
                                  a d - b c
(%o1)                sin(%pi x) + ---------
                                      2
                                     h
(%i2) dpart (dpart (expr, 1, 1), 2, 2);
dpart: fell off the end.
 -- an error. To debug this try: debugmode(true);
(%i3) expr2: lpart (BAR, lpart (FOO, %, 1), 2);
                                  BAR""""""""
                   FOO"""""""""   "a d - b c"
(%o3)              "sin(%pi x)" + "---------"
                   """"""""""""   "    2    "
                                  "   h     "
                                  """""""""""
(%i4) rembox (expr2, unlabelled);
                                  BAR""""""""
                   FOO"""""""""   "a d - b c"
(%o4)              "sin(%pi x)" + "---------"
                   """"""""""""   "    2    "
                                  "   h     "
                                  """""""""""
(%i5) rembox (expr2, FOO);
                                 BAR""""""""
                                 "a d - b c"
(%o5)               sin(%pi x) + "---------"
                                 "    2    "
                                 "   h     "
                                 """""""""""
(%i6) rembox (expr2, BAR);
                    FOO"""""""""   a d - b c
(%o6)               "sin(%pi x)" + ---------
                    """"""""""""       2
                                      h
(%i7) rembox (expr2);
                                  a d - b c
(%o7)                sin(%pi x) + ---------
                                      2
                                     h

Categories:  Expressions

関数: reveal (expr, depth)

指定された整数depthexprの部分を記述的な要約で置き換えます。

depthexprの最大深さ以上の時、 reveal (expr, depth)exprをそのまま返します。

revealは引数を評価します。 revealは要約された式を返します。

例:

 
(%i1) e: expand ((a - b)^2)/expand ((exp(a) + exp(b))^2);
                          2            2
                         b  - 2 a b + a
(%o1)               -------------------------
                        b + a     2 b     2 a
                    2 %e      + %e    + %e
(%i2) reveal (e, 1);
(%o2)                       Quotient
(%i3) reveal (e, 2);
                             Sum(3)
(%o3)                        ------
                             Sum(3)
(%i4) reveal (e, 3);
                     Expt + Negterm + Expt
(%o4)               ------------------------
                    Product(2) + Expt + Expt
(%i5) reveal (e, 4);
                       2                 2
                      b  - Product(3) + a
(%o5)         ------------------------------------
                         Product(2)     Product(2)
              2 Expt + %e           + %e
(%i6) reveal (e, 5);
                         2            2
                        b  - 2 a b + a
(%o6)              --------------------------
                       Sum(2)     2 b     2 a
                   2 %e       + %e    + %e
(%i7) reveal (e, 6);
                          2            2
                         b  - 2 a b + a
(%o7)               -------------------------
                        b + a     2 b     2 a
                    2 %e      + %e    + %e

Categories:  Expressions · Display functions

関数: sublis (list, expr)

式に対して多重平行代入を行います。 listは等式のリストです。 等式の左辺はアトムでなければいけません。

変数 sublis_apply_lambdasublisの後の式整理を制御します。

平行代入を行うには psubstも参照してください。

例:

 
(%i1) sublis ([a=b, b=a], sin(a) + cos(b));
(%o1)                    sin(b) + cos(a)

Categories:  Expressions

オプション変数: sublis_apply_lambda

デフォルト値: true

lambdaの代入が sublisを使った後の式整理の中で適用されるか 、もしくは代入が適用されるようにユーザーが evを実行しなければいけないかを決めます。 trueは式整理の中で適用されることを意味します。

Categories:  Expressions

オプション変数: subnumsimp

デフォルト値: false

もしtrueなら、シンボルfが与えられた時だけ、 関数substpsubstは添字付き変数f[x]に数を代入できます。

substも参照してください。

 
(%i1) subst(100,g,g[x]+2);

subst: cannot substitute 100 for operator g in expression g
                                                           x
 -- an error. To debug this try: debugmode(true);

(%i2) subst(100,g,g[x]+2),subnumsimp:true;
(%o2)                          102

Categories:  Expressions

関数: subst (a, b, c)

cの中の baを代入します。 bはアトムもしくは cの完全な部分式でなければなりません。 例えば、 x+y+z2*(x+y+z)の完全な部分式である一方、 x+yは完全な部分式ではありません。 bが前記の性質を持たない時は、 substpartratsubstが使える時があります(下記参照)。 代わりに、もしbe/f形式なら subst (a*f, e, c)が使えますし、 もしbe^(1/f)形式なら subst (a^f, e, c)が使えます。 substコマンドは x^-yの中の x^yも認識するので、 subst (a, sqrt(x), 1/sqrt(x))1/aを出力します。 abはダブルクォート "で囲まれた式の演算子でも 関数名でも問題ありません。 導関数形式の独立変数に代入したいなら at関数(下記参照)を使うべきです。

substsubstituteの別名です。

コマンドsubst (eq_1, expr)subst ([eq_1, ..., eq_k], expr)も許されている形式です。 eq_iは行う代入を指示する等式です。 それぞれの等式において、右辺が式 exprの中の左辺に代入されます。 等式は exprに左から右へ逐次に代入されます。 平行代入するには関数sublispsubstを参照してください。

exptsubsttrueなら、 %e^(a*x)の中の%e^xyに置き換えられるような代入が許されます。

opsubstfalseの時 substは式の演算子への代入を行いません。 例えば、(opsubst: false, subst (X^2, r, r+r[9]))は意図通り動作します。

at, ev, psubstも参照してください。

例:

 
(%i1) subst (a, x+y, x + (x+y)^2 + y);
                                    2
(%o1)                      y + x + a
(%i2) subst (-%i, %i, a + b*%i);
(%o2)                       a - %i b

代入は等式のリストに関して逐次になされます。 これを並列代入と比較してください。

 
(%i1) subst([a=b, b=c], a+b);
(%o1)                          2 c
(%i2) sublis([a=b, b=c], a+b);
(%o2)                         c + b

+- のような単一文字演算子を substで置き換えるには、引用符で括らなければいけません。 しかし、 a+b-cは内部的に a+b+(-1*c)と表現されている可能性があることに注意してください。

 
(%i3) subst(["+"="-"],a+b-c);
(%o3)                                 c-b+a

substatの違いを以下の例で見ることができます:

 
(%i1) g1:y(t)=a*x(t)+b*diff(x(t),t);
                            d
(%o1)             y(t) = b (-- (x(t))) + a x(t)
                            dt
(%i2) subst('diff(x(t),t)=1,g1);
(%o2)                   y(t) = a x(t) + b
(%i3) at(g1,'diff(x(t),t)=1);
                              !
                     d        !
(%o3)      y(t) = b (-- (x(t))!             ) + a x(t)
                     dt       !d
                              !-- (x(t)) = 1
                               dt

もっと例を見るには example (subst)を実行してください。

Categories:  Expressions

関数: substinpart (x, expr, n_1, ..., n_k)

substpartと同様ですが、 substinpartexprの内部表現上で働きます。

例:

 
(%i1) x . 'diff (f(x), x, 2);
                              2
                             d
(%o1)                   x . (--- (f(x)))
                               2
                             dx
(%i2) substinpart (d^2, %, 2);
                                  2
(%o2)                        x . d
(%i3) substinpart (f1, f[1](x + 1), 0);
(%o3)                       f1(x + 1)

もしpart関数の最後の引数がインデックスのリストなら、 複数の部分式が選ばれます。それぞれはリストのインデックスに対応します。 例えば、

 
(%i1) part (x + y + z, [1, 3]);
(%o1)                         z + x

part関数を使った時、 pieceは最後の式の値を保持します。 関数の実行の間に設定され、以下で示すように関数自身の中で参照されることもあります。 もしpartswitchtrueに設定されたら、 式の選択された部分が存在しない時にはendが返されます。 そうでなければ、エラーメッセージが出力されます。

 
(%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
              3         2       2            3
(%o1)     27 y  + 54 x y  + 36 x  y + y + 8 x  + x + 1
(%i2) part (expr, 2, [1, 3]);
                                  2
(%o2)                         54 y
(%i3) sqrt (piece/54);
(%o3)                        abs(y)
(%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
                               3
(%o4)               (3 y + 2 x)  + y + x + 1
(%i5) expr: 1/x + y/x - 1/z;
                             1    y   1
(%o5)                     (- -) + - + -
                             z    x   x
(%i6) substpart (xthru (piece), expr, [2, 3]);
                            y + 1   1
(%o6)                       ----- - -
                              x     z

また、 オプション inflagtrueに設定し partsubstpartをコールすることは、 inpartsubstinpartをコールすることと同じです。

Categories:  Expressions

関数: substpart (x, expr, n_1, …, n_k)

残りの引数をpartに食わせた結果の部分式に xを代入します。 exprの新しい値を返します。 xexprの演算子に代入される演算子でも問題ありません。 いくつかの場合、 xはダブルクォート "で囲まれる必要があります。 (例えば、substpart ("+", a*b, 0)b + aを返します。)

例:

 
(%i1) 1/(x^2 + 2);
                               1
(%o1)                        ------
                              2
                             x  + 2
(%i2) substpart (3/2, %, 2, 1, 2);
                               1
(%o2)                       --------
                             3/2
                            x    + 2
(%i3) a*x + f(b, y);
(%o3)                     a x + f(b, y)
(%i4) substpart ("+", %, 1, 0);
(%o4)                    x + f(b, y) + a

また、オプション inflagtrueに設定し partsubstpartをコールすることは、 inpartsubstinpartをコールすることと同じになります。

Categories:  Expressions

関数: symbolp (expr)

もし exprがシンボルなら true、そうでないなら falseを返します。 事実上、 symbolp(x)は述語論理 atom(x) and not numberp(x)と同値です。

Identifiersも参照してください。

Categories:  Predicate functions

関数: unorder ()

順序付けコマンドordergreatorderlessの最後の使用で生成されたエーリアシングを使用不可にします。 ordergreatorderlessは、 unorderを呼び出さずに、一回以上使えないかもしれません。 unorderは、 ordergreatorderlessで導入されたエーリアスに 元のシンボルを式に再代入しません。 それ故に、unorderの実行後、以前の式にエーリアスが現れます。

ordergreatorderlessも参照してください。

例s:

ordergreat(a)はシンボルaのエーリアスを導入します。 それ故に、 %o2%o4の違いは消えません。 unorderはシンボルaを再代入しないし、 出力%o7にエーリアスが現れます。

 
(%i1) unorder();
(%o1)                          []
(%i2) b*x + a^2;
                                   2
(%o2)                       b x + a
(%i3) ordergreat (a);
(%o3)                         done
(%i4) b*x + a^2;
 %th(1) - %th(3);
                             2
(%o4)                       a  + b x
(%i5) unorder();
                              2    2
(%o5)                        a  - a
(%i6) %th(2);
(%o6)                          [a]

Categories:  Expressions

関数: verbify (f)

関数名fの動詞形を返します。 verb, noun, nounifyも参照してください。

例:

 
(%i1) verbify ('foo);
(%o1)                          foo
(%i2) :lisp $%
$FOO
(%i2) nounify (foo);
(%o2)                          foo
(%i3) :lisp $%
%FOO

Categories:  Nouns and verbs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7. Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 Introduction to operators

指定された優先順位を持つ新しい演算子を定義したり、 既存の演算子を未定義にしたり、既存の演算子の優先順位を再定義することが可能です。 演算子には単項前置、単項後置、二項中置、n項中置、マッチフィックスか無項があります。 「マッチフィックス」は引数を括るシンボルの対を意味し、 「無項」は引数を取らない演算子を意味します。 異なるタイプの演算子の例として以下があります。

unary prefix

negation - a

unary postfix

factorial a!

binary infix

exponentiation a^b

n-ary infix

addition a + b

matchfix

list construction [a, b]

(組み込みの無項演算子はありません; そんな演算子の例は、nofixを参照してください。.)

新しい演算子を定義するメカニズムはわかりやすいものです。 関数を演算子として宣言することだけが必要です; 演算子関数は定義することもしないこともあります。

ユーザー定義の演算子の例は以下の通りです。 明示的な関数コール "dd" (a)dd aと同値であり、また、 "<-" (a, b)a <- bと同値であることに注意してください。 この例で、 "dd""<-"は未定義です。

 
(%i1) prefix ("dd");
(%o1)                          dd
(%i2) dd a;
(%o2)                         dd a
(%i3) "dd" (a);
(%o3)                         dd a
(%i4) infix ("<-");
(%o4)                          <-
(%i5) a <- dd b;
(%o5)                      a <- dd b
(%i6) "<-" (a, "dd" (b));
(%o6)                      a <- dd b

新しい演算子を定義するMaxima関数はこの表にまとめられます。 デフォルトの左と右の結合力(それぞれlbpとrbp)を記載します。 (結合力は演算子の優先順位を決めます。 しかしながら、左と右の結合力は異なることがあり、 結合力は優先順位より幾分複雑です。) 演算定義関数のいくつかは追加の引数を取ります; 詳細は関数記述を参照してください。

prefix

rbp=180

postfix

lbp=180

infix

lbp=180, rbp=180

nary

lbp=180, rbp=180

matchfix

(binding power not applicable)

nofix

(binding power not applicable)

比較のために、いくつかの組み込み演算子と左右結合力を上げます。

 
Operator   lbp     rbp

  :        180     20
  ::       180     20
  :=       180     20
  ::=      180     20
  !        160
  !!       160
  ^        140     139
  .        130     129
  *        120
  /        120     120
  +        100     100
  -        100     134
  =        80      80
  #        80      80
  >        80      80
  >=       80      80
  <        80      80
  <=       80      80
  not              70
  and      65
  or       60
  ,        10
  $        -1
  ;        -1

removekillは演算子プロパティをアトムから削除します。 remove ("a", op)aの演算子プロパティだけを削除します。 kill ("a")は 演算子プロパティを含むaのプロパティすべてを削除します。 演算子名はクォーテーションマークで括らないといけないことに注意してください。

 
(%i1) infix ("##");
(%o1)                          ##
(%i2) "##" (a, b) := a^b;
                                     b
(%o2)                     a ## b := a
(%i3) 5 ## 3;
(%o3)                          125
(%i4) remove ("##", op);
(%o4)                         done
(%i5) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
  ^
(%i5) "##" (5, 3);
(%o5)                          125
(%i6) infix ("##");
(%o6)                          ##
(%i7) 5 ## 3;
(%o7)                          125
(%i8) kill ("##");
(%o8)                         done
(%i9) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
  ^
(%i9) "##" (5, 3);
(%o9)                       ##(5, 3)

Categories:  Operators · Syntax


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 Arithmetic operators

演算子: +
演算子: -
演算子: *
演算子: /
演算子: ^

シンボル + * / ^はそれぞれ、 足し算、かけ算、割り算、べき乗を表します。 これらの演算子の名前は "+" "*" "/" "^"です。 これらは関数や演算子の名前が求められるところで使います。

シンボル +-はそれぞれ、プラスとマイナスの単項演算子を示し、 それらの名前はそれぞれ "+""-"です。

引き算 a - bはMaximaの中では足し算 a + (- b)として表されます。 a + (- b)のような式は引き算として表示されます。 Maximaは "-"を足し算の単項逆元演算子の名前としてのみ認識して、 二項引き算演算子としては認識しません。

Maximaの中では割り算a / bをかけ算a * b^(- 1)として表現します。 a * b^(- 1)のような式は割り算として表示されます。 Maximaは"/"を割り算演算子の名前として認識します。

足し算とかけ算はn項可換演算子です。 割り算とべき乗は二項の非可換演算子です。

Maximaは正準表現を構成するために可換演算子のオペランド(訳注:引数)を並べ替えます。 順序は内部的には orderlesspで決定します。 表示のためには、足し算の順序は ordergreatpで決定し、 かけ算は内部的な順序と同じです。

算術計算は数リテラル(整数、有理数、通常の浮動小数点、多倍長浮動小数点)上で実行されます。 べき乗を除いて、数に対するすべての算術演算子は数に整理されます。 べき乗は、オペランドが通常の浮動小数点か多倍長浮動小数点の時か結果が厳密に整数もしくは有理数の時、数に整理されます; そうでなければ、べき乗は sqrtか他のべき乗に整理されるかそのまま残されます。

浮動小数点の伝搬が算術計算に適用されます: もしどれか1つでもオペランドが多倍長浮動小数点なら、結果は多倍長浮動小数点です; そうでなければ、もしどれか1つでもオペランドが通常の浮動小数点なら、結果は通常の浮動小数点です; そうでなければオペランドは有理数か整数であり、結果は有理数か整数です。

算術計算は式整理であって評価ではありません。 従って、クォートされた(しかし整理される)式の中で算術計算は実行されます。

算術演算は、 グローバルフラグ listarithtrueの時 リストに対して要素毎に適用され、 行列に対しては常に要素毎に適用されます。 オペランドの1つがリストか行列であり、もう1つのオペランドが別のタイプの時、 他のオペランドはリストか行列の要素のそれぞれに組み合わされます。

例:

足し算とかけ算はn項可換演算子です。 Maximaは、正準表現を構成するために可換演算子のオペランドを並べ替えます。 それらの名前はそれぞれ "+""*"です。

 
(%i1) c + g + d + a + b + e + f;
(%o1)               g + f + e + d + c + b + a
(%i2) [op (%), args (%)];
(%o2)              [+, [g, f, e, d, c, b, a]]
(%i3) c * g * d * a * b * e * f;
(%o3)                     a b c d e f g
(%i4) [op (%), args (%)];
(%o4)              [*, [a, b, c, d, e, f, g]]
(%i5) apply ("+", [a, 8, x, 2, 9, x, x, a]);
(%o5)                    3 x + 2 a + 19
(%i6) apply ("*", [a, 8, x, 2, 9, x, x, a]);
                                 2  3
(%o6)                       144 a  x

割り算とべき乗は、二項の非可換演算子です。 それらの名前はそれぞれ "/""^"です。

 
(%i1) [a / b, a ^ b];
                              a   b
(%o1)                        [-, a ]
                              b
(%i2) [map (op, %), map (args, %)];
(%o2)              [[/, ^], [[a, b], [a, b]]]
(%i3) [apply ("/", [a, b]), apply ("^", [a, b])];
                              a   b
(%o3)                        [-, a ]
                              b

引き算と割り算は内部的にはそれぞれ、足し算とかけ算を使って表現されます。

 
(%i1) [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
(%o1)                      [+, a, - b]
(%i2) [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
                                   1
(%o2)                       [*, a, -]
                                   b

計算は数リテラルに対して実行されます。 浮動小数点伝搬が適用されます。

 
(%i1) 17 + b - (1/2)*29 + 11^(2/4);
                                       5
(%o1)                   b + sqrt(11) + -
                                       2
(%i2) [17 + 29, 17 + 29.0, 17 + 29b0];
(%o2)                   [46, 46.0, 4.6b1]

算術計算は式整理であって、評価ではありません。

 
(%i1) simp : false;
(%o1)                         false
(%i2) '(17 + 29*11/7 - 5^3);
                              29 11    3
(%o2)                    17 + ----- - 5
                                7
(%i3) simp : true;
(%o3)                         true
(%i4) '(17 + 29*11/7 - 5^3);
                                437
(%o4)                         - ---
                                 7

算術計算は(listarithに依存して)リストや行列に対して要素毎に実行されます。

 
(%i1) matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
                        [ a - 1  x - 2 ]
(%o1)                   [              ]
                        [ h - 3  u - 4 ]
(%i2) 5 * matrix ([a, x], [h, u]);

                          [ 5 a  5 x ]
(%o2)                     [          ]
                          [ 5 h  5 u ]
(%i3) listarith : false;
(%o3)                         false
(%i4) [a, c, m, t] / [1, 7, 2, 9];
                          [a, c, m, t]
(%o4)                     ------------
                          [1, 7, 2, 9]
(%i5) [a, c, m, t] ^ x;
                                      x
(%o5)                     [a, c, m, t]
(%i6) listarith : true;
(%o6)                         true
(%i7) [a, c, m, t] / [1, 7, 2, 9];
                              c  m  t
(%o7)                     [a, -, -, -]
                              7  2  9
(%i8) [a, c, m, t] ^ x;
                          x   x   x   x
(%o8)                   [a , c , m , t ]

Categories:  Operators

演算子: **

べき乗演算子。 Maximaは入力の中で **^と同じ演算子と認識し、 1次元出力の中では ^として表示し、 また、2次元出力の中では指数を上付き添字として配置します。

fortran関数は、入力が **でも ^でも べき乗演算子を **として表示します。

例:

 
(%i1) is (a**b = a^b);
(%o1)                         true
(%i2) x**y + x^z;
                              z    y
(%o2)                        x  + x
(%i3) string (x**y + x^z);
(%o3)                        x^z+x^y
(%i4) fortran (x**y + x^z);
      x**z+x**y
(%o4)                         done

Categories:  Operators

演算子: ^^

非可換べき乗演算子。 ちょうど可換なかけ算 *に通常のべき乗演算子 ^が対応するように、 ^^は非可換かけ算 .に対応するべき乗演算子です。

非可換べき乗演算子は、1次元出力では ^^で表示され、 2次元出力では指数をかっこ < >で囲まれた上付き添字として置きます。

例:

 
(%i1) a . a . b . b . b + a * a * a * b * b;
                        3  2    <2>    <3>
(%o1)                  a  b  + a    . b
(%i2) string (a . a . b . b . b + a * a * a * b * b);
(%o2)                  a^3*b^2+a^^2 . b^^3

Categories:  Operators

演算子: .

行列(非可換)かけ算のためのドット演算子。 "."をこの意味で用いる時、 例えば A . Bのように両側にスペースを置かなければいけません。 これで浮動小数点の小数点と区別します。

Dotdot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules, dotdistrib, dotexptsimp, dotident, dotscrules. も参照してください。

Categories:  Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.3 Relational operators

演算子: <
演算子: <=
演算子: >=
演算子: >

シンボル < <= >= >はそれぞれ、小なり、以下、以上、大なり を表します。 これらの演算子の名前は、 "<""<="">="">"です。 それらは関数や演算子の名前が求められるところで使われます。

これらの関係演算子はすべて二項演算子です; a < b < cのような構成をMaximaは認識しません。

関数 ismaybe、 プログラミング構成子 if, while, unlessが 関係式をブーリアン値に評価します。 そうでなければ、関係式はブーリアン値に評価されたり整理されたりしませんが、 関係式の引数は(評価がクォーテーションによって妨げられないかぎり)評価されます。

関係式が trueもしくは falseに評価できない時、 isifの振る舞いはグローバルフラグ prederrorが決定します。 prederrortrueの時 isifはエラーをトリガーします。 prederrorfalseの時、 isunknownを返し、 ifは部分的に評価された条件式を返します。

maybeはいつも prederrorfalseであるかのように振る舞い、 whileunlessはいつも prederrortrueであるかのように振る舞います。

関係演算子はリストやほかの集合上で展開されることはありません。

=#equalnotequalも参照してください。

例:

いくつかの関数やプログラミング構成子が関係式をブーリアン値に評価します。

 
(%i1) [x, y, z] : [123, 456, 789];
(%o1)                    [123, 456, 789]
(%i2) is (x < y);
(%o2)                         true
(%i3) maybe (y > z);
(%o3)                         false
(%i4) if x >= z then 1 else 0;
(%o4)                           0
(%i5) block ([S], S : 0, for i:1 while i <= 100 do S : S + i,
             return (S));
(%o5)                         5050

そうでなければ関係式はブーリアン値に評価されたり整理されたりしませんが、 関係式の引数は評価されます。

 
(%o1)                    [123, 456, 789]
(%i2) [x < y, y <= z, z >= y, y > z];
(%o2)    [123 < 456, 456 <= 789, 789 >= 456, 456 > 789]
(%i3) map (is, %);
(%o3)               [true, true, true, false]

Categories:  Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 Logical operators

演算子: and

論理積演算子。 andは、n項中置演算子です; オペランドはブーリアン値で、結果もブーリアン値です。

andは( isのように)1つ以上のオペランドの評価を強制し、 すべてのオペランドの評価を強制するかもしれません。

オペランドは出現順に評価されます。 andは結果を決定するのに必要なだけオペランドを評価します。 もし任意のオペランドがfalseなら、結果はfalseであり、 ほかのオペランドは評価されません。

グローバルフラグprederrorは、 評価されたオペランドがtruefalseに決定できない時のandの振る舞いを決定します。 prederrortrueの時、andはエラーメッセージを出力します。 そうでなければ、 truefalseに評価されないオペランドを受け付け、 結果はブーリアン式になります。

andは可換ではありません: a and bは、不定のオペランドの扱いのため、b and aと同値ではないかもしれません。

Categories:  Operators

演算子: not

論理否定演算子。 notは、接頭演算子です; オペランドはブーリアン値で、結果もブーリアン値です。

orは( isのように)オペランドの評価を強制します。

グローバルフラグ prederrorは、 評価されたオペランドが truefalseに決定できない時の notの振る舞いを決定します。 prederrortrueの時、notはエラーメッセージを出力します。 そうでなければ、truefalseに評価されないオペランドを受け付け、 結果はブーリアン式になります。

Categories:  Operators

演算子: or

論理和演算子。 orは、n項中置演算子です; オペランドはブーリアン値で、結果もブーリアン値です。

orは、(isのように)1以上のオペランドの評価を強制し、 すべてのオペランドの評価を強制するかもしれません。

オペランドは、出現順に評価されます。 andは、結果を決定するのに必要なだけオペランドを評価します。 もし任意のオペランドがtrueなら、結果はtrueであり、 ほかのオペランドは評価されません。

グローバルフラグprederrorは、 評価されたオペランドがtruefalseに決定できない時のorの振る舞いを決定します。 prederrortrueの時、orは、エラーメッセージを出力します。 そうでなければ、truefalseに評価されないオペランドを受け付け、 結果はブーリアン式になります。

orは可換ではありません: a or bは、不定のオペランドの扱いのため、b or aと同値ではないかもしれません。

Categories:  Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.5 Operators for Equations

演算子: #

構文的等号=の否定を表します。

述語論理式の評価のルールのため (特に not exprexprの評価を伴うので)、 not a = ba # bではなく、 is(a # b)と同値です。

例:

 
(%i1) a = b;
(%o1)                         a = b
(%i2) is (a = b);
(%o2)                         false
(%i3) a # b;
(%o3)                         a # b
(%i4) not a = b;
(%o4)                         true
(%i5) is (a # b);
(%o5)                         true
(%i6) is (not a = b);
(%o6)                         true

Categories:  Operators

演算子: =

等式演算子。

a = bはそれ自身未評価の等式を表します。 等式は成り立つかもしれませんし、成り立たないかもしれません。 未評価の等式は solvealgsysや他の関数の引数として用いられます。

関数is=をブーリアン値に評価します。 abが同一の時、is(a = b)a = btrueに評価します。 すなわち、abが同一のアトムであるか、もしくは、それらはアトムではなく、 それらの演算子が同一で、演算子の引数が同一です。 そうでなければ、is(a = b)falseに評価されます; 決して unknownには評価されません。 is(a = b)trueの時、 abは、同値の式と対照的に、構文法的に等しいと言われます。 同値の式は is(equal(a, b))trueの式です。 式は 同値だが構文法的に等しくないことが起こりえます。

=の否定は #で表されます。 =と同様、式a # bは、それ自身評価されません。 is(a # b)a # btruefalseに評価します。

isに加えて、if, and, or, not=#truefalseに評価します。

述語論理式の評価規則のため (特に、not exprexprの評価を起こすため)、 not a = bは、a # bではなく、 is(a # b)と同値になります。

rhslhsはそれぞれ、等式、不等式の右辺と左辺を返します。

equalnotequalも参照してください。

例:

a = bはそれ自身未評価の等式であり、 成り立つことも成り立たないこともあります。

 
(%i1) eq_1 : a * x - 5 * y = 17;
(%o1)                    a x - 5 y = 17
(%i2) eq_2 : b * x + 3 * y = 29;
(%o2)                    3 y + b x = 29
(%i3) solve ([eq_1, eq_2], [x, y]);
                        196         29 a - 17 b
(%o3)          [[x = ---------, y = -----------]]
                     5 b + 3 a       5 b + 3 a
(%i4) subst (%, [eq_1, eq_2]);
         196 a     5 (29 a - 17 b)
(%o4) [--------- - --------------- = 17,
       5 b + 3 a      5 b + 3 a
                                  196 b     3 (29 a - 17 b)
                                --------- + --------------- = 29]
                                5 b + 3 a      5 b + 3 a
(%i5) ratsimp (%);
(%o5)                  [17 = 17, 29 = 29]

abが構文法的に等しい(すなわち、同一の)時 is(a = b)a = btrueに評価します。 式は同値だけれども構文法的に等しくないことがありえます。

 
(%i1) a : (x + 1) * (x - 1);
(%o1)                    (x - 1) (x + 1)
(%i2) b : x^2 - 1;
                              2
(%o2)                        x  - 1
(%i3) [is (a = b), is (a # b)];
(%o3)                     [false, true]
(%i4) [is (equal (a, b)), is (notequal (a, b))];
(%o4)                     [true, false]

いくつかの演算子は =#truefalseに評価します。

 
(%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
      BAR;
(%o1)                          FOO
(%i2) eq_3 : 2 * x = 3 * x;
(%o2)                       2 x = 3 x
(%i3) eq_4 : exp (2) = %e^2;
                              2     2
(%o3)                       %e  = %e
(%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
(%o4)                  [false, true, true]

not exprexprの評価をするので、 not a = bis(a # b)と同値です。

 
(%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
(%o1)                   [2 x # 3 x, true]
(%i2) is (2 * x # 3 * x);
(%o2)                         true

Categories:  Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.6 Assignment operators

演算子: :

割り当て演算子。

左辺が(添字のない)単純変数の時、 :は右辺を評価しその値を左辺に関連づけます。

左辺がリストや行列、宣言されたMaxima配列、Lisp配列の添字指定された要素の時、 右辺がその要素に割り当てられます。 添字は存在している要素を示していなければなりません; 先に列挙した対象は存在していない要素を名付けることで拡張することはできません。

左辺が未宣言のMaxima配列の添字指定された要素の時、 もし既に存在しているなら右辺はその要素に割り当てられ、 もしまだ存在していなければ新しい要素が確保されます。

左辺が単純変数や添字あり変数のリストの時、 右辺はリストに評価されなければなりません。 そして右辺の要素が左辺の要素に平行に割り当てられます。

killremvalueも参照してください。 それらは左辺とその値の関連を取り消します。

例:

単純変数への割り当て

 
(%i1) a;
(%o1)                           a
(%i2) a : 123;
(%o2)                          123
(%i3) a;
(%o3)                          123

リストの要素への割り当て

 
(%i1) b : [1, 2, 3];
(%o1)                       [1, 2, 3]
(%i2) b[3] : 456;
(%o2)                          456
(%i3) b;
(%o3)                      [1, 2, 456]

割り当ては未宣言配列を生成する。

 
(%i1) c[99] : 789;
(%o1)                          789
(%i2) c[99];
(%o2)                          789
(%i3) c;
(%o3)                           c
(%i4) arrayinfo (c);
(%o4)                   [hashed, 1, [99]]
(%i5) listarray (c);
(%o5)                         [789]

多重割り当て

 
(%i1) [a, b, c] : [45, 67, 89];
(%o1)                     [45, 67, 89]
(%i2) a;
(%o2)                          45
(%i3) b;
(%o3)                          67
(%i4) c;
(%o4)                          89

多重割り当ては平行に実行されます。 この例ではabの値が置換されます。

 
(%i1) [a, b] : [33, 55];
(%o1)                       [33, 55]
(%i2) [a, b] : [b, a];
(%o2)                       [55, 33]
(%i3) a;
(%o3)                          55
(%i4) b;
(%o4)                          33

Categories:  Evaluation · Operators

演算子: ::

割り当て演算子。

::は、右辺はもちろん左辺も評価することを除いて :と同じです。

例:

 
(%i1) x : 'foo;
(%o1)                          foo
(%i2) x :: 123;
(%o2)                          123
(%i3) foo;
(%o3)                          123
(%i4) x : '[a, b, c];
(%o4)                       [a, b, c]
(%i5) x :: [11, 22, 33];
(%o5)                     [11, 22, 33]
(%i6) a;
(%o6)                          11
(%i7) b;
(%o7)                          22
(%i8) c;
(%o8)                          33

Categories:  Evaluation · Operators

演算子: ::=

マクロ関数定義の演算子。 ::=は、引数をクォートする関数(歴史的理由によりマクロと呼ばれる)を定義します。 そして、それが返す式(マクロ展開と呼ばれる)はマクロが呼ばれた文脈の中で評価されます。 それ以外はマクロ関数は通常の関数と同じです。

macroexpandは(評価せずに)マクロ展開を返します。 fooがマクロ関数の時、 macroexpand (foo (x))に続けて ``%を実行すると、 それは foo (x)と同値です。

::=は新しいマクロ関数の名前をグローバルリスト macrosに追加します。 killremove, remfunctionはマクロ関数定義をアンバインドし、 macrosから名前を削除します。

fundefdispfunはそれぞれマクロ関数定義を返し、 それをラベルに割り当てます。

評価対象となる式を構成するために、 マクロ関数は一般的にbuildq, splice式を含みます。

マクロ関数は引数をクォートします。 だから、メッセージ(1)は y - zの値ではなく、 y - zを示します。 マクロ展開(クォートされた式 '(print ("(2) x is equal to", x))は、 マクロが呼ばれた文脈(表示メッセージ(2))の中で評価されます。

 
(%i1) x: %pi$
(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) printq1 (x) ::= block (print ("(1) x is equal to", x),
      '(print ("(2) x is equal to", x)))$
(%i5) printq1 (y - z);
(1) x is equal to y - z
(2) x is equal to %pi
(%o5)                                 %pi

通常の関数は引数を評価します。だから、メッセージ(1)は y - zの値を示します。 戻り値は評価されず、従って、メッセージ(2)は ``%で陽に評価されるまで出力されません。

 
(%i1) x: %pi$
(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) printe1 (x) := block (print ("(1) x is equal to", x),
      '(print ("(2) x is equal to", x)))$
(%i5) printe1 (y - z);
(1) x is equal to 1234 - 1729 w
(%o5)                     print((2) x is equal to, x)
(%i6) ''%;
(2) x is equal to %pi
(%o6)                                 %pi

macroexpandはマクロ展開を返します。 fooがマクロ関数の時、 macroexpand (foo (x))の後 ``%を実行すると、foo (x)と同値です。

 
(%i1) x: %pi$
(%i2) y: 1234$
(%i3) z: 1729 * w$
(%i4) g (x) ::= buildq ([x], print ("x is equal to", x))$
(%i5) macroexpand (g (y - z));
(%o5)                     print(x is equal to, y - z)
(%i6) ''%;
x is equal to 1234 - 1729 w
(%o6)                            1234 - 1729 w
(%i7) g (y - z);
x is equal to 1234 - 1729 w
(%o7)                            1234 - 1729 w

Categories:  Function definition · Operators

演算子: :=

関数定義の演算子。

f(x_1, .., x_n) := exprは、 引数がx_1, ..., x_nで関数本体がexprの、fという名前の関数を定義します。 :=は(クォートクォート``で陽に評価されない限り)関数本体は評価しません。 関数本体は関数がコールされる度に評価されます。

f[x_1, ..., x_n] := exprは配列関数と呼ばれるものを定義します。 その関数本体はそれぞれ別個の引数に関して一度だけ評価されます。 そして引数が再度それらの値をとる時にはいつでも関数本体は評価されることなく値が返されます。 (この種の関数は一般に「メモ化関数」として知られています。)

f[x_1, ..., x_n](y_1, ..., y_m) := expr は配列関数の特殊ケースです。 f[x_1, ..., x_n]は、引数y_1, ..., y_mを伴ったラムダ式を返す配列関数です。 関数本体は x_1, ..., x_nのそれぞれ別個の値に関して一度だけ評価されて、 ラムダ式の本体はその値です。

最後の引数x_nが要素1つのリストの時、:=で定義された関数は可変の数の引数をとります。 実際の引数は、形式的な引数x_1, …, x_(n - 1)に一対一に割り当てられ、 さらに引数があれば、x_nにリストとして割り当てられます。

関数定義すべては、同じ名前空間を使います; 別の関数gの中で関数fを定義することは、fのスコープをgに限定しません。 しかし、local(f)は、関数fの定義をlocalが現れたブロックや他の合成式内に限定します。

もしある形式引数x_kがクォートされたシンボルなら、:=で定義された関数は対応する実際の引数を評価しません。 それ以外の場合、実際の引数はすべて評価されます。

define::=も参照してください。

例:

:=は(クォートクォートで陽に評価されない限り)関数本体を評価しません。

 
(%i1) expr : cos(y) - sin(x);
(%o1)                    cos(y) - sin(x)
(%i2) F1 (x, y) := expr;
(%o2)                   F1(x, y) := expr
(%i3) F1 (a, b);
(%o3)                    cos(y) - sin(x)
(%i4) F2 (x, y) := ''expr;
(%o4)              F2(x, y) := cos(y) - sin(x)
(%i5) F2 (a, b);
(%o5)                    cos(b) - sin(a)

f(x_1, ..., x_n) := ... は通常の関数を定義します。

 
(%i1) G1(x, y) := (print ("Evaluating G1 for x=", x, "and y=", y), x.y - y.x);
(%o1) G1(x, y) := (print("Evaluating G1 for x=", x, "and y=",
                                               y), x . y - y . x)
(%i2) G1([1, a], [2, b]);
Evaluating G1 for x= [1, a] and y= [2, b]
(%o2)                           0
(%i3) G1([1, a], [2, b]);
Evaluating G1 for x= [1, a] and y= [2, b]
(%o3)                           0

f[x_1, ..., x_n] := ... は配列関数を定義します。

 
(%i1) G2[a] := (print ("Evaluating G2 for a=", a), a^2);
                                                     2
(%o1)     G2  := (print("Evaluating G2 for a=", a), a )
            a
(%i2) G2[1234];
Evaluating G2 for a= 1234
(%o2)                        1522756
(%i3) G2[1234];
(%o3)                        1522756
(%i4) G2[2345];
Evaluating G2 for a= 2345
(%o4)                        5499025
(%i5) arrayinfo (G2);
(%o5)              [hashed, 1, [1234], [2345]]
(%i6) listarray (G2);
(%o6)                  [1522756, 5499025]

f[x_1, ..., x_n](y_1, ..., y_m) := expr は配列関数の特殊ケースです。

 
(%i1) G3[n](x) := (print ("Evaluating G3 for n=", n), diff (sin(x)^2, x, n));
(%o1) G3 (x) := (print("Evaluating G3 for n=", n),
        n
                                                     2
                                             diff(sin (x), x, n))
(%i2) G3[2];
Evaluating G3 for n= 2
                                2           2
(%o2)          lambda([x], 2 cos (x) - 2 sin (x))
(%i3) G3[2];
                                2           2
(%o3)          lambda([x], 2 cos (x) - 2 sin (x))
(%i4) G3[2](1);
                           2           2
(%o4)                 2 cos (1) - 2 sin (1)
(%i5) arrayinfo (G3);
(%o5)                   [hashed, 1, [2]]
(%i6) listarray (G3);
                                2           2
(%o6)         [lambda([x], 2 cos (x) - 2 sin (x))]

最後の引数x_nが要素1つのリストの時、 :=で定義された関数は可変の数の引数を取ります。

 
(%i1) H ([L]) := apply ("+", L);
(%o1)                H([L]) := apply("+", L)
(%i2) H (a, b, c);
(%o2)                       c + b + a

localはローカル関数定義を可能にします。

 
(%i1) foo (x) := 1 - x;
(%o1)                    foo(x) := 1 - x
(%i2) foo (100);
(%o2)                         - 99
(%i3) block (local (foo), foo (x) := 2 * x, foo (100));
(%o3)                          200
(%i4) foo (100);
(%o4)                         - 99

Categories:  Function definition · Operators


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.7 User defined operators

関数: infix  
    infix (op)  
    infix (op, lbp, rbp)  
    infix (op, lbp, rbp, lpos, rpos, pos)

opを中置演算子に宣言します。 中置演算子は2つの引数の関数で、引数の間に関数名が来ます。 例えば、引き算演算子-は中置演算子です。

infix (op)は、デフォルトの結合力(左右両方とも180)と品詞 (左右両方ともany)に等しい)でopを中置演算子に宣言します。

infix (op, lbp, rbp)は、 記述された左右の結合力 とデフォルトの品詞(左右両方ともany)に等しい)で、 opを中置演算子に宣言します。

infix (op, lbp, rbp, lpos, rpos, pos)は、 記述された左右の結合力と、 左オペランド、右オペランド、演算子結果それぞれについて、 品詞をlpos, rpos, posに設定して、 opを中置演算子に宣言します。

(演算子宣言に関係して)「品詞」は、式のタイプを意味します。 3つのタイプが認識されます; expr, clause, any。それぞれは、 代数式、ブーリアン式、任意の種類の式を示します。 Maximaは、宣言された品詞を実際の式に比較することで、 いくつかの構文法エラーを検出します。

他の演算子に関するopの優先順位は、問題となっている演算子の左右結合力から演繹されます。 もしopの左右結合力のどちらもある他の演算子の左右結合力より大きいなら、 opは、他の演算子より高い優先順位をとります。 もし結合力がどちらも大きくも、どちらも小さくもなければ、 あるもっと複雑な関係が成り立ちます。

opの結合性は結合力に依存します。 より大きな左結合力(lbp)は、opのインスタンスが 式の中で左にある他の演算子の前に評価されることを示し、 より大きな右結合力(rbp)は、opのインスタンスが 式の中で右にある他の演算子の前に評価されることを示します。 このように、より大きなlbpopを右結合にし、 より大きなrbpopを左結合にします。 もしlbprbpと等しいなら、 opは左結合です。

Syntaxも参照してください。

例:

もしop左右結合力それぞれが、他の演算子のそれより大きいなら、 opは他の演算子より高い優先順位をとります。

 
(%i1) :lisp (get '$+ 'lbp)
100
(%i1) :lisp (get '$+ 'rbp)
100
(%i1) infix ("##", 101, 101);
(%o1)                          ##
(%i2) "##"(a, b) := sconcat("(", a, ",", b, ")");
(%o2)       (a ## b) := sconcat("(", a, ",", b, ")")
(%i3) 1 + a ## b + 2;
(%o3)                       (a,b) + 3
(%i4) infix ("##", 99, 99);
(%o4)                          ##
(%i5) 1 + a ## b + 2;
(%o5)                       (a+1,b+2)

より大きなlbpopを右結合にし、 より大きなrbpopを左結合にします。

 
(%i1) infix ("##", 100, 99);
(%o1)                          ##
(%i2) "##"(a, b) := sconcat("(", a, ",", b, ")")$
(%i3) foo ## bar ## baz;
(%o3)                    (foo,(bar,baz))
(%i4) infix ("##", 100, 101);
(%o4)                          ##
(%i5) foo ## bar ## baz;
(%o5)                    ((foo,bar),baz)

Maximaは、宣言された品詞を実際の式と比較することで、 いくつかの構文法エラーを検出します。

 
(%i1) infix ("##", 100, 99, expr, expr, expr);
(%o1)                          ##
(%i2) if x ## y then 1 else 0;
Incorrect syntax: Found algebraic expression where logical
expression expected
if x ## y then
             ^
(%i2) infix ("##", 100, 99, expr, expr, clause);
(%o2)                          ##
(%i3) if x ## y then 1 else 0;
(%o3)                if x ## y then 1 else 0

関数: matchfix  
    matchfix (ldelimiter, rdelimiter)  
    matchfix (ldelimiter, rdelimiter, arg_pos, pos)

左と右の区切り記号ldelimiterrdelimiterを持つ matchfix演算子を宣言します 区切り記号は文字列として指定されます。

"matchfix"演算子は、 任意の数の引数の関数で、引数は左と右の区切り記号をマッチする間で現れます。 パーサがオペランドや他の式や演算子から区切り記号を区別できる限り 区切り記号は任意の文字列を取り得ます。 実際には、これは、%, ,, $, ;のような パースできない区切り記号を除外し、空白を持つ区切り記号を分離することを要求するかもしれません。 右区切り記号は、左区切り記号と同じかもしれませんし、違うかもしれません。

左区切り記号は、たった1つの右区切り記号と関連づけられることができます; 2つの異なるmatchfix演算子は同じ左区切り記号を持つことはできません。

存在する演算子は、 他のプロパティを変えることなく、 matchfix演算子として再宣言することができます。 特に、足し算+のような組み込み演算子が matchfixに宣言されることが可能ですが、 演算子関数は組み込み演算子に関して定義できません。

コマンドmatchfix (ldelimiter, rdelimiter, arg_pos, pos) は、 引数品詞arg_posと結果品詞pos、区切り記号 ldelimiterrdelimiterを宣言します。

演算子宣言に関して、「品詞」は式のタイプを意味します。 3つのタイプが認識されます: それぞれ、代数式、ブーリアン式、任意の種類の式を示す、 expr, clause, any。 Maximaは、 宣言された品詞を実際の式と比較することで、 いくつかの構文法エラーを検知します。

matchfix演算を実行する関数は通常のユーザー定義関数です。 演算子関数は、 関数定義演算子:=defineを使って 普通の方法で定義されます。 引数は、区切り記号の間に書かれるか、 クォートされた文字列としての左区切り記号と括弧の中で続く引数を使って書かれます。 dispfun (ldelimiter)は関数定義を表示します。

唯一の組み込みmatchfix演算子はリスト構成子[ ]です。 括弧( )とダブルクォート" "はmatchfix演算子のように振る舞いますが、 Maximaパーサによってそのようには扱われません。

matchfixは引数を評価します。 matchfixは最初の引数ldelimiterを返します。

例:

区切り記号はほとんど任意の文字列を取り得ます。

 
(%i1) matchfix ("@@", "~");
(%o1)                          @@
(%i2) @@ a, b, c ~;
(%o2)                      @@a, b, c~
(%i3) matchfix (">>", "<<");
(%o3)                          >>
(%i4) >> a, b, c <<;
(%o4)                      >>a, b, c<<
(%i5) matchfix ("foo", "oof");
(%o5)                          foo
(%i6) foo a, b, c oof;
(%o6)                     fooa, b, coof
(%i7) >> w + foo x, y oof + z << / @@ p, q ~;
                     >>z + foox, yoof + w<<
(%o7)                ----------------------
                            @@p, q~

Matchfix演算子は通常のユーザー定義関数です。

 
(%i1) matchfix ("!-", "-!");
(%o1)                         "!-"
(%i2) !- x, y -! := x/y - y/x;
                                    x   y
(%o2)                   !-x, y-! := - - -
                                    y   x
(%i3) define (!-x, y-!, x/y - y/x);
                                    x   y
(%o3)                   !-x, y-! := - - -
                                    y   x
(%i4) define ("!-" (x, y), x/y - y/x);
                                    x   y
(%o4)                   !-x, y-! := - - -
                                    y   x
(%i5) dispfun ("!-");
                                    x   y
(%t5)                   !-x, y-! := - - -
                                    y   x

(%o5)                         done
(%i6) !-3, 5-!;
                                16
(%o6)                         - --
                                15
(%i7) "!-" (3, 5);
                                16
(%o7)                         - --
                                15

Categories:  Syntax · Operators

関数: nary  
    nary (op)  
    nary (op, bp, arg_pos, pos)

nary演算子は 任意の数の引数の関数を示すのに使われます。 引数それぞれは、例えば、A+BやA+B+Cように演算子の出現で分離されます。 nary("x")関数は xnary演算子に宣言する構文拡張関数です。 関数は naryであると宣言されるかもしれません。 もし declare(j,nary);が実行されたら、 これは整理器に 例えば、j(j(a,b),j(c,d))j(a, b, c, d)に整理するよう指示します。

Introduction to operatorsも参照してください。

Categories:  Operators · Syntax

関数: nofix  
    nofix (op)  
    nofix (op, pos)

nofix演算子は引数のない関数を示すのに使われます。 コマンドにそんな演算子が存在すると、 対応する関数が評価されるだけです。 例えば、Maximaブレイクから抜けるために"exit;"とタイプする時、 "exit"はnofix演算子と似たように振る舞います。 関数 nofix("x")xnofix演算子に宣言する構文拡張関数です。

Introduction to operatorsも参照してください。

Categories:  Operators · Syntax

関数: postfix  
    postfix (op)  
    postfix (op, lbp, lpos, pos)

prefix変種のようなpostfix演算子は引数一つの関数を示しますが、 この場合、例えば3!のように、入力文字列の中で引数が演算子に先行します。 postfix("x")関数は xpostfix演算子に宣言する構文拡張関数です。

Introduction to operatorsも参照してください。

Categories:  Operators · Syntax

関数: prefix  
    prefix (op)  
    prefix (op, rbp, rpos, pos)

prefix演算子は引数一つの関数であり、 その引数は演算子のすぐ後ろに置かれます。 prefix("x")xprefix演算子に宣言する構文拡張関数です。

Introduction to operatorsも参照してください。

Categories:  Operators · Syntax


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8. Evaluation


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 Functions and Variables for Evaluation

演算子: '

シングルクォート演算子 'は評価を抑制します。

シンボルにシングルクォートを用いるとシンボルが評価されません。

関数コールにシングルクォートを用いると、 関数の引数は(抑制されない限り)評価されますが、関数コールは評価されません。 結果は関数コールの名詞形です。

括弧でくくられた式にシングルクォートを用いると、 式の中のすべてのシンボルと関数コールは評価されません。 例えば、 '(f(x))は式 f(x)を評価しないことを意味します。 'f(x)f(x)ではなく fへ適用されたシングルクォート)は [x]に適用された fの名詞形を返します。

シングルクォートは式整理を抑制しません。

グローバルフラグ noundisptrueの時 名詞はシングルクォート付きで表示されます。 このスイッチは関数定義を表示するときには、常にtrueです。

クォートクォート演算子 ''nounsも参照ください。

例:

シンボルにシングルクォートを用いるとシンボルが評価されません。

 
(%i1) aa: 1024;
(%o1)                         1024
(%i2) aa^2;
(%o2)                        1048576
(%i3) 'aa^2;
                                 2
(%o3)                          aa
(%i4) ''%;
(%o4)                        1048576

関数コールにシングルクォートを用いると、関数の引数は評価されますが、 関数コールが評価されません。 結果は関数コールの名詞形です。

 
(%i1) x0: 5;
(%o1)                           5
(%i2) x1: 7;
(%o2)                           7
(%i3) integrate (x^2, x, x0, x1);
                               218
(%o3)                          ---
                                3
(%i4) 'integrate (x^2, x, x0, x1);
                             7
                            /
                            [   2
(%o4)                       I  x  dx
                            ]
                            /
                             5
(%i5) %, nouns;
                               218
(%o5)                          ---
                                3

括弧でくくられた式にシングルクォートを用いると、式の中のすべてのシンボルと関数コールは評価されません。

 
(%i1) aa: 1024;
(%o1)                         1024
(%i2) bb: 19;
(%o2)                          19
(%i3) sqrt(aa) + bb;
(%o3)                          51
(%i4) '(sqrt(aa) + bb);
(%o4)                     bb + sqrt(aa)
(%i5) ''%;
(%o5)                          51

シングルクォートは式整理を抑制しません。

 
(%i1) sin (17 * %pi) + cos (17 * %pi);
(%o1)                          - 1
(%i2) '(sin (17 * %pi) + cos (17 * %pi));
(%o2)                          - 1

Maximaは組み込み数学関数による浮動小数点演算を整理とみなします。

 
(%i1) sin(1.0);
(%o1)                          .8414709848078965
(%i2) '(sin(1.0));
(%o2)                          .8414709848078965

グローバルフラグ noundisptrue の時、 シングルクオートで名詞を表示します。

 
(%i1) x:%pi;
(%o1)                                 %pi
(%i2) bfloat(x);
(%o2)                         3.141592653589793b0
(%i3) sin(x);
(%o3)                                  0
(%i4) noundisp;
(%o4)                                false
(%i5) 'bfloat(x);
(%o5)                             bfloat(%pi)
(%i6) bfloat('x);
(%o6)                                  x
(%i7) 'sin(x);
(%o7)                                  0
(%i8) sin('x);
(%o8)                               sin(x)
(%i9) noundisp : not noundisp;
(%o9)                                true
(%i10) 'bfloat(x);
(%o10)                           'bfloat(%pi)
(%i11) bfloat('x);
(%o11)                                 x
(%i12) 'sin(x);
(%o12)                                 0
(%i13) sin('x);
(%o13)                              sin(x)
(%i14)

Categories:  Evaluation · Operators

演算子: "

クォートクォート演算子''(シングルクォートマーク2つ)は 入力式の中の評価を部分修正します。

一般式 exprにクォートクォートを用いると 入力式の中の exprexprの値を代入します。

式の演算子にクォートクォートを用いると (もし動詞でないなら)演算子は名詞から動詞に変わります。

クォートクォート演算子は入力パーサが適用します; クォートクォート演算子はパースされた入力式の一部としては格納されません。 クォートクォート演算子はパースされるといつもすぐに適用され、クォートできません。 このように、関数定義やラムダ式、シングルクォート'でクォートされた式の中のように通常評価が抑制される時も、 クォートクォートがあると評価を実行します。

batchloadはクォートクォートを認識します。

evとシングルクォート演算子 'nounsも参照ください。

例:

一般式 exprにクォートクォートを用いると入力式の中の exprexprの値を代入します。

 
(%i1) expand ((a + b)^3);
                     3        2      2      3
(%o1)               b  + 3 a b  + 3 a  b + a
(%i2) [_, ''_];
                         3    3        2      2      3
(%o2)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
(%i3) [%i1, ''%i1];
                         3    3        2      2      3
(%o3)     [expand((b + a) ), b  + 3 a b  + 3 a  b + a ]
(%i4) [aa : cc, bb : dd, cc : 17, dd : 29];
(%o4)                   [cc, dd, 17, 29]
(%i5) foo_1 (x) := aa - bb * x;
(%o5)                 foo_1(x) := aa - bb x
(%i6) foo_1 (10);
(%o6)                      cc - 10 dd
(%i7) ''%;
(%o7)                         - 273
(%i8) ''(foo_1 (10));
(%o8)                         - 273
(%i9) foo_2 (x) := ''aa - ''bb * x;
(%o9)                 foo_2(x) := cc - dd x
(%i10) foo_2 (10);
(%o10)                        - 273
(%i11) [x0 : x1, x1 : x2, x2 : x3];
(%o11)                    [x1, x2, x3]
(%i12) x0;
(%o12)                         x1
(%i13) ''x0;
(%o13)                         x2
(%i14) '' ''x0;
(%o14)                         x3

式の演算子にクォートクォートを用いると (もし動詞でないなら)演算子は名詞から動詞に変わります。

 
(%i1) declare (foo, noun);
(%o1)                         done
(%i2) foo (x) := x - 1729;
(%o2)                 ''foo(x) := x - 1729
(%i3) foo (100);
(%o3)                       foo(100)
(%i4) ''foo (100);
(%o4)                        - 1629

クォートクォート演算子は入力パーサが適用します; クォートクォート演算子はパースされた入力式の一部としては格納されません。

 
(%i1) [aa : bb, cc : dd, bb : 1234, dd : 5678];
(%o1)                 [bb, dd, 1234, 5678]
(%i2) aa + cc;
(%o2)                        dd + bb
(%i3) display (_, op (_), args (_));
                           _ = cc + aa

                         op(cc + aa) = +

                    args(cc + aa) = [cc, aa]

(%o3)                         done
(%i4) ''(aa + cc);
(%o4)                         6912
(%i5) display (_, op (_), args (_));
                           _ = dd + bb

                         op(dd + bb) = +

                    args(dd + bb) = [dd, bb]

(%o5)                         done

関数定義やラムダ式、シングルクォート'でクォートされた式の中のように 通常評価が抑制される時も、 クォートクォートがあると評価を実行します。

 
(%i1) foo_1a (x) := ''(integrate (log (x), x));
(%o1)               foo_1a(x) := x log(x) - x
(%i2) foo_1b (x) := integrate (log (x), x);
(%o2)           foo_1b(x) := integrate(log(x), x)
(%i3) dispfun (foo_1a, foo_1b);
(%t3)               foo_1a(x) := x log(x) - x

(%t4)           foo_1b(x) := integrate(log(x), x)

(%o4)                      [%t3, %t4]
(%i5) integrate (log (x), x);
(%o5)                     x log(x) - x
(%i6) foo_2a (x) := ''%;
(%o6)               foo_2a(x) := x log(x) - x
(%i7) foo_2b (x) := %;
(%o7)                    foo_2b(x) := %
(%i8) dispfun (foo_2a, foo_2b);
(%t8)               foo_2a(x) := x log(x) - x

(%t9)                    foo_2b(x) := %

(%o9)                      [%t7, %t8]
(%i10) F : lambda ([u], diff (sin (u), u));
(%o10)             lambda([u], diff(sin(u), u))
(%i11) G : lambda ([u], ''(diff (sin (u), u)));
(%o11)                  lambda([u], cos(u))
(%i12) '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
(%o12)         sum(b , k, 1, 3) + sum(a , k, 1, 3)
                    k                  k
(%i13) '(''(sum (a[k], k, 1, 3)) + ''(sum (b[k], k, 1, 3)));
(%o13)             b  + a  + b  + a  + b  + a
                    3    3    2    2    1    1

Categories:  Evaluation · Operators

関数: ev (expr, arg_1, …, arg_n)

引数arg_1, …, arg_nで指定された環境下で 式exprを評価します。 引数はスイッチ(ブーリアンフラグ)だったり、割り当てだったり、 等式だったり、関数だったりします。 evは評価の結果(別の式)を返します。

評価は以下のようにステップを追って実行されます。

  1. 最初に、以下の任意のもしくはすべての引数をスキャンして環境を準備します。
    • simpを引数に指定するとexprを整理します。falseなら整理を抑制するスイッチsimpの設定に関わらずです。
    • noevalを引数に指定するとevの評価フェイズを抑制します。 (以下のステップ(4)を参照してください。) これは、他のスイッチとの連携時や、exprを再評価せずに再整理をさせる時に役に立ちます。
    • nounsを引数に指定するとexprの中の名詞形式 (典型的には、'integrate'diffのような未評価関数)を評価します。
    • expandを引数に指定すると展開します。
    • expand (m, n)を引数に指定すると、 maxposexmaxnegexの値をそれぞれmnに設定して、展開します。
    • detoutを引数に指定すると、exprの中で計算されるどんな逆行列も、逆行列の外側に行列式を保つようにします。
    • diffを引数に指定するとexprの中のすべての微分を実行します。
    • derivlist (x, y, z, ...)を引数に指定すると指定された変数に関する微分のみを実行します。
    • rischを引数に指定すると exprの中の積分をRischアルゴリズムを使って評価します。 rischを参照してください。 特殊なシンボルnounsを使った時には標準の積分ルーチンが呼び出されます。
    • floatを引数に指定すると非整数有理数を浮動小数点に変換します。
    • numerを引数に指定すると数値引数が指定された(指数関数を含む)いくつかの数学関数を浮動小数点に評価します。 また、exprの中の numerval宣言された変数は、宣言された値に置き換えられます。 また、floatスイッチをオンにします。
    • predを引数に指定すると述語(trueもしくはfalseに評価される式)を評価します。
    • evalを引数に指定するとexprの特別な後評価をします。(ステップ(5)を参照。) evalは複数回起こるかもしれません。evalのそれぞれのインスタンスのために、式は再評価されます。
    • 評価フラグ(evflagを参照)として宣言されたアトムAを引数に指定すると、 exprの評価の最中、Atrueにバインドされます。
    • V: expression(もしくは代わりにV=expression)を引数に指定すると、 exprの評価の最中、Vexpressionの値にバインドされます。 もしVがMaximaオプションなら、exprの評価の最中、Vの値にexpressionが使われることに注意してください。 もしevの複数の引数がこのタイプの場合、並列してバインドされます。 もしVが非アトムの式なら、バインドではなく、代入が実行されます。
    • 関数名 Fが評価関数(evfun参照)として宣言されている場合、 Fを引数に指定すると Fexprに適用されます。
    • 他のどんな関数名(例えば、sum)でも引数に指定すると、 exprの中にそれらの名前が現れた時それらが動詞であるかのように評価します。
    • 加えて、exprの中で出現する関数(F(x)としましょう)を、 exprの今回の評価の目的のため、 F(X) := expressionevの引数に与えて、局所的に定義することができます。
    • もし以上で言及しなかったアトム、添字付き変数、または、添字付き式が引数として与えられたら、 それを評価して、 もしその結果が等式もしくは割り当てであったら、示されたバインドもしくは代入を実行します。 もしその結果がリストなら、リストのメンバが、 evに与えられた追加の引数であるかのように扱います。 これにより、 solveが返すような、与えられた等式のリスト (例えば、 [X=1,Y=A**2])や 等式の名前のリスト(例えば、 [%t1, %t2]。ここで %t1, %t2は等式)が使えます。

    evの引数は代入等式と評価関数以外はどんな順序で与えてもかまいません。 代入等式は左から右へ順に扱われ、 評価関数は、例えば、 ev (expr, ratsimp, realpart)realpart (ratsimp (expr))と扱われるように合成されます。

    simp, numer, floatスイッチは、ブロックの中でローカルにも、 またMaximaの中でグローバルにも設定でき、その場合リセットされるまで効果を保ちます。

    numerfloatスイッチがともに trueでない場合、 もし exprが標準有理式(CRE)なら evが返す式もまたCREです。

  2. step (1)の最中に、引数の中のもしくは引数の値の、等式の左辺に現れる添字なしの変数のリストを作ります。 exprの中の変数(添字なし変数や配列関数に関連づけられていない添字付き変数)は、 先のリストに現れるものを除いて、グローバルな値に置き換えられます。 普通、 exprは、ただのラベルだったり (以下の例の %i2のように) %だったりするので、 その場合,このステップは単にラベルされた式を取り出し、 evはその式に対して機能することになります。
  3. 引数で指定されたどんな代入文もすぐ実行されます。
  4. (引数でnoevalが指定されていない限り)結果の式は再評価され 引数に従って整理されます。 exprの中のどんな関数コールもその中の変数が評価された後実行されること、 ev(F(x))F(ev(x))のように振る舞うことに注意してください。
  5. 引数の中のevalのそれぞれのインスタンスのために step (3)(4)を繰り返します。

''atsubstも参照してください。

例:

 
(%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
                                     d                    2
(%o1)              cos(y) + sin(x) + -- (sin(w)) + (w + 1)
                                     dw
(%i2) ev (%, numer, expand, diff, x=2, y=1);
                             2
(%o2)              cos(w) + w  + 2 w + cos(1) + 2.449599732693821

evのために代わりのトップレベルの文法が提供されています。 それによってev()なしに引数をタイプして入力するだけでよくなります。 すなわち、単に以下のように書けます。

 
expr, arg_1, ..., arg_n

これは、例えば、関数やブロックの中など、他の式の一部としては許されません。

以下の例では並列のバインドプロセスに注意してください。

 
(%i3) programmode: false;
(%o3)                                false
(%i4) x+y, x: a+y, y: 2;
(%o4)                              y + a + 2
(%i5) 2*x - 3*y = 3$
(%i6) -3*x + 2*y = -4$
(%i7) solve ([%o5, %o6]);
Solution

                                          1
(%t7)                               y = - -
                                          5

                                         6
(%t8)                                x = -
                                         5
(%o8)                            [[%t7, %t8]]
(%i8) %o6, %o8;
(%o8)                              - 4 = - 4
(%i9) x + 1/x > gamma (1/2);
                                   1
(%o9)                          x + - > sqrt(%pi)
                                   x
(%i10) %, numer, x=1/2;
(%o10)                      2.5 > 1.772453850905516
(%i11) %, pred;
(%o11)                               true

Categories:  Evaluation

特殊シンボル: eval

ev (expr)のコールの引数として evalexprの追加の評価をもたらします。 evを参照してください。

例:

 
(%i1) [a:b,b:c,c:d,d:e];
(%o1)                            [b, c, d, e]
(%i2) a;
(%o2)                                  b
(%i3) ev(a);
(%o3)                                  c
(%i4) ev(a),eval;
(%o4)                                  e
(%i5) a,eval,eval;
(%o5)                                  e

Categories:  Evaluation flags

プロパティ: evflag

シンボルxevflagプロパティを持つ時、 式ev(expr, x)や対話プロンプトでのexpr, xev(expr, x = true)と同値です。 すなわち、exprが評価される間、xtrueにバインドされます。

declare(x, evflag)は、変数xevflagプロパティを与えます。

デフォルトでevflagプロパティを持つフラグは以下の通りです:

   algebraic          cauchysum       demoivre
   dotscrules         %emode          %enumer
   exponentialize     exptisolate     factorflag
   float              halfangles      infeval
   isolate_wrt_times  keepfloat       letrat
   listarith          logabs          logarc
   logexpand          lognegint
   m1pbranch          numer_pbranch   programmode
   radexpand          ratalgdenom     ratfac
   ratmx              ratsimpexpons   simp
   simpproduct        simpsum         sumexpand
   trigexpand

例:

 
(%i1) sin (1/2);
                                 1
(%o1)                        sin(-)
                                 2
(%i2) sin (1/2), float;
(%o2)                   0.479425538604203
(%i3) sin (1/2), float=true;
(%o3)                   0.479425538604203
(%i4) simp : false;
(%o4)                         false
(%i5) 1 + 1;
(%o5)                         1 + 1
(%i6) 1 + 1, simp;
(%o6)                           2
(%i7) simp : true;
(%o7)                         true
(%i8) sum (1/k^2, k, 1, inf);
                            inf
                            ====
                            \     1
(%o8)                        >    --
                            /      2
                            ====  k
                            k = 1
(%i9) sum (1/k^2, k, 1, inf), simpsum;
                                 2
                              %pi
(%o9)                         ----
                               6
(%i10) declare (aa, evflag);
(%o10)                        done
(%i11) if aa = true then YES else NO;
(%o11)                         NO
(%i12) if aa = true then YES else NO, aa;
(%o12)                         YES

プロパティ: evfun

関数 Fevfunプロパティを持つ時、 式 ev(expr, F)や(対話プロンプトでの) expr, FF(ev(expr))と同値です。

もし2つ以上の evfun関数 F, Gなどが指定されたなら 関数は指定された順に適用されます。

declare(F, evfun)は関数 Fevfunプロパティを与えます。

デフォルトで evfunプロパティを持つ関数は以下の通りです:

   bfloat          factor       fullratsimp
   logcontract     polarform    radcan
   ratexpand       ratsimp      rectform
   rootscontract   trigexpand   trigreduce

例:

 
(%i1) x^3 - 1;
                              3
(%o1)                        x  - 1
(%i2) x^3 - 1, factor;
                                2
(%o2)                 (x - 1) (x  + x + 1)
(%i3) factor (x^3 - 1);
                                2
(%o3)                 (x - 1) (x  + x + 1)
(%i4) cos(4 * x) / sin(x)^4;
                            cos(4 x)
(%o4)                       --------
                               4
                            sin (x)
(%i5) cos(4 * x) / sin(x)^4, trigexpand;
                 4           2       2         4
              sin (x) - 6 cos (x) sin (x) + cos (x)
(%o5)         -------------------------------------
                                4
                             sin (x)
(%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
                           2         4
                      6 cos (x)   cos (x)
(%o6)               - --------- + ------- + 1
                          2          4
                       sin (x)    sin (x)
(%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
                           2         4
                      6 cos (x)   cos (x)
(%o7)               - --------- + ------- + 1
                          2          4
                       sin (x)    sin (x)
(%i8) declare ([F, G], evfun);
(%o8)                         done
(%i9) (aa : bb, bb : cc, cc : dd);
(%o9)                          dd
(%i10) aa;
(%o10)                         bb
(%i11) aa, F;
(%o11)                        F(cc)
(%i12) F (aa);
(%o12)                        F(bb)
(%i13) F (ev (aa));
(%o13)                        F(cc)
(%i14) aa, F, G;
(%o14)                      G(F(cc))
(%i15) G (F (ev (aa)));
(%o15)                      G(F(cc))

Categories:  Evaluation flags

オプション変数: infeval

「無限評価」モードにします。 evは値が変わらなくなるまで式を繰り返し評価します。 このモードで変数 (Xとします)が評価されることを避けるには、単に X='Xevの引数として含めます。 ev (X, X=X+1, infeval)のような式はもちろん、無限ループを引き起こします。

Categories:  Evaluation flags

特殊シンボル: noeval

noevalevの評価フェイズを抑制します。 これは、他のスイッチと連携したり、 式を再評価することなしに再整理したりするのに役に立ちます。

Categories:  Evaluation flags

特殊シンボル: nouns

nounsevflagの1つです。 evコマンドのオプションとして使われる時、 nounsは式の中に現れる「名詞」形すべてを「動詞」に evします。 すなわち、それらを評価します。 noun, nounify, verb, verbifyも参照してください。

Categories:  Evaluation flags · Nouns and verbs

特殊シンボル: pred

ev (expr)のコールでの引数として、 predは 述語論理 (trueまたは falseに評価される式)を評価するようにします。 evを参照してください。

例:

 
(%i1) 1<2;
(%o1)                                1 < 2
(%i2) 1<2,pred;
(%o2)                                true

Categories:  Evaluation flags


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9. Simplification


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.1 Introduction to Simplification

Maximaは、新しくユーザーがタイプしたコマンドそれぞれに対応してアクションのサイクルを実行します。 これは4つのステップからなります:入力を読み「パース」すること、評価、整理、そして出力。 パースは文法的に有効な一連のタイプされた文字を操作の残りで使うデータ構造に変換します。 評価は名前を割り当てられた値に置き換えます。 整理は式をユーザーや他のプログラムがより理解しやすいように書き直すことを意味します。 出力は様々な異なるフォーマットや記法で計算結果を表示することを含みます。

評価や整理は、どちらも「複雑さ」を取り除くことがゴールなので、時々、似た機能を持つように見えます。 システム設計者は時々、それぞれで部分的に実行されるようにタスクを分割します。 例えば、 integrate(x,x)は答えを x*x/2と評価し、それは、 x^2/2に整理されます。

評価はいつも存在します: それは、関数、サブルーチン、変数、値、ループ、割り当てなどを持つプログラミングシステムを持つことの 結果です。 評価ステップでは、組み込みかユーザー定義の関数名はそれらの定義に置き換えられ、変数はそれらの値に置き換えられます。 これは、従来のプログラミング言語の活動と大部分同じですが、 記号数学データも扱うように拡張されました。 目下の数学の汎用性のため、異なる可能な評価モデルがあり、 システムは評価のプロセスの舵をとるオプションの「フラグ」を持ちます。 See section Functions and Variables for Evaluation

対照的に、整理の意図は、表現を再再定式化して、より小さく、理解しやすく、 (因数分解や展開のように)特定の仕様に準じるように式の値を整備することです。 例えば、  sin(0)0に、 x+x2*xに。 整理の結果を変えるいくつかの強力なツールがあります。 新しく導入された関数や記号記法の知識をユーザーがMaximaに取り込むことができることの大半はシステムのこの部分だからです。

整理は一般に4つの異なるレベルで行われます:

内部の整理器はMaximaの心臓部に属します。 それは大きく複雑なプログラムの集まりであり、何年にも渡って数千のユーザーの手で改良され続けています。 それでもやはり、特に、新しいアイデアや従来とは違う記法を試すなら、 自分自身でプログラムに小さな(また大きな)変更を加えることが役に立つことがわかるかもしれません。 詳細は例えば、 https://people.eecs.berkeley.edu/~fateman/papers/intro5.txt の終わりの論文を参照してください。

Maximaは内部的に、演算子を使った「ツリー」として、すなわち +, * , =のような「ルート」と、x, y, zのような変数や 関数、 x*yのようなサブツリーである演算数(「リーフ」)で式を表現します。 演算子それぞれはそれと連携した整理プログラムを持ちます。 +(これはa-b = a+(-1)*b)なので二項演算子 -もカバーします)と *(これはa/b = a*b^(-1)なので二項演算子 /もカバーします) はかなり込み入った整理プログラムを持ちます。 これらの整理プログラム(simplus, simptimes, simpexptなど)は 整理器が解析中の式ツリーの中でそれぞれの算術演算子を見つけると常にコールされます。

整理器の構造は1965年まで遡り、以来多くの手が加えられています。 その構造は現代の専門用語で言うと、データ指示でオブジェクト指向です。 プログラムは、式の、あるサブツリーの根に依存して適切なルーチンを再帰的に送ります。 この汎用の概念は、 プログラムへの非常に局所的な変更で整理プロセスへの修正を行うことができることを意味します。 多くの場合、既存のコードを乱すことなく演算子とその整理器を追加することは概念的に簡単です。

代数式ツリーに演算するこの汎用の整理器に加えて、 Maximaの式のいくつかの他の表現がメソッドと整理器を分離することに注意を払います。 例えば、rat()関数は、そんな形式の高速な操作を助けるために、多項式を係数のベクトルに変換します。 他の表現にはTaylor級数や(滅多に使われない)Poisson級数があります。

ユーザーが導入するすべての演算子は、初期状態としてそれらと連携した整理器を持ちません。 Maximaは関数"f"に関して何も知らないので、 f(a,b)とタイプすると、 a, bは整理されますが、 fについては整理されません。 いくつかの組み込み演算子でさえ整理器を持たないものがあります。 例えば、 =は「整理」しません。 - それは、 この場合左辺と右辺を参照する2つの引数を整理する以上の整理セマンティクスを持たないプレイスホルダです 解答プログラムのようなMaximaの他の部分は等式 、すなわち、 =を根に持つツリーに特別な注意を払います。 (注意 - Maximaでは、割り当て演算は :です。 すなわち、 q: 4はシンボル qの値に 4を設定します。 関数定義には :=を使います。)

汎用整理器は、式と部分式それぞれが整理されたことを示す内部フラグと一緒に結果を返します。 これは、すべての可能な等価式上でそれが唯一であることを保証しません。 それは困難すぎます。(理論的に、Maximaで表現可能なものの一般性を仮定して不可能です) しかし、和や積の中の項の順序など、式のいくつかの面では一貫しています。 これは他のプログラムが適切に動作するために重要です。

Maximaの処理をゴールとして特定の好みの種類のパターンに導くたくさんのオプション変数を設定できます。 simp:falseで整理器をオフにする最も極端なオプションを使うことさえできます。 多くの内部ルーチンは引数が整理されていることを仮定しているので、これはお勧めしません。 (整理器をオフにするにが尤もらしくみえる唯一のケースは、組み込み整理器をオーバーライドしたいという稀なケースです。 その場合、一時的に整理器をオフにして、 tellsimp,経由で新しい変換に置き換え、 そして simp:trueで整理器を再度オンにするかもしれません)

あなたがユーザー定義のシンボル関数名や演算子をプロパティ (additive, lassociative, oddfun, antisymmetric, linear, outative, commutative, multiplicative, rassociative, evenfun, nary, symmetric)と連携させることはさらに尤もらしいです。 これらのオプションは処理する整理器をシステマティックな指示で操作します。

例えば、 declare(f,oddfun)は、 fを奇関数と規定します。 Maximaは f(-x)-f(x)に整理するでしょう。 偶関数の場合、それは declare(g,evenfun)であり、 Maximaは g(-x)g(x)に整理するでしょう。 h(x):=x^2+1といったようにプログラミング関数を名前に関連づけることもできます。 その場合、評価器はすぐに h(3)10に、 h(a+1)(a+1)^2+1に置き換え、 hのどんなプロパティも無視されます。

ユーザーが設定したこれらの直接関連したプロパティに加えて、 実際の文脈からのファクトやプロパティも 整理器の振る舞いに影響を与えるかもしれません。 See section Introduction to Maximas Database

例: もし nが整数なら、 sin(n*%pi)は零に整理されます。

 
(%i1) sin(n*%pi);
(%o1)                      sin(%pi n)
(%i2) declare(n, integer);
(%o2)                         done
(%i3) sin(n*%pi);
(%o3)                           0

もし自動整理が不十分なら、 組み込みだけれでも明示的に呼び出す整理関数 (ratsimp, expand, factor, radcan, その他)を検討できます。 整理をあれこれの方向に進めるフラグもあります。 demoivre:trueを与えると、整理器は複素指数を三角関数形式に書き換えます。 exponentialize:trueを与えると、整理器は逆を試みます: 三角関数形式を複素指数に。

Maximaのどこでも、 (Maximaユーザー言語でも実装言語のLispでも)自身の関数を書いてプログラムの中の選んだ場所で明示的に呼び出すことで 個人的な整理の必要性に応えることができます。 Lispはあなたに内部メカニズムすべてのハンドルを与えますが、めったにこの最大限の汎用性は必要としないでしょう。 "Tellsimp"は 整理機への Lisp内部インタフェースの多くを自動的に生成するように設計されています。 See section Rules and Patternsを参照してください。

何年にも渡って(Maxima/Macsymaの起源は1966年まで遡ります!) ユーザーは関数的な振る舞いを拡張したり変えたりするたくさんの応用パッケージやツールを貢献し続けています。 整理を修正したり拡張したりするための様々な非標準の「共有」パッケージも存在します。 現在も進行中の実験的な材料も見てみてください。 See section simplification

以下の追加された材料は初めて読む時には必須ではありません。 以下を読むことはMaximaの生産的な利用に必要ではありません。 何が起こっているのか知りたい好奇心あるユーザーや (オープンソース)コードを変更したい野心的なプログラマーのためです。 Maxima Lispコードを再定義する実験は簡単に可能です: Lispプログラム(例えば、 cos()を整理する simp%cosだとしましょう)の定義を変えるには、 Maximaのテキストファイルを覗き込んで、 maximaパッケージから simp%cos関数を書き換えるだけです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.2 Functions and Variables for Simplification

プロパティ: additive

もし declare(f, additive)が実行されると:

(1) もし fが1変数関数なら、 fが和に適用された時はいつでも fは和の上に分配整理されます。 例えば、 f(y+x)は、 f(y)+f(x)に整理されます。

(2) もし fが2変数以上の関数なら、 sumintegrateの場合と同様に 加法性が第一番目の引数に対して定義されます。 例えば、 f(h(x)+g(x),x)f(h(x),x)+f(g(x),x)に整理されます。 fsum(x[i],i,lower-limit,upper-limit)の形の式に適用されたときには この整理はされません。

例:

 
(%i1) F3 (a + b + c);
(%o1)                     F3(c + b + a)
(%i2) declare (F3, additive);
(%o2)                         done
(%i3) F3 (a + b + c);
(%o3)                 F3(c) + F3(b) + F3(a)

プロパティ: antisymmetric

もし declare(h,antisymmetric)が実行されると、 hは反対称として整理されます。 例えば、 h(x,z,y)-h(x,y,z)と整理されます。 即ち、 symmetriccommutativeで得られた結果に(-1)^nを掛けたものとなります。 ここでnはその形に変換するのに必要な置換の回数です。

例:

 
(%i1) S (b, a);
(%o1)                        S(b, a)
(%i2) declare (S, symmetric);
(%o2)                         done
(%i3) S (b, a);
(%o3)                        S(a, b)
(%i4) S (a, c, e, d, b);
(%o4)                   S(a, b, c, d, e)
(%i5) T (b, a);
(%o5)                        T(b, a)
(%i6) declare (T, antisymmetric);
(%o6)                         done
(%i7) T (b, a);
(%o7)                       - T(a, b)
(%i8) T (a, c, e, d, b);
(%o8)                   T(a, b, c, d, e)

関数: combine (expr)

同じ分母を持つ項を単一の項に結合することによって和 exprを整理します。

例:

 
(%i1) 1*f/2*b + 2*c/3*a + 3*f/4*b +c/5*b*a;
                      5 b f   a b c   2 a c
(%o1)                 ----- + ----- + -----
                        4       5       3
(%i2) combine (%);
                  75 b f + 4 (3 a b c + 10 a c)
(%o2)             -----------------------------
                               60

Categories:  Expressions

プロパティ: commutative

もし declare(h,commutative)が実行されたなら、 hは可換関数として整理されます。 例えば、 h(x,z,y)h(x,y,z)に整理されます。 これは symmetricと同じです。

例:

 
(%i1) S (b, a);
(%o1)                        S(b, a)
(%i2) S (a, b) + S (b, a);
(%o2)                   S(b, a) + S(a, b)
(%i3) declare (S, commutative);
(%o3)                         done
(%i4) S (b, a);
(%o4)                        S(a, b)
(%i5) S (a, b) + S (b, a);
(%o5)                       2 S(a, b)
(%i6) S (a, c, e, d, b);
(%o6)                   S(a, b, c, d, e)

関数: demoivre (expr)
オプション変数: demoivre

関数 demoivre (expr)は グローバル変数 demoivreを設定することなく式を変換します。

変数 demoivreが trueの時、 複素数の指数関数は円関数の項で表した同値な式に変換されます: もし bが %iを含まないなら、 exp (a + b*%i)%e^a * (cos(b) + %i*sin(b))に整理されます。 abは展開されません。

demoivreのデフォルト値は falseです。

exponentializeは円関数や双曲関数を指数関数形に変換します。 demoivreexponentializeは同時に両方trueにはできません。

関数: distrib (expr)

和を積上に分配します。 式のトップレベルのみで働きます。 すなわち、再帰的でなく expandより速い点で expandとは違います。 トップレベルの和すべてを展開する点で multthruとは違います。

例:

 
(%i1) distrib ((a+b) * (c+d));
(%o1)                 b d + a d + b c + a c
(%i2) multthru ((a+b) * (c+d));
(%o2)                 (b + a) d + (b + a) c
(%i3) distrib (1/((a+b) * (c+d)));
                                1
(%o3)                    ---------------
                         (b + a) (d + c)
(%i4) expand (1/((a+b) * (c+d)), 1, 0);
                                1
(%o4)                 ---------------------
                      b d + a d + b c + a c

Categories:  Expressions

オプション変数: distribute_over

デフォルト値: true

distribute_overは リストや行列や等式のようなバッグ(重複を許す集合)上の関数のマッピングを制御します。 今回、すべてのMaxima関数がこのプロパティを持つ訳ではありません。 このプロパティはコマンド propertiesで調べることが可能です。

distribute_overを値 falseに設定した時、 関数のマッピングはオフにスイッチされます。

例:

sin関数はリスト上にマップします:

 
(%i1) sin([x,1,1.0]);
(%o1)         [sin(x), sin(1), 0.8414709848078965]

modは リスト上にマップされる2変数関数です。 入れ子のリスト上のマッピングも可能です:

 
(%i1) mod([x,11,2*a],10);
(%o1)             [mod(x, 10), 1, 2 mod(a, 5)]
(%i2) mod([[x,y,z],11,2*a],10);
(%o2) [[mod(x, 10), mod(y, 10), mod(z, 10)], 1, 2 mod(a, 5)]

floor関数の行列や等式上のマッピング:

 
(%i1) floor(matrix([a,b],[c,d]));
                     [ floor(a)  floor(b) ]
(%o1)                [                    ]
                     [ floor(c)  floor(d) ]
(%i2) floor(a=b);
(%o2)                  floor(a) = floor(b)

1変数以上の関数は任意の引数上、または、すべての引数上にマップします:

 
(%i1) expintegral_e([1,2],[x,y]);
(%o1) [[expintegral_e(1, x), expintegral_e(1, y)],
                      [expintegral_e(2, x), expintegral_e(2, y)]]

関数がプロパティdistribute_overを持つかチェックします:

 
(%i1) properties(abs);
(%o1) [integral, rule, distributes over bags, noun, gradef,
                                                 system function]

distribute_overfalse値に設定すると、 関数の展開はオフになります。

 
(%i1) distribute_over;
(%o1)                         true
(%i2) sin([x,1,1.0]);
(%o2)         [sin(x), sin(1), 0.8414709848078965]
(%i3) distribute_over : not distribute_over;
(%o3)                         false
(%i4) sin([x,1,1.0]);
(%o4)                   sin([x, 1, 1.0])

オプション変数: domain

デフォルト値: real

domaincomplexに設定されている時、 sqrt (x^2)abs(x)を返さず sqrt (x^2)のままを保ちます。

プロパティ: evenfun
プロパティ: oddfun

declare(f, evenfun)declare(f, oddfun)は 関数 fを偶関数か奇関数として認識するように命じます。

例:

 
(%i1) o (- x) + o (x);
(%o1)                     o(x) + o(- x)
(%i2) declare (o, oddfun);
(%o2)                         done
(%i3) o (- x) + o (x);
(%o3)                           0
(%i4) e (- x) - e (x);
(%o4)                     e(- x) - e(x)
(%i5) declare (e, evenfun);
(%o5)                         done
(%i6) e (- x) - e (x);
(%o6)                           0

関数: expand  
    expand (expr)  
    expand (expr, p, n)

exprを展開します。 指数和や和の積の積を実行し、有理式の分子をそれぞれの項に分割し、 (可換、非可換な)積が exprのすべてのレベルの和で分配されます。

多項式の場合、通常もっと効率的なアルゴリズムの ratexpandを使うべきです。

maxnegexmaxposexはそれぞれ、展開される最大の負と正の指数を制御します。

expand (expr, p, n)exprを、 maxposexpmaxnegexnを使って展開します。 これは式のすべてではなく、一部を展開するために役立ちます。

expon - 自動的に展開される最大の負のべきの指数 (expandのコールに独立して)。 例えば、もしも exponが4なら (x+1)^(-5)は自動では展開されません。

expop - 自動的に展開される最大の正の指数。 もし expopが3以上なら (x+1)^3は自動的に展開されます。 もし nexpopよりも大きい時 (x+1)^nが展開されるのが望まれるなら、 maxposexnより小さくない場合のみ expand ((x+1)^n)の実行が行われます。

expand(expr, 0, 0)exprを再整理します。 exprは再評価はされません。 ev(expr, noeval)との違いは、 特殊な表現(例えばCRE形式)が削除されることです。 evも参照してください。

evで使われる expandフラグによって展開が実行されます。

ファイル`share/simplification/facexp.mac'は、 ユーザーに制御された展開によって式を構成する機能を提供するいくつかの関連関数 (特に自動ロードされる facsum, factorfacsum, collectterms)と 変数(nextlayerfactor, facsum_combine)を含みます。 簡単な関数の記述が `simplification/facexp.usg'にあります。 demo("facexp")でデモが実行できます。

例:

 
(%i1) expr:(x+1)^2*(y+1)^3;
                               2        3
(%o1)                   (x + 1)  (y + 1)
(%i2) expand(expr);
       2  3        3    3      2  2        2      2      2
(%o2) x  y  + 2 x y  + y  + 3 x  y  + 6 x y  + 3 y  + 3 x  y
                                                      2
                                     + 6 x y + 3 y + x  + 2 x + 1
(%i3) expand(expr,2);
               2        3              3          3
(%o3)         x  (y + 1)  + 2 x (y + 1)  + (y + 1)
(%i4) expr:(x+1)^-2*(y+1)^3;
                                   3
                            (y + 1)
(%o4)                       --------
                                   2
                            (x + 1)
(%i5) expand(expr);
            3               2
           y             3 y            3 y             1
(%o5) ------------ + ------------ + ------------ + ------------
       2              2              2              2
      x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1
(%i6) expand(expr,2,2);
                                   3
                            (y + 1)
(%o6)                     ------------
                           2
                          x  + 2 x + 1

展開なしに式を再整理します:

 
(%i1) expr:(1+x)^2*sin(x);
                                2
(%o1)                    (x + 1)  sin(x)
(%i2) exponentialize:true;
(%o2)                         true
(%i3) expand(expr,0,0);
                            2    %i x     - %i x
                  %i (x + 1)  (%e     - %e      )
(%o3)           - -------------------------------
                                 2

Categories:  Expressions

関数: expandwrt (expr, x_1, ..., x_n)

exprを変数 x_1, ..., x_nに関して展開します。 変数を含む積すべては明示的に現れます。 返される形式は変数を含む式の和の積を含みません。 x_1, ..., x_nは変数、演算子、式であり得ます。

デフォルトでは分母は展開されませんが、これはスイッチ expandwrt_denomによって 制御することができます。

この関数は `simplification/stopex.mac'から自動ロードされます。

Categories:  Expressions

オプション変数: expandwrt_denom

デフォルト値: false

expandwrt_denomexpandwrtによって有理式の扱いを制御します。 もし trueなら式の分子も分母も expandwrtの引数に従って展開されますが、 もし expandwrt_denomfalseなら分子だけがその方法で展開されます。

Categories:  Expressions

関数: expandwrt_factored (expr, x_1, ..., x_n)

expandwrtに似ていますが、積の式を幾分違って扱います。 expandwrt_factoredは、 変数 x_1, ..., x_nを含む exprの因子上でだけ展開します。

この関数は `simplification/stopex.mac'から自動ロードされます。

Categories:  Expressions

オプション変数: expon

デフォルト値: 0

exponは、(expandのコールに依らず)自動的に展開される負のべき乗の最大指数です。 例えば、 もしexponが4なら (x+1)^(-5)は自動的には展開されません。

Categories:  Expressions

関数: exponentialize (expr)
オプション変数: exponentialize

関数 exponentialize (expr)exprの中の円関数や双曲関数を指数関数に変換します。 グローバル変数 exponentializeを設定する必要はありません。

変数 exponentializetrueの時、 円関数や双曲関数すべては指数関数形に変換されます。 デフォルト値は falseです。

demoivreは複素数の指数関数を円関数に変換します。 exponentializedemoivreは同時にtrueにすることはできません。

オプション変数: expop

デフォルト値: 0

expopは自動的に展開される最大の正の指数です。 例えば、 (x + 1)^3が入力された時、 expopが3以下の時だけ自動的に展開されます。 もし nexpopより大きい (x + 1)^nが展開されることを望むなら、 maxposexがn以上の時だけ expand ((x + 1)^n)を実行するとうまくいきます。

Categories:  Expressions

プロパティ: lassociative

declare (g, lassociative)は Maximaの整理器に gが左結合であることを知らせます。 例えば、 g (g (a, b), g (c, d))g (g (g (a, b), c), d)に整理されます。

プロパティ: linear

Maximaの演算子のプロパティの1つ。 そう宣言された1変数関数 fに関して、 f(x + y)の「展開」は f(x) + f(y)を出力し、 aが定数のf(a*x)a*f(x)を出力します。 2つ以上の引数の関数に関しては、 「線形性」は sumintegrateの場合のように定義されます。 すなわち、 abxに独立の場合, f (a*x + b, x)a*f(x,x) + b*f(1,x)を出力します。

例:

 
(%i1) declare (f, linear);
(%o1)                         done
(%i2) f(x+y);
(%o2)                      f(y) + f(x)
(%i3) declare (a, constant);
(%o3)                         done
(%i4) f(a*x);
(%o4)                        a f(x)

linearadditiveかつ outativeと同値です。 oppropertiesも参照してください。

例:

 
(%i1) 'sum (F(k) + G(k), k, 1, inf);
                       inf
                       ====
                       \
(%o1)                   >    (G(k) + F(k))
                       /
                       ====
                       k = 1
(%i2) declare (nounify (sum), linear);
(%o2)                         done
(%i3) 'sum (F(k) + G(k), k, 1, inf);
                     inf          inf
                     ====         ====
                     \            \
(%o3)                 >    G(k) +  >    F(k)
                     /            /
                     ====         ====
                     k = 1        k = 1

オプション変数: maxnegex

デフォルト値: 1000

maxnegexexpandコマンドによって展開される最大の負の指数です。 (maxposex)も参照してください。)

Categories:  Expressions

オプション変数: maxposex

デフォルト値: 1000

maxposexexpandコマンドで展開される最大指数です。 (maxnegex)も参照してください。)

Categories:  Expressions

プロパティ: multiplicative

declare (f, multiplicative)は Maxima整理器に fが乗法的であることを知らせます。

  1. もし fが1変数関数なら、 整理器が積に適用された fに出会うといつでも、 fはその積上に分配されます。 例えば、 f(x*y)f(x)*f(y)に整理されます。 この整理は形式 f('product(...))の式には適用されません。
  2. もし fが多変数関数なら、 乗法性は fの最初の引数の乗法性として定義されます。 例えば、 f (g(x) * h(x), x)f (g(x) ,x) * f (h(x), x)に整理されます。

declare(nounify(product), multiplicative)はMaximaに記号積を整理するように命じます。

例:

 
(%i1) F2 (a * b * c);
(%o1)                       F2(a b c)
(%i2) declare (F2, multiplicative);
(%o2)                         done
(%i3) F2 (a * b * c);
(%o3)                   F2(a) F2(b) F2(c)

declare(nounify(product), multiplicative) tells Maxima to simplify symbolic products.

 
(%i1) product (a[i] * b[i], i, 1, n);
                             n
                           /===\
                            ! !
(%o1)                       ! !  a  b
                            ! !   i  i
                           i = 1
(%i2) declare (nounify (product), multiplicative);
(%o2)                         done
(%i3) product (a[i] * b[i], i, 1, n);
                          n         n
                        /===\     /===\
                         ! !       ! !
(%o3)                  ( ! !  a )  ! !  b
                         ! !   i   ! !   i
                        i = 1     i = 1

関数: multthru  
    multthru (expr)  
    multthru (expr_1, expr_2)

exprの(和の)因子に exprの他の因子を掛けます。 すなわち、exprf_1 f_2 ... f_nです。 ここで、少なくとも1つの因子―f_iとしましょう―は項の和です。 この和の各項に積の中の他の因子を掛けます。 (すなわち、f_iを除いた因子すべてです。) multthruは指数化された和を展開しません。 この関数は(可換であれ非可換であれ)積を和上に分配する最も速い方法です。 割り算は積として表現されるので、 multthruは積によって和を割ることにも使うことができます。

multthru (expr_1, expr_2)は (和もしくは等式の) expr_2の中の各項に expr_1を掛けます。 もしexpr_1がそれ自身和でないなら、 この形式は multthru (expr_1*expr_2)と同値です。

 
(%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
                      1        x         f(x)
(%o1)             - ----- + -------- - --------
                    x - y          2          3
                            (x - y)    (x - y)
(%i2) multthru ((x-y)^3, %);
                           2
(%o2)             - (x - y)  + x (x - y) - f(x)
(%i3) ratexpand (%);
                           2
(%o3)                   - y  + x y - f(x)
(%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
                        10  2              2  2
                 (b + a)   s  + 2 a b s + a  b
(%o4)            ------------------------------
                                  2
                             a b s
(%i5) multthru (%);  /* note that this does not expand (b+a)^10 */
                                        10
                       2   a b   (b + a)
(%o5)                  - + --- + ---------
                       s    2       a b
                           s
(%i6) multthru (a.(b+c.(d+e)+f));
(%o6)            a . f + a . c . (e + d) + a . b
(%i7) expand (a.(b+c.(d+e)+f));
(%o7)         a . f + a . c . e + a . c . d + a . b

Categories:  Expressions

プロパティ: nary

declare(f, nary)はMaximaに 関数 fをn項関数として認識するよう命じます。

nary宣言は nary関数をコールするのと同じではありません。 declare(f, nary)は唯一の効果は 例えば、 foo(x, foo(y, z))foo(x, y, z)に整理するように 入れ子の式をフラットにするようMaxima整理器に指示することです。 declareも参照してください。

例:

 
(%i1) H (H (a, b), H (c, H (d, e)));
(%o1)               H(H(a, b), H(c, H(d, e)))
(%i2) declare (H, nary);
(%o2)                         done
(%i3) H (H (a, b), H (c, H (d, e)));
(%o3)                   H(a, b, c, d, e)

オプション変数: negdistrib

デフォルト値: true

negdistribtrueの時 -1が式上に分配されます。 例えば、 -(x + y)- y - xになります。 falseに設定すると - (x + y)はそのまま表示されることになるでしょう。 これは時々役に立ちますが、よく注意してください; simpフラグ同様に、 当然のことながら、Maximaの中でローカルな使用以外には、 これは falseに設定したくないフラグの1つです。

例:

 
(%i1) negdistrib;
(%o1)                         true
(%i2) -(x+y);
(%o2)                       (- y) - x
(%i3) negdistrib : not negdistrib ;
(%o3)                         false
(%i4) -(x+y);
(%o4)                       - (y + x)

システム変数: opproperties

oppropertiesは、Maximaの整理器が認識する特殊演算子プロパティのリストです:

例:

 
(%i1) opproperties;
(%o1) [linear, additive, multiplicative, outative, evenfun,
oddfun, commutative, symmetric, antisymmetric, nary,
lassociative, rassociative]

Categories:  Global variables · Operators

プロパティ: outative

declare (f, outative)は Maximaの整理器に fの引数の中の定数因子が外に出すことができることを告げます。

  1. もしfが1変数関数なら、 整理器が積に適用された fに出会うといつでも、 その積は定数因子と定数でない因子に分割され、定数因子が外に出されます。 例えば、 aを定数とすると、 f(a*x)a*f(x)に整理されます。 アトムでない定数因子は外に出ません。
  2. もしfが多変数関数なら、 outativityは sumintegrateの場合のように定義されます。 すなわち、 axに依らないとすると、 f (a*g(x), x)a * f(g(x), x)に整理されます。

sum, integrate, limitはすべて outativeです。

例:

 
(%i1) F1 (100 * x);
(%o1)                       F1(100 x)
(%i2) declare (F1, outative);
(%o2)                         done
(%i3) F1 (100 * x);
(%o3)                       100 F1(x)
(%i4) declare (zz, constant);
(%o4)                         done
(%i5) F1 (zz * y);
(%o5)                       zz F1(y)

関数: radcan (expr)

対数関数、指数関数、累乗根を含む exprを 与えられ場変数の順序で式の大きなクラス上の標準形式に整理します; 関数的に同値な形式は特殊な形式にマップされます。 式の幾分大きなクラスに対して radcanは正規形を生成します。 このクラスの同値な2式は必ずしも見た目が同じわけではありませんが、 それらの差は radcanによって0に整理されます。

いくつかの式では radcanは特殊な時間消費をします。 これは因数分解や指数関数の部分分解展開に基づいた整理のための式のコンポーネントの間のある関係を探求するコストです。

例:

 
(%i1) radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
                                    a/2
(%o1)                     log(x + 1)
(%i2) radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
(%o2)                           2
(%i3) radcan((%e^x-1)/(1+%e^(x/2)));
                              x/2
(%o3)                       %e    - 1

Categories:  Simplification functions

オプション変数: radexpand

デフォルト値: true

radexpandは根号のいくつかの整理を制御します。

radexpandallの時 n乗の積の因子のn番目の根を根号の外に出すようにします。 例えば、もしradexpandallなら、 sqrt (16*x^2)4*xに整理されます。

特に sqrt (x^2)を考えます。

domainradexpandtrueの時だけ 意味を持つことに注意してください。

プロパティ: rassociative

declare (g, rassociative)は Maximaの整理器に gが右結合であることを知らせます。 例えば、 g(g(a, b), g(c, d))g(a, g(b, g(c, d)))に整理されます。

関数: scsimp (expr, rule_1, ..., rule_n)

順次比較整理 (Stouteによる方法)。 scsimpは、 規則 rule_1, ..., rule_nに従って、 exprを整理しようとします。 もしより小さな式が得られたら、 プロセスは繰り返されます。 そうでなければ、すべての整理が試された後、 元の答えを返します。

example (scsimp)はいくつかの例を表示します。

Categories:  Simplification functions

オプション変数: simp

デフォルト値: true

simpは整理を有効にします。 これはデフォルトです。 simpevflagでもあります。 それは関数 evに認識されます。 evを参照してください。

simpが値 falseevflagとして使われる時、 式の評価フェイズの間だけ整理は抑制されます。 フラグは評価フェイズに続く整理を抑制しません。

多くの Maxima関数や演算子は 正常に機能することを可能にするために整理を要求します。 整理が無効になっている時、多くの結果は不備があり、 加えて、不正確な結果であったりプログラムエラーになったりします。

例:

グローバルに整理をスイッチオフします。 式 sin(1.0)は数値に整理されません。 simp-フラグは整理をオンにスイッチします。

 
(%i1) simp:false;
(%o1)                         false
(%i2) sin(1.0);
(%o2)                       sin(1.0)
(%i3) sin(1.0),simp;
(%o3)                  0.8414709848078965

整理を再びスイッチオンします。 simp-フラグは完全には整理を抑制できません。 割り当ては式の評価フェイズの間に起こるので、 出力は整理された式を示しますが、変数 xは値として未整理の式を持ちます。

 
(%i1) simp:true;
(%o1)                         true
(%i2) x:sin(1.0),simp:false;
(%o2)                  0.8414709848078965
(%i3) :lisp $x
((%SIN) 1.0)

Categories:  Evaluation flags

プロパティ: symmetric

declare (h, symmetric)は Maximaの整理器に hが対称関数であることを知らせます。 例えば、h (x, z, y)h (x, y, z)に整理されます。

commutativesymmetricと同義です。

関数: xthru (expr)

(和の) exprのすべての項を 共通分母上で ratsimpがするように積や指数和を展開することなしに結合させます。 因子が陽であるときだけ、 xthruは有理式の分子と分母の共通因子を消去します。

分子と分母の最大公約数の陽因子を消去するために、式を ratsimpする前に xthruを使うのがよい場合があります。

 
(%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
                                20
                 1       (x + 2)   - 2 y       x
(%o1)        --------- + --------------- - ---------
                    19             20             20
             (y + x)        (y + x)        (y + x)
(%i2) xthru (%);
                                 20
                          (x + 2)   - y
(%o2)                     -------------
                                   20
                            (y + x)

Categories:  Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10. Mathematical Functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1 Functions for Numbers

関数: abs (z)

abs関数は数学的な絶対値関数を表し、数値とシンボルどちらにも機能します。 もし zが実数か複素数なら abszの絶対値を返します。 可能なら、絶対値関数を使ったシンボル式も整理します。

Maximaは absを含む式に関して微分したり、積分したり極限を取ったりできます。 abs_integrateパッケージは、 abs関数を含む積分を計算するように Maximaの機能をさらに拡張します。 以下の例の中の(%i12)を参照してください。

リストや行列に適用した時、 absは自動的に項目上に分配されます。 同様に等式の両辺上に分配されます。 この振る舞いを変えるには、変数 distribute_overを参照してください。

cabsも参照してください。

例:

数値定数や様々な無限大を含む、実数や複素数に関する absの計算。 一番目の例は absがリストの要素上にいかに分配されるか示します。

 
(%i1) abs([-4, 0, 1, 1+%i]);
(%o1)                  [4, 0, 1, sqrt(2)]

(%i2) abs((1+%i)*(1-%i));
(%o2)                           2
(%i3) abs(%e+%i);
                                2
(%o3)                    sqrt(%e  + 1)
(%i4) abs([inf, infinity, minf]);
(%o4)                   [inf, inf, inf]

absを含む式の整理:

 
(%i5) abs(x^2);
                                2
(%o5)                          x
(%i6) abs(x^3);
                             2
(%o6)                       x  abs(x)

(%i7) abs(abs(x));
(%o7)                       abs(x)
(%i8) abs(conjugate(x));
(%o8)                       abs(x)

abs関数を伴う積分と微分。 abs_integrateパッケージをロードすると、 abs関数を含む積分は更に実行することが可能であることに注意してください。 最後の例はabsのラプラス変換を示します: laplaceを参照してください。

 
(%i9) diff(x*abs(x),x),expand;
(%o9)                       2 abs(x)

(%i10) integrate(abs(x),x);
                             x abs(x)
(%o10)                       --------
                                2

(%i11) integrate(x*abs(x),x);
                           /
                           [
(%o11)                     I x abs(x) dx
                           ]
                           /

(%i12) load(abs_integrate)$
(%i13) integrate(x*abs(x),x);
                      2           3
                     x  abs(x)   x  signum(x)
(%o13)               --------- - ------------
                         2            6

(%i14) integrate(abs(x),x,-2,%pi);
                               2
                            %pi
(%o14)                      ---- + 2
                             2

(%i15) laplace(abs(x),x,s);
                               1
(%o15)                         --
                                2
                               s

Categories:  Mathematical functions

関数: ceiling (x)

xが実数の時 x以上の最小の整数を返します。

もし xが定数式(例えば 10 * %pi)なら、 ceilingxを多倍長浮動小数点数を使って評価し、 その多倍長浮動小数点数に ceilingを適用します。 ほとんど起こりそうにないですが、 ceilingは浮動小数点を使うので、 ceilingは定数入力に対して間違った値を返す可能性があります。 このエラーを起こさないようにするには fpprecの3つの値を使って浮動小数点評価を行います。

定数でない入力に関しては ceilingは整理された値を返そうとします。 以下は ceilingが知っている式整理の例です:

 
(%i1) ceiling (ceiling (x));
(%o1)                      ceiling(x)
(%i2) ceiling (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
(%o4)                [n, abs(n), max(6, n)]
(%i5) assume (x > 0, x < 1)$
(%i6) ceiling (x);
(%o6)                           1
(%i7) tex (ceiling (a));
$$\left \lceil a \right \rceil$$
(%o7)                         false

関数 ceilingはリスト、行列、方程式上に展開されます。 distribute_over.を参照してください。

最終的に、明らかに複雑な入力すべてに対して ceilingは名詞形を返します。

もし関数の範囲が整数の部分集合なら integervaluedに宣言できます。 ceiling, floor関数両方ともこの情報を使います; 例えば:

 
(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1

使用例:

 
(%i1) unitfrac(r) := block([uf : [], q],
    if not(ratnump(r)) then
       error("unitfrac: argument must be a rational number"),
    while r # 0 do (
        uf : cons(q : 1/ceiling(1/r), uf),
        r : r - q),
    reverse(uf));
(%o1) unitfrac(r) := block([uf : [], q],
if not ratnump(r) then error("unitfrac: argument must be a rational number"
                                     1
), while r # 0 do (uf : cons(q : ----------, uf), r : r - q),
                                         1
                                 ceiling(-)
                                         r
reverse(uf))
(%i2) unitfrac (9/10);
                            1  1  1
(%o2)                      [-, -, --]
                            2  3  15
(%i3) apply ("+", %);
                               9
(%o3)                          --
                               10
(%i4) unitfrac (-9/10);
                                  1
(%o4)                       [- 1, --]
                                  10
(%i5) apply ("+", %);
                                9
(%o5)                         - --
                                10
(%i6) unitfrac (36/37);
                        1  1  1  1    1
(%o6)                  [-, -, -, --, ----]
                        2  3  8  69  6808
(%i7) apply ("+", %);
                               36
(%o7)                          --
                               37

Categories:  Mathematical functions

関数: entier (x)

xが数値の場合 x以下の最大の整数を返します。 (fixnumにおける) fixはこれの別名で、 fix(x)はまさに同じです。

Categories:  Mathematical functions

関数: floor (x)

xが実数の時 x以下の最大の整数を返します。

もしxが定数式(例えば 10 * %pi)なら、 floorは多倍長浮動小数点数を使って xを評価し、 結果の多倍長浮動小数点にfloorを適用します。 ほとんど起こりそうにないですが、 floorは浮動小数点を使うので floorは定数入力に対して間違った値を返す可能性があります。 このエラーを起こさないようにするには fpprecの3つの値を使って浮動小数点評価を行います。

定数でない入力に関しては floorは整理された値を返そうとします。 以下は ceilingが知っている式整理の例です:

 
(%i1) floor (ceiling (x));
(%o1)                      ceiling(x)
(%i2) floor (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
(%o4)                [n, abs(n), min(6, n)]
(%i5) assume (x > 0, x < 1)$
(%i6) floor (x);
(%o6)                           0
(%i7) tex (floor (a));
$$\left \lfloor a \right \rfloor$$
(%o7)                         false

関数 floorはリスト、行列、方程式上に展開されます。 distribute_over.を参照してください。

最終的に、明らかに複雑な入力すべてに対して floorは名詞形を返します。

もし関数の範囲が整数の部分集合なら、 integervaluedに宣言できます。 ceiling, floor関数両方ともこの情報を使います; 例えば:

 
(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1

Categories:  Mathematical functions

関数: fix (x)

entier (x)の別名です。

Categories:  Mathematical functions

関数: lmax (L)

Lがリストか集合の時 apply ('max, args (L))を返します。 Lがリストでも集合でもない時エラーを示します。

Categories:  Mathematical functions · Lists · Sets

関数: lmin (L)

Lがリストか集合の時 apply ('min, args (L))を返します。 Lがリストでも集合でもない時エラーを示します。

Categories:  Mathematical functions · Lists · Sets

関数: max (x_1, ..., x_n)

x_1から x_nの中の最大値に関して整理された値を返します。 get (trylevel, maxmin)が2以上の時、 maxは式整理 max (e, -e) --> |e|を使います。 get (trylevel, maxmin)が3以上の時、 maxは2つの他の引数の間の式を消去しようとします; 例えば max (x, 2*x, 3*x) --> max (x, 3*x)trylevelを2に設定するには put (trylevel, 2, maxmin)を使います。

Categories:  Mathematical functions

関数: min (x_1, ..., x_n)

x_1から x_nの中の最小値に関して整理された値を返します。 get (trylevel, maxmin)が2以上の時、 maxは式整理 max (e, -e) --> |e|を使います。 get (trylevel, maxmin)が3以上の時、 maxは2つの他の引数の間の式を消去しようとします; 例えば max (x, 2*x, 3*x) --> max (x, 3*x)trylevelを2に設定するには put (trylevel, 2, maxmin)を使います。

maxlmin.も参照してください。

Categories:  Mathematical functions

関数: round (x)

xが実数の時 xに最も近い整数を返します。 1/2を掛けてroundして2を掛けると最も近い偶数に丸められます。 xの評価は floorceilingに似ています。

関数 roundはリスト、行列、方程式上に展開されます。 distribute_over.を参照してください。

Categories:  Mathematical functions

関数: signum (x)

実数か複素数 xに対して、もしxが0ならsignum関数は0を返します; ゼロでない数値入力 xに対して、signum関数は x/abs(x)を返します。

非数値入力に対して Maximaは入力の符号を決定しようと試みます。 符号が負、ゼロ、正いずれかの時 signumはそれぞれ、-1, 0, 1を返します。 符号に関する他の値すべてに対して signumは式整理された同値形を返します。 式整理は (signum(-x)-signum(x)を与える)反転と (signum(x*y)signum(x) * signum(y)を与える)乗法恒等式を含みます。

signum 関数はリスト、行列もしくは等式上に分配されます。 distribute_overを参照してください。

Categories:  Mathematical functions

関数: truncate (x)

xが実数の時、 絶対値が xよりも大きくない xに最も近い整数 xの評価は floorceiling.と同じです。

関数 truncateはリスト、行列、方程式上に展開されます。 distribute_over.を参照してください。

Categories:  Mathematical functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2 Functions for Complex Numbers

関数: cabs (expr)

複素数を表す式の絶対値を計算します。 関数 absと異なり、 cabs関数は常に引数を実部と虚部に分解します。 もし xyが実変数か実数式を表すなら、 cabs関数は x + %i*yの絶対値を以下のように計算します。

 
(%i1) cabs (1);
(%o1)                           1
(%i2) cabs (1 + %i);
(%o2)                        sqrt(2)
(%i3) cabs (exp (%i));
(%o3)                           1
(%i4) cabs (exp (%pi * %i));
(%o4)                           1
(%i5) cabs (exp (3/2 * %pi * %i));
(%o5)                           1
(%i6) cabs (17 * exp (2 * %i));
(%o6)                          17

もし cabsが名詞形を返すなら、 これはもっとも一般的には含まれる変数のプロパティが既知でないことによるものです:

 
(%i1) cabs (a+%i*b);
                                2    2
(%o1)                     sqrt(b  + a )
(%i2) declare(a,real,b,real);
(%o2)                         done
(%i3) cabs (a+%i*b);
                                2    2
(%o3)                     sqrt(b  + a )
(%i4) assume(a>0,b>0);
(%o4)                    [a > 0, b > 0]
(%i5) cabs (a+%i*b);
                                2    2
(%o5)                     sqrt(b  + a )

cabs関数は、式の絶対値を計算するのを助けるため、 複素関数の対称性プロパティ既知のプロパティを使うことができます。 もしそんな恒等式が存在するなら、 関数プロパティを使って cabsに知らせることができます。 cabsが理解する対称性は以下のものです: 鏡像対称, 共役関数, 複素特性。

cabsは動詞関数であり、シンボル計算には適しません。 (絶対値を含む式の積分、微分、極限を含む)そんな計算には absを使ってください。

cabsの結果は絶対値関数 absや逆正接 atan2を含むことがあります。

リストや行列に適用されると、 cabsは自動的に項目上に分配されます。 同様に等式の両辺上に分配されます。

複素数を使って計算する更なる方法には、 関数 rectform, realpart, imagpart, carg, conjugate, polarformを参照してください。

例:

sqrtsinを使った例。

 
(%i1) cabs(sqrt(1+%i*x));
                             2     1/4
(%o1)                      (x  + 1)
(%i2) cabs(sin(x+%i*y));
                    2        2         2        2
(%o2)       sqrt(cos (x) sinh (y) + sin (x) cosh (y))

複素偏角を使った絶対値の計算で使われる誤差関数。 erfは鏡像対称性を持ちます。

 
(%i3) cabs(erf(x+%i*y));
                                          2
           (erf(%i y + x) - erf(%i y - x))
(%o3) sqrt(--------------------------------
                          4
                                                               2
                                (erf(%i y + x) + erf(%i y - x))
                              - --------------------------------)
                                               4

Maximaは Bessel関数の複素恒等式を知っています。 そのおかげで複素偏角に関する絶対値を計算できます。 以下は bessel_jに関する例です。

 
(%i4) cabs(bessel_j(1,%i));
(%o4)                 abs(bessel_j(1, %i))

Categories:  Complex variables

関数: carg (z)

zの複素偏角を返します。 複素偏角は r exp (theta %i) = zrzの絶対値)を満たす (-%pi, %pi]の間の角thetaです。

cargは計算関数であって、式整理関数ではありません。

abs (複素絶対値), polarform, rectform, realpart, imagpartも参照してください。

例:

 
(%i1) carg (1);
(%o1)                           0
(%i2) carg (1 + %i);
                               %pi
(%o2)                          ---
                                4
(%i3) carg (exp (%i));
                               sin(1)
(%o3)                     atan(------)
                               cos(1)
(%i4) carg (exp (%pi * %i));
(%o4)                          %pi
(%i5) carg (exp (3/2 * %pi * %i));
                                %pi
(%o5)                         - ---
                                 2
(%i6) carg (17 * exp (2 * %i));
                            sin(2)
(%o6)                  atan(------) + %pi
                            cos(2)

If carg returns a noun form this most communly is caused by some properties of the variables involved not being known:

 
(%i1) carg (a+%i*b);
(%o1)                      atan2(b, a)
(%i2) declare(a,real,b,real);
(%o2)                         done
(%i3) carg (a+%i*b);
(%o3)                      atan2(b, a)
(%i4) assume(a>0,b>0);
(%o4)                    [a > 0, b > 0]
(%i5) carg (a+%i*b);
                                  b
(%o5)                        atan(-)
                                  a

Categories:  Complex variables

関数: conjugate (x)

xの複素共役を返します。

 
(%i1) declare ([aa, bb], real, cc, complex, ii, imaginary);
(%o1)                         done
(%i2) conjugate (aa + bb*%i);
(%o2)                      aa - %i bb
(%i3) conjugate (cc);
(%o3)                     conjugate(cc)
(%i4) conjugate (ii);
(%o4)                         - ii
(%i5) conjugate (xx + yy);
(%o5)                        yy + xx

Categories:  Complex variables

関数: imagpart (expr)

exprの虚部を返します。

imagpartは、計算関数であり、整理関数ではありません。

abs, carg, polarform, rectform, realpartも参照してください。

例:

 
(%i1) imagpart (a+b*%i);
(%o1)                           b
(%i2) imagpart (1+sqrt(2)*%i);
(%o2)                        sqrt(2)
(%i3) imagpart (1);
(%o3)                           0
(%i4) imagpart (sqrt(2)*%i);
(%o4)                        sqrt(2)

Categories:  Complex variables

関数: polarform (expr)

exprと同値な式 r %e^(%i theta)を返します。 ここで rthetaは純粋な実数です。

例:

 
(%i1) polarform(a+b*%i);
                       2    2    %i atan2(b, a)
(%o1)            sqrt(b  + a ) %e
(%i2) polarform(1+%i);
                                  %i %pi
                                  ------
                                    4
(%o2)                   sqrt(2) %e
(%i3) polarform(1+2*%i);
                                %i atan(2)
(%o3)                 sqrt(5) %e

関数: realpart (expr)

exprの実部を返します。 realpartimagpartは、 平方根、対数関数、指数関数はもちろん三角関数や双曲関数を含む式上で機能します。

例:

 
(%i1) realpart (a+b*%i);
(%o1)                           a
(%i2) realpart (1+sqrt(2)*%i);
(%o2)                           1
(%i3) realpart (sqrt(2)*%i);
(%o3)                           0
(%i4) realpart (1);
(%o4)                           1

Categories:  Complex variables

関数: rectform (expr)

exprと同値な式 a + b %iを返します。 ここで abは純粋な実数です。

例:

 
(%i1) rectform(sqrt(2)*%e^(%i*%pi/4));
(%o1)                        %i + 1
(%i2) rectform(sqrt(b^2+a^2)*%e^(%i*atan2(b, a)));
(%o2)                       %i b + a
(%i3) rectform(sqrt(5)*%e^(%i*atan(2)));
(%o3)                       2 %i + 1

Categories:  Complex variables


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.3 Combinatorial Functions

演算子: !!

二重階乗演算子。

整数や浮動小数点、有理数 nに対して、 n!!は積 n (n-2) (n-4) (n-6) ... (n - 2 (k - 1))kentier (n/2)、すなわち n/2以下の最大整数に等しい)に評価されます。 この定義は非整数の引数に対して他の出版物の定義と一致しないことに注意してください。

偶数(もしくは奇数) nに対して、 n!!は2(もしくは1)からnまでのすべての偶数(もしくは奇数)の積に評価されます。

整数でも浮動小数点でも有理数でもない引数 nに対して、 n!!は名詞形 genfact (n, n/2, 2)を返します。

関数: binomial (x, y)

二項係数 x!/(y! (x - y)!)。 もし xyが整数なら、 二項係数の数値が計算されます。 もし yx - yが整数なら、 二項係数は多項式として表現されます。

例:

 
(%i1) binomial (11, 7);
(%o1)                          330
(%i2) 11! / 7! / (11 - 7)!;
(%o2)                          330
(%i3) binomial (x, 7);
        (x - 6) (x - 5) (x - 4) (x - 3) (x - 2) (x - 1) x
(%o3)   -------------------------------------------------
                              5040
(%i4) binomial (x + 7, x);
      (x + 1) (x + 2) (x + 3) (x + 4) (x + 5) (x + 6) (x + 7)
(%o4) -------------------------------------------------------
                               5040
(%i5) binomial (11, y);
(%o5)                    binomial(11, y)

Categories:  Number theory

関数: factcomb (expr)

例えば、 (n + 1)*n!(n + 1)!に変換することによって、 exprの中の階乗の係数を階乗それ自身と結合しようとします。

もし sumsplitfactfalseに設定されたなら、 minfactorialfactcombの後適用されるようになります。

例:

 
(%i1) sumsplitfact;
(%o1)                         true
(%i2) (n + 1)*(n + 1)*n!;
                                  2
(%o2)                      (n + 1)  n!
(%i3) factcomb (%);
(%o3)                  (n + 2)! - (n + 1)!
(%i4) sumsplitfact: not sumsplitfact;
(%o4)                         false
(%i5) (n + 1)*(n + 1)*n!;
                                  2
(%o5)                      (n + 1)  n!
(%i6) factcomb (%);
(%o6)                 n (n + 1)! + (n + 1)!

関数: factorial
演算子: !

階乗演算子。

(整数、有理数、実数を含む)負の整数を除いた任意の複素数 xに対して、 x!gamma(x+1)として定義されます。

整数 xに対して、 x!は1からxまでの整数の積に整理されます。 0!は1に整理されます。 浮動小数点または多倍長浮動小数点精度の実数または複素数 xに対して、 x!gamma(x+1)の値に整理されます。 xn/2nは奇数)に等しい時、 (gamma (1/2)sqrt (%pi)に等しいから) x!は有理因子に sqrt (%pi)を掛けたものに整理されます。

変数 factlim, gammalimは整数や有理数の引数の階乗の数値評価を制御します。 関数 minfactorial, factcombは階乗を含む式の整理を制御します。 factlim, gammalim, minfactorial, factcombを参照してください。

関数 gamma, bffac, cbffacはガンマ関数の変形です。 多倍長浮動小数点精度の実数と複素数のガンマ関数を評価するために gammaは内部で bffaccbffacをコールします。

makegammaは階乗や関係した関数に gammaを代入します。

Maximaは階乗関数の導関数や、負の整数のような特殊な値の極限を知っています。

オプション変数 factorial_expand(n+x)!のような式の整理を制御します。 ここで nは整数です。

binomialも参照してください。

オペランドが factlimより大きくないなら、整数の階乗は正確な値に整理されます。 実数と複素数の階乗は浮動小数点または多倍長浮動小数点精度に評価されます。

 
(%i1) factlim : 10;
(%o1)                          10
(%i2) [0!, (7/2)!, 8!, 20!];
                     105 sqrt(%pi)
(%o2)            [1, -------------, 40320, 20!]
                          16
(%i3) [4,77!, (1.0+%i)!];
(%o3) [4, 77!, 0.3430658398165453 %i + 0.6529654964201667]
(%i4) [2.86b0!, 1.0b0+%i)!];
incorrect syntax: Missing ]
[2.86b0!, 1.0b0+%i)
                 ^

既知の定数や一般式の階乗は整理されません。 オペランドを評価した後階乗を整理できたとしても整理はされません。

 
(%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
(%o1)      [(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
(%i2) ev (%, numer, %enumer);
(%o2) [0.3430658398165453 %i + 0.6529654964201667,
         7.188082728976031, 4.260820476357003, 1.227580202486819]

階乗の計算は整理であって評価ではありません。 従って x!はクォートされた式の中でも置き換えられます。

 
(%i1) '([0!, (7/2)!, 4.77!, 8!, 20!]);
          105 sqrt(%pi)
(%o1) [1, -------------, 81.44668037931197, 40320,
               16
                                             2432902008176640000]

Maximaは階乗関数の導関数を知っています。

 
(%i1) diff(x!,x);
(%o1)                    x! psi (x + 1)
                               0

オプション変数factorial_expandは階乗関数を含む式の展開と整理を制御します。

 
(%i1) (n+1)!/n!,factorial_expand:true;
(%o1)                         n + 1

オプション変数: factlim

デフォルト値: 100000

factlimは自動的に展開される最高の階乗を指定します。 もし-1ならすべての整数は展開されます。

オプション変数: factorial_expand

デフォルト値: false

オプション変数factorial_expand(n+1)!のような式の整理を制御します。 ここで nは整数です。 例は !を参照してください。

関数: genfact (x, y, z)

一般化された階乗を返します。 x (x-z) (x - 2 z) ... (x - (y - 1) z)のように定義されます。 それゆえに、 xが整数の時、 genfact (x, x, 1) = x!であり、genfact (x, x/2, 2) = x!!です。

関数: minfactorial (expr)

整数だけ違う2つの階乗の出現に関して exprを検査します。 そして、minfactorialは一方を多項式掛ける他方に変えます。

 
(%i1) n!/(n+2)!;
                               n!
(%o1)                       --------
                            (n + 2)!
(%i2) minfactorial (%);
                                1
(%o2)                    ---------------
                         (n + 1) (n + 2)

Categories:  Number theory

オプション変数: sumsplitfact

デフォルト値: true

sumsplitfactfalseの時、 minfactorialfactcombの後に適用されます。

 
(%i1) sumsplitfact;
(%o1)                         true
(%i2) n!/(n+2)!;
                               n!
(%o2)                       --------
                            (n + 2)!
(%i3) factcomb(%);
                               n!
(%o3)                       --------
                            (n + 2)!
(%i4) sumsplitfact: not sumsplitfact ;
(%o4)                         false
(%i5) n!/(n+2)!;
                               n!
(%o5)                       --------
                            (n + 2)!
(%i6) factcomb(%);
                                1
(%o6)                    ---------------
                         (n + 1) (n + 2)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.4 Root, Exponential and Logarithmic Functions

オプション変数: %e_to_numlog

デフォルト値: false

trueの時、 rを有理数、xを式とすると、 %e^(r*log(x))x^rに整理されます。 radcanコマンドもこの変換を行い、 その上この同類のさらに複雑な変換をすることに注意すべきです。 logcontractコマンドは logを含む式を「短縮」します。

オプション変数: %emode

デフォルト値: true

%emodetrueの時、 %e^(%pi %i x)は以下のように整理されます。

もし xが浮動小数点、整数、もしくは1/2, 1/3, 1/4, 1/6の整数倍なら、 %e^(%pi %i x)cos (%pi x) + %i sin (%pi x)に整理された後、 さらに整理されます。

他の数値xに関して、 %e^(%pi %i x)%e^(%pi %i y)に整理されます。 ここで yx - 2 kkabs(y) < 1が成り立つような整数)です。

%emodefalseの時には、 %e^(%pi %i x)の特別な整理は実行されません。

 
(%i1) %emode;
(%o1)                         true
(%i2) %e^(%pi*%i*1);
(%o2)                          - 1
(%i3) %e^(%pi*%i*216/144);
(%o3)                         - %i
(%i4) %e^(%pi*%i*192/144);
                          sqrt(3) %i    1
(%o4)                  (- ----------) - -
                              2         2
(%i5) %e^(%pi*%i*180/144);
                           %i          1
(%o5)                 (- -------) - -------
                         sqrt(2)    sqrt(2)
(%i6) %e^(%pi*%i*120/144);
                          %i   sqrt(3)
(%o6)                     -- - -------
                          2       2
(%i7) %e^(%pi*%i*121/144);
                            121 %i %pi
                            ----------
                               144
(%o7)                     %e

オプション変数: %enumer

デフォルト値: false

%enumertrueの時、 numertrueの時はいつでも、 %eは数値2.718...に置き換えられます。

%enumerfalseの時、 %e^xの指数が数に評価される時だけ、 この代入が実行されます。

ev, numerも参照してください。

 
(%i1) %enumer;
(%o1)                         false
(%i2) numer;
(%o2)                         false
(%i3) 2*%e;
(%o3)                         2 %e
(%i4) %enumer: not %enumer;
(%o4)                         true
(%i5) 2*%e;
(%o5)                         2 %e
(%i6) numer: not numer;
(%o6)                         true
(%i7) 2*%e;
(%o7)                   5.43656365691809
(%i8) 2*%e^1;
(%o8)                   5.43656365691809
(%i9) 2*%e^x;
                                         x
(%o9)                 2 2.718281828459045

関数: exp (x)

指数関数を表します。 入力にある exp (x)のインスタンスは %e^xに整理されます; expは整理された式の中には現れません。

もし demoivretrueで、かつ、 b%iを含まないなら、 %e^(a + b %i)%e^(a (cos(b) + %i sin(b)))に整理されます。 demoivreを参照してください。

%emodetrueの時、 %e^(%pi %i x)は整理されます。 %emodeを参照してください。

%enumertrueの時、 numertrueの時にはいつでも %eは2.718...に置き換えれます。 %enumerを参照してください。

 
(%i1) demoivre;
(%o1)                         false
(%i2) %e^(a + b*%i);
                             %i b + a
(%o2)                      %e
(%i3) demoivre: not demoivre;
(%o3)                         true
(%i4) %e^(a + b*%i);
                      a
(%o4)               %e  (%i sin(b) + cos(b))

関数: li [s] (z)

次数 s、引数 zの多重対数関数を表します。 これは以下の無限級数で定義されます。

 
                                 inf
                                 ====   k
                                 \     z
                        Li (z) =  >    --
                          s      /      s
                                 ====  k
                                 k = 1

li [1]- log (1 - z)です。 li [2]li [3]はそれぞれ、 dilogarithm関数, trilogarithm関数です。

次数が1の時、多重対数関数は - log (1 - z)に整理され、 もし zが実数もしくは複素数の浮動小数点数か numer評価フラグが有効なら、さらに数値に整理されます。

次数が2もしくは3の時、 もし zが実数の浮動小数点数か numer評価フラグが有効なら、 多重対数関数は数値に整理されます。

例:

 
(%i1) assume (x > 0);
(%o1)                        [x > 0]
(%i2) integrate ((log (1 - t)) / t, t, 0, x);
(%o2)                       - li (x)
                                2
(%i3) li [2] (7);
(%o3)                        li (7)
                               2
(%i4) li [2] (7), numer;
(%o4)       1.248273182099423 - 6.113257028817991 %i
(%i5) li [3] (7);
(%o5)                        li (7)
                               3
(%i6) li [2] (7), numer;
(%o6)       1.248273182099423 - 6.113257028817991 %i
(%i7) L : makelist (i / 4.0, i, 0, 8);
(%o7)   [0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
(%i8) map (lambda ([x], li [2] (x)), L);
(%o8) [0.0, 0.2676526390827326, 0.5822405264650125,
0.978469392930306, 1.644934066848226,
2.190177011441645 - 0.7010261415046585 %i,
2.37439527027248 - 1.2738062049196 %i,
2.448686765338205 - 1.758084848210787 %i,
2.467401100272339 - 2.177586090303601 %i]
(%i9) map (lambda ([x], li [3] (x)), L);
(%o9) [0.0, 0.2584613953442624, 0.537213192678042,
0.8444258046482203, 1.2020569, 1.642866878950322
 - 0.07821473130035025 %i, 2.060877505514697
 - 0.2582419849982037 %i, 2.433418896388322
 - 0.4919260182322965 %i, 2.762071904015935
 - 0.7546938285978846 %i]

関数: log (x)

xの自然対数(基数 eの対数)を表します。

Maximaは、基数10や他の基数の対数の組み込み関数を持ちません。 log10(x) := log(x) / log(10)は、役立つ定義です。

対数の整理と評価はいくつかのグローバルフラグによって管理されます:

logexpand

log(a^b)b*log(a)にします。 もし allに設定されているなら、 log(a*b)log(a)+log(b)に整理されます。 もし superに設定されているなら, 有理数 a/b, a#1に対して log(a/b)log(a)-log(b)に整理されます。 (整数 bに関して log(1/b)はいつも整理されます。) もし falseに設定されているなら これらのすべての整理は止められます。

logsimp

もし falseなら、 %elogを含む累乗へ整理がなされます。

lognegint

もし trueなら、正の整数 nに対して規則 log(-n) -> log(n)+%i*%pi が実装されます。

%e_to_numlog

trueの時、 rをある有理数, xをある式とすると、 式 %e^(r*log(x))x^rに整理されます。 radcanコマンドもこの変換を行い、その上この同類のさらに複雑な変換をすることに注意すべきです。 logcontractコマンドは logを含む式を「短縮」します。

オプション変数: logabs

デフォルト値: false

例えば integrate(1/x,x)のように、logが生成される不定積分を実行する時、 もし logabstrueなら 答えは log(abs(...))の形で与えられ、 もし logabsfalseなら 答えは log(...)の形で与えられます。 定積分については 終端での不定積分の「評価」がしばしば必要になるので logabs:true設定が使われます。

オプション変数: logarc
関数: logarc (expr)

グローバル変数 logarctrueの時、 逆円関数や逆双曲線関数は、同値の対数関数に置き換えられます。 logarcのデフォルト値は falseです。

関数 logarc(expr)は、 グローバル変数 logarcを設定することなしに式 exprに対して上記置き換えを実行します。

オプション変数: logconcoeffp

デフォルト値: false

logcontractを使った時、どの係数が短縮されるかを制御します。 引数1つの述語論理関数の名前に設定することができます。 例えば、もしSQRTを生成したいなら、 logconcoeffp:'logconfun$ logconfun(m):=featurep(m,integer) or ratnump(m)$を実行できます。 すると、 logcontract(1/2*log(x));log(sqrt(x))を与えるでしょう。

関数: logcontract (expr)

形式 a1*log(b1) + a2*log(b2) + cの部分式を log(ratsimp(b1^a1 * b2^a2)) + cに変換しながら、 再帰的に式 exprを走査します。

 
(%i1) 2*(a*log(x) + 2*a*log(y))$
(%i2) logcontract(%);
                                 2  4
(%o2)                     a log(x  y )

declare(n,integer);を実行すると、 logcontract(2*a*n*log(x));a*log(x^(2*n))に整理されます。 この方法で「短縮」される係数はここで2やnに当たるもので、 featurep(coeff,integer)を満たします。 ユーザーは、 オプション logconcoeffpを引数1つの述語論理関数名に設定することで、 どの係数を短縮するか制御できます。 例えば、もしSQRTを生成したいなら、 logconcoeffp:'logconfun$ logconfun(m):=featurep(m,integer) or ratnump(m)$を実行できます。 すると、 logcontract(1/2*log(x));log(sqrt(x))を与えるでしょう。

オプション変数: logexpand

デフォルト値: true

もし true―これがデフォルト値です―なら、 log(a^b)b*log(a)になるようにします。 もし allに設定されているなら、 log(a*b)log(a)+log(b)に整理されます。 もし superに設定されているなら, 有理数 a/b, a#1に対して、 log(a/b)log(a)-log(b)に整理されます。 (整数 bに対して log(1/b)はいつも整理されます。) もし falseに設定されているなら、 これらのすべての整理は止められます。

logexpandallsuperに設定されている時、 積式の対数は対数の和に整理されます。

例:

logexpandtrueの時、 log(a^b)b*log(a)に整理されます。

 
(%i1) log(n^2), logexpand=true;
(%o1)                       2 log(n)

logexpandallの時、 log(a*b)log(a)+log(b)に整理されます。

 
(%i1) log(10*x), logexpand=all;
(%o1)                   log(x) + log(10)

logexpandsuperの時、 a#1の有理数 a/bに対して log(a/b)log(a)-log(b)に整理されます。

 
(%i1) log(a/(n + 1)), logexpand=super;
(%o1)                  log(a) - log(n + 1)

logexpandallsuperに設定されている時、 積式の対数は対数の和に整理されます。

 
(%i1) my_product : product (X(i), i, 1, n);
                             n
                           /===\
                            ! !
(%o1)                       ! !  X(i)
                            ! !
                           i = 1
(%i2) log(my_product), logexpand=all;
                          n
                         ====
                         \
(%o2)                     >    log(X(i))
                         /
                         ====
                         i = 1
(%i3) log(my_product), logexpand=super;
                          n
                         ====
                         \
(%o3)                     >    log(X(i))
                         /
                         ====
                         i = 1

logexpandfalseの時、 これらの整理は無効になります。

 
(%i1) logexpand : false $
(%i2) log(n^2);
                                  2
(%o2)                        log(n )
(%i3) log(10*x);
(%o3)                       log(10 x)
(%i4) log(a/(n + 1));
                                 a
(%o4)                      log(-----)
                               n + 1
(%i5) log ('product (X(i), i, 1, n));
                               n
                             /===\
                              ! !
(%o5)                    log( ! !  X(i))
                              ! !
                             i = 1

オプション変数: lognegint

デフォルト値: false

もし trueなら正の整数 nに対して規則 log(-n) -> log(n)+%i*%pi が実装されます。

オプション変数: logsimp

デフォルト値: true

もし falseなら、 %elogを含む累乗へ整理がなされます。

関数: plog (x)

-%pi < carg(x) <= +%piを虚部係数とする複素数値の自然対数の主値を表します。

関数: sqrt (x)

xの平方根。 内部的には x^(1/2)で表現されます。 rootscontractradexpandも参照してください。

Categories:  Mathematical functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5 Trigonometric Functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.1 Introduction to Trigonometric

Maximaは定義されたたくさんの三角関数を持ちます。 すべての三角恒等式がプログラムされているわけではありませんが、 ユーザーはシステムのパターンマッチング能力を使ってそれらの多くを追加することができます。 Maximaで定義された三角関数は以下の通りです: acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh, cos, cosh, cot, coth, csc, csch, sec, sech, sin, sinh, tan, tanh。 特に三角関数を扱うためのたくさんのコマンドがあります。 trigexpand, trigreduce, スイッチtrigsignを参照してください。 2つの共用パッケージ ntrig, atrig1は、 Maximaに組み込まれた整理規則を拡張します。 詳しくは describe(command)を実行してください。

Categories:  Trigonometric functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5.2 Functions and Variables for Trigonometric

オプション変数: %piargs

デフォルト値: true

%piargstrueの時で、 引数が %pi, %pi/2, %pi/3, %pi/4, %pi/6のいずれか の整数倍の時は、 三角関数が代数定数に整理されます。

Maximaは %pi などが整数変数(すなわち、整数に宣言されたシンボル)倍された時適用できる いくつかの恒等式を知っています。

例:

 
(%i1) %piargs : false$
(%i2) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                %pi       %pi
(%o2)            [sin(%pi), sin(---), sin(---)]
                                 2         3
(%i3) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                      %pi       %pi       %pi
(%o3)            [sin(---), sin(---), sin(---)]
                       4         5         6
(%i4) %piargs : true$
(%i5) [sin (%pi), sin (%pi/2), sin (%pi/3)];
                                sqrt(3)
(%o5)                    [0, 1, -------]
                                   2
(%i6) [sin (%pi/4), sin (%pi/5), sin (%pi/6)];
                         1         %pi   1
(%o6)                [-------, sin(---), -]
                      sqrt(2)       5    2
(%i7) [cos (%pi/3), cos (10*%pi/3), tan (10*%pi/3),
       cos (sqrt(2)*%pi/3)];
                1    1               sqrt(2) %pi
(%o7)          [-, - -, sqrt(3), cos(-----------)]
                2    2                    3

%pi%pi/2 が整数変数にかけられた時、いくつかの恒等式が適用されます。

 
(%i1) declare (n, integer, m, even)$
(%i2) [sin (%pi * n), cos (%pi * m), sin (%pi/2 * m),
       cos (%pi/2 * m)];
                                      m/2
(%o2)                  [0, 1, 0, (- 1)   ]

オプション変数: %iargs

デフォルト値: true

%iargstrueの時、 引数が明らかに虚数単位 %i を掛けたものの時、 三角関数が双曲線関数に整理されます。

引数が明らかに実数の時でさえ整理が実行されます; Maximaはただ、引数が %i を文字通り掛けたものかどうかを考慮します。

例:

 
(%i1) %iargs : false$
(%i2) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o2)           [sin(%i x), cos(%i x), tan(%i x)]
(%i3) %iargs : true$
(%i4) [sin (%i * x), cos (%i * x), tan (%i * x)];
(%o4)           [%i sinh(x), cosh(x), %i tanh(x)]

引数が明らかに実数の時でさえ整理が実行されます。

 
(%i1) declare (x, imaginary)$
(%i2) [featurep (x, imaginary), featurep (x, real)];
(%o2)                     [true, false]
(%i3) sin (%i * x);
(%o3)                      %i sinh(x)

関数: acos (x)

- 逆余弦

Categories:  Trigonometric functions

関数: acosh (x)

- 逆双曲余弦

Categories:  Hyperbolic functions

関数: acot (x)

- 逆余接

Categories:  Trigonometric functions

関数: acoth (x)

- 逆双曲余接

Categories:  Hyperbolic functions

関数: acsc (x)

- 逆余割

Categories:  Trigonometric functions

関数: acsch (x)

- 逆双曲余割

Categories:  Hyperbolic functions

関数: asec (x)

- 逆正割

Categories:  Trigonometric functions

関数: asech (x)

- 逆双曲正割

Categories:  Hyperbolic functions

関数: asin (x)

- 逆正弦

Categories:  Trigonometric functions

関数: asinh (x)

- 逆双曲正弦

Categories:  Hyperbolic functions

関数: atan (x)

- 逆正接

Categories:  Trigonometric functions

関数: atan2 (y, x)

- -%piから %piまでの間の atan(y/x)の値をもたらします。

Categories:  Trigonometric functions

関数: atanh (x)

- 逆双曲正接

Categories:  Hyperbolic functions

パッケージ: atrig1

atrig1パッケージは、逆三角関数のためのいくつかの追加の整理規則を含みます。 Maximaが既に知っている規則と合わせて、 以下の角度が完全に実装されます: 0, %pi/6, %pi/4, %pi/3, %pi/2。 他の3象限の対応する角度も利用可能です。 これらを使うには load(atrig1);を実行してください。

関数: cos (x)

- 余弦

Categories:  Trigonometric functions

関数: cosh (x)

- 双曲余弦

Categories:  Hyperbolic functions

関数: cot (x)

- 余接

Categories:  Trigonometric functions

関数: coth (x)

- 双曲余接

Categories:  Hyperbolic functions

関数: csc (x)

- 余割

Categories:  Trigonometric functions

関数: csch (x)

- 双曲余割

Categories:  Hyperbolic functions

オプション変数: halfangles

デフォルト値: false

halfanglestrueの時、 引数 expr/2の三角関数は exprの関数に整理されます。

区間 0 < x < 2*%piの実引数 xに対して 半角の正弦は簡単な公式に整理されます:

 
                         sqrt(1 - cos(x))
                         ----------------
                             sqrt(2)

複雑な因子は すべての複素引数 zでこの公式を正しくするために必要です:

           realpart(z)
     floor(-----------)
              2 %pi
(- 1)                   (1 - unit_step(- imagpart(z))

                            realpart(z)            realpart(z)
                      floor(-----------) - ceiling(-----------)
                               2 %pi                  2 %pi
                ((- 1)                                          + 1))

Maximaは、この因子と、 関数sin, cos, sinh, coshに関する類似の因子を知っています。 引数zの特別な値に対してこれらの因子は相応に整理されます。

例:

 
(%i1) halfangles : false$
(%i2) sin (x / 2);
                                 x
(%o2)                        sin(-)
                                 2
(%i3) halfangles : true$
(%i4) sin (x / 2);
                            x
                    floor(-----)
                          2 %pi
               (- 1)             sqrt(1 - cos(x))
(%o4)          ----------------------------------
                            sqrt(2)
(%i5) assume(x>0, x<2*%pi)$
(%i6) sin(x / 2);
                        sqrt(1 - cos(x))
(%o6)                   ----------------
                            sqrt(2)

パッケージ: ntrig

ntrigパッケージは、 引数が形式 f(n %pi/10)fは関数 sin, cos, tan, csc, sec, cotのいずれか―の三角関数を整理するのに使われる整理規則の集合を含みます。

関数: sec (x)

- 正割

Categories:  Trigonometric functions

関数: sech (x)

- 双曲正割

Categories:  Hyperbolic functions

関数: sin (x)

- 正弦

Categories:  Trigonometric functions

関数: sinh (x)

- 双曲正弦

Categories:  Hyperbolic functions

関数: tan (x)

- 正接

Categories:  Trigonometric functions

関数: tanh (x)

- 双曲正接

Categories:  Hyperbolic functions

関数: trigexpand (expr)

exprの中に現れる角の和や角の倍数の三角関数、双曲線関数を展開します。 最もよい結果のためには exprは展開されるべきです。 整理のユーザー制御を強化するために、 この関数は、一度に1レベルのみ、角の和もしくは角の倍数を展開します。 ただちにサインとコサインへの完全な展開を得るには スイッチ trigexpand: trueを設定してください。

trigexpandは以下のグローバルフラグによって決定されます:

trigexpand

もし trueなら、 続いて現れるサインやコサインを含んでいる式すべての展開を起こします。

halfangles

もし trueなら、 半角が整理されます。

trigexpandplus

trigexpandの「和」規則を制御します。 和(例えば sin(x + y))の展開は、 trigexpandplustrueの時だけ起こります。

trigexpandtimes

trigexpandの「積」規則を制御します。 積(例えば sin(2 x))の展開は、 trigexpandtimestrueの時だけ起こります。

例:

 
(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
                         2            2
(%o1)              (- sin (x)) + 3 cos (x) + x
(%i2) trigexpand(sin(10*x+y));
(%o2)          cos(10 x) sin(y) + sin(10 x) cos(y)

オプション変数: trigexpandplus

デフォルト値: true

trigexpandplustrigexpandの「和」規則を制御します。 trigexpandコマンドが使われるか、 trigexpandスイッチが trueに設定されている時 和(例えば sin(x+y)))の展開は、 trigexpandplustrueの時だけ起こります。

オプション変数: trigexpandtimes

デフォルト値: true

trigexpandtimestrigexpandの「積」規則を制御します。 trigexpandコマンドが使われるか、 trigexpandスイッチが trueに設定されている時、 積(例えば sin(2*x))の展開は、 trigexpandtimestrueの時だけ起こります。

オプション変数: triginverses

デフォルト値: true

triginversesは三角関数や双曲線関数とそれらの逆関数の合成の整理を制御します。

もし allなら、 例えば、atan(tan(x))tan(atan(x))のどちらも xに整理されます。

もし trueなら、 arcfun(fun(x))の整理は止められます。

もし falseなら、 arcfun(fun(x))fun(arcfun(x))のどちらの整理も止められます。

関数: trigreduce  
    trigreduce (expr, x)  
    trigreduce (expr)

xを引数とする三角と双曲の正弦、余弦の積とべきを xの倍数のそれらに結合します。 これらの関数が分母に現れた時これらを消去しようともします。 もし xが省略されたら exprの中の変数すべてが使われます。

poissimpも参照してください。

 
(%i1) trigreduce(-sin(x)^2+3*cos(x)^2+x);
               cos(2 x)      cos(2 x)   1        1
(%o1)          -------- + 3 (-------- + -) + x - -
                  2             2       2        2

オプション変数: trigsign

デフォルト値: true

trigsigntrueの時、 三角関数への負の引数の整理を認めます。 例えば、 trigsigntrueの時だけ sin(-x)-sin(x)になります。

関数: trigsimp (expr)

tan, secなどを含む式を sin, cos, sinh, coshに整理するために、 恒等式 sin(x)^2 + cos(x)^2 = 1cosh(x)^2 - sinh(x)^2 = 1 を使います。

trigreduce, ratsimp, radcanは結果を更に整理できるかもしれません。

demo ("trgsmp.dem")trigsimpのいくつかの例を表示します。

関数: trigrat (expr)

三角関数の整理された標準疑似線形形式を与えます; exprsin, cosもしくはtanのいくつかの有理分数であり、 それらの引数は、整数係数を持つ、いくつかの変数(もしくは核)と %pi/n (nは整数)の線形形式です。 結果は sincosに関して線形の分子と分母を持つ整理された分数です。 trigratは可能なときはいつも線形化します。

 
(%i1) trigrat(sin(3*a)/sin(a+%pi/3));
(%o1)            sqrt(3) sin(2 a) + cos(2 a) - 1

以下の例は Davenport, Siret, and TournierのCalcul Formel, Masson (もしくは英語版ではAddison-Wesley), 1.5.5節, モーレイの定理から取られました。

 
(%i1) c : %pi/3 - a - b$
(%i2) bc : sin(a)*sin(3*c)/sin(a+b);
                                           %pi
                 sin(a) sin(3 ((- b) - a + ---))
                                            3
(%o2)            -------------------------------
                           sin(b + a)
(%i3) ba : bc, c=a, a=c;
                                         %pi
                    sin(3 a) sin(b + a - ---)
                                          3
(%o3)               -------------------------
                                  %pi
                          sin(a - ---)
                                   3
(%i4) ac2 : ba^2 + bc^2 - 2*bc*ba*cos(b);
         2         2         %pi
      sin (3 a) sin (b + a - ---)
                              3
(%o4) ---------------------------
                2     %pi
             sin (a - ---)
                       3
                                         %pi
 - (2 sin(a) sin(3 a) sin(3 ((- b) - a + ---)) cos(b)
                                          3
             %pi            %pi
 sin(b + a - ---))/(sin(a - ---) sin(b + a))
              3              3
      2       2                %pi
   sin (a) sin (3 ((- b) - a + ---))
                                3
 + ---------------------------------
                 2
              sin (b + a)
(%i5) trigrat (ac2);
(%o5) - (sqrt(3) sin(4 b + 4 a) - cos(4 b + 4 a)
 - 2 sqrt(3) sin(4 b + 2 a) + 2 cos(4 b + 2 a)
 - 2 sqrt(3) sin(2 b + 4 a) + 2 cos(2 b + 4 a)
 + 4 sqrt(3) sin(2 b + 2 a) - 8 cos(2 b + 2 a) - 4 cos(2 b - 2 a)
 + sqrt(3) sin(4 b) - cos(4 b) - 2 sqrt(3) sin(2 b) + 10 cos(2 b)
 + sqrt(3) sin(4 a) - cos(4 a) - 2 sqrt(3) sin(2 a) + 10 cos(2 a)
 - 9)/4


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.6 Random Numbers

関数: make_random_state  
    make_random_state (n)  
    make_random_state (s)  
    make_random_state (true)  
    make_random_state (false)

ランダムステートオブジェクトは乱数生成器の状態を表します。 状態は627個の32ビットワードで構成されます。

make_random_state (n)nを2^32で割った余りに等しい整数シードの値から新しいランダムステートオブジェクトを 生成します。 nは負でもいいです。

make_random_state (s)はランダムステート sのコピーを返します。

make_random_state (true)は新しいランダムステートオブジェクトを返します。 シードとしてコンピュータの現在時刻を使います。

make_random_state (false)は乱数生成器の現在のステートのコピーを返します。

Categories:  Random numbers

関数: set_random_state (s)

sを乱数生成器状態にコピーします。

set_random_stateはいつも doneを返します。

Categories:  Random numbers

関数: random (x)

疑似乱数を返します。 もし xが整数なら、 random (x)は0からx - 1までの整数を返します。 もし xが浮動小数点なら、 random (x)xより小さい非負の浮動小数点を返します。 もし xが整数でも浮動小数点でもなかったり、xが正でないなら、 randomはエラーを出力します。

関数 make_random_stateset_random_stateは乱数生成器の状態を保守します。

Maximaの乱数生成器はメルセンヌ・ツイスタ MT 19937の実装です。

例:

 
(%i1) s1: make_random_state (654321)$
(%i2) set_random_state (s1);
(%o2)                         done
(%i3) random (1000);
(%o3)                          768
(%i4) random (9573684);
(%o4)                        7657880
(%i5) random (2^75);
(%o5)                11804491615036831636390
(%i6) s2: make_random_state (false)$
(%i7) random (1.0);
(%o7)                  0.2310127244107132
(%i8) random (10.0);
(%o8)                   4.394553645870825
(%i9) random (100.0);
(%o9)                   32.28666704056853
(%i10) set_random_state (s2);
(%o10)                        done
(%i11) random (1.0);
(%o11)                 0.2310127244107132
(%i12) random (10.0);
(%o12)                  4.394553645870825
(%i13) random (100.0);
(%o13)                  32.28666704056853

Categories:  Random numbers · Numerical methods


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11. Maximas Database


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.1 Introduction to Maximas Database


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.2 Functions and Variables for Properties

プロパティ: alphabetic

alphabeticdeclareが認識するプロパティタイプです。 式 declare(s, alphabetic)sの中の文字すべてをアルファベット文字として認識するように Maximaに命じます。 sは文字列でなければいけません。

Identifiersも参照してください。

例:

 
(%i1) xx\~yy\`\@ : 1729;
(%o1)                         1729
(%i2) declare ("~`@", alphabetic);
(%o2)                         done
(%i3) xx~yy`@ + @yy`xx + `xx@@yy~;
(%o3)               `xx@@yy~ + @yy`xx + 1729
(%i4) listofvars (%);
(%o4)                  [@yy`xx, `xx@@yy~]

プロパティ: bindtest

コマンド declare(x, bindtest)xがバインドされずに評価された時、 Maximaにエラーを起こすように命じます。

 
(%i1) aa + bb;
(%o1)                        bb + aa
(%i2) declare (aa, bindtest);
(%o2)                         done
(%i3) aa + bb;
aa unbound variable
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) aa : 1234;
(%o4)                         1234
(%i5) aa + bb;
(%o5)                       bb + 1234

プロパティ: constant

declare(a, constant)aが定数であるように宣言します。 シンボルが定数であるという宣言は定数でない値をシンボルに割り当てることを 妨げません。

constantpdeclareを参照してください。

例:

 
(%i1) declare(c, constant);
(%o1)                         done
(%i2) constantp(c);
(%o2)                         true
(%i3) c : x;
(%o3)                           x
(%i4) constantp(c);
(%o4)                         false

関数: constantp (expr)

もし exprが定数式なら trueを返します。 そうでないなら falseを返します。

もし引数が、(/R/をつけて表示される有理数を含む)数や %pi, %e, %iにようなシンボル定数、定数にバインドされた変数、 declareで宣言された定数、引数が定数の関数のいずれかなら、 式を定数式とみなします。

constantpは引数を評価します。

例:

 
(%i1) constantp (7 * sin(2));
(%o1)                                true
(%i2) constantp (rat (17/29));
(%o2)                                true
(%i3) constantp (%pi * sin(%e));
(%o3)                                true
(%i4) constantp (exp (x));
(%o4)                                false
(%i5) declare (x, constant);
(%o5)                                done
(%i6) constantp (exp (x));
(%o6)                                true
(%i7) constantp (foo (x) + bar (%e) + baz (2));
(%o7)                                false
(%i8)

Categories:  Predicate functions · Constants

関数: declare (a_1, p_1, a_2, p_2, …)

アトムやアトムのリスト a_iにプロパティやプロパティのリスト p_iを割り当てます。 a_ip_iがリストの時、プロパティすべてをアトムのそれぞれが得ます。

declareは引数をクォートします。 declareはいつも doneを返します。

それぞれの宣言フラグに関する記述で注意しているように、 いくつかのフラグに関して、 もし objectfeatureを持つよう宣言されているなら、 featurep(object, feature)trueを返します。

フィーチャーシステムについてさらに知るには features.を参照してください。 アトムからプロパティを削除するには remove.を使ってください。

declareは以下のプロパティを認識します:

additive

代入 a_i(x + y + z + ...) --> a_i(x) + a_i(y) + a_i(z) + ... によって、 a_i式を整理するように Maximaに命じます。 代入は1番目の引数のみで実行されます。

alphabetic

a_iの中の文字すべてをアルファベット文字として認識するように Maximaに命じます。(a_iは文字列でなければいけません。)

antisymmetric, commutative, symmetric

a_iを対称もしくは反対称関数として認識するように Maximaに命じます。 commutativesymmetricと同じです。

bindtest

a_iがバインドされずに評価された時、 Maximaにエラーを起こすように命じます。

constant

a_iをシンボル定数とみなすように Maximaに命じます。

even, odd

a_iを偶数か奇数の整数変数として認識するように Maximaに命じます。

oddfun, evenfun

a_iを偶関数もしくは奇関数として認識するように Maximaに命じます。

evflag

evのフラグ引数として a_iが現れた時、 evの実行中 a_itrueにバインドするように evに命じます。 evflagを参照してください。

evfun

evのフラグ引数として a_iが現れた時、 a_iと名付けられた関数を適用するように evに命じます。 evfunを参照してください。

feature

a_iをフィーチャー名として認識するように Maximaに命じます。 すると他のアトムを a_iプロパティを持つように定義できるようになります。

increasing, decreasing

a_iを単調増加関数か単調減少関数として認識するように Maximaに命じます。

integer, noninteger

a_iを整数変数か非整数変数として認識するように Maximaに命じます。

integervalued

a_iを整数値を返す関数として認識するように Maximaに命じます。

lassociative, rassociative

a_iを右結合か左結合関数として認識するように Maximaに命じます。

linear

a_ioutativeかつ additiveに宣言することと同値です。

mainvar

a_iを「主変数」とみなすように Maximaに命じます。 ordergreatpで決定されるように、 Maximaの式の標準順序では主変数は他のすべての定数や変数に続きます。

multiplicative

代入 a_i(x * y * z * ...) --> a_i(x) * a_i(y) * a_i(z) * ... によって、 a_i式を整理するように Maximaに命じます。 代入は1番目の引数のみで実行されます。

nary

a_iを n項関数として認識するように Maximaに命じます。

nary宣言は nary関数をコールするのとは同じではありません。 declare(foo, nary)だけの効果は、 Maxima整理器をネストされた式を平坦にするように指示することです。 例えば foo(x, foo(y, z))foo(x, y, z)に整理します。

nonarray

a_iを配列でないものとみなすように Maximaに命じます。 この宣言は添字付き変数名の多重評価を抑制します。

nonscalar

a_iを非スカラー変数とみなすように Maximaに命じます。 普通の使い方は変数をシンボルベクトルや行列として宣言することです。

noun

a_iを名詞としてパースするように Maximaに命じます。 この効果は a_iのインスタンスを 'a_inounify(a_i)で置き換えることです。 どちらに置き換えるかは文脈に依存します。

outative

a_i式を最初の引数から定数因子を引き出すことで整理するように Maximaに命じます。

a_iが1つ引数を持つ時、 もしリテラル定数や宣言定数なら因子は定数とみなされます。

a_iが2つ以上の引数を持つ時、 もし2番目の引数がシンボルで、因子が2番目の引数の制約を受けないなら、 因子は定数とみなされます。

posfun

a_iを正関数として認識するように Maximaに命じます。

rational, irrational

a_iを有理変数か非有理実変数として認識するように Maximaに命じます。

real, imaginary, complex

a_iを実変数か純虚数変数、複素変数として認識するように Maximaに命じます。

scalar

a_iをスカラー変数とみなすように Maximaに命じます。

プロパティの使い方の例はドキュメントの中のプロパティの個別の記述それぞれで入手可能です。

プロパティ: decreasing
プロパティ: increasing

コマンド declare(f, decreasing)declare(f, increasing)fを減少関数や増加関数として認識するように Maximaに命じます。

他のプロパティに関しては declareも参照してください。

例:

 
(%i1) assume(a > b);
(%o1)                        [a > b]
(%i2) is(f(a) > f(b));
(%o2)                        unknown
(%i3) declare(f, increasing);
(%o3)                         done
(%i4) is(f(a) > f(b));
(%o4)                         true

プロパティ: even
プロパティ: odd

declare(a, even)declare(a, odd)は シンボル aを偶数や奇数の整数変数としてみなすように Maximaに命じます。 関数 evenpや, oddp, integerpは プロパティ evenoddはを認識しません。

declareaskintegerも参照してください。

例:

 
(%i1) declare(n, even);
(%o1)                         done
(%i2) askinteger(n, even);
(%o2)                          yes
(%i3) askinteger(n);
(%o3)                          yes
(%i4) evenp(n);
(%o4)                         false

宣言: feature

Maximaは、システムフィーチャと数学式に適用されるフィーチャの、 2つの異なるタイプのフィーチャを理解します。 システムフィーチャについての情報に関しては statusも参照してください。 数学的フィーチャについての情報に関しては featuresfeaturepも参照してください。

featureそれ自身は関数名でも変数名でもありません。

関数: featurep (a, f)

現在のデータベースの中の事実に基づいてオブジェクト aがフィーチャ fを持つかどうかを決定しようとします。 もしそうなら trueを返し、そうでないなら falseを返します。

featurepffの否定も確立できない時は、 falseを返すことに注意してください。

featurepは引数を評価します。

declarefeaturesも参照してください。

 
(%i1) declare (j, even)$
(%i2) featurep (j, integer);
(%o2)                           true

宣言: features

Maximaは関数や変数のある数学的プロパティを認識します。 それらは「フィーチャー」と呼ばれます。

declare (x, foo)は プロパティ fooを関数もしくは変数 xに与えます。

declare (foo, feature)は 新しいフィーチャー fooを宣言します。 例えば、 declare ([red, green, blue], feature)は、 3つの新しいフィーチャー red, green, blueを宣言します。

もし xfooプロパティを持つなら、 述語論理 featurep (x, foo)trueを返し、 そうでなければ、falseを返します。

インフォリスト featuresは既知のフィーチャーのリストです。 それらは、

   integer        noninteger      even
   odd            rational        irrational
   real           imaginary       complex
   analytic       increasing      decreasing
   oddfun         evenfun         posfun
   constant       commutative     lassociative
   rassociative   symmetric       antisymmetric
   integervalued

に任意のユーザー定義フィーチャーを加えたものです。

featuresは数学的フィーチャーのリストです。 非数学的でシステム依存のフィーチャーのリストもあります。 statusを参照してください。

例:

 
(%i1) declare (FOO, feature);
(%o1)                         done
(%i2) declare (x, FOO);
(%o2)                         done
(%i3) featurep (x, FOO);
(%o3)                         true

関数: get (a, i)

iが示すアトム aのユーザープロパティを検索し、 もし aがプロパティ iを持たないなら falseを返します。

getは引数を評価します。

putqputも参照してください。

 
(%i1) put (%e, 'transcendental, 'type);
(%o1)                    transcendental
(%i2) put (%pi, 'transcendental, 'type)$
(%i3) put (%i, 'algebraic, 'type)$
(%i4) typeof (expr) := block ([q],
        if numberp (expr)
        then return ('algebraic),
        if not atom (expr)
        then return (maplist ('typeof, expr)),
        q: get (expr, 'type),
        if q=false
        then errcatch (error(expr,"is not numeric.")) else q)$
(%i5) typeof (2*%e + x*%pi);
x is not numeric.
(%o5)  [[transcendental, []], [algebraic, transcendental]]
(%i6) typeof (2*%e + %pi);
(%o6)     [transcendental, [algebraic, transcendental]]

プロパティ: integer
プロパティ: noninteger

declare(a, integer)declare(a, noninteger)aを整数変数か非整数変数として認識するように Maximaに命じます。

declareも参照してください。

例:

 
(%i1) declare(n, integer, x, noninteger);
(%o1)                         done
(%i2) askinteger(n);
(%o2)                          yes
(%i3) askinteger(x);
(%o3)                          no

プロパティ: integervalued

declare(f, integervalued)fを整数値関数として認識するように Maximaに命じます。

declareも参照してください。

例:

 
(%i1) exp(%i)^f(x);
                              %i f(x)
(%o1)                      (%e  )
(%i2) declare(f, integervalued);
(%o2)                         done
(%i3) exp(%i)^f(x);
                              %i f(x)
(%o3)                       %e

プロパティ: nonarray

コマンドdeclare(a, nonarray)はMaximaに aが配列でないものと考えるように命じます。 もし aが添字付き変数ならこの宣言は多重評価を抑制します。

例:

 
(%i1) a:'b$ b:'c$ c:'d$


(%i4) a[x];
(%o4)                          d
                                x
(%i5) declare(a, nonarray);
(%o5)                         done
(%i6) a[x];
(%o6)                          a
                                x

Categories:  Expressions

宣言: nonscalar

アトムをドット演算子に関してリストか行列のように振る舞うようにします。

declareも参照してください。

関数: nonscalarp (expr)

もし exprが非スカラー、すなわち、 非スカラーとして宣言されたアトムかリスト、行列を含むなら、 trueを返します。

scalarpdeclareも参照してください。

Categories:  Predicate functions · Vectors · Matrices

プロパティ: posfun

declare (f, posfun)fを正の関数と宣言します。 is (f(x) > 0)trueを出力します。

declareも参照してください。

関数: printprops  
    printprops (a, i)  
    printprops ([a_1, …, a_n], i)  
    printprops (all, i)

アトム aに関連付けられた指標 iの属性を表示します。 aはアトムのリストだったり、アトム allだったりします。 aの場合、与えられたプロパティを持つすべてのアトムに適用します。 例えば、 printprops ([f, g], atvalue)printpropsは表示できないプロパティ、 すなわち atvalue, atomgrad, gradef, matchdeclareのためのものです。

関数: properties (a)

アトム aに関連づけられたプロパティすべての名前のリストを返します。

特殊シンボル: props

propsは、declare関数で指定されたプロパティはもちろん、 atvalue, matchdeclare, などが指定したような、 infolistsで明示的に言及されたもの以外の任意のプロパティを持つアトムです。

関数: propvars (prop)

propsリスト上の propが示すプロパティを持つアトムのリストを返します。 従って、 propvars (atvalue)は atvalueを持つアトムのリストを返します。

関数: put (atom, value, indicator)

valueatomの (indicatorが指定する)プロパティに割り当てます。 indicatorは任意のプロパティの名前を取り得ますが、 システム定義のプロパティは取りません。

remputの効果をひっくり返します。

putは引数を評価します。 putvalueを返します。

例:

 
(%i1) put (foo, (a+b)^5, expr);
                                   5
(%o1)                       (b + a)
(%i2) put (foo, "Hello", str);
(%o2)                         Hello
(%i3) properties (foo);
(%o3)            [[user properties, str, expr]]
(%i4) get (foo, expr);
                                   5
(%o4)                       (b + a)
(%i5) get (foo, str);
(%o5)                         Hello

関数: qput (atom, value, indicator)

valueatomの (indicatorが指定する)プロパティに割り当てます。 引数がクォートされることを除いて、これは putと同じです。

例:

 
(%i1) foo: aa$
(%i2) bar: bb$
(%i3) baz: cc$
(%i4) put (foo, bar, baz);
(%o4)                          bb
(%i5) properties (aa);
(%o5)                [[user properties, cc]]
(%i6) get (aa, cc);
(%o6)                          bb
(%i7) qput (foo, bar, baz);
(%o7)                          bar
(%i8) properties (foo);
(%o8)            [value, [user properties, baz]]
(%i9) get ('foo, 'baz);
(%o9)                          bar

プロパティ: rational
プロパティ: irrational

declare(a, rational)declare(a, irrational)aを有理実変数か非有理実変数として認識するように Maximaに命じます。

declareも参照してください。

プロパティ: real
プロパティ: imaginary
プロパティ: complex

declare(a, real)や, declare(a, imaginary), declare(a, complex)aを実変数、純虚数変数、複素変数として認識するように Maximaに命じます。

declareも参照してください。

関数: rem (atom, indicator)

atomから indicatorが示すプロパティを取り除きます。 remputの効果をひっくり返します。

remが呼び出された時、もし atomindicatorプロパティを持っていたなら、 remdoneを返します。 もしそんなプロパティを持っていなかったら falseを返します。

関数: remove  
    remove (a_1, p_1, …, a_n, p_n)  
    remove ([a_1, …, a_m], [p_1, …, p_n], …)  
    remove ("a", operator)  
    remove (a, transfun)  
    remove (all, p)

アトムに関連づけられたプロパティを取り除きます。

remove (a_1, p_1, ..., a_n, p_n)はアトム a_kからプロパティ p_kを取り除きます。

remove ([a_1, ..., a_m], [p_1, ..., p_n], ...)はアトム a_1, …, a_mからプロパティ p_1, ..., p_nを取り除きます。 リストのペアは複数を取り得ます。

remove (all, p)はプロパティ pを、それを持つアトムすべてから取り除きます。

取り除かれるプロパティは、 function, macro, mode_declareのようなシステム定義のプロパティかもしれません。 removeputで定義されたプロパティを取り除きません。

翻訳された Lispバージョンの関数を取り除くために プロパティは transfunを取ることができます。 これを実行した後は、翻訳バージョンでなく Maximaバージョンの関数が実行されます。

remove ("a", operator)または、同値の remove ("a", op)は、aから prefix, infix, nary, postfix, matchfix, nofixが宣言した演算子プロパティを取り除きます。 演算子名はクォートされた文字列として書かれなければいけないことに注意してください。

アトムが指定されたプロパティを持つ持たないに関わらず、 removeはいつも doneを返します。 この振る舞いは、もっと具体的な削除関数remvalue, remarray, remfunction, remruleと違っています。

removeは引数をクォートします。

プロパティ: scalar

declare(a, scalar)aをスカラ変数とみなすように Maximaに命じます。

declareも参照してください。

関数: scalarp (expr)

もし exprが数か、定数、 declarescalarと宣言された変数、 または、数と定数とそんな変数から完全に構成され、行列やリストを含まない変数なら、 trueを返します。

Categories:  Predicate functions · Vectors · Matrices


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.3 Functions and Variables for Facts

関数: activate (context_1, …, context_n)

文脈 context_1, …, context_nをアクティベートします。 これらの文脈に関する事実は、演繹し情報を検索するために利用可能となります。 これらの文脈に関する事実は facts ()によってリストされません。

変数 activecontextsは、 activate関数を使ってアクティブになった文脈のリストです。

システム変数: activecontexts

デフォルト値: []

変数activecontextsは、 現在の文脈の部分文脈なのでアクティブである文脈と対照的に、 activate関数を使ってアクティブになった文脈のリストです。

関数: askinteger  
    askinteger (expr, integer)  
    askinteger (expr)  
    askinteger (expr, even)  
    askinteger (expr, odd)

askinteger (expr, integer)assumeデータベースから exprが整数かどうかを決定しようとします。 もしそうでなく決定できなければ、 askintegerはユーザーに入力を促し、 可能ならばデータベースに情報をインストールしようとします。 askinteger (expr)askinteger (expr, integer)と同値です。

同様に、 askinteger (expr, even)askinteger (expr, odd)は それぞれ、exprが偶数か奇数か決定しようとします。

関数: asksign (expr)

最初に、指定された式が正か負かゼロか決定しようとします。 できなければ、演繹を完了するのに必要な質問をユーザーに尋ねます。 ユーザーの答えは、現在の計算の演繹のため、データベースに記録されます。 asksignの戻り値は posneg, zeroのいずれか1つです。

関数: assume (pred_1, …, pred_n)

述語論理 pred_1, …, pred_nを現在の文脈に追加します。 もし述語論理が現在の文脈と矛盾していたり冗長だったりしたなら、文脈に追加されません。 文脈は assumeがコールされる毎に述語論理を累積していきます。

assumeは、文脈に追加された述語論理か、 当該のアトム redundantもしくは inconsistentを を要素に持つリストを返します。

述語論理 pred_1, …, pred_nは 関係演算子 < <= equal notequal >= >を持つ式のみ許されます。 述語論理はリテラル等号 =やリテラル不等号 #の式は使えません。 integerpのような述語関数も使えません。

形式 pred_1 and ...and pred_nの合成された述語論理は認識されます。 しかし pred_1 or ... or pred_nは認識されません。 もし pred_kが関係述語論理なら not pred_kは認識されます。 形式 not (pred_1 and pred_2)の式や not (pred_1 or pred_2)は認識されません。

Maximaの推論メカニズムはそれほど強くありません; isによって決定されない多くの明らかな結果があります。 これは既知の弱みです。

assumeは複素数を伴う述語論理を扱いません。 もし述語論理が複素数を含むなら assumeinconsistentredundantを返します。

assumeは引数を評価します。

isfacts, forget, context, declareも参照してください。

例:

 
(%i1) assume (xx > 0, yy < -1, zz >= 0);
(%o1)              [xx > 0, yy < - 1, zz >= 0]
(%i2) assume (aa < bb and bb < cc);
(%o2)                  [bb > aa, cc > bb]
(%i3) facts ();
(%o3)     [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
(%i4) is (xx > yy);
(%o4)                         true
(%i5) is (yy < -yy);
(%o5)                         true
(%i6) is (sinh (bb - aa) > 0);
(%o6)                         true
(%i7) forget (bb > aa);
(%o7)                       [bb > aa]
(%i8) prederror : false;
(%o8)                         false
(%i9) is (sinh (bb - aa) > 0);
(%o9)                        unknown
(%i10) is (bb^2 < cc^2);
(%o10)                       unknown

オプション変数: assumescalar

デフォルト値: true

assumescalarは、 nonscalarp (expr)falseであるような式 exprが ある変換に対してスカラーのように振る舞うと仮定されるかどうかを決めるのを助けます。

exprがリストや行列以外の任意の式を表してるとし [1, 2, 3]が任意のリストや行列を表しているとすると、 もし assumescalartruescalarp (expr)trueconstantp (expr)trueなら、 expr . [1, 2, 3][expr, 2 expr, 3 expr]をもたらします。

もし assumescalartrueなら、 そんな式は可換演算子に対してだけスカラーのように振る舞いますが、 非可換乗算 .に対してはそうは振る舞いません。

assumescalarfalseの時 そんな式は非スカラーのように振る舞います。

assumescalarallの時、 そんな式は上でリストされた演算子すべてに対してスカラーのように振る舞います。

オプション変数: assume_pos

デフォルト値: false

assume_postrueで パラメータ xの符号が現在の文脈や他の考慮から決定できない時、 signasksign (x)trueを返します。 これによって、 integrateや他の計算から起こるような 自動生成される asksign問い合わせを事前に防ぐことができます。

デフォルトでは、パラメータは symbolp (x)subvarp (x)のような xです。 パラメータとして考えられる式のクラスは、 変数 assume_pos_predを介してある程度変えることができます。

signasksignは、 式の中のオペランドの符号から式の符号を演繹しようとします。 例えば、もしabがともに正なら a + bも正です。

しかしながら、asksign問い合わせすべてを迂回する方法はありません。 特に asksign引数が差 x - yか 対数 log(x)の時、 たとえ assume_postrueassume_pos_predが 引数すべてに trueを返す関数であっても、 asksignはいつもユーザーからの入力を要請します。

オプション変数: assume_pos_pred

デフォルト値: false

assume_pos_predが関数名や引数 xのラムダ式に割り当てられている時、 xassume_posのためのパラメータと考えられるかどうかを決定するために その関数がコールされます。 assume_posfalseの時、 assume_pos_predは無視されます。

signasksignが、 アトムか添字付き変数、関数コール式のいずれかの引数 xassume_pos_pred関数をコールします。 もし assume_pos_pred関数が trueを返すなら、 xassume_posのためのパラメータと考えられます。

デフォルトでは、パラメータは symbolp (x)subvarp (x)のような xです。

assumeassume_posも参照してください。

例:

 
(%i1) assume_pos: true$
(%i2) assume_pos_pred: symbolp$
(%i3) sign (a);
(%o3)                          pos
(%i4) sign (a[1]);
(%o4)                          pnz
(%i5) assume_pos_pred: lambda ([x], display (x), true)$
(%i6) asksign (a);
                              x = a

(%o6)                          pos
(%i7) asksign (a[1]);
                             x = a
                                  1

(%o7)                          pos
(%i8) asksign (foo (a));
                           x = foo(a)

(%o8)                          pos
(%i9) asksign (foo (a) + bar (b));
                           x = foo(a)

                           x = bar(b)

(%o9)                          pos
(%i10) asksign (log (a));
                              x = a

Is  a - 1  positive, negative, or zero?

p;
(%o10)                         pos
(%i11) asksign (a - b);
                              x = a

                              x = b

                              x = a

                              x = b

Is  b - a  positive, negative, or zero?

p;
(%o11)                         neg

オプション変数: context

デフォルト値: initial

contextassumeforgetによって保守される事実の集まりの名前です。

assumecontextと名付けられた集まりに事実を追加する一方、 forgetは事実を取り除きます。

contextを名前 fooにバインドすると 現在の文脈は fooに変わります。 もし指定された文脈 fooがまだ存在しないなら、 自動的に newcontextがコールされて生成されます。 指定された文脈は自動的にアクティベートされます。

文脈メカニズムの一般的な記述に関しては contextsを参照してください。

オプション変数: contexts

デフォルト値: [initial, global]

contextsは現在存在する文脈のリストです。現在アクティブな文脈を含んでいます。

文脈メカニズムによって ユーザーが文脈と呼ばれる事実の集まりにバインドし、名付けることが可能になります。 一旦名付けると、 ユーザーは文脈を単にアクティベートしたりデアクティベートすることで たくさんの数の事実をMaximaに仮定させたり忘れさせたりできます。

任意のシンボルのアトムが文脈となることができ、 その文脈の中に含まれた事実は、 forgetをコールすることで1つ1つ破壊されるまで、 あるいは、それらが属する文脈を破壊するためにkillをコールすることで 全体として破壊されるまで、記憶装置に保持されます。

文脈は階層的に存在します。 その根はいつも文脈 globalであり、 文脈 globalはいくつかの関数が必要とするMaximaについての情報を含みます。 アクティブな文脈の部分文脈である任意の文脈の中の事実すべてそうであるように、 与えられた文脈の中では その文脈の中の事実すべては「アクティブ」(それらが演繹や探索に使われるという意味)です。

Maximaが新たに起動された時、 ユーザーは initialと呼ばれる文脈の中にいます。 それは部分文脈として globalを持ちます。

facts, newcontext, supcontext, killcontext, activate, deactivate, assume, forgetも参照してください。

関数: deactivate (context_1, …, context_n)

特定の文脈 context_1, …, context_nをデアクティベートします。

関数: facts  
    facts (item)  
    facts ()

もし itemが文脈の名前なら facts (item)は指定された文脈の factsのリストを返します。

もし itemが文脈の名前でないなら、 facts (item)は現在の文脈の中で itemについて知っている factsのリストを返します。 異なる文脈中のアクティブな factsはリストされません。

facts ()(すなわち引数なし)は現在の文脈をリストします。

関数: forget  
    forget (pred_1, …, pred_n)  
    forget (L)

assumeで規定された述語論理を取り除きます。 述語論理は以前に規定されたものと同値の(必ずしも同一である必要はない)式です。

forget (L) (Lは述語論理のリスト)はリスト上のそれぞれの項目を忘れます。

関数: is (expr)

assumeデータベースの中の事実から述語論理 exprが確かか否かを決定しようとします。

もし述語論理が確かに truefalseなら、 isはそれぞれ truefalseを返します。 そうでないなら戻り値はグローバルフラグ prederrorに依存します。 prederrortrueの時 isはエラーメッセージを出力します。 そうでないなら isunknownを出力します。

ev(expr, pred) (対話プロンプトでは expr, predと書けます)は is(expr)と同値です。

assume, facts, maybeも参照してください。

例:

isは述語論理の評価を引き起こします。

 
(%i1) %pi > %e;
(%o1)                       %pi > %e
(%i2) is (%pi > %e);
(%o2)                         true

isassumeデータベースから述語論理を演繹しようとします。

 
(%i1) assume (a > b);
(%o1)                        [a > b]
(%i2) assume (b > c);
(%o2)                        [b > c]
(%i3) is (a < b);
(%o3)                         false
(%i4) is (a > c);
(%o4)                         true
(%i5) is (equal (a, c));
(%o5)                         false

もし isassumeデータベースから述語論理を証明もしくは否定できなかったら グローバルフラグ prederrorisの振る舞いを決めます。

 
(%i1) assume (a > b);
(%o1)                        [a > b]
(%i2) prederror: true$
(%i3) is (a > 0);
Maxima was unable to evaluate the predicate:
a > 0
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) prederror: false$
(%i5) is (a > 0);
(%o5)                        unknown

関数: killcontext (context_1, …, context_n)

文脈 context_1, …, context_nを消します。

もし文脈の1つが現在の文脈なら 新しい文脈は消されなかった現在の文脈の最初の利用可能な部分文脈になるでしょう。 もし最初の利用可能な消されなかった文脈が globalなら、 initialが代わりに使われます。 もし initial文脈が消されたら 新しい空のinitial文脈が生成されます。

現在の文脈の部分文脈であるためか 関数 activateの使用による理由で現在アクティブになっている文脈を消すことを killcontextは拒否します。

killcontextは引数を評価します。 killcontextdoneを返します。

関数: maybe (expr)

述語論理exprassumeデータベースの事実から正しいかどうかを 決定しようとします。

もし述語論理が確かに truefalseなら、 maybeはそれぞれ truefalseを返します。 そうでないなら maybeunknownを返します。

maybeprederror: falseでの isと関数的に同値です。 しかし prederrorに値を実際に割り当てることなく結果が計算されます。

assume, facts, isも参照してください。

例:

 
(%i1) maybe (x > 0);
(%o1)                        unknown
(%i2) assume (x > 1);
(%o2)                        [x > 1]
(%i3) maybe (x > 0);
(%o3)                         true

関数: newcontext  
    newcontext (name)  
    newcontext ()

nameと呼ばれる新しい空の文脈を生成します。 nameは唯一の部分文脈として globalを持ちます。 新しく生成された文脈は現在アクティブな文脈になります。

もし nameが指定されないなら、(gensymを使って)新しい名前を生成して返します。

newcontextは引数を評価します。 newcontextは (もし指定されたら) nameを、そうでなければ新しい文脈名を返します。

関数: sign (expr)

現在のデータベースの事実に基づいて exprの符号を決定しようとします。 以下の答えの1つを返します; pos (positive)か, neg (negative), zero, pz (正もしくはゼロ), nz (負もしくはゼロ), pn (正もしくは負), pnz (正、負もしくはゼロ、すなわちなにもわからない).

関数: supcontext  
    supcontext (name, context)  
    supcontext (name)  
    supcontext ()

nameと呼ばれる新しい文脈を生成します。 nameは部分文脈として contextを持ちます。 contextは存在しなければいけません。

もし contextが指定されないなら現在の文脈が仮定されます。

もし nameが指定されないなら、(gensymを使って)新しい名前を生成して返します。

supcontextは引数を評価します。 supcontextは (もし指定されたら) nameを、そうでなければ新しい文脈名を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.4 Functions and Variables for Predicates

関数: charfun (p)

述語論理 pfalseに評価される時 0を返します; 述語論理 ptrueに評価される時 1を返します。 述語論理が truefalseでもない何かに評価される時(unknown) 名詞形を返します。

例:

 
(%i1) charfun (x < 1);
(%o1)                    charfun(x < 1)
(%i2) subst (x = -1, %);
(%o2)                           1
(%i3) e : charfun ('"and" (-1 < x, x < 1))$
(%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
(%o4)                       [0, 1, 0]

Categories:  Mathematical functions

関数: compare (x, y)

is (x op y)trueに評価されるような比較演算子 op (<, <=, >, >=, =, #)を返します; xy%iに依存し、かつ x # yの時、 notcomparableを返します; 該当する演算子がなかったり Maximaが演算子を決定できなかった時には unknownを返します。

例:

 
(%i1) compare (1, 2);
(%o1)                           <
(%i2) compare (1, x);
(%o2)                        unknown
(%i3) compare (%i, %i);
(%o3)                           =
(%i4) compare (%i, %i + 1);
(%o4)                     notcomparable
(%i5) compare (1/x, 0);
(%o5)                           #
(%i6) compare (x, abs(x));
(%o6)                          <=

関数 compareは引数の実領域が空でないか決定しようとはしません; 従って、

 
(%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
(%o1)                           <

acos (x^2 + 1)の実領域は空です。

関数: equal (a, b)

同値、すなわち同じ値であることを表します。

equalはそれ自身で評価も整理もされません。 関数 isequalをブーリアン値に評価しようとします。 もし abratisimp(a - b)を評価することで決定されるように変数の可能な値すべてで等しいときだけ is(equal(a, b)trueを返します; もし ratsimpが0を返したら2つの式は同値と考えられます。 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。

isが equalを truefalseへの換算に失敗した時、 結果はグローバルフラグ prederrorに依存します。 prederrortrueの時 isはエラーメッセージを出力します。 そうでないなら isunknownを返します。

isに加えていくつかの他の演算子、すなわち if, and, or, notequalnotequaltruefalseに評価します。

equalの否定は notequalです。

例:

equalはそれ自身で評価も整理もされません。

 
(%i1) equal (x^2 - 1, (x + 1) * (x - 1));
                        2
(%o1)            equal(x  - 1, (x - 1) (x + 1))
(%i2) equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) equal (x, y);
(%o3)                      equal(x, y)

関数isequalをブーリアン値に評価しようとします。 is(equal(a, b)ratisimp(a - b)が0を返すとき trueを返します。 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。

 
(%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
(%o1)                           0
(%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
(%o2)                         true
(%i3) is (x^2 - 1 = (x + 1) * (x - 1));
(%o3)                         false
(%i4) ratsimp (x - (x + 1));
(%o4)                          - 1
(%i5) is (equal (x, x + 1));
(%o5)                         false
(%i6) is (x = x + 1);
(%o6)                         false
(%i7) ratsimp (x - y);
(%o7)                         x - y
(%i8) is (equal (x, y));
(%o8)                        unknown
(%i9) is (x = y);
(%o9)                         false

isequaltruefalseへの換算に失敗したとき、 結果はグローバルフラグ prederrorに依存します。

 
(%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
                    2             2
(%o1)             [x  + 2 x + 1, x  - 2 x - 1]
(%i2) ratsimp (aa - bb);
(%o2)                        4 x + 2
(%i3) prederror : true;
(%o3)                         true
(%i4) is (equal (aa, bb));
Maxima was unable to evaluate the predicate:
       2             2
equal(x  + 2 x + 1, x  - 2 x - 1)
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i5) prederror : false;
(%o5)                         false
(%i6) is (equal (aa, bb));
(%o6)                        unknown

いくつかの演算子が equalnotequaltruefalseに評価します。

 
(%i1) if equal (y, y - 1) then FOO else BAR;
(%o1)                          BAR
(%i2) eq_1 : equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
                         2                   2
(%o3)             equal(y  + 2 y + 1, (y + 1) )
(%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
(%o4)                  [false, true, true]

not exprexprの評価を伴うので、 not equal(a, b)is(notequal(a, b))と同値です。

 
(%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
(%o1)            [notequal(2 z, 2 z - 1), true]
(%i2) is (notequal (2*z, 2*z - 1));
(%o2)                         true

Categories:  Operators

関数: notequal (a, b)

equal(a, b)の否定を表します。

例:

 
(%i1) equal (a, b);
(%o1)                      equal(a, b)
(%i2) maybe (equal (a, b));
(%o2)                        unknown
(%i3) notequal (a, b);
(%o3)                    notequal(a, b)
(%i4) not equal (a, b);
(%o4)                    notequal(a, b)
(%i5) maybe (notequal (a, b));
(%o5)                        unknown
(%i6) assume (a > b);
(%o6)                        [a > b]
(%i7) equal (a, b);
(%o7)                      equal(a, b)
(%i8) maybe (equal (a, b));
(%o8)                         false
(%i9) notequal (a, b);
(%o9)                    notequal(a, b)
(%i10) maybe (notequal (a, b));
(%o10)                        true

Categories:  Operators

関数: unknown (expr)]

exprがMaximaの整理器が認識しない演算子や関数を含む時だけ trueを返します。

関数: zeroequiv (expr, v)

変数 vの式 exprがゼロと同値かどうかテストし、 trueか, false, dontknowを返します。

zeroequivは以下の制限を持ちます:

  1. Maximaが微分や評価する方法を知らない関数を使わない。
  2. もし式が実線上で極を持つなら結果としてエラーになります。 (しかしこれは起こりにくいことです。)
  3. もし式が1階微分方程式の解ではない関数(例えばベッセル関数)を含むなら 正しくない結果になるかもしれません。
  4. アルゴリズムは注意深く選ばれた部分式に関してランダムに選ばれた点での評価を使います。 アルゴリズムはエラーの可能性を細小にしようとしますが、これはいつも危険な仕事です。

例えば、zeroequiv (sin(2 * x) - 2 * sin(x) * cos(x), x)trueを返し、 zeroequiv (%e^x + x, x)falseを返します。 一方、 zeroequiv (log(a * b) - log(a) - log(b), a)は 余分なパラメータbがあるので dontknowを返します。

Categories:  Predicate functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12. Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1 Introduction to Plotting

Maximaはプロットするために外部のプロットパッケージを使います。 (Plotting Formatsに関する節を参照してください)。 プロット関数は点一式を計算し、コマンド一式と一緒にプロットパッケージに渡します。 その情報は、 パイプを通したり データが保存されたファイル名と共にプログラムをコールしたりして 外部のプログラムに渡されます。 データファイルの名前は maxout_xxx.fromatです。 ここで xxxはMaximaの同時実行インスタンスそれぞれにユニークな数で、 formatは使用するプロットインターフェース名 (gnuplot, xmaxima, mgnuplot, gnuplot_pipes, geomview)です。

グラフィック形式ファイルでプロットを保存する方法があります。 それらの場合、 Maximaが生成するファイル maxout_xxx.formatは 外部のプロットプログラムに結果をグラフィックファイルに保存させるコマンドを含みます。 そのグラフィックファイルのデフォルト名は maxplot.extensionです。 ここで extensionは選択したグラフィックファイルの種類に通常使われる拡張子です。

maxout_xxx.formatmaxplot.extensionファイル(もしくはオプションで与えられたプロット名)は、システム変数 maxima_tempdirが指定するディレクトリに生成されます。 Maximaが新規ファルを生成できる有効なディレクトリを示す文字列を その変数(もしくは環境変数 MAXIMA_TEMPDIR)に割り当てることで、 その場所は変更可能です。 Maximaプロットコマンドの出力は、生成されたファイル名のリストです。ファイル名は完全なパスを含みます。

もし使用フォーマットが gnuplotxmaximaなら、外部プログラム gnuplotxmaximaを走らせることができます。 Maximaで事前に生成したプロットを再度見るためには、ファイル maxout_xxx.formatを引数として渡すことになります。 このように、Maximaプロットコマンドが失敗した時、フォーマットに gnuplotxmaximaを設定して 問題の元を探すためにプレインテキストファイル maxout_xxx.gnuplot(もしくは maxout_xxx.xmaxima)を調べることができます。

追加パッケージ drawはこの節で記述した関数にいくつかの機能を追加した関数を提供します。 いくつかのプロットオプションはどちらのプロット文脈でも同じ名前が付けられていますが、構文と振る舞いが違うことに注意してください。 これら2つのパッケージのどちらかの情報を選ぶために、グラフィックオプション optのドキュメントを見るには ?? optとタイプしてください。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2 Plotting Formats

Maximaは Gnuplotか Xmaximaか Geomviewをグラフィックスプログラムとして使うことができます。 Gnuplotは別にインストールしなければいけない外部プログラムです。 一方、 XmaximaはMaximaと一緒に配布されます。 これらのプログラムに対して様々な異なるフォーマットがあります。 それらはオプション plot_formatで選択することができます。 (Plotting Options節も参照してください。)

プロットフォーマットは以下の通りです:

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3 Functions and Variables for Plotting

関数: contour_plot (expr, x_range, y_range, options, …)

exprの等高線を領域 x_range, y_rangeでプロットします。 他の引数は plot3dと同じように扱われます。

プロットフォーマットがgnuplotgnuplot_pipesの時だけ この関数は動作します。 任意のフォーマットで動作する追加パッケージ implicit_plotも等高線をプロットするのに使われますが、 それぞれの等高線に別々の指揮を与えなければいけません。

例:

 
(%i1) contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4])$

figures/plotting1

plot3dが受け付ける任意のオプションを足すことができます; 例えば、オプション legendに falseの値を入れると凡例を取り除きます。 デフォルトでは、 Gnuplotは3つの高等線を選び表示します。 等高線の数を増やすには、次の例のようにカスタムの ggnuplot_preambleを使う必要があります;

 
(%i1) contour_plot (u^3 + v^2, [u, -4, 4], [v, -4, 4],
              [legend,false],
              [gnuplot_preamble, "set cntrparam levels 12"])$

figures/plotting2

Categories:  Plotting

システム変数: geomview_command

この変数は、 プロットフォーマットが geomviewの時、 geomviewプログラムを走らせるのに使われるコマンド名を保持します。 そのデフォルト値は"geomview"です。 もし完全パスを与えずに geomviewプログラムが見つからなかったり、 違うバージョンを試したいなら、この変数の値を変更できます。 例えば、

 
(%i1) geomview_command: "/usr/local/bin/my_geomview"$

Categories:  Plotting

関数: get_plot_option (keyword, index)

keywordと名付けられたオプションの現在のデフォルト値を返します。 それはリストです。 オプションの引数 indexは正の整数でなければいけません。 リストから1つの要素だけを抽出するのに使うことができます。 (要素 1はオプションの名前です。)

set_plot_optionremove_plot_option, Plotting Optionの節も参照してください。

システム変数: gnuplot_command

この変数は、 プロットフォーマットが gnuplotの時にgnuplotプログラムを走らせるのに使われるコマンド名を保存します。 デフォルト値は "gnuplot"です。 完全なパスが与えられず gnuplotプログラムが見つからないか、違うバージョンを試したいときは、 この変数の値を変えることができます。例えば、

 
(%i1) gnuplot_command: "/usr/local/bin/my_gnuplot"$

Categories:  Plotting

システム変数: gnuplot_file_args

グラフィックファイルが gnuplotで生成されようとする時、 この変数は、ファイル名をgnuplotに渡す方法を指定するのに使われます。 デフォルト値は "~s"です。それはファイル名を直接渡すことを意味します。 gnuplotプログラムのオプションを加えるために、この変数の中身を変更することができます。 フォーマットディレクティブ "~s"の前にそれらのオプションを加えます。

Categories:  Plotting

システム変数: gnuplot_view_args

この変数は、プロットフォーマットが gnuplotの時 gnuplotプログラムに渡す引数をパースするのに使います。 デフォルト値は "-persist ~s"です。 ここで "~s"は gnuplotコマンドが書かれるファイル名(通常 "maxout_xxx.gnuplot")に置き換えられます。 オプション -persistは ファイルの中のコマンドが実行された後、プロットを表示しているウィンドウを閉じずに gnuplotを終了させます。

gnuplotに詳しい人たちはこの変数の値を替えたいかもしれません。 例えば、それを以下のように変えることで:

 
(%i1) gnuplot_view_args: "~s -"$

ファイルの中のコマンドが実行された後、gnuplotは閉じません; なので、プロットを含むウィンドウはもちろん、プロットを修正するため他のコマンドを発行できるgnuplot対話シェルも残ります。

4.6.3より古い gnuplotの Windowsバージョンでは、 "~s -"と "-persist ~s"の振る舞いは反対でした; その名の通り "-persist ~s"はプロットウィンドウと gnuplot対話シェルを残す一方で、 "~s -"は プロットウィンドウを残しながら gnuplotシェルを閉じました。 なので、もし Windowsで古い gnuplotバージョンを使っているなら、 gnuplot_view_argsの値を調整する必要があるかもしれません。

Categories:  Plotting

関数: implicit_plot  
    implicit_plot (expr, x_range, y_range)  
    implicit_plot ([expr_1, …, expr_n], x_range, y_range)

exprが陰に定義する実平面上の関数のプロットを表示します。 平面の領域は x_rangey_rangeで定義されます。 いくつかの関数を、それらを定義する式のリスト [expr_1, …, expr_n]を与えることで、同じプロットで表示することができます。 この関数はset_plot_optionで設定されたグローバルフォーマットオプションを使います。 追加オプションも implicit_plotコマンドの追加引数として与えることができます。

implicit_plotはが使う方法は与えられた領域上の符号変化の追尾から構成されていて、 複雑な式では失敗する可能性が有ります。

load(implicit_plot)はこの関数をロードします。

例:

 
(%i1) load(implicit_plot)$
(%i2) implicit_plot (x^2 = y^3 - 3*y + 1, [x, -4, 4], [y, -4, 4])$

figures/plotting3

関数: julia (x, y, ...options...)

複素数 (x + i y)に関する Julia集合の表現のグラフィックスファイルを生成します。 2つの必須パラメータ xyは実数でなければいけません。 このプログラムは追加パッケージ dynamicsの一部ですが、そのパッケージはロードする必要はなく、 juliaが使われる初回に自動的にロードされます。

グリッドのそれぞれのピクセルは、 その点からシュッパウして原点を中心とした半径2の収束円からはみ出るまでの繰り返しの回数に対応した色が与えられます。 グリッドのピクセルの数は gridプロットオプションが制御します(デフォルトは30掛ける30)。 繰り返しの最大数はオプション iterationsで設定されます。 プログラムは自身のデフォルトパレットを使います: マゼンダ、紫、青、シアン、緑、黄、赤、茶、黒。 しかしコマンドで明示的に paletteオプションを加えることで変更できます。

使われるデフォルトの領域は、両方の軸で-2から2までで、 xyオプションを使って変えられます。 オプション yx_ratioを使うか、オプション same_xyをディセーブルするかどちらかをしない限り デフォルトでは2つの軸は同じスケールで表示されます。 他の一般的なプロットオプションも受け入れられます。

以下の例は、数-0.55 + i0.6に関するJulia集合の領域を表示します。 オプション color_bar_ticsは Gnuplotが色ボックスを40まで調整するのを抑制するのに使われています。 この場合、最大36回の繰り返しに対応する点は黒ではないです。

 
(%i1) julia (-0.55, 0.6, [iterations, 36], [x, -0.3, 0.2],
      [y, 0.3, 0.9], [grid, 400, 400], [color_bar_tics, 0, 6, 36])$

figures/plotting4

Categories:  Package dynamics · Plotting

関数: make_transform ([var1, var2, var3], fx, fy, fz)

plot3dのオプション transform_xyでの使用に適した関数を返します。 3変数 var1, var2, var3は3つのダミー変数名です。 それらは plot3dコマンドが与える3変数 (最初2つの独立変数と、そのあとそれら2つの変数に依存する関数)を表します。 3つの関数fx, fy, fzはそれら3変数だけで決まるはずで、 プロットすべき対応する x, y, z座標を与えます。 デフォルトで定義された2つの変換があります; polar_to_xyspherical_to_xyz; それら2つの変換に関するドキュメンテーションを参照してください。

Categories:  Plotting

関数: mandelbrot (options)

Mandelbrot集合の表現のグラフィックスファイルを生成します。 このプログラムは追加パッケージ dynamicsの一部ですが、そのパッケージはロードする必要はなく、 juliaが使われる初回に自動的にロードされます。

このプログラムは引数なしに呼び出すことができます。その場合、 点毎にデフォルト値の9回の繰り返し、 gridプロットオプション(デフォルトは30掛ける30)で設定された寸法のグリッド、 両方の軸で-2から2まで拡張した領域を使います。 オプションは plot2dが受け付けるのと同じものすべてと、加えて繰り返し数を変えるオプション iterationsです。

グリッドのそれぞれのピクセルは、 その点からシュッパウして原点を中心とした半径2の収束円からはみ出るまでの繰り返しの回数に対応した色が与えられます。 グリッドのピクセルの数は gridプロットオプションが制御します(デフォルトは30掛ける30)。 繰り返しの最大数はオプション iterationsで設定されます。 プログラムは自身のデフォルトパレットを使います: マゼンダ、紫、青、シアン、緑、黄、赤、茶、黒。 しかしコマンドで明示的に paletteオプションを加えることで変更できます。 オプション yx_ratioを使うか、オプション same_xyをディセーブルするかどちらかをしない限り デフォルトでは2つの軸は同じスケールで表示されます。

例:

[grid,400,400])$

 
(%i1) mandelbrot ([iterations, 30], [x, -2, 1], [y, -1.2, 1.2],
            [grid,400,400])$

figures/plotting5

Categories:  Package dynamics · Plotting

システム関数: polar_to_xy

plot3dの transform_xyオプションに対する値として与えることができます。 その効果は plot3dの2つの独立変数をz軸からの距離と方位角(極座標)として通訳し、 それらを xと y座標に変換することです。

Categories:  Plotting

関数: plot2d  
    plot2d (plot, x_range, …, options, …)  
    plot2d ([plot_1, …, plot_n], …, options, …)  
    plot2d ([plot_1, …, plot_n], x_range, …, options, …)

ここで plot, plot_1, …, plot_nは式か関数名、もしくは以下のいずれかの形式のリストです:

[discrete, [x1, ..., xn], [y1, ..., yn]], [discrete, [[x1, y1], ..., [xn, ..., yn]]], または [parametric, x_expr, y_expr, t_range]

1つもしくは複数の式を1変数か1パラメータの関数としてプロット表示します。

plot2dは1つもしくは複数のプロットを2次元に表示します。 プロットを定義するのに式や関数名を使う時には、 それらは1変数varだけに依存すべきであり 変数名とその最小値と最大値を提供するためにx_rangeの使用が必須です; x_rangeの構文は以下の通りです:

[variable, min, max]

プロットを離散形式やパラメトリック形式で定義することもできます。 離散形式は既定の座標で表された点の集合をプロットするのに使われます。 離散プロットはキーワード discreteで始まり、 値についてのリスト1つか2つが続くリストで定義されます。 もし2つのリストが与えられたら、それらは同じ長さを持たなければいけません; 1番目のリストはプロットされる点のx座標として、 2番目のリストはy座標として解釈されます。 もし discreteキーワードの後、リストが1つだけ与えられたら、 それは、リスト上のそれぞれの要素は点のxとy座標に対応する2つの値を持つリストか、 x軸上の連続する整数値(1,2,3,...)にプロットされる数値の数列を受け付けます。

パラメトリックプロットはキーワード parametricで始まり、 式か関数名2つとパラメータの範囲を持つリストで定義されます。 パラメータの範囲はパラメータ名とその最小値、最大値が続くリストでなければいけません:

[param, min, max]

paramminから maxに増えるにつれ、 式または関数2つで与えられる座標点が描く軌跡をプロットは表示します。

垂直軸の範囲は以下の形式を持つオプション引数です:

[y, min, max](キーワード yはいつも垂直軸に使われます)。

このオプションを使うと、 プロットが到達する値に関係なくオプションの垂直範囲ぴったりをプロットは表示します。 もし垂直範囲を指定しなかったなら、 プロット点のy座標の最小値と最大値に従って垂直範囲が設定されます。

他のすべてのオプションも キーワードで始まり、1つか複数の値が続くリストでなければいけません。 plot_optionsを参照してください。

もし複数のプロットがプロットされるなら式のそれぞれを識別するために凡例が書かれます。 その凡例で使われるラベルはオプション legendで与えることができます。 もしそのオプションが使われないなら Maximaは式や関数名からラベルを生成します。

例:

よくある関数のプロット:

 
(%i1) plot2d (sin(x), [x, -%pi, %pi])$

figures/plotting6

もし関数の増大が速すぎるなら yオプションを使って垂直軸の値を制限する必要があるかもしれません:

 
(%i1) plot2d (sec(x), [x, -2, 2], [y, -20, 20])$
plot2d: some values were clipped.

figures/plotting7

プロットボックスがディセーブルの時は軸のためのラベルが生成荒れません。 その場合、xlabelylabelを使って軸の名前を設定する代わりに もっと自由度の高いオプション labelを使う方がいいです。 オプション yx_ratioは、プロットの形のデフォルトである長方形を変更するのに使います; この例ではプロットは平方形を埋めます。

 
(%i1) plot2d ( x^2 - 1, [x, -3, 3], [box, false], grid2d,
      [yx_ratio, 1], [axes, solid], [xtics, -2, 4, 2],
      [ytics, 2, 2, 6], [label, ["x", 2.9, -0.3],
      ["x^2-1", 0.1, 8]], [title, "A parabola"])$

figures/plotting8

垂直軸方向の対数プロットの例:

 
(%i1) plot2d (exp(3*s), [s, -2, 2], logy)$

figures/plotting9

関数を名前でプロット:

 
(%i1) F(x) := x^2 $
(%i2) :lisp (defun |$g| (x) (m* x x x))
$g
(%i2) H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
(%i3) plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$

figures/plotting10

パラメトリックに定義されたバタフライカーブのプロット:

 
(%i1) r: (exp(cos(t))-2*cos(4*t)-sin(t/12)^5)$
(%i2) plot2d([parametric, r*sin(t), r*cos(t), [t, -8*%pi, 8*%pi]])$

figures/plotting11

パラメトリック表現を使った円を-|x|と合わせてプロット。 円は、もし2つの軸のスケールが同じなら、円のように見えるだけのものです。オプション same_xyで指定します。

 
(%i1) plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]], -abs(x)],
         [x, -sqrt(2), sqrt(2)], same_xy)$

figures/plotting12

0から9の間の200個の乱数のプロット:

 
(%i1) plot2d ([discrete, makelist ( random(10), 200)])$

figures/plotting13

x座標, y座標を別々に定義した点の離散集合のプロット:

 
(%i1) plot2d ([discrete, makelist(i*%pi, i, 1, 5),
                            [0.6, 0.9, 0.2, 1.3, 1]])$

figures/plotting14

次の例では、3つの列を持つテーブルがファイル"data.txt"に保存され、 読み込まれ、2番目、3番目の列は2つの軸上にプロットされます:

 
(%i1) with_stdout ("data.txt", for x:0 thru 10 do
                             print (x, x^2, x^3))$
(%i2) data: transpose ( read_matrix ("data.txt"))$
(%i3) plot2d ([discrete, transpose(data)[2], transpose(data)[3]],
  [style,points], [point_type,diamond], [color,red])$

figures/plotting15

離散データ点をデータを予測する連続関数と一緒にプロット:

 
(%i1) xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$
(%i2) plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
        [style, points, lines], [color, red, blue],
        [point_type, asterisk],
        [legend, "experiment", "theory"],
        [xlabel, "pendulum's length (cm)"],
        [ylabel, "period (s)"])$

figures/plotting16

プロットオプションに関する節も参照してください。

Categories:  Plotting

関数: plot3d  
    plot3d (expr, x_range, y_range, …, options, …)  
    plot3d ([expr_1, …, expr_n], x_range, y_range, …, options, …)

2変数関数もしくはパラメトリック形式で定義された1つか複数の表面のプロットを表示します。

プロットされる関数は式か関数名として指定できます。 違った側面から表面を見るためにマウスを使ってプロットを回転することができます。

例:

2変数関数のプロット:

 
(%i1) plot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],
        [mesh_lines_color,false])$

figures/plotting17

無限大に発散する関数を制限するための zオプションの使用(この場合、関数はxとy軸上でマイナス無限だい); これは線のみ陰影なしでプロットする仕方も示します。

 
(%i1) plot3d ( log ( x^2*y^2 ), [x, -2, 2], [y, -2, 2], [z, -8, 4],
         [palette, false], [color, magenta])$

figures/plotting18

zの無限大の値は、次の例のように、関数が未定義となるいかなる点にも落ちないグリッドを選ぶことによっても避けることができます。 この例は、パレットの変更の仕方と z変数の値に色を関連づけるカラーバーを含める仕方も示します:

 
(%i1) plot3d (log (x^2*y^2), [x, -2, 2], [y, -2, 2],[grid, 29, 29],
       [palette, [gradient, red, orange, yellow, green]],
       color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
       [color_bar_tics, 4])$

figures/plotting19

同一プロットでの2つの表面。 表面の1つに特化した範囲は共通のリストの中にそれぞれ式とその範囲を置くことで与えることができます; 完全なプロットのための全体範囲も関数定義の後で与えられます。

 
(%i1) plot3d ([[-3*x - y, [x, -2, 2], [y, -2, 2]],
   4*sin(3*(x^2 + y^2))/(x^2 + y^2), [x, -3, 3], [y, -3, 3]],
   [x, -4, 4], [y, -4, 4])$

figures/plotting20

パラメトリックに定義されたKleinの壷のプロット:

 
(%i1) expr_1: 5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)-10$
(%i2) expr_2: -5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)$
(%i3) expr_3: 5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))$
(%i4) plot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],
        [y, -%pi, %pi], [grid, 50, 50])$

figures/plotting21

球座標から直交座標に変換するのにあらかじめ定義された変換 spherical_to_xyzを使った「球調和」関数のプロット。 spherical_to_xyzに関するドキュメンテーションを参照してください。

 
(%i1) plot3d (sin(2*theta)*cos(phi), [theta, 0, %pi],
        [phi, 0, 2*%pi],
        [transform_xy, spherical_to_xyz], [grid,30,60],
   [legend,false])$

figures/plotting22

円筒座標から直交座標に変換するのにあらかじめ定義された変換 polar_to_xyを使った球面調和関数のプロット。 polar_to_xyに関するドキュメンテーションを参照してください。

 
((%i1) plot3d (r^.33*cos(th/3), [r,0,1], [th,0,6*%pi], [box, false],
   [grid, 12, 80], [transform_xy, polar_to_xy], [legend, false])$

figures/plotting23

球座標から直交座標への変換を使っての球のプロット。 同じ比率でスケールされた3軸を得るのにオプション same_xyzを使います。 Gnuplotが表面を正確に表示しなくなるので、変換を使う時はメッシュ線を消すのは都合良くありません。

 
(%i1) plot3d ( 5, [theta, 0, %pi], [phi, 0, 2*%pi], same_xyz,
  [transform_xy, spherical_to_xyz], [mesh_lines_color,blue],
  [palette,[gradient,"#1b1b4e", "#8c8cf8"]], [legend, false])$

figures/plotting24

行列を使った2変数関数の定義。 関数の定義の中のシングルクォートに注意してください。 行列が整数添字を要求する状況に実際に至る時 plot3dが失敗しないためのものです。

 
(%i1) M: matrix([1,2,3,4], [1,2,3,2], [1,2,3,4], [1,2,3,3])$
(%i2) f(x, y) := float('M [round(x), round(y)])$
(%i3) plot3d (f(x,y), [x,1,4],[y,1,4],[grid,3,3],[legend,false])$

figures/plotting25

elevationを零に設定することで表面を地図として見ることができます。 その地図はそれぞれの色は違ったレベルを表現します。

 
(%i1) plot3d (cos (-x^2 + y^3/4), [x,-4,4], [y,-4,4], [zlabel,""],
       [mesh_lines_color,false], [elevation,0], [azimuth,0],
       color_bar, [grid,80,80], [ztics,false], [color_bar_tics,1])$

figures/plotting26

プロットオプションについての節も参照してください。

Categories:  Plotting

システム変数: plot_options

このオプションは古いバージョンとの互換性のために残されていますが、使用は勧めません。 グローバルなプロットオプションを設定したり、現在の値を見たり、オプションを削除するには、 set_plot_optionget_plot_optionremove_plot_option.を使ってください。

Categories:  Plotting

Function: remove_plot_option (name)

オプションのデフォルト値を削除します。 オプション名を与えなければいけません。

set_plot_optionget_plot_option, Plotting Optionsの節も参照してください。

Categories:  Plotting

関数: set_plot_option (option)

プロットオプションの節にリストされているオプションのすべてを受け付け、 プロットコマンドでの使用のためそれらを保存します。 プロットコマンドそれぞれで設定されるオプションの値は優先順位を持っていますが、 そららのオプションが与えられないなら、この関数で設定されたデフォルト値が使われます。

set_plot_optionは引数を評価し、(与えられたオプションを変更した後、)全体のリストを返します。 もし引数なしで呼び出されたら、単に現在のデフォルトオプションのリストを表示します。

remove_plot_optionget_plot_option, Plotting Optionsの節も参照してください。

例:

grid値の変更。

 
(%i1) set_plot_option ([grid, 30, 40]);
(%o1) [[plot_format, gnuplot_pipes], [grid, 30, 40],
[run_viewer, true], [axes, true], [nticks, 29], [adapt_depth, 5],
[color, blue, red, green, magenta, black, cyan],
[point_type, bullet, box, triangle, plus, times, asterisk],
[palette, [gradient, green, cyan, blue, violet],
[gradient, magenta, violet, blue, cyan, green, yellow, orange,
red, brown, black]], [gnuplot_preamble, ], [gnuplot_term, default]]

Categories:  Plotting

システム関数: spherical_to_xyz

plot3dtransform_xyオプションの値として与えることができます。 その効果は plot3dでの2つの独立変数と関数を点の球座標 (1番目はz軸に対する角度、次にxy射影のx軸に対する角度、最後に原点からの距離) として解釈し、それらをx,y,z座標に変換することです。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4 Plotting Options

すべてのオプションは、この節のキーワードの1つで始まり1つ以上の値が続くリストで構成されます。 以下のリストで指摘されるように、オプションのいくつかは違うプロットコマンドで違う効果をを持ちます。 あり得る値としてtrueかfalseを受け付けるオプションは、単にそれらの名前を書くことでtrueを設定できます。 例えば、オプションとしてlogxとタイプすることは[logx, true]と書くことと等価です。

プロットオプション: adapt_depth [adapt_depth, integer]

デフォルト値: 5

適応プロットルーチンで使われる分割の最大数です。

Categories:  Plotting

プロットオプション: axes [axes, symbol]

デフォルト値: true

ここで symboltrue, false, x, y, solidのいずれかです。 もし falseなら軸は表示されません; もし xyに等しいならxかy軸のみが表示され、 trueに等しいなら両方の軸が表示され、 solidは2つの軸を、デフォルトの破線ではなく実線で表示します。 このオプションは 3次元プロットでは効果も持ちません。

Categories:  Plotting

プロットオプション: azimuth [azimuth, number]

デフォルト値: 30

plot3dプロットは、 plot2dと同じように水平軸と垂直軸を表す x軸と y軸と スクリーンから向かって来る z軸をスタート地点に考えることができます。 その後、z軸を x軸の回りに elevationに等しい角度だけ回転し、 さらに 新しい xy平面を新しい z軸の回りに角度 azimuthだけ回転します。 このオプションは azimuthに関する値を単位、度で設定します。

elevationも参照してください。

Categories:  Plotting

プロットオプション: box [box, symbol]

デフォルト値: true

もし trueに設定されるなら境界枠がプロットに表示されます; もし falseに設定されるなら枠は表示されません。

Categories:  Plotting

プロットオプション: color [color, color_1, …, color_n]

デフォルト値: blue, red, green, magenta, black, cyan

2dプロットでは、これは様々な曲線の色を定義します。 plot3dでは、パレットが使われないとき表面のメッシュ線の色を定義します。

もし色よりも曲線や表面が多いなら色は順に繰り返されます。 有効な色は red, green, blue, magenta, cyan, yellow, orange, violet, brown, gray, black, whiteか、文字#で始まり6桁の16進数数字が続く文字列です; 2つは赤成分、2つは緑成分、2つは青成分です。 もし未知の色の名前が与えられたら黒が代わりに使われます。

Categories:  Plotting

プロットオプション: color_bar [color_bar, symbol]

デフォルト値: plot3dではfalse、mandelbrotやjuliaでは true

ここで symboltruefalse です。 If もし trueなら、 plot3dか、mandelbrot, juliaは異なる値を表現するのにパレットを使い、 色と値の間の対応を示すボックスが右に表示されます。

Categories:  Plotting

プロットオプション: color_bar_tics [color_bar_tics, x1, x2, x3]

カラーバー内でマークと数字を置く場所の値を定義します。 マークを置く場所に関して一番目の数字は初期値、二番目は増分、三番目は最終値です。 二番目と三番目の数字は省略できます。 ただ1つの数字だけ与えたときは、それは自動的に選ばれる初期値からの増分として使われます。

Categories:  Plotting

プロットオプション: elevation [elevation, number]

デフォルト値: 60

plot3dプロットは、 plot2dと同じように水平軸と垂直軸を表す x軸と y軸と スクリーンから向かって来る z軸をスタート地点に考えることができます。 その後、z軸を x軸の回りに elevationに等しい角度だけ回転し、 さらに xy平面を新しい z軸の回りに角度 azimuthだけ回転します。 このオプションは azimuthの値を度単位で設定します。

azimuthも参照してください。

Categories:  Plotting

プロットオプション: grid [grid, integer, integer]

デフォルト値: 30, 30

3次元プロットや julia, mandelbrotプログラムのために x方向、y方向で使われるグリッド点の数を設定します。

Categories:  Plotting

プロットオプション: grid2d [grid, value]

でフォルト値: false

xy平面上に線のグリッドを表示します。 グリッド線が置かれる点は、xとy軸にマークされた目盛と同じ点です。 目盛は xticsyticsオプションで制御できます。

Categories:  Plotting

プロットオプション: iterations [grid, value]

デフォルト値: 9

プログラム mandelbrotと juliaが行う繰り返し回数。

Categories:  Plotting

プロットオプション: label [label, [string, x, y], …]

それぞれのラベルの後に示される x, y座標を持つ点にラベルを書きます。

Categories:  Plotting

プロットオプション: legend  
    legend [legend, string_1, …, string_n]  
    legend [legend, false]

複数のプロットを表示する時プロットのラベルを指定します。 もし与えたラベルの数より多くの式があるならラベルは繰り返されます。 もし値 falseを与えたなら、凡例は表示されません。 デフォルトでは式や関数の名前が使われます。また、点の離散集合に関しては単語 discrete1, discrete2, …が使われます。

Categories:  Plotting

プロットオプション: logx [logx, value]

水平軸を対数的にスケールするようにします。 trueか falseです。

Categories:  Plotting

プロットオプション: logy [logy, value]

垂直軸を対数的にスケールするようにします。 trueか falseです。

Categories:  Plotting

プロットオプション: mesh_lines_color [mesh_lines_color, color]

デフォルト値: black

パレットが使われる時 plot3dがメッシュ線を描くのに使う色を設定します。 オプション colorと同じ色を受け付けます。 (colorで許される色のリストを参照してください。) 値 falseを与えてメッシュ線を完全に消すこともできます。

Categories:  Plotting

プロットオプション: nticks [nticks, integer]

デフォルト値: 29

plot2dで関数をプロットする時、 関数をプロットするための適応プロットルーチンによって使われる点の数の初期値を与えます。 plot3dでパラメトリック関数をプロットする時、 プロットで表示される点の数を設定します。

Categories:  Plotting

プロットオプション: palette  
    palette [palette, [palette_1], …, [palette_n]]  
    palette [palette, false]

1つのパレットか複数のパレットのリストで構成されます。 パレットそれぞれはキーワードに複数の値が続くリストです。 もしキーワードが gradientなら、有効な色のリストを続けなければいけません。

もしキーワードが hueか saturation、valueなら、4つの数字を続けなければいけません。 最初の3つの数は0と1の間でなければならず、 zの最小値に割り当てられる基本色の色調と飽和、値を定義します。 キーワードは3つの属性(色調、飽和、値)のいずれかがzの値に従っての増えることを指定します。 その最後の数は1よりも大きいこともマイナスでもありえます; 変更された属性の対応する値は法1で丸められます。

gnuplotはリストの中の最初のパレットだけを使います; xmaximaは、複数の表面を一緒にプロットする時リストの中のパレットを順に使います; パレットの数が尽きたらそれらは順に繰り返されます。

メッシュ線の色はオプション mesh_lines_colorで与えられます。 もし paletteが値 falseを与えられたら、 表面は陰影されず曲線のメッシュだけで表されます。 その場合、線の色はオプション colorで決定されます。

Categories:  Plotting

プロットオプション: plot_format [plot_format, format]

デフォルト値: Windowsシステムではgnuplot, 他のシステムではgnuplot_pipes

ここでformatは以下のいずれかです; gnuplot, xmaxima, mgnuplot, gnuplot_pipes, geomview.

プロットで使われるフォーマットを設定します。

Categories:  Plotting

プロットオプション: plot_realpart [plot_real_part, symbol]

デフォルト値: false

trueに設定される時、 プロットされる関数は実数値がプロットされる複素関数と見なされます; これは realpart(function)をプロットすることと同値です。 もし falseに設定されたら、 関数が実数値を与えない時には何も表示されません。 例えば、 xが負の時、 log(x)は実数値がlog(abs(x))に等しい複素数値を与えます; もし plot_realparttrueだったなら log(-5)log(5)としてプロットされますが、 もし plot_realpartfalseだったなら 何もプロットされません。

Categories:  Plotting

プロットオプション: point_type [point_type, type_1, …, type_n]

gnuplotでは、 スタイル"points"か"linespoints"でプロットされた点の集合それぞれは このリストから取られたオブジェクトを使って順に表されます。 もしこのリスト内のオブジェクト以上に点の集合があるなら、 それらは順に繰り返されます。 使うことができる可能なオブジェクト: bullet, circle, plus, times, asterisk, box, square, triangle, delta, wedge, nabla, diamond, lozenge

Categories:  Plotting

プロットオプション: pdf_file [pdf_file, file_name]

このオプションは、プロットをスクリーンに表示する代わりに file_nameという名前の PDFファイルに保存します。 file_nameが文字"/"を含まない限り、デフォルトでは、そのファイルは変数 maxima_tempdirで定義されたディレクトリに生成されます; maxima_tempdirの値を変えて違うディレクトリにファイルを保存できます。 オプション gnuplot_pdf_term_commandも与えられた時は、それを使って Gnuplotの PDF端末をセットアップします; そうでなければ、Gnuplotの pdfcairo端末は EPSオプション、幅 3の実線、17.2 cm掛ける12.9 cmのプロットサイズ、18ポイントのフォントを使います。

Categories:  Plotting

プロットオプション: png_file [png_file, file_name]

このオプションは、プロットをスクリーンに表示する代わりに file_nameという名前の PNGグラフィックファイルに保存します。 file_nameが文字"/"を含まない限り、デフォルトでは、そのファイルは変数 maxima_tempdirで定義されたディレクトリに生成されます; maxima_tempdirの値を変えて違うディレクトリにファイルを保存できます。 オプション gnuplot_png_term_commandも与えられた時は、それを使って Gnuplotの PNG端末をセットアップします; そうでなければ、Gnuplotの pngcairo端末は 12ポイントのフォントを使います。

Categories:  Plotting

プロットオプション: ps_file [ps_file, file_name]

このオプションは、プロットをスクリーンに表示する代わりに file_nameという名前のポストスクリプトファイルに保存します。 file_nameが文字"/"を含まない限り、デフォルトでは、そのファイルは変数 maxima_tempdirで定義されたディレクトリに生成されます; maxima_tempdirの値を変えて違うディレクトリにファイルを保存できます。 オプション gnuplot_ps_term_commandも与えられた時は、それを使ってGnuplotのPostscript端末をセットアップします; そうでなければ、GnuplotのPostscript端末は EPSオプション、幅2の実線、16.4 cm掛ける12.3 cmのプロットサイズ、24ポイントのフォントを使います。

Categories:  Plotting

プロットオプション: run_viewer [run_viewer, symbol]

このオプションは、プロットフォーマットが gnuplotで端末が defaultの時か、 Gnuplot端末が dumb(gnuplot_termを参照してください)に設定される時、使用されるだけです。 trueかfalseを取ります。

もし端末が defaultなら、ファイル maxout_xxx.gnuplot (もしくはgnuplot_out_file)で指定された他の名前)が プロットを生成するのに必要なgnuplotコマンドで作成されます。 オプション run_viewerはこれらのコマンドを実行しプロットを表示するために Gnuplotが起動されるかどうかを制御します。

もし端末が defaultなら、gnuplotが起動し、 maxout_xxx.gnuplot内のコマンドを実行し、 別のファイル maxplot.txt(もしくはgnuplot_out_fileで指定された別の名前)を生成します。 オプション run_viewerは プロットのASCII表現であるそのファイルをMaximaかXmaximaコンソールで表示するかどうかを制御します。

このオプションのデフォルト値は trueで、プロットをコンソールか別のグラフィックウィンドウで表示されるようにします。

Categories:  Plotting

プロットオプション: same_xy [same_xy , value]

trueか falseを取ります。 2dでも 3dプロットでも、もし trueなら xとy軸で使われるスケールが同じになります。 yx_ratioも参照してください。

Categories:  Plotting

プロットオプション: same_xyz [same_xyz , value]

trueか falseを取ります。 もし trueなら 3dプロットの3軸で使われるスケールが同じになります。

Categories:  Plotting

プロットオプション: style  
    style [style, type_1, …, type_n]  
    style [style, [style_1], …, [style_n]]

様々な関数やデータ一式のために2dプロットで使われるスタイル。 単語 styleの後には1つ以上のスタイルが続きます。 もし与えられたスタイルよりも多くの関数やデータ集合があったらスタイルは繰り返されます。 それぞれのスタイルは、実線のためにはlines、孤立点のためにはpoints、 線分と孤立点のためにはlinespoints、点線のためにはdotsを取り得ます。 Gnuplotでは impulsesスタイルも使えます。

スタイルそれぞれはいくつかの追加のパラメータとリストの中に入れることができます。 linesは1つか2つの数を取ります: 線の太さと、色を指定する整数。 デフォルトの色コードは、1: 青, 2: 赤, 3: マゼンタ, 4: オレンジ, 5: ブラウン, 6: ライム, 7: アクア、です。 もしX11ではない端末でGnuplotを使うならこれらの色は違っているかもしれません; 例えば、もしオプション [gnuplot_term, ps]を使うなら 色インデックス 4はオレンジではなく黒に対応します。

pointsは1つか2つか3つのパラメータを取ります; 最初のパラメータは点の半径、2番目のパラメータは同じ色を選択する (linesで使われるコードと同じ)整数、 3番目のパラメータは現在Gnuplotでだけ使われており、 点の代わりにいくつかのオブジェクトに対応します。 オブジェクトのデフォルト値は、1: 黒丸, 2: 白丸, 3: 十字, 4: ×, 5: 米印, 6: 黒四角, 7: 白四角, 8: 黒三角, 9: 白三角, 10: 黒逆三角, 11: 白逆三角, 12: 黒菱形, 13: 白菱形 です。

linespointsは4つまでのパラメータを取ります; 線の太さ、点の半径、色、点を置き換えるオブジェクトのタイプ。

colorpoint_typeも参照してください。

Categories:  Plotting

プロットオプション: svg_file [svg_file, file_name]

このオプションは、プロットをスクリーンに表示する代わりに file_nameという名前のポストスクリプトファイルに保存します。 file_nameが文字"/"を含まない限り、デフォルトでは、そのファイルは変数 maxima_tempdirで定義されたディレクトリに生成されます; maxima_tempdirの値を変えて違うディレクトリにファイルを保存できます。 オプション gnuplot_svg_term_commandも与えられた時は、それを使ってGnuplotの SVG端末をセットアップします; そうでなければ、Gnuplotの svg端末は 14ポイントのフォントを使います。

Categories:  Plotting

プロットオプション: t [t, min, max]

パラメトリックプロットのデフォルトの範囲。

Categories:  Plotting

プロットオプション: title [title, text]

プロットの頭に書かれるタイトルを定義します。

Categories:  Plotting

プロットオプション: transform_xy [transform_xy, symbol]

デフォルト値: false

ここで、symbolfalseか関数 transform_xyを使って得られる結果をです。 もし falseと違うなら plot3dで3座標を変換するのに使われます。

make_transform, polar_to_xy, spherical_to_xyzを参照してください。

Categories:  Plotting

プロットオプション: x [x, min, max]

plot2dコマンドの最初の(または plot3dの最初の二つのどちらかの) オプションとして使われる時、 1番目の独立変数が xであることを示しその範囲を設定します。 最初のオプションの後(またはplot3dでは2番目のオプションの後)、 プロット内で示される有効な水平領域を定義するために再び使うことができます。

Categories:  Plotting

プロットオプション: xlabel [xlabel, string]

1番目の軸をラベルするstringを指定します; もしこのオプションが使われないなら、 plot2dimplicit_plotで関数をプロットする時、 そのラベルは独立変数の名前です。 plot3dで表面を、もしくはcontour_plotで等高線をプロットする時、 そのラベルは1番目の変数の名前です。 パラメトリックプロットの場合、1番目の式です。 set_plot_optionでは使うことはできません。

Categories:  Plotting

プロットオプション: xtics [xtics, x1, x2, x3]

x軸上でマークと数が置かれる場所の値を定義します。 マークが置かれる場所に関して、一番目の数が初期値、二番目が増分、三番目が最終値です。 二番目と三番目の数は省略できます。 1つだけ数が与えられた時は、自動的に選ばれる初期値からの増分として使われます。

Categories:  Plotting

プロットオプション: xy_scale [xy_scale, sx, sy]

2dプロットでは、ウィンドウの総サイズとプロットに使われるサイズの比を定義します。 引数として与えられた2つの数は xと y軸でのスケール因子です。

Categories:  Plotting

プロットオプション: y [y, min, max]

plot3dでの最初の2つのオプションの1つとして使われる時、 独立変数の1つが yであることを示しその範囲を設定します。 そうでないならプロットで示される2番目の変数の有効領域を定義します。

Categories:  Plotting

プロットオプション: ylabel [ylabel, string]

二番目の軸をラベルするstringを指定します; もしこのオプションが使われないなら、 plot2dimplicit_plotで関数をプロットする時 そのラベルは、"y"となり、 plot3dで表面をプロットする時や contour_plotで等高線をプロットする時 二番目の変数名となり、 パラメトリックプロットの場合には二番目の式になります。 set_plot_optionでは使うことはできません。

Categories:  Plotting

プロットオプション: ytics [ytics, y1, y2, y3]

y軸上でマークと数が置かれる場所の値を定義します。 マークが置かれる場所に関して、一番目の数が初期値、二番目が増分、三番目が最終値です。 二番目と三番目の数は省略できます。 1つだけ数が与えられた時は、自動的に選ばれる初期値からの増分として使われます。

Categories:  Plotting

プロットオプション: yx_ratio [yx_ratio, r]

2dプロットでは、プロットを作るのに使われる長方形の垂直側と水平側の間の比。 same_xyも参照してください。

Categories:  Plotting

プロットオプション: z [z, min, max]

プロットで示されるzの値の有効範囲を設定するために plot3dで使われます。

Categories:  Plotting

プロットオプション: zlabel [zlabel, string]

plot3dを使う時、第三軸をラベルする stringを指定します。 もしこのオプションが使われないなら、 そのラベルは表面をプロットする時は"z"となり、 パラメトリックプロットの場合には三番目の式になります。 set_plot_optionでは使うことはできません。 また、plot2d, implicit_plotでは無視されます。

Categories:  Plotting

プロットオプション: zmin [zmin, z]

3dプロットでの、プロットボックスの底のzの値。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.5 Gnuplot Options

gnuplotに特化したプロットオプションがいくつかあります。 これらのオプションのいくつかは gnuplotコマンドそのものであり文字列として指定されます。 詳細はgnuplotドキュメンテーションを参照してください。 ほとんどの場合、これらのオプションは より一般的な上記のオプションの1つで置き換えることができます; これらの場合、より一般的な形式を使うことをお勧めします。

プロットオプション: gnuplot_term [gnuplot_term, terminal_name]

gnuplot用の出力端末タイプを設定します。 引数 terminal_nameは文字列か以下の3の特殊シンボルです。

Categories:  Plotting

プロットオプション: gnuplot_out_file [gnuplot_out_file, file_name]

端末が defaultに設定されている時、 gnuplotがインタープレトするコマンドを含むファイルのデフォルト名を置き換えるのに使われます。 また、端末が defaultと違う時、 gnuplotが生成するグラフィックファイルのデフォルト名を置き換えるのに使われます。 もし1以上のスラッシュ"/"を含むなら、 ファイルの名前はそのままになります; プロットコマンドが生成するファイルの完全な名前はいつも それらのコマンドの出力として送られるので、 コマンドがセミコロンで終了しているならそれらを見ることができます。

gnuplot_termオプションと関連して使われる時、 Gnuplotがサポートするグラフィックフォーマットの1つで ファイルにプロットを保存するのに使われます。 PNGや, PDF, ポストスクリプト, SVGを生成するには、 オプション png_file, pdf_file, ps_file, svg_fileを使うのがより簡単です。

Categories:  Plotting

プロットオプション: gnuplot_pm3d [gnuplot_pm3d, value]

falseの値ではPM3Dモードの使用をディレーブルするのに使われます。 PM3Dモードはデフォルトで使用可能です。

Categories:  Plotting

プロットオプション: gnuplot_preamble [gnuplot_preamble, string]

このオプションは Gnuplotに送られるどんな他のコマンドの前に gnuplotコマンドを挿入します。 有効な gnuplotコマンドはどんなものでも使うことができます。 複数のコマンドはセミコロンで分離されなければいけません。 gnuplot_postambleも参照してください。

Categories:  Plotting

プロットオプション: gnuplot_postamble [gnuplot_postamble, string]

このオプションは Gnuplotに送られる他のコマンドの後でプロットコマンドが送られる直前に gnuplotコマンドを挿入します。 有効な gnuplotコマンドはどんなものでも使うことができます。 複数のコマンドはセミコロンで分離されなければいけません。 gnuplot_preambleも参照してください。

Categories:  Plotting

プロットオプション: gnuplot_default_term_command

[gnuplot_default_term_command, command]

デフォルト端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term wxt size 640,480 font \",12\"; set term pop"

Categories:  Plotting

プロットオプション: gnuplot_dumb_term_command

[gnuplot_dumb_term_command, command]

ダム端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term dumb 79 22" これは79文字掛ける22文字のテキスト出力を生成します。

Categories:  Plotting

プロットオプション: gnuplot_pdf_term_command [gnuplot_pdf_term_command, command]

PDF端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term pdfcairo color solid lw 3 size 17.2 cm, 12.9 cm font \",18\"" 更に知るにはgnuplotドキュメントを参照してください。

Categories:  Plotting

プロットオプション: gnuplot_png_term_command [gnuplot_png_term_command, command]

PNG端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term pngcairo font \",12\"" 更に知るにはgnuplotドキュメントを参照してください。

Categories:  Plotting

プロットオプション: gnuplot_ps_term_command [gnuplot_ps_term_command, command]

ポストスクリプト端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term postscript eps color solid lw 2 size 16.4 cm, 12.3 cm font \",24\"" 更に知るには set term postscriptに関する gnuplotドキュメントを参照してください。

Categories:  Plotting

プロットオプション: gnuplot_svg_term_command [gnuplot_svg_term_command, command]

SVG端末として端末タイプを設定するgnuplotコマンド。 もしこのオプションが設定されていなければ、使われるコマンドは以下の通り: "set term svg font \",14\"". 更に知るには gnuplotドキュメントを参照してください。

Categories:  Plotting

プロットオプション: gnuplot_curve_titles

これは上記で記載した legendで置き換えられた古いオプションです。

Categories:  Plotting

プロットオプション: gnuplot_curve_styles

これは上記で記載した styleで置き換えられた古いオプションです。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.6 Gnuplot_pipes Format Functions

関数: gnuplot_start ()

gnuplot_pipesフォーマットでのプロットのため使われる gnuplotへのパイプを開きます。 プロットの前に手動でパイプを開く必要はありません。

Categories:  Plotting

関数: gnuplot_close ()

gnuplot_pipesフォーマットで使われた gnuplotへのパイプを閉じます。

Categories:  Plotting

関数: gnuplot_restart ()

gnuplot_pipesフォーマットで使われた gnuplotへのパイプを閉じて新しいパイプを開きます。

Categories:  Plotting

関数: gnuplot_replot  
    gnuplot_replot ()  
    gnuplot_replot (s)

gnuplotウィンドウを更新します。 もし gnuplot_replotが文字列 sの中の gnuplotコマンドを引数としてコールされたなら ウィンドウが再プロットされる前に sを gnuplotに送ります。

Categories:  Plotting

関数: gnuplot_reset ()

gnuplot_pipesフォーマットと一緒に使われる gnuplotの状態をリセットします。 gnuplotウィンドウを更新するには gnuplot_resetの後に gnuplot_replotをコールください。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13. File Input and Output


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.1 Comments

Maximaの入力中 /**/の間のテキストはどんなものでもコメントです。 です。

Maximaのパーサはコメントを入力ストリームでのトークンを見つけるための空白として扱います; コメントで常にトークンは終わります。 a/* foo */bのような入力は1つのトークンabではなく、2つのトークン abを含みます。 ほかの点ではMaximaはコメントを無視します; コメントの中身も位置もパースされた入力式に残りません。

コメントは任意の深さに入れ子にすることができます。 /**/の区切り記号はマッチングペアを形作ります。 /*の数は */と同じでなければいけません。

例:

 
(%i1) /* aa is a variable of interest */  aa : 1234;
(%o1)                         1234
(%i2) /* Value of bb depends on aa */  bb : aa^2;
(%o2)                        1522756
(%i3) /* User-defined infix operator */  infix ("b");
(%o3)                           b
(%i4) /* Parses same as a b c, not abc */  a/* foo */b/* bar */c;
(%o4)                         a b c
(%i5) /* Comments /* can be nested /* to any depth */ */ */  1 + xyz;
(%o5)                        xyz + 1

Categories:  Syntax


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.2 Files

簡単に言えば、ファイルはデータやテキスト含む個々のストレージデバイス上のある領域です。 ディスク上のファイルは比喩的に「名簿(ディレクトリ)」の中にグループ化されます。 簡単に言えば、ディレクトリはファイルのリストです。 ファイルを扱うコマンドは以下の通りです:

   appendfile           batch                 batchload
   closefile            file_output_append    filename_merge
   file_search          file_search_maxima    file_search_lisp
   file_search_demo     file_search_usage     file_search_tests
   file_type            file_type_lisp        file_type_maxima
   load                 load_pathname         loadfile
   loadprint            pathname_directory    pathname_name
   pathname_type        printfile             save
   stringout            with_stdout           writefile

ファイル名が plot2dsave, writefileのような関数に渡され、 ファイル名がパスを含まない時 Maximaは現在のワーキングディレクトリにファイルを保存します。 現在のワーキングディレクトリは Windowsや Linuxのようなシステムとインストールに依存します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.3 Functions and Variables for File Input and Output

関数: appendfile (filename)

コンソールの筆記録を filenameに追加します。 筆記録ファイルが存在すればいつも追加されることを除いて、 appendfilewritefileと同じです。

closefileappendfilewritefileが開いた筆記録ファイルを閉じます。

Categories:  File output · Console interaction

関数: batch  
    batch (filename)  
    batch (filename, option)

batch(filename)は Maximaの式を filenameから読み込んで評価します。 batchはリスト file_search_maximaの中から filenameを検索します。 file_searchも参照してください。

batch(filename, demo)demo(filename)ようなものです。 この場合、batchはリスト file_search_demoの中から filenameを検索します。 demoを参照してください。

batch(filename, test)はオプション display_all=trueを付けた run_testsuiteようなものです。 この場合、batchrun_testsuiteのようにリスト file_search_testsではなく、 リスト file_search_maximaの中で filenameを検索します。 更に run_testsuiteはリスト testsuite_filesの中にあるテストを実行します。 batchを使うとどんなファイルもテストモードで実行することが可能です。 ファイルはリスト file_search_maximaの中であってもいいです。 これはテストファイルを書いている時に便利です。

filenameは一連の Maximaの式からなり、それぞれの式は ;$で終了します。 特殊変数 %と関数 %thはファイル内での前の結果を参照します。 ファイルは :lisp構成子を含むかもしれません。 ファイルの中の空白、タブ、改行は無視されます。 必要な入力ファイルはテキストエディタもしくは stringout関数で作ることができます。

batchはそれぞれの入力式を filenameから読み込み、 入力をコンソールに表示し、対応する出力式を計算し、出力式を表示します。 入力ラベルは入力式に割り当てられ、出力ラベルは出力式に割り当てられます。 batchはエラーがない限りファイルの中のすべての入力式を評価します。 もしユーザー入力が(例えば、 asksignaskintegerによって)要求されたら、 batchは必要な入力を入手するためポーズして、入手後評価を続けます。

コンソールで control-Cをタイプすると batchを停止させることが可能な場合があります。 control-Cの効果は基礎となる Lispの実装に依存します。

batchにはいくつか用法があります。 役立つコマンドラインの蓄積を供給したり、エラーのないデモンストレーションを与えたり、 複雑な問題を解く時人の考えを整理するのを助けたり。

batchは引数を評価します。 第二引数なしで呼び出されたり、オプション demoで呼び出された時、 batchfilenameのパスを文字列として返します。 オプション testで呼び出された時、 戻り値は空のリスト[]filenameと失敗したテストの数を含むリストです。

load, batchload, demoも参照してください。

Categories:  Session management · File input

関数: batchload (filename)

filenameから Maximaの式を読み込んで評価します。 入力式や出力式を表示しません。 ラベルを出力式に割り当てません。 しかし (printdescribeが生成するような)プリント文の出力は表示されます。

特殊変数 %や関数 %thは ファイルの中の結果ではなく対話インタープリタからの以前の結果を参照します。 ファイルは:lisp構成子を含むことはできません。

batchloadfilenameのパスを文字列として返します。 batchloadは引数を評価します。

batchloadも参照してください。

Categories:  Session management · File input

関数: closefile ()

writefileappendfileで開いたトランスクリプトファイルを閉じます。

Categories:  File output · Console interaction

オプション変数: file_output_append

デフォルト値: false

file_output_appendは ファイル出力関数が出力ファイルに追加するかファイルを新たに書き換えるか(truncate)決めます。 file_output_appendtrueの時 ファイル出力関数は出力ファイルに追加します。 そうでないなら出力ファイルは書き換えられます。

save, stringout, with_stdoutfile_output_appendに関係します。 出力ファイルを書き出す他の関数は file_output_appendに関係しません。 特に、プロット関数や変換関数は常に出力ファイルを書き換え、 texappendfileはいつも追加します。

Categories:  File output · Global flags

mo

関数: filename_merge (path, filename)

pathfilenameから限定された(modified)パスを構成します。 もし pathの最後の構成要素が ###.somethingの形なら、 構成要素は filename.somethingに置き換えられます。 そうでないなら最後の構成要素は単に filenameに置き換えられます。

結果はLispのパス名オブジェクトです。

Categories:  File input · File output

関数: file_search  
    file_search (filename)  
    file_search (filename, pathlist)

file_searchはファイル filenameを検索し、 もし見つかったら(文字列として)ファイルへのパスを返します; 見つからないなら file_searchfalseを返します。 file_search (filename)はデフォルトのサーチディレクトリを検索します。 デフォルトのサーチディレクトリは file_search_maxima, file_search_lisp, file_search_demo変数によって指定されます。

file_searchは、 名前を「ワイルドカード」ファイルサーチパターンにマッチさせようとする前に、 最初に、渡された実際の名前が存在するかチェックします。 ファイルサーチパターンに関連した file_search_maximaを参照してください。

引数 filenameは、パスとファイル名、もしくは単にファイル名、もしくは、 もしファイルサーチディレクトリがファイルサーチパターンを含むなら 単にファイル名のベース(拡張子なし)のいずれかです。 例えば、

 
file_search ("/home/wfs/special/zeta.mac");
file_search ("zeta.mac");
file_search ("zeta");

ファイルが存在していて、 /home/wfs/special/###.macfile_search_maximaに中にあるという仮定の下で 上記すべては同じファイルを見つけます。

file_search (filename, pathlist)pathlistが指定するディレクトリの中だけを検索します。 ここで pathlistは文字列のリストです。 引数 pathlistはデフォルトの検索ディレクトリに取って代わります。 なので、もしパスリストが与えられたら file_searchは指定されたところだけを検索し、 デフォルトの検索ディレクトリのいずれも検索しません。 pathlistの中に1つのディレクトリだけしかない場合でも 要素1つのリストとして与えなければいけません。

ユーザーはデフォルト検索ディレクトリを変更できます。 file_search_maximaを参照してください。

loadfile_search_maximafile_search_lispを を検索ディレクトリとして指定して file_searchを呼び出します。

Categories:  File input

オプション変数: file_search_maxima
オプション変数: file_search_lisp
オプション変数: file_search_demo
オプション変数: file_search_usage
オプション変数: file_search_tests

これらの変数は loadや, demo, 他のいくつかの Maximaの関数が検索するディレクトリのリストを指定します。 これらの変数のデフォルト値は Maximaインストレーションの様々なディレクトリを指名します。

ユーザーは デフォルト値を置き換えるかディレクトリを追加することでこれらの変数を変更できます 例えば、

 
file_search_maxima: ["/usr/local/foo/###.mac",
    "/usr/local/bar/###.mac"]$

file_search_maximaのデフォルト値を置き換えますし、

 
file_search_maxima: append (file_search_maxima,
    ["/usr/local/foo/###.mac", "/usr/local/bar/###.mac"])$

は2つのディレクトリを追加します。 ファイル maxima-init.macに Maximaが起動した時にファイル検索パスが自動的に割り当てられるような式を入れておくと便利かもしれません。 Introduction for Runtime Environmentも参照してください。

特別な「ワイルドカード」構造によってファイル名の拡張子やパスを多重にしてすることができます。 文字列 ###は求められている名前に拡張される一方、 カーリー括弧 {foo,bar,baz}で囲まれ、コンマで分離されたリストは 多重文字列に拡張されます。 例えば、求められてる名前が neumannとすると

 
"/home/{wfs,gcj}/###.{lisp,mac}"

/home/wfs/neumann.lisp, /home/gcj/neumann.lisp, /home/wfs/neumann.mac, /home/gcj/neumann.macに展開されます。

Categories:  File input · Global variables

関数: file_type (filename)

ファイル名拡張子に基づいて filenameの中身について推測を返します。 filenameは実際のファイルを参照する必要はありません; ファイルを開いたり中身を探索したりはしません。

戻り値はシンボルであり、 object, lisp, maximaのいずれかです。 もし拡張子が file_type_maximaの中の値の1つと一致したら、 file_typemaximaを返します。 もし拡張子が file_type_lispの中の値の1つと一致したら、 file_typelispを返します。 上のいずれでもないなら、file_typeobjectを返します。

pathname_typeも参照してください。

デフォルト値に関しては file_type_maximafile_type_lispを 参照してください。

例:

 
(%i2) map('file_type,
          ["test.lisp", "test.mac", "test.dem", "test.txt"]);
(%o2)            [lisp, maxima, maxima, object]

Categories:  File input

オプション変数: file_type_lisp

デフォルト値: [l, lsp, lisp]

file_type_lispは maximaが Lispソースファイルの印として認識するファイル拡張子のリストです。

file_typeも参照してください。

オプション変数: file_type_maxima

デフォルト値: [mac, mc, demo, dem, dm1, dm2, dm3, dmt, wxm]

file_type_maximaは、 maximaが Maximaソースファイルの印として認識するファイル拡張子のリストです。

file_typeも参照してください。

関数: load (filename)

filenameの中の式を評価します。 そして変数、関数、他のオブジェクトをMaximaにもたらします。 filenameから再生されたバインドは存在するオブジェクトのバインドを上書きします(clobber)。 ファイルを見つけるために loadは、探索ディレクトリとして file_search_maximafile_search_lispを引数に与えて file_searchをコールします。 もし loadが成功したらファイルの名前を返します。 そうでないなら loadはエラーメッセージを出力します。

loadは Lispコードでも Maximaコードでも等しく機能します。 save, translate_file, compile_file ―これらはLispコードを生成します― が生成したファイルはすべて loadによって処理できます。 loadは Lispファイルをロードするために loadfileをコールし、 Maximaファイルをロードするために batchloadをコールします。

loadは Maximaファイルの中で :lisp構成子を認識しません。 filenameを処理する時 グローバル変数 _, __, %, %thloadがコールされた時バインドされていた値を持ちます。

loadコマンドが呼ばれる前に defstructが構造体を定義しているなら、 それらは構造体として再読み込みされるだけということも注意してください。

loadfile, batch, batchload, demoも参照してください。 loadfileはLispファイルを処理します; batch, batchload, demoは Maximaファイルを処理します。

ファイル探索メカニズムについてもっと詳しいことは file_searchを参照してください。

loadは引数を評価します。

Categories:  Session management · File input

システム変数: load_pathname

デフォルト値: false

関数 loadloadfile, batchloadを使ってファイルがロードされる時、 システム変数 load_pathnameは処理するファイルのパス名を示します。

変数 load_pathnameはロード中にファイルからアクセスすることができます。

例:

ディレクトリ

"/home/dieter/workspace/mymaxima/temp/"

に以下のコマンドを含むバッチファイル test.macがあるとしましょう。

 
print("The value of load_pathname is: ", load_pathname)$
print("End of batchfile")$

すると以下の出力を得ます。

 
(%i1) load("/home/dieter/workspace/mymaxima/temp/test.mac")$
The value of load_pathname is:
                   /home/dieter/workspace/mymaxima/temp/test.mac
End of batchfile

Categories:  File input

関数: loadfile (filename)

filenameの中の Lisp式を評価します。 loadfilefile_searchを呼び出しません。 なのでファイル拡張子とファイルを見つけるのに filenameは必要なパスも含まなければいけません。

loadfilesave, translate_file, compile_fileによって生成されたファイルを処理できます。 ユーザーは loadfileの代わりに loadを使うほうが便利だと気づくでしょう。

Categories:  Session management · File input

オプション変数: loadprint

デフォルト値: true

loadprintはファイルがロードされた時メッセージを表示するかどうか告げます。

Categories:  File input · Global flags

関数: directory (path)

ファイルシステムの pathの中のファイルとディレクトリのリストを返します。

pathはワイルドカード文字(すなわち、パスの未指定部分を表す文字)を含むかもしれません。 それはほとんどのシステム上で少なくともアスタリスクを含み、システムによっては可能な他の文字も含みます。

ディレクトリ はLisp関数 DIRECTORYを頼りにしていて、実装依存の振る舞いがあるかもしれません。

Categories:  File input

関数: pathname_directory (pathname)
関数: pathname_name (pathname)
関数: pathname_type (pathname)

これらの関数はpathnameの構成要素を返します。

例:

 
(%i1) pathname_directory("/home/dieter/maxima/changelog.txt");
(%o1)                 /home/dieter/maxima/
(%i2) pathname_name("/home/dieter/maxima/changelog.txt");
(%o2)                       changelog
(%i3) pathname_type("/home/dieter/maxima/changelog.txt");
(%o3)                          txt

Categories:  File input

関数: printfile (path)

pathという名前のファイルをコンソールに表示します。 pathは文字列かシンボルです; もしシンボルなら文字列に変換されます。

もし pathが現在のワーキングディレクトリからアクセス可能なファイル名なら そのファイルがコンソールに表示されます。 そうでないなら printfilefilename_mergeを介して file_search_usageの要素のそれぞれに pathを追加することでファイルを見つけようとします。

もし pathが存在しているファイルを示しているなら、 printfilepathを返し、 そうでないなら成功したファイル名マージの結果を返します。

Categories:  File input · Console interaction

関数: save  
    save (filename, name_1, name_2, name_3, …)  
    save (filename, values, functions, labels, …)  
    save (filename, [m, n])  
    save (filename, name_1=expr_1, …)  
    save (filename, all)  
    save (filename, name_1=expr_1, name_2=expr_2, …)

filenamename_1, name_2, name_3, … の現在値を保存します。 引数は変数、関数、他のオブジェクトの名前です。 もし名前が関連づけられた値や関数を持たないなら無視されます。 savefilenameを返します。

saveはデータを Lisp式の形式で保存します。 もし filename.lispで終わるなら、 saveで保存されたデータは load (filename)によって回復できます。 loadを参照してください。

グローバルフラグ file_output_appendは、 saveが出力ファイルに追加するか、書き換えるか決めます。 file_output_appendtrueの時、 saveは出力ファイルに追加します。 そうでないなら saveは出力ファイルを切り詰めます。 どちらの場合も、もしファイルが存在しないなら saveはファイルを生成します。

特殊形式 save (filename, values, functions, labels, ...)values, functions, labels, などと指名された項目を保存します。 名前は変数 infolistsによって指定された任意のものです。 valuesはユーザー定義変数すべてを含みます。

特殊形式 save (filename, [m, n])は、 mから nまでの入力ラベル、出力ラベルの値を保存します。 mnは整数リテラルでなければならないことに注意してください。 例えば、save ("foo.1", %i42, %o42)のように、 入力ラベル、出力ラベルは1つ1つ保存することもできます。 save (filename, labels)は入力ラベル出力ラベルすべてを保存します。 保存されたラベルが回復された時、それらは存在していたラベルは変更されます。

特殊形式 save (filename, name_1=expr_1, name_2=expr_2, ...)は、 expr_1, expr_2, …,の値をname_1, name_2, …という名前で保存します。 例えば、 save ("foo.1", aa=%o88)のように、 この形式を入力ラベル出力ラベルに適用することは便利です。 この形式の等式の右辺は任意の式であり、その式は評価されます。 この形式は、新しい名前を現在のMaximaの環境に導入はせず、 ただ、 filenameにそれらを保存します。

これらの特殊形式と saveの一般形式は自由に混在させることができます。 例えば、 save (filename, aa, bb, cc=42, functions, [11, 17])

特殊形式 save (filename, all)はMaximaの現在の状態を保存します。 これは、自動的に定義された項目はもちろん、ユーザー定義の変数、関数、配列などすべてを 含みます。 もしユーザーが file_search_maximashowtimeのようなシステム変数に新しい値を割り当てていたなら、 保存項目はそれらを含みます。 myoptionsを参照してください。

savefilenameを評価し、他の引数すべてをクォートします。

Categories:  Session management · File output

関数: stringout  
    stringout (filename, expr_1, expr_2, expr_3, …)  
    stringout (filename, [m, n])  
    stringout (filename, input)  
    stringout (filename, functions)  
    stringout (filename, values)

stringoutは、式が入力としてタイプされたのと同じ形式で式をファイルに書き込みます。 なので、ファイルは batchdemoコマンドの入力として使えますし、 どんな目的のためでも編集できます。 stringoutwritefileが進行中の間に実行することができます。

グローバルフラグ file_output_appendは、 stringoutが出力ファイルに追加するか書き換えるか決めます。 file_output_appendtrueの時、 stringoutは出力ファイルに追加します。 そうでないなら stringoutは出力ファイルを切り詰めます。 どちらの場合も、もしファイルが存在しなければ stringoutはファイルを生成します。

stringoutの一般形式は1つ以上の式の値を出力ファイルに書き込みます。 もし式が変数なら、変数の値だけが書き込まれ変数名は書き込まれないことに注意してください。 役に立つ特殊な場合として、式は 入力ラベル (%i1, %i2, %i3, …) もしくは出力ラベル (%o1, %o2, %o3, …)でもよいです。 )

もし grindtrueなら、 stringoutgrindフォーマットを使って出力をフォーマットします。 そうでないなら stringフォーマットが使われます。 grindstringを参照してください。

特別な形 stringout (filename, [m, n])は mからnまでの入力ラベルの値を書き込みます。

特別な形 stringout (filename, input)は 入力ラベルすべてをファイルに書き込みます。

特別な形 stringout (filename, functions)は (グローバルリスト functionsで指定される) ユーザー定義関数すべてをファイルに書き込みます。

特別な形 stringout (filename, values)は、 (グローバルリスト valuesで指定される) ユーザーが割り当てた変数すべてをファイルに書き込みます。 変数それぞれは変数名とコロンとその値という割り当て文として出力されます。 stringoutの一般形は変数を割り当て文として出力しないことに注意してください。

Categories:  Session management · File output

関数: with_stdout  
    with_stdout (f, expr_1, expr_2, expr_3, …)  
    with_stdout (s, expr_1, expr_2, expr_3, …)

expr_1, expr_2, expr_3, ...を評価し、 生成された出力すべてをファイル fか出力ストリーム sに書き込みます。 評価される式は出力に書き込まれません。 出力は print, display, grindや他の関数が生成したものです。

グローバルフラグ file_output_appendは、 with_stdoutが出力ファイル fに追加するか書き換えるかを決めます。 file_output_appendtrueの時、 with_stdoutは出力ファイルに追加します。 そうでないなら with_stdoutは出力ファイルを書き換えます。 どちらの場合も、もしファイルが存在しないなら with_stdoutはファイルを生成します。

with_stdoutは最後の引数の値を返します。

writefileも参照してください。

 
(%i1) with_stdout ("tmp.out", for i:5 thru 10 do
      print (i, "! yields", i!))$
(%i2) printfile ("tmp.out")$
5 ! yields 120
6 ! yields 720
7 ! yields 5040
8 ! yields 40320
9 ! yields 362880
10 ! yields 3628800

Categories:  File output

関数: writefile (filename)

Maximaセッションのトランスクリプトを filenameに書き込むことを開始します。 ユーザーと Maximaの間の対話すべてが ちょうどコンソールに現れるようにこのファイルに記録されます。

トランスクリプトはコンソール出力フォーマットで出力されるので、 Maximaに再ロードすることはできません。 再ロード可能な式を含むファイルを作るには、 savestringoutを参照してください。 saveは Lisp形式の式を保存する一方、stringoutは Maxima形式の式を保存します。

filenameが既に存在している時、writefileの実行の効果は基礎となる Lisp実装に依存します; トランスクリプトファイルは書き換えられるかもしれませんし、追加されるかもしれません。 appendfileはいつもトランスクリプトファイルに追加します。

以前の対話の表示を保存するためには writefileの後 playbackを実行するのが便利かもしれません。 playbackは入力と出力変数 (%i1, %o1, など)だけを表示し、 (戻り値と違い)関数の中のプリント文が生成した出力はいずれも playbackによって表示されません。

closefilewritefileappendfileが開いたトランスクリプトファイルを閉じます。

Categories:  File output · Console interaction


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.4 Functions and Variables for TeX Output

wxMaximaの組み込みの TeX出力機能はここで記述する関数を使いませんが、 代わりにそれ自身用の実装を使うことに注意してください。

関数: tex  
    tex (expr)  
    tex (expr, destination)  
    tex (expr, false)  
    tex (label)  
    tex (label, destination)  
    tex (label, false)

TeXドキュメントの準備に適した式の表現を出力します。 結果はドキュメントの断片です。 それはより大きなドキュメントにコピーすることができますが、それ自身では処理できません。

tex (expr)exprのTeX表現をコンソールに出力します。

tex (label)labelで名付けられた式のTeX表現を出力し、 (式の左に表示されるよう)等式ラベルをそれに割り当てます。 TeX等式ラベルは Maximaラベルと同じです。

destinationは出力ストリームもしくはファイル名です。 destinationがファイル名の時、 texはファイルに出力を追加します。 関数 openwopenaは出力ストリームを生成します。

tex (expr, false)tex (label, false)は TeX出力を文字列として返します。

texは一番目の引数をテストしてラベルかどうか確認した後、引数を評価します。 クォートクォート''は引数の評価を強制します。 それによってテストを無効にしてラベルの表示を妨げます。

texputも参照してください。

例:

 
(%i1) integrate (1/(1+x^3), x);
                                    2 x - 1
                  2            atan(-------)
             log(x  - x + 1)        sqrt(3)    log(x + 1)
(%o1)      - --------------- + ------------- + ----------
                    6             sqrt(3)          3
(%i2) tex (%o1);
$$-{{\log \left(x^2-x+1\right)}\over{6}}+{{\arctan \left({{2\,x-1
 }\over{\sqrt{3}}}\right)}\over{\sqrt{3}}}+{{\log \left(x+1\right)
 }\over{3}}\leqno{\tt (\%o1)}$$
(%o2)                          (\%o1)
(%i3) tex (integrate (sin(x), x));
$$-\cos x$$
(%o3)                           false
(%i4) tex (%o1, "foo.tex");
(%o4)                          (\%o1)

tex (expr, false)はTeX出力を文字列として返します。

 
(%i1) S : tex (x * y * z, false);
(%o1) $$x\,y\,z$$
(%i2) S;
(%o2) $$x\,y\,z$$

Categories:  TeX output · File output

関数: tex1 (e)

eのTeX出力を表す文字列を返します。 等式や他の任意の環境のため TeX出力を区切り記号で囲みません。

例:

 
(%i1) tex1 (sin(x) + cos(x));
(%o1)                     \sin x+\cos x

関数: texput  
    texput (a, s)  
    texput (a, f)  
    texput (a, s, operator_type)  
    texput (a, [s_1, s_2], matchfix)  
    texput (a, [s_1, s_2, s_3], matchfix)

アトム aにTeX出力を割り当てます。 ここで aはシンボルもしくは演算子名です。

texput (a, s)とすると、 tex関数は aの代わりに文字列 sをTeX出力に書き足します。

texput (a, f)とすると、 tex関数は TeX出力を生成するために関数 fをコールします。 fは引数を1つ受け入れなければいけません。 ここで、引数は演算子 aを持つ式で、文字列(TeX出力)を返さなければいけません。 ftex1をコールし、入力式の引数のためにTeX出力を生成するかもしれません。

texput (a, s, operator_type)とすると、 tex関数は aの代わりに sをTeX出力に書き足し、 適切な位置に書き足されたテキストを配置します。 ここで operator_typeprefixか, infix, postfix, nary, nofixのいずれかです。

texput (a, [s_1, s_2], matchfix)とすると、 tex関数は TeX出力の aの引数の両側に s_1s_2を書き足します。 (もし複数なら)引数はコンマで分離します。

texput (a, [s_1, s_2, s_3], matchfix)とすると、 tex関数は TeX出力の aの引数の両側に s_1s_2を書き足します。 引数は s_3で分離します。

例:

変数に TeX出力を割り当てます。

 
(%i1) texput (me,"\\mu_e");
(%o1)                         \mu_e
(%i2) tex (me);
$$\mu_e$$
(%o2)                         false

任意の関数(演算子ではない)に TeX出力を割り当てます。

 
(%i1) texput (lcm, "\\mathrm{lcm}");
(%o1)                     \mathrm{lcm}
(%i2) tex (lcm (a, b));
$$\mathrm{lcm}\left(a , b\right)$$
(%o2)                         false

TeX出力を生成する関数をコールします。

 
(%i1) texfoo (e) := block ([a, b], [a, b] : args (e),
  concat ("\\left[\\stackrel{",tex1(b),"}{",tex1(a),"}\\right]"))$
(%i2) texput (foo, texfoo);
(%o2)                        texfoo
(%i3) tex (foo (2^x, %pi));
$$\left[\stackrel{\pi}{2^{x}}\right]$$
(%o3)                         false

前置演算子に TeX出力を割り当てます。

 
(%i1) prefix ("grad");
(%o1)                         grad
(%i2) texput ("grad", " \\nabla ", prefix);
(%o2)                        \nabla
(%i3) tex (grad f);
$$ \nabla f$$
(%o3)                         false

中置演算子に TeX出力を割り当てます。

 
(%i1) infix ("~");
(%o1)                           ~
(%i2) texput ("~", " \\times ", infix);
(%o2)                        \times
(%i3) tex (a ~ b);
$$a \times b$$
(%o3)                         false

後置演算子に TeX出力を割り当てます。

 
(%i1) postfix ("##");
(%o1)                          ##
(%i2) texput ("##", "!!", postfix);
(%o2)                          !!
(%i3) tex (x ##);
$$x!!$$
(%o3)                         false

n項演算子に TeX出力を割り当てます。

 
(%i1) nary ("@@");
(%o1)                          @@
(%i2) texput ("@@", " \\circ ", nary);
(%o2)                         \circ
(%i3) tex (a @@ b @@ c @@ d);
$$a \circ b \circ c \circ d$$
(%o3)                         false

無項演算子に TeX出力を割り当てます。

 
(%i1) nofix ("foo");
(%o1)                          foo
(%i2) texput ("foo", "\\mathsc{foo}", nofix);
(%o2)                     \mathsc{foo}
(%i3) tex (foo);
$$\mathsc{foo}$$
(%o3)                         false

マッチフィックス演算子に TeX出力を割り当てます。

 
(%i1) matchfix ("<<", ">>");
(%o1)                          <<
(%i2) texput ("<<", [" \\langle ", " \\rangle "], matchfix);
(%o2)                [ \langle ,  \rangle ]
(%i3) tex (<<a>>);
$$ \langle a \rangle $$
(%o3)                         false
(%i4) tex (<<a, b>>);
$$ \langle a , b \rangle $$
(%o4)                         false
(%i5) texput ("<<", [" \\langle ", " \\rangle ", " \\, | \\,"],
      matchfix);
(%o5)           [ \langle ,  \rangle ,  \, | \,]
(%i6) tex (<<a>>);
$$ \langle a \rangle $$
(%o6)                         false
(%i7) tex (<<a, b>>);
$$ \langle a \, | \,b \rangle $$
(%o7)                         false

Categories:  TeX output

関数: get_tex_environment (op)
関数: set_tex_environment (op, before, after)

texが出力する TeX環境をカスタマイズします。 これらの関数が保持するように、 TeX環境は2つの文字列から構成されます; 1つは他の任意のTeX出力に前もって出力されるもの、もう1つは後に出力されるものです。

式のトップレベル演算子の TeX環境だけが出力されます; 他の演算子に関連づけられた TeX環境は無視されます。

get_tex_environmentは演算子 opに適用された TeX環境を返します; もし他の環境が割り当てられていないならデフォルトを返します。

set_tex_environmentは演算子 opのための TeX環境を割り当てます。

例:

 
(%i1) get_tex_environment (":=");
(%o1) [
\begin{verbatim}
, ;
\end{verbatim}
]
(%i2) tex (f (x) := 1 - x);

\begin{verbatim}
f(x):=1-x;
\end{verbatim}

(%o2)                         false
(%i3) set_tex_environment (":=", "$$", "$$");
(%o3)                       [$$, $$]
(%i4) tex (f (x) := 1 - x);
$$f(x):=1-x$$
(%o4)                         false

Categories:  TeX output

関数: get_tex_environment_default ()
関数: set_tex_environment_default (before, after)

texが出力する TeX環境をカスタマイズします。 これらの関数が保持するように、TeX環境は2つの文字列から構成されます; 1つは他の任意のTeX出力に前もって出力されるもの、もう1つは後に出力されるものです。

get_tex_environment_defaultは、 トップレベル演算子が(set_tex_environmentが割り当てたような)特定の TeX環境を持たない式に適用された TeX環境を返します。

set_tex_environment_defaultはデフォルトのTeX環境を割り当てます。

例:

 
(%i1) get_tex_environment_default ();
(%o1)                       [$$, $$]
(%i2) tex (f(x) + g(x));
$$g\left(x\right)+f\left(x\right)$$
(%o2)                         false
(%i3) set_tex_environment_default ("\\begin{equation}
", "
\\end{equation}");
(%o3) [\begin{equation}
,
\end{equation}]
(%i4) tex (f(x) + g(x));
\begin{equation}
g\left(x\right)+f\left(x\right)
\end{equation}
(%o4)                         false

Categories:  TeX output


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.5 Functions and Variables for Fortran Output

オプション変数: fortindent

デフォルト値: 0

fortindentfortranコマンドが表示する式の左マージンインデントを制御します。 0は標準のプリントアウト(すなわち6スペース)を与え、 正の値は式を更に右に印字するようにします。

関数: fortran (expr)

Fortran文として exprを印字します。 出力行はスペースでインデントされます。 もし行が長過ぎるなら、 fortranは継続行を印字します。 fortranは指数演算子 ^**として印字し、 複素数 a + b %iを形式 (a,b)で印字します。

exprは等式も取り、もしそうなら fortranは、 等式の右辺を左辺に割り当てる割り当て文を印字します。 特にもし exprの右辺が行列名なら、 fortranは行列の要素それぞれに対する割り当て文を印字します。

もし exprfortranが認識する何かでないなら、 クレームすることなく式を grindフォーマットで印字します。 fortranはリスト、配列、関数について知りません。

fortindentfortranコマンドが表示する式の左マージンインデントを制御します。 0は標準のプリントアウト(すなわち6スペース)を与え、 正の値は式を更に右に印字するようにします。

fortspacestrueの時、 fortranは印字行それぞれを80カラムまでスペースで埋めます。

fortranは引数を評価します; 引数のクォートは評価を無効にします。 fortranはいつも doneを返します。

例:

(%i1) expr: (a + b)^12$
(%i2) fortran (expr);
      (b+a)**12
(%o2)                         done
(%i3) fortran ('x=expr);
      x = (b+a)**12
(%o3)                         done
(%i4) fortran ('x=expand (expr));
      x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792
     1   *a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b
     2   **3+66*a**10*b**2+12*a**11*b+a**12
(%o4)                         done
(%i5) fortran ('x=7+5*%i);
      x = (7,5)
(%o5)                         done
(%i6) fortran ('x=[1,2,3,4]);
      x = [1,2,3,4]
(%o6)                         done
(%i7) f(x) := x^2$
(%i8) fortran (f);
      f
(%o8)                         done

オプション変数: fortspaces

デフォルト値: false

fortspacestrueの時、 fortranは印字行それぞれを80カラムまでスペースで埋めます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14. Polynomials


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.1 Introduction to Polynomials

Maximaの中では多項式は一般形か標準有理式(CRE)形として記憶されます。 後者は標準形であり、 factor, ratsimpなどのような演算が内部で使います。

標準有理式は、特に (RATFACが trueに設定された時の部分的に因数分解された多項式や有理関数はもちろん) 展開された多項式や有理関数に適したある種の表現を構成します。 このCRE形では変数の(最も主要から最も瑣末までの)順序付けは式それぞれに仮定されます。 多項式は主変数に一連の式の対が続くリストによって再帰的に表現されます。 対それぞれの一番目のメンバーはその項の主変数の指数であり、 2番目のメンバーはその項の係数であり、 係数は数か、再度この形式で表現された別の変数の多項式です。 例えば、 3*X^2-1の CRE形の主要部分は、(X 2 3 0 -1)であり、 2*X*Y+X-3のそれは、 Yが主変数と仮定すると (Y 1 (X 1 2) 0 (X 1 1 0 -3)) であり、 Xが主変数と仮定すると (X 1 (Y 1 2 0 1) 0 -3)です。 普通、アルファベットの逆順で「主」要度が決定されます。 CRE式の「変数」はアトムである必要はありません。 実際、主演算子が + - * /でも整数べきの^でもない任意の部分式は それが現れる式の中で(CRE形の)式の「変数」と考えられます。 例えば、式 X+SIN(X+1)+2*SQRT(X)+1の CRE変数は、Xと SQRT(X), SIN(X+1)です。 もしユーザーが RATVARS関数を使って変数の順序付けを指定しないなら、 Maximaはアルファベットの順序付けを選びます。 一般に、CREは有理式すなわち分子と分母が共通因子を持たず分母が正の多項式の比を表します。 本質的に内部形は変数順序付けリストが先行する多項式の対(分子と分母)です。 もし表示される式がCRE形であるか CRE形の部分式を含むなら シンボル/R/が行ラベルに付きます。 式を CRE形に変換することについては RAT関数を参照してください。 拡張 CRE形はテイラー級数の表現に使われます。 有理式の概念が拡張され、 変数の指数は単に正の整数ではなく正の有理数も負の有理数も取ることができ、 係数はそれ自身単なる多項式ではなく上で記載された有理式を取ることができます。 これらは内部的には CRE形に似ていて、その一般化である再帰多項式形によって表現されます。 それは切り詰めの次数のような追加の情報を持ちます。 CRE形として、そんな式の行ラベルにはシンボル/T/が付きます。

Categories:  Polynomials · Rational expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.2 Functions and Variables for Polynomials

オプション変数: algebraic

デフォルト値: false

代数的整数が整理されるようにするためには、 algebraictrueに設定しなければいけません。

オプション変数: berlefact

デフォルト値: true

berlefactfalseの時、 Kroneckerの因数分解アルゴリズムを使います。 そうでないなら Berlekampのアルゴリズム―これがデフォルトですーを使います。

Categories:  Polynomials

関数: bezout (p1, p2, x)

resultantコマンドの代替です。 行列を返します。 この行列のdeterminantが望みの終結式です。

例:

 
(%i1) bezout(a*x+b, c*x^2+d, x);
                         [ b c  - a d ]
(%o1)                    [            ]
                         [  a     b   ]
(%i2) determinant(%);
                            2      2
(%o2)                      a  d + b  c
(%i3) resultant(a*x+b, c*x^2+d, x);
                            2      2
(%o3)                      a  d + b  c

Categories:  Polynomials

関数: bothcoef (expr, x)

最初のメンバーが (exprが CRE形なら ratcoefが見つけるような) exprの中の xの係数であり、 2番目のメンバーが exprの残りの部分であるリストを返します。 例えば、 expr = A*x + B[A, B]

例:

 
(%i1) islinear (expr, x) := block ([c],
        c: bothcoef (rat (expr, x), x),
        is (freeof (x, c) and c[1] # 0))$
(%i2) islinear ((r^2 - (x - r)^2)/x, x);
(%o2)                         true

Categories:  Polynomials

関数: coeff  
    coeff (expr, x, n)  
    coeff (expr, x)

exprx^nの係数を返します。 ここで exprxの多項式か単項式です。 ratcoefと違い、 coeffは厳密に構文的な操作であり、 exprの内部表現の中から x^nのリテラルインスタンスを見つけるだけです。

coeff(expr, x^n)coeff(expr, x, n)と同値です。 coeff(expr, x, 0)xを含まない exprの剰余項を返します。 もし省略されたら nは1が仮定されます。

xは単純変数か添字付き変数か、演算子1つとその引数のすべてから構成される exprの部分式です。

expandfactorを適用することで、 exprと同値な式の係数を計算することが可能かもしれません。 coeff自身は expandfactorや他のいかなる関数も適用しません。

ratcoefも参照してください。

例:

coeffexprx^nの係数を返します。

 
(%i1) coeff (b^3*a^3 + b^2*a^2 + b*a + 1, a^3);
                                3
(%o1)                          b

coeff(expr, x^n)coeff(expr, x, n)と同値です。

 
(%i1) coeff (c[4]*z^4 - c[3]*z^3 - c[2]*z^2 + c[1]*z, z, 3);
(%o1)                         - c
                                 3
(%i2) coeff (c[4]*z^4 - c[3]*z^3 - c[2]*z^2 + c[1]*z, z^3);
(%o2)                         - c
                                 3

coeff(expr, x, 0)exprxを含まない剰余項です。

 
(%i1) coeff (a*u + b^2*u^2 + c^3*u^3, b, 0);
                            3  3
(%o1)                      c  u  + a u

xは単純変数か添字付き変数か、演算子1つとその引数のすべてから構成される exprの部分式です。

 
(%i1) coeff (h^4 - 2*%pi*h^2 + 1, h, 2);
(%o1)                        - 2 %pi
(%i2) coeff (v[1]^4 - 2*%pi*v[1]^2 + 1, v[1], 2);
(%o2)                        - 2 %pi
(%i3) coeff (sin(1+x)*sin(x) + sin(1+x)^3*sin(x)^3, sin(1+x)^3);
                                3
(%o3)                        sin (x)
(%i4) coeff ((d - a)^2*(b + c)^3 + (a + b)^4*(c - d), a + b, 4);
(%o4)                         c - d

coeff自身は expandfactorや他のいかなる関数も適用しません。

 
(%i1) coeff (c*(a + b)^3, a);
(%o1)                           0
(%i2) expand (c*(a + b)^3);
                 3          2        2        3
(%o2)           b  c + 3 a b  c + 3 a  b c + a  c
(%i3) coeff (%, a);
                                2
(%o3)                        3 b  c
(%i4) coeff (b^3*c + 3*a*b^2*c + 3*a^2*b*c + a^3*c, (a + b)^3);
(%o4)                           0
(%i5) factor (b^3*c + 3*a*b^2*c + 3*a^2*b*c + a^3*c);
                                  3
(%o5)                      (b + a)  c
(%i6) coeff (%, (a + b)^3);
(%o6)                           c

coeffはリスト、行列、等式上を散逸します。

 
(%i1) coeff ([4*a, -3*a, 2*a], a);
(%o1)                      [4, - 3, 2]
(%i2) coeff (matrix ([a*x, b*x], [-c*x, -d*x]), x);
                          [  a    b  ]
(%o2)                     [          ]
                          [ - c  - d ]
(%i3) coeff (a*u - b*v = 7*u + 3*v, u);
(%o3)                         a = 7

Categories:  Polynomials

関数: content (p_1, x_1, …, x_n)

一番目のメンバーが多項式変数 p_1x_nに関する項の係数の最大公約数(これが容量です)であり、 二番目のメンバーが多項式 p_1を容量で割ったものであるリストを返します。

例:

 
(%i1) content (2*x*y + 4*x^2*y^2, y);
                                   2
(%o1)                   [2 x, 2 x y  + y]

Categories:  Polynomials

関数: denom (expr)

有理式 exprの分母を返します。

numも参照してください。

 
(%i1) g1:(x+2)*(x+1)/((x+3)^2);
                         (x + 1) (x + 2)
(%o1)                    ---------------
                                   2
                            (x + 3)
(%i2) denom(g1);
                                   2
(%o2)                       (x + 3)
(%i3) g2:sin(x)/10*cos(x)/y;
                          cos(x) sin(x)
(%o3)                     -------------
                              10 y
(%i4) denom(g2);
(%o4)                         10 y

Categories:  Expressions

関数: divide (p_1, p_2, x_1, …, x_n)

主多項式変数 x_nに関して、 多項式 p_1を多項式 p_2で割った商と余りを計算します。 他の変数は ratvars関数での宣言に従います。 (The other variables are as in the ratvars function.) 結果は一番目の要素が商で2番目の要素が余りのリストです。

例:

 
(%i1) divide (x + y, x - y, x);
(%o1)                       [1, 2 y]
(%i2) divide (x + y, x - y);
(%o2)                      [- 1, 2 x]

二番目の例では yが主変数であることに注意してください。

Categories:  Polynomials

関数: eliminate ([eqn_1, …, eqn_n], [x_1, …, x_k])

連続する終結式を取ることによって、 等式(もしくは0に等しいと仮定された式)から変数を消去します。 k個の変数 x_1, ..., x_kを消去した n - k個の式のリストを返します。 最初 x_1を消去し、n - 1個の式を得て、 次に変数 x_2を消去し、の繰り返し。 もし k = nなら、 変数 x_1, ..., x_kに依らないリストの中の単一式が返されます。 この場合、最後の変数について最後の結果を解くため solveがコールされます。

例:

 
(%i1) expr1: 2*x^2 + y*x + z;
                                      2
(%o1)                    z + x y + 2 x
(%i2) expr2: 3*x + 5*y - z - 1;
(%o2)                  - z + 5 y + 3 x - 1
(%i3) expr3: z^2 + x - y^2 + 5;
                          2    2
(%o3)                    z  - y  + x + 5
(%i4) eliminate ([expr3, expr2, expr1], [y, z]);
             8         7         6          5          4
(%o4) [7425 x  - 1170 x  + 1299 x  + 12076 x  + 22887 x

                                    3         2
                            - 5154 x  - 1291 x  + 7688 x + 15376]

Categories:  Polynomials · Algebraic equations

関数: ezgcd (p_1, p_2, p_3, …)

一番目の要素が多項式 p_1, p_2, p_3, …の最大公約数で、 残りの要素は多項式を最大公約数で割ったものであるリストを返します。 これはいつも ezgcdアルゴリズムを使います。

gcd, gcdex, gcdivide, poly_gcdも参照してください。

例:

三つの多項式は最大公約数 2*x-3を持ちます。 GCDは最初、関数 gcdで計算され、その後、関数 ezgcdで計算されます。

 
(%i1) p1 : 6*x^3-17*x^2+14*x-3;
                        3       2
(%o1)                6 x  - 17 x  + 14 x - 3
(%i2) p2 : 4*x^4-14*x^3+12*x^2+2*x-3;
                    4       3       2
(%o2)            4 x  - 14 x  + 12 x  + 2 x - 3
(%i3) p3 : -8*x^3+14*x^2-x-3;
                          3       2
(%o3)                - 8 x  + 14 x  - x - 3

(%i4) gcd(p1, gcd(p2, p3));
(%o4)                        2 x - 3

(%i5) ezgcd(p1, p2, p3);
                   2               3      2           2
(%o5) [2 x - 3, 3 x  - 4 x + 1, 2 x  - 4 x  + 1, - 4 x  + x + 1]

Categories:  Polynomials

オプション変数: facexpand

デフォルト値: true

facexpandfactorが返すこれ以上小さくできない因子が 展開された形式(デフォルト)か再帰的(正規のCRE)形式かを制御します。

Categories:  Polynomials

関数: factor  
    factor (expr)  
    factor (expr, p)

任意の数の変数と関数を含んだ式 exprを整数上既約な因子に因数分解します。 factor (expr, p)exprを 最小多項式が pである要素を加えた有理数体上で因数分解します。

factorは整数を素因数分解するのに ifactor関数を使います。

factorflagfalseなら有理式の整数因子の素因数分解を抑制します。

dontfactorに変数のリストを割り当てるとその変数に関して因数分解しなくなります。 (初期状態では空です。) 因数分解は dontfactorリスト上のそれらより (CRE形式で仮定された変数順序を使って)重要でない変数に関しても実行されなくなります。

savefactorstrueなら、 同じ因子をいくつか含む式の今後の因数分解をスピードアップするために 式の因子(因子の積)がある関数によって保存されます。

berlefactfalseなら Kroneckerの因数分解アルゴリズムが使われ、 そうでないならデフォルトである Berlekampのアルゴリズムが使われます。

intfaclimtrueなら、 もし自明な割り算やPollardのロー法のあと因子が見つからないなら 整数の素因数分解をあきらめます。 falseに設定されているなら (これはユーザーが陽に factorをコールする場合です) 整数の完全な素因数分解が企てられます。 intfaclimのユーザー設定は内部で factorがコールされた時に使われます。 intfaclimは Maximaが大きな整数を素因数分解するのに ありえないぐらい長い時間を使うことを妨げるようにリセットされます。

collecttermsも参照してください。

例:

 
(%i1) factor (2^63 - 1);
                    2
(%o1)              7  73 127 337 92737 649657
(%i2) factor (-8*y - 4*x + z^2*(2*y + x));
(%o2)               (2 y + x) (z - 2) (z + 2)
(%i3) -1 - 2*x - x^2 + y^2 + 2*x*y^2 + x^2*y^2;
                2  2        2    2    2
(%o3)          x  y  + 2 x y  + y  - x  - 2 x - 1
(%i4) block ([dontfactor: [x]], factor (%/36/(1 + 2*y + y^2)));
                       2
                     (x  + 2 x + 1) (y - 1)
(%o4)                ----------------------
                           36 (y + 1)
(%i5) factor (1 + %e^(3*x));
                      x         2 x     x
(%o5)              (%e  + 1) (%e    - %e  + 1)
(%i6) factor (1 + x^4, a^2 - 2);
                    2              2
(%o6)             (x  - a x + 1) (x  + a x + 1)
(%i7) factor (-y^2*z^2 - x*z^2 + x^2*y^2 + x^3);
                       2
(%o7)              - (y  + x) (z - x) (z + x)
(%i8) (2 + x)/(3 + x)/(b + x)/(c + x)^2;
                             x + 2
(%o8)               ------------------------
                                           2
                    (x + 3) (x + b) (x + c)
(%i9) ratsimp (%);
                4                  3
(%o9) (x + 2)/(x  + (2 c + b + 3) x

     2                       2             2                   2
 + (c  + (2 b + 6) c + 3 b) x  + ((b + 3) c  + 6 b c) x + 3 b c )
(%i10) partfrac (%, x);
           2                   4                3
(%o10) - (c  - 4 c - b + 6)/((c  + (- 2 b - 6) c

     2              2         2                2
 + (b  + 12 b + 9) c  + (- 6 b  - 18 b) c + 9 b ) (x + c))

                 c - 2
 - ---------------------------------
     2                             2
   (c  + (- b - 3) c + 3 b) (x + c)

                         b - 2
 + -------------------------------------------------
             2             2       3      2
   ((b - 3) c  + (6 b - 2 b ) c + b  - 3 b ) (x + b)

                         1
 - ----------------------------------------------
             2
   ((b - 3) c  + (18 - 6 b) c + 9 b - 27) (x + 3)
(%i11) map ('factor, %);
              2
             c  - 4 c - b + 6                 c - 2
(%o11) - ------------------------- - ------------------------
                2        2                                  2
         (c - 3)  (c - b)  (x + c)   (c - 3) (c - b) (x + c)

                       b - 2                        1
            + ------------------------ - ------------------------
                             2                          2
              (b - 3) (c - b)  (x + b)   (b - 3) (c - 3)  (x + 3)
(%i12) ratsimp ((x^5 - 1)/(x - 1));
                       4    3    2
(%o12)                x  + x  + x  + x + 1
(%i13) subst (a, x, %);
                       4    3    2
(%o13)                a  + a  + a  + a + 1
(%i14) factor (%th(2), %);
                       2        3        3    2
(%o14)   (x - a) (x - a ) (x - a ) (x + a  + a  + a + 1)
(%i15) factor (1 + x^12);
                       4        8    4
(%o15)               (x  + 1) (x  - x  + 1)
(%i16) factor (1 + x^99);
                 2            6    3
(%o16) (x + 1) (x  - x + 1) (x  - x  + 1)

   10    9    8    7    6    5    4    3    2
 (x   - x  + x  - x  + x  - x  + x  - x  + x  - x + 1)

   20    19    17    16    14    13    11    10    9    7    6
 (x   + x   - x   - x   + x   + x   - x   - x   - x  + x  + x

    4    3            60    57    51    48    42    39    33
 - x  - x  + x + 1) (x   + x   - x   - x   + x   + x   - x

    30    27    21    18    12    9    3
 - x   - x   + x   + x   - x   - x  + x  + 1)

Categories:  Polynomials

オプション変数: factorflag

デフォルト値: false

factorflagfalseの時 有理式の整数因子の素因素分解を抑制します。

Categories:  Polynomials

関数: factorout (expr, x_1, x_2, …)

exprを形式 f (x_1, x_2, …)*gの項の和に再整理します。 ここで gはどのx_iも含まない式の積で fは因数分解されたものです。

オプション変数 keepfloatfactoroutに無視されることに注意してください。

例:

 
(%i1) expand (a*(x+1)*(x-1)*(u+1)^2);
             2  2          2      2      2
(%o1)     a u  x  + 2 a u x  + a x  - a u  - 2 a u - a
(%i2) factorout(%,x);
         2
(%o2) a u  (x - 1) (x + 1) + 2 a u (x - 1) (x + 1)
                                              + a (x - 1) (x + 1)

Categories:  Expressions

関数: factorsum (expr)

exprの和の形の因子の中の項を 項の和が因数分解可能であるような項のグループにまとめようとします。 factorsumexpand ((x + y)^2 + (z + w)^2)の結果を回復できますが、 expand ((x + 1)^2 + (x + y)^2)は回復できません。 項が共通の変数を持つからです。

例:

 
(%i1) expand ((x + 1)*((u + v)^2 + a*(w + z)^2));
           2      2                            2      2
(%o1) a x z  + a z  + 2 a w x z + 2 a w z + a w  x + v  x

                                     2        2    2            2
                        + 2 u v x + u  x + a w  + v  + 2 u v + u
(%i2) factorsum (%);
                                   2          2
(%o2)            (x + 1) (a (z + w)  + (v + u) )

Categories:  Expressions

関数: fasttimes (p_1, p_2)

多項式の掛け算のための特殊なアルゴリズムを使って、 多項式 p_1p_2の積を返します。 p_1p_2は多変数で密でほぼ同じサイズであるべきです。 n_1p_1の次数で n_2p_2の次数だとすると、 古典的な掛け算は n_1 n_2のオーダーですが、 fasttimesmax (n_1, n_2)^1.585のオーダーです。

Categories:  Polynomials

関数: fullratsimp (expr)

fullratsimpは ratsimpと式の非有理的整理を式変形されなくなるまで繰り返し適応し、結果を返します。

非有理式が含まれる時は、 よくあるような ratsimp1回コールとその後の非有理的(「一般的」)整理だけでは 整理された結果を返すのに十分でないかもしれません。 時々複数回のコールが必要とされます。 fullratsimpはこのプロセスを楽にしてくれます。

fullratsimp (expr, x_1, ..., x_n)ratsimpratと同様複数の引数を取ります。

例:

 
(%i1) expr: (x^(a/2) + 1)^2*(x^(a/2) - 1)^2/(x^a - 1);
                       a/2     2   a/2     2
                     (x    - 1)  (x    + 1)
(%o1)                -----------------------
                              a
                             x  - 1
(%i2) ratsimp (expr);
                          2 a      a
                         x    - 2 x  + 1
(%o2)                    ---------------
                              a
                             x  - 1
(%i3) fullratsimp (expr);
                              a
(%o3)                        x  - 1
(%i4) rat (expr);
                       a/2 4       a/2 2
                     (x   )  - 2 (x   )  + 1
(%o4)/R/             -----------------------
                              a
                             x  - 1

関数: fullratsubst (a, b, c)

結果が変わらなくなるまで自身を再帰的にコールすることを除いて ratsubstと同じです。 置き換える式と置き換えられる式が1つ以上の変数を共通に持つ時、 この関数は役に立ちます。

fullratsubstlratsubstのフォーマットでも引数を受け付けます。 すなわち、一番目の引数は1つの代入等式もしくはそんな等式のリストで、 二番目の引数は処理される式というものです。

load ("lrats")fullratsubstlratsubstをロードします。

例:

 
(%i1) load ("lrats")$
 
(%i2) subst ([a = b, c = d], a + c);
(%o2)                         d + b
(%i3) lratsubst ([a^2 = b, c^2 = d], (a + e)*c*(a + c));
(%o3)                (d + a c) e + a d + b c
 
(%i4) lratsubst (a^2 = b, a^3);
(%o4)                          a b
 
(%i5) ratsubst (b*a, a^2, a^3);
                               2
(%o5)                         a  b
(%i6) fullratsubst (b*a, a^2, a^3);
                                 2
(%o6)                         a b
 
(%i7) fullratsubst ([a^2 = b, b^2 = c, c^2 = a], a^3*b*c);
(%o7)                           b
(%i8) fullratsubst (a^2 = b*a, a^3);
                                 2
(%o8)                         a b
 
(%i9) errcatch (fullratsubst (b*a^2, a^2, a^3));

*** - Lisp stack overflow. RESET

Categories:  Rational expressions

関数: gcd (p_1, p_2, x_1, …)

p_1p_2の最大公約数を返します。 フラグ gcdはどのアルゴリズムを利用するか決めます。 gcdezか, subres, red, spmodいずれかに設定すると、それぞれ ezgcd, 部分終結式prs, 被約, モジュラーアルゴリズムを選択することになります。 もし gcdfalseなら、 gcd (p_1, p_2, x)はすべての xに対していつも 1を返します。 (例えば ratsimp, factorなど)多くの関数は背後で gcdを計算します。 斉次多項式に対しては gcdsubresを使うことを推奨します。 例えば gcd (x^2 - 2*sqrt(2)*x + 2, x - sqrt(2)) のように代数的数が含まれる時、 algebraictrueでなくてはいけません。 また gcdezであってはいけません。

もし gcdフラグ―デフォルトは spmod―が falseなら、 式が標準有理式(CRE)形に変換される時も最大公約数を計算しません。 もし gcdが不要ならこれは時々計算のスピードを上げます。

ezgcd, gcdex, gcdivide, poly_gcdも参照してください。

例:

 
(%i1) p1:6*x^3+19*x^2+19*x+6;
                        3       2
(%o1)                6 x  + 19 x  + 19 x + 6
(%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
                  5       4       3       2
(%o2)          6 x  + 13 x  + 12 x  + 13 x  + 6 x
(%i3) gcd(p1, p2);
                            2
(%o3)                    6 x  + 13 x + 6
(%i4) p1/gcd(p1, p2), ratsimp;
(%o4)                         x + 1
(%i5) p2/gcd(p1, p2), ratsimp;
                              3
(%o5)                        x  + x

ezgcdは 一番目の要素が多項式 p_1p_2の最大公約数で、 残りの要素が最大公約数で多項式を割ったもので構成されるリストを返します。

 
(%i6) ezgcd(p1, p2);
                    2                     3
(%o6)           [6 x  + 13 x + 6, x + 1, x  + x]

Categories:  Polynomials · Rational expressions

関数: gcdex  
    gcdex (f, g)  
    gcdex (f, g, x)

リスト [a, b, u]を返します。 ここで ufgの最大公約数(gcd)であり、 かつ a f + b guに等しいです。 引数 fgは1変数多項式であるか、 そうでないなら指定された変数 xの多項式でなければいけません。 これが機能するには単項イデアル整域にある必要があるからです。 gcdは他の変数の有理関数係数を持つ1変数多項式としての fgに対するgcdを意味します。

gcdexはユークリッドのアルゴリズムを実行します。 すべてが [f, g, -1]に直角の L[i]: [a[i], b[i], r[i]]の列を持ち、 q = quotient(r[i]/r[i+1])なら L[i+2]: L[i] - q L[i+1]となるように次を組み立て、 余り r[i+2]がゼロの時 L[i+1]で終了します。

引数 fgは整数であり得ます。 この場合、gcdexは関数 igcdexを呼び出します。

ezgcd, gcd, gcdivide, poly_gcdも参照してください。

例:

 
(%i1) gcdex (x^2 + 1, x^3 + 4);
                       2
                      x  + 4 x - 1  x + 4
(%o1)/R/           [- ------------, -----, 1]
                           17        17
(%i2) % . [x^2 + 1, x^3 + 4, -1];
(%o2)/R/                        0

以下の gcdは k(y)[x]に対して働くので 1です。 k[y, x]で期待する y+1ではないことに注意してください。

 
(%i1) gcdex (x*(y + 1), y^2 - 1, x);
                               1
(%o1)/R/                 [0, ------, 1]
                              2
                             y  - 1

Categories:  Polynomials · Rational expressions

関数: gcfactor (n)

ガウス整数(すなわち abが有理整数(通常の整数)であるとして形式 a + b %iの数) nを ガウス整数上で因数分解します。 因子は abを非負にすることによって正規化されます。

Categories:  Integers

関数: gfactor (expr)

多項式 exprをガウス整数(虚数単位%iを付け加えた整数)上で因数分解します。 a%iとなる factor (expr, a^2+1)ようなものです。

例:

 
(%i1) gfactor (x^4 - 1);
(%o1)           (x - 1) (x + 1) (x - %i) (x + %i)

Categories:  Polynomials

関数: gfactorsum (expr)

factorsumに似ていますが factorの代わりに gfactorを適用します。

Categories:  Expressions

関数: hipow (expr, x)

exprの中の xの明示的に示された指数の最も大きなものを返します。 xは変数もしくは一般式です。 もし xexprの中に現れないなら、 hipow0を返します。

hipowexprに等価な式を考慮しません。 特に hipowexprを展開しないので、 hipow (expr, x)hipow (expand (expr, x))は違った結果をもたらすかもしれません。

例:

 
(%i1) hipow (y^3 * x^2 + x * y^4, x);
(%o1)                           2
(%i2) hipow ((x + y)^5, x);
(%o2)                           1
(%i3) hipow (expand ((x + y)^5), x);
(%o3)                           5
(%i4) hipow ((x + y)^5, x + y);
(%o4)                           5
(%i5) hipow (expand ((x + y)^5), x + y);
(%o5)                           0

Categories:  Expressions

オプション変数: intfaclim

デフォルト値: true

もし trueなら、 試し割りとPollardのロー法のあと因子が見つからないなら Maximaは整数の素因素分解をあきらめ、素因数分解は完了しません。

intfaclimfalseの時、 (これは、ユーザーが明示的にfactorをコールした場合です) 完全な素因数分解を試みます。 divisorsや, divsum, totientの中で因子が計算される時は、 intfaclimfalseに設定されます

factorへの内部コールは intfaclimのユーザー指定の値を考慮します。 intfaclimtrueに設定することは 大きな整数を素因数分解するのに費やす時間を少なくするかもしれません。

Categories:  Integers

オプション変数: keepfloat

デフォルト値: false

keepfloattrueなら、 浮動小数点数を含む式を標準有理式(CRE)形に変換する時 浮動小数点を有理数化しないようにします。

関数 solveとそれを呼び出す関数(例えば eigenvalues)は、 現在、このフラグを無視しとにかく浮動小数点数を変換することに注意してください。

例:

 
(%i1) rat(x/2.0);
rat: replaced 0.5 by 1/2 = 0.5
                                x
(%o1)/R/                        -
                                2
(%i2) rat(x/2.0), keepfloat;
(%o2)/R/                      0.5 x

solvekeepfloatを無視します:

 
(%i1) solve(1.0-x,x), keepfloat;
rat: replaced 1.0 by 1/1 = 1.0
(%o1)                        [x = 1]

Categories:  Numerical evaluation

関数: lopow (expr, x)

exprの中に明示的に現れる xの最小の指数を返します。 例えば、

 
(%i1) lopow ((x+y)^2 + (x+y)^a, x+y);
(%o1)                       min(a, 2)

Categories:  Expressions

関数: lratsubst (L, expr)

substの代わりに ratsubstを使うことを除いて、 subst (L, expr)に似ています。

lratsubstの一番目の引数は substが受け付けるそれと同一のフォーマットの等式もしくは等式のリストです。 代入は等式のリストによって与えられた順、すなわち左から右に実行されます。

load ("lrats")fullratsubstlratsubstをロードします。

例:

 
(%i1) load ("lrats")$
 
(%i2) subst ([a = b, c = d], a + c);
(%o2)                         d + b
(%i3) lratsubst ([a^2 = b, c^2 = d], (a + e)*c*(a + c));
(%o3)                (d + a c) e + a d + b c
 
(%i4) lratsubst (a^2 = b, a^3);
(%o4)                          a b

Categories:  Polynomials · Rational expressions

オプション変数: modulus

デフォルト値: false

modulusが正の数 pの時、 (ratや関連の関数が返すような)有理数上の演算に関して、 いわゆる均衡法系("balanced" modulus system)と呼ばれるものを使って、 pを法とする合同変換が実行されます。 均衡法系では、 n modulo pnpで割った余りですが、 (a p + knに等しくなるような整数 a, kの組の k) pが奇数の時、 [-(p-1)/2, ..., 0, ..., (p-1)/2]の中から、 pが偶数の時、[-(p/2 - 1), ..., 0, ...., p/2]の中から 選ばれます。

modulusが再設定された時、もし exprが既に標準有理式(CRE)形なら、 正しい結果を得るためには、 例えば expr: rat (ratdisrep (expr))というように exprを再ratする必要があるかもしれません。

典型的には modulusには素数が設定されます。 もし modulusが正の合成数に設定されたら、 この設定は受け入れられますが警告メッセージが表示されます。 ゼロや負の整数をmodulusに割り当てた時 Maximaはエラーをシグナルします。

例:

 
(%i1) modulus:7;
(%o1)                           7
(%i2) polymod([0,1,2,3,4,5,6,7]);
(%o2)            [0, 1, 2, 3, - 3, - 2, - 1, 0]
(%i3) modulus:false;
(%o3)                         false
(%i4) poly:x^6+x^2+1;
                            6    2
(%o4)                      x  + x  + 1
(%i5) factor(poly);
                            6    2
(%o5)                      x  + x  + 1
(%i6) modulus:13;
(%o6)                          13
(%i7) factor(poly);
                      2        4      2
(%o7)               (x  + 6) (x  - 6 x  - 2)
(%i8) polymod(%);
                            6    2
(%o8)                      x  + x  + 1

Categories:  Integers

関数: num (expr)

もし exprが比ならその分子を返します。 もし exprが比でないなら exprが返されます。

numは引数を評価します。

denomも参照してください。

 
(%i1) g1:(x+2)*(x+1)/((x+3)^2);
                         (x + 1) (x + 2)
(%o1)                    ---------------
                                   2
                            (x + 3)
(%i2) num(g1);
(%o2)                    (x + 1) (x + 2)
(%i3) g2:sin(x)/10*cos(x)/y;
                          cos(x) sin(x)
(%o3)                     -------------
                              10 y
(%i4) num(g2);
(%o4)                     cos(x) sin(x)

Categories:  Expressions

関数: polydecomp (p, x)

変数 xの多項式 pxの多項式の関数合成に分解します。 polydecomp

 
lambda ([x], p_1) (lambda ([x], p_2) (... (lambda ([x], p_n) (x))
  ...))

pに等しいようなリスト [p_1, ..., p_n]を返します。 nより小さい iについて p_iの次数は1より大きいです。

このような分解は一意的ではありません。

例:

 
(%i1) polydecomp (x^210, x);
                          7   5   3   2
(%o1)                   [x , x , x , x ]
(%i2) p : expand (subst (x^3 - x - 1, x, x^2 - a));
                6      4      3    2
(%o2)          x  - 2 x  - 2 x  + x  + 2 x - a + 1
(%i3) polydecomp (p, x);
                        2       3
(%o3)                 [x  - a, x  - x - 1]

以下の関数は xの関数として L = [e_1, ..., e_n]を合成します; それはpolydecompの逆です。

 
(%i1) compose (L, x) :=
  block ([r : x], for e in L do r : subst (e, x, r), r) $

composeを使って上の例を再表現します:

 
(%i1) polydecomp (compose ([x^2 - a, x^3 - x - 1], x), x);
                          2       3
(%o1)          [compose([x  - a, x  - x - 1], x)]

compose (polydecomp (p, x), x)はいつも(展開されていない) pを返しますが、 polydecomp (compose ([p_1, ..., p_n], x), x)は 必ずしも [p_1, ..., p_n]を返さないことに注意してください。

 
(%i1) polydecomp (compose ([x^2 + 2*x + 3, x^2], x), x);
                           2             2
(%o1)           [compose([x  + 2 x + 3, x ], x)]
(%i2) polydecomp (compose ([x^2 + x + 1, x^2 + x + 1], x), x);
                        2           2
(%o2)        [compose([x  + x + 1, x  + x + 1], x)]

Categories:  Polynomials

関数: polymod  
    polymod (p)  
    polymod (p, m)

多項式 pを現在の法(変数 modulusの値)に関するモジュラー表現に変換します。

polymod (p, m)modulusの現在値の代わりに法 mを使うように指定します。

modulusを参照してください。

Categories:  Polynomials

関数: quotient  
    quotient (p_1, p_2)  
    quotient (p_1, p_2, x_1, …, x_n)

多項式 p_1を多項式 p_2で割った結果を返します。 引数 x_1, …, x_nratvarsと同様に解釈されます。

quotientdivideが返す2要素リストの最初の要素を返します。

Categories:  Polynomials

関数: rat  
    rat (expr)  
    rat (expr, x_1, …, x_n)

exprを標準有理式(CRE)形式に変換します。 具体的には、展開し、共通の分母上ですべての項を結合し、通分し、 ratepsilonの許容誤差内で浮動小数点を有理数に変換します。 もし変数が指定されたなら、 ratvarsのように x_1, …, x_nに従って並び替えられます。

ratは一般に加算+, 減算-, 乗算*, 除算/と整数べきの指数を除いた関数を整理しません。 一方で ratsimpはこれらの場合を扱います。 CRE形式の中のアトム(数と変数)は一般形式でのそれと同じではないことに注意してください。 例えば rat(x) - xrat(0)を出力します。 これは0とは違う内部表現を持ちます。

ratfactrueの時、 ratは CREの一部因数分解された形式を出力します。 有理演算の最中、因数分解パッケージをコールすることなく 式を可能な限り因数分解された形で保持します。 これにより常に、いくつかの計算でメモリと時間を節約することになります。 分子と分母は互いに素になりますが(例えば、 ratfactrueの時 ((x^2 - 1)^4/(x + 10^2)(x - 1)^4 (x + 1)^2を出力します)、 それぞれの部分の中の因子は互いに素とは限りません。

ratprintfalseなら ユーザーに浮動小数点を有理数に変換したことを通知するメッセージの出力を抑制します。

keepfloattrueなら 浮動小数点が有理数に変換されることを抑制します。

ratexpandratsimpも参照してください。

例:

 
(%i1) ((x - 2*y)^4/(x^2 - 4*y^2)^2 + 1)*(y + a)*(2*y + x) /
      (4*y^2 + x^2);
                                           4
                                  (x - 2 y)
              (y + a) (2 y + x) (------------ + 1)
                                   2      2 2
                                 (x  - 4 y )
(%o1)         ------------------------------------
                              2    2
                           4 y  + x
(%i2) rat (%, y, a, x);
                            2 a + 2 y
(%o2)/R/                    ---------
                             x + 2 y

Categories:  Rational expressions

オプション変数: ratalgdenom

デフォルト値: true

ratalgdenomtrueの時 根号に関する分母の有理化を有効にします。 ratalgdenomは標準有理式(CRE)が代数モードで使われる時だけ効果を持ちます。

関数: ratcoef  
    ratcoef (expr, x, n)  
    ratcoef (expr, x)

exprの中の式 x^nの係数を返します。 nを省略した場合 nは1が仮定されます。

戻り値は(非有理な意味で可能な場合を除いて)xの中の変数の制約を受けません。 このタイプの係数が存在しなければ0を返します。

ratcoefは最初の引数を展開し有理的に整理するので 純粋に構文法的な coeffのそれとは違った答えを生成することがあります。 例えば ratcoef ((x + 1)/y + x, x)(y + 1)/yを返しますが、 coeffは1を返します。

exprを和と見ると、ratcoef (expr, x, 0)xを含まない項の和を返します。 だからもし xの負のべき乗が存在するなら ratcoefを使うべきではありません。

exprは検査される前に有理的に整理されるので、 係数が想像された形とは全く違って現れることがあります。

例:

 
(%i1) s: a*x + b*x + 5$
(%i2) ratcoef (s, a + b);
(%o2)                           x

Categories:  Polynomials · Rational expressions

関数: ratdenom (expr)

exprを標準有理式(CRE)に強制した後、exprの分母を返します。 戻り値はCREです。

もしexprがCREでないなら ratによってCREに強制的に変換されます。 すべての項を共通の分母上に置くことによって、この変換は exprの形式を変えることがあります。

denomは似ていますが、CREではなく通常の式を返します。 また、denomは共通の分母上にすべての項を置こうとはしませんし、 ratdenomが比と見なすいくつかの式は denomは比と見なしません。

Categories:  Rational expressions

オプション変数: ratdenomdivide

デフォルト値: true

ratdenomdividetrueの時、 ratexpandは、分子が和である比を共通の分母を持つ比の和に展開します。 そうでないなら ratexpandは比の和を1つの比に縮約します。 その比の分子はそれぞれの比の分子の和です。

例:

 
(%i1) expr: (x^2 + x + 1)/(y^2 + 7);
                            2
                           x  + x + 1
(%o1)                      ----------
                              2
                             y  + 7
(%i2) ratdenomdivide: true$
(%i3) ratexpand (expr);
                       2
                      x        x        1
(%o3)               ------ + ------ + ------
                     2        2        2
                    y  + 7   y  + 7   y  + 7
(%i4) ratdenomdivide: false$
(%i5) ratexpand (expr);
                            2
                           x  + x + 1
(%o5)                      ----------
                              2
                             y  + 7
(%i6) expr2: a^2/(b^2 + 3) + b/(b^2 + 3);
                                     2
                           b        a
(%o6)                    ------ + ------
                          2        2
                         b  + 3   b  + 3
(%i7) ratexpand (expr2);
                                  2
                             b + a
(%o7)                        ------
                              2
                             b  + 3

関数: ratdiff (expr, x)

有理式 exprxに関して微分します。 exprxの多項式もしくは多項式の商でなければなりません。 引数 xexprの変数もしくは部分式を取り得ます。

結果は、たぶん違った形式になりますが diffと同値です。 有理式の場合 ratdiffdiffより速いでしょう。

もしexprが標準有理式(CRE)なら ratdiffは標準有理式を返します。 そうでないなら一般式を返します。

ratdiffexprxへの依存のみを考慮し、 dependsで規定された依存性は無視します。

例:

 
(%i1) expr: (4*x^3 + 10*x - 11)/(x^5 + 5);
                           3
                        4 x  + 10 x - 11
(%o1)                   ----------------
                              5
                             x  + 5
(%i2) ratdiff (expr, x);
                    7       5       4       2
                 8 x  + 40 x  - 55 x  - 60 x  - 50
(%o2)          - ---------------------------------
                          10       5
                         x   + 10 x  + 25
(%i3) expr: f(x)^3 - f(x)^2 + 7;
                         3       2
(%o3)                   f (x) - f (x) + 7
(%i4) ratdiff (expr, f(x));
                           2
(%o4)                   3 f (x) - 2 f(x)
(%i5) expr: (a + b)^3 + (a + b)^2;
                              3          2
(%o5)                  (b + a)  + (b + a)
(%i6) ratdiff (expr, a + b);
                    2                    2
(%o6)            3 b  + (6 a + 2) b + 3 a  + 2 a

Categories:  Rational expressions

関数: ratdisrep (expr)

引数を一般式として返します。 もし exprが一般式なら戻り値は引数と変わりません。

典型的には ratdisrepは標準有理式(CRE)を一般式に変換するためにコールされます。 もし「伝染」を止めたかったり非有理文脈で有理関数を使いたいなら、 これは時々便利です。

totaldisrepも参照してください。

Categories:  Rational expressions

関数: ratexpand (expr)
オプション変数: ratexpand

exprを展開します。 指数和や和の積を展開し、共通分母上の分数を結合し、通分し、 (もし和なら)分子を分母で割ったそれぞれの項に分割します。

たとえ exprが標準有理式(CRE)でも ratexpandの戻り値は一般式です。

スイッチ ratexpandtrueなら、 CRE式は一般式や表示形式に変換された時完全に展開されます。 一方もし falseなら再帰形式に変換します。 ratsimpも参照してください。

ratdenomdividetrueの時、 ratexpandは分子が和である比を共通の分母を持つ比の和に展開します。 そうでないなら、 ratexpandは比の和をその分子がそれぞれの比の分子の和である単一の比にまとめます。

keepfloattrueの場合、 浮動小数点を含んだ式をCRE形式に変換する時、浮動小数点が有理化されるのを抑制します。

例:

 
(%i1) ratexpand ((2*x - 3*y)^3);
                     3         2       2        3
(%o1)          - 27 y  + 54 x y  - 36 x  y + 8 x
(%i2) expr: (x - 1)/(x + 1)^2 + 1/(x - 1);
                         x - 1       1
(%o2)                   -------- + -----
                               2   x - 1
                        (x + 1)
(%i3) expand (expr);
                    x              1           1
(%o3)          ------------ - ------------ + -----
                2              2             x - 1
               x  + 2 x + 1   x  + 2 x + 1
(%i4) ratexpand (expr);
                        2
                     2 x                 2
(%o4)           --------------- + ---------------
                 3    2            3    2
                x  + x  - x - 1   x  + x  - x - 1

Categories:  Rational expressions

オプション変数: ratfac

デフォルト値: false

ratfactrueの時、 標準有理式(CRE)を部分的に因数分解された形式で操作します。

有理演算の間、 式を、factorをコールせずに 可能な限り最大限因数分解した形で維持します。 これはいつも保存領域を節約し、いくつかの計算では時間も節約することがあります。 分子と分母は互いに素になります。 例えば factor ((x^2 - 1)^4/(x + 1)^2)(x - 1)^4 (x + 1)^2)をもたらしますが、 それぞれの部分の中の因子は互いに素ではないかもしれません。

ctensr(成分テンソル操作)パッケージでは、 ratfactrueの時、 Ricci, Einstein, Riemann, Weylテンソルとスカラー曲率を 自動的に因数分解します。 ratfacはテンソルの成分が2、3の項から成ると知られている場合だけ 設定すべきです。

ratfacratweight体系は互換性はなく、 同時には使えないかもしれません。

Categories:  Rational expressions

関数: ratnumer (expr)

exprを標準有理式(CRE)に強制変換した後、その分子を返します。 戻り値はCREです。

もしexprがCREでないなら ratによってCREに強制変換されます。 この変換は、 共通の分母上にすべての項を置くことによって、 exprの形式を変えるかもしれません。

numは似ていますが、 CREではなく通常の式を返します。 また numは共通の分母上にすべての項を置こうとはしませんし、 ratnumerが比と見なすいくつかの式は numは比と見しません。

Categories:  Rational expressions

関数: ratp (expr)

もし exprが標準有理式(CRE)か拡張CREなら trueを返し、 そうでないなら falseを返します。

CREは ratと関連関数によって生成されます。 拡張CREは taylorと関連関数によって生成されます。

オプション変数: ratprint

デフォルト値: true

ratprinttrueの時、 ユーザーに浮動小数点を有理数に変換したことを通知するメッセージを表示します。

関数: ratsimp (expr)
関数: ratsimp (expr, x_1, ..., x_n)

expとその部分式の全てを有理的に整理します(非有理的関数の引数も含みます)。 結果は二つの多項式の商として、再帰的形式 —主変数の係数が他の変数の多項式である形式—で返されます。 変数は(例えば sin(z^2+1)のような)非有理関数を含むかもしれませんが、 どんな非有理関数の引数もまた有理的に整理されます。

ratsimp (expr, x_1, ..., x_n)ratvarsで指定した場合と同様に変数の順序指定に従って有理的に整理します。

ratsimpexponstrueの時、 ratsimpは式の指数にも適用されます。

ratexpandも参照してください。 ratsimpratexpandに影響するフラグのいくつかに影響されることに注意してください。

例:

 
(%i1) sin (x/(x^2 + x)) = exp ((log(x) + 1)^2 - log(x)^2);
                                         2      2
                   x         (log(x) + 1)  - log (x)
(%o1)        sin(------) = %e
                  2
                 x  + x
(%i2) ratsimp (%);
                             1          2
(%o2)                  sin(-----) = %e x
                           x + 1
(%i3) ((x - 1)^(3/2) - (x + 1)*sqrt(x - 1))/sqrt((x - 1)*(x + 1));
                       3/2
                (x - 1)    - sqrt(x - 1) (x + 1)
(%o3)           --------------------------------
                     sqrt((x - 1) (x + 1))
(%i4) ratsimp (%);
                           2 sqrt(x - 1)
(%o4)                    - -------------
                                 2
                           sqrt(x  - 1)
(%i5) x^(a + 1/a), ratsimpexpons: true;
                               2
                              a  + 1
                              ------
                                a
(%o5)                        x

オプション変数: ratsimpexpons

デフォルト値: false

ratsimpexponstrueの時、 式整理の間 ratsimpを式の指数に適用します。

オプション変数: radsubstflag

デフォルト値: false

もし radsubstflagtrueなら、 ratsubstxの中の sqrt (x)uを代入するような代入をできるようにします。

関数: ratsubst (a, b, c)

cの中の baを代入し、結果の式を返します。 bは和でも積tでもべきなどでも問題ありません。

substは純粋に構文法的代入ですが、 ratsubstは式の意味の何かを知っています。 だから subst (a, x + y, x + y + z)x + y + zを返す一方、 ratsubstz + aを返します。

ratsubstflagtrueの時、 ratsubstは式が陽には含んでいない根への代入を実行します。

ratsubstはオプション変数 keepfloatの値 trueを無視します。

例:

 
(%i1) ratsubst (a, x*y^2, x^4*y^3 + x^4*y^8);
                              3      4
(%o1)                      a x  y + a
(%i2) cos(x)^4 + cos(x)^3 + cos(x)^2 + cos(x) + 1;
               4         3         2
(%o2)       cos (x) + cos (x) + cos (x) + cos(x) + 1
(%i3) ratsubst (1 - sin(x)^2, cos(x)^2, %);
            4           2                     2
(%o3)    sin (x) - 3 sin (x) + cos(x) (2 - sin (x)) + 3
(%i4) ratsubst (1 - cos(x)^2, sin(x)^2, sin(x)^4);
                        4           2
(%o4)                cos (x) - 2 cos (x) + 1
(%i5) radsubstflag: false$
(%i6) ratsubst (u, sqrt(x), x);
(%o6)                           x
(%i7) radsubstflag: true$
(%i8) ratsubst (u, sqrt(x), x);
                                2
(%o8)                          u

Categories:  Rational expressions

関数: ratvars (x_1, …, x_n)
関数: ratvars ()
システム変数: ratvars

有理式に関して主変数 x_1, ..., x_nを宣言します。 もし x_nが有理式の中に存在するなら それを主変数と見なします。 もし x_nが有理式の中に存在せず x_[n-1]が存在するなら、それを主変数と見なします。 などと先行する変数を通してx_1まで続きます。 x_1は 後に続く変数が存在しなかった時だけ主変数と見なされる変数です。

もし有理式の中の変数が ratvarsリストの中に存在しなかったら、 その変数には x_1よりも低い優先順位が与えられます。

ratvarsの引数は変数や sin(x)のような非有理関数もあり得ます。

変数 ratvarsは直近にコールされたときの関数 ratvarsの引数のリストです。 関数 ratvarsのコールそれぞれはリストを再設定します。 ratvars ()はリストをクリアします。

Categories:  Rational expressions

オプション変数: ratvarswitch

デフォルト値: true

Maximaは Lisp変数 VARLISTの中に有理式の主変数の内部リストを保持します。 もし ratvarswitchtrueなら、 すべての評価は新しいリスト VARLISTで開始します。 これがデフォルトの振る舞いです。 そうでないなら、以前の評価からの主変数が内部リスト VARLISTから取り除かれません。

主変数は関数 ratvarsで宣言されるのですが、 オプション変数 ratvarswitchは主変数に影響しません。

例:

もし ratvarswitchtrueなら すべての評価は新しいリスト VARLISTで始まります。

 
(%i1) ratvarswitch:true$

(%i2) rat(2*x+y^2);
                             2
(%o2)/R/                    y  + 2 x
(%i3) :lisp varlist
($X $Y)

(%i3) rat(2*a+b^2);
                             2
(%o3)/R/                    b  + 2 a

(%i4) :lisp varlist
($A $B)

もし ratvarswitchfalseなら 直前の評価からの主変数はまだ存在しています。

 
(%i4) ratvarswitch:false$

(%i5) rat(2*x+y^2);
                             2
(%o5)/R/                    y  + 2 x
(%i6) :lisp varlist
($X $Y)

(%i6) rat(2*a+b^2);
                             2
(%o6)/R/                    b  + 2 a

(%i7) :lisp varlist
($A $B $X $Y)

関数: ratweight  
    ratweight (x_1, w_1, …, x_n, w_n)  
    ratweight ()

変数 x_iに重み w_iを割り当てます。 これによって、 もし重みが変数 ratwtlvlの値を越えるなら項を0に置き換えるようにします。 (デフォルトでは切り詰めはもたらしません。) 項の重みは項の中の変数の重みと変数の指数を掛けたものの和です。 例えば 3 x_1^2 x_2の重みは 2 w_1 + w_2です。 ratwtlvlに従った切り詰めは標準有理式(CRE)を掛けたり、指数化する時だけ実行されます。

ratweight ()は重み割り当ての累積リストを返します。

注意: ratfacratweight体系は互換性はなく、 同時には使えないかもしれません。

例:

 
(%i1) ratweight (a, 1, b, 1);
(%o1)                     [a, 1, b, 1]
(%i2) expr1: rat(a + b + 1)$
(%i3) expr1^2;
                  2                  2
(%o3)/R/         b  + (2 a + 2) b + a  + 2 a + 1
(%i4) ratwtlvl: 1$
(%i5) expr1^2;
(%o5)/R/                  2 b + 2 a + 1

Categories:  Rational expressions

システム変数: ratweights

デフォルト値: []

ratweightsratweightが割り当てた重みのリストです。 リストは累積されます: ratweightをコールすると毎回リストに項目を追加します。

kill (ratweights)save (ratweights)はともに期待通り動作します。

Categories:  Rational expressions

オプション変数: ratwtlvl

デフォルト値: false

ratwtlvlは、 標準有理式(CRE)の切り詰めを制御するために ratweight関数と組み合わせて使われます。 デフォルト値の falseでは切り詰めは起こりません。

Categories:  Rational expressions

関数: remainder  
    remainder (p_1, p_2)  
    remainder (p_1, p_2, x_1, …, x_n)

多項式 p_1を多項式 p_2で割った余りを返します。 引数 x_1, ..., x_nratvarsと同様に解釈されます。

remainderdivideが返す2要素リストの2番目の要素を返します。

Categories:  Polynomials

関数: resultant (p_1, p_2, x)

関数 resultantは、変数 xを消去して2つの多項式 p_1p_2の終結式を計算します。 終結式は p_1p_2の中の xの係数の判別式です。 それは p_1p_2が定数でない因子を共通に持つ時だけゼロに等しいです。

もし p_1p_2が因数分解できるなら、 resultantをコールする前に factorをコールするのが望ましいかもしれません。

オプション変数 resultantはどのアルゴリズムが計算に使われるか制御します。 オプション変数 resultantを参照してください。

関数 bezoutresultantと同じ引数を取り、行列を返します。 戻り値の判別式は望みの終結式です。

例:

 
(%i1) resultant(2*x^2+3*x+1, 2*x^2+x+1, x);
(%o1)                           8
(%i2) resultant(x+1, x+1, x);
(%o2)                           0
(%i3) resultant((x+1)*x, (x+1), x);
(%o3)                           0
(%i4) resultant(a*x^2+b*x+1, c*x + 2, x);
                         2
(%o4)                   c  - 2 b c + 4 a

(%i5) bezout(a*x^2+b*x+1, c*x+2, x);
                        [ 2 a  2 b - c ]
(%o5)                   [              ]
                        [  c      2    ]
(%i6) determinant(%);
(%o6)                   4 a - (2 b - c) c

Categories:  Polynomials

オプション変数: resultant

デフォルト値: subres

オプション変数 resultantは関数 resultant.を使って終結式を計算するのにどのアルゴリズムが使われるか制御します。 可能な値は以下の通りです:

subres

部分終結式多項式剰余列(PRS)アルゴリズム

mod

(not enabled) モジュラー終結式アルゴリズム

red

通分多項式剰余列(PRS)アルゴリズム

大抵の問題では subresが最適です。

Categories:  Polynomials

オプション変数: savefactors

デフォルト値: false

savefactorstrueの時、 同じ因子のいくつかを含む式の因数分解を後でする時にスピードアップするために、 いくつかの関数が因子の積の形の式の因子を保存されるようにします。

Categories:  Polynomials

関数: showratvars (expr)

exprの中の標準有理式 (CRE)変数のリストを返します。

ratvarsも参照してください。

関数: sqfr (expr)

多項式因子が「平方にならない」ことを除いて factorに似ています。 すなわち、それらは次数1だけの因子を持ちます。 このアルゴリズムは factorの最初の段階でも使われるのですが、 多項式は n階微分と共通に nよりも大きな次数のすべての因子を持つという事実を使います。 このように、それぞれの変数に関する微分の多項式との最大公約数を取ることによって、 1よりも大きな次数の因子を見つけることができます。

例:

 
(%i1) sqfr (4*x^4 + 4*x^3 - 3*x^2 - 4*x - 1);
                                2   2
(%o1)                  (2 x + 1)  (x  - 1)

Categories:  Polynomials

関数: tellrat  
    tellrat (p_1, …, p_n)  
    tellrat ()

多項式 p_1, ..., p_nの解である要素を Maximaに知られている代数的整数の環に加えます。 それぞれの引数 p_iは整数係数の多項式です。

tellrat (x)は、実際には有理関数の中で xに0を代入することを意味します。

tellrat ()は現在の代入のリストを返します。

代数的整数の整理が効果を持つようにするためには、 algebraictrueに設定しなければいけません。

Maximaは、起動の際には虚数単位と整数の根すべてについて知っています。

核(kernels)を取り tellratプロパティを削除するコマンド untellratがあります。

例えば tellrat (x^2 - y^2)のように多変数多項式を tellratする時、 y^2x^2に代入するのか逆なのかといったあいまいさがあります。 Maximaは特定の順序付けを選びますが、 もしユーザーがどちらか指定したいなら、 例えば tellrat (y^2 = x^2)y^2x^2で置き換えることを示す構文法を供給します。

例:

 
(%i1) 10*(%i + 1)/(%i + 3^(1/3));
                           10 (%i + 1)
(%o1)                      -----------
                                  1/3
                            %i + 3
(%i2) ev (ratdisrep (rat(%)), algebraic);
             2/3      1/3              2/3      1/3
(%o2)    (4 3    - 2 3    - 4) %i + 2 3    + 4 3    - 2
(%i3) tellrat (1 + a + a^2);
                            2
(%o3)                     [a  + a + 1]
(%i4) 1/(a*sqrt(2) - 1) + a/(sqrt(3) + sqrt(2));
                      1                 a
(%o4)           ------------- + -----------------
                sqrt(2) a - 1   sqrt(3) + sqrt(2)
(%i5) ev (ratdisrep (rat(%)), algebraic);
         (7 sqrt(3) - 10 sqrt(2) + 2) a - 2 sqrt(2) - 1
(%o5)    ----------------------------------------------
                               7
(%i6) tellrat (y^2 = x^2);
                        2    2   2
(%o6)                 [y  - x , a  + a + 1]

Categories:  Polynomials · Rational expressions

関数: totaldisrep (expr)

exprのすべての部分式を標準有理式(CRE)から一般形に変換して結果を返します。 もし exprがそれ自身CRE形なら、 totaldisrepratdisrepと同一です。

totaldisrepは CRE形の部分式を持つ等式やリストや行列などの式を ratdisrepするために役に立つかもしれません。

Categories:  Rational expressions

関数: untellrat (x_1, …, x_n)

x_1, …, x_nから tellratプロパティを削除します。

Categories:  Polynomials · Rational expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15. Special Functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1 Introduction to Special Functions

特殊函数表記は以下の通りです:

 
bessel_j (index, expr)         第一種ベッセル函数
bessel_y (index, expr)         第二種ベッセル函数
bessel_i (index, expr)         第一種変形ベッセル函数
bessel_k (index, expr)         第二種変形ベッセル函数

hankel_1 (v,z)                 第一種ハンケル函数
hankel_2 (v,z)                 第二種ハンケル函数
struve_h (v,z)                 シュトルーベH函数
struve_l (v,z)                 シュトルーベL函数

assoc_legendre_p[v,u] (z)      位数v、次数uのルジャンドル函数
assoc_legendre_q[v,u] (z)      第二種ルジャンドル函数

%f[p,q] ([], [], expr)         一般化超幾何函数
gamma (z)                      ガンマ函数
gamma_greek (a,z)              第一種不完全ガンマ函数
gammaincomplete (a,z)          第二種不完全ガンマ函数
hypergeometric (l1, l2, z)     超幾何函数
slommel
%m[u,k] (z)                    第一種Whittaker函数
%w[u,k] (z)                    第二種Whittaker函数
erfc (z)                       相補誤差函数
ei (z)                         指数積分 (?)
kelliptic (z)                  第一種完全楕円積分 (K)
parabolic_cylinder_d (v,z)     放物円筒D函数

Categories:  Bessel functions · Airy functions · Special functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.2 Bessel Functions

関数: bessel_j (v, z)

次数 vと独立変数 zの第一種ベッセル函数。

bessel_jは以下のように定義されます。

 
                inf
                ====       k  - v - 2 k  v + 2 k
                \     (- 1)  2          z
                 >    --------------------------
                /        k! gamma(v + k + 1)
                ====
                k = 0

計算のために無限級数は使われませんが。

関数: bessel_y (v, z)

次数 vと独立変数 zの第二種ベッセル函数

vが整数でない時、 bessel_yは以下のように定義されます。

 
              cos(%pi v) bessel_j(v, z) - bessel_j(-v, z)
              -------------------------------------------
                             sin(%pi v)

vが整数 nの時、 vnに近づく極限が取られます。

関数: bessel_i (v, z)

次数 v、独立変数 zの第一種変形ベッセル函数

bessel_iは以下のように定義されます。

 
                    inf
                    ====   - v - 2 k  v + 2 k
                    \     2          z
                     >    -------------------
                    /     k! gamma(v + k + 1)
                    ====
                    k = 0

無限級数は計算には使われませんが。

関数: bessel_k (v, z)

次数 v、独立変数 zの第二種変形ベッセル函数

vが整数の時 bessel_kは以下のように定義されます。

 
           %pi csc(%pi v) (bessel_i(-v, z) - bessel_i(v, z))
           -------------------------------------------------
                                  2

もし vが整数 nでないなら、 vnに近づく極限が取られます。

関数: hankel_1 (v, z)

次数 v、独立変数 zの第一種ハンケル函数 (A&S 9.1.3)。 hankel_1は以下のように定義されます。

 
   bessel_j(v,z) + %i * bessel_y(v,z)

Maximaは浮動小数点精度の複素次数 vと複素独立変数 zに対して hankel_1を数値的に評価します。 多倍長浮動小数点精度の数値評価はサポートされていません。

besselexpandtrueの時、 次数 vが奇数の1/2の時 hankel_1は初等函数の項に展開されます。 besselexpandを参照してください。

Maximaは hankel_1の独立変数 zに関する導函数を知っています。

例:

数値評価:

 
(%i1) hankel_1(1,0.5);
(%o1)        0.24226845767487 - 1.471472392670243 %i
(%i2) hankel_1(1,0.5+%i);
(%o2)       - 0.25582879948621 %i - 0.23957560188301

besselexpandtrueの時の hankel_1の展開:

 
(%i1) hankel_1(1/2,z),besselexpand:true;
               sqrt(2) sin(z) - sqrt(2) %i cos(z)
(%o1)          ----------------------------------
                       sqrt(%pi) sqrt(z)

hankel_1の独立変数 zに関する導函数。 次数 vに関する導函数はサポートされていません。 Maximaは名詞形を返します:

 
(%i1) diff(hankel_1(v,z),z);
             hankel_1(v - 1, z) - hankel_1(v + 1, z)
(%o1)        ---------------------------------------
                                2
(%i2) diff(hankel_1(v,z),v);
                       d
(%o2)                  -- (hankel_1(v, z))
                       dv

関数: hankel_2 (v, z)

次数 v、独立変数 zの第二種ハンケル函数 (A&S 9.1.4)。 hankel_2は以下のように定義されます。

 
   bessel_j(v,z) - %i * bessel_y(v,z)

Maximaは浮動小数点精度の複素次数 vと複素独立変数 zに対して hankel_2を数値的に評価します。 多倍長浮動小数点精度の数値評価はサポートされていません。

besselexpandtrueの時、 次数 vが奇数の1/2の時 hankel_2は初等函数の項に展開されます。 besselexpandを参照してください。

Maximaは hankel_2の独立変数 zに関する導函数を知っています。

例は hankel_1を参照してください。

オプション変数: besselexpand

デフォルト値: false

次数が半奇数の時のベッセル函数の展開を制御します。 この場合、ベッセル函数は他の初等函数で展開することができます。 besselexpandtrueの時、ベッセル函数は展開されます。

 
(%i1) besselexpand: false$
(%i2) bessel_j (3/2, z);
                                    3
(%o2)                      bessel_j(-, z)
                                    2
(%i3) besselexpand: true$
(%i4) bessel_j (3/2, z);
                                        sin(z)   cos(z)
                       sqrt(2) sqrt(z) (------ - ------)
                                           2       z
                                          z
(%o4)                  ---------------------------------
                                   sqrt(%pi)

関数: scaled_bessel_i (v, z)

次数 v、独立変数 zの、スケールされた第一種変形ベッセル函数。 すなわち scaled_bessel_i(v,z) = exp(-abs(z))*bessel_i(v, z)。 この関数は大きな zに関する bessel_i―これはおおきくなりますーの計算に特に役に立ちます。 しかしながら、そうでないなら Maximaはこの関数についてあまり知りません。 数式処理のためには式 exp(-abs(z))*bessel_i(v, z)を使って取り組むのが多分望ましいです。

Categories:  Bessel functions

関数: scaled_bessel_i0 (z)

scaled_bessel_i(0,z)と同一です。

関数: scaled_bessel_i1 (z)

scaled_bessel_i(1,z)と同一です。

関数: %s [u,v] (z)

Lommelの小s[u,v](z)函数。 多分 Gradshteyn & Ryzhik 8.570.1.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.3 Airy Functions

エアリー函数Ai(x)とBi(x)は、Abramowitz and Stegun, Handbook of Mathematical Functions, Section 10.4の中で定義されています。

y = Ai(x)y = Bi(x)はエアリー微分方程式 diff (y(x), x, 2) - x y(x) = 0の2つの線形独立な解です。

もし引数 xが実数か複素数の浮動小数点数なら関数の数値が返されます。

関数: airy_ai (x)

エアリー函数Ai(x)。 (A&S 10.4.2)

導函数 diff (airy_ai(x), x)airy_dai(x)です。

airy_bi, airy_dai, airy_dbiも参照してください。

Categories:  Airy functions · Special functions

関数: airy_dai (x)

エアリー函数Ai airy_ai(x)の導函数。

airy_aiを参照してください。

Categories:  Airy functions · Special functions

関数: airy_bi (x)

エアリー函数Bi(x)。 (A&S 10.4.3)

導函数 diff (airy_bi(x), x)airy_dbi(x)です。

airy_ai, airy_dbiを参照してください。

Categories:  Airy functions · Special functions

関数: airy_dbi (x)

エアリーBi函数 airy_bi(x)の導函数。

airy_aiairy_biを参照してください。

Categories:  Airy functions · Special functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.4 Gamma and factorial Functions

ガンマ函数と、関連したベータ、プサイ、不完全ガンマ函数は Abramowitz and Stegun, Handbook of Mathematical Functions, Chapter 6の中で定義されています。

関数: bffac (expr, n)

階乗(シフトガンマ)函数の多倍長浮動小数点バージョン。 2番目の引数は、保持し返す桁数です。 少しの余分を要請するのはいい考えです。

関数: bfpsi (n, z, fpprec)
関数: bfpsi0 (z, fpprec)

bfpsiは実引数 zと整数次数 nの多ガンマ函数です。 bfpsi0はディガンマ函数です。 bfpsi0 (z, fpprec)bfpsi (0, z, fpprec)と同値です。

これらの関数は多倍長浮動小数点値を返します。 fpprecは戻り値の多倍長浮動小数点精度です。

関数: cbffac (z, fpprec)

複素多倍長浮動小数点の階乗です。

load ("bffac")はこの関数をロードします。

関数: gamma (z)

ガンマ函数の基本的な定義 (A&S 6.1.1) は、

 
                         inf
                        /
                        [     z - 1   - t
             gamma(z) = I    t      %e    dt
                        ]
                        /
                         0

です。

Maximaは正の整数と正負の有理数に関して gammaを整理します。 半整数値に関して結果は有理数掛ける sqrt(%pi)です。 整数値に関する整理は factlimによって制御されます。

factlimより大きな整数に関して 階乗函数ーgammaを計算するのに使われますーの数値的な結果はオーバーフローします。 有理数に関する整理は、内部オーバーフローを避けるために gammalimによって制御されます。 factlimgammalimも参照してください。

負の整数に関して gammaは未定義です。

Maximaは浮動小数点および多倍長浮動小数点の実数値および複素数値に関して gammaを数値的に評価できます。

gammaは鏡像対称性を持ちます。

gamma_expandtrueの時、 Maximaは引数 z+nz-nnは整数―の gammaを展開します。

Maximaは gammaの導函数を知っています。

例:

整数、半整数、有理数に関する整理:

 
(%i1) map('gamma,[1,2,3,4,5,6,7,8,9]);
(%o1)        [1, 1, 2, 6, 24, 120, 720, 5040, 40320]
(%i2) map('gamma,[1/2,3/2,5/2,7/2]);
                    sqrt(%pi)  3 sqrt(%pi)  15 sqrt(%pi)
(%o2)   [sqrt(%pi), ---------, -----------, ------------]
                        2           4            8
(%i3) map('gamma,[2/3,5/3,7/3]);
                                  2           1
                          2 gamma(-)  4 gamma(-)
                      2           3           3
(%o3)          [gamma(-), ----------, ----------]
                      3       3           9

実数と複素数の数値評価:

 
(%i4) map('gamma,[2.5,2.5b0]);
(%o4)     [1.329340388179137, 1.329340388179137b0]
(%i5) map('gamma,[1.0+%i,1.0b0+%i]);
(%o5) [.4980156681183558 - .1549498283018108 %i,
         4.980156681183561b-1 - 1.549498283018107b-1 %i]

gammaは鏡像対称性を持ちます:

 
(%i6) declare(z,complex)$
(%i7) conjugate(gamma(z));
(%o7)                  gamma(conjugate(z))

gamma_expandtrueの時 Maximaは gamma(z+n)gamma(z-n)を展開します:

 
(%i8) gamma_expand:true$

(%i9) [gamma(z+1),gamma(z-1),gamma(z+2)/gamma(z+1)];
                               gamma(z)
(%o9)             [z gamma(z), --------, z + 1]
                                z - 1

gammaの導函数:

 
(%i10) diff(gamma(z),z);
(%o10)                  psi (z) gamma(z)
                           0

makegammaも参照してください。

オイラー-マスケローニ定数は %gammaです。

関数: log_gamma (z)

ガンマ函数の自然対数。

関数: gamma_greek (a, z)

第一種不完全ガンマ函数 (A&S 6.5.2):

 
                         z
                        /
                        [  a - 1   - t
    gamma_greek(a, z) = I t      %e    dt
                        ]
                        /
                         0

gamma_incomplete (上側不完全ガンマ函数)も参照してください。

関数: gamma_incomplete (a,z)

第二種不完全ガンマ函数 (A&S 6.5.3):

 
                              inf
                             /
                             [     a - 1   - t
    gamma_incomplete(a, z) = I    t      %e    dt
                             ]
                             /
                              z

初等函数と erfcの項でいかに gamma_incompleteを表すかを制御するには、 gamma_expandも参照してください。

関連の関数 gamma_incomplete_regularizedgamma_incomplete_generalizedも参照してください。

関数: gamma_incomplete_regularized (a, z)

正則第二種不完全ガンマ函数 (A&S 6.5.1):

 
gamma_incomplete_regularized(a, z) =
                                        gamma_incomplete(a, z)
                                        ----------------------
                                               gamma(a)

初等函数と erfcの項でいかに gamma_incompleteを表すかを制御するには、 gamma_expandも参照してください。

gamma_incompleteも参照してください。

関数: gamma_incomplete_generalized (a,z1,z1 )

一般化不完全ガンマ函数

 
gamma_incomplete_generalized(a, z1, z2) =
                                               z2
                                              /
                                              [    a - 1   - t
                                              I   t      %e    dt
                                              ]
                                              /
                                               z1

gamma_incompletegamma_incomplete_regularizedも参照してください。

オプション変数: gamma_expand

デフォルト値: false

gamma_expandgamma_incompleteの展開を制御します。 gamma_expandtrueの時、 gamma_incomplete(v,z)は、可能なら、 z, exp(z), erfc(z)の項で展開されます。

 
(%i1) gamma_incomplete(2,z);
(%o1)                       gamma_incomplete(2, z)
(%i2) gamma_expand:true;
(%o2)                                true
(%i3) gamma_incomplete(2,z);
                                           - z
(%o3)                            (z + 1) %e
(%i4) gamma_incomplete(3/2,z);
                              - z   sqrt(%pi) erfc(sqrt(z))
(%o4)               sqrt(z) %e    + -----------------------
                                               2

オプション変数: gammalim

デフォルト値: 10000

gammalimは整数と有理数引数に関してガンマ函数の整理を制御します。 もし引数の絶対値が gammalimよりも大きくないなら整理が行われます。 factlimスイッチは整数引数の gammaの結果の整理を制御します。 factlimスイッチは整数引数の gammaの結果の整理も制御することに注意してください。

関数: makegamma (expr)

exprの中の2項、階乗、ベータ函数のインスタンスをガンマ函数に変換します。

makefactも参照してください。

関数: beta (a, b)

ベータ函数は gamma(a) gamma(b)/gamma(a+b) (A&S 6.2.1)として定義されます。

Maximaは、正の整数と、合計すると整数になる有理数についてベータ函数を整理します。 beta_args_sum_to_integertrueの時、 Maximaは和が整数になる一般式も整理します。

abがゼロに等しい時にはベータ函数は未定義です。

一般にベータ函数は負の整数の引数で未定義です。 例外は a=-nnは正の整数―かつ bb<=nの正の整数で、 解析接続を定義することが可能です。 Maximaはこの場合結果を与えます。

beta_expandtrueの時、 nを整数とする beta(a+n,b)beta(a-n,b)、 もしくは beta(a,b+n)beta(a,b-n) のような式は整理されます。

Maximaは、実数値と複素数値のベータ函数を浮動小数点と多倍長浮動小数点精度で評価できます。 数値評価のために Maximaは log_gammaを使います:

 
           - log_gamma(b + a) + log_gamma(b) + log_gamma(a)
         %e

Maximaはベータ函数が対称で、鏡像対称性を持つことを知っています。

Maximaは abに関するベータ函数の導函数を知っています。

ベータ函数をガンマ函数の比として表現するには makegammaを参照してください。

例:

引数の1つが整数の時の整理:

 
(%i1) [beta(2,3),beta(2,1/3),beta(2,a)];
                               1   9      1
(%o1)                         [--, -, ---------]
                               12  4  a (a + 1)

2つの有理数引数の和が整数になる時の整理:

 
(%i2) [beta(1/2,5/2),beta(1/3,2/3),beta(1/4,3/4)];
                          3 %pi   2 %pi
(%o2)                    [-----, -------, sqrt(2) %pi]
                            8    sqrt(3)

beta_args_sum_to_integertrueに設定した場合、 引数の和が整数の時より一般的な式を整理します:

 
(%i3) beta_args_sum_to_integer:true$
(%i4) beta(a+1,-a+2);
                                %pi (a - 1) a
(%o4)                         ------------------
                              2 sin(%pi (2 - a))

引数の1つが負の整数の時、可能な結果:

 
(%i5) [beta(-3,1),beta(-3,2),beta(-3,3)];
                                    1  1    1
(%o5)                            [- -, -, - -]
                                    3  6    3

beta_expandtrueの時、 nが整数として beta(a+n,b)beta(a-n)は整理されます:

 
(%i6) beta_expand:true$
(%i7) [beta(a+1,b),beta(a-1,b),beta(a+1,b)/beta(a,b+1)];
                    a beta(a, b)  beta(a, b) (b + a - 1)  a
(%o7)              [------------, ----------------------, -]
                       b + a              a - 1           b

引数の1つがゼロの時、ベータは未定義です:

 
(%i7) beta(0,b);
beta: expected nonzero arguments; found 0, b
 -- an error.  To debug this try debugmode(true);

実数値と複素数値の浮動小数点または多倍長浮動小数点精度での数値評価:

 
(%i8) beta(2.5,2.3);
(%o8) .08694748611299981

(%i9) beta(2.5,1.4+%i);
(%o9) 0.0640144950796695 - .1502078053286415 %i

(%i10) beta(2.5b0,2.3b0);
(%o10) 8.694748611299969b-2

(%i11) beta(2.5b0,1.4b0+%i);
(%o11) 6.401449507966944b-2 - 1.502078053286415b-1 %i

ベータは対称で、鏡像対称性を持ちます:

 
(%i14) beta(a,b)-beta(b,a);
(%o14)                                 0
(%i15) declare(a,complex,b,complex)$
(%i16) conjugate(beta(a,b));
(%o16)                 beta(conjugate(a), conjugate(b))

aに関するベータ函数の導函数:

 
(%i17) diff(beta(a,b),a);
(%o17)               - beta(a, b) (psi (b + a) - psi (a))
                                      0             0

関数: beta_incomplete (a, b, z)

不完全ベータ函数の基本定義(A&S 6.6.1)は以下の通りです。

 
        z
       /
       [         b - 1  a - 1
       I  (1 - t)      t      dt
       ]
       /
        0

この定義は realpart(a)>0かつ realpart(b)>0かつ abs(z)<1で可能です。 他の値では不完全ベータ函数は一般化超幾何函数を通じて定義することができます。

 
   gamma(a) hypergeometric_generalized([a, 1 - b], [a + 1], z) z

(不完全ベータ函数の完全な定義については、functions.wolfram.comを参照してください。)

負の整数 a = -nと正の整数 b=mm<=nの場合、 不完全ベータ函数は以下を通して定義されます。

 
                            m - 1           k
                            ====  (1 - m)  z
                      n - 1 \            k
                     z       >    -----------
                            /     k! (n - k)
                            ====
                            k = 0

Maximaは、 負の整数 aに関する beta_incompleteを整理するためにこの定義を使います。

aが正の整数の時 任意の引数 b, zに関して、 bが正の整数の時 非負の整数a, 任意のzに関して、 beta_incompleteは整理されます。

z=0かつ realpart(a)>0の時、 beta_incompleteは特別な値ゼロを取ります。 z=1かつ realpart(b)>0の時、 beta_incompleteはベータ函数 beta(a,b)に整理されます。

Maximaは、浮動小数点か多倍長浮動小数点精度の実数値と複素数値に対して、 beta_incompleteを数値的に評価します。 数値評価に関して不完全ベータ函数の連分数展開を使います。

オプション変数 beta_expandtrueの時、 Maximaは beta_incomplete(a+n,b,z)beta_incomplete(a-n,b,z)のような式を展開します。ここでnは正の整数です。

Maximaは beta_incompleteの変数 a, b, zについての導函数と変数 zについての積分を知っています。

例:

正の整数 aに関する整理:

 
(%i1) beta_incomplete(2,b,z);
                                       b
                            1 - (1 - z)  (b z + 1)
(%o1)                       ----------------------
                                  b (b + 1)

正の整数 bに関する整理:

 
(%i2) beta_incomplete(a,2,z);
                                               a
                              (a (1 - z) + 1) z
(%o2)                         ------------------
                                  a (a + 1)

正の整数 a, bに関する整理:

 
(%i3) beta_incomplete(3,2,z);
                                               3
                              (3 (1 - z) + 1) z
(%o3)                         ------------------
                                      12

aが負の整数でかつ b<=(-a)の時、Maximaは整理します:

 
(%i4) beta_incomplete(-3,1,z);
                                       1
(%o4)                              - ----
                                        3
                                     3 z

特定の値 z=0z=1に関して, Maximaは整理します:

 
(%i5) assume(a>0,b>0)$
(%i6) beta_incomplete(a,b,0);
(%o6)                                 0
(%i7) beta_incomplete(a,b,1);
(%o7)                            beta(a, b)

浮動小数点または多倍長浮動小数点精度の数値評価:

 
(%i8) beta_incomplete(0.25,0.50,0.9);
(%o8)                          4.594959440269333
(%i9)  fpprec:25$
(%i10) beta_incomplete(0.25,0.50,0.9b0);
(%o10)                    4.594959440269324086971203b0

abs(z)>1の時 beta_incompleteは複素数を返します:

 
(%i11) beta_incomplete(0.25,0.50,1.7);
(%o11)              5.244115108584249 - 1.45518047787844 %i

より一般的な複素引数に関する結果:

 
(%i14) beta_incomplete(0.25+%i,1.0+%i,1.7+%i);
(%o14)             2.726960675662536 - .3831175704269199 %i
(%i15) beta_incomplete(1/2,5/4*%i,2.8+%i);
(%o15)             13.04649635168716 %i - 5.802067956270001
(%i16)

beta_expandtrueの時の展開:

 
(%i23) beta_incomplete(a+1,b,z),beta_expand:true;
                                                       b  a
                   a beta_incomplete(a, b, z)   (1 - z)  z
(%o23)             -------------------------- - -----------
                             b + a                 b + a

(%i24) beta_incomplete(a-1,b,z),beta_expand:true;
                                                           b  a - 1
           beta_incomplete(a, b, z) (- b - a + 1)   (1 - z)  z
(%o24)     -------------------------------------- - ---------------
                           1 - a                         1 - a

beta_incompleteの微分と積分:

 
(%i34) diff(beta_incomplete(a, b, z), z);
                              b - 1  a - 1
(%o34)                 (1 - z)      z
(%i35) integrate(beta_incomplete(a, b, z), z);
              b  a
       (1 - z)  z
(%o35) ----------- + beta_incomplete(a, b, z) z
          b + a
                                       a beta_incomplete(a, b, z)
                                     - --------------------------
                                                 b + a
(%i36) factor(diff(%, z));
(%o36)              beta_incomplete(a, b, z)

関数: beta_incomplete_regularized (a, b, z)
 
beta_incomplete_regularized(a, b, z) =
                                      beta_incomplete(a, b, z)
                                      ------------------------
                                             beta(a, b)

として定義された正則不完全ベータ函数 (A&S 6.6.2)。

beta_incomplete同様、この定義は完全ではありません。 beta_incomplete_regularizedの完全な定義については functions.wolfram.comを参照してください。

beta_incomplete_regularizedabが正の整数の時 整理されます。

z=0かつ realpart(a)>0の時、 beta_incomplete_regularizedは具体的な値0を持ちます。 z=1かつ realpart(b)>0の時、 beta_incomplete_regularizedは1に整理されます。

Maximaは実数と複素数の引数について 浮動小数点と多倍長浮動小数点精度で beta_incomplete_regularizedを評価します。

beta_expandtrueの時、 Maximaは、 nは整数として引数 a+nまたは a-nに関して beta_incomplete_regularizedを展開します。

Maximaは、変数a, b, zに関する beta_incomplete_regularizedの導函数と変数 zに関する積分を知っています。

例:

abが正の整数の時の整理:

 
(%i1) beta_incomplete_regularized(2,b,z);
                                       b
(%o1)                       1 - (1 - z)  (b z + 1)

(%i2) beta_incomplete_regularized(a,2,z);
                                               a
(%o2)                         (a (1 - z) + 1) z

(%i3) beta_incomplete_regularized(3,2,z);
                                               3
(%o3)                         (3 (1 - z) + 1) z

特定の値z=0, z=1について、Maximaは整理します:

 
(%i4) assume(a>0,b>0)$
(%i5) beta_incomplete_regularized(a,b,0);
(%o5)                                 0
(%i6) beta_incomplete_regularized(a,b,1);
(%o6)                                 1

実数と複素数引数に関する浮動小数点または多倍長浮動小数点精度の数値評価:

 
(%i7) beta_incomplete_regularized(0.12,0.43,0.9);
(%o7)                         .9114011367359802
(%i8) fpprec:32$
(%i9) beta_incomplete_regularized(0.12,0.43,0.9b0);
(%o9)               9.1140113673598075519946998779975b-1
(%i10) beta_incomplete_regularized(1+%i,3/3,1.5*%i);
(%o10)             .2865367499935403 %i - 0.122995963334684
(%i11) fpprec:20$
(%i12) beta_incomplete_regularized(1+%i,3/3,1.5b0*%i);
(%o12)      2.8653674999354036142b-1 %i - 1.2299596333468400163b-1

beta_expandtrueの時の展開:

 
(%i13) beta_incomplete_regularized(a+1,b,z);
                                                     b  a
                                              (1 - z)  z
(%o13) beta_incomplete_regularized(a, b, z) - ------------
                                              a beta(a, b)
(%i14) beta_incomplete_regularized(a-1,b,z);
(%o14) beta_incomplete_regularized(a, b, z)
                                                     b  a - 1
                                              (1 - z)  z
                                         - ----------------------
                                           beta(a, b) (b + a - 1)

zに関する微分と積分:

 
(%i15) diff(beta_incomplete_regularized(a,b,z),z);
                              b - 1  a - 1
                       (1 - z)      z
(%o15)                 -------------------
                           beta(a, b)
(%i16) integrate(beta_incomplete_regularized(a,b,z),z);
(%o16) beta_incomplete_regularized(a, b, z) z
                                                           b  a
                                                    (1 - z)  z
          a (beta_incomplete_regularized(a, b, z) - ------------)
                                                    a beta(a, b)
        - -------------------------------------------------------
                                   b + a

関数: beta_incomplete_generalized (a, b, z1, z2)

一般化不完全ベータ函数の基本的な定義は以下の通りです。

 
             z2
           /
           [          b - 1  a - 1
           I   (1 - t)      t      dt
           ]
           /
            z1

Maximaは、 abが正の整数の時、 beta_incomplete_regularizedを整理します。

realpart(a)>0かつ z1=0または z2=0の時、 Maximaは beta_incomplete_generalizedbeta_incompleteに整理します。 realpart(b)>0かつ z1=1または z2=1の時、 Maximaは betabeta_incompleteを含む式に整理します。

Maximaは、実数値と複素数値に関して浮動小数点と多倍長浮動小数点精度で beta_incomplete_regularizedを評価します。

beta_expandtrueの時、 nを正の整数とすると、 Maximaは、a+na-nに関して beta_incomplete_generalizedを整理します。

Maximaは、 変数 a, b, z1, z2に関する beta_incomplete_generalizedの微分を知っており、 変数 z1z2に関する積分を知っています。

例:

Maximaは、abが正の整数の時、 beta_incomplete_generalizedを整理します:

 
(%i1) beta_incomplete_generalized(2,b,z1,z2);
                   b                      b
           (1 - z1)  (b z1 + 1) - (1 - z2)  (b z2 + 1)
(%o1)      -------------------------------------------
                            b (b + 1)
(%i2) beta_incomplete_generalized(a,2,z1,z2);
                              a                      a
           (a (1 - z2) + 1) z2  - (a (1 - z1) + 1) z1
(%o2)      -------------------------------------------
                            a (a + 1)
(%i3) beta_incomplete_generalized(3,2,z1,z2);
              2      2                       2      2
      (1 - z1)  (3 z1  + 2 z1 + 1) - (1 - z2)  (3 z2  + 2 z2 + 1)
(%o3) -----------------------------------------------------------
                                  12

特定の値 z1=0, z2=0, z1=1または z2=1に関する整理:

 
(%i4) assume(a > 0, b > 0)$
(%i5) beta_incomplete_generalized(a,b,z1,0);
(%o5)                    - beta_incomplete(a, b, z1)

(%i6) beta_incomplete_generalized(a,b,0,z2);
(%o6)                    - beta_incomplete(a, b, z2)

(%i7) beta_incomplete_generalized(a,b,z1,1);
(%o7)              beta(a, b) - beta_incomplete(a, b, z1)

(%i8) beta_incomplete_generalized(a,b,1,z2);
(%o8)              beta_incomplete(a, b, z2) - beta(a, b)

浮動小数点もしくは多倍長浮動小数点精度での実数値引数に関する数値評価:

 
(%i9) beta_incomplete_generalized(1/2,3/2,0.25,0.31);
(%o9)                        .09638178086368676

(%i10) fpprec:32$
(%i10) beta_incomplete_generalized(1/2,3/2,0.25,0.31b0);
(%o10)               9.6381780863686935309170054689964b-2

浮動小数点もしくは多倍長浮動小数点精度での複素数値引数に関する数値評価:

 
(%i11) beta_incomplete_generalized(1/2+%i,3/2+%i,0.25,0.31);
(%o11)           - .09625463003205376 %i - .003323847735353769
(%i12) fpprec:20$
(%i13) beta_incomplete_generalized(1/2+%i,3/2+%i,0.25,0.31b0);
(%o13)     - 9.6254630032054178691b-2 %i - 3.3238477353543591914b-3

beta_expandtrueの時、 nを正の整数として a+na-nに関する整理:

 
(%i14) beta_expand:true$

(%i15) beta_incomplete_generalized(a+1,b,z1,z2);

               b   a           b   a
       (1 - z1)  z1  - (1 - z2)  z2
(%o15) -----------------------------
                   b + a
                      a beta_incomplete_generalized(a, b, z1, z2)
                    + -------------------------------------------
                                         b + a
(%i16) beta_incomplete_generalized(a-1,b,z1,z2);

       beta_incomplete_generalized(a, b, z1, z2) (- b - a + 1)
(%o16) -------------------------------------------------------
                                1 - a
                                    b   a - 1           b   a - 1
                            (1 - z2)  z2      - (1 - z1)  z1
                          - -------------------------------------
                                            1 - a

変数 z1に関する微分と z1z2に関する積分:

 
(%i17) diff(beta_incomplete_generalized(a,b,z1,z2),z1);
                               b - 1   a - 1
(%o17)               - (1 - z1)      z1
(%i18) integrate(beta_incomplete_generalized(a,b,z1,z2),z1);
(%o18) beta_incomplete_generalized(a, b, z1, z2) z1
                                  + beta_incomplete(a + 1, b, z1)
(%i19) integrate(beta_incomplete_generalized(a,b,z1,z2),z2);
(%o19) beta_incomplete_generalized(a, b, z1, z2) z2
                                  - beta_incomplete(a + 1, b, z2)

オプション変数: beta_expand

デフォルト値: false

beta_expandtrueの時、 a+na-nのような引数に対して beta(a,b)と関連した関数は展開されます。 ここで nは整数です。

オプション変数: beta_args_sum_to_integer

デフォルト値: false

beta_args_sum_to_integertrueの時、 引数 abの和が整数の時、 Maximaは beta(a,b)を整理します。

関数: psi [n](x)

log (gamma (x))の次数 n+1の導函数。 例えば、 psi[0](x)は1階微分、 psi[1](x)は2階微分など。

Maximaは一般に psiの数値を計算する方法を知りませんが、 有理数の引数に関してはいくつかの厳密な値を計算することができます。 いくつの変数は psiが可能なら厳密な値を返す有理数の引数の範囲を制御します。 maxpsiposint, maxpsinegint, maxpsifracnum, maxpsifracdenomを参照してください。 つまり、 xmaxpsinegintmaxpsiposintの間になければいけません。 もし xの小数部分の絶対値が有理数でかつ分子が maxpsifracnumより小さく、 分母が maxpsifracdenomより小さいなら、 psiは厳密な値を返します。

bffacパッケージの中の関数 bfpsiは数値を計算できます。

オプション変数: maxpsiposint

デフォルト値: 20

maxpsiposintpsi[n](x)が厳密な値を計算しようとする最も大きな正の値です。

オプション変数: maxpsinegint

デフォルト値: -10

maxpsinegintpsi[n](x)が厳密な値を計算しようとする最も大きな負の値です。 従って、もしxmaxnegintよりも小さいなら、 たとえ可能でも psi[n](x)は整理された答えを返しません。

オプション変数: maxpsifracnum

デフォルト値: 6

xを1より小さい形式p/qの有理数とします。 もし pmaxpsifracnumより大きいなら psi[n](x)は整理された値を返そうとしません。

オプション変数: maxpsifracdenom

デフォルト値: 6

xを1より小さい形式p/qの有理数とします。 もし qmaxpsifracdenomより大きいなら psi[n](x)は整理された値を返そうとしません。

関数: makefact (expr)

exprの中の二項、ガンマ、ベータ函数のインスタンスを階乗に変換します。

makegammaも参照してください。

関数: numfactor (expr)

exprを掛ける数値因子を返します。 式 exprは単一項でなければいけません。

contentは輪の中のすべての項の最大公約数を返します。

 
(%i1) gamma (7/2);
                          15 sqrt(%pi)
(%o1)                     ------------
                               8
(%i2) numfactor (%);
                               15
(%o2)                          --
                               8

Categories:  Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.5 Exponential Integrals

指数積分と関連した函数は Abramowitz and Stegun, Handbook of Mathematical Functions, 5章の中で定義されています。

関数: expintegral_e1 (z)

以下のように定義される指数積分E1(z) (A&S 5.1.1)

関数: expintegral_ei (z)

指数積分Ei(z) (A&S 5.1.2)

関数: expintegral_li (z)

指数積分Li(z) (A&S 5.1.3)

関数: expintegral_e (n,z)

以下のように定義される指数積分 En(z) (A&S 5.1.4)

関数: expintegral_si (z)

以下のように定義される指数積分 Si(z) (A&S 5.2.1)

関数: expintegral_ci (z)

以下のように定義される指数積分 Ci(z) (A&S 5.2.2)

関数: expintegral_shi (z)

以下のように定義される指数積分 Shi(z) (A&S 5.2.3)

関数: expintegral_chi (z)

以下のように定義される指数積分 Chi(z) (A&S 5.2.4)

オプション変数: expintrep

デフォルト値: false

可能なら指数積分 expintegral_e(m, z), expintegral_e1, expintegral_ei の1つの表現を、等価形式にに変えます。

expintrepの取りうる値は false, gamma_incomplete, expintegral_e1, expintegral_ei, expintegral_li, expintegral_trig, expintegral_hypです。

falseは表現を変えないことを意味します。 他の値は指定された関数を使って表現を変えることを示します。 ここで、expintegral_trigexpintegral_siexpintegral_ciを意味し、 expintegral_hypexpintegral_shiexpintegral_chiを意味します。

Categories:  Exponential Integrals

オプション変数: expintexpand

デフォルト値: false

半整数値の指数積分E[n](z)をErfcもしくはErfの項で展開し、 整数値のそれをEiの項で展開します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.6 Error Function

誤差函数と、関連した函数は Abramowitz and Stegun, Handbook of Mathematical Functions, 7章で定義されています。

関数: erf (z)

誤差函数erf(z) (A&S 7.1.1)

グラグ erfflagも参照してください。

関数: erfc (z)

相補誤差函数erfc(z) (A&S 7.1.2)

erfc(z) = 1-erf(z)

関数: erfi (z)

虚数誤差函数

erfi(z) = -%i*erf(%i*z)

関数: erf_generalized (z1,z2)

一般化誤差函数Erf(z1,z2)

関数: fresnel_c (z)

フレネル積分C(z) = integrate(cos((%pi/2)*t^2),t,0,z) (A&S 7.3.1)

フラグ trigsigntrueの時、 整理 fresnel_c(-x) = -fresnel_c(x) が適用されます。

フラグ %iargstrueの時、 整理 fresnel_c(%i*x) = %i*fresnel_c(x) が適用されます。

フラグ erf_representationhypergeometric_representationを参照してください。

関数: fresnel_s (z)

フレネル積分S(z) = integrate(sin((%pi/2)*t^2),t,0,z). (A&S 7.3.2)

フラグ trigsigntrueの時、 整理fresnel_s(-x) = -fresnel_s(x) が適用されます。

フラグ %iargstrueの時、 整理 fresnel_s(%i*x) = -%i*fresnel_s(x) が適用されます。

フラグ erf_representationhypergeometric_representationを参照してください。

オプション変数: erf_representation

デフォルト値: false

trueの時、 erfc, erfi, erf_generalized, fresnel_s, fresnel_c は、erfに変換されます。

オプション変数: hypergeometric_representation

デフォルト値: false

fresnel_sとfresnel_cに関して超幾何表現への変換を可能にします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.7 Struve Functions

シュトルーベ函数は Abramowitz and Stegun, Handbook of Mathematical Functions, 12章で定義されています。

関数: struve_h (v, z)

次数v, 独立変数zのシュトルーベ函数H (A&S 12.1.1)

Categories:  Special functions

関数: struve_l (v, z)

次数v、独立変数zの変形シュトルーベ函数L (A&S 12.2.1)

Categories:  Special functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.8 Hypergeometric Functions

超幾何函数は Abramowitz and Stegun, Handbook of Mathematical Functions, 13章15章で定義されています。

Maximaはこれらの函数について非常に限られた知識を持っています。 それらは関数 hgfredからもたらされることがあります。

関数: %m [k,u] (z)

Whittaker M函数 M[k,u](z) = exp(-z/2)*z^(1/2+u)*M(1/2+u-k,1+2*u,z). (A&S 13.1.32)

関数: %w [k,u] (z)

Whittaker W函数 (A&S 13.1.33)

関数: %f [p,q] ([a],[b],z)

pFq(a1,a2,..ap;b1,b2,..bq;z)超幾何函数。 ここで aは長さ pのリストで、 bは長さ qのリストです。

関数: hypergeometric ([a1, ..., ap],[b1, ... ,bq], x)

超幾何函数。 Maximaの%f超幾何函数と違って, 関数 hypergeometricは整理関数です; hypergeometricは複素倍精度と多倍長浮動小数点評価もサポートします。 p = 2かつ q = 1のガウスの超幾何函数に関しては、 単位円の外側の浮動小数点評価はサポートされていますが、 一般にはサポートされていません。

オプション変数expand_hypergeometricが true(デフォルトはfalse)で、 独立変数 a1から apの1つが負の整数の時(多項式の場合)、 hypergeometricは展開された多項式を返します。

例:

 
(%i1)  hypergeometric([],[],x);
(%o1) %e^x

expand_hypergeometricが trueの時、多項式の場合は自動的に展開されます:

 
(%i2) hypergeometric([-3],[7],x);
(%o2) hypergeometric([-3],[7],x)

(%i3) hypergeometric([-3],[7],x), expand_hypergeometric : true;
(%o3) -x^3/504+3*x^2/56-3*x/7+1

倍精度と多倍長浮動小数点評価の両方がサポートされています:

 
(%i4) hypergeometric([5.1],[7.1 + %i],0.42);
(%o4)       1.346250786375334 - 0.0559061414208204 %i
(%i5) hypergeometric([5,6],[8], 5.7 - %i);
(%o5)     .00737582400977495 - 0.001049813688578674 %i
(%i6) hypergeometric([5,6],[8], 5.7b0 - %i), fpprec : 30;
(%o6) 7.37582400977494674506442010824b-3
                          - 1.04981368857867315858055393376b-3 %i


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.9 Parabolic Cylinder Functions

放物円筒函数はAbramowitz and Stegun, Handbook of Mathematical Functions, 19章で定義されています。

Maximaはこれらの函数の非常に限られた知識を持っています。 それらは関数 hgfredからもたらされることがあります。

関数: parabolic_cylinder_d (v, z)

放物円筒函数parabolic_cylinder_d(v,z). (A&S 19.3.1)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10 Functions and Variables for Special Functions

関数: specint (exp(- s*t) * expr, t)

exprの変数 tに関するラプラス変換を計算します。 以下の特殊函数は specintで扱われます: 不完全ベータ函数、誤差函数 (誤差函数erfiは除きます。 erfiは例えば erfに変換することは簡単です。)、 指数積分、(ベッセル函数の積を含む)ベッセル函数、ハンケル函数、エルミートおよびラーゲル多項式。

更に、 specintは超幾何函数 %f[p,q]([],[],z)、 第一種Whittaker函数 %m[u,k](z), 第二種Whittaker函数 %w[u,k](z)を 扱うことができます。

結果は特殊函数の項になるかもしれませんし、未整理の超幾何函数を含むかもしれません。

laplaceがラプラス変換を見つけることに失敗した時、 specintがコールされます。 laplaceはラプラス変換に関するもっと一般的な規則を知っているので、 specintではなく laplaceを使うのが望ましいです。

demo(hypgeo)specintによって計算されたラプラス変換のいくつかの例を表示します。

例:

 
(%i1) assume (p > 0, a > 0)$
(%i2) specint (t^(1/2) * exp(-a*t/4) * exp(-p*t), t);
                           sqrt(%pi)
(%o2)                     ------------
                                 a 3/2
                          2 (p + -)
                                 4
(%i3) specint (t^(1/2) * bessel_j(1, 2 * a^(1/2) * t^(1/2))
              * exp(-p*t), t);
                                   - a/p
                         sqrt(a) %e
(%o3)                    ---------------
                                2
                               p

指数積分の例:

 
(%i4) assume(s>0,a>0,s-a>0)$
(%i5) ratsimp(specint(%e^(a*t)
                      *(log(a)+expintegral_e1(a*t))*%e^(-s*t),t));
                             log(s)
(%o5)                        ------
                             s - a
(%i6) logarc:true$

(%i7) gamma_expand:true$

(%i8) radcan(specint((cos(t)*expintegral_si(t)
                     -sin(t)*expintegral_ci(t))*%e^(-s*t),t));
                             log(s)
(%o8)                        ------
                              2
                             s  + 1
(%i9) ratsimp(specint((2*t*log(a)+2/a*sin(a*t)
                      -2*t*expintegral_ci(a*t))*%e^(-s*t),t));
                               2    2
                          log(s  + a )
(%o9)                     ------------
                                2
                               s

gamma_incompleteの展開を使った時と、 expintegral_e1への表現の変形を使った時の結果:

 
(%i10) assume(s>0)$
(%i11) specint(1/sqrt(%pi*t)*unit_step(t-k)*%e^(-s*t),t);
                                            1
                            gamma_incomplete(-, k s)
                                            2
(%o11)                      ------------------------
                               sqrt(%pi) sqrt(s)

(%i12) gamma_expand:true$
(%i13) specint(1/sqrt(%pi*t)*unit_step(t-k)*%e^(-s*t),t);
                              erfc(sqrt(k) sqrt(s))
(%o13)                        ---------------------
                                     sqrt(s)

(%i14) expintrep:expintegral_e1$
(%i15) ratsimp(specint(1/(t+a)^2*%e^(-s*t),t));
                              a s
                        a s %e    expintegral_e1(a s) - 1
(%o15)                - ---------------------------------
                                        a

Categories:  Laplace transform

関数: hypergeometric_simp (e)

hypergeometric_simpは、 式 eの中の任意の超幾何函数の引数に hgfredを適用して超幾何函数を整理します。

hypergeometricのインスタンスだけが影響を受けます; 式 eの中の %f, %w, %mのいずれも影響を受けません。 任意の未整理の超幾何函数は (hgfredがするように %fに変えることなく) 変更されずに返されます。

load(hypergeometric);はこの関数をロードします。

hgfredも参照しくてください。

例:

 
(%i1) load ("hypergeometric") $
(%i2) foo : [hypergeometric([1,1], [2], z), hypergeometric([1/2], [1], z)];
(%o2) [hypergeometric([1, 1], [2], z),
                                                     1
                                     hypergeometric([-], [1], z)]
                                                     2
(%i3) hypergeometric_simp (foo);
                 log(1 - z)              z    z/2
(%o3)         [- ----------, bessel_i(0, -) %e   ]
                     z                   2
(%i4) bar : hypergeometric([n], [m], z + 1);
(%o4)            hypergeometric([n], [m], z + 1)
(%i5) hypergeometric_simp (bar);
(%o5)            hypergeometric([n], [m], z + 1)

関数: hgfred (a, b, t)

一般化超幾何函数を他のより簡単な形式に整理します。 aは分子パラメータのリストで、 bは分母パラメータのリストです。

もし hgfredが超幾何函数を整理できなければ、 形式 %f[p,q]([a], [b], x)の式を返します。 ここで paの中の要素の数で、 qbの中の要素の数です。 これは通常の pFq一般化超幾何函数です。

 
(%i1) assume(not(equal(z,0)));
(%o1)                          [notequal(z, 0)]
(%i2) hgfred([v+1/2],[2*v+1],2*%i*z);

                     v/2                               %i z
                    4    bessel_j(v, z) gamma(v + 1) %e
(%o2)               ---------------------------------------
                                       v
                                      z
(%i3) hgfred([1,1],[2],z);

                                   log(1 - z)
(%o3)                            - ----------
                                       z
(%i4) hgfred([a,a+1/2],[3/2],z^2);

                               1 - 2 a          1 - 2 a
                        (z + 1)        - (1 - z)
(%o4)                   -------------------------------
                                 2 (1 - 2 a) z

以下の例が示すように、 orthopolyもロードすることは有益なことがあります。 Lは一般化ラーゲル多項式であることに注意してください。

 
(%i5) load(orthopoly)$
(%i6) hgfred([-2],[a],z);

                                    (a - 1)
                                 2 L       (z)
                                    2
(%o6)                            -------------
                                   a (a + 1)
(%i7) ev(%);

                                  2
                                 z        2 z
(%o7)                         --------- - --- + 1
                              a (a + 1)    a

関数: lambert_w (z)

LambertのW函数W(z)の主枝、 z = W(z) * exp(W(z))の解。 (DLMF 4.13)

関数: generalized_lambert_w (k, z)

LambertのW函数W(z)の k番目の枝、 z = W(z) * exp(W(z))の解。 (DLMF 4.13)

DLMFでWp(z)と表記される主枝は lambert_w(z) = generalized_lambert_w(0,z)ですl

DLMFでWm(z)と表記される実値を持つ他の枝は generalized_lambert_w(-1,z)です。

関数: nzeta (z)

プラズマ分散函数 nzeta(z) = %i*sqrt(%pi)*exp(-z^2)*(1-erf(-%i*z))

関数: nzetar (z)

realpart(nzeta(z))を返します。

関数: nzetai (z)

imagpart(nzeta(z))を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16. Elliptic Functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.1 Introduction to Elliptic Functions and Integrals

Maximaは Jacobiの楕円関数と不完全楕円積分のサポートを含みます。 これは、数値評価はもちろんこれらの関数のシンボル操作を含みます。 これらの関数の定義とプロパティの多くは Abramowitz and Stegun, 16-17章にあります。 可能な限り、そこで与えられた定義と関係を使います。

特に、すべての楕円関数と積分は 法 kや率角 \alphaの代わりにパラメータ mを使います。 これは、 楕円関数のために率角を使うAbramowitz and Stegunと違うところです。 以下の関係は真です: m = k^2 and k = \sin(\alpha)

楕円関数と積分は、主としてシンボル計算をサポートするように意図されています。 それ故に関数と積分の導関数のほとんどが知られています。 しかしながら、もし浮動小数点値を与えたなら浮動小数点の結果を返します。

楕円関数と積分の他の性質のほとんどのサポートはまだ書かれていません。

楕円関数のいくつかの例:

 
(%i1) jacobi_sn (u, m);
(%o1)                    jacobi_sn(u, m)
(%i2) jacobi_sn (u, 1);
(%o2)                        tanh(u)
(%i3) jacobi_sn (u, 0);
(%o3)                        sin(u)
(%i4) diff (jacobi_sn (u, m), u);
(%o4)            jacobi_cn(u, m) jacobi_dn(u, m)
(%i5) diff (jacobi_sn (u, m), m);
(%o5) jacobi_cn(u, m) jacobi_dn(u, m)

      elliptic_e(asin(jacobi_sn(u, m)), m)
 (u - ------------------------------------)/(2 m)
                     1 - m

            2
   jacobi_cn (u, m) jacobi_sn(u, m)
 + --------------------------------
              2 (1 - m)

楕円積分のいくつかの例:

 
(%i1) elliptic_f (phi, m);
(%o1)                  elliptic_f(phi, m)
(%i2) elliptic_f (phi, 0);
(%o2)                          phi
(%i3) elliptic_f (phi, 1);
                               phi   %pi
(%o3)                  log(tan(--- + ---))
                                2     4
(%i4) elliptic_e (phi, 1);
(%o4)                       sin(phi)
(%i5) elliptic_e (phi, 0);
(%o5)                          phi
(%i6) elliptic_kc (1/2);
                                     1
(%o6)                    elliptic_kc(-)
                                     2
(%i7) makegamma (%);
                                 2 1
                            gamma (-)
                                   4
(%o7)                      -----------
                           4 sqrt(%pi)
(%i8) diff (elliptic_f (phi, m), phi);
                                1
(%o8)                 ---------------------
                                    2
                      sqrt(1 - m sin (phi))
(%i9) diff (elliptic_f (phi, m), m);
       elliptic_e(phi, m) - (1 - m) elliptic_f(phi, m)
(%o9) (-----------------------------------------------
                              m

                                 cos(phi) sin(phi)
                             - ---------------------)/(2 (1 - m))
                                             2
                               sqrt(1 - m sin (phi))

楕円関数と積分のサポートは、Raymond Toyによって書かれました。 Maximaの配布を管理するGeneral Public License (GPL)の条件のもと置かれています。

Categories:  Elliptic functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2 Functions and Variables for Elliptic Functions

関数: jacobi_sn (u, m)

Jacobiの楕円関数 sn(u,m)

Categories:  Elliptic functions

関数: jacobi_cn (u, m)

Jacobiの楕円関数 cn(u,m).

Categories:  Elliptic functions

関数: jacobi_dn (u, m)

Jacobiの楕円関数 dn(u,m).

Categories:  Elliptic functions

関数: jacobi_ns (u, m)

Jacobiの楕円関数 ns(u,m) = 1/sn(u,m).

Categories:  Elliptic functions

関数: jacobi_sc (u, m)

Jacobiの楕円関数 sc(u,m) = sn(u,m)/cn(u,m).

Categories:  Elliptic functions

関数: jacobi_sd (u, m)

Jacobiの楕円関数 sd(u,m) = sn(u,m)/dn(u,m).

Categories:  Elliptic functions

関数: jacobi_nc (u, m)

Jacobiの楕円関数 nc(u,m) = 1/cn(u,m).

Categories:  Elliptic functions

関数: jacobi_cs (u, m)

Jacobiの楕円関数 cs(u,m) = cn(u,m)/sn(u,m).

Categories:  Elliptic functions

関数: jacobi_cd (u, m)

Jacobiの楕円関数 cd(u,m) = cn(u,m)/dn(u,m).

Categories:  Elliptic functions

関数: jacobi_nd (u, m)

Jacobiの楕円関数 nd(u,m) = 1/dn(u,m).

Categories:  Elliptic functions

関数: jacobi_ds (u, m)

Jacobiの楕円関数 ds(u,m) = dn(u,m)/sn(u,m).

Categories:  Elliptic functions

関数: jacobi_dc (u, m)

Jacobiの楕円関数 dc(u,m) = dn(u,m)/cn(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_sn (u, m)

Jacobiの楕円関数の逆関数 sn(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_cn (u, m)

Jacobiの楕円関数の逆関数 cn(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_dn (u, m)

Jacobiの楕円関数の逆関数 dn(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_ns (u, m)

Jacobiの楕円関数の逆関数 ns(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_sc (u, m)

Jacobiの楕円関数の逆関数 sc(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_sd (u, m)

Jacobiの楕円関数の逆関数 sd(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_nc (u, m)

Jacobiの楕円関数の逆関数 nc(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_cs (u, m)

Jacobiの楕円関数の逆関数 cs(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_cd (u, m)

Jacobiの楕円関数の逆関数 cd(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_nd (u, m)

Jacobiの楕円関数の逆関数 nd(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_ds (u, m)

Jacobiの楕円関数の逆関数 ds(u,m).

Categories:  Elliptic functions

関数: inverse_jacobi_dc (u, m)

Jacobiの楕円関数の逆関数 dc(u,m).

Categories:  Elliptic functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.3 Functions and Variables for Elliptic Integrals

関数: elliptic_f (phi, m)

以下のように定義された第一種不完全楕円積分

integrate(1/sqrt(1 - m*sin(x)^2), x, 0, phi)

elliptic_eelliptic_kcも参照してください。

Categories:  Elliptic integrals

関数: elliptic_e (phi, m)

以下のように定義された第二種不完全楕円積分

elliptic_e(phi, m) = integrate(sqrt(1 - m*sin(x)^2), x, 0, phi)

elliptic_felliptic_ecも参照してください。

Categories:  Elliptic integrals

関数: elliptic_eu (u, m)

以下のように定義された第二種不完全楕円積分

integrate(dn(v,m)^2,v,0,u) = integrate(sqrt(1-m*t^2)/sqrt(1-t^2), t, 0, tau)

ここで tau = sn(u,m).

これは

elliptic_eu(u, m) = elliptic_e(asin(sn(u,m)),m) によって elliptic_eと関連付けられます。

elliptic_eも参照してください。

関数: elliptic_pi (n, phi, m)

以下のように定義された第三種不完全楕円積分

integrate(1/(1-n*sin(x)^2)/sqrt(1 - m*sin(x)^2), x, 0, phi)

Categories:  Elliptic integrals

関数: elliptic_kc (m)

以下のように定義された第一種完全楕円積分

integrate(1/sqrt(1 - m*sin(x)^2), x, 0, %pi/2)

mのある値に関して 積分の値は Gamma関数で表されることが知られています。 それらを評価するには makegammaを使ってください。

Categories:  Elliptic integrals

関数: elliptic_ec (m)

以下のように定義された第二種完全楕円積分

integrate(sqrt(1 - m*sin(x)^2), x, 0, %pi/2)

mのある値に関して 積分の値は Gamma関数で表されることが知られています。 それらを評価するには makegammaを使ってください。

Categories:  Elliptic integrals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17. Limits


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.1 Functions and Variables for Limits

オプション変数: lhospitallim

デフォルト値: 4

lhospitallimlimitの中で使われるロピタルの規則の回数の最大数です。 これは limit (cot(x)/csc(x), x, 0)のような場合の無限ループを防ぎます。

Categories:  Limits

関数: limit  
    limit (expr, x, val, dir)  
    limit (expr, x, val)  
    limit (expr)

実変数 xが値 valに方向 dirに近づく時の exprの極限を計算します。 dirは、上からの極限に関して値 plusを 下からの極限に関して minusを持つことがあり、 また (両側極限が計算されることを暗示して)省略されることもあります。

limitは以下の特殊シンボルを使います: inf (正の無限大)と minf (負の無限大) 出力時には und (未定義), ind (不定しかし有界), infinity (複素無限大)も使うことがあります。

式の絶対値の極限が正の無限大ですけれども式自体の極限は正の無限大でも負の無限大でもない時、 infinity(複素数の無限大)が返されます。 これは limit(log(x), x, minf)のように複素偏角の極限が定数である場合、 limit((-2)^x, x, inf)のように複素偏角が振動する場合、 limit(1/x, x, 0)limit(log(x), x, 0)のように複素偏角が左右の極限のいずれかで異なる場合を を含みます。

lhospitallimは、 limitの中で使われるロピタルの規則の回数の最大数です。 これは limit (cot(x)/csc(x), x, 0)のような場合の無限ループを防ぎます。

tlimswitchtrueの場合、 必要な時 limitコマンドがテイラー級数展開を使うことを許します。

limsubstlimitが未知の形式上の代入を試みることを防ぎます。 これは limit (f(n)/f(n+1), n, inf)が1となるようなバグを避けるためです。 limsubsttrueに設定するとそんな代入を許します。

例えば limit (inf-1)のように、 定数式を整理するために引数1つの limitがしばしばコールされます。

example (limit)はいくつかの例を表示します。

方法に関して Wang, P., "Evaluation of Definite Integrals by Symbolic Manipulation", Ph.D. thesis, MAC TR-92, October 1971を参照してください。

Categories:  Limits

オプション変数: limsubst

デフォルト値: false - limitが未知の形式上の代入を試みることを防ぎます。

これは limit (f(n)/f(n+1), n, inf)が1となるようなバグを避けるためです。 limsubsttrueに設定するとそんな代入を許します。

Categories:  Limits

関数: tlimit  
    tlimit (expr, x, val, dir)  
    tlimit (expr, x, val)  
    tlimit (expr)

xに関する valでの exprのテイラー級数展開の極限を方向 dirから取ります。

Categories:  Limits

オプション変数: tlimswitch

デフォルト値: true

tlimswitchtrueの時、 もし入力式が直接計算できないなら limitコマンドはテイラー級数展開を使います。 これは limit(x/(x-1)-1/log(x),x,1,plus)のような極限の評価を許します。 tlimswitchfalseでかつ入力式の極限が直接計算できない時は、 limitは未評価の極限式を返します。

Categories:  Limits


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18. Differentiation


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.1 Functions and Variables for Differentiation

関数: antid (expr, x, u(x))

2要素リストを返します。 そのリストから exprxに関する不定積分(antiderivative)が構成できます。 式 exprは未知の関数 uとその導関数を含むかもしれません。

2要素リスト Lantidの戻り値だとします。 L[1] + 'integrate (L[2], x)exprxに関する不定積分です。

antidが完全に成功した時、戻り値の二番目の要素は0です。 そうでないなら、二番目の要素は0ではなく、一番目の要素は0でないか0かです。 もし antidが全く進展できないなら、 一番目の要素が0で、二番目は0ではないです。

load ("antid")はこの関数をロードします。 antidパッケージは関数 nonzeroandfreeoflinearも定義します。

antidは以下のように antidiffと関係します。 2要素リスト Lantidの戻り値とします。 antidiffの戻り値は L[1] + 'integrate (L[2], x)に等しいです。 ここで xは積分変数です。

例:

 
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
                            z(x)  d
(%o2)                y(x) %e     (-- (z(x)))
                                  dx
(%i3) a1: antid (expr, x, z(x));
                       z(x)      z(x)  d
(%o3)          [y(x) %e    , - %e     (-- (y(x)))]
                                       dx
(%i4) a2: antidiff (expr, x, z(x));
                            /
                     z(x)   [   z(x)  d
(%o4)         y(x) %e     - I %e     (-- (y(x))) dx
                            ]         dx
                            /
(%i5) a2 - (first (a1) + 'integrate (second (a1), x));
(%o5)                           0
(%i6) antid (expr, x, y(x));
                             z(x)  d
(%o6)             [0, y(x) %e     (-- (z(x)))]
                                   dx
(%i7) antidiff (expr, x, y(x));
                  /
                  [        z(x)  d
(%o7)             I y(x) %e     (-- (z(x))) dx
                  ]              dx
                  /

Categories:  Integral calculus

関数: antidiff (expr, x, u(x))

exprxに関する不定積分(antiderivative)を返します。 式 exprは未知の関数 uとその導関数を含むかもしれません。

antidiffが完全に成功した時、 結果の式は積分記号を含みません(すなわち integrate名詞を含みません)。 そうでないなら、 antidiffは部分的にまたは完全に積分記号内にある式を返します。 もし antidiffが全く進展できないなら、戻り値はそっくり積分記号内にあります。

load ("antid")はこの関数をロードします。 antidパッケージは関数 nonzeroandfreeoflinearも定義します。

antidiffは以下のように antidと関係します。 2要素リスト Lantidの戻り値とします。 antidiffの戻り値は L[1] + 'integrate (L[2], x)に等しいです。 ここで xは積分変数です。

例:

 
(%i1) load ("antid")$
(%i2) expr: exp (z(x)) * diff (z(x), x) * y(x);
                            z(x)  d
(%o2)                y(x) %e     (-- (z(x)))
                                  dx
(%i3) a1: antid (expr, x, z(x));
                       z(x)      z(x)  d
(%o3)          [y(x) %e    , - %e     (-- (y(x)))]
                                       dx
(%i4) a2: antidiff (expr, x, z(x));
                            /
                     z(x)   [   z(x)  d
(%o4)         y(x) %e     - I %e     (-- (y(x))) dx
                            ]         dx
                            /
(%i5) a2 - (first (a1) + 'integrate (second (a1), x));
(%o5)                           0
(%i6) antid (expr, x, y(x));
                             z(x)  d
(%o6)             [0, y(x) %e     (-- (z(x)))]
                                   dx
(%i7) antidiff (expr, x, y(x));
                  /
                  [        z(x)  d
(%o7)             I y(x) %e     (-- (z(x))) dx
                  ]              dx
                  /

Categories:  Integral calculus

関数: at  
    at (expr, [eqn_1, …, eqn_n])  
    at (expr, eqn)

等式のリスト [eqn_1, ..., eqn_n] もしくは1つの等式 eqnの中で指定されたように値を仮定された変数を使って 式 exprを評価します。

もし値が指定される変数のいずれかに部分式が依存するけれど 指定のatvalueがなく他の方法で評価できないなら、 atの名詞形を返し、2次元形式で表示します。

atは多重代入を並列に実行します。

atvalueも参照してください。 代入を実行する他の関数に関しては substevも参照してください。

例:

 
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
                                2
(%o1)                          a
(%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
(%o2)                        @2 + 1
(%i3) printprops (all, atvalue);
                                !
                  d             !
                 --- (f(@1, @2))!       = @2 + 1
                 d@1            !
                                !@1 = 0

                                     2
                          f(0, 1) = a

(%o3)                         done
(%i4) diff (4*f(x, y)^2 - u(x, y)^2, x);
                  d                          d
(%o4)  8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
                  dx                         dx
(%i5) at (%, [x = 0, y = 1]);
                                            !
                 2              d           !
(%o5)        16 a  - 2 u(0, 1) (-- (u(x, 1))!     )
                                dx          !
                                            !x = 0

yは微分変数として使われないので、 最後の行で yxと異なる扱いだということに注意してください。

subst, at, evの違いは以下の例で見ることができます:

 
(%i1) e1:I(t)=C*diff(U(t),t)$
(%i2) e2:U(t)=L*diff(I(t),t)$
(%i3) at(e1,e2);
                               !
                      d        !
(%o3)       I(t) = C (-- (U(t))!                    )
                      dt       !          d
                               !U(t) = L (-- (I(t)))
                                          dt
(%i4) subst(e2,e1);
                            d      d
(%o4)             I(t) = C (-- (L (-- (I(t)))))
                            dt     dt
(%i5) ev(e1,e2,diff);
                                  2
                                 d
(%o5)                I(t) = C L (--- (I(t)))
                                   2
                                 dt

Property: atomgrad

atomgradは式のアトムの勾配プロパティです。 このプロパティは gradefで割り当てられます。

Categories:  Differential calculus

関数: atvalue  
    atvalue (expr, [x_1 = a_1, …, x_m = a_m], c)  
    atvalue (expr, x_1 = a_1, c)

cを点 x = aexprに割り当てます。 典型的にはこのメカニズムが境界値を確立します。

exprは関数引数が明示的に現れる関数評価 f(x_1, ..., x_m)か導関数 diff (f(x_1, ..., x_m), x_1, n_1, ..., x_n, n_m) です。 n_ix_iに関する微分の階数です。

等式のリスト [x_1 = a_1, ..., x_m = a_m] はatvalueを確立する点を与えます。 もし1変数 x_1なら、 リストとしてくくることなしに等式1つを与えます。

printprops ([f_1, f_2, ...], atvalue)は 関数 f_1, f_2, ...のatvalueを atvalueコールで指定されたように表示します。

printprops (f, atvalue)は 1関数 fのatvalueを表示します。 printprops (all, atvalue)は atvaluesが定義された関数すべての atvalueを表示します。

atvaluesが表示される時、 シンボル @1, @2, … は 変数 x_1, x_2, …を表します。

atvalueは引数を評価します。 atvaluec, atvalueそのものを返します。

atも参照してください。

例:

 
(%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
                                2
(%o1)                          a
(%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
(%o2)                        @2 + 1
(%i3) printprops (all, atvalue);
                                !
                  d             !
                 --- (f(@1, @2))!       = @2 + 1
                 d@1            !
                                !@1 = 0

                                     2
                          f(0, 1) = a

(%o3)                         done
(%i4) diff (4*f(x,y)^2 - u(x,y)^2, x);
                  d                          d
(%o4)  8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
                  dx                         dx
(%i5) at (%, [x = 0, y = 1]);
                                            !
                 2              d           !
(%o5)        16 a  - 2 u(0, 1) (-- (u(x, 1))!     )
                                dx          !
                                            !x = 0

関数: cartan

微分形式の外積代数はエリーカルタンによって開発された微分幾何の基本ツールであり、 偏微分方程式論で有用な応用があります。 cartanパッケージは 演算子 ~ (ウェッジ積)と | (形式とベクトルの縮約)と合わせて 関数 ext_difflie_diffを実装します。 例と一緒にこれらのコマンドの簡潔な記述を見るには demo (tensor)を実行してください。

cartanは F.B. EstabrookとH.D. Wahlquistによって実装されました。

Categories:  Differential geometry

関数: del (x)

del (x)は変数 xの微分を表します。

もし独立変数を指定しないなら、 diffは delを含む式を返します。 この場合、戻り値は「全微分」と呼ばれるものです。

例:

 
(%i1) diff (log (x));
                             del(x)
(%o1)                        ------
                               x
(%i2) diff (exp (x*y));
                     x y              x y
(%o2)            x %e    del(y) + y %e    del(x)
(%i3) diff (x*y*z);
(%o3)         x y del(z) + x z del(y) + y z del(x)

Categories:  Differential calculus

関数: delta (t)

Diracのデルタ関数

今のところ、laplaceだけが deltaを知っています。

例:

 
(%i1) laplace (delta (t - a) * sin(b*t), t, s);
Is  a  positive, negative, or zero?

p;
                                   - a s
(%o1)                   sin(a b) %e

システム変数: dependencies
関数: dependencies (f_1, …, f_n)

変数 dependenciesは、 dependsや関数 dependencies, gradefが割り当てた関数依存を持つアトムのリストです。 dependenciesリストは累積的です: dependsdependencies, gradefをコールする毎に上乗せの項目を追加します。 dependenciesのデフォルト値は []です。

関数 dependencies(f_1, …, f_n)f_1, …, f_ndependenciesリストに追加します。 ここで、 f_1, …, f_nは形式 f(x_1, …, x_m)の式であり、 x_1, …, x_mは任意の数の引数です。

dependencies(f(x_1, …, x_m))depends(f, [x_1, …, x_m])と等価です。

dependsgradefを参照してください。

 
(%i1) dependencies;
(%o1)                          []
(%i2) depends (foo, [bar, baz]);
(%o2)                    [foo(bar, baz)]
(%i3) depends ([g, h], [a, b, c]);
(%o3)               [g(a, b, c), h(a, b, c)]
(%i4) dependencies;
(%o4)        [foo(bar, baz), g(a, b, c), h(a, b, c)]
(%i5) dependencies (quux (x, y), mumble (u));
(%o5)                [quux(x, y), mumble(u)]
(%i6) dependencies;
(%o6) [foo(bar, baz), g(a, b, c), h(a, b, c), quux(x, y),
                                                       mumble(u)]
(%i7) remove (quux, dependency);
(%o7)                         done
(%i8) dependencies;
(%o8)  [foo(bar, baz), g(a, b, c), h(a, b, c), mumble(u)]

関数: depends (f_1, x_1, ..., f_n, x_n)

導関数を計算するために変数の間の関数依存を宣言します。 宣言された依存関係がないと diff (f, x)の結果はゼロです。 もし depends (f, x)を宣言したら、 diff (f, x)の結果はシンボリックな導関数(すなわち diff名詞)です。

それぞれの引数 f_1, x_1などは、 変数や配列の名前、または名前のリストをとり得ます。 f_i (多分ただ1つの要素)のすべての要素は、 x_i (多分ただ1つの要素)のすべての要素に依存するように宣言されます。 もしいくつかの f_iが配列名だったり配列名を含むなら、 配列の要素すべては x_iに依存します。

diffdependsが確立した間接的依存関係を認識し、 これらの場合に連鎖規則を適用します。

remove (f, dependency)fに関して宣言された依存関係すべてを取り除きます。

dependsは確立した依存関係のリストを返します。 依存関係はグローバル変数 dependenciesに追加されます。 dependsは引数を評価します。

diffdependsが確立する依存関係を認識する唯一の Maximaコマンドです。 他の関数( integrate, laplaceなど)は 引数が明示的に示す依存関係だけを認識します。 例えば、integrateは、 integrate (f(x), x)のように陽に表現されないなら fxへの依存性を認識しません。

depends(f, [x_1, …, x_n])dependencies(f(x_1, …, x_n))と等価です。

 
(%i1) depends ([f, g], x);
(%o1)                     [f(x), g(x)]
(%i2) depends ([r, s], [u, v, w]);
(%o2)               [r(u, v, w), s(u, v, w)]
(%i3) depends (u, t);
(%o3)                        [u(t)]
(%i4) dependencies;
(%o4)      [f(x), g(x), r(u, v, w), s(u, v, w), u(t)]
(%i5) diff (r.s, u);
                         dr           ds
(%o5)                    -- . s + r . --
                         du           du
 
(%i6) diff (r.s, t);
                      dr du           ds du
(%o6)                 -- -- . s + r . -- --
                      du dt           du dt
 
(%i7) remove (r, dependency);
(%o7)                         done
(%i8) diff (r.s, t);
                                ds du
(%o8)                       r . -- --
                                du dt

オプション変数: derivabbrev

デフォルト値: false

derivabbrevtrueの時、 シンボリックな導関数(すなわち diff名詞)が下付き添字として表示されます。 そうでないなら導関数はライプニッツ表記 dy/dxで表示されます。

関数: derivdegree (expr, y, x)

exprに現れる独立変数 xに関する従属変数 yの微分の最高階数を返します。

例:

 
(%i1) 'diff (y, x, 2) + 'diff (y, z, 3) + 'diff (y, x) * x^2;
                         3     2
                        d y   d y    2 dy
(%o1)                   --- + --- + x  --
                          3     2      dx
                        dz    dx
(%i2) derivdegree (%, y, x);
(%o2)                           2

関数: derivlist (var_1, …, var_k)

evコマンド内にて示された変数に関する微分だけを生じさせます。

Categories:  Differential calculus · Evaluation

オプション変数: derivsubst

デフォルト値: false

derivsubsttrueの時、 subst (x, 'diff (y, t), 'diff (y, t, 2)) のような非構文法的代入は 'diff (x, t)をもらします。

関数: diff  
    diff (expr, x_1, n_1, …, x_m, n_m)  
    diff (expr, x, n)  
    diff (expr, x)  
    diff (expr)

exprの中のすべての変数の中のいくつかに関する exprの導関数すなわち微分を返します。

diff (expr, x, n)xに関する exprn階微分を返します。

diff (expr, x_1, n_1, ..., x_m, n_m)x_1, ..., x_mに関する exprの偏微分を返します。 これは diff (... (diff (expr, x_m, n_m) ...), x_1, n_1)と同値です。

diff (expr, x)は変数 xに関する exprの1階微分を返します。

diff (expr)exprの全微分を返します。 すなわち、それぞれの変数に関する exprの微分に変数それぞれの微分 delを掛けたものの和を返します。 delの更なる整理は提供されません。

微分方程式を記述する時などいくつかの文脈で diffの名詞形式が要求されます。 これらの場合、 diffは微分が実行される代わりに名詞形式を出力するために ('diffとして)クォートされるかもしれません。

derivabbrevtrueの時、導関数は下付き添字として表示されます。 そうでないなら、導関数はライブニツ記法の dy/dxで表示されます。

例:

 
(%i1) diff (exp (f(x)), x, 2);
                     2
              f(x)  d               f(x)  d         2
(%o1)       %e     (--- (f(x))) + %e     (-- (f(x)))
                      2                   dx
                    dx
(%i2) derivabbrev: true$
(%i3) 'integrate (f(x, y), y, g(x), h(x));
                         h(x)
                        /
                        [
(%o3)                   I     f(x, y) dy
                        ]
                        /
                         g(x)
(%i4) diff (%, x);
       h(x)
      /
      [
(%o4) I     f(x, y)  dy + f(x, h(x)) h(x)  - f(x, g(x)) g(x)
      ]            x                     x                  x
      /
       g(x)

テンソルパッケージのために以下の変更が取り込まれています:

(1) exprの中の任意の添字付きオブジェクトの導関数は 追加された引数として添えられた変数 x_iを持ちます。 そして導関数の添字はすべてソートされます。

(2) x_iは 1から変数 dimension [デフォルト値: 4]の値までの整数を取ります。 これにより、例えば [x, y, z, t]など座標名のリストして設定されたリスト coordinatesx_i番目のメンバーに関する微分が実行されます。 もし coordinatesがアトムの変数にバインドされているなら、 x_iで下付き添字された変数が、微分の変数として使われます。 これにより、座標名や X[1], X[2], …のような下付き添字付き名前の配列が使えることになります。 もし coordinatesに値が割り当てられていないなら、変数は上の(1)のように扱われます。

Categories:  Differential calculus

特殊シンボル: diff

evコールで evflagとして diffが存在する時、 exprの中で表現されたすべての微分が実行されます。

関数: dscalar (f)

スカラーのダランベルシアンをスカラー関数 fに適用します。

load ("ctensor")はこの関数をロードします。

関数: express (expr)

名詞形の微分演算子を偏微分を使った式に展開します。 expressは演算子 grad, div, curl, laplacianを認識します。 expressは外積 ~も展開します。

ev関数コールかコマンドラインに diffを含ませることで、 expressの戻り値の中のシンボリックな導関数(すなわち diff名詞)を評価することができます。 この文脈では diffevfunとして振る舞います。

load ("vect")はこの関数をロードします。

例:

 
(%i1) load ("vect")$
(%i2) grad (x^2 + y^2 + z^2);
                              2    2    2
(%o2)                  grad (z  + y  + x )
(%i3) express (%);
       d    2    2    2   d    2    2    2   d    2    2    2
(%o3) [-- (z  + y  + x ), -- (z  + y  + x ), -- (z  + y  + x )]
       dx                 dy                 dz
(%i4) ev (%, diff);
(%o4)                    [2 x, 2 y, 2 z]
(%i5) div ([x^2, y^2, z^2]);
                              2   2   2
(%o5)                   div [x , y , z ]
(%i6) express (%);
                   d    2    d    2    d    2
(%o6)              -- (z ) + -- (y ) + -- (x )
                   dz        dy        dx
(%i7) ev (%, diff);
(%o7)                    2 z + 2 y + 2 x
(%i8) curl ([x^2, y^2, z^2]);
                               2   2   2
(%o8)                   curl [x , y , z ]
(%i9) express (%);
       d    2    d    2   d    2    d    2   d    2    d    2
(%o9) [-- (z ) - -- (y ), -- (x ) - -- (z ), -- (y ) - -- (x )]
       dy        dz       dz        dx       dx        dy
(%i10) ev (%, diff);
(%o10)                      [0, 0, 0]
(%i11) laplacian (x^2 * y^2 * z^2);
                                  2  2  2
(%o11)                laplacian (x  y  z )
(%i12) express (%);
         2                2                2
        d     2  2  2    d     2  2  2    d     2  2  2
(%o12)  --- (x  y  z ) + --- (x  y  z ) + --- (x  y  z )
          2                2                2
        dz               dy               dx
(%i13) ev (%, diff);
                      2  2      2  2      2  2
(%o13)             2 y  z  + 2 x  z  + 2 x  y
(%i14) [a, b, c] ~ [x, y, z];
(%o14)                [a, b, c] ~ [x, y, z]
(%i15) express (%);
(%o15)          [b z - c y, c x - a z, a y - b x]

Categories:  Differential calculus · Vectors · Operators

関数: gradef  
    gradef (f(x_1, …, x_n), g_1, …, g_m)  
    gradef (a, x, expr)

関数 fまたは変数 aの偏微分(すなわち、勾配の成分)を定義します。

gradef (f(x_1, ..., x_n), g_1, ..., g_m)df/dx_ig_iとして定義します。 ここで g_iは式です; g_iは関数コールでもあり得ますが関数名ではありません。 偏微分の数 mは引数の数 nよりも小さいかもしれません。 その場合、微分は x_1から x_mまでのみに関して定義されます。

gradef (a, x, expr)は変数 axに関する微分を exprと定義します。 これは (depends (a, x)を介して) axへの依存性も確立します。

最初の引数 f(x_1, ..., x_n)または aはクォートされますが、 残りの引数 g_1, ..., g_mは評価されます。 gradefは偏微分が定義される関数や変数を返します。

gradefは Maximaの組み込み関数の微分を再定義できます。 例えば、gradef (sin(x), sqrt (1 - sin(x)^2))sinの微分を再定義します。

gradefは添字付き関数の偏微分を定義できません。

printprops ([f_1, ..., f_n], gradef)は関数 f_1, ..., f_nの偏微分を gradefで定義されたように表示します。

printprops ([a_n, ..., a_n], atomgrad)は変数 a_n, ..., a_nの偏微分を gradefで定義されたように表示します。

gradefsgradefが偏微分を定義した関数のリストです。 gradefsgradefが偏微分を定義した変数は含みません。

例えば、関数は明示的は知られていませんが一階微分が知られていて、 高階の微分を得ることが望まれる時、勾配が必要とされます。

システム変数: gradefs

デフォルト値: []

gradefsgradefが偏微分を定義した関数のリストです。 gradefsgradefが偏微分を定義した変数は含みません。

関数: laplace (expr, t, s)

変数 tに関するラブラス変換 exprを計算し、パラメータ sに変換しようとします。

laplaceexprの中で derivative, integrate, sum, iltはもちろん関数 delta, exp, log, sin, cos, sinh, cosh, erfを認識します。 もし laplaceが変換を見つけられなかったら、 関数 specintをコールします。 specintはベッセル関数 bessel_j, bessel_i, …のような 特殊関数を含む式のラプラス変換を見つけることができ、 unit_step関数を扱うことができます。 specintも参照してください。

もし specintも解を見つけられないなら、 名詞 laplaceを返します。

exprは従属変数の atvalueが使われている線形定数係数微分方程式であり得ます。 要求の atvalueは 変換を計算する前でも後でも供給できます。 初期条件をゼロ点で指定しなければいけないので、 もし他に課される境界条件を持つなら 一般解にそれらを課すことができます。 それらに関して一般解を解き、それらの値を代入し返すことによって定数を消去できます。

laplaceは、形式 integrate (f(x) * g(t - x), x, 0, t)の畳み込み積分を認識します; 他の種類の畳み込みは認識されません。

関数関係は exprで明示的に表現しなければいけません; dependsで確立した暗黙の関係は認識されません。 例えば、もし fxyに依存するなら、 f (x, y)exprの中に現れなければいけません。

逆ラプラス変換 iltも参照してください。

例:

 
(%i1) laplace (exp (2*t + a) * sin(t) * t, t, s);
                            a
                          %e  (2 s - 4)
(%o1)                    ---------------
                           2           2
                         (s  - 4 s + 5)
(%i2) laplace ('diff (f (x), x), x, s);
(%o2)             s laplace(f(x), x, s) - f(0)
(%i3) diff (diff (delta (t), t), t);
                          2
                         d
(%o3)                    --- (delta(t))
                           2
                         dt
(%i4) laplace (%, t, s);
                            !
               d            !         2
(%o4)        - -- (delta(t))!      + s  - delta(0) s
               dt           !
                            !t = 0
(%i5) assume(a>0)$
(%i6) laplace(gamma_incomplete(a,t),t,s),gamma_expand:true;
                                              - a - 1
                         gamma(a)   gamma(a) s
(%o6)                    -------- - -----------------
                            s            1     a
                                        (- + 1)
                                         s
(%i7) factor(laplace(gamma_incomplete(1/2,t),t,s));
                                              s + 1
                      sqrt(%pi) (sqrt(s) sqrt(-----) - 1)
                                                s
(%o7)                 -----------------------------------
                                3/2      s + 1
                               s    sqrt(-----)
                                           s
(%i8) assume(exp(%pi*s)>1)$
(%i9) laplace(sum((-1)^n*unit_step(t-n*%pi)*sin(t),n,0,inf),t,s),
         simpsum;
                         %i                         %i
              ------------------------ - ------------------------
                              - %pi s                    - %pi s
              (s + %i) (1 - %e       )   (s - %i) (1 - %e       )
(%o9)         ---------------------------------------------------
                                       2
(%i9) factor(%);
                                      %pi s
                                    %e
(%o9)                   -------------------------------
                                             %pi s
                        (s - %i) (s + %i) (%e      - 1)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19. Integration


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.1 Introduction to Integration

Maximaは積分を扱うためのいくつかのルーチンを持っています。 integrate関数はそれらのほとんどを利用します。 指定されていない関数(ともちろんその導関数)を扱う antidパッケージもあります。 数値目的のためには quad_qag, quad_qagsなどと名付けられた QUADPACKから適応積分器一式があります。 それらは見出し QUADPACKの下で記述されています。 超幾何関数を扱うことができます。詳細は specintを参照してください。 一般的に言って、Maximaは「初等関数」(有理関数、三角関数、対数、指数関数、根号など)と 2、3の拡張(誤差関数、二重対数関数)を使った積分可能な積分だけを扱います。 g(x)h(x)といった未知の関数を使った積分は扱いません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.2 Functions and Variables for Integration

関数: changevar (expr, f(x,y), y, x)

xに関する積分を含む exprの中に現れるすべての積分に関して、 f(x,y) = 0で与えられる変数変換を生成します。 新しい変数は yです。

変数の変更はf(x) = g(y)とも書けます。

 
(%i1) assume(a > 0)$
(%i2) 'integrate (%e**sqrt(a*y), y, 0, 4);
                      4
                     /
                     [    sqrt(a) sqrt(y)
(%o2)                I  %e                dy
                     ]
                     /
                      0
(%i3) changevar (%, y-z^2/a, z, y);
                      0
                     /
                     [                abs(z)
                   2 I            z %e       dz
                     ]
                     /
                      - 2 sqrt(a)
(%o3)            - ----------------------------
                                a

上の 'integrateの例のような名詞形を含む式は nounsフラグを使って evで評価できます。 例えば、上の changevarが返す式は ev (%o3, nouns)で評価できます。

changevarは和や積のインデックスに関する変更にも使えます。 しかし、 変更が和や積の中でなされる時 この変更はシフトすなわち i = j+ ... でなければならず、高階関数ではないことをはっきり理解しなければいけません。 例えば、

 
(%i4) sum (a[i]*x^(i-2), i, 0, inf);
                         inf
                         ====
                         \         i - 2
(%o4)                     >    a  x
                         /      i
                         ====
                         i = 0
(%i5) changevar (%, i-2-n, n, i);
                        inf
                        ====
                        \               n
(%o5)                    >      a      x
                        /        n + 2
                        ====
                        n = - 2

Categories:  Integral calculus

関数: dblint (f, r, s, a, b)

二重積分ルーチン。トップレベル Maximaで書かれ、翻訳され機械語にコンパイルされました。 このパッケージをアクセスするには load ("dblint")を使ってください。 以下を計算するため xとy方向に関してシンプソンの規則方法を使います。

 
/b /s(x)
|  |
|  |    f(x,y) dy dx
|  |
/a /r(x)

関数 fは翻訳かコンパイルされた2変数関数でなければいけなく、 rsはそれぞれ、翻訳かコンパイルされた1変数関数でなければいけません。 一方で abは浮動小数点数でなければいけません。 ルーチンは xと yの区間の分割の数を決める2つのグローバル変数を持ちます: dblint_xdblint_y。 両方とも初期は10で、他の整数値に独立に変えることができます。 (x方向に計算される 2*dblint_x+1点があり、 y方向に計算される 2*dblint_y+1点があります) ルーチンはX軸を更に分割します。 Xのそれぞれの値に関して、最初、 r(x)s(x)を計算します; そして r(x)s(x)の間でY軸が更に分割され、 シンプソン規則を使ってY軸に沿っての積分が実行されます; そして、 シンプソン規則を使って Y積分である関数値を用いて X軸に沿っての積分が実行されます; この手続きは様々な理由のため数値的に不安定かもしれませんが、 かなり速いです: 非常に振動的な関数や特異点(領域内の極や分岐点)を持つ関数にこれを使うことは避けてください。 Y積分は r(x)s(x)がどこくらい離れているかに依存します。 だからもし距離 s(x) - r(x)が Xに関して急速に変化するなら、 様々な Y積分で異なるステップサイズでの切り詰めから起こる本質的なエラーがあるかもしれません。 領域の範囲を改善するために dblint_xdblint_yを増やすことができますが、 計算時間という犠牲を払うことになります。 関数値を保存しないので、関数が非常に時間がかかるものの場合、 もし何か変えたら再計算を待たなければいけません(すいません)。 関数 f, r, sdblintコールの前に翻訳かコンパイルされるかどちらかが要求されます。 これは多くの場合、インタープリタコードに対して桁違いの速度改善がなされるでしょう!

demo (dblint)は 実例問題に適用された dblintのデモンストレーションを実行します。

Categories:  Integral calculus

関数: defint (expr, x, a, b)

定積分を計算しようとします。 integrateは、 積分の範囲が指定された時、 すなわち integrateintegrate (expr, x, a, b)としてコールされた時、 defintをコールします。

このようにユーザーの観点からは integrateをコールすれば十分です。

defintはシンボリック式、計算された積分または積分の名詞形を返します。 定積分の数値近似に関しては quad_qagと関連関数を参照してください。

Categories:  Integral calculus

オプション変数: erfflag

デフォルト値: true

erfflagfalseの時、 もし始めから被積分に何もないなら (if there were none in the integrad to begin with) rischが答えの中に erf関数を導入することを抑制します。

Categories:  Integral calculus

関数: ilt (expr, s, t)

exprsとパラメータ tに関する逆ラプラス変換を計算します。 exprは分子が線形2次因子だけを持つ多項式の比でなければいけません。 solvelinsolveと合わせて 関数 laplaceiltを使うことによって ユーザーは微分方程式または畳み込み積分方程式やそれらの組を解くことができます。

 
(%i1) 'integrate (sinh(a*x)*f(t-x), x, 0, t) + b*f(t) = t**2;
              t
             /
             [                                    2
(%o1)        I  f(t - x) sinh(a x) dx + b f(t) = t
             ]
             /
              0
(%i2) laplace (%, t, s);
                               a laplace(f(t), t, s)   2
(%o2)  b laplace(f(t), t, s) + --------------------- = --
                                       2    2           3
                                      s  - a           s
(%i3) linsolve ([%], ['laplace(f(t), t, s)]);
                                        2      2
                                     2 s  - 2 a
(%o3)     [laplace(f(t), t, s) = --------------------]
                                    5         2     3
                                 b s  + (a - a  b) s
(%i4) ilt (rhs (first (%)), s, t);
Is  a b (a b - 1)  positive, negative, or zero?

pos;
               sqrt(a b (a b - 1)) t
        2 cosh(---------------------)       2
                         b               a t
(%o4) - ----------------------------- + -------
              3  2      2               a b - 1
             a  b  - 2 a  b + a

                                                       2
                                             + ------------------
                                                3  2      2
                                               a  b  - 2 a  b + a

Categories:  Laplace transform

オプション変数: intanalysis

デフォルト値: true

trueの時、定積分が積分区間内の被積分関数の極を見つけようとします。 もしあるなら、積分は主値積分として適切に評価されます。 もしintanalysisが falseなら、 このチェックは実行されず積分は極がないことを仮定して実行されます。

ldefintも参照してください。

例:

intanalysisfalseに設定されている時 Maximaは以下の積分を解くことができます:

 
(%i1) integrate(1/(sqrt(x)+1),x,0,1);
                                1
                               /
                               [       1
(%o1)                          I  ----------- dx
                               ]  sqrt(x) + 1
                               /
                                0

(%i2) integrate(1/(sqrt(x)+1),x,0,1),intanalysis:false;
(%o2)                            2 - 2 log(2)

(%i3) integrate(cos(a)/sqrt((tan(a))^2 +1),a,-%pi/2,%pi/2);
The number 1 isn't in the domain of atanh
 -- an error. To debug this try: debugmode(true);

(%i4) intanalysis:false$
(%i5) integrate(cos(a)/sqrt((tan(a))^2+1),a,-%pi/2,%pi/2);
                                      %pi
(%o5)                                 ---
                                       2

Categories:  Integral calculus

関数: integrate  
    integrate (expr, x)  
    integrate (expr, x, a, b)

xに関する exprの積分をシンボリックに計算しようとします。 integrate (expr, x)は不定積分で、 integrate (expr, x, a, b)a,bの上限下限を持つ定積分です。 上限下限は xを含んではいけません。 しかし integrateはこの制限を強制するわけではありません。 abより小さい必要はありません。 baと等しいなら integrateは0を返します。

定積分の数値近似に関しては quad_qagと関連関数を参照してください。 (複素積分)留数の計算に関しては residueを参照してください。 不定積分の代替計算方法に関しては antidを参照してください。

integrateが成功したら積分(integrateを含まない式)を返します。 そうでないなら、積分の名詞形式(クォートされた演算子 'integrate)もしくは1つ以上の名詞形式を含む式を返します。 integrateの名詞形式は積分記号で表示されます。

いくつかの環境では、例えば 'integrate (expr, x)のような シングルクオートされたintegrateで手動で名詞形式を構成することが役に立ちます。 例えば、積分はまだ計算されていないいくつかのパラメータに依存しているかもしれません。 ev (i, nouns)を使って積分の名詞をその引数に利用することができます。 ここで iは問題の名詞形式です。 (The noun may be applied to its arguments by ev (i, nouns) where i is the noun form of interest.) integrateは不定積分とは別に定積分を扱います。 それぞれの場合を扱うため ある範囲の発見法を用意しています。 定積分の特別な場合は 0や無限大に等しい積分の下限上限を含んだり、 0や%pi2 %piに等しい下限上限を持つ三角関数を含んだり、 有理関数やベータやプサイ関数の定義に関連した積分やいくつかの対数的な積分、三角関数積分を含んだりします。 有理関数の処理は留数の計算を含むかもしれません。 もし適用可能な特殊な場合が見つからないなら 不定積分を計算し下限上限でそれを評価しようとするでしょう。 これは下限上限に無限大の極限を取ることを含みます。 ldefintも参照してください。

不定積分の特殊な場合は三角関数、指数対数関数、有理関数を含みます。 integrateは初等積分の短いテーブルもまた利用しています。

もし非積分関数が形式 f(g(x)) * diff(g(x), x)を持つなら integrateは変数の交換を実行します。 integrateg(x)の導関数が非積分関数を割るような部分式 g(x)を見つけようとします。 この探索は gradef関数が定義した導関数を利用します。 changevarantidも参照ください。

もしこれまでの発見法のどれも不定積分を見つけられないなら リッシュのアルゴリズムを実行します。 フラグ rischevのコールやコマンドライン上で evflagとして設定されるかもしれません。 例えば ev (integrate (expr, x), risch)integrate (expr, x), rischというようにです。 もし rischtrueなら integrateは発見法を最初に試さずに risch関数をコールします。 rischも参照ください。

integratef(x)記法で明示的に表現された関数関係に対してだけ機能します。 integratedepends関数が規定した陰の依存性を考慮しません。

integrateは非積分関数のパラメータのある性質を知っている必要がある場合があります。 integrateassumeデータベースを最初に参照し、 注目の変数がそこにないなら integrateはユーザーに問い合わせます。 質問に依存して、適切な応答は yes;no;, pos;, zero;, neg;などです。

integrateは線形には宣言されていません。 declarelinearを参照ください。

integrateは2、3の特集な場合だけ、部分積分を企てます。

例:

Categories:  Integral calculus

システム変数: integration_constant

デフォルト値: %c

等式の不定積分が積分定数を導入し、 integration_constantintegration_constant_counterを連結することで定数名を構成します。

integration_constantには任意のシンボルに割り当てられます。

例:

 
(%i1) integrate (x^2 = 1, x);
                           3
                          x
(%o1)                     -- = x + %c1
                          3
(%i2) integration_constant : 'k;
(%o2)                           k
(%i3) integrate (x^2 = 1, x);
                            3
                           x
(%o3)                      -- = x + k2
                           3

Categories:  Integral calculus

システム変数: integration_constant_counter

デフォルト値: 0

等式の不定積分が積分定数を導入する時、 integration_constantintegration_constant_counterを連結することで定数を構成します。

integration_constant_counterは次の積分定数を構成する前に増分されます。

例:

 
(%i1) integrate (x^2 = 1, x);
                           3
                          x
(%o1)                     -- = x + %c1
                          3
(%i2) integrate (x^2 = 1, x);
                           3
                          x
(%o2)                     -- = x + %c2
                          3
(%i3) integrate (x^2 = 1, x);
                           3
                          x
(%o3)                     -- = x + %c3
                          3
(%i4) reset (integration_constant_counter);
(%o4)            [integration_constant_counter]
(%i5) integrate (x^2 = 1, x);
                           3
                          x
(%o5)                     -- = x + %c1
                          3

Categories:  Integral calculus

オプション変数: integrate_use_rootsof

デフォルト値: false

integrate_use_rootsoftrueでかつ有理関数の分子が因数分解できない時、 integrateは分子の(まだ知られていない)根上の和という形式で積分を返します。

例えば integrate_use_rootsoffalseに設定すると、 integrateは有理関数の未解決積分を名詞形で返します:

 
(%i1) integrate_use_rootsof: false$
(%i2) integrate (1/(1+x+x^5), x);
        /  2
        [ x  - 4 x + 5
        I ------------ dx                            2 x + 1
        ]  3    2                2            5 atan(-------)
        / x  - x  + 1       log(x  + x + 1)          sqrt(3)
(%o2)   ----------------- - --------------- + ---------------
                7                 14             7 sqrt(3)

さあ、フラグを trueに設定し、 積分の未解決部分を有理関数の分子の根上の和として表現しましょう:

 
(%i3) integrate_use_rootsof: true$
(%i4) integrate (1/(1+x+x^5), x);
      ====        2
      \       (%r4  - 4 %r4 + 5) log(x - %r4)
       >      -------------------------------
      /                    2
      ====            3 %r4  - 2 %r4
                        3      2
      %r4 in rootsof(%r4  - %r4  + 1, %r4)
(%o4) ----------------------------------------------------------
               7

                                                      2 x + 1
                                  2            5 atan(-------)
                             log(x  + x + 1)          sqrt(3)
                           - --------------- + ---------------
                                   14             7 sqrt(3)

代わりにユーザーは別々に分子の根を計算できます。 例えば、もし分子が3次多項式なら 1/((x - a)*(x - b)*(x - c))とか 1/((x^2 - (a+b)*x + a*b)*(x - c))というように これらの根を使って被積分関数を表現できます。 これは時々 Maximaがもっと役立つ結果を得るのを助けます。

Categories:  Integral calculus

関数: ldefint (expr, x, a, b)

exprxに関する不定積分を上限 bと下限 aで評価するために、 limitを使って exprの定積分を計算しようとします。 もし定積分を計算するのに失敗したなら、 ldefintは名詞形として極限を含む式を返します。

ldefintintegrateからコールされません。 なので、 ldefint (expr, x, a, b) を実行することは integrate (expr, x, a, b) とは違った結果をもたらすかもしれません。 ldefintは定積分を評価するためにいつも同じ方法を使いますが、 integrateは様々な発見的方法を利用し、いくつかの特殊な場合を認識することもあります。

Categories:  Integral calculus

関数: potential (givengradient)

計算にはグローバル変数potentialzeroloc[0]を利用します。 それは nonlistか形式

 
[indeterminatej=expressionj, indeterminatek=expressionk, ...]

でなければいけません。 ここで前者 (nonlist)は後者(リスト形式)の中の右辺すべてに関して nonlist式とすることと同値です。 示された右辺は積分の下限として使われます。 積分が成功するかどうかはそれらの値と順序に依存するかもしれません。 potentialzerolocは0に初期化されます。

関数: residue (expr, z, z_0)

変数 zが値 z_0を仮定する時、 式 exprの複素平面での留数を計算します。 留数は exprのローラン級数における (z - z_0)^(-1)の係数です。

 
(%i1) residue (s/(s**2+a**2), s, a*%i);
                                1
(%o1)                           -
                                2
(%i2) residue (sin(a*x)/x**4, x, 0);
                                 3
                                a
(%o2)                         - --
                                6

関数: risch (expr, x)

リッシュアルゴリズムの超越な場合を使って exprxに関して積分します。 (リッシュアルゴリズムの代数的な場合は実装されていません。) これは現在、 integrateの主要部が対応できない入れ子の指数関数や対数関数の場合を扱います。 integrateは、これらの場合が与えられたなら自動的に rischを適用します。

erfflagfalseにすると、 もしそもそも被積分関数になにもないなら、 rischが答えの中に erf関数を導入することを抑制します。

 
(%i1) risch (x^2*erf(x), x);
                                                        2
             3                      2                - x
        %pi x  erf(x) + (sqrt(%pi) x  + sqrt(%pi)) %e
(%o1)   -------------------------------------------------
                              3 %pi
(%i2) diff(%, x), ratsimp;
                             2
(%o2)                       x  erf(x)

Categories:  Integral calculus

関数: tldefint (expr, x, a, b)

tlimswitchtrueに設定されている ldefintと同値です。

Categories:  Integral calculus


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.3 Introduction to QUADPACK

QUADPACKは1次元定積分の数値計算のための関数のコレクションです。 R. Piessens (1), E. de Doncker (2), C. Ueberhuber (3), D. Kahaner (4). の合同プロジェクトから始まりました。

Maximaに含まれる QUADPACKライブラリは、 SLATEC共通数学ライブラリ バージョン 4.1(5)に現れる QUADPACKの Fortranのソースコードの(プログラムf2clによる)自動翻訳です。

SLATECライブラリは1993年7月付ですが、QUADPACK関数は何年か前に書かれました。 QUADPACKももう1つのバージョンが Netlib (6)にあります; このバージョンが SLATECバージョンとどう違うのかはっきりしません。

Maximaに含まれる QUADPACK関数は、 これらの関数が不特定の回数の関数の評価を要求し、 指定された精度まで結果を計算しようとする意味で、 すべて自動です。 Maximaの QUADPACKの Lisp翻訳はいくつかの自動でない関数も含みますが、 それらは Maximaレベルで公開されていません。

QUADPACKについての更なる情報は QUADPACK本 (7) の中に見つけることができます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.3.1 Overview

quad_qag

一般関数の有限の区間上の積分。 quad_qagは Aind(Piessens, 1973)の戦略を使った簡単な大域的適応積分器を実装しています。 呼び出し側はルール評価コンポーネントを ガウスークロンロッドの求積公式の6つのペアの中から選ぶことができます。 強く振動する非積分関数には高次のルールが適切です。

quad_qags

一般関数の有限の区間上の積分。 quad_qagsはイプシロンアルゴリズム(Wynn, 1956)による外挿 (de Doncker,1978)を使った大域的適応積分器を実装しています。

quad_qagi

一般関数の無限のもしくは半無限の区間上の積分。 区間を有限の区間上に写像し、 quad_qagsの中で使うのと同じ戦略を適用します。

quad_qawo

cos(omega x) f(x)sin(omega x) f(x) の有限の区間上の積分。 ここで、 omega は定数です。 規則評価構成要素は変形 Clenshaw-Curtis手法に基づいています。 quad_qawoquad_qagsに似て、外挿とともに適応再分割を適用します。

quad_qawf

フーリエコサイン変換かフーリエサイン変換を半無限区間上で計算します。 quad_qawoで使うのと同じアプローチを連続する区間に適用し、 イプシロンアルゴリズム(Wynn, 1956)を使った収束の促進を積分寄与の級数に適用します。

quad_qaws

w(x) f(x) の有限区間 [a, b] 上の積分。 ここで、 w は形式 (x - a)^alpha (b - x)^beta v(x) の関数で、 v(x) は、 1, log(x - a), log(b - x), log(x - a) log(b - x) のいずれかであり、 alpha > -1 かつ beta > -1 です。

大域的適応再分割戦略を適用し、 abを含む部分区間上では変形 Clenshaw-Curtis積分を使います。

quad_qawc

f(x)/(x - c)のコーシーの主値を有限の区間 (a, b)上で指定された cを用いて計算します。 戦略は大域的適応的で、 点 x = cを含む部分範囲上で変形 Clenshaw-Curtis積分を使います。

quad_qagp

基本的に quad_qagsと同様ですが、被積分関数の特異点や不連続点を 提供しなければいけません。 これは積分器がよい解を生成するのをより容易にします。

Categories:  Integral calculus · Numerical methods · Share packages · Package quadpack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.4 Functions and Variables for QUADPACK

関数: quad_qag  
    quad_qag (f(x), x, a, b, key, [epsrel, epsabs, limit])  
    quad_qag (f, x, a, b, key, [epsrel, epsabs, limit])

一般関数の有限の区間上の積分。 quad_qagは Aind(Piessens, 1973)の戦略を使った 簡単な大域的適応積分器を実装しています。 呼び出し側はルール評価コンポーネントを ガウスークロンロッドの求積公式の6つのペアの中から選ぶことができます。 強く振動する非積分関数には高次のルールが適切です。

quad_qagは積分 integrate (f(x), x, a, b) を計算します。

非積分関数は依存変数 xf(x)であり、 関数は下限 a上限 bの間で積分されます。 keyは利用する積分器で、 1から 6までのいずれかの整数でなければなりません。 keyの値はガウスークロンロッドの積分ルールの次数を選びます。 高次のルールが強く振動する非積分関数には適切です。

非積分関数は Maximaか Lisp関数か 演算子の名前であるか Maximaのラムダ式か一般的な Maximaの式として指定することができます。

数値積分は、望まれる精度を達成するまで 積分領域を部分区間に分割することによって適応的に実行されます。

キーワード引数はオプションで、どの次数においても指定できます。 それらは形式 key=valを取ります。キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。 limitは使用する部分区間の最大数。デフォルトは200。

quad_qagは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qag (x^(1/2)*log(1/x), x, 0, 1, 3, 'epsrel=5d-8);
(%o1)    [.4444444444492108, 3.1700968502883E-9, 961, 0]
(%i2) integrate (x^(1/2)*log(1/x), x, 0, 1);
                                4
(%o2)                           -
                                9

関数: quad_qags  
    quad_qags (f(x), x, a, b, [epsrel, epsabs, limit])  
    quad_qags (f, x, a, b, [epsrel, epsabs, limit])

一般関数の有限の区間上の積分。 quad_qagsはイプシロンアルゴリズム (Wynn, 1956)による外挿 (de Doncker,1978)を使った大域的適応積分器を実装しています。

quad_qagsは、積分

integrate (f(x), x, a, b) を計算します。

非積分関数は従属変数 xの関数 f(x)であり、 関数は下限 a上限 bの間で積分されます。

非積分関数は、Maximaか Lisp関数か 演算子の名前であるか Maximaのラムダ式か一般的な Maximaの式として指定することができます。

キーワード引数はオプションで、どの次数においても指定できます。 それらは形式 key=valを取ります。キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。 limitは使用する部分区間の最大数。デフォルトは200。

quad_qagsは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qags (x^(1/2)*log(1/x), x, 0, 1, 'epsrel=1d-10);
(%o1)   [.4444444444444448, 1.11022302462516E-15, 315, 0]

この積分に関しては quad_qagsquad_qagよりも精確で効率的であることに注意してください。

関数: quad_qagi  
    quad_qagi (f(x), x, a, b, [epsrel, epsabs, limit])  
    quad_qagi (f, x, a, b, [epsrel, epsabs, limit])

一般関数の無限のもしくは半無限の区間上の積分。 区間を有限の区間上に写像し、 quad_qagsの中で使うのと同じ戦略を適用します。

quad_qagiは Quadpack QAGIルーチンを使って以下の積分の1つを評価します。

integrate (f(x), x, a, inf)

integrate (f(x), x, minf, a)

integrate (f(x), x, minf, inf)

被積分関数は従属変数 xの関数 f(x)であり、無限範囲上で積分されます。

被積分関数は Maximaか Lispの関数か演算子の名前であるか、 Maximaのラムダ式か Maximaの一般式として指定することができます。

積分の境界の1つは無限でなければいけません。 もしそうでないなら quad_qagiはただ名詞形を返します。

キーワード引数は随意で、任意の順序で指定できます。 それらすべては形式 key=valを取ります。 キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。 limitは使用する部分区間の最大数。デフォルトは200。

quad_qagiは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qagi (x^2*exp(-4*x), x, 0, inf, 'epsrel=1d-8);
(%o1)        [0.03125, 2.95916102995002E-11, 105, 0]
(%i2) integrate (x^2*exp(-4*x), x, 0, inf);
                               1
(%o2)                          --
                               32

関数: quad_qawc  
    quad_qawc (f(x), x, c, a, b, [epsrel, epsabs, limit])  
    quad_qawc (f, x, c, a, b, [epsrel, epsabs, limit])

f(x)/(x - c)のコーシーの主値を有限の区間 (a, b)上で指定された cを用いて計算します。 戦略は大域的適応的で、点 x = cを含む部分範囲上で変形 Clenshaw-Curtis積分を使います。

quad_qawcは Quadpack QAWCルーチンを使って、 integrate (f(x)/(x - c), x, a, b)

のコーシーの主値を計算します。

被積分関数は従属変数 xの関数 f(x)/(x - c)で、 関数は aから bまでの区間上で積分されます。

被積分関数は Maximaか Lispの関数か演算子の名前であるか、 Maximaのラムダ式か Maximaの一般式として指定することができます。

キーワード引数は随意で、任意の順序で指定できます。 それらすべては形式 key=valを取ります。 キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。limitは使用する部分区間の最大数。デフォルトは200。

quad_qagcは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qawc (2^(-5)*((x-1)^2+4^(-5))^(-1), x, 2, 0, 5,
                 'epsrel=1d-7);
(%o1)    [- 3.130120337415925, 1.306830140249558E-8, 495, 0]
(%i2) integrate (2^(-alpha)*(((x-1)^2 + 4^(-alpha))*(x-2))^(-1),
      x, 0, 5);
Principal Value
                       alpha
        alpha       9 4                 9
       4      log(------------- + -------------)
                      alpha           alpha
                  64 4      + 4   64 4      + 4
(%o2) (-----------------------------------------
                        alpha
                     2 4      + 2

       3 alpha                       3 alpha
       -------                       -------
          2            alpha/2          2          alpha/2
    2 4        atan(4 4       )   2 4        atan(4       )   alpha
  - --------------------------- - -------------------------)/2
              alpha                        alpha
           2 4      + 2                 2 4      + 2
(%i3) ev (%, alpha=5, numer);
(%o3)                    - 3.130120337415917

関数: quad_qawf  
    quad_qawf (f(x), x, a, omega, trig, [epsabs, limit, maxp1, limlst])  
    quad_qawf (f, x, a, omega, trig, [epsabs, limit, maxp1, limlst])

フーリエコサイン変換またはフーリエサイン変換を、 Quadpack QAWF関数を使って、半無限区間上で計算します。 quad_qawoで使われるのと同じアプローチが、連続する区間に適用され、 イプシロンアルゴリズム(Wynn, 1956)を使った収束の促進が積分寄与の級数に適用されます。

quad_qawfは積分 integrate (f(x)*w(x), x, a, inf) を計算します。

重み関数 wtrigによって以下のように選択されます:

cos

w(x) = cos (omega x)

sin

w(x) = sin (omega x)

被積分関数は、 Maximaか Lispの関数か演算子の名前であるか、 Maximaのラムダ式か Maximaの一般式として指定することができます。

キーワード引数は随意で、任意の順序で指定できます。 それらすべては形式 key=valを取ります。 キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。(limit - limlst)/2は使用する部分区間の最大数。デフォルトは200。

maxp1

チェビシェフ積率の最大数。 0より大きくなければいけません。 デフォルトは100です。

limlst

サイクル数に関する上限。 3以上でなければいけません。 デフォルトは10です。

quad_qawfは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qawf (exp(-x^2), x, 0, 1, 'cos, 'epsabs=1d-9);
(%o1)   [.6901942235215714, 2.84846300257552E-11, 215, 0]
(%i2) integrate (exp(-x^2)*cos(x), x, 0, inf);
                          - 1/4
                        %e      sqrt(%pi)
(%o2)                   -----------------
                                2
(%i3) ev (%, numer);
(%o3)                   .6901942235215714

関数: quad_qawo  
    quad_qawo (f(x), x, a, b, omega, trig, [epsrel, epsabs, limit, maxp1, limlst])  
    quad_qawo (f, x, a, b, omega, trig, [epsrel, epsabs, limit, maxp1, limlst])

cos(omega x) f(x)sin(omega x) f(x) の有限の区間上の積分。 ここで、 omega は定数です。 規則評価構成要素は変形 Clenshaw-Curtis手法に基づいています。 quad_qawoquad_qagsに似て、外挿とともに適応再分割を適用します。

quad_qawoは Quadpack QAWOルーチンを使って積分を計算します:

integrate (f(x)*w(x), x, a, b)

重み関数 wtrigによって以下のように選択されます:

cos

w(x) = cos (omega x)

sin

w(x) = sin (omega x)

被積分関数は Maximaか Lispの関数か演算子の名前であるか、 Maximaのラムダ式か Maximaの一般式として指定することができます。

キーワード引数は随意で、任意の順序で指定できます。 それらすべては形式 key=valを取ります。 キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。limit/2は使用する部分区間の最大数。デフォルトは200。

maxp1

チェビシェフ積率の最大数。 0より大きくなければいけません。 デフォルトは100です。

limlst

サイクル数に関する上限。 3以上でなければいけません。 デフォルトは10です。

quad_qawoは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qawo (x^(-1/2)*exp(-2^(-2)*x), x, 1d-8, 20*2^2, 1, cos);
(%o1)     [1.376043389877692, 4.72710759424899E-11, 765, 0]
(%i2) rectform (integrate (x^(-1/2)*exp(-2^(-alpha)*x) * cos(x),
      x, 0, inf));
                   alpha/2 - 1/2            2 alpha
        sqrt(%pi) 2              sqrt(sqrt(2        + 1) + 1)
(%o2)   -----------------------------------------------------
                               2 alpha
                         sqrt(2        + 1)
(%i3) ev (%, alpha=2, numer);
(%o3)                     1.376043390090716

関数: quad_qaws  
    quad_qaws (f(x), x, a, b, alpha, beta, wfun, [epsrel, epsabs, limit])  
    quad_qaws (f, x, a, b, alpha, beta, wfun, [epsrel, epsabs, limit])

w(x) f(x)の有限の区間上の積分。 ここで w(x)はある代数的または対数関数です。 大域的適応最分割戦略が適用されます。 積分の区間の端点を含む部分区間上で変形 Clenshaw-Curtis積分を使います。

quad_qawsは Quadpack QAWSルーチンを使って積分を計算します:

integrate (f(x)*w(x), x, a, b)

重み関数 wwfunによって以下のように選択されます:

1

w(x) = (x - a)^alpha (b - x)^beta

2

w(x) = (x - a)^alpha (b - x)^beta log(x - a)

3

w(x) = (x - a)^alpha (b - x)^beta log(b - x)

4

w(x) = (x - a)^alpha (b - x)^beta log(x - a) log(b - x)

被積分関数は Maximaか Lispの関数か演算子の名前であるか、 Maximaのラムダ式か Maximaの一般式として指定することができます。

キーワード引数は随意で、任意の順序で指定できます。 それらすべては形式 key=valを取ります。 キーワード引数は:

epsrel

望まれる近似の相対誤差。デフォルトは1d-8。

epsabs

望まれる近似の絶対誤差。デフォルトは0。

limit

内部の作業配列のサイズ。 limitは使用する部分区間の最大数。デフォルトは200。

quad_qawsは4つの要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qaws (1/(x+1+2^(-4)), x, -1, 1, -0.5, -0.5, 1,
                 'epsabs=1d-9);
(%o1)     [8.750097361672832, 1.24321522715422E-10, 170, 0]
(%i2) integrate ((1-x*x)^(-1/2)/(x+1+2^(-alpha)), x, -1, 1);
       alpha
Is  4 2      - 1  positive, negative, or zero?

pos;
                          alpha         alpha
                   2 %pi 2      sqrt(2 2      + 1)
(%o2)              -------------------------------
                               alpha
                            4 2      + 2
(%i3) ev (%, alpha=4, numer);
(%o3)                     8.750097361672829

関数: quad_qagp  
    quad_qagp (f(x), x, a, b, points, [epsrel, epsabs, limit])  
    quad_qagp (f, x, a, b, points, [epsrel, epsabs, limit])

有限区間上の一般的な関数の積分。 quad_qagpは、 Epsilonアルゴリズム (Wynn, 1956)による外挿を使った大域的に適応的な区間部分分割 (de Doncker, 1978)を実装します。

quad_qagpは積分

integrate (f(x), x, a, b) を計算します。

被積分関数は従属変数 xを持つ f(x)で、 関数は端点 abの間で積分されます。

被積分関数は Maximaか Lispの関数か演算子の名前か、Maximaのラムダ式、一般の Maxima式として 指定できます。

積分器を助けるため、 ユーザーは被積分関数の特異点や不連続点を提供しなければいけません。

キーワード引数はオプションで、 どんな順序でも指定できます。 それらはすべて key=valの形を取ります。 キーワード引数は以下の通りです:

epsrel

所望の近似の相対誤差。デフォルトは 1d-8。

epsabs

所望の近似の絶対誤差。デフォルトは 0。

limit

内部の作業配列のサイズ。 limitは使われる部分区間の最大数です。 デフォルトは 200。

quad_qagpは4要素のリストを返します:

エラーコード(戻り値の4番目の要素)は以下の値を取ります:

0

問題が発生しなかった場合;

1

部分区間の数が上限を超えた場合;

2

丸め誤差が超過した場合;

3

非積分関数の振る舞いが極端に悪い場合;

4

収束に失敗した場合;

5

積分が発散しているか収束が遅い場合;

6

入力が無効な場合;

例:

 
(%i1) quad_qagp(x^3*log(abs((x^2-1)*(x^2-2))),x,0,3,[1,sqrt(2)]);
(%o1)   [52.74074838347143, 2.6247632689546663e-7, 1029, 0]
(%i2) quad_qags(x^3*log(abs((x^2-1)*(x^2-2))), x, 0, 3);
(%o2)   [52.74074847951494, 4.088443219529836e-7, 1869, 0]

被積分関数は 1sqrt(2)で特異性を持つので これらの点を quad_qagpに提供します。 quad_qagpquad_qagsより精確で効率的であることも特筆します。

関数: quad_control (parameter, [value])

quadpackのエラーハンドリングを制御します。 パラメータは以下のシンボルのどれかでなければいけません:

current_error

現在のエラー数

control

メッセージを印字するかしないか制御します。 ゼロ以下に設定すると、メッセージは抑制されます。

max_message

メッセージを印字する最大回数。

valueを与えないと parameterの現在の値を返します。 valueを与えると parameterの値に与えられた値を設定します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20. Equations


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.1 Functions and Variables for Equations

システム変数: %rnum

デフォルト値: 0

%rnumsolvealgsysが階の中で導入する %r変数のカウンタです。 次の %r変数は %rnum+1に番号付けされます。

%rnum_listも参照してください。

Categories:  Algebraic equations

システム変数: %rnum_list

デフォルト値: []

%rnum_listsolvealgsysによる解で導入された変数のリストです。 %r変数はそれらが生成された順に %rnum_listに追加されます。 これはあとで解への代入を行うのに便利です。 concat ('%r, j)とするより このリストを使うことを推奨します。

 
(%i1) solve ([x + y = 3], [x,y]);
(%o1)              [[x = 3 - %r1, y = %r1]]
(%i2) %rnum_list;
(%o2)                       [%r1]
(%i3) sol : solve ([x + 2*y + 3*z = 4], [x,y,z]);
(%o3)   [[x = - 2 %r3 - 3 %r2 + 4, y = %r3, z = %r2]]
(%i4) %rnum_list;
(%o4)                     [%r2, %r3]
(%i5) for i : 1 thru length (%rnum_list) do
        sol : subst (t[i], %rnum_list[i], sol)$
(%i6) sol;
(%o6)     [[x = - 2 t  - 3 t  + 4, y = t , z = t ]]
                     2      1           2       1

Categories:  Algebraic equations

オプション変数: algepsilon

デフォルト値: 10^8

algsysalgepsilonを使います。

Categories:  Algebraic equations

オプション変数: algexact

デフォルト値: false

algexactは以下のように algsysの振る舞いに影響を与えます:

もし algexacttrueなら、 algsysはいつも solveをコールし、 solveの失敗時には realrootsを使います。

もし algexactfalseなら、 問題が1変数でないときだけ、または方程式が二次か四次なら (only if the eliminant was not univaririate, or if it was a quadratic or biquadratic) solveがコールされます。

このように algexact: trueは厳密解だけを保証しません。 ただ、 algsysは最初に厳密解を与えるように最大限努力して、 他のすべてが失敗した時近似をもたらすことだけを保証します。

Categories:  Algebraic equations

関数: algsys  
    algsys ([expr_1, …, expr_m], [x_1, …, x_n])  
    algsys ([eqn_1, …, eqn_m], [x_1, …, x_n])

同時多項式 expr_1, …, expr_m または多項式方程式 eqn_1, …, eqn_m を変数 x_1, …, x_nについて解きます。 式 exprは等式 expr = 0と同値です。 変数より等式が多い場合も逆もあります。

algsysは解のリストを返します。 ここで、それぞれの解は方程式系を満たす変数 x_1, …, x_nの値を指定する等式のリストとして与えられます。 もし algsysが解を見つけられないなら、 空のリスト []が返されます。

シンボル %r1, %r2, …が 解の任意パラメータを表すために必要に応じて導入されます; これらの変数はリスト %rnum_listにも追加されます。

方法は以下の通りです:

  1. 最初に方程式は因数分解され、サブシステムに分割されます。
  2. それぞれのサブシステム S_iに関して等式 Eと変数 xを選択します。 変数をゼロでない最低次を持つよう選びます。 そして、 xに関する EE_jの終結式を サブシステム S_iの中の残っている等式群 E_jのそれぞれに関して計算します。

    xが消去されるので1つ変数の少ない新しいサブシステム S_i'が得られます。 ここでプロセスは(1)に戻ります。

  3. そのうち1つの等式からなるサブシステムが得られます。 もし等式が多変数なら、浮動小数点数の形式の近似は導入されず、 厳密解を見つけるために solveをコールします。

    いくつかの場合、 solveが解を見つけることができないか、 もし見つけたても、解が非常に大きな式になるかもしれません。

    等式が1変数で、線形か二次か四次の場合、 もし近似が導入されないなら、再び solveをコールします。 もし近似が導入されるか、等式が1変数でなく、線形でも二次でも、四次でもない場合、 もしスイッチ realonlytrueなら、 実数解を見つけるため関数 realrootsをコールします。 もし realonlyfalseなら、 実数解と複素数解を探す allrootsをコールします。

    もし algsysが要求よりも有効数字が少ない解を生成するなら、 ユーザーは algepsilonの値をより高い値に変更できます。

    もし algexacttrueに設定されているなら、 いつも solveをコールします。

  4. 最終的にステップ(3)で得られた解は以前のレベルに代入され、解処理は(1)に戻ります。

algsysが(通常、初期の段階での厳密解発見の失敗による) 浮動小数点近似を含む多変数方程式に出会う時、 厳密な方法をそんな方程式に適用しようとせず、かわりにメッセージを表示します: "algsys cannot solve - system too complicated."

radcanを使うと大きな式や複雑な式を生成することができます。 この場合、 pickapartrevealを使って結果の一部を分離することができるかもしれません。

radcanは時々、実際には実数値の解に虚数単位%iを導入するかもしれません。

例:

 
(%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
(%o1)              2 (1 - a1) x - 2 a2 (x - 1)
(%i2) e2: a2 - a1;
(%o2)                        a2 - a1
(%i3) e3: a1*(-y - x^2 + 1);
                                   2
(%o3)                   a1 (- y - x  + 1)
(%i4) e4: a2*(y - (x - 1)^2);
                                       2
(%o4)                   a2 (y - (x - 1) )
(%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
(%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0],

                                  [x = 1, y = 0, a1 = 1, a2 = 1]]
(%i6) e1: x^2 - y^2;
                              2    2
(%o6)                        x  - y
(%i7) e2: -1 - y + 2*y^2 - x + x^2;
                         2        2
(%o7)                 2 y  - y + x  - x - 1
(%i8) algsys ([e1, e2], [x, y]);
                 1            1
(%o8) [[x = - -------, y = -------],
              sqrt(3)      sqrt(3)

        1              1             1        1
[x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
     sqrt(3)        sqrt(3)          3        3

Categories:  Algebraic equations

関数: allroots  
    allroots (expr)  
    allroots (eqn)

1変数多項式 exprもしくは1変数多項式方程式 eqnの実数と複素数の根の数値近似を計算します。

フラグ polyfactortrueの時、 allrootsは多項式が実数なら多項式を実数上で因数分解し、 多項式が複素数なら複素数上で因数分解します。

allrootsは多重根の場合、不正確な結果をもたらすことがあります。 もし多項式が実数なら、allroots (%i*p)allroots (p)より精確な近似を生成します。 allrootsはこの場合異なるアルゴリズムを呼ぶからです。

allrootsは非多項式を却下します。 ratされた分子が多項式であることを要求し、 分母はせいぜい複素数であることを要求します。 この結果、もし polyfactortrueなら、 allrootsはいつも(因数分解された)同値の式を返します。

複素多項式のために、JenkinsとTraubのアルゴリズムが使われます (Algorithm 419, Comm. ACM, vol. 15, (1972), .97)。 実多項式のために、Jenkinsのアルゴリズム (Algorithm 493, ACM TOMS, vol. 1, (1975), p.178)が使われます。

例:

 
(%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
                            3          5
(%o1)              (2 x + 1)  = 13.5 (x  + 1)
(%i2) soln: allroots (eqn);
(%o2) [x = .8296749902129361, x = - 1.015755543828121,

x = .9659625152196369 %i - .4069597231924075,

x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
(%i3) for e in soln
        do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
                      - 3.5527136788005E-15

                     - 5.32907051820075E-15

         4.44089209850063E-15 %i - 4.88498130835069E-15

        - 4.44089209850063E-15 %i - 4.88498130835069E-15

                       3.5527136788005E-15

(%o3)                         done
(%i4) polyfactor: true$
(%i5) allroots (eqn);
(%o5) - 13.5 (x - 1.0) (x - .8296749902129361)

                           2
 (x + 1.015755543828121) (x  + .8139194463848151 x

 + 1.098699797110288)

Categories:  Polynomials · Numerical methods

関数: bfallroots  
    bfallroots (expr)  
    bfallroots (eqn)

1変数の多項式 exprまたは多項式方程式 eqnの実数根と複素数根の数値近似を計算します。

bfallrootsは多倍長浮動小数点を使って根を計算する以外のすべての点で allrootsと同一です。 詳しい情報については allrootsを参照してください。

Categories:  Polynomials · Numerical methods

オプション変数: backsubst

デフォルト値: true

backsubstfalseの時、 方程式を三角行列化した後 linsolveの後退代入を抑制します。 これは 後退代入が極端に大きな式の生成のもととなる非常に大きな問題に対して役立つかもしれません。

 
(%i1) eq1 : x + y + z = 6$
(%i2) eq2 : x - y + z = 2$
(%i3) eq3 : x + y - z = 0$
(%i4) backsubst : false$
(%i5) linsolve ([eq1, eq2, eq3], [x,y,z]);
(%o5)             [x = z - y, y = 2, z = 3]
(%i6) backsubst : true$
(%i7) linsolve ([eq1, eq2, eq3], [x,y,z]);
(%o7)               [x = 1, y = 2, z = 3]

Categories:  Algebraic equations

オプション変数: breakup

デフォルト値: true

breakuptrueの時、 solveは三次と四次の方程式の解を共通部分式を使って表現します。 共通部分式は中間式ラベル(%t1, %t2, など)に割り当てられます。 そうでないなら共通部分式は同定されません。

breakup: trueprogrammodefalseの時だけ効果を持ちます。

例:

 
(%i1) programmode: false$
(%i2) breakup: true$
(%i3) solve (x^3 + x^2 - 1);

                        sqrt(23)    25 1/3
(%t3)                  (--------- + --)
                        6 sqrt(3)   54
Solution:

                                      sqrt(3) %i   1
                                      ---------- - -
                sqrt(3) %i   1            2        2   1
(%t4)    x = (- ---------- - -) %t3 + -------------- - -
                    2        2            9 %t3        3

                                      sqrt(3) %i   1
                                    - ---------- - -
              sqrt(3) %i   1              2        2   1
(%t5)    x = (---------- - -) %t3 + ---------------- - -
                  2        2             9 %t3         3

                                   1     1
(%t6)                  x = %t3 + ----- - -
                                 9 %t3   3
(%o6)                    [%t4, %t5, %t6]
(%i6) breakup: false$
(%i7) solve (x^3 + x^2 - 1);
Solution:

             sqrt(3) %i   1
             ---------- - -
                 2        2        sqrt(23)    25 1/3
(%t7) x = --------------------- + (--------- + --)
             sqrt(23)    25 1/3    6 sqrt(3)   54
          9 (--------- + --)
             6 sqrt(3)   54

                                              sqrt(3) %i   1    1
                                           (- ---------- - -) - -
                                                  2        2    3
           sqrt(23)    25 1/3  sqrt(3) %i   1
(%t8) x = (--------- + --)    (---------- - -)
           6 sqrt(3)   54          2        2

                                            sqrt(3) %i   1
                                          - ---------- - -
                                                2        2      1
                                      + --------------------- - -
                                           sqrt(23)    25 1/3   3
                                        9 (--------- + --)
                                           6 sqrt(3)   54
            sqrt(23)    25 1/3             1             1
(%t9)  x = (--------- + --)    + --------------------- - -
            6 sqrt(3)   54          sqrt(23)    25 1/3   3
                                 9 (--------- + --)
                                    6 sqrt(3)   54
(%o9)                    [%t7, %t8, %t9]

Categories:  Algebraic equations

関数: dimension  
    dimension (eqn)  
    dimension (eqn_1, …, eqn_n)

dimenは、次元解析パッケージです。 load ("dimen")はこのパッケージをロードします。 demo ("dimen")は短いデモンストレーションを表示します。

Categories:  Share packages

オプション変数: dispflag

デフォルト値: true

もし block内で falseに設定されたら block内でコールされた解法関数が生成する出力の表示を抑制します。 blockをドル記号$で終端すると、 dispflagfalseに設定します。

関数: funcsolve (eqn, g(t))

eqnを満たす有理関数 g(t)が存在するかどうかに依存して、 [g(t) = ...][]を返します。 ここで、 eqnは(この場合) g(t)g(t+1)に関して 一次、線形多項式(first order, linear polynomial)でなければいけません。

 
(%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1) =
      (n - 1)/(n + 2);
                            (n + 3) f(n + 1)   n - 1
(%o1)        (n + 1) f(n) - ---------------- = -----
                                 n + 1         n + 2
(%i2) funcsolve (eqn, f(n));

Dependent equations eliminated:  (4 3)
                                   n
(%o2)                f(n) = ---------------
                            (n + 1) (n + 2)

警告: これはとても未完成な実装です - 多くの安全性チェックや明らかな一般化が忘れられています。

Categories:  Algebraic equations

オプション変数: globalsolve

デフォルト値: false

globalsolvetrueの場合、 2つ以上の線形方程式を解く時、 解くべき変数が linsolvesolveが見つけた解の値に割り当てられます。

globalsolvefalseの時、 2つ以上の線形方程式を解く時、 linsolvesolveが見つけた解は等式として表現され、 解くべき変数は割り当てられません。

2つ以上の線形方程式以外の何かを解く時には、 solveglobalsolveを無視します。 方程式を解く他の関数(例えば algsys)はいつも globalsolveを無視します。

例:

 
(%i1) globalsolve: true$
(%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

                                 17
(%t2)                        x : --
                                 7

                                   1
(%t3)                        y : - -
                                   7
(%o3)                     [[%t2, %t3]]
(%i3) x;
                               17
(%o3)                          --
                               7
(%i4) y;
                                 1
(%o4)                          - -
                                 7
(%i5) globalsolve: false$
(%i6) kill (x, y)$
(%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
Solution

                                 17
(%t7)                        x = --
                                 7

                                   1
(%t8)                        y = - -
                                   7
(%o8)                     [[%t7, %t8]]
(%i8) x;
(%o8)                           x
(%i9) y;
(%o9)                           y

Categories:  Linear equations

関数: ieqn (ie, unk, tech, n, guess)

inteqnは積分方程式を解くためのパッケージです。 load ("inteqn")はこのパッケージをロードします。

ieは積分方程式です; unkは未知の関数です; techは上で与えられたこれらから試される手法です; (tech = firstは次を意味します: 解を見つける最初の手法を試みる; tech = allは次を意味します: 適用可能な手法すべてを試みる); ntaylorか, neumann, firstkindseries, fredseries に関して扱う項の最大数です (微分法に関する再帰の最大深度でもあります); guessneumannfirstkindseriesに関する初期の推測です。

2番目から5番目までのパラメータのデフォルト値は、以下の通りです:

unk: p(x)。 ここで pは被積分関数の中で出会う Maximaが知らない最初の関数であり、 xsecondkind方程式の場合の積分の外側で見つかった pの最初の出現時の引数か firstkind方程式の中の積分変数を除いた唯一の残りの変数です。 もし xを探す企てが失敗したら、ユーザーは独立変数を提供するよう尋ねられるでしょう。

tech: first

n: 1

guess: none とすると、 neumannfirstkindseriesは初期推測として f(x)を使うようになります。

Categories:  Integral equations

オプション変数: ieqnprint

デフォルト値: true

ieqnprintieqnコマンドが返す結果の振る舞いを決めます。 ieqnprintfalseの時、 ieqn関数が返すリストは形式

[solution, technique used, nterms, flag]

を取ります。

ここでもし解が厳密なら flagはありません。

そうでないなら、厳密でない解か閉じていない形の解かに対応してそれぞれ、単語 approximateincompleteです。 もし級数法が使われたら、 ntermsは取った項の数を与えます。 (もしエラーが更なる項の生成を防いだなら、項の数は ieqnに与えたnよりも小さいこともあり得ます。)

Categories:  Integral equations

関数: lhs (expr)

exprの演算子が関係演算子 < <= = # equal notequal >= >の1つか 割り当て演算子 := ::= : ::の1つ、 infixで宣言されたユーザー定義の二項中置演算子のいずれかの時、 式 exprの左辺(すなわち、最初の項)を返します。

exprがアトムか、演算子が上で記載したもの以外の何かの時、 lhsexprを返します。

rhsも参照してください。

例:

 
(%i1) e: aa + bb = cc;
(%o1)                     bb + aa = cc
(%i2) lhs (e);
(%o2)                        bb + aa
(%i3) rhs (e);
(%o3)                          cc
(%i4) [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb),
       lhs (aa > bb)];
(%o4)                   [aa, aa, aa, aa]
(%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)),
       lhs (notequal (aa, bb))];
(%o5)                   [aa, aa, aa, aa]
(%i6) e1: '(foo(x) := 2*x);
(%o6)                     foo(x) := 2 x
(%i7) e2: '(bar(y) ::= 3*y);
(%o7)                    bar(y) ::= 3 y
(%i8) e3: '(x : y);
(%o8)                         x : y
(%i9) e4: '(x :: y);
(%o9)                        x :: y
(%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
(%o10)               [foo(x), bar(y), x, x]
(%i11) infix ("][");
(%o11)                         ][
(%i12) lhs (aa ][ bb);
(%o12)                         aa

Categories:  Expressions

関数: linsolve ([expr_1, …, expr_m], [x_1, …, x_n])

変数のリストに関して連立線形方程式のリストを解きます。 それぞれの式は変数に関する多項式でなければならず、等式も受け付けます。

globalsolvetrueの時、 解くべき変数それぞれは方程式の解の値にバインドされます。

backsubstfalseの時、 linsolveは方程式を三角行列化した後、後退代入を実行しません。 これは後退代入が極端に大きな式の生成の原因となる非常に大きな問題に対して 必要とされるかもしれません。

linsolve_paramstrueの時、 linsolvealgsysの下のマニュアルの中で記述された任意のパラメータを表すのに使われる %rシンボルも生成します。 そうでないなら、 linsolveは他を使って表されたいくつかの変数を使って決定中の方程式系を解きます。 (solves an under-determined system of equations with some variables expressed in terms of others.)

programmodefalseの時、 linsolveは中間式(%t)ラベルを使って解を表示し、ラベルのリストを返します。

 
(%i1) e1: x + z = y;
(%o1)                       z + x = y
(%i2) e2: 2*a*x - y = 2*a^2;
                                       2
(%o2)                   2 a x - y = 2 a
(%i3) e3: y - 2*z = 2;
(%o3)                      y - 2 z = 2
(%i4) [globalsolve: false, programmode: true];
(%o4)                     [false, true]
(%i5) linsolve ([e1, e2, e3], [x, y, z]);
(%o5)            [x = a + 1, y = 2 a, z = a - 1]
(%i6) [globalsolve: false, programmode: false];
(%o6)                    [false, false]
(%i7) linsolve ([e1, e2, e3], [x, y, z]);
Solution

(%t7)                       z = a - 1

(%t8)                        y = 2 a

(%t9)                       x = a + 1
(%o9)                    [%t7, %t8, %t9]
(%i9) ''%;
(%o9)            [z = a - 1, y = 2 a, x = a + 1]
(%i10) [globalsolve: true, programmode: false];
(%o10)                    [true, false]
(%i11) linsolve ([e1, e2, e3], [x, y, z]);
Solution

(%t11)                      z : a - 1

(%t12)                       y : 2 a

(%t13)                      x : a + 1
(%o13)                 [%t11, %t12, %t13]
(%i13) ''%;
(%o13)           [z : a - 1, y : 2 a, x : a + 1]
(%i14) [x, y, z];
(%o14)                 [a + 1, 2 a, a - 1]
(%i15) [globalsolve: true, programmode: true];
(%o15)                    [true, true]
(%i16) linsolve ([e1, e2, e3], '[x, y, z]);
(%o16)           [x : a + 1, y : 2 a, z : a - 1]
(%i17) [x, y, z];
(%o17)                 [a + 1, 2 a, a - 1]

Categories:  Linear equations

オプション変数: linsolvewarn

デフォルト値: true

linsolvewarntrueの時、 linsolveはメッセージ"Dependent equations eliminated"を表示します。

Categories:  Linear equations

オプション変数: linsolve_params

デフォルト値: true

linsolve_paramstrueの時、 linsolvealgsysの下のマニュアルに記述された任意のパラメータを表すのに使われる %rシンボルも生成します。 それでないなら、linsolveは他を使って表されたいくつかの変数を使って 決定中の方程式系を解きます。

Categories:  Linear equations

システム変数: multiplicities

デフォルト値: not_set_yet

multiplicitiessolverealrootsが返す個々の解の重複度のリストに設定されます。

Categories:  Algebraic equations · Polynomials

関数: nroots (p, low, high)

半開区間 (low, high]の中の実数一変数多項式 pの実根の数を返します。 区間の端点は minfinfかもしれません。

nrootsは、Sturm列の方法を使います。

 
(%i1) p: x^10 - 2*x^4 + 1/2$
(%i2) nroots (p, -6, 9.1);
(%o2)                           4

Categories:  Polynomials · Numerical methods

関数: nthroot (p, n)

pは整数係数多項式で、 nは正の整数です。 q^n = pのような整数上の多項式 qを返すか、 pが完全な n番目のべき (a perfect nth pwer)でないことを示すエラーメッセージを表示します。 このルーチンは factorより、また sqfrよりさえもっと速いです。

Categories:  Polynomials

オプション変数: polyfactor

デフォルト値: false

オプション変数 polyfactortrueの時、 allrootsbfallrootsは もし多項式が実数なら実数上で、もし多項式が複素数なら複素数上で多項式を因数分解します。

例は allrootsを参照してください。

Categories:  Polynomials · Numerical methods

オプション変数: programmode

デフォルト値: true

programmodetrueの時、 solve, realroots, allroots, linsolveはリストの中の要素として解を返します。 (backsubstfalse設定されている時を除きます― その場合はprogrammode: falseが仮定されます―)

programmodefalseの時、 solveなどは中間式ラベル %t1, %t2など生成し、解をそれらに割り当てます。

Categories:  Algebraic equations · Polynomials

オプション変数: realonly

デフォルト値: false

realonlytrueの時、 algsys%iを含まないそれらの解だけを返します。

Categories:  Algebraic equations

関数: realroots  
    realroots (expr, bound)  
    realroots (eqn, bound)  
    realroots (expr)  
    realroots (eqn)

変数多項式 exprか1変数多項方程式 eqnの実根の有理近似を boundの許容誤差の範囲内で計算します。 expreqnの係数はリテラル数でなければなりません。 %piのようなシンボル定数は却下されます。

realrootsはみつけた根の重複度をグローバル変数 multiplicitiesに割り当てます。

realrootsはそれぞれの根を囲むために Sturm列を構成し、 それから近似を精密化するために二分法を適用します。 根を探索する前にすべての係数を同値の有理数に変換し、 計算は正確な有理算術で実行します。 たとえ係数が浮動小数点でも、 (floatnumerフラグによって浮動小数点が強要されない限り)結果は有理数です。

boundが1よりも小さい時、全ての整数根は正確に計算されます。 boundが指定されない時、グローバル変数 rootsepsilonと等しいと仮定されます。

グローバル変数 programmodetrueの時、 realrootsは形式 [x = x_1, x = x_2, …]のリストを返します。 programmodefalseの時、 realrootsは中間式ラベル %t1, %t2, …を生成し、 結果をそれらに割り当て、ラベルのリストを返します。

例:

 
(%i1) realroots (-1 - x + x^5, 5e-6);
                               612003
(%o1)                     [x = ------]
                               524288
(%i2) ev (%[1], float);
(%o2)                 x = 1.167303085327148
(%i3) ev (-1 - x + x^5, %);
(%o3)                - 7.396496210176905E-6
 
(%i1) realroots (expand ((1 - x)^5 * (2 - x)^3 * (3 - x)), 1e-20);
(%o1)                 [x = 1, x = 2, x = 3]
(%i2) multiplicities;
(%o2)                       [5, 3, 1]

Categories:  Polynomials · Numerical methods

関数: rhs (expr)

exprの演算子が関係演算子 < <= = # equal notequal >= >の1つか、 割り当て演算子:= ::= : ::の1つ、 infixで宣言されたユーザー定義の二項中置演算子のいずれかの時 式 exprの右辺(すなわち、二番目の項)を返します。

exprがアトムか、演算子が上で記載したもの以外の何かの時、 rhsexprを返します。

lhsも参照してください。

例:

 
(%i1) e: aa + bb = cc;
(%o1)                     bb + aa = cc
(%i2) lhs (e);
(%o2)                        bb + aa
(%i3) rhs (e);
(%o3)                          cc
(%i4) [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb),
       rhs (aa > bb)];
(%o4)                   [bb, bb, bb, bb]
(%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)),
       rhs (notequal (aa, bb))];
(%o5)                   [bb, bb, bb, bb]
(%i6) e1: '(foo(x) := 2*x);
(%o6)                     foo(x) := 2 x
(%i7) e2: '(bar(y) ::= 3*y);
(%o7)                    bar(y) ::= 3 y
(%i8) e3: '(x : y);
(%o8)                         x : y
(%i9) e4: '(x :: y);
(%o9)                        x :: y
(%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
(%o10)                  [2 x, 3 y, y, y]
(%i11) infix ("][");
(%o11)                         ][
(%i12) rhs (aa ][ bb);
(%o12)                         bb

Categories:  Expressions

オプション変数: rootsconmode

デフォルト値: true

rootsconmoderootscontractコマンドの振る舞いを決定します。 詳細は rootscontractを参照してください。

関数: rootscontract (expr)

根の積を積の根に変換します。 例えば、 rootscontract (sqrt(x)*y^(3/2))sqrt(x*y^3)となります。

radexpandtrueかつ domainrealの時、 rootscontractabssqrtに変換します。 例えば rootscontract (abs(x)*sqrt(y))sqrt(x^2*y)をもたらします。

以下のように rootscontractに影響するオプション rootsconmodeがあります:

 
問題               rootsconmodeの値 rootscontractを適用した値

x^(1/2)*y^(3/2)      false          (x*y^3)^(1/2)
x^(1/2)*y^(1/4)      false          x^(1/2)*y^(1/4)
x^(1/2)*y^(1/4)      true           (x*y^(1/2))^(1/2)
x^(1/2)*y^(1/3)      true           x^(1/2)*y^(1/3)
x^(1/2)*y^(1/4)      all            (x^2*y)^(1/4)
x^(1/2)*y^(1/3)      all            (x^3*y^2)^(1/6)

rootsconmodefalseの時、 rootscontractは分母が同じ有理数指数に関してだけ短縮します。 rootsconmode: trueの例のキーは、 単に、4は2で割り切れますが4は2で割り切れないということです。 rootsconmode: allは指数の分母の最小公倍数を取るようになります。

rootscontractlogcontractと似た方法で ratsimpを使います。

例:

 
(%i1) rootsconmode: false$
(%i2) rootscontract (x^(1/2)*y^(3/2));
                                   3
(%o2)                      sqrt(x y )
(%i3) rootscontract (x^(1/2)*y^(1/4));
                                   1/4
(%o3)                     sqrt(x) y
(%i4) rootsconmode: true$
(%i5) rootscontract (x^(1/2)*y^(1/4));
(%o5)                    sqrt(x sqrt(y))
(%i6) rootscontract (x^(1/2)*y^(1/3));
                                   1/3
(%o6)                     sqrt(x) y
(%i7) rootsconmode: all$
(%i8) rootscontract (x^(1/2)*y^(1/4));
                              2   1/4
(%o8)                       (x  y)
(%i9) rootscontract (x^(1/2)*y^(1/3));
                             3  2 1/6
(%o9)                      (x  y )
(%i10) rootsconmode: false$
(%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
                    *sqrt(sqrt(1 + x) - sqrt(x)));
(%o11)                          1
(%i12) rootsconmode: true$
(%i13) rootscontract (sqrt(5+sqrt(5)) - 5^(1/4)*sqrt(1+sqrt(5)));
(%o13)                          0

Categories:  Simplification functions

オプション変数: rootsepsilon

デフォルト値: 1.0e-7

rootsepsilonrealroots関数が見つけた根に関する信頼区間を確立する許容誤差です。

Categories:  Polynomials · Numerical methods

関数: solve  
    solve (expr, x)  
    solve (expr)  
    solve ([eqn_1, …, eqn_n], [x_1, …, x_n])

代数等式 exprxについて解き、 xの解等式のリストを返します。 もし exprが等式でなければ、等式 expr = 0を仮定します。 xは関数(例えば f(x))でも他のアトムでない式でも問題ありません。 (sumやproductは除きます。) exprが変数を1つだけ含む場合 xは省略できます。 exprは有理式でもよく、三角関数や指数関数を含むこともできます。

以下の方法を使います:

Eを式、 Xを変数とします。 もし EXに関して線形なら Xについて自明に解きます。 そうでない場合、もし Eが A*X^N + Bの形なら、 結果は (-B/A)^(1/N)かける1の N乗根です。

もし EXについて線形でないなら、 Eの中の Xの指数の gcd(以下 Nとする)で指数を割り、 根にNを掛けます。 その後、結果に対して solveを再びコールします。 もし Eが因数分解されるなら、 solveを因子のそれぞれに対してコールします。 最後に solveは2次方程式、3次方程式、4次方程式の解の公式を必要に応じて使います。

Eが解くべき変数のある関数(以下 F(X))の多項式の場合, 最初に F(X)について解き(結果をCと呼びます)、 関数 Fの逆関数がわかっている場合、等式 F(X)=CXについて解きます。

もし breakupfalseなら、 solveは3次もしくは4次方程式の解を、 デフォルトの、いくつかの共通部分式から成る表現ではなく、 単一の式で表現します。

multiplicitiessolverealroots, allrootsが返す多数の独立の解のリストに設定されます。 solveに影響するスイッチについては apropos (solve)を試してください。 スイッチの目的がはっきりしない時は、 describeで個々のスイッチ名を調べましょう。

solve ([eqn_1, ..., eqn_n], [x_1, ..., x_n])linsolvealgsysをコールすることで, 同時(線形もしくは非線形)代数方程式系を解き、変数の解リストのリストを返します。 linsolveの場合、このリストは解の単一リストを含みます。 引数に2つのリストを取ります。 最初のリストは解くべき等式を示し、2番目のリストは決定すべき未知数のリストです。 もし等式の変数の総数が等式の数に等しいなら、2番目の引数リストは省略できます。

programmodefalseの時、 solveは中間式 (%t)ラベルを持つ解を表示し、ラベルのリストを返します。

globalsolvetrueでかつ、問題が2つ以上の線形方程式を解くことである場合、 それぞれの解くべき変数は方程式の解の値にバインドされます。

例:

 
(%i1) solve (asin (cos (3*x))*(f(x) - 1), x);

solve: using arc-trig functions to get a solution.
Some solutions will be lost.
                            %pi
(%o1)                  [x = ---, f(x) = 1]
                             6
(%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
                                log(125)
(%o2)                   [f(x) = --------]
                                 log(5)
(%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
                      2    2
(%o3)             [4 x  - y  = 12, x y - x = 2]

(%i4) solve (%, [x, y]);
(%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
 - .1331240357358706, y = .07678378523787788
 - 3.608003221870287 %i], [x = - .5202594388652008 %i
 - .1331240357358706, y = 3.608003221870287 %i
 + .07678378523787788], [x = - 1.733751846381093,
y = - .1535675710019696]]

(%i5) solve (1 + a*x + x^3, x);

                                       3
              sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
(%o5) [x = (- ---------- - -) (--------------- - -)
                  2        2      6 sqrt(3)      2

        sqrt(3) %i   1
       (---------- - -) a
            2        2
 - --------------------------, x =
              3
      sqrt(4 a  + 27)   1 1/3
   3 (--------------- - -)
         6 sqrt(3)      2

                          3
 sqrt(3) %i   1   sqrt(4 a  + 27)   1 1/3
(---------- - -) (--------------- - -)
     2        2      6 sqrt(3)      2

         sqrt(3) %i   1
      (- ---------- - -) a
             2        2
 - --------------------------, x =
              3
      sqrt(4 a  + 27)   1 1/3
   3 (--------------- - -)
         6 sqrt(3)      2

         3
 sqrt(4 a  + 27)   1 1/3               a
(--------------- - -)    - --------------------------]
    6 sqrt(3)      2                  3
                              sqrt(4 a  + 27)   1 1/3
                           3 (--------------- - -)
                                 6 sqrt(3)      2
(%i6) solve (x^3 - 1);
             sqrt(3) %i - 1        sqrt(3) %i + 1
(%o6)   [x = --------------, x = - --------------, x = 1]
                   2                     2
(%i7) solve (x^6 - 1);
           sqrt(3) %i + 1      sqrt(3) %i - 1
(%o7) [x = --------------, x = --------------, x = - 1,
                 2                   2

                     sqrt(3) %i + 1        sqrt(3) %i - 1
               x = - --------------, x = - --------------, x = 1]
                           2                     2
(%i8) ev (x^6 - 1, %[1]);
                                      6
                      (sqrt(3) %i + 1)
(%o8)                 ----------------- - 1
                             64
(%i9) expand (%);
(%o9)                           0
(%i10) x^2 - 1;
                              2
(%o10)                       x  - 1
(%i11) solve (%, x);
(%o11)                  [x = - 1, x = 1]
(%i12) ev (%th(2), %[1]);
(%o12)                          0

シンボル %rが解の中で任意定数を示すのに使われます。

 
(%i1) solve([x+y=1,2*x+2*y=2],[x,y]);

solve: dependent equations eliminated: (2)
(%o1)                      [[x = 1 - %r1, y = %r1]]

更に知るには algsys%rnum_listを参照してください。

Categories:  Algebraic equations

オプション変数: solvedecomposes

デフォルト値: true

solvedecomposestrueの時、 もし多項式を解くように頼まれたなら、 solvepolydecompをコールします。

Categories:  Algebraic equations

オプション変数: solveexplicit

デフォルト値: false

solveexplicittrueの時、 solveが陰解―すなわち、Fがある関数である形式F(x) = 0の解― を返すことを抑制します。

Categories:  Algebraic equations

オプション変数: solvefactors

デフォルト値: true

solvefactorsfalseの時、 solveは式を因数分解しようとしません。 false設定は因数分解が不要ないくつかの場合に望まれるかもしれません。

Categories:  Algebraic equations

オプション変数: solvenullwarn

デフォルト値: true

solvenullwarntrueの時、 もし空の等式リストか空の変数リストを引数にコールされたら solveは警告メッセージを表示します。 例えば solve ([], [])は2つの警告メッセージを表示し、 []を返します。

Categories:  Algebraic equations

オプション変数: solveradcan

デフォルト値: false

solveradcantrueの時、 solveradcanをコールします。 solveは遅くなりますが、指数と対数を含むある問題が解けるようになります。

Categories:  Algebraic equations

オプション変数: solvetrigwarn

デフォルト値: true

solvetrigwarntrueの時、 solveは、方程式を解くために逆三角関数を使い そのため解を失っていることを示す メッセージを表示するかもしれません。

Categories:  Algebraic equations


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21. Differential Equations


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.1 Introduction to Differential Equations

この節は Maximaで利用可能な、 一次と二次方程式のいくつかの特定のタイプの解析解を得るための関数を記述します。 微分方程式系の数値解を得るには 付加パッケージdynamicsを参照してください。 位相空間でのグラフィカルな表現に関しては 付加パッケージplotdfを参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.2 Functions and Variables for Differential Equations

関数: bc2 (solution, xval1, yval1, xval2, yval2)

二階微分方程式の境界値問題を解きます。 ここで: solutionode2が見つけるような方程式の一般解です; xval1は独立変数の最初の点の値を形式 x = x1で指定し、 yval1はその点の従属変数の値を形式 y = y1で与えます。 式 xval2yval2は 対応する変数の二番目の点での値を同じ形式を使って与えます。

用法の例については ode2を参照してください。

Categories:  Differential equations

関数: desolve  
    desolve (eqn, x)  
    desolve ([eqn_1, ..., eqn_n], [x_1, ..., x_n])

関数 desolveはラプラス変換を使って線形常微分方程式系を解きます。 ここで eqn群は従属変数 x_1, ..., x_nに関する微分方程式です。 x_1, ..., x_nの独立変数―例えばx―への関数依存性は 変数や導関数の中で明示されなければいけません。 例えば、以下は2つの方程式を定義する正しい方法ではありません:

 
eqn_1: 'diff(f,x,2) = sin(x) + 'diff(g,x);
eqn_2: 'diff(f,x) + x^2 - f = 2*'diff(g,x,2);

正しい方法は以下の通りです:

 
eqn_1: 'diff(f(x),x,2) = sin(x) + 'diff(g(x),x);
eqn_2: 'diff(f(x),x) + x^2 - f(x) = 2*'diff(g(x),x,2);

関数 desolveのコールは、

 
desolve([eqn_1, eqn_2], [f(x),g(x)]);

です。

もし x=0の初期条件が既知なら、 それらは atvalueを使って desolveコールの前に供給することができます。

 
(%i1) 'diff(f(x),x)='diff(g(x),x)+sin(x);
                 d           d
(%o1)            -- (f(x)) = -- (g(x)) + sin(x)
                 dx          dx
(%i2) 'diff(g(x),x,2)='diff(f(x),x)-cos(x);
                  2
                 d            d
(%o2)            --- (g(x)) = -- (f(x)) - cos(x)
                   2          dx
                 dx
(%i3) atvalue('diff(g(x),x),x=0,a);
(%o3)                           a
(%i4) atvalue(f(x),x=0,1);
(%o4)                           1
(%i5) desolve([%o1,%o2],[f(x),g(x)]);
                  x
(%o5) [f(x) = a %e  - a + 1, g(x) =

                                                x
                                   cos(x) + a %e  - a + g(0) - 1]
(%i6) [%o1,%o2],%o5,diff;
             x       x      x                x
(%o6)   [a %e  = a %e , a %e  - cos(x) = a %e  - cos(x)]

もし desolveが解を得られないなら falseを返します。

関数: ic1 (solution, xval, yval)

一階微分方程式の初期値問題を解きます。 ここで solutionode2が見つけるような方程式の一般解であり、 xvalは独立変数の初期値を形式 x = x0で与え、 yvalは従属変数の初期値を形式 y = y0で与えます。

用法の例については ode2を参照してください。

Categories:  Differential equations

関数: ic2 (solution, xval, yval, dval)

二階微分方程式の初期値を解きます。 ここで solutionode2が見つけるような方程式の一般解のであり、 xvalは独立変数の初期値を形式 x = x0で与え、 yvalは従属変数の初期値を形式 y = y0で与え、 dvalは従属変数の独立変数に関する一階導関数の初期値を形式 diff(y,x) = dy0で与えます。 (diffはクォートの必要はありません。)

用法の例については ode2を参照してください。

Categories:  Differential equations

関数: ode2 (eqn, dvar, ivar)

関数 ode2は一階または二階常微分方程式 (ODE)を解きます。 3つの引数を取ります: eqnで与えられるODE、従属変数 dvar、独立変数 ivar。 成功した時、従属変数に関する陽解または陰解を返します。 一階方程式の場合 %cが積分定数を表し、 二階方程式の場合 %k1%k2が定数を表します。 従属変数の独立変数への依存性は、 desolveの場合のように明示の必要はありませんが、 独立変数はいつも三番目の引数として与えられなければいけません。

たとえどんな理由でも もし ode2が解を得られなかったら、 おそらく、エラーメッセージを表示した後 falseを返します。 一階方程式用に実装された方法は、試される順番に、線形、分離、厳密―おそらく因子の積分を要求します―、斉次、ベルヌーイの等式、一般化斉次法、です。 解ける二階方程式のタイプは、定係数、厳密、定数係数に変換可能な非定数係数線形斉次、 オイラーまたは等次元方程式、パラメータ変動法で解ける方程式、 独立変数または従属変数を含まなくて、順に解かれる2つの一階線形方程式に換算できる方程式、 です。

ODEを解く間、いくつかの変数が純粋に参考目的で設定されます: methodは使われた解法(例えば、 linear)を示し、 intfactorは任意の使われた積分因子を示し、 odeindexはベルヌーイ法または一般化斉次法のインデックスを示し、 ypはパラメータ変動手法の特殊解を示します。

初期値問題(IVP)を解くためには、 一階と二階方程式のためには関数 ic1ic2が利用可能であり、 二階境界値問題(BVP)を解くためには bc2を使うことができます。

例:

 
(%i1) x^2*'diff(y,x) + 3*y*x = sin(x)/x;
                      2 dy           sin(x)
(%o1)                x  -- + 3 x y = ------
                        dx             x
(%i2) ode2(%,y,x);
                             %c - cos(x)
(%o2)                    y = -----------
                                  3
                                 x
(%i3) ic1(%o2,x=%pi,y=0);
                              cos(x) + 1
(%o3)                   y = - ----------
                                   3
                                  x
(%i4) 'diff(y,x,2) + y*'diff(y,x)^3 = 0;
                         2
                        d y      dy 3
(%o4)                   --- + y (--)  = 0
                          2      dx
                        dx
(%i5) ode2(%,y,x);
                      3
                     y  + 6 %k1 y
(%o5)                ------------ = x + %k2
                          6
(%i6) ratsimp(ic2(%o5,x=0,y=0,'diff(y,x)=2));
                             3
                          2 y  - 3 y
(%o6)                   - ---------- = x
                              6
(%i7) bc2(%o5,x=0,y=1,x=1,y=3);
                         3
                        y  - 10 y       3
(%o7)                   --------- = x - -
                            6           2

Categories:  Differential equations


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22. Numerical


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.1 Introduction to fast Fourier transform

fftパッケージは高速Fourier変換の(数式計算ではなく)数値計算に関する関数を含みます。

Categories:  Fourier transform · Numerical methods · Share packages · Package fft


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.2 Functions and Variables for fast Fourier transform

関数: polartorect (r, t)

形式 r %e^(%i t)の複素値を形式 a + b %iに変換します。 ここで、rは大きさで tは位相です。 rtは、同じサイズの1次元配列です。 配列のサイズは2のべき乗である必要はありません。

関数から戻ると、入力配列の元の値は実部 aと虚部 bに置き換えられます。 出力は以下のように計算されます。

 
a = r cos(t)
b = r sin(t)

polartorectrecttopolarの逆関数です。

load(fft)はこの関数をロードします。 fftも参照してください。

Categories:  Package fft · Complex variables

関数: recttopolar (a, b)

形式 a + b %iの複素値を形式 r %e^(%i t)に変換します。 ここで、aは実部で bは虚部です。 abは同じサイズの1次元配列です。 配列のサイズは2のべき乗である必要はありません。

関数から戻ると、入力配列の元の値は大きさ rと偏角 tに置き換えられます。 出力は以下のように計算されます。

 
r = sqrt(a^2 + b^2)
t = atan2(b, a)

計算された偏角は -%piから %piの範囲の中にあります。

recttopolarpolartorectの逆関数です。

load(fft)はこの関数をロードします。 fftも参照してください。

Categories:  Package fft · Complex variables

関数: inverse_fft (y)

複素逆高速Fourier変換を計算します。 yは変換されるデータを含むリストもしくは配列です。 要素の数は2のべき乗でなければいけません。 要素は、数リテラル(整数、有理数、浮動小数点、多倍長浮動小数点)、シンボル定数、 もしくは、 abが数リテラルもしくはシンボル定数である式 a + b*%iでなければいけません。

inverse_fftyと同じタイプの新しいオブジェクトを返します。 yは変更されません。 結果はいつも浮動小数点か abが浮動小数点であるところの式 a + b*%iとして計算されます。 もし多倍長浮動小数点精度が必要なら、 inverse_fftの完全互換品として代わりに関数 bf_inverse_fftを使うことができます。 これは遅くなりますが、多倍長浮動小数点をサポートします。

逆離散Fourier変換は以下のように定義されます。 xを逆変換の出力とします。 jが0から n - 1まで変わる中、

 
x[j] = sum(y[k] exp(-2 %i %pi j k / n), k, 0, n - 1)

様々な符号、正規化変換があり得るので、 変換のこの定義は他の数学ソフトウエアが使うものと違うかもしれません。

load(fft)はこの関数をロードします。

fft (正変換), recttopolar, polartorectも参照してください。

例:

実数データ。

 
(%i1) load ("fft") $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $
(%i4) L1 : inverse_fft (L);
(%o4) [0.0, 14.49 %i - .8284, 0.0, 2.485 %i + 4.828, 0.0,
                       4.828 - 2.485 %i, 0.0, - 14.49 %i - .8284]
(%i5) L2 : fft (L1);
(%o5) [1.0, 2.0 - 2.168L-19 %i, 3.0 - 7.525L-20 %i,
4.0 - 4.256L-19 %i, - 1.0, 2.168L-19 %i - 2.0,
7.525L-20 %i - 3.0, 4.256L-19 %i - 4.0]
(%i6) lmax (abs (L2 - L));
(%o6)                       3.545L-16

複素数データ。

 
(%i1) load ("fft") $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
(%i4) L1 : inverse_fft (L);
(%o4) [4.0, 2.711L-19 %i + 4.0, 2.0 %i - 2.0,
- 2.828 %i - 2.828, 0.0, 5.421L-20 %i + 4.0, - 2.0 %i - 2.0,
2.828 %i + 2.828]
(%i5) L2 : fft (L1);
(%o5) [4.066E-20 %i + 1.0, 1.0 %i + 1.0, 1.0 - 1.0 %i,
1.55L-19 %i - 1.0, - 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
1.0 %i + 1.0, 1.0 - 7.368L-20 %i]
(%i6) lmax (abs (L2 - L));
(%o6)                       6.841L-17

Categories:  Package fft

関数: fft (x)

複素高速 Fourier変換を計算します。 xは変換されるデータを含むリストもしくは配列です。 要素の数は2のべき乗でなければいけません。 要素は、数リテラル(整数、有理数、浮動小数点、多倍長浮動小数点)、シンボル定数、 もしくは abが数リテラルもしくはシンボル定数である式 a + b*%iでなければいけません。

fftxと同じタイプの新しいオブジェクトを返します。 xは変更されません。 結果はいつも浮動小数点か、 abが浮動小数点であるところの式 a + b*%iとして計算されます。 もし多倍長浮動小数点精度が必要なら、 fftの完全互換品として代わりに関数 bf_fftを使うことができます。 これは遅くなりますが、多倍長浮動小数点をサポートします。 また、もし入力が(虚数部を持たない)実数値だけで構成されているとわかっている場合、 real_fftを使うことができます。これは潜在的には速くなります。

離散Fourier変換は以下のように定義されます。 yを変換の出力とします。 kが0から n - 1まで変わる中、

 
y[k] = (1/n) sum(x[j] exp(+2 %i %pi j k / n), j, 0, n - 1)

様々な符号、正規化変換があり得るので、 変換のこの定義は他の数学ソフトウエアが使うものと違うかもしれません。

データ xが実数の時、 実係数 abは以下のように計算することができます。

 
x[j] = sum(a[k]*cos(2*%pi*j*k/n)+b[k]*sin(2*%pi*j*k/n), k, 0, n/2)

ここで、

 
a[0] = realpart (y[0])
b[0] = 0

そして kが1からn/2 - 1まで変わる中、

 
a[k] = realpart (y[k] + y[n - k])
b[k] = imagpart (y[n - k] - y[k])

そして、

 
a[n/2] = realpart (y[n/2])
b[n/2] = 0

load(fft)はこの関数をロードします。

inverse_fft (逆変換), recttopolar, polartorectも参照してください。 実数値入力のFFTに関しては real_fftを、 多倍長浮動小数点の演算に関しては bf_real_fftを参照してください。

例:

実数データ。

 
(%i1) load ("fft") $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $
(%i4) L1 : fft (L);
(%o4) [0.0, - 1.811 %i - .1036, 0.0, .6036 - .3107 %i, 0.0,
                         .3107 %i + .6036, 0.0, 1.811 %i - .1036]
(%i5) L2 : inverse_fft (L1);
(%o5) [1.0, 2.168L-19 %i + 2.0, 7.525L-20 %i + 3.0,
4.256L-19 %i + 4.0, - 1.0, - 2.168L-19 %i - 2.0,
- 7.525L-20 %i - 3.0, - 4.256L-19 %i - 4.0]
(%i6) lmax (abs (L2 - L));
(%o6)                       3.545L-16

複素数データ。

 
(%i1) load ("fft") $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $
(%i4) L1 : fft (L);
(%o4) [0.5, .3536 %i + .3536, - 0.25 %i - 0.25,
0.5 - 6.776L-21 %i, 0.0, - .3536 %i - .3536, 0.25 %i - 0.25,
0.5 - 3.388L-20 %i]
(%i5) L2 : inverse_fft (L1);
(%o5) [1.0 - 4.066E-20 %i, 1.0 %i + 1.0, 1.0 - 1.0 %i,
- 1.008L-19 %i - 1.0, 4.066E-20 %i - 1.0, 1.0 - 1.0 %i,
1.0 %i + 1.0, 1.947L-20 %i + 1.0]
(%i6) lmax (abs (L2 - L));
(%o6)                       6.83L-17

サインとコサイン係数の計算。

 
(%i1) load ("fft") $
(%i2) fpprintprec : 4 $
(%i3) L : [1, 2, 3, 4, 5, 6, 7, 8] $
(%i4) n : length (L) $
(%i5) x : make_array (any, n) $
(%i6) fillarray (x, L) $
(%i7) y : fft (x) $
(%i8) a : make_array (any, n/2 + 1) $
(%i9) b : make_array (any, n/2 + 1) $
(%i10) a[0] : realpart (y[0]) $
(%i11) b[0] : 0 $
(%i12) for k : 1 thru n/2 - 1 do
   (a[k] : realpart (y[k] + y[n - k]),
    b[k] : imagpart (y[n - k] - y[k]));
(%o12)                        done
(%i13) a[n/2] : y[n/2] $
(%i14) b[n/2] : 0 $
(%i15) listarray (a);
(%o15)          [4.5, - 1.0, - 1.0, - 1.0, - 0.5]
(%i16) listarray (b);
(%o16)           [0, - 2.414, - 1.0, - .4142, 0]
(%i17) f(j) := sum (a[k]*cos(2*%pi*j*k/n) + b[k]*sin(2*%pi*j*k/n),
                    k, 0, n/2) $
(%i18) makelist (float (f (j)), j, 0, n - 1);
(%o18)      [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]

Categories:  Package fft

関数: real_fft (x)

実数値列 xの高速 Fourier変換を計算します。 これは、先頭の N/2+1個の結果だけを返すことを除いて、 fft(x)を実行することと等価です。 ここで Nxの長さです。 Nは2のべきでなければいけません。

xが実数値だけを含むことをチェックしません。

実数列の Fourier変換の対称性は複雑さを減らします。 特に real_fftの出力の最初と最後は純粋に実数です。 より大きな数列では real_fftfftより速く計算できるかもしれません。

出力長が短いので、通常の inverse_fftを直接使えません。 逆をへいさんするには inverse_real_fftを使ってください。

関数: inverse_real_fft (y)

yのFourier逆変換を計算します。 yの長さは N/2+1でなければいけません。 ここで Nは2のべきです。 入力 x(原文まま)は real_fftの出力と一致すると期待されます。

入力が正しい形式か(最初と最後の要素が純粋に実数であること)を確認するようなチェックはしません。

Categories:  Package fft

関数: bf_inverse_fft (y)

複素高速 Fourier逆変換を計算します。 これは inverse_fftの多倍長浮動小数点版で、 入力を多倍長浮動小数点に変換して、多倍長浮動小数点の結果を返します。

関数: bf_fft (y)

複素高速 Fourier順変換を計算します。 これは fftの多倍長浮動小数点版で、 入力を多倍長浮動小数点に変換して、多倍長浮動小数点の結果を返します。

関数: bf_real_fft (x)

多倍長浮動小数点の結果を返す実数値入力の高速 Fourier順変換を計算します。 これは real_fftの多倍長浮動小数点版です。

Categories:  Package fft

関数: bf_inverse_real_fft (y)

実数値の多倍長浮動小数点の出力で高速Fourier逆変換を計算します。 これは inverse_real_fftの多倍長浮動小数点版です。

Categories:  Package fft


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.3 Functions for numerical solution of equations

関数: horner  
    horner (expr, x)  
    horner (expr)

Horner規則に従って、もし指定されないなら xを主変数として使い、 exprの再配列された表現を返します。 xexprの標準有理式形の主変数が使われる場合には省略できます。

もし exprが数値的に評価されるものなら、 hornerは時々、安定性が改善されます。 また、もし Maximaが Fortranで走らせるプログラムを生成するのに使われるなら、 役に立ちます。 stringoutも参照してください。

 
(%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155;
                           2
(%o1)             1.e-155 x  - 5.5 x + 5.2e+155
(%i2) expr2: horner (%, x), keepfloat: true;
(%o2)         1.0 ((1.e-155 x - 5.5) x + 5.2e+155)
(%i3) ev (expr, x=1e155);
Maxima encountered a Lisp error:

 arithmetic error FLOATING-POINT-OVERFLOW signalled

Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.
(%i4) ev (expr2, x=1e155);
(%o4)                 7.00000000000001e+154

Categories:  Numerical methods

関数: find_root (expr, x, a, b, [abserr, relerr])
関数: find_root (f, a, b, [abserr, relerr])
関数: bf_find_root (expr, x, a, b, [abserr, relerr])
関数: bf_find_root (f, a, b, [abserr, relerr])
オプション変数: find_root_error
オプション変数: find_root_abs
オプション変数: find_root_rel

exprもしくは関数 fの根を閉区間 [a, b]上で見つけます。 式 exprは等式でも問題ありません。 その場合、 find_rootlhs(expr) - rhs(expr)の根を探します。

Maximaが exprもしくは f[a, b]上で評価できて exprもしくは fは連続という仮定の下、 find_rootが根を見つけるか、あるいはもし複数の根があるなら根の1つを見つけることが保証されます。

find_rootは始め、2分木探索を適用します。 もし対象の関数が十分滑らかなら find_rootは代わりに線形内挿を適用します。

f_find_rootfind_rootの多倍長浮動小数点版です。 関数は多倍長浮動小数点数値を使って計算され、多倍長浮動小数点の結果が返されます。 他の点では bf_find_rootfind_rootと同一であり、以下の記述は bf_find_rootに同様に適用されます。

find_rootの精度は abserrrelerrに支配されます。 それらは fine_rootへのオプションのキーワード引数です。 これらのキーワード引数は形式 key=valを取ります。 キーワード引数は

abserr

根での関数値の望まれる絶対エラー。デフォルトは find_root_absです。

relerr

根の望まれる相対エラー。デフォルトは find_root_relです。

懸案の関数が abserr以下の何かに評価されるか、 近似値 x_0, x_1の差が relerr * max(abs(x_0), abs(x_1))以下になるなら find_rootは停止します。

find_root_absfind_root_relのデフォルト値はともに零です。

find_rootは探索区間の端で対象の関数が異なる符号を持つことを期待します。 関数の両方の終端での評価値が同じ符号を持つ時、 find_rootの振る舞いは find_root_errorに支配されます。 find_root_errortrueの時、 find_rootはエラーメッセージを出力します。 そうでないなら find_rootfind_root_errorの値を返します。 find_root_errorのデフォルト値は trueです。

もし fが探索アルゴリズムの中のどのステップでも数以外の何かに評価されるなら、 find_rootは部分的に評価された find_root式を返します。

abの順序は無視されます; 根が探索される区間は [min(a, b), max(a, b)]です。

例:

 
(%i1) f(x) := sin(x) - x/2;
                                        x
(%o1)                  f(x) := sin(x) - -
                                        2
(%i2) find_root (sin(x) - x/2, x, 0.1, %pi);
(%o2)                   1.895494267033981
(%i3) find_root (sin(x) = x/2, x, 0.1, %pi);
(%o3)                   1.895494267033981
(%i4) find_root (f(x), x, 0.1, %pi);
(%o4)                   1.895494267033981
(%i5) find_root (f, 0.1, %pi);
(%o5)                   1.895494267033981
(%i6) find_root (exp(x) = y, x, 0, 100);
                            x
(%o6)           find_root(%e  = y, x, 0.0, 100.0)
(%i7) find_root (exp(x) = y, x, 0, 100), y = 10;
(%o7)                   2.302585092994046
(%i8) log (10.0);
(%o8)                   2.302585092994046
(%i9) fpprec:32;
(%o9)                           32
(%i10) bf_find_root (exp(x) = y, x, 0, 100), y = 10;
(%o10)                  2.3025850929940456840179914546844b0
(%i11) log(10b0);
(%o11)                  2.3025850929940456840179914546844b0

関数: newton (expr, x, x_0, eps)

exprxの1変数関数と考えて、 Newton法による expr = 0の近似解を返します。 探索は x = x_0で始まり、 (xの現在値で評価された exprを使った) abs(expr) < epsが成り立つまで続きます。

終了テスト abs(expr) < epstruefalseに評価される限り、 newtonは未定義変数が exprの中に現れることを許します。

このように exprは数に評価される必要はありません。

load(newton1)はこの関数をロードします。

realroots, allroots, find_root, mnewtonも参照してください。

例:

 
(%i1) load ("newton1");
(%o1)  /maxima/share/numeric/newton1.mac
(%i2) newton (cos (u), u, 1, 1/100);
(%o2)                   1.570675277161251
(%i3) ev (cos (u), u = %);
(%o3)                 1.2104963335033529e-4
(%i4) assume (a > 0);
(%o4)                        [a > 0]
(%i5) newton (x^2 - a^2, x, a/2, a^2/100);
(%o5)                  1.00030487804878 a
(%i6) ev (x^2 - a^2, x = %);
                                           2
(%o6)                6.098490481853958e-4 a


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.4 Introduction to numerical solution of differential equations

このセクションで関数が解く常微分方程式(ODE)は以下の形でなければいけません。

 
       dy
       -- = F(x,y)
       dx

つまり一階ODEです。 n階の高階微分方程式は n個の一階微分方程式系で書かなくてはいけません。 例えば、二階ODEは以下の2つの方程式系で書かれなくてはいけません。

 
       dx               dy
       -- = G(x,y,t)    -- = F(x,y,t)
       dt               dt

関数の一番目の引数はODEの右辺の式のリストです。 それらの式が導関数を表す変数は二番目のリストに与えます。 上の例の場合、それらの変数はxyです。 上の例では tに該当する独立変数は別のオプションの中に与えます。 もし与えられた式がその独立変数に依存しないなら系は自律的と呼ばれます。

Categories:  Differential equations · Numerical methods · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.5 Functions for numerical solution of differential equations

関数: plotdf  
    plotdf (dydx, options…)  
    plotdf (dvdu, [u,v], options…)  
    plotdf ([dxdt,cdydt], options…)  
    plotdf ([dudt,cdvdt], [u,cv], options…)

関数plotdfは、 一階常微分方程式(ODE)や2つの自律 一階 ODE系の方向場(勾配場とも呼ばれる)のプロットを生成します。

たとえコンソールのMaximaセッションから走らせても、plotdfは Xmaximaを必要とします。 XmaximaのTkスクリプトがプロットを生成するためです。 Xmaximaがインストールされていないなら、plotdfは動きません。

dydx, dxdt, dydtxyに依存する式です。 dvdu, dudt, dvdtuvに依存する式です。 それら 2つの変数に加えて、 parametersオプションで与えられる数値を持つか (オプション構文法は以下に与えられます)、 slidersオプションで指定される許される値の範囲のパラメータ一式にも、 式は依存するかもしれません。

コマンド内やメニューで選択して、いくつかの他のオプションを与えることができます。 プロット上でクリックしたり、オプション trajectory_atを使って積分曲線を得ることができます。 directionオプションを使って積分の方向を制御できます。 オプションは、 forward, backward, bothのいずれかの値を取り得ます。 積分ステップの数はnstepsで与えます。 それぞれの積分ステップで時間増分は、プロットウィンドウのサイズより十分小さい置き換えを生成するように自動的に調整されます。 使われる数値法は可変時間ステップの4次の適応 Runge-Kutta法です。

プロットウィンドウメニュー:

プロットウィンドウのメニューバーは以下の7つのアイコンを持ちます:

X。プロットウィンドウを閉じるのに使えます。

レンチとドライバ。使用中のODEと様々な設定を表示する欄を持つ設定メニューを開きます。 欄 Trajectory atに座標の組を入力して enterキーを押すと、既に表示されたものに加えて新しい積分曲線を表示します。

円に続く2つの矢印。設定メニューで定義された新しい設定で方向場を再プロットし、以前にプロットされた最後の積分曲線だけを再プロットします。

矢印付きハードディスクドライブ。アイコンをクリックした時現れるボックス欄で指定したファイルにプロットのコピーをポストスクリプト形式で保存するのに使います。

プラス記号付き拡大鏡。プロットをズームします。

マイナス記号付き拡大鏡。プロットをズームアウトします。 マウスの右ボタンを押したままマウスを動かすことでプロットを置き換えることができます。

プロットアイコン。最後にプロットされた積分曲線の2つの変数の時間プロットを含む別のウィンドウを開きます。

プロットオプション:

オプションを plotdf自身に与えることもできます。 それぞれは複数の要素のリストです。 それぞれのオプションの最初の要素はオプション名で、残りはオプションに割り当てられる値です。

plotdfが認識するオプションは以下の通りです:

例:

関数: ploteq (exp, ...options...)

expの等電位曲線をプロットします。 expは二変数に依存する式です。 曲線は直交切線を定義する微分方程式を与えられた式の勾配から得られる自律系の解に積分することで得られます。 プロットは勾配系の積分曲線(オプションfieldlines)を見せることもできます。

このプログラムも、たとえコンソールのMaximaセッションから走らせても、 Xmaximaを必要とします。 XmaximaのTkスクリプトがプロットを生成するためです。 デフォルトでは、ユーザーがある点をクリックする(か設定メニューかtrajectory_atオプションで座標を与える)まで、プロット領域は空です。

plotdfがほとんどのオプションはploteqでも使うことができ、 プロットインターフェースはplotdfで記述したものと同じです。

例:

 
(%i1) V: 900/((x+1)^2+y^2)^(1/2)-900/((x-1)^2+y^2)^(1/2)$
(%i2) ploteq(V,[x,-2,2],[y,-2,2],[fieldlines,"blue"])$

ある点をクリックすると、その点(赤)と直交切線(青)を通る等電位曲線をプロットします。

関数: rk  
    rk (ODE, var, initial, domain)  
    rk ([ODE1, …, ODEm], [v1, …, vm], [init1, …, initm], domain)

4次の Runge-Kutta法を使って、 最初の形式は一階常微分方程式一つを数値的に解き、二番目の形式はそれら m個の方程式系を解きます。 varは従属変数を表します。 ODEは独立変数と従属変数にだけ依存する式でなければいけません。 そして、独立変数に関する従属変数の導関数を定義します。

独立変数は domainで指定されます。 それは 4つの要素のリストでなければいけません。 例えば:

 
[t, 0, 10, 0.1]

リストの最初の要素は独立変数を特定し、二番目と三番目の要素はその変数の初期値と最終値であり、 最後の要素はその区間内で使用されるべき増加分を設定します。

もし mこの方程式が解かれようとしているなら、 m個の従属変数 v1, v2, ..., vmが存在しなければいけません。 それらの変数の初期値は init1, init2, ..., initmとなります。 以前の場合と同様、 domainで定義されたただ 1つの独立変数が残っています。 ODE1, ..., ODEmは独立変数に関する従属変数それぞれの導関数を定義する式です。 それらの式に現れるかもしれない変数は独立変数と任意の従属変数だけです。 従属変数と厳密に同じ順序でリストの中に導関数 ODE1, ..., ODEmを与えることが重要です; 例えば、リストの三番目の要素は三番目の従属変数の導関数と解釈されます。

プログラムは 方程式を独立変数の初期値から最終値まで一定の増加分を使って積分しようとします。 もしあるステップで従属変数の1つが大きすぎる絶対値を取ったら、積分はその点で中断されます。 結果は、なされた繰り返しの回数と同じ数の要素を持つリストです。 結果リストの中のそれぞれの要素は、それ自身 m+1個の要素を持つもう一つのリストです: 独立変数の値にその点に対応する従属変数の値が続きます。

以下の微分方程式を数値的に解く。

 
          dx/dt = t - x^2

初期値は x(t=0) = 1で、tの区間は0から8まで、tの増分は0.1。 コマンドは:

 
(%i1) results: rk(t-x^2,x,1,[t,0,8,0.1])$
(%i2) plot2d ([discrete, results])$

結果はリスト resultsに保存され、プロットは、水平軸に t、垂直軸に xで得られた解を表示します。

以下の系を数値的に解く。

 
        dx/dt = 4-x^2-4*y^2     dy/dt = y^2-x^2+1

tは0から4の間、t=0でxが-1.25、yが0.75という条件:

 
(%i1) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$
(%i2) plot2d ([discrete,makelist([p[1],p[3]],p,sol)], [xlabel,"t"],[ylabel,"y"])$

プロットは tの関数として変数 yを表示します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23. Matrices and Linear Algebra


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1 Introduction to Matrices and Linear Algebra


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1.1 Dot

演算子 .は非可換乗算とスカラー積を表します。 オペランドが1列行列か1行行列の abの時、 式 a.bsum (a[i]*b[i], i, 1, length(a))と同値です。 もし abが複素数でないならこれはスカラー積であり、 abの内積すなわちドット積がコールされます。 abが複素数の時、スカラー積は conjugate(a).bとして定義されます; eigenパッケージの innerproductは複素スカラー積を提供します。

オペランドがもっと一般的な行列の時、積は abの行列積です。

bの行数は aの列数と等しくなければいけなく、 結果は aの行数に等しい行数と bの列数に等しい列数を持ちます。

.を算術演算子として浮動小数点数の小数点と区別するために どちらかの側にスペースを残す必要があるかもしれません。 例えば 5.e35000.0ですが、 5 . e35掛ける e3です。

.を含む式の整理を支配するいくつかのフラグがあります。 すなわち dot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules, dotdistrib, dotexptsimp, dotident, dotscrules


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1.2 Vectors

vectはベクトル解析のための関数のパッケージです。 load ("vect")でこのパッケージをロードし、 demo ("vect")でデモンストレーションを表示します。

ベクトル解析パッケージは グラディエント、ダイバージェンス、カール、ラプラシアン演算子と一緒に ドット積やクロス積を含むシンボリックな式を結合したり整理したりすることができます。 これらの演算子の和や積上の分配は、 任意の特定の直交座標系の成分への展開を含む様々な他の展開と同様に、 いくつかのフラグで決定されます。 場のスカラーポテンシャルやベクトルポテンシャルを演繹するための関数もあります。

vectパッケージは以下の関数を含みます: vectorsimp, scalefactors, express, potential, vectorpotential.

デフォルトでは vectパッケージはドット演算子 .を可換演算子とは宣言しません。 可換ドット演算子 .を得るにはコマンド declare(".", commutative)を実行しなければいけません。

Categories:  Vectors · Share packages · Package vect


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1.3 eigen

パッケージ eigenは固有値や固有ベクトルのシンボリックな計算に充てられた いくつかの関数を含みます。 もし eigenvalueseigenvectorsのどちらかが呼び出されたら、 Maximaはパッケージを自動的にロードします。 パッケージは load ("eigen")として明示的にロードすることもできます。

demo ("eigen")でこのパッケージの能力のデモンストレーションを表示します。 batch ("eigen")は一連の計算の間で ユーザープロンプトなしに同じデモンストレーションを実行します。

eigenパッケージの関数は innerproduct, unitvector, columnvector, gramschmidt, eigenvalues, eigenvectors, uniteigenvectors, similaritytransformです。

Categories:  Vectors · Matrices · Share packages · Package eigen


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.2 Functions and Variables for Matrices and Linear Algebra

関数: addcol (M, list_1, ..., list_n)

1つか複数のリスト(または行列)で与えられる列を行列 Mに追加します。

addrow, appendも参照してください。

Categories:  Matrices

関数: addrow (M, list_1, ..., list_n)

1つか複数のリスト(または行列)で与えられる行を行列 Mに追加します。

addcol, appendも参照してください。

Categories:  Matrices

関数: adjoint (M)

行列 Mの余因子行列を返します。 余因子行列は Mの余因子の行列の転置です。

Categories:  Matrices

関数: augcoefmatrix ([eqn_1, …, eqn_m], [x_1, …, x_n])

線形方程式系 eqn_1, …, eqn_mの変数 x_1, …, x_nに関する拡大係数行列を返します。 これは、 それぞれの方程式の定数項 (x_1, …, x_nに依存しないそれらの項) に関して隣接した列を持つ係数行列です。

 
(%i1) m: [2*x - (a - 1)*y = 5*b, c + b*y + a*x = 0]$
(%i2) augcoefmatrix (m, [x, y]);
                       [ 2  1 - a  - 5 b ]
(%o2)                  [                 ]
                       [ a    b      c   ]

Categories:  Linear equations · Matrices

関数: cauchy_matrix  
    cauchy_matrix ([x_1, x_2, …, x_m], [y_1, y_2, …, y_n])  
    cauchy_matrix ([x_1, x_2, …, x_n])

要素 a[i,j] = 1/(x_i+y_i)を持つ、 n掛ける mの Cauchy行列を返します。 cauchy_matrixの第二引数はオプションです。 この場合、 Cauchy行列の要素は a[i,j] = 1/(x_i+x_j)です。

注意: 文献によると Cauchy行列は2つの形式で定義されたものが見られます。 2つ目の定義は a[i,j] = 1/(x_i-y_i)です。

例:

 
(%i1) cauchy_matrix([x1,x2],[y1,y2]);
                      [    1        1    ]
                      [ -------  ------- ]
                      [ y1 + x1  y2 + x1 ]
(%o1)                 [                  ]
                      [    1        1    ]
                      [ -------  ------- ]
                      [ y1 + x2  y2 + x2 ]

(%i2) cauchy_matrix([x1,x2]);
                      [   1         1    ]
                      [  ----    ------- ]
                      [  2 x1    x2 + x1 ]
(%o2)                 [                  ]
                      [    1       1     ]
                      [ -------   ----   ]
                      [ x2 + x1   2 x2   ]

Categories:  Matrices

関数: charpoly (M, x)

行列 Mの変数 xに関する特性多項式を返します。 すなわち determinant (M - diagmatrix (length (M), x))です。

 
(%i1) a: matrix ([3, 1], [2, 4]);
                            [ 3  1 ]
(%o1)                       [      ]
                            [ 2  4 ]
(%i2) expand (charpoly (a, lambda));
                           2
(%o2)                lambda  - 7 lambda + 10
(%i3) (programmode: true, solve (%));
(%o3)               [lambda = 5, lambda = 2]
(%i4) matrix ([x1], [x2]);
                             [ x1 ]
(%o4)                        [    ]
                             [ x2 ]
(%i5) ev (a . % - lambda*%, %th(2)[1]);
                          [ x2 - 2 x1 ]
(%o5)                     [           ]
                          [ 2 x1 - x2 ]
(%i6) %[1, 1] = 0;
(%o6)                     x2 - 2 x1 = 0
(%i7) x2^2 + x1^2 = 1;
                            2     2
(%o7)                     x2  + x1  = 1
(%i8) solve ([%th(2), %], [x1, x2]);
                  1               2
(%o8) [[x1 = - -------, x2 = - -------],
               sqrt(5)         sqrt(5)

                                             1             2
                                    [x1 = -------, x2 = -------]]
                                          sqrt(5)       sqrt(5)

Categories:  Matrices

関数: coefmatrix ([eqn_1, …, eqn_m], [x_1, …, x_n])

線形方程式系 eqn_1, …, eqn_mの変数 x_1, …, x_nに関する係数行列を返します。

 
(%i1) coefmatrix([2*x-(a-1)*y+5*b = 0, b*y+a*x = 3], [x,y]);
                                 [ 2  1 - a ]
(%o1)                            [          ]
                                 [ a    b   ]

Categories:  Linear equations · Matrices

関数: col (M, i)

行列 Mi番目の列を返します。 戻り値は行列です。

Categories:  Matrices

関数: columnvector (L)
関数: covect (L)

リスト Lの要素を含む1列 length (L)行の行列を返します。

covectcolumnvectorと同義です。

load ("eigen")でこの関数をロードします。

もしこのパッケージの関数の出力の一部を行列計算で使いたいなら、これが役に立ちます。

例:

 
(%i1) load ("eigen")$
Warning - you are redefining the Macsyma function eigenvalues
Warning - you are redefining the Macsyma function eigenvectors
(%i2) columnvector ([aa, bb, cc, dd]);
                             [ aa ]
                             [    ]
                             [ bb ]
(%o2)                        [    ]
                             [ cc ]
                             [    ]
                             [ dd ]

Categories:  Matrices

関数: copymatrix (M)

行列 Mのコピーを返します。 これは Mを要素毎にコピーすること以外では、コピーを作る唯一の方法です。

m2: m1のように1つの行列のもう1つへの割り当ては m1をコピーしないことに注意してください。 割り当て m2 [i,j]: xまたは setelmx (x, i, j, m2m1 [i,j]も変更します。 copymatrixを使ってコピーを生成し、割り当てを使うことは 別個の変更されたコピーを生成します。

Categories:  Matrices

関数: determinant (M)

Mの行列式をガウスの消去法と似た方法で計算します。

結果の形式はスイッチ ratmxの設定に依ります。

スイッチ ratmxsparseがともに trueの時コールされる、 粗な行列式を計算するための特殊なルーチンがあります。

Categories:  Matrices

オプション変数: detout

デフォルト値: false

detouttrueの時、 逆行列が計算される行列の行列式が逆行列から因子として外に出されます。

このスイッチが効果を持つには doallmxopsdoscmxopsfalseでなければいけません。 (それらの記述を参照してください。) 代わりにこの2つを正しく設定する evにこのスイッチを与えるという方法もあります。

例:

 
(%i1) m: matrix ([a, b], [c, d]);
                            [ a  b ]
(%o1)                       [      ]
                            [ c  d ]
(%i2) detout: true$
(%i3) doallmxops: false$
(%i4) doscmxops: false$
(%i5) invert (m);
                          [  d   - b ]
                          [          ]
                          [ - c   a  ]
(%o5)                     ------------
                           a d - b c

Categories:  Matrices · Evaluation flags

関数: diagmatrix (n, x)

対角要素すべてが xに等しくて、 サイズが n掛ける nの対角線行列を返します。 diagmatrix (n, 1)は (ident (n)と同じように)単位行列を返します。

nは整数に評価されなければいけなく、そうでないなら diagmatrixはエラーメッセージを出力します。

xは別の行列を含む、任意の種類の式を取り得ます もし xが行列ならそれはコピーされません; 対角要素すべては同じインスタンス xを参照します。

Categories:  Matrices

オプション変数: doallmxops

デフォルト値: true

doallmxopstrueの時 行列に関係する演算すべてが実行されます。 falseの時、個々の dotスイッチの設定がどの演算を実行するか決めます。

Categories:  Matrices

オプション変数: domxexpt

デフォルト値: true

domxexpttrueの時、 行列の指数関数 exp (M)―ただしMは行列― は、要素 [i,j]exp (m[i,j])に等しい行列として解釈されます。

そうでないなら exp (M)exp (ev(M))に評価されます。

domxexptは形式 base^powerの式すべてに影響します。 ここで、 baseはスカラーまたは定数と仮定された式、 powerはリストまたは行列です。

例:

 
(%i1) m: matrix ([1, %i], [a+b, %pi]);
                         [   1    %i  ]
(%o1)                    [            ]
                         [ b + a  %pi ]
(%i2) domxexpt: false$
(%i3) (1 - c)^m;
                             [   1    %i  ]
                             [            ]
                             [ b + a  %pi ]
(%o3)                 (1 - c)
(%i4) domxexpt: true$
(%i5) (1 - c)^m;
                  [                      %i  ]
                  [    1 - c      (1 - c)    ]
(%o5)             [                          ]
                  [        b + a         %pi ]
                  [ (1 - c)       (1 - c)    ]

Categories:  Matrices

オプション変数: domxmxops

デフォルト値: true

domxmxopstrueの時、行列-行列演算、行列-リスト演算すべてが実行されます (しかし、スカラー-行列演算は実行されません); もしこのスイッチが falseなら演算は実行されません。

Categories:  Matrices

オプション変数: domxnctimes

デフォルト値: false

domxnctimestrueの時、行列の非可換積が実行されます。

Categories:  Matrices

オプション変数: dontfactor

デフォルト値: []

ある変数に関する因数分解が起こらないよう、 dontfactorをその変数のリストに設定することができます。 (リストは初期には空です。) 標準有理式(CRE)形で仮定される変数順序に従って dontfactorリスト上のそれらよりも重要でない変数に関しても 因数分解は行われなくなります。

Categories:  Expressions

オプション変数: doscmxops

デフォルト値: false

doscmxopstrueの時、スカラー-行列演算が実行されます。

Categories:  Matrices

オプション変数: doscmxplus

デフォルト値: false

doscmxplustrueの時、スカラー-行列演算は行列の結果をもたらします。 このスイッチは doallmxopsの下に包括されません。

Categories:  Matrices

オプション変数: dot0nscsimp

デフォルト値: true

dot0nscsimptrueの時、 ゼロと非スカラー項の非可換積は可換積に整理されます。

オプション変数: dot0simp

デフォルト値: true

dot0simptrueの時、 ゼロとスカラー項の非可換積は可換積に整理されます。

オプション変数: dot1simp

デフォルト値: true

dot1simptrueの時、 1ともう1つの項の非可換積は可換積に整理されます。

オプション変数: dotassoc

デフォルト値: true

dotassoctrueの時、式 (A.B).CA.(B.C)に整理されます。

オプション変数: dotconstrules

デフォルト値: true

dotconstrulestrueの時、 定数ともう1つの項の非可換積は可換積に整理されます。 このフラグをオンにすることは事実上、 dot1simpはもちろん dot0simp, dot0nscsimpもオンにします。

オプション変数: dotdistrib

デフォルト値: false

dotdistribtrueの時、 式 A.(B + C)A.B + A.Cに整理されます。

オプション変数: dotexptsimp

デフォルト値: true

dotexptsimptrueの時、 式 A.AA^^2に整理されます。

オプション変数: dotident

デフォルト値: 1

dotidentX^^0が返す値です。

オプション変数: dotscrules

デフォルト値: false

dotscrulestrueの時、 式 A.SCまたは SC.ASC*Aに整理され、 A.(SC*B)SC*(A.B)に整理されます。

関数: echelon (M)

ガウスの消去法で生成される行列 Mの階段形を返します。 階段形は Mから初等的な行演算によって計算されます。 それぞれの行の最初の非ゼロ要素が1で、 その要素の下の列要素がすべてゼロであるような行列です。

triangularizeもガウスの消去法を実行しますが、 それぞれの行の先頭の非ゼロ要素を規格化しません。

lu_factorcholeskyは三角行列をもたらす他の関数です。

 
(%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
                       [  3   7  aa  bb ]
                       [                ]
(%o1)                  [ - 1  8  5   2  ]
                       [                ]
                       [  9   2  11  4  ]
(%i2) echelon (M);
                  [ 1  - 8  - 5      - 2     ]
                  [                          ]
                  [         28       11      ]
                  [ 0   1   --       --      ]
(%o2)             [         37       37      ]
                  [                          ]
                  [              37 bb - 119 ]
                  [ 0   0    1   ----------- ]
                  [              37 aa - 313 ]

Categories:  Linear equations · Matrices

関数: eigenvalues (M)
関数: eivals (M)

行列 Mの固有値を含む2つのリストのリストを返します。 戻り値の最初の部分リストは行列の固有値のリストで、 二番目の部分リストは固有値の重複度のリストです。二つのリスト乃要素は順に対応しています。

eivalseigenvaluesと同義です。

eigenvaluesは行列の特性多項式の根を見つけるために、関数 solveをコールします。 時々、solveは多項式の根を見つけられないかもしれません; その場合、このパッケージの (innerproduct, unitvector, columnvector, gramschmidtを除いた)いくつかの他の関数はうまく動かないでしょう。 時々、 solveは多項式の根の部分集合のみを見つけるかもしれません。 多項式の因数分解が5次以上の多項式を含む時これが起こりえます。 そんな場合、警告メッセージが表示され、見つかった根と対応する重複度を返します。

いくつかの場合、 solveが見つける固有値は複雑な式かもしれません。 (solveが実数とわかっている固有値について 見てもすぐにはわからない実数式を返す時、これが起こることがあります。) 他のいくつかの関数を使って固有値を整理することが可能なことがあります。

パッケージeigen.macは、 eigenvalueseigenvectorsが参照された時、 自動的にロードされます。 もし eigen.macがまだロードされていないなら、 load ("eigen")はそれをロードします。 ロードした後はパッケージの中の関数と変数すべてが利用可能です。

Categories:  Package eigen

関数: eigenvectors (M)
関数: eivects (M)

行列 Mの固有ベクトルを計算します。 戻り値は2つの要素のリストです。 一番目のものは Mの固有値のリストと固有値の重複度のリストです。 二番目のものは固有ベクトルのリストのリストです。 固有値それぞれに対して固有ベクトルのリストが1つあります。 それぞれのリストには固有ベクトルが1つの時も複数の時もあります。

eivectseigenvectorsと同義です。

パッケージ eigen.macは、 eigenvalueseigenvectorsが参照された時、 自動的にロードされます。 もし eigen.macがまだロードされていないなら、 load ("eigen")はそれをロードします。 ロードした後はパッケージの中の関数と変数すべてが利用可能です。

eigenvectorsは固有値を得るために内部的に eigenvaluesを呼び出しことに注意してください。 だから、 eigenvaluesがすべての固有値の部分集合を返す時、 eigenvectorseigenvaluesと同様の警告を表示して、 すべての固有ベクトルの対応する部分集合を返します。

この関数に影響するフラグは以下の通りです:

nondiagonalizableは、 eigenvectorsが戻った後、行列が対角化不可能か可能かに依って truefalseに設定されます。

hermitianmatrixtrueの時、 エルミート行列の縮退した固有ベクトルが グラム-シュミットアルゴリズムを使って直交化されるようにします。

knowneigvalstrueの時、 eigenパッケージは、 行列の固有値がユーザーに知られていて、グローバル名 listeigvalsの下に記憶されていることを仮定するようにします。 listeigvalsは出力 eigenvaluesに似たリストに設定しなければいけません。

ここで、関数 algsysが固有ベクトルについて解くために使われます。 もし固有値がごちゃごちゃしているなら、 algsysは時々、解を見つけられないかもしれません。 いくつかの場合、最初に eigenvaluesコマンドを使って固有値を見つけ、 それらをもっと簡潔な何かに換算するために他の関数を使うことによって、 固有値を整理することが可能かもしれません。 整理に続いて trueに設定された knowneigvalsフラグとともに 再び eigenvectorsをコールすることができます。

eigenvaluesも参照してください。

例:

固有値1つにただ1つの固有ベクトルを持つ行列。

 
(%i1) M1 : matrix ([11, -1], [1, 7]);
                           [ 11  - 1 ]
(%o1)                      [         ]
                           [ 1    7  ]
(%i2) [vals, vecs] : eigenvectors (M1);
(%o2) [[[9 - sqrt(3), sqrt(3) + 9], [1, 1]],
                        [[[1, sqrt(3) + 2]], [[1, 2 - sqrt(3)]]]]
(%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
  mult[i] = vals[2][i], vec[i] = vecs[i]);
                       val  = 9 - sqrt(3)
                          1

                            mult  = 1
                                1

                    vec  = [[1, sqrt(3) + 2]]
                       1

                       val  = sqrt(3) + 9
                          2

                            mult  = 1
                                2

                    vec  = [[1, 2 - sqrt(3)]]
                       2

(%o3)                         done

1つの固有値(ここでは2)に2つの固有ベクトルを持つ行列。

 
(%i1) M1 : matrix ([0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 2, 0],
                   [0, 0, 0, 2]);
                         [ 0  1  0  0 ]
                         [            ]
                         [ 0  0  0  0 ]
(%o1)                    [            ]
                         [ 0  0  2  0 ]
                         [            ]
                         [ 0  0  0  2 ]
(%i2) [vals, vecs] : eigenvectors (M1);
(%o2) [[[0, 2], [2, 2]], [[[1, 0, 0, 0]],
                                   [[0, 0, 1, 0], [0, 0, 0, 1]]]]
(%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
  mult[i] = vals[2][i], vec[i] = vecs[i]);
                            val  = 0
                               1

                            mult  = 2
                                1

                      vec  = [[1, 0, 0, 0]]
                         1

                            val  = 2
                               2

                            mult  = 2
                                2

               vec  = [[0, 0, 1, 0], [0, 0, 0, 1]]
                  2

(%o3)                         done

Categories:  Package eigen

関数: ematrix (m, n, x, i, j)

値が x[i, j]要素を除いて、すべての要素がゼロの mn列行列を返します。

Categories:  Matrices

関数: entermatrix (m, n)

対話的に要素を読み、 mn列行列を返します。

もし nmと等しいなら、 Maximaは、行列のタイプ(対角、対称、反対称、一般)の入力を促し、 それぞれの要素の入力を促します。 応答それぞれは、セミコロン ;かドル記号 $で終了させます。

もし nmと等しくないなら Maximaはそれぞれの要素の入力を促します。

要素は任意の式を取り得て、その式は評価されます。 entermatrixは引数を評価します。

 
(%i1) n: 3$
(%i2) m: entermatrix (n, n)$

Is the matrix  1. Diagonal  2. Symmetric  3. Antisymmetric
4. General
Answer 1, 2, 3 or 4 :
1$
Row 1 Column 1:
(a+b)^n$
Row 2 Column 2:
(a+b)^(n+1)$
Row 3 Column 3:
(a+b)^(n+2)$

Matrix entered.
(%i3) m;
                [        3                     ]
                [ (b + a)      0         0     ]
                [                              ]
(%o3)           [                  4           ]
                [    0      (b + a)      0     ]
                [                              ]
                [                            5 ]
                [    0         0      (b + a)  ]

Categories:  Console interaction · Matrices

関数: genmatrix  
    genmatrix (a, i_2, j_2, i_1, j_1)  
    genmatrix (a, i_2, j_2, i_1)  
    genmatrix (a, i_2, j_2)

aから生成される行列を返します。 返される行列は、要素 a[i_1,j_1]を左上の要素として取り、 a[i_2,j_2]を右下の要素として取ります。 ここで、aは、 (make_arrayではなく arrayが生成する)宣言配列か、 未宣言配列か、配列関数か、2つの引数を持つラムダ式のいずれかです。 (配列関数は、他の関数のように :=defineで生成されますが、 引数は括弧の代わりにカギ括弧でくくられます。)

もし j_1が省略されたら、 それは i_1と等しいと仮定されます。 もし j_1i_1両方が省略されたら、 両方とも1と等しいと仮定されます。

もし配列の選択された要素 i,jが未定義なら、 行列はシンボル要素 a[i,j]を含みます。

例:

 
(%i1) h [i, j] := 1 / (i + j - 1);
                                    1
(%o1)                  h     := ---------
                        i, j    i + j - 1
(%i2) genmatrix (h, 3, 3);
                           [    1  1 ]
                           [ 1  -  - ]
                           [    2  3 ]
                           [         ]
                           [ 1  1  1 ]
(%o2)                      [ -  -  - ]
                           [ 2  3  4 ]
                           [         ]
                           [ 1  1  1 ]
                           [ -  -  - ]
                           [ 3  4  5 ]
(%i3) array (a, fixnum, 2, 2);
(%o3)                           a
(%i4) a [1, 1] : %e;
(%o4)                          %e
(%i5) a [2, 2] : %pi;
(%o5)                          %pi
(%i6) genmatrix (a, 2, 2);
                           [ %e   0  ]
(%o6)                      [         ]
                           [ 0   %pi ]
(%i7) genmatrix (lambda ([i, j], j - i), 3, 3);
                         [  0    1   2 ]
                         [             ]
(%o7)                    [ - 1   0   1 ]
                         [             ]
                         [ - 2  - 1  0 ]
(%i8) genmatrix (B, 2, 2);
                        [ B      B     ]
                        [  1, 1   1, 2 ]
(%o8)                   [              ]
                        [ B      B     ]
                        [  2, 1   2, 2 ]

Categories:  Matrices

関数: gramschmidt (x)
関数: gramschmidt (x, F)

xに対してグラム-シュミット直交化アルゴリズムを実行します。 xは行列かリストのリストのいずれかです。 gramschmidtxを変更しません。 もし引数にあるなら gramschmidtFを内積として使います。 そうでないなら、内積は関数 innerproductです。

もし xが行列なら、アルゴリズムは xの行に適用されます。 もし xがリストのリストなら、アルゴリズムは部分リストに適用されます。 部分リストは要素数が同じでなければいけません。 いずれの場合も、戻り値はリストのリストです。 この部分リストは互いに直交し、 xと同じ空間を埋めます。 もし xの全範囲の次元が行や部分リストの数より小さいなら、 戻り値の部分リストのいくつかはゼロです。

中間結果を整理するために、アルゴリズムのそれぞれの段階で factorがコールされます。 結果として、戻り値は素因数分解された整数を含みます。

load(eigen)はこの関数をロードします。

例:

デフォルトの内積関数を使ったグラム-シュミットアルゴリズム。

 
(%i1) load ("eigen")$
(%i2) x: matrix ([1, 2, 3], [9, 18, 30], [12, 48, 60]);
                         [ 1   2   3  ]
                         [            ]
(%o2)                    [ 9   18  30 ]
                         [            ]
                         [ 12  48  60 ]
(%i3) y: gramschmidt (x);
                       2      2            4     3
                      3      3   3 5      2  3  2  3
(%o3)  [[1, 2, 3], [- ---, - --, ---], [- ----, ----, 0]]
                      2 7    7   2 7       5     5
(%i4) map (innerproduct, [y[1], y[2], y[3]], [y[2], y[3], y[1]]);
(%o4)                       [0, 0, 0]

指定した内積関数を使ったグラム-シュミットアルゴリズム。

 
(%i1) load ("eigen")$
(%i2) ip (f, g) := integrate (f * g, u, a, b);
(%o2)          ip(f, g) := integrate(f g, u, a, b)
(%i3) y : gramschmidt([1, sin(u), cos(u)], ip), a= -%pi/2, b=%pi/2;
                               %pi cos(u) - 2
(%o3)              [1, sin(u), --------------]
                                    %pi
(%i4) map (ip, [y[1], y[2], y[3]], [y[2], y[3], y[1]]),
                                                a= -%pi/2, b=%pi/2;
(%o4)                       [0, 0, 0]

Categories:  Package eigen

関数: ident (n)

nn列の単位行列を返します。

Categories:  Matrices

関数: innerproduct (x, y)
関数: inprod (x, y)

xyの(スカラー積やドット積とも呼ばれる)内積を返します。 xyは、等しい長さのリストか、ともに等しい長さの1列行列か1行行列です。 戻り値は conjugate (x) . yです。 ここで .は非可換乗算演算子です。

load ("eigen")はこの関数をロードします。

inprodinnerproductと同義です。

Categories:  Package eigen

関数: invert_by_adjoint (M)

行列 Mの逆を返します。 逆は随伴法で計算されます。

invert同様、invert_by_adjointratmxdetout フラグを遵守します。

関数: invert (M)

行列 Mの逆行列を返します。 逆行列はLU分解で計算されます。

ratmxtrueの時、 Mの要素は標準有理式(CRE)に変換され、 戻り値の要素もまたCREになります。

ratmxfalseの時、 Mの要素は通常の表現に変換されません。 特に、floatとbigfloatは有理数に変換されません。

detouttrueの時、 行列式が逆行列から括りだされます。 行列式が逆行列に吸収されるのを抑制するよう、グローバルフラグ doallmxopsdoscmxopsfalseでなければいけません。 xthruを使って行列式を逆行列に掛けることができます。

invertは、デフォルトの算術整理を除いて、どんな式整理も逆行列の要素に適用しません。 ratsimpexpandは加算整理を適用できます。 特に、 Mが多項式要素を持つ時、 expand(invert(M))が適しているかもしれません。

invert(M)M^^-1と同値です。

Categories:  Matrices

関数: list_matrix_entries (M)

行列 Mの要素を含むリストを返します。

例:

 
(%i1) list_matrix_entries(matrix([a,b],[c,d]));
(%o1)                     [a, b, c, d]

Categories:  Matrices

オプション変数: lmxchar

デフォルト値: [

lmxcharは行列の左区切り記号として表示される文字です。 rmxcharも参照してください。

例:

 
(%i1) lmxchar: "|"$
(%i2) matrix ([a, b, c], [d, e, f], [g, h, i]);
                           | a  b  c ]
                           |         ]
(%o2)                      | d  e  f ]
                           |         ]
                           | g  h  i ]

関数: matrix (row_1, ..., row_n)

row_1, ..., row_nを持つ長方形行列を返します。 行それぞれは、式のリストです。 すべての行は同じ長さでなければいけません。

オペランドが2つの行列、スカラーと行列、行列とスカラーのいずれかの時、 演算 + (足し算), - (引き算), * (掛け算), / (割り算)は要素毎に実行されます。 もしオペランドがスカラーと行列、行列とスカラーのいずれかなら、 演算 ^ (べき乗, **と同値)は、要素毎に実行されますが、 もしオペランドが2つの行列なら要素毎には実行されません。 . (非可換乗算)を含むすべての演算は通常、完全に実行されます。

行列の掛け算は非可換乗算演算子 .で表されます。 対応する非可換べき乗演算子は ^^です。 行列 Aに関して、 A.A = A^^2であり、 もし存在するなら A^^-1Aの逆行列です。 A^^-1invert(A)と同値です。

ドット演算や行列-リスト演算を含む式の整理を制御するためのスイッチがあります。 それらは、 doallmxops, domxexpt domxmxops, doscmxops, doscmxplusです。

行列に関係する付加的なオプションがあります。 それらは以下の通りです: lmxchar, rmxchar, ratmx, listarith, detout, scalarmatrix, sparse

行列を引数として取ったり、行列を戻り値としてもたらしたりするたくさんの関数があります。 eigenvalues, eigenvectors, determinant, charpoly, genmatrix, addcol, addrow, copymatrix, transpose, echelon, rankを参照してください。

例:

 
(%i1) x: matrix ([17, 3], [-8, 11]);
                           [ 17   3  ]
(%o1)                      [         ]
                           [ - 8  11 ]
(%i2) y: matrix ([%pi, %e], [a, b]);
                           [ %pi  %e ]
(%o2)                      [         ]
                           [  a   b  ]
 
(%i3) x + y;
                      [ %pi + 17  %e + 3 ]
(%o3)                 [                  ]
                      [  a - 8    b + 11 ]
 
(%i4) x - y;
                      [ 17 - %pi  3 - %e ]
(%o4)                 [                  ]
                      [ - a - 8   11 - b ]
 
(%i5) x * y;
                        [ 17 %pi  3 %e ]
(%o5)                   [              ]
                        [ - 8 a   11 b ]
 
(%i6) x / y;
                        [ 17       - 1 ]
                        [ ---  3 %e    ]
                        [ %pi          ]
(%o6)                   [              ]
                        [   8    11    ]
                        [ - -    --    ]
                        [   a    b     ]
 
(%i7) x ^ 3;
                         [ 4913    27  ]
(%o7)                    [             ]
                         [ - 512  1331 ]
 
(%i8) exp(y);
                         [   %pi    %e ]
                         [ %e     %e   ]
(%o8)                    [             ]
                         [    a     b  ]
                         [  %e    %e   ]
 
(%i9) x ^ y;
                                [ %pi  %e ]
                                [         ]
                                [  a   b  ]
                     [ 17   3  ]
(%o9)                [         ]
                     [ - 8  11 ]
 
(%i10) x . y;
                  [ 3 a + 17 %pi  3 b + 17 %e ]
(%o10)            [                           ]
                  [ 11 a - 8 %pi  11 b - 8 %e ]
(%i11) y . x;
                [ 17 %pi - 8 %e  3 %pi + 11 %e ]
(%o11)          [                              ]
                [  17 a - 8 b     11 b + 3 a   ]
 
(%i12) x ^^ 3;
                        [  3833   1719 ]
(%o12)                  [              ]
                        [ - 4584  395  ]
(%i13) %e ^^ y;
                         [   %pi    %e ]
                         [ %e     %e   ]
(%o13)                   [             ]
                         [    a     b  ]
                         [  %e    %e   ]
 
(%i14) x ^^ -1;
                         [ 11      3  ]
                         [ ---  - --- ]
                         [ 211    211 ]
(%o14)                   [            ]
                         [  8    17   ]
                         [ ---   ---  ]
                         [ 211   211  ]
(%i15) x . (x ^^ -1);
                            [ 1  0 ]
(%o15)                      [      ]
                            [ 0  1 ]

Categories:  Matrices

関数: matrixexp  
    matrixexp (M)  
    matrixexp (M, n)  
    matrixexp (M, V)

行列指数函数 e^(M*V) を計算します。 ベクトル Vの代わりに、数 nを第二引数としてしていすることができます。 もしこの引数が省略されたら、matrixexpはそれを 1で置き換えます。

行列 Mの行列指数函数は冪級数として表現できます: e^M=sum(M^k/k!,0,inf)

Categories:  Matrices

関数: matrixmap (f, M)

f(M[i,j])に等しい要素 i,jを持つ行列を返します。

map, fullmap, fullmapl, applyも参照してください。

Categories:  Matrices

関数: matrixp (expr)

もし exprが行列なら trueを返し,そうでないなら falseを返します。

Categories:  Predicate functions · Matrices

オプション変数: matrix_element_add

デフォルト値: +

matrix_element_addは行列乗算の中で足し算の代わりに呼び出される演算です。 matrix_element_addは任意の n項演算子(すなわち、任意の数の引数を扱う関数)に割り当てられます。 割り当てられた値はクォートマークでくくられた演算子の名前か、 関数名かラムダ式を取り得ます。

matrix_element_multmatrix_element_transposeも参照してください。

例:

 
(%i1) matrix_element_add: "*"$
(%i2) matrix_element_mult: "^"$
(%i3) aa: matrix ([a, b, c], [d, e, f]);
                           [ a  b  c ]
(%o3)                      [         ]
                           [ d  e  f ]
(%i4) bb: matrix ([u, v, w], [x, y, z]);
                           [ u  v  w ]
(%o4)                      [         ]
                           [ x  y  z ]
(%i5) aa . transpose (bb);
                     [  u  v  w   x  y  z ]
                     [ a  b  c   a  b  c  ]
(%o5)                [                    ]
                     [  u  v  w   x  y  z ]
                     [ d  e  f   d  e  f  ]

Categories:  Matrices

オプション変数: matrix_element_mult

デフォルト値: *

matrix_element_multは行列乗算の中で掛け算の代わりに呼び出される演算です。 matrix_element_multは任意の二項演算子に割り当てられます。 割り当てられた値はクォートマークでくくられた演算子の名前か、関数名か、 ラムダ式を取り得ます。

ドット演算子 .はいくつかの文脈で役に立つ選択です。

matrix_element_addmatrix_element_transposeも参照してください。

例:

 
(%i1) matrix_element_add: lambda ([[x]], sqrt (apply ("+", x)))$
(%i2) matrix_element_mult: lambda ([x, y], (x - y)^2)$
(%i3) [a, b, c] . [x, y, z];
                          2          2          2
(%o3)         sqrt((c - z)  + (b - y)  + (a - x) )
(%i4) aa: matrix ([a, b, c], [d, e, f]);
                           [ a  b  c ]
(%o4)                      [         ]
                           [ d  e  f ]
(%i5) bb: matrix ([u, v, w], [x, y, z]);
                           [ u  v  w ]
(%o5)                      [         ]
                           [ x  y  z ]
(%i6) aa . transpose (bb);
               [             2          2          2  ]
               [ sqrt((c - w)  + (b - v)  + (a - u) ) ]
(%o6)  Col 1 = [                                      ]
               [             2          2          2  ]
               [ sqrt((f - w)  + (e - v)  + (d - u) ) ]

                         [             2          2          2  ]
                         [ sqrt((c - z)  + (b - y)  + (a - x) ) ]
                 Col 2 = [                                      ]
                         [             2          2          2  ]
                         [ sqrt((f - z)  + (e - y)  + (d - x) ) ]

Categories:  Matrices

オプション変数: matrix_element_transpose

デフォルト値: false

matrix_element_transposeは、 転置される時、行列のそれぞれの要素に適用される演算です。 matrix_element_multは任意の単項演算子に割り当てられます。 割り当てられた値はクォートマークでくくられた演算子の名前か、 関数名か、ラムダ式を取り得ます。

matrix_element_transposetransposeに等しい時、 transpose関数が要素すべてに適用されます。 matrix_element_transposenonscalarsに等しい時、 transpose関数は非スカラー要素すべてに適用されます。 もしある要素がアトムなら、 nonscalarsオプションはアトムが宣言された非スカラーの時だけ transposeを適用します。 一方、transposeオプションはいつも transposeを適用します。

デフォルト値, falseはいかなる演算も適用しないことを意味します。

matrix_element_addmatrix_element_multも参照してください。

例:

 
(%i1) declare (a, nonscalar)$
(%i2) transpose ([a, b]);
                        [ transpose(a) ]
(%o2)                   [              ]
                        [      b       ]
(%i3) matrix_element_transpose: nonscalars$
(%i4) transpose ([a, b]);
                        [ transpose(a) ]
(%o4)                   [              ]
                        [      b       ]
(%i5) matrix_element_transpose: transpose$
(%i6) transpose ([a, b]);
                        [ transpose(a) ]
(%o6)                   [              ]
                        [ transpose(b) ]
(%i7) matrix_element_transpose: lambda ([x], realpart(x)
      - %i*imagpart(x))$
(%i8) m: matrix ([1 + 5*%i, 3 - 2*%i], [7*%i, 11]);
                     [ 5 %i + 1  3 - 2 %i ]
(%o8)                [                    ]
                     [   7 %i       11    ]
(%i9) transpose (m);
                      [ 1 - 5 %i  - 7 %i ]
(%o9)                 [                  ]
                      [ 2 %i + 3    11   ]

Categories:  Matrices

関数: mattrace (M)

正方行列 Mの跡(すなわち、主対角上の要素の和)を返します。

mattracencharpoly―Maximaのcharpolyの代わり― によってコールされます。

load ("nchrpl")はこの関数をロードします。

Categories:  Matrices · Package nchrpl

関数: minor (M, i, j)

行列 Mi, j小行列を返します。 すなわち、行 iと列 jを除いた Mです。

Categories:  Matrices

関数: ncharpoly (M, x)

行列Mxに関する特性多項式を返します。 これはMaximaの charpolyの代わりです。

ncharpolyは与えられた行列のべきの跡を計算することで機能します。 それは特性多項式の根のべきの和に等しいことが知られています。 それらの量から根の対称関数を計算することができます。 それらは特性多項式の係数以上のなにものでもありません。 charpolyは、 x * ident [n] - aの行列式を形成することで機能します。 このように、 ncharpolyは完全に多項式算術を避けるので、 例えば、整数で埋められた大きな密な行列の場合、 ncharpolyが勝ります。

load ("nchrpl")はこのファイルをロードします。

Categories:  Matrices · Package nchrpl

関数: newdet (M)

行列 Mの行列式を ジョンソン-ジェントルマンのtree minorアルゴリズムを使って計算します。 newdetはCRE形式で結果を返します。

Categories:  Matrices

関数: permanent (M, n)

行列 Mのパーマネントを計算します。 パーマネントは行列式のようですが、符号が変わりません。 permanentはCRE形式で結果を返します。

newdetも参照してください。

Categories:  Matrices

関数: rank (M)

行列 Mのランクを計算します。 すなわち、Mの最も大きな非特異な小行列式の次数です。

もし rankがゼロと同値の行列要素が確かにそうであることを決定することができないなら、 間違った答えを返す可能性があります。

Categories:  Matrices

オプション変数: ratmx

デフォルト値: false

ratmxfalseの時、 行列要素の表現で行列式と行列の足し算、引き算、掛け算が実行され、 逆行列の結果は一般表現のまま残されます。

ratmxtrueの時、 上で述べた4つの演算は CRE形式で実行され、逆行列の結果も CRE形式になります。 要素の展開は常に望まれているわけではないですが、 これによって(ratfacの設定に依って) 要素が展開されるかもしれないことに注意してください。

Categories:  Matrices · Rational expressions

関数: row (M, i)

行列 Mi番目の行を返します。 戻り値は行列です。

Categories:  Matrices

オプション変数: rmxchar

デフォルト値: ]

rmxcharは行列の右辺に描かれる文字です。

lmxcharも参照してください。

オプション変数: scalarmatrixp

デフォルト値: true

scalarmatrixptrueの時、 1 x 1行列が行列のドット積を計算した結果として生成される時はいつでも、 スカラーすなわち行列の唯一の要素に整理されます。

scalarmatrixpallの時、 すべての1 x 1行列はスカラーに整理されます。

scalarmatrixpfalseの時、 1 x 1行列はスカラーに整理されません。

関数: scalefactors (coordinatetransform)

ここで coordinatetransformは形式 [[expression1, expression2, ...], indeterminate1, indeterminat2, ...] に評価されます。また、 indeterminate1, indeterminate2, などは曲線座標変数であり、 直交カーテシアン成分の集合は、 [expression1, expression2, ...]によって、曲線座標を使って与えられます。

coordinatesを ベクトル [indeterminate1, indeterminate2,...]に設定し、 dimensionをこのベクトルの長さに設定します。 SF[1], SF[2], …, SF[DIMENSION]を座標スケールファクタに設定し、 sfprodをこれらのスケールファクタの積に設定します。 初期状態では 3次元直交カーテシアン座標に対応して、 coordinatesは [X, Y, Z]であり、 dimensionは 3であり、 SF[1]=SF[2]=SF[3]=SFPROD=1です。 式を現在の座標形の物理成分に展開するために形式を利用する関数があります。 (訳注:「形式」の部分、原文自体が欠けています)

Categories:  Package vect

関数: setelmx (x, i, j, M)

xを行列 Mの(i, j)番目の要素に割り当て、 変わった行列を返します。

M [i, j]: xは同じ効果を持ちますが、 Mの代わりに xを返します。

Categories:  Matrices

関数: similaritytransform (M)
関数: simtran (M)

similaritytransformは行列 Mの相似変換を計算します。 uniteigenvectorsコマンドの出力であるリストを返します。 更に、もしフラグ nondiagonalizablefalseなら、 2つのグローバル行列 leftmatrixrightmatrixを計算します。 これらの行列は、 leftmatrix . M . rightmatrixMの固有値を対角上に持つ対角行列となるという性質を持ちます。 もし nondiagonalizabletrueなら、左右の行列は計算されません。

もしフラグ hermitianmatrixtrueなら、 leftmatrixrightmatrixの転置の複素共役です。 そうでないなら、 leftmatrixrightmatrixの逆行列です。

rightmatrixは列が Mの単位固有ベクトルである行列です。 rightmatrixを形成可能にするために similaritytransformがパッケージの中の他の関数をコールするので、 他のフラグ (eigenvalueseigenvectorsを参照してください)は同じ効果を持ちます。

load ("eigen")はこの関数をロードします。

simtransimilaritytransformと同義です。

Categories:  Package eigen

オプション変数: sparse

デフォルト値: false

sparsetrueかつ ratmxtrueなら、 determinantは粗な行列式を計算するために特別なルーチンを使います。

Categories:  Matrices

関数: submatrix  
    submatrix (i_1, …, i_m, M, j_1, …, j_n)  
    submatrix (i_1, …, i_m, M)  
    submatrix (M, j_1, …, j_n)

行列 Mから 行 i_1, …, i_mを取り除き、 列 j_1, …, j_nを取り除いた新しい行列を返します。

Categories:  Matrices

関数: transpose (M)

Mの転置を返します。

もし Mが行列なら、 戻り値は N[i,j] = M[j,i]であるような別の行列 Nです。

もし Mがリストなら、 戻り値は N[i,1] = M[i]であるような length (m)行1列の行列Nです。

そうでないなら Mはシンボルで、 戻り値は名詞式 'transpose (M)です。

Categories:  Matrices

関数: triangularize (M)

ガウスの消去法で生成されるような、行列 Mの右上三角化行列を返します。 それぞれの行の先頭の非ゼロ係数が1に規格化されないことを除いて、 戻り値は echelonと同じです。

三角化行列をもらたす他の関数に lu_factorcholeskyがあります。

 
(%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
                       [  3   7  aa  bb ]
                       [                ]
(%o1)                  [ - 1  8  5   2  ]
                       [                ]
                       [  9   2  11  4  ]
(%i2) triangularize (M);
             [ - 1   8         5            2      ]
             [                                     ]
(%o2)        [  0   - 74     - 56         - 22     ]
             [                                     ]
             [  0    0    626 - 74 aa  238 - 74 bb ]

Categories:  Linear equations · Matrices

関数: uniteigenvectors (M)
関数: ueivects (M)

行列 Mの単位固有ベクトルを計算します。 戻り値はリストのリストです。 最初のサブリストは eigenvaluesコマンドの出力であり、 他のサブリストは固有値それぞれに対応する行列の単位固有ベクトルです。

eigenvectorsコマンドでの記述で言及されたフラグはこれに関しても同じ効果を持ちます。

knowneigvectstrueの時、 行列の固有ベクトルがユーザーに知られていて、グローバル名 listeigvectsの下に記憶されていることを eigenパッケージは仮定します。 listeigvectseigenvectorsコマンドの出力に似たリストに設定されなければいけません。

もし knowneigvectstrueに設定されていて、 固有ベクトルのリストが与えられるなら、 フラグ nondiagonalizableの設定は正しくないかもしれません。 この場合に該当するなら正しい値に設定してください。 ユーザーがしていることを知っていること、 固有値が適切な次元のベクトル空間を作り出さない行列を対角化しようとはしないことを 作者は仮定しています。

load ("eigen")はこの関数をロードします。

ueivectsuniteigenvectorsと同義です。

Categories:  Package eigen

関数: unitvector (x)
関数: uvect (x)

x/norm(x)を返します; これは xと同じ向きの単位ベクトルです。

load ("eigen")はこの関数をロードします。

uvectunitvectorと同義です。

Categories:  Package eigen

関数: vectorpotential (givencurl)

現在の座標系で与えられた回転ベクトルのベクトルポテンシャルを返します。 potentialzerolocpotentialに対して似たような役割を持ちますが、 等式の左辺側の次数は座標変数の巡回置換でなければいけません。

Categories:  Package vect

関数: vectorsimp (expr)

以下のグローバルフラグに従って整理と展開を適用します:

expandall, expanddot, expanddotplus, expandcross, expandcrossplus, expandcrosscross, expandgrad, expandgradplus, expandgradprod, expanddiv, expanddivplus, expanddivprod, expandcurl, expandcurlplus, expandcurlcurl, expandlaplacian, expandlaplacianplus, expandlaplacianprod.

これらのフラグすべてはデフォルト値 falseを持ちます。 plus接尾辞は加算性や分配性の利用に関係します。 prod接尾辞は任意の種類の積のオペランドに関する展開に関係します。

expandcrosscross

p ~ (q ~ r)(p . r)*q - (p . q)*rに整理します。

expandcurlcurl

curl curl pgrad div p + div grad pに整理します。

expandlaplaciantodivgrad

laplacian pdiv grad pに整理します。

expandcross

expandcrossplusexpandcrosscrossを有効にします。

expandplus

expanddotplus, expandcrossplus, expandgradplus, expanddivplus, expandcurlplus, expandlaplacianplusを有効にします。

expandprod

expandgradprod, expanddivprod, expandlaplacianprodを有効にします。

これらのフラグはすべて evflagとして宣言されています。

オプション変数: vect_cross

デフォルト値: false

vect_crosstrueの時、 ~がSHARE;VECTの中で定義されているところ (とにかく、VECT_CROSSが trueに設定されているところ) でDIFF(X~Y,T)が機能するようにします。

関数: zeromatrix (m, n)

要素すべてがゼロの mn列行列を返します。

Categories:  Matrices


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24. Affine


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.1 Introduction to Affine

affineは多項式の群を扱うパッケージです。

Categories:  Polynomials · Groebner bases · Share packages · Package affine


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.2 Functions and Variables for Affine

関数: fast_linsolve ([expr_1, ..., expr_m], [x_1, ..., x_n])

変数 x_1, ..., x_nに関する連立線形方程式 expr_1, ..., expr_mを解きます。 expr_iそれぞれは、等式か一般式を取り得ます; もし一般式として与えられたら、 形式 expr_i = 0の等式として扱われます。

戻り値は形式 [x_1 = a_1, ..., x_n = a_n]の等式のリストです。 ここで a_1, ..., a_nはすべて x_1, ..., x_nを含みません。

fast_linsolveは粗な方程式系に対して linsolveより速いです。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: grobner_basis ([expr_1, ..., expr_m])

等式 expr_1, ..., expr_mのグレブナー基底を返します。 等式に関係する他の関数を整理するために、その後、関数 polysimpを使うことができます。

 
grobner_basis ([3*x^2+1, y*x])$

polysimp (y^2*x + x^3*9 + 2) ==> -3*x + 2

polysimp(f)は、 fexpr_1, ..., expr_mによって生成されたイデアルに含まれるときだけ、 すなわち、 fexpr_1, ..., expr_mの要素の多項式結合の時だけ、 0をもたらします。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: set_up_dot_simplifications  
    set_up_dot_simplifications (eqns, check_through_degree)  
    set_up_dot_simplifications (eqns)

eqnsは非可換変数を含む多項式方程式です。 current_variablesの値は次数を計算するために使われる変数のリストです。 手続きが終了するためには、方程式は斉次でなければいけません。

もし あなたが fの次数より上で dot_simplificationsに関する整理の重複をチェックしたら、 (If you have checked overlapping simplifications in dot_simplifications above the degree of f,) 以下は真です: fが方程式が生成したイデアルに含まれる時だけ、すなわち、 fが方程式の要素の多項式結合の時だけ、 dotsimp (f)は 0をもたらします。

次数は nc_degreeが返す値です。 これは逆に、個々の変数の重みに影響されます。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: declare_weights (x_1, w_1, ..., x_n, w_n)

重み w_1, ..., w_nそれぞれを x_1, ..., x_nに割り当てます。 これらは nc_degreeを計算する時に使われる重みです。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: nc_degree (p)

非可換多項式 pの次数を返します。 declare_weightsを参照してください。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: dotsimp (f)

fが方程式によって生成されたイデアルに含まれる時だけ、すなわち、 fが方程式の要素の多項式結合の時だけ 0を返します。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: fast_central_elements ([x_1, ..., x_n], n)

もし set_up_dot_simplificationsが以前に実行されていたら、 与えられた次数 nでの変数 x_1, ..., x_nに関する中心多項式を見つけます。

例えば:

 
set_up_dot_simplifications ([y.x + x.y], 3);
fast_central_elements ([x, y], 2);
[y.y, x.x];

load(affine) loads this function.

Categories:  Package affine

関数: check_overlaps (n, add_to_simps)

次数 nまでの重複をチェックします。 すなわち、 dotsimpが正しく機能するように それぞれの次数で十分な整理規則を持つことを確認します。 もしあらかじめ単項式の空間次元が何か知っているなら、このプロセスはスピードアップできます。 もし有限グローバル次元なら hilbertを使うべきです。 もし単項式次元を知らないなら rank_functionを指定しないでください。 オプションの三番目の引数 resetfalseにすると、 物事の再設定についてわざわざ問い合わせないようにします。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: mono ([x_1, ..., x_n], n)

次数 nの変数 x_1, ..., x_nに関する現在のドット整理に関係した独立な単項式のリストを返します。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: monomial_dimensions (n)

カレント代数に関する次数 nまでのヒルベルト級数を計算します。

load(affine)はこの関数をロードします。

Categories:  Package affine

関数: extract_linear_equations ([p_1, ..., p_n], [m_1, ..., m_n])

非可換単項式 m_1, ..., m_nの非可換多項式 p_1, ..., p_nの係数のリストを作ります。 係数はスカラーでなければいけません。 単項式のリストを組み立てるには list_nc_monomialsを使ってください。

load(affine)はこの関数をロードします。

Categories:  Package affine

Function: list_nc_monomials  
    list_nc_monomials ([p_1, ..., p_n])  
    list_nc_monomials (p)

多項式 pまたは多項式のリスト p_1, ..., p_nの中に現れる非可換単項式のリストを返します。

load(affine)はこの関数をロードします。

Categories:  Package affine

オプション変数: all_dotsimp_denoms

デフォルト値: false

all_dotsimp_denomsがリストの時、 dotsimpが出会う分母をリストに追加します。 dotsimpをコールする前に、 all_dotsimp_denomsは空のリスト []に初期化されるかもしれません。

デフォルトでは dotsimpは分母を集めません。

Categories:  Package affine


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25. itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.1 Introduction to itensor

Maximaは記号的なテンソル操作を2つの異なったタイプで実装しています: 成分テンソル操作 (ctensorパッケージ)と添字テンソル操作 (itensorパッケージ)。

注意せよ: 以下の'新しいテンソル表記'に関するノートを参照してください。

成分テンソル操作は幾何学的テンソルオブジェクトが配列または行列で表現されることを意味します。 縮約や共変微分のようなテンソル演算は実際に、 do文を伴う繰り返し用(ダミー)添字上の和によって実行されます。 すなわち、配列や行列に記憶された適切なテンソル成分上で明示的に演算を実行します。

添字テンソル操作は共変添字、反変添字、微分添字の関数として テンソルを表現することで実装されています。 縮約や共変微分のようなテンソル演算は 対応する成分よりむしろ添字それ自身を操作することで実行されます。

Riemann幾何の文脈での微分的、代数的、解析的処理へのこれらの2つのアプローチは、 ユーザーの問題の個々の性質と難しさを通してだけ明らかにされる様々な利点と欠点を持ちます。 しかしながら、2つの実装の以下の特性を心にとどめて置くべきです:

成分を明示的に使ったテンソルとテンソル演算の表現は ctensorを使いやすくします。 計量の指定と帰納されたテンソルと不変量の計算が直接的で回りくどくありません。 Maximaの強力な整理能力すべてがいつでも使えますが、 入り組んだ関数的、座標依存性を持つ複雑な計量はすぐに、 サイズが極端で構造が隠された式に至ります。 さらに、たくさんの計算は増大する中間式を含み、プログラムが完了前に終了する原因となります。 経験を通して、ユーザーはこれらの難しさの多くを避けることができます。

テンソルとテンソル演算が添字上の記号演算を使って表される特別な方法のために、 成分表現では処理できなかった式が、 itensorの中の対称オブジェクト用特別ルーチンを使うことで、 たいそう整理することができることがあります。 この方法で大きな式の構造がもっと明白になるかもしれません。 他方で、 itensorの中の特別な添字表現のために、 いくつかの場合、 ユーザーは、計量の指定や関数の定義、微分された「添字付き」オブジェクトの評価に 難しさを見いだすかもしれません。

itensorパッケージは添字付き変数に関する微分を実行できます。 そのため、ラグランジアンとハミルトニアン形式を扱う時にこのパッケージを使うことができます。 (添字付き)場の変数に関する場のラグランジアンを微分することが可能なので、 対応する Euler-Lagrange方程式を添字形式で得るのに Maximaを使うことができます。 ic_convert関数を使って、これらの方程式を成分テンソル (ctensor)プログラムに翻訳することができ、 それによって場の方程式を個別の座標表現で解くことや、 ハミルトニアン形式の運動方程式を計算し直すことが可能になります。 2つの包括的な例として einhil.dembradic.demを参照してください。 最初の einhil.demは、 斉次で等方的な場合 (Friedmann方程式)と球対称で静的な場合 (Schwarzschild解)に Einsteinの場テンソルを得るために Einstein-Hilbert作用を使います。 二番目の bradic.demは、 Brans-Dicke重力理論の作用から Friedmann方程式を計算する方法を示し、 理論のスカラー場に関連したハミルトニアンも演繹します。

Categories:  Tensors · Share packages · Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.1.1 New tensor notation

Maximaの itensorパッケージの初期のバージョンは 時々、間違った添字順序に至る表記を使いました。 例えば、以下を考えてください:

 
(%i2) imetric(g);
(%o2)                                done
(%i3) ishow(g([],[j,k])*g([],[i,l])*a([i,j],[]))$
                                 i l  j k
(%t3)                           g    g    a
                                           i j
(%i4) ishow(contract(%))$
                                      k l
(%t4)                                a

aが偶然対称テンソルでないなら、この結果は間違っています これが起こる理由は、 itensorは正しく共変添字と反変添字の集合の中の順序を保つけれども、 一旦、添字が上がったり下がったりすると、添字の他の集合に関する位置が失われるからです。

この問題を避けるため、 存在する表記と完全に互換性を残し、相互に使うことが可能な新しい表記が開発されました。 この表記では、反変添字は共変添字リストの中の適切な位置に挿入されますが、 マイナス記号が前に付けられます。 現在、 contract_Itensorishowのような関数はこの新しい添字表記に通じており、 テンソルを適切に処理することができます。

この新しい表記では以前の例は正しい結果をもたらします:

 
(%i5) ishow(g([-j,-k],[])*g([-i,-l],[])*a([i,j],[]))$
                                 i l       j k
(%t5)                           g    a    g
                                      i j
(%i6) ishow(contract(%))$
                                      l k
(%t6)                                a

現在、この表記を使う唯一のコードは lc2kdt関数です。 数値添字に頼らず Levi-Civita記号を決定するために計量テンソルを用いる時、 この表記を通じて、一貫した結果を達成します。

このコードはできたばかりなので、おそらくバグを含みます。 「古い」テンソル表記を使った何かを壊さないことを確認するためにテストされている一方、 「新しい」テンソルが特定の関数や特徴と相互運営するのに失敗する相当な可能性があります。 これらのバグは見つかった時修正されるでしょう。それまでは、利用者責任で!


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.1.2 Indicial tensor manipulation

添字テンソル操作パッケージは load(itensor)でロードできます。 デモも利用可能です: demo(tensor)を試してください。

itensorでは、テンソルは「添字付きオブジェクト」として表されます。 これは共変、反変、微分添字を表す添字の3つのグループの関数です。 共変添字は添字付きオブジェクトの最初の引数としてリストで指定され、 半変添字は二番目の引数としてリストで指定されます。 もし添字付きオブジェクトが添字のグループのいずれかを欠いているなら、 空のリスト []が対応する引数として与えられます。 例えば、g([a,b],[c])は、2つの共変添字 (a,b)と1つの反変添字(c)を持ち、微分添字を持たない gと呼ばれる添字付きオブジェクトを表します。

もし存在するなら、微分添字はテンソルを表すシンボル関数の追加の引数として添えられます。 それらは、ユーザーが明示的に指定したり、ある座標変数に関する微分の処理の中で生成されたりします。 常微分は可換なので、フレーム計量が使われることを示す iframe_flagtrueに設定されない限り、微分添字はアルファベット順に並び替えられます。 この標準オーダーのおかけで、 Maximaは、例えば、 t([a],[b],i,j)t([a],[b],j,i)と同じだと認識できます。 添字付きオブジェクトの引数として現れない添字の座標に関する 添字付きオブジェクトの微分は、通常ゼロをもたらします。 これは Maximaが添字付きオブジェクトで表されたテンソルが 対応する座標に陰に依存するかもしれないことを知らないためです。 現行の Maxima関数 diffitensor内で修正することで、 他に記述されない限り、 Maximaは添字付きオブジェクトすべてが微分の任意の変数に依存することを仮定するようになります。 これによって、和の慣例を微分添字に拡張することができます。 itensorは微分添字を上げる能力を所有しないこと、 そしてそれらは常に共変として扱われることに注意すべきです。

以下の関数が添字付きオブジェクトを操作するためにテンソルパッケージの中で利用可能です。 現在、整理ルーチンに関して添字付きオブジェクトが デフォルトで対称性を持たないことを仮定します。 これは、変数 allsym[false]trueに設定することで上書きすることができます。 これによって、すべての添字付きオブジェクトを 共変添字のリストと反変添字のリストに関して完全に対称に扱うようになります。

itensorパッケージは一般にテンソルを不透明なオブジェクトとして扱います。 テンソル等式は、代数ルール、特に対称性と縮約ルールに基づいて操作されます。 加えて、itensorパッケージは、共変微分、曲率、ねじれ率を理解します。 iframe_flag変数の設定に依存して、 動枠 (moving frame)の計量に関して計算を実行できます。

以下のサンプルセッションは、 itensorパッケージをロードし、計量名を指定し、いくつかの簡単な計算を実行する仕方を 例示します。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) imetric(g);
(%o2)                                done
(%i3) components(g([i,j],[]),p([i,j],[])*e([],[]))$
(%i4) ishow(g([k,l],[]))$
(%t4)                               e p
                                       k l
(%i5) ishow(diff(v([i],[]),t))$
(%t5)                                  0
(%i6) depends(v,t);
(%o6)                               [v(t)]
(%i7) ishow(diff(v([i],[]),t))$
                                    d
(%t7)                               -- (v )
                                    dt   i
(%i8) ishow(idiff(v([i],[]),j))$
(%t8)                                v
                                      i,j
(%i9) ishow(extdiff(v([i],[]),j))$
(%t9)                             v    - v
                                   j,i    i,j
                                  -----------
                                       2
(%i10) ishow(liediff(v,w([i],[])))$
                               %3          %3
(%t10)                        v   w     + v   w
                                   i,%3    ,i  %3
(%i11) ishow(covdiff(v([i],[]),j))$
                                              %4
(%t11)                        v    - v   ichr2
                               i,j    %4      i j
(%i12) ishow(ev(%,ichr2))$
                %4 %5
(%t12) v    - (g      v   (e p       + e   p     - e p       - e    p
        i,j            %4     j %5,i    ,i  j %5      i j,%5    ,%5  i j

                                         + e p       + e   p    ))/2
                                              i %5,j    ,j  i %5
(%i13) iframe_flag:true;
(%o13)                               true
(%i14) ishow(covdiff(v([i],[]),j))$
                                             %6
(%t14)                        v    - v   icc2
                               i,j    %6     i j
(%i15) ishow(ev(%,icc2))$
                                             %6
(%t15)                        v    - v   ifc2
                               i,j    %6     i j
(%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
             %6 %7                    %6 %7
(%t16) - (ifg      v   ifb       + ifg      v   ifb       - 2 v
                    %6    j %7 i             %6    i j %7      i,j

                                             %6 %7
                                        - ifg      v   ifb      )/2
                                                    %6    %7 i j
(%i17) ishow(canform(s([i,j],[])-s([j,i])))$
(%t17)                            s    - s
                                   i j    j i
(%i18) decsym(s,2,0,[sym(all)],[]);
(%o18)                               done
(%i19) ishow(canform(s([i,j],[])-s([j,i])))$
(%t19)                                 0
(%i20) ishow(canform(a([i,j],[])+a([j,i])))$
(%t20)                            a    + a
                                   j i    i j
(%i21) decsym(a,2,0,[anti(all)],[]);
(%o21)                               done
(%i22) ishow(canform(a([i,j],[])+a([j,i])))$
(%t22)                                 0


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2 Functions and Variables for itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.1 Managing indexed objects

関数: dispcon  
    dispcon (tensor_1, tensor_2, …)  
    dispcon (all)

defconに与えられたような引数の縮約プロパティを表示します。 dispcon (all)は、定義された縮約プロパティすべてを表示します。

Categories:  Display functions

関数: entertensor (name)

プロンプトによって、 任意の数のテンソル添字や微分添字を持つ nameと呼ばれる添字付きオブジェクトを生成することを許す関数です。 単一添字または(nullもありえる)添字のリストが受け付け可能な入力です。 (covdiffの下の例を参照してください。)

Categories:  Package itensor

関数: changename (old, new, expr)

exprの中の oldと呼ばれるすべての添字付きオブジェクトの名前を newに変えます。 oldはシンボルまたは形式 [name, m, n]のリストであり得ます。 後者の場合、 m個の共変添字と n個の反変添字を持つ nameと呼ばれるそれらの添字付きオブジェクトだけが newにリネームされます。

Categories:  Package itensor

関数: listoftens

テンソル式の中のすべてのテンソルを添字が完備した形でリストします。 例えば、

 
(%i6) ishow(a([i,j],[k])*b([u],[],v)+c([x,y],[])*d([],[])*e)$
                                         k
(%t6)                        d e c    + a    b
                                  x y    i j  u,v
(%i7) ishow(listoftens(%))$
                               k
(%t7)                        [a   , b   , c   , d]
                               i j   u,v   x y

Categories:  Package itensor

関数: ishow (expr)

下付き添字としての共変添字と上付き添字としての反変添字を持つように 添字付きオブジェクトを持つ形で exprを表示します。 微分添字は共変添字からコンマで区切られた下付き添字として表示されます。 (このドキュメント至る所の例を参照してください。)

Categories:  Package itensor

関数: indices (expr)

2つの要素のリストを返します。 以下の例が例示するように、 一番目は exprの中の自由添字(一度だけ現れるもの)のリストです。 二番目は exprの中のダミー添字(正確に二回現れるもの)のリストです。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(a([i,j],[k,l],m,n)*b([k,o],[j,m,p],q,r))$
                                k l      j m p
(%t2)                          a        b
                                i j,m n  k o,q r
(%i3) indices(%);
(%o3)                 [[l, p, i, n, o, q, r], [k, j, m]]

同じ添字を二回以上含むテンソル積は構文的に認められていません。 indicesは、これらの式を合理的な方法で扱おうとします; しかしながら、そんな非合法な式上で動くようにコールされた時は その振る舞いは未定義と考えなければいけません。

Categories:  Package itensor

関数: rename  
    rename (expr)  
    rename (expr, count)

もしオプションの二番目の引数が省略されたら、 exprと同値な、しかし、各項に対して集合 [%1, %2,...]から選ばれたダミー添字を持つ式を返します。 そうでないなら、ダミー添字を countの値で始まるようインデックスします。 積の中のそれぞれのダミー添字は異なります。 和に関しては renameは各項毎にカウンタが再設定されるように和の中の各項上で作用します。 この方法で renameはテンソル整理器として利用できます。 加えて、(もしallsymtrueなら、) 添字を flipflagの値に依存して共変または反変添字に関して、 英数字順に並び替えます。 もし flipflagfalseなら、 添字は反変添字の順に従ってリネームされます。 もし flipflagtrueなら、 リネームは共変添字の順に従って起こるでしょう。 2つのリネームの組み合わせた効果が、それ自身によって、 どちらか1つよりも更に式を簡単にすることがしばしば起こります。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) allsym:true;
(%o2)                                true
(%i3) g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%4],[%3])*
ichr2([%2,%3],[u])*ichr2([%5,%6],[%1])*ichr2([%7,r],[%2])-
g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%2],[u])*
ichr2([%3,%5],[%1])*ichr2([%4,%6],[%3])*ichr2([%7,r],[%2]),noeval$
(%i4) expr:ishow(%)$
       %4 %5  %6 %7      %3         u          %1         %2
(%t4) g      g      ichr2      ichr2      ichr2      ichr2
                         %1 %4      %2 %3      %5 %6      %7 r

        %4 %5  %6 %7      u          %1         %3         %2
     - g      g      ichr2      ichr2      ichr2      ichr2
                          %1 %2      %3 %5      %4 %6      %7 r
(%i5) flipflag:true;
(%o5)                                true
(%i6) ishow(rename(expr))$
       %2 %5  %6 %7      %4         u          %1         %3
(%t6) g      g      ichr2      ichr2      ichr2      ichr2
                         %1 %2      %3 %4      %5 %6      %7 r

        %4 %5  %6 %7      u          %1         %3         %2
     - g      g      ichr2      ichr2      ichr2      ichr2
                          %1 %2      %3 %4      %5 %6      %7 r
(%i7) flipflag:false;
(%o7)                                false
(%i8) rename(%th(2));
(%o8)                                  0
(%i9) ishow(rename(expr))$
       %1 %2  %3 %4      %5         %6         %7        u
(%t9) g      g      ichr2      ichr2      ichr2     ichr2
                         %1 %6      %2 %3      %4 r      %5 %7

        %1 %2  %3 %4      %6         %5         %7        u
     - g      g      ichr2      ichr2      ichr2     ichr2
                          %1 %3      %2 %6      %4 r      %5 %7

Categories:  Package itensor

関数: show (expr)

下付き添字として共変インデックス、上付き添字として反変インデックスを持つよう、 インデックスされたオブジェクトと一緒に exprを表示します。 微分インデックスは下付き添字として表示され、 コンマによって共変インデックスと区別されます。

オプション変数: flipflag

デフォルト値: false

もし falseなら反変添字の順に従って、 そうでないなら、共変添字の順に従って、添字をリネームします。

もし flipflagfalseなら、 renameは左から右に現れるよう反変添字のリストを形成します (もし trueなら共変添字について同様に)。 リストの最初のダミー添字は %1に、次は %2にというように、リネームします。 そして、 renameの後、並び替えが起こります。 (renameの下の例を参照してください。)

Categories:  Package itensor

関数: defcon  
    defcon (tensor_1)  
    defcon (tensor_1, tensor_2, tensor_3)

tensor_1tensor_2の積の縮約が適切な添字を持つ tensor_3に帰着するというプロパティを tensor_1に与えます。 もし引数が tensor_11つだけ与えれたなら、 適切な添字を持つ任意の添字付きオブジェクト (my_tensorとします)との tensor_1の積の縮約はその名前、すなわちmy_tensorと、 実行された縮約を反映した添字の新しい集合を持つ添字付きオブジェクトをもたらします。 例えば、もし imetric:gなら、 defcon(g)は計量テンソルとの縮約を通して添字の上げ下げを実行します。 1つ以上の defconを同じ添字付きオブジェクトに関して与えることができます; 特定の縮約に関して適用する最新のものが使われます。 contractionsdefconで縮約プロパティを与えられたそれら添字付きオブジェクトのリストです。

Categories:  Package itensor

関数: remcon  
    remcon (tensor_1, ..., tensor_n)  
    remcon (all)

(tensor_1, ..., tensor_n)からすべての縮約プロパティを取り除きます。 remcon(all)はすべての添字付きオブジェクトからすべての縮約プロパティを取り除きます。

Categories:  Package itensor

関数: contract (expr)

和と積の任意の組み合わせであり得る exprに関してテンソル縮約を実行します。 この関数は defcon関数に与えられた情報を使います。 最高の結果として exprは完全に展開されなければいけません。 もし項の分母の中に変数がないなら、 ratexpandは和の積やべきを展開する最速の方法です。 もし GCD消去が不要なら、 gcdスイッチは falseでなければいけません。

Categories:  Package itensor

関数: indexed_tensor (tensor)

ichr1, ichr2, icurvatureと合わせて組み込みの値が既に存在する tensorに成分を割り当てる前に実行しなければいけません。 icurvatureの下の例を参照してください。

Categories:  Package itensor

関数: components (tensor, expr)

tensorの成分の値を与える式 exprに添字値を割り当てることを許します。 その添字のすべてを伴って何かが起こるときはいつでも、これらは自動的にテンソルに代入されます。 テンソルは形式 t([...],[...])でなければいけません。 ここで形式 t([...],[...])の中のリストのいずれかは空であり得えます。 exprtensorと同じ自由添字を持つ他のオブジェクトを含む任意の添字付き式であり得ます。 成分がダミー添字を含む計量テンソルへ値を割り当てるのに使われる時、 複数のダミー添字の生成を避けるようにこれらの添字を定義するように注意しなければいけません。 この割り当ての削除には関数 remcompsを使います。

componentsはテンソル価についてだけ気にして、 特別な添字順序について気にしないことを覚えておくことは重要です。 このように、成分を、例えば x([i,-j],[]), x([-j,i],[])または x([i],[j])に割り当てることはすべて同じ結果を生成します。 すなわち、価 (1,1)を持つ xと名付けられたテンソルに割り当てられた成分を生成します。

成分は4つの方法で添字付き式に割り当てることができます。 そのうちの2つは componentsコマンドの使用を含みます:

1) 添字付き式として。例えば:

 
(%i2) components(g([],[i,j]),e([],[i])*p([],[j]))$
(%i3) ishow(g([],[i,j]))$
                                      i  j
(%t3)                                e  p

2) 行列として:

 
(%i5) lg:-ident(4)$lg[1,1]:1$lg;
                            [ 1   0    0    0  ]
                            [                  ]
                            [ 0  - 1   0    0  ]
(%o5)                       [                  ]
                            [ 0   0   - 1   0  ]
                            [                  ]
                            [ 0   0    0   - 1 ]
(%i6) components(g([i,j],[]),lg);
(%o6)                                done
(%i7) ishow(g([i,j],[]))$
(%t7)                                g
                                      i j
(%i8) g([1,1],[]);
(%o8)                                  1
(%i9) g([4,4],[]);
(%o9)                                 - 1

3) 関数として。 Maxima関数を使って添字に基づいたテンソルの成分を指定することができます。 例えば、以下のコードは、 もし hが同じ数の共変添字と反変添字を持ち、微分添字を持たないなら、 kdeltahに割り当て、そうでないなら gを割り当てます:

 
(%i4) h(l1,l2,[l3]):=if length(l1)=length(l2) and length(l3)=0
  then kdelta(l1,l2) else apply(g,append([l1,l2], l3))$
(%i5) ishow(h([i],[j]))$
                                          j
(%t5)                               kdelta
                                          i
(%i6) ishow(h([i,j],[k],l))$
                                     k
(%t6)                               g
                                     i j,l

4) Maximaのパターンマッチング機能、特に defruleapplyb1コマンドを使って:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) matchdeclare(l1,listp);
(%o2)                                done
(%i3) defrule(r1,m(l1,[]),(i1:idummy(),
      g([l1[1],l1[2]],[])*q([i1],[])*e([],[i1])))$

(%i4) defrule(r2,m([],l1),(i1:idummy(),
      w([],[l1[1],l1[2]])*e([i1],[])*q([],[i1])))$

(%i5) ishow(m([i,n],[])*m([],[i,m]))$
                                    i m
(%t5)                              m    m
                                         i n
(%i6) ishow(rename(applyb1(%,r1,r2)))$
                           %1  %2  %3 m
(%t6)                     e   q   w     q   e   g
                                         %1  %2  %3 n

Categories:  Package itensor

関数: remcomps (tensor)

components関数で割り当てられたすべての値を tensorからアンバインドします。

Categories:  Package itensor

関数: showcomps (tensor)

componentsコマンドを使って作られたようにテンソルの成分割り当てを表示します。 以下の例で明示されるように、行列が componentsを使って添字テンソルに割り当てられている時、 この関数は特に役に立ちます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) load(itensor);
(%o2)      /share/tensor/itensor.lisp
(%i3) lg:matrix([sqrt(r/(r-2*m)),0,0,0],[0,r,0,0],
                [0,0,sin(theta)*r,0],[0,0,0,sqrt((r-2*m)/r)]);
               [         r                                     ]
               [ sqrt(-------)  0       0              0       ]
               [      r - 2 m                                  ]
               [                                               ]
               [       0        r       0              0       ]
(%o3)          [                                               ]
               [       0        0  r sin(theta)        0       ]
               [                                               ]
               [                                      r - 2 m  ]
               [       0        0       0        sqrt(-------) ]
               [                                         r     ]
(%i4) components(g([i,j],[]),lg);
(%o4)                                done
(%i5) showcomps(g([i,j],[]));
                  [         r                                     ]
                  [ sqrt(-------)  0       0              0       ]
                  [      r - 2 m                                  ]
                  [                                               ]
                  [       0        r       0              0       ]
(%t5)      g    = [                                               ]
            i j   [       0        0  r sin(theta)        0       ]
                  [                                               ]
                  [                                      r - 2 m  ]
                  [       0        0       0        sqrt(-------) ]
                  [                                         r     ]
(%o5)                                false

showcompsコマンドは 2よりも高い階数のテンソルの成分も表示することができます。

Categories:  Package itensor

関数: idummy ()

icounterを1つ増やし、形式 %nの添字を値として返します。 ここで nは正の整数です。 これは式を形成する際必要なダミー添字が既に使用中の添字とぶつからないことを保証します。 (indicesの下の例を参照してください。)

Categories:  Package itensor

オプション変数: idummyx

デフォルト値: %

ダミー添字の接頭辞です。 (indicesの下の例を参照してください。)

Categories:  Package itensor

オプション変数: icounter

デフォルト値: 1

テンソルパッケージで次のダミー添字を生成する際使われる数値接尾を決定します。 接頭辞はオプション idummy (デフォルト: %)で決定されます。

Categories:  Package itensor

関数: kdelta (L1, L2)

共変添字のリスト L1と反変添字のリスト L2を使った itensorパッケージで定義された 一般化された Kroneckerのデルタ関数です。 kdelta([i],[j])は通常の Kroneckerデルタを返します。 コマンド ev(expr,kdelta)kdelta([],[])を多様体の次元に含む式の評価をもたらします。

この表記法の乱用となることですが、 itensorkdeltaが2つの共変添字だけ、または、2つの反変添字だけを持つことも許し、 事実上、共(反)変「単位行列」を供給します。 これは厳密にはプログラミング目的としてみなされ、 kdelta([i,j],[])が有効なテンソルオブジェクトだということを 意味するつもりではありません。

Categories:  Package itensor

関数: kdels (L1, L2)

いくつかの計算で使われる、対称化された Kroneckerデルタ。 例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) kdelta([1,2],[2,1]);
(%o2)                                 - 1
(%i3) kdels([1,2],[2,1]);
(%o3)                                  1
(%i4) ishow(kdelta([a,b],[c,d]))$
                             c       d         d       c
(%t4)                  kdelta  kdelta  - kdelta  kdelta
                             a       b         a       b
(%i4) ishow(kdels([a,b],[c,d]))$
                             c       d         d       c
(%t4)                  kdelta  kdelta  + kdelta  kdelta
                             a       b         a       b

Categories:  Package itensor

関数: levi_civita (L)

リスト Lが整数の偶置換から成るなら 1を返し、 Lが奇置換なら成るなら -1を返し、 Lのいくつかの添字が繰り返しなら 0を返す置換(別名Levi-Civita)テンソルです。

Categories:  Package itensor

関数: lc2kdt (expr)

Levi-Civitaシンボルを含む式を整理し、可能ならこれらを Kroneckerデルタ式に変換します。 この関数と単に Levi-Civitaシンボルを評価することの主な違いは、 直接評価はしばしば数値添字を含む Kronecker式に帰着することです。 これは更なる整理を妨げるので、しばしば望ましくないことです。 lc2kdt関数はこの問題を避けて、 renamecontractを使って更に容易に整理される式をもたらします。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) expr:ishow('levi_civita([],[i,j])
                 *'levi_civita([k,l],[])*a([j],[k]))$
                                  i j  k
(%t2)                  levi_civita    a  levi_civita
                                       j            k l
(%i3) ishow(ev(expr,levi_civita))$
                                  i j  k       1 2
(%t3)                       kdelta    a  kdelta
                                  1 2  j       k l
(%i4) ishow(ev(%,kdelta))$
             i       j         j       i   k
(%t4) (kdelta  kdelta  - kdelta  kdelta ) a
             1       2         1       2   j

                               1       2         2       1
                        (kdelta  kdelta  - kdelta  kdelta )
                               k       l         k       l
(%i5) ishow(lc2kdt(expr))$
                     k       i       j    k       j       i
(%t5)               a  kdelta  kdelta  - a  kdelta  kdelta
                     j       k       l    j       k       l
(%i6) ishow(contract(expand(%)))$
                                 i           i
(%t6)                           a  - a kdelta
                                 l           l

lc2kdt関数は時々計量テンソルを利用します。 もし前もって計量テンソルが imetricで定義されていなかったなら、 これはエラーになります。

 
(%i7) expr:ishow('levi_civita([],[i,j])
                 *'levi_civita([],[k,l])*a([j,k],[]))$
                                 i j            k l
(%t7)                 levi_civita    levi_civita    a
                                                     j k
(%i8) ishow(lc2kdt(expr))$
Maxima encountered a Lisp error:

 Error in $IMETRIC [or a callee]:
 $IMETRIC [or a callee] requires less than two arguments.

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
(%i9) imetric(g);
(%o9)                                done
(%i10) ishow(lc2kdt(expr))$
         %3 i       k   %4 j       l     %3 i       l   %4 j
(%t10) (g     kdelta   g     kdelta   - g     kdelta   g
                    %3             %4               %3
              k
        kdelta  ) a
              %4   j k
(%i11) ishow(contract(expand(%)))$
                                  l i    l i  j
(%t11)                           a    - g    a
                                              j

Categories:  Package itensor

関数: lc_l

未評価の Levi-Civitaシンボル (levi_civita)を含む式のために使われる整理ルール。 lc_uと組み合わせて、 levi_civitaの評価より効率的にたくさんの式を整理するのに使うことができます。

例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) el1:ishow('levi_civita([i,j,k],[])*a([],[i])*a([],[j]))$
                             i  j
(%t2)                       a  a  levi_civita
                                             i j k
(%i3) el2:ishow('levi_civita([],[i,j,k])*a([i])*a([j]))$
                                       i j k
(%t3)                       levi_civita      a  a
                                              i  j
(%i4) canform(contract(expand(applyb1(el1,lc_l,lc_u))));
(%t4)                                  0
(%i5) canform(contract(expand(applyb1(el2,lc_l,lc_u))));
(%t5)                                  0

Categories:  Package itensor

関数: lc_u

未評価の Levi-Civitaシンボル (levi_civita)を含む式のために使われる整理ルール。 lc_lと組み合わせて、 levi_civitaの評価より効率的にたくさんの式を整理するのに使うことができます。 詳しくは lc_lを参照してください。

Categories:  Package itensor

関数: canten (expr)

名前を変えて (renameを参照してください)、ダミー添字を置換することで、 exprを整理します。 renameは微分がないテンソル積の和に制限されます。 本当に限定されていて、 canformが要求された整理を実行する能力がない時だけ使われるはずです。

canten関数は、引数が添字が完全に対称な式の時だけ数学的に正確な結果を返します。 この理由から、cantenは、もし allsymtrueに設定されてないならエラーを返します。

Categories:  Package itensor

関数: concan (expr)

cantenに似ていますが、添字縮約も実行します。

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.2 Tensor symmetries

オプション変数: allsym

デフォルト値: false

もし trueなら、 すべての添字付きオブジェクトは共変、反変添字のすべてに関して対称と仮定されます。 もし falseなら、これらの添字に関していかなる種類の対称性も仮定されません。 iframe_flagtrueに設定されない限り、 微分添字はいつも対称と取られます。

Categories:  Package itensor

関数: decsym (tensor, m, n, [cov_1, cov_2, ...], [contr_1, contr_2, ...])

m個の共変添字と n個の反変添字を持つ tensorに関する対称プロパティを宣言します。 cov_icontr_iは それぞれ共変添字と反変添字の間の対称関係を表す擬似関数です。 これらは形式 symoper(index_1, index_2,...)を取ります。 ここで symopersymanti, cycのいずれかで、 index_itensorの添字の位置を示す整数です。 これは、 tensorindex_iに関してそれぞれ対称、反対称、巡回であると宣言します。 symoper(all)も対称条件に従う添字すべてを示す有効な形式です。 例えば、5つの共変添字を持つオブジェクト bが与えられたとして、 decsym(b,5,3,[sym(1,2),anti(3,4)],[cyc(all)])は、 bが一番目と二番目の共変添字に対して対称であり、 三番目、四番目の共変添字に対して反対称であり、 反変添字すべてに対して巡回的であると宣言します。 対称宣言のリストのどれかは空であり得ます。 以下の例で示すように式整理を実行する関数は canformです。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) expr:contract( expand( a([i1, j1, k1], [])
           *kdels([i, j, k], [i1, j1, k1])))$
(%i3) ishow(expr)$
(%t3)         a      + a      + a      + a      + a      + a
               k j i    k i j    j k i    j i k    i k j    i j k
(%i4) decsym(a,3,0,[sym(all)],[]);
(%o4)                                done
(%i5) ishow(canform(expr))$
(%t5)                              6 a
                                      i j k
(%i6) remsym(a,3,0);
(%o6)                                done
(%i7) decsym(a,3,0,[anti(all)],[]);
(%o7)                                done
(%i8) ishow(canform(expr))$
(%t8)                                  0
(%i9) remsym(a,3,0);
(%o9)                                done
(%i10) decsym(a,3,0,[cyc(all)],[]);
(%o10)                               done
(%i11) ishow(canform(expr))$
(%t11)                        3 a      + 3 a
                                 i k j      i j k
(%i12) dispsym(a,3,0);
(%o12)                     [[cyc, [[1, 2, 3]], []]]

Categories:  Package itensor

関数: remsym (tensor, m, n)

m個の共変添字と n個の反変添字を持つ tensorからすべての対称プロパティを取り除きます。

Categories:  Package itensor

関数: canform  
    canform (expr)  
    canform (expr, rename)

ダミー添字をリネームして、 それらに課せられた対称条件によって指令されたようにすべての添字を並べ替えることで、 exprを整理します。 もし allsymtrueなら、 すべての添字は対称と仮定され、 そうでないなら decsym宣言が提供する対称情報が使われます。 ダミー添字は rename関数に関するものと同じ方法でリネームされます。 canformが大きな式に適用される時、 計算にかなりの時間が費やされるかもしれません。 この時間は最初に式に対して renameをコールすることで短くできます。 decsymの下の例も参照してください。 注意: canformはいつも数学的に正しい結果を返しますが、 式を最も簡単な形式に完全に整理できないかもしれません。

オプションの二番目のパラメータ renameは、 もし falseに設定されたなら、リネームを抑制します。

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.3 Indicial tensor calculus

関数: diff (expr, v_1, [n_1, [v_2, n_2] ...])

itensorのための能力に関して拡張された通常の Maxima微分関数です。 v_1に関して n_1階、 v_2に関して n_2階、 という exprの微分を取ります。 テンソルパッケージでは v_iが 1から変数 dimの値までの整数であるように関数が修正されています。 これによって、 微分がリスト vect_coordsv_i番目の要素に関して実行されます。 もし vect_coordsがアトム変数にバインドされているなら、 v_iを下付き添字に持つ変数が微分変数として使われます。 これは座標名や、x[1], x[2], ...のような下付き添字付き名前の配列を使うことを可能にします。

更に、 diffには添字付き変数に関する微分を計算する能力が追加されています。 特にテンソルパッケージは 計量テンソルと、計量テンソルやその一階微分、二階微分に関する微分を含む 式を微分する方法を知っています。 この能力は重力理論の Lagrange形式を考える時、 特に役に立ちます。 作用原理から Einsteinテンソルと場の方程式を演繹することを可能にします。

Categories:  Package itensor

関数: idiff (expr, v_1, [n_1, [v_2, n_2] ...])

添字微分。 独立変数に関して微分する diffと異なり、 idiff)は座標に関して微分するのに使うことができます。 添字付きオブジェクトに関しては 結果的に、これは v_iを微分添字として追加することになります。 iframe_flagtrueに設定されていない限り 続いて,微分添字が並び替えられます。

idiffは計量テンソルの行列式も微分することができます。 従って、もし imetricGにバインドされていたら、 idiff(determinant(g),k)は ダミー添字 %iが適当に選ばれて 2 * determinant(g) * ichr2([%i,k],[%i])を返します。

Categories:  Package itensor

関数: liediff (v, ten)

ベクトル場 vに対してテンソル式 tenの Lie微分を計算します。 tenは任意の添字付きテンソル式でなければいけません; vはベクトル場の(添字なしの)名前でなければいけません。 例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(liediff(v,a([i,j],[])*b([],[k],l)))$
       k    %2            %2          %2
(%t2) b   (v   a       + v   a     + v   a    )
       ,l       i j,%2    ,j  i %2    ,i  %2 j

                          %1  k        %1  k      %1  k
                      + (v   b      - b   v    + v   b   ) a
                              ,%1 l    ,l  ,%1    ,l  ,%1   i j

Categories:  Package itensor

関数: rediff (ten)

テンソル式 tenの中の idiffコマンドすべてを評価します。

Categories:  Package itensor

関数: undiff (expr)

exprと同値ですが、 添字付きオブジェクトの微分すべてが idiff関数の名詞形で置き換えられた式を返します。 もし微分が実行されたら引数はその添字付きオブジェクトをもたらしたでしょう。 微分された添字付きオブジェクトを exprをもたらすある関数定義で置き換えて、 その後、 ev(expr, idiff)で微分を実行したい時、 これは役に立ちます。

Categories:  Package itensor

関数: evundiff (expr)

undiffの実行と同値ですが、 evrediffがあとに続きます。

この演算のポイントは微分形式で直接評価できない式を簡単に評価することです。 例えば、以下はエラーをもたらします:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) icurvature([i,j,k],[l],m);
Maxima encountered a Lisp error:

 Error in $ICURVATURE [or a callee]:
 $ICURVATURE [or a callee] requires less than three arguments.

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.

しかし、もし icurvatureが名詞形で入っているなら、 evundiffを使って評価できます:

 
(%i3) ishow('icurvature([i,j,k],[l],m))$
                                         l
(%t3)                          icurvature
                                         i j k,m
(%i4) ishow(evundiff(%))$
             l              l         %1           l           %1
(%t4) - ichr2        - ichr2     ichr2      - ichr2       ichr2
             i k,j m        %1 j      i k,m        %1 j,m      i k

             l              l         %1           l           %1
      + ichr2        + ichr2     ichr2      + ichr2       ichr2
             i j,k m        %1 k      i j,m        %1 k,m      i j

注意: Maximaの以前のバージョンでは、 Christoffel記号の微分形式も評価できませんでした。 これは現在修正されています。 だから evundiffはもはやこのような式に関しては不要です:

 
(%i5) imetric(g);
(%o5)                                done
(%i6) ishow(ichr2([i,j],[k],l))$
       k %3
      g     (g         - g         + g        )
              j %3,i l    i j,%3 l    i %3,j l
(%t6) -----------------------------------------
                          2

                         k %3
                        g     (g       - g       + g      )
                         ,l     j %3,i    i j,%3    i %3,j
                      + -----------------------------------
                                         2

Categories:  Package itensor

関数: flush (expr, tensor_1, tensor_2, ...)

exprにおいて微分添字を持たない tensor_iをすべて0にします。

Categories:  Package itensor

関数: flushd (expr, tensor_1, tensor_2, ...)

exprにおいて、 微分添字を持つ tensor_iをすべて0にします。

Categories:  Package itensor

関数: flushnd (expr, tensor, n)

以下の例で例示されるように、 exprにおいて n以上の微分添字を持つ微分されたオブジェクト tensorをすべて 0にします。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(a([i],[J,r],k,r)+a([i],[j,r,s],k,r,s))$
                                J r      j r s
(%t2)                          a      + a
                                i,k r    i,k r s
(%i3) ishow(flushnd(%,a,3))$
                                     J r
(%t3)                               a
                                     i,k r

Categories:  Package itensor

関数: coord (tensor_1, tensor_2, ...)

名前が tensor_iの1つである反変ベクトルの微分が Kroneckerデルタをもたらすという座標微分プロパティを tensor_iに与えます。 例えば、 もし coord(x)が実行されたら、 idiff(x([],[i]),j)kdelta([i],[j])を与えます。 coordはこのプロパティを持つ添字付きオブジェクトすべてのリストです。

Categories:  Package itensor

関数: remcoord  
    remcoord (tensor_1, tensor_2, ...)  
    remcoord (all)

tensor_iから関数 coordがもたらした座標微分プロパティを削除します。 remcoord(all)は添字付きオブジェクトすべてからこのプロパティを削除します。

Categories:  Package itensor

関数: makebox (expr)

showと同じように exprを表示します; しかし、 exprに現れるテンソル d'Alembert演算子はすべて記号 []を使って示されます。 例えば、 []p([m],[n])g([],[i,j])*p([m],[n],i,j)を表します。

Categories:  Package itensor

関数: conmetderiv (expr, tensor)

計量テンソルの共変と反変形式両方(現在の制約)の常微分を含む式を整理します。 例えば、 以下に見られるように、 conmetderivは反変計量テンソルの微分を Christoffelシンボルに結びつけます:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(g([],[a,b],c))$
                                      a b
(%t2)                                g
                                      ,c
(%i3) ishow(conmetderiv(%,g))$
                         %1 b      a       %1 a      b
(%t3)                 - g     ichr2     - g     ichr2
                                   %1 c              %1 c

Categories:  Package itensor

関数: simpmetderiv  
    simpmetderiv (expr)  
    simpmetderiv (expr[, stop])

計量テンソルの微分の積を含む式を整理します。 特に simpmetderivは2つの恒等式を知っています:

 
   ab        ab           ab                 a
  g   g   + g   g     = (g   g  )   = (kdelta )   = 0
   ,d  bc        bc,d         bc ,d          c ,d

従って、

 
   ab          ab
  g   g   = - g   g
   ,d  bc          bc,d

 
  ab          ab
 g   g     = g   g
  ,j  ab,i    ,i  ab,j

これは Christoffel記号の対称性の結果です。

simpmetderiv関数はオプションパラメータを1つ取ります。 オプションパラメータがある時は、 積の式の中に(整理のための)代入が1つうまくいくと関数が停止します。 simpmetderiv関数は "正準"順序を積添字に適用する方法を決めるグローバル変数 flipflagも利用します。

まとめると、これらの機能は 他の方法では遂行困難か不可能な強力な式整理を達成するのに使うことができます。 これについて、 simpmetderivの部分整理機能を明示的に使って縮約式を得る 以下の例を通じて例示します:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) imetric(g);
(%o2)                                done
(%i3) ishow(g([],[a,b])*g([],[b,c])*g([a,b],[],d)*g([b,c],[],e))$
                             a b  b c
(%t3)                       g    g    g      g
                                       a b,d  b c,e
(%i4) ishow(canform(%))$

errexp1 has improper indices
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i5) ishow(simpmetderiv(%))$
                             a b  b c
(%t5)                       g    g    g      g
                                       a b,d  b c,e
(%i6) flipflag:not flipflag;
(%o6)                                true
(%i7) ishow(simpmetderiv(%th(2)))$
                               a b  b c
(%t7)                         g    g    g    g
                               ,d   ,e   a b  b c
(%i8) flipflag:not flipflag;
(%o8)                                false
(%i9) ishow(simpmetderiv(%th(2),stop))$
                               a b  b c
(%t9)                       - g    g    g      g
                                    ,e   a b,d  b c
(%i10) ishow(contract(%))$
                                    b c
(%t10)                           - g    g
                                    ,e   c b,d

Weylテンソルの縮約を整理するために simpmetderivconmetderivを一緒に使う例として、 weyl.demも参照してください。

Categories:  Package itensor

関数: flush1deriv (expr, tensor)

exprの中の、微分添字を 1つだけ持つ tensorをすべて0にします。

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.4 Tensors in curved spaces

関数: imetric (g)
システム変数: imetric

変数 imetric:gを割り当てることで計量を指定します。 更に、コマンド defcon(g),defcon(g, g, kdelta)を実行することで計量 gの縮約プロパティを設定します。 (デフォルトではバインドされていない)変数 imetricimetric(g)コマンドが割り当てる計量にバインドします。

Categories:  Package itensor

関数: idim (n)

計量の次元を設定します。 与えられた次元で Levi-Civita記号の反対称プロパティも初期化します。

Categories:  Package itensor

関数: ichr1 ([i, j, k])

以下の定義を介して第一種 Christoffel記号をもたらします。

 
       (g      + g      - g     )/2 .
         ik,j     jk,i     ij,k

特定の計量で Christoffel記号を評価するには、 chr2の下の例のように変数 imetricが名前を割り当てられなければいけません。

Categories:  Package itensor

関数: ichr2 ([i, j], [k])

以下の定義を介して第二種 Christoffel記号をもたらします。

 
                       ks
   ichr2([i,j],[k]) = g    (g      + g      - g     )/2
                             is,j     js,i     ij,s

Categories:  Package itensor

関数: icurvature ([i, j, k], [h])

第二種 Christoffel記号(ichr2)を使った Riemann曲率テンソルをもたらします。 以下の表記法が使われます:

 
            h             h            h         %1         h
  icurvature     = - ichr2      - ichr2     ichr2    + ichr2
            i j k         i k,j        %1 j      i k        i j,k
                            h          %1
                     + ichr2      ichr2
                            %1 k       i j

Categories:  Package itensor

関数: covdiff (expr, v_1, v_2, ...)

第二種 Christoffel記号(ichr2)を使って、 変数 v_iに対する exprの共変微分をもたらします。 これらを評価するには、 ev(expr,ichr2)を使わなければ行けません。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) entertensor()$
Enter tensor name: a;
Enter a list of the covariant indices: [i,j];
Enter a list of the contravariant indices: [k];
Enter a list of the derivative indices: [];
                                      k
(%t2)                                a
                                      i j
(%i3) ishow(covdiff(%,s))$
             k         %1     k         %1     k
(%t3)     - a     ichr2    - a     ichr2    + a
             i %1      j s    %1 j      i s    i j,s

             k     %1
      + ichr2     a
             %1 s  i j
(%i4) imetric:g;
(%o4)                                  g
(%i5) ishow(ev(%th(2),ichr2))$
         %1 %4  k
        g      a     (g       - g       + g      )
                i %1   s %4,j    j s,%4    j %4,s
(%t5) - ------------------------------------------
                            2
    %1 %3  k
   g      a     (g       - g       + g      )
           %1 j   s %3,i    i s,%3    i %3,s
 - ------------------------------------------
                       2
    k %2  %1
   g     a    (g        - g        + g       )
          i j   s %2,%1    %1 s,%2    %1 %2,s     k
 + ------------------------------------------- + a
                        2                         i j,s
(%i6)

Categories:  Package itensor

関数: lorentz_gauge (expr)

反変添字と同一の微分添字を持つ exprの中で 添字付きオブジェクトすべてに0を代入することで、 Lorentz条件を課します。

Categories:  Package itensor

関数: igeodesic_coords (expr, name)

exprの中の未微分 Christoffel記号と計量テンソルの一階微分を消すようにします。 igeodesic_coords関数での nameは (もし expr)の中で現れるなら) 計量 nameを参照します。 一方で、接続係数は 名前 ichr1ichr2で呼ばれなければいけません。 以下の例は、 igeodesic_coords関数を使った、 Riemann曲率テンソルが満たす巡回恒等式の検証を例示します。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(icurvature([r,s,t],[u]))$
             u            u         %1         u
(%t2) - ichr2      - ichr2     ichr2    + ichr2
             r t,s        %1 s      r t        r s,t

                                              u         %1
                                       + ichr2     ichr2
                                              %1 t      r s
(%i3) ishow(igeodesic_coords(%,ichr2))$
                                 u            u
(%t3)                       ichr2      - ichr2
                                 r s,t        r t,s
(%i4) ishow(igeodesic_coords(icurvature([r,s,t],[u]),ichr2)+
            igeodesic_coords(icurvature([s,t,r],[u]),ichr2)+
            igeodesic_coords(icurvature([t,r,s],[u]),ichr2))$
             u            u            u            u
(%t4) - ichr2      + ichr2      + ichr2      - ichr2
             t s,r        t r,s        s t,r        s r,t

                                             u            u
                                      - ichr2      + ichr2
                                             r t,s        r s,t
(%i5) canform(%);
(%o5)                                  0

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.5 Moving frames

今では Maximaは 動標構(moving frame)を使って計算を実行する能力があります。 これらは直交標構(テトラド、四脚場)か任意系であり得ます。

標構 (frame)を使うには、 最初に iframe_flagtrueに設定しなければいけません。 これにより計算内で Christoffel記号, ichr1ichr2がもっと一般的な標構 (frame)の接続係数 icc1icc2に置き換えられることになります。 特に covdifficurvatureの振る舞いが変わります。

系は 2つのテンソルで定義されます: 逆標枠場 (ifri, 双対基底四脚場)と標構計量 (frame metric) ifg。 標構計量は直交標構の単位行列、すなわち、 Minkowski時空での直交標構の Lorentz計量です。 逆標枠場は標構基底(単位ベクトル)を定義します。 標枠と標構計量に縮約プロパティが定義されます。

iframe_flagが trueなら、 imetricが上付き添字と下付き添字に関して定義する計量の代わりに たくさんの itensor式が標構計量 ifgを使います。

重要: 変数 iframe_flagtrueに設定することは defconimetricのコールによって定義された計量の縮約プロパティを未定義に戻しません。 もし標枠場が使われるなら、 imetric関数を呼び出さず、 変数 imetricに名前を割り当てて計量を定義することが最良です。

Maximaはこれら2つのテンソルを使って、 接続係数 (icc1icc2)の一部を形成する 標構係数 (ifc1ifc2)を定義します。 以下の例がそれを例示します:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) iframe_flag:true;
(%o2)                                true
(%i3) ishow(covdiff(v([],[i]),j))$
                               i        i     %1
(%t3)                         v   + icc2     v
                               ,j       %1 j
(%i4) ishow(ev(%,icc2))$
                               %1     i       i
(%t4)                         v   ifc2     + v
                                      %1 j    ,j
(%i5) ishow(ev(%,ifc2))$
                          %1    i %2                i
(%t5)                    v   ifg     ifc1        + v
                                         %1 j %2    ,j
(%i6) ishow(ev(%,ifc1))$
            %1    i %2
           v   ifg     (ifb        - ifb        + ifb       )
                           j %2 %1      %2 %1 j      %1 j %2     i
(%t6)      -------------------------------------------------- + v
                                   2                             ,j
(%i7) ishow(ifb([a,b,c]))$
                                                   %3    %4
(%t7)               (ifri        - ifri       ) ifr   ifr
                         a %3,%4       a %4,%3     b     c

もし iframe_bracket_formフラグが falseに設定されているなら 標構ブラケット (frame bracket) (ifb)を計算するのに代わりの方法を使います:

 
(%i8) block([iframe_bracket_form:false],ishow(ifb([a,b,c])))$
                                %6    %5        %5      %6
(%t8)              ifri     (ifr   ifr     - ifr     ifr  )
                       a %5     b     c,%6      b,%6    c

関数: iframes ()

Maximaのこのバージョン以来、 標構ブラケット (ifb)と同じように ifrifriに関する縮約恒等式がいつも定義されます。 この関数は何もしません。

Categories:  Package itensor

変数: ifb

標構ブラケット(frame bracket)。 標構計量の接続係数への寄与が標構ブラケットを使って表されます:

 
          - ifb      + ifb      + ifb
               c a b      b c a      a b c
ifc1    = --------------------------------
    abc                  2

標構ブラケット自身は 標枠と標構計量を使って定義されます。 frame_bracket_formの値に依存して 2つの代わりの計算方法が使われます。 もし true (デフォルト)か itorsion_flagtrueなら:

 
          d      e                                      f
ifb =  ifr    ifr   (ifri      - ifri      - ifri    itr   )
   abc    b      c       a d,e       a e,d       a f    d e


そうでないなら:

 
             e      d        d      e
ifb    = (ifr    ifr    - ifr    ifr   ) ifri
   abc       b      c,e      b,e    c        a d

Categories:  Package itensor

変数: icc1

第一種接続係数。 itensorでは以下のように定義されます。

 
icc1    = ichr1    - ikt1    - inmc1
    abc        abc       abc        abc

この式では、 iframe_flagが trueなら、 Christoffel記号 ichr1が標構接続係数 ifc1に置き換えられます。 itorsion_flagfalseなら、 ikt1は省略されます。 標構基底が使われるなら、 ねじれが標構ブラケットの一部として既に計算されているので、 その時にも ikt1は省略されます。 最後に、 inonmet_flagfalseなら inmc1は存在しません。

Categories:  Package itensor

変数: icc2

第二種接続係数。 itensorでは以下のように定義されます。

 
    c         c        c         c
icc2   = ichr2   - ikt2   - inmc2
    ab        ab       ab        ab

この式では、 iframe_flagが trueなら、 Christoffel記号 ichr2が標構接続係数 ifc2に置き換えられます。 itorsion_flagfalseなら、 ikt2は省略されます。 標構基底が使われるなら、 ねじれが標構ブラケットの一部として既に計算されているので、 その時にも ikt1は省略されます。 最後に、 inonmet_flagfalseなら、 inmc1は存在しません。

Categories:  Package itensor

変数: ifc1

(Ricci回転係数としても知られている)第一種標構係数。 このテンソルは標構計量の第一種接続係数への寄与を表します。 以下のように定義されます:

 
          - ifb      + ifb      + ifb
               c a b      b c a      a b c
ifc1    = --------------------------------
    abc                   2


Categories:  Package itensor

変数: ifc2

第二種標構係数。 このテンソルは標構計量の第一種接続係数への寄与を表します。 必要に応じて、標構ブラケット (ifb)の 適切な上付き、下付き添字での置換として定義されます:

 
    c       cd
ifc2   = ifg   ifc1
    ab             abd

Categories:  Package itensor

変数: ifr

標枠。 標構計量(ifg)を形成するために逆標構場 (ifri)を縮約します。

Categories:  Package itensor

変数: ifri

逆標構場。 (双対基底ベクトル)標構基底を指定します。 標構計量と一緒に標構に基づいた計算すべての基底を形成します。

Categories:  Package itensor

変数: ifg

標構計量。 kdeltaのデフォルトですが、 componentsを使って変えることができます。

Categories:  Package itensor

変数: ifgi

逆標構計量。 標構計量 (ifg)を kdeltaに縮約します。

Categories:  Package itensor

オプション変数: iframe_bracket_form

デフォルト値: true

標構ブラケット (ifb)が如何に計算されるか指定します。

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.6 Torsion and nonmetricity

Maximaは今では、ねじれと非計量性を考慮することができます。 フラグ itorsion_flagtrueに設定されている時、 ねじれの寄与が接続係数に加えられます。 同様に、フラグ inonmet_flagが trueの時、非計量性成分が含まれます。

変数: inm

非計量性ベクトル。 共形非計量性は計量テンソルの共変微分を通して定義されます。 inonmet_flagtrueに設定されている時 通常零の計量テンソルの共変微分は以下のように評価されます:

 
g     =- g  inm
 ij;k     ij   k

Categories:  Package itensor

変数: inmc1

非計量ベクトル成分の共変置換。 以下のように定義されます:

 
           g   inm  - inm  g   - g   inm
            ab    c      a  bc    ac    b
inmc1    = ------------------------------
     abc                 2

(もし標構計量を使うなら、ifggに代入します。)

Categories:  Package itensor

変数: inmc2

非計量ベクトル成分の反変置換。 inonmet_flagtrueなら接続係数で使われます。 以下のように定義されます:

 
                      c         c         cd
          -inm  kdelta  - kdelta  inm  + g   inm  g
     c        a       b         a    b          d  ab
inmc2   = -------------------------------------------
     ab                        2

(もし標構計量を使うなら、ifggに代入します。)

Categories:  Package itensor

変数: ikt1

(コントーションとしても知られる)ねじれテンソルの共変置換。 以下のように定義されます:

 
                  d           d       d
          -g   itr  - g    itr   - itr   g
            ad    cb    bd    ca      ab  cd
ikt1    = ----------------------------------
    abc                   2

(標構計量を使うなら、ifggに代入します。)

Categories:  Package itensor

変数: ikt2

(コントーションとしても知られる)ねじれテンソルの共変置換。 以下のように定義されます:

 
    c     cd
ikt2   = g   ikt1
    ab           abd

(標構計量を使うなら、ifggに代入します。)

Categories:  Package itensor

変数: itr

ねじれテンソル。 以下の例で例示されるように、 ねじれを伴う計量に関してスカラー関数上の繰り返される共変微分は計算されません:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) imetric:g;
(%o2)                                  g
(%i3) covdiff( covdiff( f( [], []), i), j)
                      - covdiff( covdiff( f( [], []), j), i)$
(%i4) ishow(%)$
                                   %4              %2
(%t4)                    f    ichr2    - f    ichr2
                          ,%4      j i    ,%2      i j
(%i5) canform(%);
(%o5)                                  0
(%i6) itorsion_flag:true;
(%o6)                                true
(%i7) covdiff( covdiff( f( [], []), i), j)
                      - covdiff( covdiff( f( [], []), j), i)$
(%i8) ishow(%)$
                           %8             %6
(%t8)             f    icc2    - f    icc2    - f     + f
                   ,%8     j i    ,%6     i j    ,j i    ,i j
(%i9) ishow(canform(%))$
                                   %1             %1
(%t9)                     f    icc2    - f    icc2
                           ,%1     j i    ,%1     i j
(%i10) ishow(canform(ev(%,icc2)))$
                                   %1             %1
(%t10)                    f    ikt2    - f    ikt2
                           ,%1     i j    ,%1     j i
(%i11) ishow(canform(ev(%,ikt2)))$
                      %2 %1                    %2 %1
(%t11)          f    g      ikt1       - f    g      ikt1
                 ,%2            i j %1    ,%2            j i %1
(%i12) ishow(factor(canform(rename(expand(ev(%,ikt1))))))$
                           %3 %2            %1       %1
                     f    g      g      (itr    - itr   )
                      ,%3         %2 %1     j i      i j
(%t12)               ------------------------------------
                                      2
(%i13) decsym(itr,2,1,[anti(all)],[]);
(%o13)                               done
(%i14) defcon(g,g,kdelta);
(%o14)                               done
(%i15) subst(g,nounify(g),%th(3))$
(%i16) ishow(canform(contract(%)))$
                                           %1
(%t16)                           - f    itr
                                    ,%1    i j

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.7 Exterior algebra

itensorパッケージは 完全反対称共変テンソル場上の演算を実行できます。 回数 (0,L)の完全反対称テンソル場は微分L形式に対応します。 これらのオブジェクト上で外積やウェッジ積として知られる乗算が定義されます。

不運にも、すべての作者がウェッジ積の定義に同意しません。 何人の作者は反対称の概念に対応した定義を好みます: これらの仕事では、2つのベクトル場のウェッジ積は、例えば以下のように定義されます。

 
            a a  - a a
             i j    j i
 a  /\ a  = -----------
  i     j        2

もっと一般的に、 p形式や q形式の積は以下のように定義されます。

 
                       1     k1..kp l1..lq
A       /\ B       = ------ D              A       B
 i1..ip     j1..jq   (p+q)!  i1..ip j1..jq  k1..kp  l1..lq

ここで DはKroneckerのデルタを表します。

しかし、他の作者は容積要素の概念に対応する"幾何的"定義を好みます:

 
a  /\ a  = a a  - a a
 i     j    i j    j i

そして一般的な場合、

 
                       1    k1..kp l1..lq
A       /\ B       = ----- D              A       B
 i1..ip     j1..jq   p! q!  i1..ip j1..jq  k1..kp  l1..lq

itensorはテンソル代数パッケージなので、 これら2つの定義の前者がより自然なもののようです。 しかし、多くの応用は後者の定義を使います。 このジレンマを解決するに、ウェッジ積の振る舞いを制御するフラグが実装されました: igeowedge_flagfalse (デフォルト)なら、 前者の "テンソル的"定義が使われ、そうでないなら,後者の"幾何的"定義が適用されます。

演算子: ~

ウェッジ積演算子はティルデ ~で示されれます。 これは二項演算子です。 引数は、スカラか、階数1の共変テンソル、 共変添字すべてに関して反対称と宣言された階数 lの共変テンソルのいずれかを含む式でなければいけません。

以下の例のように、 ウェッジ積演算子の振る舞いは igeowedge_flagフラグで制御されます:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(a([i])~b([j]))$
                                 a  b  - b  a
                                  i  j    i  j
(%t2)                            -------------
                                       2
(%i3) decsym(a,2,0,[anti(all)],[]);
(%o3)                                done
(%i4) ishow(a([i,j])~b([k]))$
                          a    b  + b  a    - a    b
                           i j  k    i  j k    i k  j
(%t4)                     ---------------------------
                                       3
(%i5) igeowedge_flag:true;
(%o5)                                true
(%i6) ishow(a([i])~b([j]))$
(%t6)                            a  b  - b  a
                                  i  j    i  j
(%i7) ishow(a([i,j])~b([k]))$
(%t7)                     a    b  + b  a    - a    b
                           i j  k    i  j k    i k  j

Categories:  Package itensor · Operators

演算子: |

縦線 |は"ベクトルの縮約"二項演算子を示します。 完全反対称共変テンソルが反変ベクトルと縮約される時、 結果はどの添字が縮約に使われるかに関わらず同じです。 このように、添字に無関係な方法で縮約演算子を定義することが可能です。

itensorパッケージでは、ベクトルとの縮約は常に 文字通りの並べ順で最初の添字に対して実行されます。 これは |演算子を含む式のより良い整理を保証します。 例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) decsym(a,2,0,[anti(all)],[]);
(%o2)                                done
(%i3) ishow(a([i,j],[])|v)$
                                    %1
(%t3)                              v   a
                                        %1 j
(%i4) ishow(a([j,i],[])|v)$
                                     %1
(%t4)                             - v   a
                                         %1 j

|演算子で使われるテンソルは は共変添字に対して完全反対称と宣言されなければいけないことが 本質的であることに注意してください。 そうでないなら、結果は正しくありません。

Categories:  Package itensor · Operators

関数: extdiff (expr, i)

添字 iに対する exprの外積を計算します。 外微分は形式的に偏微分演算子のウェッジ積で微分形式として定義されます。 そんなように、演算子も igeowedge_flagの設定で制御されます。 例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) ishow(extdiff(v([i]),j))$
                                  v    - v
                                   j,i    i,j
(%t2)                             -----------
                                       2
(%i3) decsym(a,2,0,[anti(all)],[]);
(%o3)                                done
(%i4) ishow(extdiff(a([i,j]),k))$
                           a      - a      + a
                            j k,i    i k,j    i j,k
(%t4)                      ------------------------
                                      3
(%i5) igeowedge_flag:true;
(%o5)                                true
(%i6) ishow(extdiff(v([i]),j))$
(%t6)                             v    - v
                                   j,i    i,j
(%i7) ishow(extdiff(a([i,j]),k))$
(%t7)                    - (a      - a      + a     )
                             k j,i    k i,j    j i,k

Categories:  Package itensor

関数: hodge (expr)

exprの Hodge双対を計算します。 例えば:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) imetric(g);
(%o2)                            done
(%i3) idim(4);
(%o3)                            done
(%i4) icounter:100;
(%o4)                             100
(%i5) decsym(A,3,0,[anti(all)],[])$

(%i6) ishow(A([i,j,k],[]))$
(%t6)                           A
                                 i j k
(%i7) ishow(canform(hodge(%)))$
                          %1 %2 %3 %4
               levi_civita            g        A
                                       %1 %102  %2 %3 %4
(%t7)          -----------------------------------------
                                   6
(%i8) ishow(canform(hodge(%)))$
                 %1 %2 %3 %8            %4 %5 %6 %7
(%t8) levi_civita            levi_civita            g
                                                     %1 %106
                             g        g        g      A         /6
                              %2 %107  %3 %108  %4 %8  %5 %6 %7
(%i9) lc2kdt(%)$

(%i10) %,kdelta$

(%i11) ishow(canform(contract(expand(%))))$
(%t11)                     - A
                              %106 %107 %108

Categories:  Package itensor

オプション変数: igeowedge_flag

デフォルト値: false

ウェッジ積と外微分の振る舞いを制御します。 false (デフォルト)に設定された時、 微分形式の概念は完全反対称共変テンソル場のそれに対応します。 trueに設定された時、微分形式は容積要素の概念に一致します。

Categories:  Package itensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.8 Exporting TeX expressions

itensorパッケージは テンソル式をTexにエクスポートするための限定サポートを提供します。 itensor式は関数コールとして現れるので、 いつもの Maxima texコマンドは期待された出力を生成しません。 代わりに tentexコマンドを試すことができます。 これはテンソル式を適切に添字が付けられたTeXオブジェクトに翻訳しようとします。

関数: tentex (expr)

以下の例のように、 tentex関数を使うには、最初にtentexをロードしなければいけません:

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) load(tentex);
(%o2)       /share/tensor/tentex.lisp
(%i3) idummyx:m;
(%o3)                                  m
(%i4) ishow(icurvature([j,k,l],[i]))$
            m1       i           m1       i           i
(%t4)  ichr2    ichr2     - ichr2    ichr2     - ichr2
            j k      m1 l        j l      m1 k        j l,k

                                                      i
                                               + ichr2
                                                      j k,l
(%i5) tentex(%)$
$$\Gamma_{j\,k}^{m_1}\,\Gamma_{l\,m_1}^{i}-\Gamma_{j\,l}^{m_1}\,
 \Gamma_{k\,m_1}^{i}-\Gamma_{j\,l,k}^{i}+\Gamma_{j\,k,l}^{i}$$

コンパイルエラーに導かれるTeX式でのパーセント符号の出現を避けるための、 idummyx割り当ての使用に注意してください。

注意せよ: このバージョンの tentex関数は幾分実験的です。

Categories:  Package itensor · TeX output


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.9 Interfacing with ctensor

itensorパッケージは ctensorパッケージの文脈で実行することができる Maximaコードを生成する能力があります。 この仕事を実行する関数は ic_convertです。

関数: ic_convert (eqn)

itensor方程式 eqnctensor割り当て文に変換します。 添字付きオブジェクトが配列に変換される一方で、 ダミー添字上の暗黙の和は明示的にされます。

(配列下付き添字は添字付きオブジェクトの反変添字が続く共変の順です。) 添字付きオブジェクトの微分は、 微分添字で下に添えられた ct_coordsに対して取られる diffの名詞形に 置き換えられます。 Christoffel記号 ichr1ichr2は それぞれ、lcsmcsに翻訳されます。 もし metricconverttrueなら、 2つの共変(反変)添字を持つ計量はすべて lg (ug)にリネームされます。 更に、 自由添字すべての上で足されるdoループが導入されます。 なので、 ただ evするだけで変換される割り当て分を評価することができます。 以下の例はこの関数の特長を例示します。

 
(%i1) load(itensor);
(%o1)      /share/tensor/itensor.lisp
(%i2) eqn:ishow(t([i,j],[k])=f([],[])*g([l,m],[])*a([],[m],j)
      *b([i],[l,k]))$
                             k        m   l k
(%t2)                       t    = f a   b    g
                             i j      ,j  i    l m
(%i3) ic_convert(eqn);
(%o3) for i thru dim do (for j thru dim do (
       for k thru dim do
        t        : f sum(sum(diff(a , ct_coords ) b
         i, j, k                   m           j   i, l, k

 g    , l, 1, dim), m, 1, dim)))
  l, m
(%i4) imetric(g);
(%o4)                                done
(%i5) metricconvert:true;
(%o5)                                true
(%i6) ic_convert(eqn);
(%o6) for i thru dim do (for j thru dim do (
       for k thru dim do
        t        : f sum(sum(diff(a , ct_coords ) b
         i, j, k                   m           j   i, l, k

 lg    , l, 1, dim), m, 1, dim)))
   l, m

Categories:  Package itensor · Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2.10 Reserved words

以下の Maximaワードは itensorパッケージで内部的に使われているので再定義してはいけません:

 
  Keyword    Comments
  ------------------------------------------
  indices2() Internal version of indices()
  conti      Lists contravariant indices
  covi       Lists covariant indices of a indexed object
  deri       Lists derivative indices of an indexed object
  name       Returns the name of an indexed object
  concan
  irpmon
  lc0
  _lc2kdt0
  _lcprod
  _extlc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26. ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.1 Introduction to ctensor

ctensorは成分テンソル操作パッケージです。 ctensorパッケージを使うには load(ctensor)とタイプしてください。 ctensorと対話的セッションを始めるには csetup()とタイプしてください。 最初に多様体の次元を指定するよう尋ねられます。 もし次元が2, 3, 4のいずれかなら、 座標のリストがそれぞれ [x,y], [x,y,z], [x,y,z,t]に設定されます。 これらの名前は、座標の新しいリストを(以下で記述する)変数 ct_coordsに割り当てることで変えることができ、ユーザーはこれについて尋ねられます。 座標名が他のオブジェクト定義と衝突することを避けるように注意を払わなければいけません。

次に、ユーザーは計量を直接、または順序位置 (ordinal position)を指定してファイルから入力します。 計量は行列 lgに保存されます。 最後に、計量の逆元が計算され、行列 ugに保存されます。 すべての計算を冪級数で実行するオプションがあります。

サンプルプロトコルは、 例として、 (Schwarzschild解に至る) Einsteinの真空方程式を導出する問題に適用される 静的な球対称計量(標準座標)に関して、以下のように開始されます。 ctensorの関数の多くは例のように標準計量に対して表示されます。

 
(%i1) load(ctensor);
(%o1)      /share/tensor/ctensor.mac
(%i2) csetup();
Enter the dimension of the coordinate system:
4;
Do you wish to change the coordinate names?
n;
Do you want to
1. Enter a new metric?

2. Enter a metric from a file?

3. Approximate a metric with a Taylor series?
1;

Is the matrix  1. Diagonal  2. Symmetric  3. Antisymmetric  4. General
Answer 1, 2, 3 or 4
1;
Row 1 Column 1:
a;
Row 2 Column 2:
x^2;
Row 3 Column 3:
x^2*sin(y)^2;
Row 4 Column 4:
-d;

Matrix entered.
Enter functional dependencies with the DEPENDS function or 'N' if none
depends([a,d],x);
Do you wish to see the metric?
y;
                          [ a  0       0        0  ]
                          [                        ]
                          [     2                  ]
                          [ 0  x       0        0  ]
                          [                        ]
                          [         2    2         ]
                          [ 0  0   x  sin (y)   0  ]
                          [                        ]
                          [ 0  0       0       - d ]
(%o2)                                done
(%i3) christof(mcs);
                                            a
                                             x
(%t3)                          mcs        = ---
                                  1, 1, 1   2 a

                                             1
(%t4)                           mcs        = -
                                   1, 2, 2   x

                                             1
(%t5)                           mcs        = -
                                   1, 3, 3   x

                                            d
                                             x
(%t6)                          mcs        = ---
                                  1, 4, 4   2 d

                                              x
(%t7)                          mcs        = - -
                                  2, 2, 1     a

                                           cos(y)
(%t8)                         mcs        = ------
                                 2, 3, 3   sin(y)

                                               2
                                          x sin (y)
(%t9)                      mcs        = - ---------
                              3, 3, 1         a

(%t10)                   mcs        = - cos(y) sin(y)
                            3, 3, 2

                                            d
                                             x
(%t11)                         mcs        = ---
                                  4, 4, 1   2 a
(%o11)                               done

Categories:  Tensors · Share packages · Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2 Functions and Variables for ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.1 Initialization and setup

関数: csetup ()

パッケージを初期化し、ユーザーに計量を対話的に入力可能にする ctensor(成分テンソル)パッケージの関数。 より詳細は ctensorを参照してください。

Categories:  Package ctensor

関数: cmetric  
    cmetric (dis)  
    cmetric ()

計量の逆元を計算し、将来の計算のためパッケージを設定する ctensor(成分テンソル)パッケージの関数。

cframe_flagfalseなら、 関数は逆計量 ugを(ユーザー定義の)行列 lgから計算します。 計量の行列式も計算され、変数 gdetに保存されます。 更に、パッケージは計量が対角的か調べ、結果に従って diagmetricの値を設定します。 オプション引数 disが渡されて、それが falseでないなら、 ユーザーは計量の逆元を見るように促されます。

cframe_flagtrueなら、 関数は fri (逆標構行列)と lfg(標構計量)の値が定義されていると考えます。 これらから標構行列 frと逆標構計量 ufgが計算されます。

Categories:  Package ctensor

関数: ct_coordsys  
    ct_coordsys (coordinate_system, extra_arg)  
    ct_coordsys (coordinate_system)

あらかじめ定義された座標系と計量を設定します。 引数 coordinate_systemは以下のシンボルのいずれかです:

 
 SYMBOL             Dim Coordinates     Description/comments
 ------------------------------------------------------------------
 cartesian2d           2  [x,y]             Cartesian 2D 座標系
 polar                 2  [r,phi]           極座標系
 elliptic              2  [u,v]             楕円座標系
 confocalelliptic      2  [u,v]             共焦点楕円座標
 bipolar               2  [u,v]             二極座標系
 parabolic             2  [u,v]             放物座標系
 cartesian3d           3  [x,y,z]           Cartesian 3D 座標系
 polarcylindrical      3  [r,theta,z]       円筒z極2D
 ellipticcylindrical   3  [u,v,z]           円筒z楕円2D
 confocalellipsoidal   3  [u,v,w]           共焦点楕円
 bipolarcylindrical    3  [u,v,z]           円筒z二極2D
 paraboliccylindrical  3  [u,v,z]           円筒z放物2D
 paraboloidal          3  [u,v,phi]         Paraboloidal coords.
 conical               3  [u,v,w]           円錐座標
 toroidal              3  [phi,u,v]         環状座標
 spherical             3  [r,theta,phi]     球座標系
 oblatespheroidal      3  [u,v,phi]         偏球座標系
 oblatespheroidalsqrt  3  [u,v,phi]
 prolatespheroidal     3  [u,v,phi]         長形球座標系
 prolatespheroidalsqrt 3  [u,v,phi]
 ellipsoidal           3  [r,theta,phi]     楕円体座標系
 cartesian4d           4  [x,y,z,t]         Cartesian 4D 座標系
 spherical4d           4  [r,theta,eta,phi] 球 4D 座標系
 exteriorschwarzschild 4  [t,r,theta,phi]   Schwarzschild 計量
 interiorschwarzschild 4  [t,z,u,v]         内部 Schwarzschild 計量
 kerr_newman           4  [t,r,theta,phi]   荷電軸対称計量

coordinate_systemは 座標変数を含むリストが続く変換関数のリストでもあり得ます。 例えば、以下のように球計量を指定できます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
      r*sin(theta),[r,theta,phi]]);
(%o2)                                done
(%i3) lg:trigsimp(lg);
                           [ 1  0         0        ]
                           [                       ]
                           [     2                 ]
(%o3)                      [ 0  r         0        ]
                           [                       ]
                           [         2    2        ]
                           [ 0  0   r  cos (theta) ]
(%i4) ct_coords;
(%o4)                           [r, theta, phi]
(%i5) dim;
(%o5)                                  3

cframe_flagtrueの時、変換関数も使うことができます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) cframe_flag:true;
(%o2)                                true
(%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
      r*sin(theta),[r,theta,phi]]);
(%o3)                                done
(%i4) fri;
(%o4)
 [cos(phi)cos(theta) -cos(phi) r sin(theta) -sin(phi) r cos(theta)]
 [                                                                ]
 [sin(phi)cos(theta) -sin(phi) r sin(theta)  cos(phi) r cos(theta)]
 [                                                                ]
 [    sin(theta)           r cos(theta)                0          ]

(%i5) cmetric();
(%o5)                                false
(%i6) lg:trigsimp(lg);
                           [ 1  0         0        ]
                           [                       ]
                           [     2                 ]
(%o6)                      [ 0  r         0        ]
                           [                       ]
                           [         2    2        ]
                           [ 0  0   r  cos (theta) ]

オプションの引数 extra_argは以下のいずれかです:

cylindricalct_coordsysに追加の極座標を結びつけるよう命じます。

minkowskict_coordsysに 負の計量符号を持つ追加の座標を結びつけるよう命じます。

allct_coordsysに 計量を設定した後、 cmetricchristof(false)をコールするよう命じます。

もしグローバル変数 verbosetrueに設定されているなら、 ct_coordsysは、 cframe_flagの値に依存して dim, ct_coordsと、 lglfgのいずれかと friの値を表示します。

Categories:  Package ctensor

関数: init_ctensor ()

ctensorパッケージを初期化します。

init_ctensor関数はctensorパッケージを再初期化します。 それはctensorが使う配列、行列すべてを削除し、フラグすべてをリセットし、 dimを4にリセットし、標構計量を Lorentz標構にリセットします。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.2 The tensors of curved space

ctensorパッケージの 主な目的は曲がった空間(時間)のテンソル、 最も顕著には一般相対性理論で使われるテンソルを計算することです。

計量基底が使われる時、 ctensorは以下のテンソルを計算できます:

 
 lg  -- ug
   \      \
    lcs -- mcs -- ric -- uric
              \      \       \
               \      tracer - ein -- lein
                \
                 riem -- lriem -- weyl
                     \
                      uriem


ctensorは動標構を使って機能することもできます。 cframe_flagtrueに設定されている時、 以下のテンソルを計算できます:

 
 lfg -- ufg
     \
 fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
      \                       |  \      \       \
       lg -- ug               |   weyl   tracer - ein -- lein
                              |\
                              | riem
                              |
                              \uriem

関数: christof (dis)

ctensor (成分テンソル)パッケージの関数。 各種Christoffel記号を計算します。 引数 disはどの結果をすぐに表示するか決めます。 第一種と第二種Christoffel記号は それぞれ配列 lcs[i,j,k]mcs[i,j,k]に格納され、 最初の 2つの添字に対して対称と定義されます。 もし christofの引数が lcsmcsなら、 それぞれ lcs[i,j,k]mcs[i,j,k]の固有の非零値が表示されます。 もし引数が allなら、 lcs[i,j,k]mcs[i,j,k]の固有の非零値が表示されます。 もし引数が falseなら要素の表示はされません。 配列要素 mcs[i,j,k]は最後の添字が反変であるような方法で定義されます。

Categories:  Package ctensor

関数: ricci (dis)

ctensor (成分テンソル)パッケージの関数。 ricciは Ricciテンソルの共変(対称)成分 ric[i,j]を計算します。 引数 distrueなら非零成分が表示されます。

Categories:  Package ctensor

関数: uricci (dis)

この関数は最初にRicciテンソルの共変成分 ric[i,j]を計算します。 そして混合 Ricciテンソルが反変計量テンソルを使って計算されます。 もし引数 disの値が trueなら これらの(添字 iは共変で、添字 jは反変の)混合成分 uric[i,j] は直接表示されます。 そうでないなら、 ricci(false)は結果を表示することなく、単に配列 uric[i,j]の要素を計算します。

Categories:  Package ctensor

関数: scurvature ()

与えられた計量を持つ Riemannian多様体の (Ricciテンソルを縮約することで得られる)スカラ曲率を返します。

Categories:  Package ctensor

関数: einstein (dis)

ctensor (成分テンソル)パッケージの関数。 einsteinは、 (関数 christofricciを使って) Christoffel記号と Ricciテンソルを得られた後、 混合 Einsteinテンソルを計算します。 もし引数 distrueなら、 混合 Einsteinテンソル ein[i,j]の非零値が表示されます。 ここで jは反変添字です。 変数 rateinsteinは これらの成分上の有理整理をもたらします。 もし ratfactrueなら、 成分は因数分解もされます。

Categories:  Package ctensor

関数: leinstein (dis)

共変 Einsteinテンソル。 leinsteinは 配列 leinに共変 Einsteinテンソルの値を格納します。 共変 Einsteinテンソルは、 計量テンソルを掛けることで 混合 Einsteinテンソル einから計算されます。 もし引数 distrueなら、 共変 Einsteinテンソルの非零値が表示されます。

Categories:  Package ctensor

関数: riemann (dis)

ctensor (成分テンソル)パッケージの関数。 riemannは 与えられた計量と対応するChristoffel記号から Riemann曲率テンソルを計算します。 以下の添字慣例が使われます:

 
                l      _l       _l       _l   _m    _l   _m
 R[i,j,k,l] =  R    = |      - |      + |    |   - |    |
                ijk     ij,k     ik,j     mk   ij    mj   ik

この表記法は itensorパッケージとその icurvature関数で使われる表記法と 一致しています。 もしオプション引数 distrueなら、 固有の非零成分 riem[i,j,k,l]が表示されます。 Einsteinテンソルと同様に ユーザーが設定する様々なスイッチが Riemannテンソルの成分の整理を制御します。 もし ratriemanntrueなら、 有理整理がされます。 もし ratfactrueなら、 成分のそれぞれは因数分解もされます。

もし変数 cframe_flagfalseなら、 Riemannテンソルは Christoffel記号から直接計算されます。 もし cframe_flagtrueなら、 共変 Riemannテンソルは 標構場係数から最初に計算されます。

Categories:  Package ctensor

関数: lriemann (dis)

共変 Riemannテンソル (lriem[]).

配列 lriemとして 共変 Riemannテンソルを計算します。 引数 distrueなら固有の非零値が表示されます。

変数 cframe_flagtrueなら、 共変 Riemannテンソルを標構場係数から直接計算します。 そうでないなら、 (3,1) Riemannテンソルを最初に計算します。

添字順序の情報は riemannを参照してください。

Categories:  Package ctensor

関数: uriemann (dis)

配列要素 uriem[i,j,k,l]として Riemann曲率テンソルの反変成分を計算します。 distrueならこれらを表示します。

Categories:  Package ctensor

関数: rinvariant ()

テンソル

 
lriem[i,j,k,l]*uriem[i,j,k,l].

を縮約することで得られる Kretschmann不変量 (kinvariant)を形成します。

このオブジェクトは非常に大きくなるかもしれないので、自動で整理はしません。

Categories:  Package ctensor

関数: weyl (dis)

Weylの共形テンソルを計算します。 引数 distrueなら、 非零成分 weyl[i,j,k,l]をユーザーに示します。 そうでないなら、これらの成分を単に計算し、格納します。 スイッチ ratweyltrueに設定されているなら、 成分を有理整理します; ratfactrueなら結果を因数分解もします。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.3 Taylor series expansion

ctensorパッケージは 結果が Taylor級数近似であると仮定することで、結果を切り詰める機能を持ちます。 この振る舞いは ctayswitch変数で制御されます; trueに設定されている時、 結果を整理する際に ctensorは内部的に関数 ctaylorを利用します。

以下の ctensor関数が ctaylor関数を呼び出します:

 
    Function     Comments
    ---------------------------------
    christof()   For mcs only
    ricci()
    uricci()
    einstein()
    riemann()
    weyl()
    checkdiv()

関数: ctaylor ()

ctaylor関数は、 taylorを使ってその後ratdisrepをコールすることで 引数をTaylor級数に変換することで、 引数を切り詰めます。 これは展開変数 ctayvarに関してより高い項を落とす合わせ効果を持ちます。 落とす項の次数はctaypovで定義されます; 級数展開が実行される点は ctayptで指定されます。

例として、 Minkowski計量の置換である簡単な計量を考えます。 追加の制約なしでは、対角計量でさえはるかに複雑すぎる Einsteinテンソルの式を生成します:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) ratfac:true;
(%o2)                                true
(%i3) derivabbrev:true;
(%o3)                                true
(%i4) ct_coords:[t,r,theta,phi];
(%o4)                         [t, r, theta, phi]
(%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],
                [0,0,0,r^2*sin(theta)^2]);
                        [ - 1  0  0         0        ]
                        [                            ]
                        [  0   1  0         0        ]
                        [                            ]
(%o5)                   [          2                 ]
                        [  0   0  r         0        ]
                        [                            ]
                        [              2    2        ]
                        [  0   0  0   r  sin (theta) ]
(%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
                            [ h11   0    0    0  ]
                            [                    ]
                            [  0   h22   0    0  ]
(%o6)                       [                    ]
                            [  0    0   h33   0  ]
                            [                    ]
                            [  0    0    0   h44 ]
(%i7) depends(l,r);
(%o7)                               [l(r)]
(%i8) lg:lg+l*h;
      [ h11 l - 1      0          0                 0            ]
      [                                                          ]
      [     0      h22 l + 1      0                 0            ]
      [                                                          ]
(%o8) [                        2                                 ]
      [     0          0      r  + h33 l            0            ]
      [                                                          ]
      [                                    2    2                ]
      [     0          0          0       r  sin (theta) + h44 l ]
(%i9) cmetric(false);
(%o9)                                done
(%i10) einstein(false);
(%o10)                               done
(%i11) ntermst(ein);
[[1, 1], 62]
[[1, 2], 0]
[[1, 3], 0]
[[1, 4], 0]
[[2, 1], 0]
[[2, 2], 24]
[[2, 3], 0]
[[2, 4], 0]
[[3, 1], 0]
[[3, 2], 0]
[[3, 3], 46]
[[3, 4], 0]
[[4, 1], 0]
[[4, 2], 0]
[[4, 3], 0]
[[4, 4], 46]
(%o12)                               done

しかし、もしこの例を変数 lに対して線形という近似として 再計算するなら、もっと簡潔な式を得ます:

 
(%i14) ctayswitch:true;
(%o14)                               true
(%i15) ctayvar:l;
(%o15)                                 l
(%i16) ctaypov:1;
(%o16)                                 1
(%i17) ctaypt:0;
(%o17)                                 0
(%i18) christof(false);
(%o18)                               done
(%i19) ricci(false);
(%o19)                               done
(%i20) einstein(false);
(%o20)                               done
(%i21) ntermst(ein);
[[1, 1], 6]
[[1, 2], 0]
[[1, 3], 0]
[[1, 4], 0]
[[2, 1], 0]
[[2, 2], 13]
[[2, 3], 2]
[[2, 4], 0]
[[3, 1], 0]
[[3, 2], 2]
[[3, 3], 9]
[[3, 4], 0]
[[4, 1], 0]
[[4, 2], 0]
[[4, 3], 0]
[[4, 4], 9]
(%o21)                               done
(%i22) ratsimp(ein[1,1]);
                         2      2  4               2     2
(%o22) - (((h11 h22 - h11 ) (l )  r  - 2 h33 l    r ) sin (theta)
                              r               r r

                            2               2      4    2
              - 2 h44 l    r  - h33 h44 (l ) )/(4 r  sin (theta))
                       r r                r



例えば、重力源から遠く、弱い場極限で取り組む時に この機能が役に立つかもしれません。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.4 Frame fields

変数 cframe_flagを trueに設定している時、 ctensorパッケージは動標構 (moving frame)を使って計算を実行します。

関数: frame_bracket (fr, fri, diagframe)

標構(frame)ブラケット (fb[])。

以下の定義に従って標構ブラケットを計算します:

 
   c          c         c        d     e
ifb   = ( ifri    - ifri    ) ifr   ifr
   ab         d,e       e,d      a     b

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.5 Algebraic classification

ctensorの(2004年11月時点で)新しい特長は 4次元時空計量の Petrov分類を計算する能力です。 この機能のデモンストレーションは、 ファイル share/tensor/petrov.demを参照してください。

関数: nptetrad ()

Newman-Penroseヌルテトラド(null tetrad) (np)と上付き添字対応物 (npi)を計算します。 例えば petrovを参照してください。

ヌルテトラドは計量符号 (-,+,+,+)を持つ4次元直交標構計量が使われいるという仮定の上で構成されます。 以下のように、ヌルテトラドの成分は逆標構行列に関係します:

 
np  = (fri  + fri ) / sqrt(2)
  1       1      2

np  = (fri  - fri ) / sqrt(2)
  2       1      2

np  = (fri  + %i fri ) / sqrt(2)
  3       3         4

np  = (fri  - %i fri ) / sqrt(2)
  4       3         4

Categories:  Package ctensor

関数: psi (dis)

5つの Newman-Penrose係数 psi[0]...psi[4]を計算します。 distrueに設定されているなら係数を表示します。 例は petrovを参照してください。

これらの係数は座標基底に関して、Weylテンソルから計算されます。 もし標構基底が使われるなら、最初に Weylテンソルを座標基底に変換します。 これは計算量の多い手続きになるかもしれません。 この理由で、いくつかの場合、 Weylテンソルを計算する前に まず座標基底を使うのがより都合がいいかも知れません。 しかし、 Newman-Penroseヌルテトラドを構成することは標構基底を要求することに注意してください。 それ故に、重要な一連の計算は標構基底で始めることができます。 標構基底は、後で (cmetricが自動的に計算する) lgugを計算するのに使われます。 例はpetrovを参照してください。 この時点で、 Christoffel記号を計算し始める前に cframe_flagを falseに設定することで 座標基底に戻ることができます。 後の段階で標構基底に変えると、 標構基底で計算したいくつか、座標基底でのいくつかと 2つを識別する方法がないまま、テンソルの混ざった状態で終わるかもしれないので、 矛盾する結果をもたらすかもしれません。

Categories:  Package ctensor

関数: petrov ()

psi[0]...psi[4]で特徴付けられる計量の Petrov分類を計算します。

例えば、以下は Kerr計量の Petrov分類を得る方法を例示します:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
(%o2)                                true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)                                done
(%i4) ug:invert(lg)$
(%i5) weyl(false);
(%o5)                                done
(%i6) nptetrad(true);
(%t6) np =

[ sqrt(r - 2 m)           sqrt(r)                                 ]
[---------------   ---------------------    0            0        ]
[sqrt(2) sqrt(r)   sqrt(2) sqrt(r - 2 m)                          ]
[                                                                 ]
[ sqrt(r - 2 m)            sqrt(r)                                ]
[---------------  - ---------------------   0            0        ]
[sqrt(2) sqrt(r)    sqrt(2) sqrt(r - 2 m)                         ]
[                                                                 ]
[                                          r      %i r sin(theta) ]
[       0                    0          -------   --------------- ]
[                                       sqrt(2)       sqrt(2)     ]
[                                                                 ]
[                                          r       %i r sin(theta)]
[       0                    0          -------  - ---------------]
[                                       sqrt(2)        sqrt(2)    ]

                             sqrt(r)         sqrt(r - 2 m)
(%t7) npi = matrix([- ---------------------,---------------, 0, 0],
                      sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)

          sqrt(r)            sqrt(r - 2 m)
[- ---------------------, - ---------------, 0, 0],
   sqrt(2) sqrt(r - 2 m)    sqrt(2) sqrt(r)

           1               %i
[0, 0, ---------, --------------------],
       sqrt(2) r  sqrt(2) r sin(theta)

           1                 %i
[0, 0, ---------, - --------------------])
       sqrt(2) r    sqrt(2) r sin(theta)

(%o7)                                done
(%i7) psi(true);
(%t8)                              psi  = 0
                                      0

(%t9)                              psi  = 0
                                      1

                                          m
(%t10)                             psi  = --
                                      2    3
                                          r

(%t11)                             psi  = 0
                                      3

(%t12)                             psi  = 0
                                      4
(%o12)                               done
(%i12) petrov();
(%o12)                                 D

Petrov分類関数は以下の文献で発表されたアルゴリズムに基づいています。

"Classifying geometries in general relativity: III Classification in practice" by Pollney, Skea, and d'Inverno, Class. Quant. Grav. 17 2885-2902 (2000).

いくつかの簡単なテストケースを除いて、 2004年12月19日時点、実装はテストされていなく、エラーを含みそうです。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.6 Torsion and nonmetricity

ctensorはねじれ係数と非計量性係数を計算し、接続係数内に含める能力を持ちます。

ユーザーが供給するテンソル trからねじれ係数を計算します。 trは階数 (2,1)テンソルでなければいけません。 trから、ねじれ係数 ktは以下の公式に従って計算されます:

 
              m          m      m
       - g  tr   - g   tr   - tr   g
          im  kj    jm   ki     ij  km
kt   = -------------------------------
  ijk                 2


  k     km
kt   = g   kt
  ij         ijm

混合添字テンソルだけを計算し、配列 ktに格納することに注意してください。

非計量性係数はユーザーが供給する非計量性ベクトル nmから計算します。 nmから非計量性係数 nmcは以下のように計算されます:

 
             k    k        km
       -nm  D  - D  nm  + g   nm  g
   k      i  j    i   j         m  ij
nmc  = ------------------------------
   ij                2

ここで Dは Kroneckerのデルタを表します。

ctorsion_flagtrueに設定されている時、 ktの値が christofで計算された混合添字付き接続係数から引かれ、 mcsに格納されます。 同様に、もし cnonmet_flagtrueに設定されているなら、 nmcの値が混合添字付き接続係数から引かれます。

もし必要なら、 christofは、ktnmを計算するために 関数 contortionnonmetricityをコールします。

関数: contortion (tr)

ねじれテンソル trから (2,1)コントーション (contortion)係数を計算します。

Categories:  Package ctensor

関数: nonmetricity (nm)

非計量性ベクトル nmから (2,1)非計量性係数を計算します。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.7 Miscellaneous features

関数: ctransform (M)

任意の平方対称行列 M上で座標変換を実行する ctensor (成分テンソル)パッケージの関数。 ユーザーは変換を定義する関数を入力しなければいけません。 (以前 transformと呼ばれていました。)

Categories:  Package ctensor

関数: findde (A, n)

n次元の平方配列 A要素に対応しただ1つに定まる微分方程式(式)のリストを返します。 現在、 nは 2か 3を指定できます deindexはこれらのただ1つに定まる微分方程式に従う Aの添字を含むグローバルリストです。 2次元配列である Einsteinテンソル (ein)に関して、 もし以下の例で計量に関して計算するなら、 finddeは以下の独立微分方程式を与えます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) derivabbrev:true;
(%o2)                                true
(%i3) dim:4;
(%o3)                                  4
(%i4) lg:matrix([a, 0, 0, 0], [ 0, x^2, 0, 0],
                              [0, 0, x^2*sin(y)^2, 0], [0,0,0,-d]);
                          [ a  0       0        0  ]
                          [                        ]
                          [     2                  ]
                          [ 0  x       0        0  ]
(%o4)                     [                        ]
                          [         2    2         ]
                          [ 0  0   x  sin (y)   0  ]
                          [                        ]
                          [ 0  0       0       - d ]
(%i5) depends([a,d],x);
(%o5)                            [a(x), d(x)]
(%i6) ct_coords:[x,y,z,t];
(%o6)                            [x, y, z, t]
(%i7) cmetric();
(%o7)                                done
(%i8) einstein(false);
(%o8)                                done
(%i9) findde(ein,2);
                                            2
(%o9) [d  x - a d + d, 2 a d d    x - a (d )  x - a  d d  x
        x                     x x         x        x    x

                                              2          2
                          + 2 a d d   - 2 a  d , a  x + a  - a]
                                   x       x      x
(%i10) deindex;
(%o10)                     [[1, 1], [2, 2], [4, 4]]

Categories:  Package ctensor

関数: cograd ()

スカラ関数の 共変勾配を計算します。 contragradが以下で例示する例のように ユーザーは対応するベクトル名を選べます。

Categories:  Package ctensor

関数: contragrad ()

スカラ関数の反変勾配を計算します。 Schwarzschild計量に関する以下の例が例示するように ユーザーは対応するベクトル名を選べます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) derivabbrev:true;
(%o2)                                true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)                                done
(%i4) depends(f,r);
(%o4)                               [f(r)]
(%i5) cograd(f,g1);
(%o5)                                done
(%i6) listarray(g1);
(%o6)                            [0, f , 0, 0]
                                      r
(%i7) contragrad(f,g2);
(%o7)                                done
(%i8) listarray(g2);
                               f  r - 2 f  m
                                r        r
(%o8)                      [0, -------------, 0, 0]
                                     r

Categories:  Package ctensor

関数: dscalar ()

いったん依存性が関数に宣言されれば、スカラ関数のテンソル d'Alembert演算子を計算します。 例えば:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) derivabbrev:true;
(%o2)                                true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)                                done
(%i4) depends(p,r);
(%o4)                               [p(r)]
(%i5) factor(dscalar(p));
                          2
                    p    r  - 2 m p    r + 2 p  r - 2 m p
                     r r           r r        r          r
(%o5)               --------------------------------------
                                       2
                                      r

Categories:  Package ctensor

関数: checkdiv ()

ベクトル場(発散)の対応する n個の成分を印字することで (最初の添字が共変でなければいけない)混合二階テンソルの共変発散を計算します。 ここで n = dimです。 もし関数の引数が gなら、 Einsteinテンソルの発散が形成され、零にならなければいけません。 加えて、発散(ベクトル)は配列名 divを与えられます。

Categories:  Package ctensor

関数: cgeodesic (dis)

ctensor (成分テンソル)パッケージの関数。 cgeodesicは与えられた計量での運動の測地方程式を計算します。 それらは配列 geod[i]に格納されます。 もし引数 distrueなら、 これらの方程式が表示されます。

Categories:  Package ctensor

関数: bdvac (f)

Brans- Dicke重力理論の真空場の方程式の共変成分を生成します。 スカラ場は引数 fで指定されます。 fは、例えば、'p(x)のように、 関数依存性を持つ(クォートされた)関数名でなければいけません。

二階共変場テンソルの成分は配列 bdで表されます。

Categories:  Package ctensor

関数: invariant1 ()

R^2の不変密度に関する混合 Euler- Lagrangeテンソル(場の方程式)を生成します。 場の方程式は inv1と名付けられた配列の成分です。

Categories:  Package ctensor

関数: invariant2 ()

*** NOT YET IMPLEMENTED ***

ric[i,j]*uriem[i,j]の不変密度に関する 混合 Euler- Lagrangeテンソル(場の方程式)を生成します。 場の方程式は inv2と名付けられた配列の成分です。

Categories:  Package ctensor

関数: bimetric ()

*** NOT YET IMPLEMENTED ***

Rosenの二計量(bimetric)理論の場の方程式を生成します。 場の方程式は rosenと名付けられた配列の成分です。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.8 Utility functions

関数: diagmatrixp (M,n)

もし Mの最初の n行と n列が対角行列か対角 (2D) 配列を形成するなら trueを返します。

関数: symmetricp (M, n)

もし Mnかける nの対称行列か対称 (2D) 配列なら trueを返し、そうでなければ falseを返します。

もし nMのサイズより小さいなら、 symmetricp は 行1から行 nと列1から列 nからなる nかける nの部分行列(もしくは部分配列)のみを考慮します。

関数: ntermst (f)

ユーザーに 二重に下付き添字されているテンソル(配列) fの「サイズ」のぱっと見を与えます。 二番目の要素が一番目の要素が指定する成分の NTERMSに対応する2つの要素のリストを印字します。 この方法で、非零式をすばやく見つけて整理を試みることが可能です。

Categories:  Package ctensor

関数: cdisplay (ten)

多次元配列で表されるように、テンソル tenの要素すべてを表示します。 他のタイプの変数はもちろん、階数 0と 1のテンソルが ldisplayを使ったように表示されます。 階数 2のテンソルは 2次元行列として表示され、 より高い階数のテンソルは2次元行列のリストとして表示されます。 例えば、 Schwarzschild計量の Riemannテンソルは以下のように見ることができます:

 
(%i1) load(ctensor);
(%o1)       /share/tensor/ctensor.mac
(%i2) ratfac:true;
(%o2)                                true
(%i3) ct_coordsys(exteriorschwarzschild,all);
(%o3)                                done
(%i4) riemann(false);
(%o4)                                done
(%i5) cdisplay(riem);
          [ 0               0                   0           0     ]
          [                                                       ]
          [                              2                        ]
          [      3 m (r - 2 m)   m    2 m                         ]
          [ 0  - ------------- + -- - ----      0           0     ]
          [            4          3     4                         ]
          [           r          r     r                          ]
          [                                                       ]
riem    = [                                m (r - 2 m)            ]
    1, 1  [ 0               0              -----------      0     ]
          [                                     4                 ]
          [                                    r                  ]
          [                                                       ]
          [                                           m (r - 2 m) ]
          [ 0               0                   0     ----------- ]
          [                                                4      ]
          [                                               r       ]

                                [    2 m (r - 2 m)       ]
                                [ 0  -------------  0  0 ]
                                [          4             ]
                                [         r              ]
                     riem     = [                        ]
                         1, 2   [ 0        0        0  0 ]
                                [                        ]
                                [ 0        0        0  0 ]
                                [                        ]
                                [ 0        0        0  0 ]

                                [         m (r - 2 m)    ]
                                [ 0  0  - -----------  0 ]
                                [              4         ]
                                [             r          ]
                     riem     = [                        ]
                         1, 3   [ 0  0        0        0 ]
                                [                        ]
                                [ 0  0        0        0 ]
                                [                        ]
                                [ 0  0        0        0 ]

                                [            m (r - 2 m) ]
                                [ 0  0  0  - ----------- ]
                                [                 4      ]
                                [                r       ]
                     riem     = [                        ]
                         1, 4   [ 0  0  0        0       ]
                                [                        ]
                                [ 0  0  0        0       ]
                                [                        ]
                                [ 0  0  0        0       ]

                               [       0         0  0  0 ]
                               [                         ]
                               [       2 m               ]
                               [ - ------------  0  0  0 ]
                    riem     = [    2                    ]
                        2, 1   [   r  (r - 2 m)          ]
                               [                         ]
                               [       0         0  0  0 ]
                               [                         ]
                               [       0         0  0  0 ]

             [     2 m                                         ]
             [ ------------  0        0               0        ]
             [  2                                              ]
             [ r  (r - 2 m)                                    ]
             [                                                 ]
             [      0        0        0               0        ]
             [                                                 ]
  riem     = [                         m                       ]
      2, 2   [      0        0  - ------------        0        ]
             [                     2                           ]
             [                    r  (r - 2 m)                 ]
             [                                                 ]
             [                                         m       ]
             [      0        0        0         - ------------ ]
             [                                     2           ]
             [                                    r  (r - 2 m) ]

                                [ 0  0       0        0 ]
                                [                       ]
                                [            m          ]
                                [ 0  0  ------------  0 ]
                     riem     = [        2              ]
                         2, 3   [       r  (r - 2 m)    ]
                                [                       ]
                                [ 0  0       0        0 ]
                                [                       ]
                                [ 0  0       0        0 ]

                                [ 0  0  0       0       ]
                                [                       ]
                                [               m       ]
                                [ 0  0  0  ------------ ]
                     riem     = [           2           ]
                         2, 4   [          r  (r - 2 m) ]
                                [                       ]
                                [ 0  0  0       0       ]
                                [                       ]
                                [ 0  0  0       0       ]

                                      [ 0  0  0  0 ]
                                      [            ]
                                      [ 0  0  0  0 ]
                                      [            ]
                           riem     = [ m          ]
                               3, 1   [ -  0  0  0 ]
                                      [ r          ]
                                      [            ]
                                      [ 0  0  0  0 ]

                                      [ 0  0  0  0 ]
                                      [            ]
                                      [ 0  0  0  0 ]
                                      [            ]
                           riem     = [    m       ]
                               3, 2   [ 0  -  0  0 ]
                                      [    r       ]
                                      [            ]
                                      [ 0  0  0  0 ]

                               [   m                      ]
                               [ - -   0   0       0      ]
                               [   r                      ]
                               [                          ]
                               [        m                 ]
                               [  0   - -  0       0      ]
                    riem     = [        r                 ]
                        3, 3   [                          ]
                               [  0    0   0       0      ]
                               [                          ]
                               [              2 m - r     ]
                               [  0    0   0  ------- + 1 ]
                               [                 r        ]

                                    [ 0  0  0    0   ]
                                    [                ]
                                    [ 0  0  0    0   ]
                                    [                ]
                         riem     = [            2 m ]
                             3, 4   [ 0  0  0  - --- ]
                                    [             r  ]
                                    [                ]
                                    [ 0  0  0    0   ]

                                [       0        0  0  0 ]
                                [                        ]
                                [       0        0  0  0 ]
                                [                        ]
                     riem     = [       0        0  0  0 ]
                         4, 1   [                        ]
                                [      2                 ]
                                [ m sin (theta)          ]
                                [ -------------  0  0  0 ]
                                [       r                ]

                                [ 0        0        0  0 ]
                                [                        ]
                                [ 0        0        0  0 ]
                                [                        ]
                     riem     = [ 0        0        0  0 ]
                         4, 2   [                        ]
                                [         2              ]
                                [    m sin (theta)       ]
                                [ 0  -------------  0  0 ]
                                [          r             ]

                              [ 0  0          0          0 ]
                              [                            ]
                              [ 0  0          0          0 ]
                              [                            ]
                   riem     = [ 0  0          0          0 ]
                       4, 3   [                            ]
                              [                2           ]
                              [         2 m sin (theta)    ]
                              [ 0  0  - ---------------  0 ]
                              [                r           ]

           [        2                                             ]
           [   m sin (theta)                                      ]
           [ - -------------         0                0         0 ]
           [         r                                            ]
           [                                                      ]
           [                         2                            ]
           [                    m sin (theta)                     ]
riem     = [        0         - -------------         0         0 ]
    4, 4   [                          r                           ]
           [                                                      ]
           [                                          2           ]
           [                                   2 m sin (theta)    ]
           [        0                0         ---------------  0 ]
           [                                          r           ]
           [                                                      ]
           [        0                0                0         0 ]

(%o5)                                done

Categories:  Package ctensor

関数: deleten (L, n)

n番目の要素を削除した Lから成る新しいリストを返します。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.9 Variables used by ctensor

オプション変数: dim

デフォルト値: 4

ctensor (成分テンソル)パッケージのオプション。 dimはデフォルト 4の多様体の次元です。 コマンド dim: nは次元を任意の別の値 nに再設定します。

Categories:  Package ctensor

オプション変数: diagmetric

デフォルト値: false

ctensor (成分テンソル)パッケージのオプション。 もし diagmetrictrueなら、 特殊なルーチンが計量の対角性を考慮して (計量テンソルを明示的に含む)幾何的オブジェクトすべてを計算します。 もちろん、実行時間短縮になります。 注意: もし対角計量が指定されたら、 csetupは自動的にこのオプションを設定します。

Categories:  Package ctensor

オプション変数: ctrgsimp

テンソルを計算する時、三角関数整理を使うようにします。 現在、 ctrgsimpは動標構を含む計算だけに影響します。

オプション変数: cframe_flag

計算をホロノミック (holonomic)計量と対比して動標構に関係して実行するようにします。 標構は逆標構配列 friと標構計量 lfgで定義されます。 Cartesian標構を使う計算に関して、 lfgは適切な次元の単位行列でなければいけません; Lorentz標構での計算に関して、 lfgは適切な符号を持たなければいけません。

Categories:  Package ctensor

オプション変数: ctorsion_flag

コントーションテンソルが接続係数の計算に含まれるようにします。 コントーションテンソル自体はユーザーが提供するテンソル trから contortionによって計算されます。

Categories:  Package ctensor

オプション変数: cnonmet_flag

非計量性係数が接続係数の計算に含まれるようにします。 コントーションテンソルはユーザーが提供する非計量性ベクトル nmから 関数 nonmetricityによって計算されます。

Categories:  Package ctensor

オプション変数: ctayswitch

もし trueに設定されているなら、いくつかの ctensor計算が Taylor級数展開を使って実行されるようにします。 現在、 christof, ricci, uricci, einstein, weylがこの設定を考慮します。

Categories:  Package ctensor

オプション変数: ctayvar

ctayswitchtrueに設定されている場合、 Taylor級数展開で使われる変数。

Categories:  Package ctensor

オプション変数: ctaypov

ctayswitchtrueに設定されている場合、 Taylor級数展開で使われる最大べき数

Categories:  Package ctensor

オプション変数: ctaypt

ctayswitchtrueに設定されている場合、 Taylor級数展開が実行される点。

Categories:  Package ctensor

システム変数: gdet

計量テンソル lgの行列式。 cframe_flagfalseに設定されている時、 cmetricが計算します。

Categories:  Package ctensor

オプション変数: ratchristof

christofが有理整理を適用するようにします。

Categories:  Package ctensor

オプション変数: rateinstein

デフォルト値: true

もし trueなら、 Einsteinテンソルの非零成分上で有理整理が実行されます; もし ratfactrueなら、成分は因数分解もされます。

Categories:  Package ctensor

オプション変数: ratriemann

デフォルト値: true

Riemannテンソルの整理を制御するスイッチの1つです; もし trueなら、有理整理がされます; もし ratfactrueなら、成分それぞれは因数分解もされます。

Categories:  Package ctensor

オプション変数: ratweyl

デフォルト値: true

もし trueなら、このスイッチは, weyl関数が Weylテンソルの値に有理整理を適用するようにします。 もし ratfactrueなら、成分は因数分解もされます。

Categories:  Package ctensor

変数: lfg

共変標構計量。 デフォルトでは、符号 (+,+,+,-)を持つ4次元Lorentz標構に初期化されます。 cframe_flagtrueの時使われます。

Categories:  Package ctensor

変数: ufg

逆標構計量。 cframe_flagtrueに設定されているなら、 cmetricがコールされた時 lfgから計算されます。

Categories:  Package ctensor

変数: riem

(3,1) Riemannテンソル。 関数 riemannが呼び出された時計算されます。 添字順序についての情報については riemannの記述を参照してください。

もし cframe_flagtrueなら、 riemは共変Riemannテンソル lriemから計算されます。

Categories:  Package ctensor

変数: lriem

共変Riemannテンソル。 lriemannが計算します。

Categories:  Package ctensor

変数: uriem

反変Riemannテンソル。

Categories:  Package ctensor

変数: ric

混合Ricciテンソル。 ricciが計算します。

Categories:  Package ctensor

変数: uric

反変Ricciテンソル。 ricciが計算します。

Categories:  Package ctensor

変数: lg

計量テンソル。 このテンソルは他の計算が実行される前に (dim掛け dim行列として)指定されなければいけません。

Categories:  Package ctensor

変数: ug

計量テンソルの逆元。 cmetricが計算します。

Categories:  Package ctensor

変数: weyl

Weylテンソル。 weylが計算します。

Categories:  Package ctensor

変数: fb

frame_bracketが計算する標構ブラケット係数。

Categories:  Package ctensor

変数: kinvariant

Kretchmann不変量。 rinvariantが計算します。

Categories:  Package ctensor

変数: np

Newman-Penroseヌルテトラド。 nptetradが計算します。

Categories:  Package ctensor

変数: npi

上付き添字 Newman-Penroseヌルテトラド。 nptetradが計算します。 ug.npとして定義されます。 積 np.transpose(npi)は定数です:

 
(%i39) trigsimp(np.transpose(npi));
                              [  0   - 1  0  0 ]
                              [                ]
                              [ - 1   0   0  0 ]
(%o39)                        [                ]
                              [  0    0   0  1 ]
                              [                ]
                              [  0    0   1  0 ]

Categories:  Package ctensor

変数: tr

ユーザーが提供するねじれを表す階数3のテンソル。 contortionが使います。

Categories:  Package ctensor

変数: kt

コントーションテンソル。 contortiontrから計算します。

Categories:  Package ctensor

変数: nm

ユーザーが提供する非計量性ベクトル。 nonmetricityが使います。

Categories:  Package ctensor

変数: nmc

nonmetricitynmから計算する 非計量性係数。

Categories:  Package ctensor

システム変数: tensorkill

テンソルパッケージが初期化されたかを示す変数。 csetupが設定し使います。 init_ctensorが再設定します。

Categories:  Package ctensor

オプション変数: ct_coords

デフォルト値: []

ctensor (成分テンソル)パッケージのオプション。 ct_coordsは座標のリストを含みます。 関数 csetupがコールされる時通常定義される一方、 割り当て ct_coords: [j1, j2, ..., jn]で座標を再定義できます。 ここで、 jは新しい座標名です。 csetupも参照してください。

Categories:  Package ctensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.10 Reserved names

ctensorパッケージによって以下の名前が内部的に使われます。 なので再定義してはいけません:

 
  Name         Description
  ---------------------------------------------------------------------
  _lg()        Evaluates to lfg if frame metric used, lg otherwise
  _ug()        Evaluates to ufg if frame metric used, ug otherwise
  cleanup()    Removes items drom the deindex list
  contract4()  Used by psi()
  filemet()    Used by csetup() when reading the metric from a file
  findde1()    Used by findde()
  findde2()    Used by findde()
  findde3()    Used by findde()
  kdelt()      Kronecker-delta (not generalized)
  newmet()     Used by csetup() for setting up a metric interactively
  setflags()   Used by init_ctensor()
  readvalue()
  resimp()
  sermet()     Used by csetup() for entering a metric as Taylor-series
  txyzsum()
  tmetric()    Frame metric, used by cmetric() when cframe_flag:true
  triemann()   Riemann-tensor in frame base, used when cframe_flag:true
  tricci()     Ricci-tensor in frame base, used when cframe_flag:true
  trrc()       Ricci rotation coefficients, used by christof()
  yesp()

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.11 Changes

2004年11月に ctensorパッケージは広範囲に渡って書き直されました。 多くの関数と変数は、パッケージにMacsymaの商用版との互換性を持たせるために、 リネームされました。

 
  New Name     Old Name        Description
  ---------------------------------------------------------------------
  ctaylor()    DLGTAYLOR()     Taylor-series expansion of an expression
  lgeod[]      EM              Geodesic equations
  ein[]        G[]             Mixed Einstein-tensor
  ric[]        LR[]            Mixed Ricci-tensor
  ricci()      LRICCICOM()     Compute the mixed Ricci-tensor
  ctaypov      MINP            Maximum power in Taylor-series expansion
  cgeodesic()  MOTION          Compute geodesic equations
  ct_coords    OMEGA           Metric coordinates
  ctayvar      PARAM           Taylor-series expansion variable
  lriem[]      R[]             Covariant Riemann-tensor
  uriemann()   RAISERIEMANN()  Compute the contravariant Riemann-tensor
  ratriemann   RATRIEMAN       Rational simplif. of the Riemann-tensor
  uric[]       RICCI[]         Contravariant Ricci-tensor
  uricci()     RICCICOM()      Compute the contravariant Ricci-tensor
  cmetric()    SETMETRIC()     Set up the metric
  ctaypt       TAYPT           Point for Taylor-series expansion
  ctayswitch   TAYSWITCH       Taylor-series setting switch
  csetup()     TSETUP()        Start interactive setup session
  ctransform() TTRANSFORM()    Interactive coordinate transformation
  uriem[]      UR[]            Contravariant Riemann-tensor
  weyl[]       W[]             (3,1) Weyl-tensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27. atensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.1 Introduction to atensor

atensorは代数テンソル操作パッケージです。 atensorを使うには load(atensor)とタイプしてください。 続いて init_atensor関数をコールしてください。

atensorの本質は非可換(ドット)積演算子 (".")の整理ルール一式です atensorはいくつかの代数型を認識します; init_atensor関数がコールされた時、対応する整理ルールが有効になります。

atensorの能力は、四元数代数を 2つの基底ベクトルを持つ Clifford代数 Cl(0,2)として定義することで実演することができます。 3つの四元数虚数単位は 2つの基底ベクトルとその積、すなわち以下の通りです:

 
    i = v     j = v     k = v  . v
         1         2         1    2

atensorパッケージは四元数代数に関する組み込みの定義を持ちますが、 この例では使わず、四元数乗算表を行列として組むよう試みます:

 
(%i1) load(atensor);
(%o1)       /share/tensor/atensor.mac
(%i2) init_atensor(clifford,0,0,2);
(%o2)                                done
(%i3) atensimp(v[1].v[1]);
(%o3)                                 - 1
(%i4) atensimp((v[1].v[2]).(v[1].v[2]));
(%o4)                                 - 1
(%i5) q:zeromatrix(4,4);
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%o5)                           [            ]
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%i6) q[1,1]:1;
(%o6)                                  1
(%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
(%o7)                                done
(%i8) q[1,4]:q[4,1]:v[1].v[2];
(%o8)                               v  . v
                                     1    2
(%i9) for i from 2 thru 4 do for j from 2 thru 4 do
      q[i,j]:atensimp(q[i,1].q[1,j]);
(%o9)                                done
(%i10) q;
                   [    1        v         v      v  . v  ]
                   [              1         2      1    2 ]
                   [                                      ]
                   [   v         - 1     v  . v    - v    ]
                   [    1                 1    2      2   ]
(%o10)             [                                      ]
                   [   v      - v  . v     - 1      v     ]
                   [    2        1    2              1    ]
                   [                                      ]
                   [ v  . v      v        - v       - 1   ]
                   [  1    2      2          1            ]

atensorは添字付きシンボルを基底ベクトルと認識します。 シンボルは asymbolの中に記憶されたものであり、 添字は 1から adimまで間です。 添字付きシンボルだけに関して双一次形式 sf, af, avが評価されます。 評価によって fun(v[i],v[j])aform[i,j]の値が代入されます。 ここで vasymbolの値を表し、 funafsfを示します; また、 av(v[i],v[j])v[aform[i,j]]が代入されます。

言うまでもなく、関数 sf, af, avは再定義できます。

atensorパッケージがロードされる時、以下のフラグが設定されます:

 
dotscrules:true;
dotdistrib:true;
dotexptsimp:false;

もし非結合代数で実験したいなら、 dotassocfalseに設定することも考えるかもしれません。 しかし、この場合、 atensimpはいつも望みの整理を得ることができるわけではありません。

Categories:  Tensors · Share packages · Package atensor


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.2 Functions and Variables for atensor

関数: init_atensor  
    init_atensor (alg_type, opt_dims)  
    init_atensor (alg_type)

特定の代数型で atensorパッケージを初期化します。 alg_typeは以下のいずれかであり得ます:

universal: 普遍代数は交換規則を持ちません。

grassmann: Grassman代数は交換関係 u.v+v.u=0で定義されます。

clifford: Clifford代数は交換関係 u.v+v.u=-2*sf(u,v)で定義されます。 ここで sfは対称スカラ値函数です。 この代数では、 opt_dimsは代数の正の次元数、縮退次元数、負の次元数をそれぞれ表す 3つの非負整数までありえます。 もしいずれかの opt_dims値が供給されたら、 atensoradimaformの値を適切に構成します。 そうでないなら、 adimはデフォルトが 0で、 aformは未定義です。

symmetric: 対称代数は交換関係 u.v-v.u=0で定義されます。

symplectic: シンプレクティック代数は交換関係 u.v-v.u=2*af(u,v)で定義されます。 ここで afは反対称スカラ値函数です。 シンプレクティック代数では opt_dimsは非縮退次元数、縮退次元数をそれぞれ表す 2つの非負整数までありえます。 もしいずれかの opt_dims値が供給されたら、 atensoradimaformの値を適切に構成します。 そうでないなら adimはデフォルトが 0で、 aformは未定義です。

lie_envelop: Lie包絡代数は交換関係 u.v-v.u=2*av(u,v)で定義されます。 ここで avは反対称函数です。

init_atensor関数はいくつかの予め定義された代数型も認識します:

complexは複素数代数を Clifford代数 Cl(0,1)として実装します。 init_atensor(complex)をコールすることは init_atensor(clifford,0,0,1)と同値です。

quaternionは四元数代数を実装します。 init_atensor (quaternion)をコールすることは init_atensor (clifford,0,0,2)と同値です。

pauliは Pauliスピノール代数を Clifford代数 Cl(3,0)として実装します。 init_atensor(pauli)をコールすることは init_atensor(clifford,3)と同値です。

diracは Diracスピノール代数を Clifford代数 Cl(3,1)として実装します。 init_atensor(dirac)をコールすることは init_atensor(clifford,3,0,1)と同値です。

Categories:  Package atensor

関数: atensimp (expr)

init_atensorのコールで構成された規則に従って代数テンソル式 exprを整理します。 整理は、適用可能な場所への交換関係の再帰的な適用と sf, af, avのコールの分解 (resolving calls)を含みます。 複雑な式に関してさえ、保護手段を使い、関数がいつでも終了することを確実にします。

関数: alg_type

代数型。有効な値は universal, grassmann, clifford, symmetric, symplectic, lie_envelopです。

Categories:  Package atensor

変数: adim

デフォルト値: 0

代数の次元。 atensorは添字付きオブジェクトが有効な基底ベクトルか決定するのに adimの値を使います。 abasepを参照してください。

Categories:  Package atensor · Global variables

変数: aform

デフォルト値: ident(3)

双一次形式sf, af, avのデフォルト値。 デフォルトは、単位行列 ident(3)です。

Categories:  Package atensor · Global variables

変数: asymbol

デフォルト値: v

基底ベクトルのシンボル。

Categories:  Package atensor · Global variables

関数: sf (u, v)

交換関係で使われる対称スカラ関数。 デフォルトの実装は 両方の引数が abasepを使った基底ベクトルかチェックし、 もしそうなら行列 aformから対応する値を代入します。

Categories:  Package atensor

関数: af (u, v)

交換関係で使われる反対称スカラ関数。 デフォルトの実装は 両方の引数が abasepを使った基底ベクトルかチェックし、 もしそうなら行列 aformから対応する値を代入します。

Categories:  Package atensor

関数: av (u, v)

交換関係で使われる反対称スカラ関数。 デフォルトの実装は 両方の引数がabasepを使った基底ベクトルかチェックし、 もしそうなら行列 aformから対応する値を代入します。

例えば:

 
(%i1) load(atensor);
(%o1)       /share/tensor/atensor.mac
(%i2) adim:3;
(%o2)                                  3
(%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
                               [  0    3   - 2 ]
                               [               ]
(%o3)                          [ - 3   0    1  ]
                               [               ]
                               [  2   - 1   0  ]
(%i4) asymbol:x;
(%o4)                                  x
(%i5) av(x[1],x[2]);
(%o5)                                 x
                                       3

Categories:  Package atensor

関数: abasep (v)

引数が atensor基底ベクトルかチェックします。 すなわち、それが添字付きシンボルかどうか、 asymbolの値と同じシンボルを持つかどうか、 そして、1から adimまでの間の数値の添字を持つどうかチェックします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28. Sums, Products, and Series


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1 Functions and Variables for Sums and Products

関数: bashindices (expr)

それぞれの和や積に独自のインデックスを与えることで式 exprを変換します。 これは、和や積と一緒に機能する時 changevarによりよい精度を与えます。 独自のインデックスの形式は jnumberです。 量 numbergensumnumに参照することで決定されます。 ユーザーはこれを変更することができます。 例えば、 gensumnum:0$はそれを再設定します。

Categories:  Sums and products

関数: lsum (expr, x, L)

Lの中のそれぞれの要素 xに関する exprの和を表します。 もし引数 Lがリストに評価されないなら、名詞形 'lsumを返します。

例:

 
(%i1) lsum (x^i, i, [1, 2, 7]);
                            7    2
(%o1)                      x  + x  + x
(%i2) lsum (i^2, i, rootsof (x^3 - 1, x));
                     ====
                     \      2
(%o2)                 >    i
                     /
                     ====
                                   3
                     i in rootsof(x  - 1, x)

Categories:  Sums and products

関数: intosum (expr)

和の外側の掛け算因子を内側に移動します。 もし外側の式でインデックスが使われているなら、 関数は sumcontractに関してするのと同じように、 合理的なインデックスを見つけようとします。 これは、本質的に和の outativeプロパティの逆の考えですが、 このプロパティを取り除かず、ただ無視するだけであることに注意してください。

いくつかの場合、 intosumの前に scanmap (multthru, expr)が必要になるかもしれません。

Categories:  Expressions

オプション変数: simpproduct

デフォルト値: false

simpproducttrueの時 productの結果は整理されます。 この整理は時々閉形式を生成することができるかもしれません。 もし simpproductfalseか 引用形式 'productが使われたなら、 値は数学で使われるpi記法の表現である積の名詞形です。

関数: product (expr, i, i_0, i_1)

インデックス ii_0から i_1まで変わるように exprの値の積を返します。 名詞形 'productは、大文字Πとして表示されます。

productexprと下限上限 i_0i_1を評価し、 productはインデックス iをクォートします(評価しません)。

もし上限と下限が整数差だけ違うなら、 exprはインデックス iのそれぞれの値に関して評価され、 結果は明示的な積です。

そうでなければ、インデックスの範囲は不定です。 積を整理するためにいくつかの規則が適用されます。 グローバル変数 simpproducttrueの時、更なる規則が適用されます。 いくつかの場合、式整理は積でない結果を出力します; そうでないなら、結果は名詞形 'productです。

nounsevflagも参照してください。

例:

 
(%i1) product (x + i*(i+1)/2, i, 1, 4);
(%o1)           (x + 1) (x + 3) (x + 6) (x + 10)
(%i2) product (i^2, i, 1, 7);
(%o2)                       25401600
(%i3) product (a[i], i, 1, 7);
(%o3)                 a  a  a  a  a  a  a
                       1  2  3  4  5  6  7
(%i4) product (a(i), i, 1, 7);
(%o4)          a(1) a(2) a(3) a(4) a(5) a(6) a(7)
(%i5) product (a(i), i, 1, n);
                             n
                           /===\
                            ! !
(%o5)                       ! !  a(i)
                            ! !
                           i = 1
(%i6) product (k, k, 1, n);
                               n
                             /===\
                              ! !
(%o6)                         ! !  k
                              ! !
                             k = 1
(%i7) product (k, k, 1, n), simpproduct;
(%o7)                          n!
(%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
                             n
                           /===\
                            ! !    1
(%o8)                       ! !  -----
                            ! !  k + 1
                           k = 1
(%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
                              15  40
(%o9)                        a   b

Categories:  Sums and products

オプション変数: simpsum

デフォルト値: false

simpsumtrueの時、 sumの結果は整理されます。 この整理は、時々、閉形式を生成することができるかもしれません。 もし simpsumfalseであるか、クォートされた形 'sumが使われたなら、値は数学で使われるΣ表示の表現である和の名詞形です。

関数: sum (expr, i, i_0, i_1)

インデックス ii_0から i_1まで変わるように exprの値の和を返します。 名詞形 'sumは大文字Σとして表示されます。

sumは被和 exprと下限上限 i_0, i_1を評価し、 sumはインデックス iをクォートします(評価しません)。

もし上限と下限が整数差だけ違うなら、被和 exprはインデックス iのそれぞれの値に関して評価され、結果は明示的な和です。

そうでないならインデックスの範囲は不定です。 積を整理するためにいくつかの規則が適用されます。 グローバル変数 simpsumtrueの時、 更なる規則が適用されます。いくつかの場合、式整理は和でない結果を出力します; そうでないなら、結果は名詞形 'sumです。

evflag(評価フラグ) cauchysumtrueの時、 和の積はコーシー積として表現されます。 コーシー積では内側の和のインデックスは独立に変化するのではなく、 外側の和のインデックスの関数になります。

グローバル変数 genindexは、 和の次のインデックスを生成するのに使われるアルファベット前置です。

gensumnumは、自動生成されるインデックスが必要な時 和の次のインデックスを生成するのに使われる数値接尾です。 gensumnumfalseの時, 自動生成されるインデックスは接尾なしの genindexのみです。

sumcontract, intosum, bashindices, niceindices, nouns, evflag, zeilbergerも参照してください。

例:

 
(%i1) sum (i^2, i, 1, 7);
(%o1)                          140
(%i2) sum (a[i], i, 1, 7);
(%o2)           a  + a  + a  + a  + a  + a  + a
                 7    6    5    4    3    2    1
(%i3) sum (a(i), i, 1, 7);
(%o3)    a(7) + a(6) + a(5) + a(4) + a(3) + a(2) + a(1)
(%i4) sum (a(i), i, 1, n);
                            n
                           ====
                           \
(%o4)                       >    a(i)
                           /
                           ====
                           i = 1
(%i5) sum (2^i + i^2, i, 0, n);
                          n
                         ====
                         \       i    2
(%o5)                     >    (2  + i )
                         /
                         ====
                         i = 0
(%i6) sum (2^i + i^2, i, 0, n), simpsum;
                              3      2
                   n + 1   2 n  + 3 n  + n
(%o6)             2      + --------------- - 1
                                  6
(%i7) sum (1/3^i, i, 1, inf);
                            inf
                            ====
                            \     1
(%o7)                        >    --
                            /      i
                            ====  3
                            i = 1
(%i8) sum (1/3^i, i, 1, inf), simpsum;
                                1
(%o8)                           -
                                2
(%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
                              inf
                              ====
                              \     1
(%o9)                      30  >    --
                              /      2
                              ====  i
                              i = 1
(%i10) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
                                  2
(%o10)                       5 %pi
(%i11) sum (integrate (x^k, x, 0, 1), k, 1, n);
                            n
                           ====
                           \       1
(%o11)                      >    -----
                           /     k + 1
                           ====
                           k = 1
(%i12) sum (if k <= 5 then a^k else b^k, k, 1, 10);
          10    9    8    7    6    5    4    3    2
(%o12)   b   + b  + b  + b  + b  + a  + a  + a  + a  + a

Categories:  Sums and products

関数: sumcontract (expr)

定数だけ異なる上限と下限を持つ足し算の和すべてを結合します。 結果は、そんな和のそれぞれの集合の和に この和を形成するために抽出されなければならなかった適切な余項 (appropriate extra term)すべてを加えた式です。 sumcontractは互換性のある和すべてを結合し、 可能なら和の1つからインデックスの1つを使い、 もし供給されたどれもが使えないなら合理的なインデックスを形成するよう試みます。

sumcontractの前に intosum (expr)を実行する必要があるかもしれません。

Categories:  Sums and products

オプション変数: sumexpand

デフォルト値: false

sumexpandtrueの時、和の積と指数和は、入れ子の和に整理されます。

cauchysumも参照してください。

例:

 
(%i1) sumexpand: true$
(%i2) sum (f (i), i, 0, m) * sum (g (j), j, 0, n);
                     m      n
                    ====   ====
                    \      \
(%o2)                >      >     f(i1) g(i2)
                    /      /
                    ====   ====
                    i1 = 0 i2 = 0
(%i3) sum (f (i), i, 0, m)^2;
                     m      m
                    ====   ====
                    \      \
(%o3)                >      >     f(i3) f(i4)
                    /      /
                    ====   ====
                    i3 = 0 i4 = 0


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.2 Introduction to Series

Maximaには微分可能な関数の級数を見つけるための関数 taylorpowerseriesが入っています。 ある級数の閉形式を見つけることができる nusumのようなツールもあります。 足し算や掛け算のような演算は級数上で普通に機能します。 この節では展開を制御するグローバル変数を提供します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.3 Functions and Variables for Series

オプション変数: cauchysum

デフォルト値: false

上限として infを持つ和同士を掛ける時、 もし sumexpandtrueで、かつ cauchysumtrueなら、 通常の積ではなく Cauchy積が使われます。 Cauchy積では内側の和のインデックスは独立に変化するのではなく、外側のインデックスの関数です。

例:

 
(%i1) sumexpand: false$
(%i2) cauchysum: false$
(%i3) s: sum (f(i), i, 0, inf) * sum (g(j), j, 0, inf);
                      inf         inf
                      ====        ====
                      \           \
(%o3)                ( >    f(i))  >    g(j)
                      /           /
                      ====        ====
                      i = 0       j = 0
(%i4) sumexpand: true$
(%i5) cauchysum: true$
(%i6) expand(s,0,0);
                 inf     i1
                 ====   ====
                 \      \
(%o6)             >      >     g(i1 - i2) f(i2)
                 /      /
                 ====   ====
                 i1 = 0 i2 = 0

Categories:  Sums and products

関数: deftaylor (f_1(x_1), expr_1, …, f_n(x_n), expr_n)

deftaylorは、ある変数 x_iの関数 f_iそれぞれに関して、 expr_iをゼロの回りの Taylor級数と定義します。 expr_iは典型的には x_iの多項式か和です; deftaylorはもっと一般的な式も問題なく受け付けます。

powerseries (f_i(x_i), x_i, 0)deftaylorで定義された級数を返します。

deftaylorは関数 f_1, ..., f_nのリストを返します。 deftaylorは引数を評価します。

例:

 
(%i1) deftaylor (f(x), x^2 + sum(x^i/(2^i*i!^2), i, 4, inf));
(%o1)                          [f]
(%i2) powerseries (f(x), x, 0);
                      inf
                      ====      i1
                      \        x         2
(%o2)                  >     -------- + x
                      /       i1    2
                      ====   2   i1!
                      i1 = 4
(%i3) taylor (exp (sqrt (f(x))), x, 0, 4);
                      2         3          4
                     x    3073 x    12817 x
(%o3)/T/     1 + x + -- + ------- + -------- + . . .
                     2     18432     307200

Categories:  Power series

オプション変数: maxtayorder

デフォルト値: true

maxtayordertrueの時、(切り詰められた) Taylor級数の代数操作の間、 taylorは厳密とわかっているできるだけ多くの項を保とうとします。

Categories:  Power series

関数: niceindices (expr)

exprの中の和や積のインデックスを改名します。 niceindicesは、その名前が被加数や非積数の中に現れないなら、 インデックスそれぞれを niceindicespref[1]の値に改名しようとします。 現れた場合、 niceindicesは 未使用の変数が見つかるまで niceindicesprefの次の要素を順に試します。 もしリスト全部が使い果たされたら、 例えば i0, i1, i2, ....というように niceindicespref[1]の値に整数を追加することで、 追加のインデックスを構成します。

niceindicesは式を返します。 niceindicesは引数を評価します。

例:

 
(%i1) niceindicespref;
(%o1)                  [i, j, k, l, m, n]
(%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
                 inf    inf
                /===\   ====
                 ! !    \
(%o2)            ! !     >      f(bar i j + foo)
                 ! !    /
                bar = 1 ====
                        foo = 1
(%i3) niceindices (%);
                     inf  inf
                    /===\ ====
                     ! !  \
(%o3)                ! !   >    f(i j l + k)
                     ! !  /
                    l = 1 ====
                          k = 1

Categories:  Sums and products

オプション変数: niceindicespref

デフォルト値: [i, j, k, l, m, n]

niceindicesprefは、 niceindicesが和や積のインデックスに使う名前の リストです。

niceindicesprefの要素は通常、変数名です。 しかし、niceindicesがこれを強制するわけではありません。

例:

 
(%i1) niceindicespref: [p, q, r, s, t, u]$
(%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
                 inf    inf
                /===\   ====
                 ! !    \
(%o2)            ! !     >      f(bar i j + foo)
                 ! !    /
                bar = 1 ====
                        foo = 1
(%i3) niceindices (%);
                     inf  inf
                    /===\ ====
                     ! !  \
(%o3)                ! !   >    f(i j q + p)
                     ! !  /
                    q = 1 ====
                          p = 1

Categories:  Sums and products

関数: nusum (expr, x, i_0, i_1)

R.W. Gosperによる決定手続きを使って、 xに関する exprの不定超幾何総和を実行します。 exprと結果は整数べき、階乗、二項式、有理関数の積として表現可能でなければいけません。

用語「定」と「不定和」は「定」と「不定積分」へ類似して使われています。 不定に和を取ることは、ただ例えば0からinfまで和を取るのではなく、 可変な長さの区間上の和に関してシンボリックな結果を与えることを意味します。 例えば、二項級数の一般的な部分和に関する公式はないので、 nusumはそれができません。

nusumunsumは有限積の和と差について少し知っています。 unsumも参照してください。

例:

 
(%i1) nusum (n*n!, n, 0, n);

Dependent equations eliminated:  (1)
(%o1)                     (n + 1)! - 1
(%i2) nusum (n^4*4^n/binomial(2*n,n), n, 0, n);
                     4        3       2              n
      2 (n + 1) (63 n  + 112 n  + 18 n  - 22 n + 3) 4      2
(%o2) ------------------------------------------------ - ------
                    693 binomial(2 n, n)                 3 11 7
(%i3) unsum (%, n);
                              4  n
                             n  4
(%o3)                   ----------------
                        binomial(2 n, n)
(%i4) unsum (prod (i^2, i, 1, n), n);
                    n - 1
                    /===\
                     ! !   2
(%o4)              ( ! !  i ) (n - 1) (n + 1)
                     ! !
                    i = 1
(%i5) nusum (%, n, 1, n);

Dependent equations eliminated:  (2 3)
                            n
                          /===\
                           ! !   2
(%o5)                      ! !  i  - 1
                           ! !
                          i = 1

Categories:  Sums and products

関数: pade (taylor_series, numer_deg_bound, denom_deg_bound)

以下の有理関数すべてのリストを返します。 与えられたTaylor級数展開で、分子と分母の次数の和がべき級数の切り詰めレベル以下のもの すなわち「最良」近似を有理関数は持ち、加えて指定された次数範囲を満たすものです。

taylor_seriesは1変数Taylor級数です。 numer_deg_bounddenom_deg_boundは分子と分母上の次数範囲を指定する正の整数です。

taylor_seriesは Laurent級数も可能です。 次数範囲は、infも可能で、 総次数が冪級数の長さ以下の有理関数すべてを返すことになります。 総次数は numer_deg_bound + denom_deg_boundとして定義されます。 べき級数の長さは "truncation level" + 1 - min(0, "order of series")として定義されます。

 
(%i1) taylor (1 + x + x^2 + x^3, x, 0, 3);
                              2    3
(%o1)/T/             1 + x + x  + x  + . . .
(%i2) pade (%, 1, 1);
                                 1
(%o2)                       [- -----]
                               x - 1
(%i3) t: taylor(-(83787*x^10 - 45552*x^9 - 187296*x^8
                   + 387072*x^7 + 86016*x^6 - 1507328*x^5
                   + 1966080*x^4 + 4194304*x^3 - 25165824*x^2
                   + 67108864*x - 134217728)
       /134217728, x, 0, 10);
                    2    3       4       5       6        7
             x   3 x    x    15 x    23 x    21 x    189 x
(%o3)/T/ 1 - - + ---- - -- - ----- + ----- - ----- - ------
             2    16    32   1024    2048    32768   65536

                                  8         9          10
                            5853 x    2847 x    83787 x
                          + ------- + ------- - --------- + . . .
                            4194304   8388608   134217728
(%i4) pade (t, 4, 4);
(%o4)                          []

このべき級数展開を持つ次数4の分子/分母の有理関数はありません。 一般的に、 解くのに十分な数の未知の係数を持つために、 その和が少なくともべき級数の次数になるまで 分子の次数と分母の次数を増やさなければいけません。

 
(%i5) pade (t, 5, 5);
                     5                4                 3
(%o5) [- (520256329 x  - 96719020632 x  - 489651410240 x

                  2
 - 1619100813312 x  - 2176885157888 x - 2386516803584)

               5                 4                  3
/(47041365435 x  + 381702613848 x  + 1360678489152 x

                  2
 + 2856700692480 x  + 3370143559680 x + 2386516803584)]

Categories:  Power series

関数: powerseries (expr, x, a)

変数 xに関する点 a (無限大のためには infかもしれません)の回りの exprのべき級数展開の一般形式を返します:

 
           inf
           ====
           \               n
            >    b  (x - a)
           /      n
           ====
           n = 0

もし powerseriesexprを展開することができないなら、 taylorが級数の最初のいくつかの項を与えることができます。

verbosetrueの時、 powerseriesは進捗メッセージを印字します。

 
(%i1) verbose: true$
(%i2) powerseries (log(sin(x)/x), x, 0);
can't expand
                                 log(sin(x))
so we'll try again after applying the rule:
                                        d
                                      / -- (sin(x))
                                      [ dx
                        log(sin(x)) = i ----------- dx
                                      ]   sin(x)
                                      /
in the first simplification we have returned:
                             /
                             [
                             i cot(x) dx - log(x)
                             ]
                             /
                    inf
                    ====        i1  2 i1             2 i1
                    \      (- 1)   2     bern(2 i1) x
                     >     ------------------------------
                    /                i1 (2 i1)!
                    ====
                    i1 = 1
(%o2)                -------------------------------------
                                      2

Categories:  Power series

オプション変数: psexpand

デフォルト値: false

psexpandtrueの時、 拡張有理関数展開が完全に展開されて表示されます。 スイッチ ratexpandは同じ効果を持ちます。

psexpandfalseの時、 多変数式がちょうど有理関数パッケージと同じように表示されます。

psexpandmultiの時、 変数に関する同じ総次数の項は一緒にまとめられます。

関数: revert (expr, x)
関数: revert2 (expr, x, n)

これらの関数は、変数 xに関するゼロの回りの Taylor級数 exprの反転を返します。 revertexprの最高次数と等しい次数の多項式を返します。 revert2は次数 nの多項式を返します。 nexprの次数よりも大きい値も小さい値も同じ値も取り得ます。

load ("revert")はこれらの関数をロードします。

例:

 
(%i1) load ("revert")$
(%i2) t: taylor (exp(x) - 1, x, 0, 6);
                   2    3    4    5     6
                  x    x    x    x     x
(%o2)/T/      x + -- + -- + -- + --- + --- + . . .
                  2    6    24   120   720
(%i3) revert (t, x);
               6       5       4       3       2
           10 x  - 12 x  + 15 x  - 20 x  + 30 x  - 60 x
(%o3)/R/ - --------------------------------------------
                                60
(%i4) ratexpand (%);
                     6    5    4    3    2
                    x    x    x    x    x
(%o4)             - -- + -- - -- + -- - -- + x
                    6    5    4    3    2
(%i5) taylor (log(x+1), x, 0, 6);
                    2    3    4    5    6
                   x    x    x    x    x
(%o5)/T/       x - -- + -- - -- + -- - -- + . . .
                   2    3    4    5    6
(%i6) ratsimp (revert (t, x) - taylor (log(x+1), x, 0, 6));
(%o6)                           0
(%i7) revert2 (t, x, 4);
                          4    3    2
                         x    x    x
(%o7)                  - -- + -- - -- + x
                         4    3    2

Categories:  Power series

関数: taylor  
    taylor (expr, x, a, n)  
    taylor (expr, [x_1, x_2, …], a, n)  
    taylor (expr, [x, a, n, 'asymp])  
    taylor (expr, [x_1, x_2, …], [a_1, a_2, …], [n_1, n_2, …])  
    taylor (expr, [x_1, a_1, n_1], [x_2, a_2, n_2], …)

taylor (expr, x, a, n)は 式exprを変数 xaの周りの TaylorもしくはLaurent級数を (x - a)^nまで展開します。

もし exprが形式 f(x)/g(x) の形であり、 g(x)n次まで項を持たないなら、 taylorg(x)2 n次まで展開しようとします。 もしまだ 0でない項がないなら、 taylorは、展開の次数が n 2^taylordepth以下である限り g(x)の展開の次数を倍にしていきます。

taylor (expr, [x_1, x_2, ...], a, n)は、すべての変数 x_1, x_2, ...について点 (a, a, , ...)の周りで n次までのべき級数を返します。

taylor (expr, [x_1, a_1, n_1], [x_2, a_2, n_2], ...)は、変数 x_1, x_2, ...について点 (a_1, a_2, ...)の回りで n_1次, n_2次, ....まで展開したべき級数を返します。

taylor (expr, [x_1, x_2, ...], [a_1, a_2, ...], [n_1, n_2, ...])は、変数 x_1, x_2, ...について点 (a_1, a_2, ...)の回りで n_1次, n_2次, ....まで展開したべき級数を返します。

taylor (expr, [x, a, n, 'asymp])は、 exprx - aの負のべき乗展開を返します。 最高次の項は (x - a)^-nです。

maxtaylordertrueの時、(丸められた)Taylor級数の代数操作の間、 talyorは正確とわかっている限り多くの項を保とうとします。

psexpandtrueの時、拡張有理関数式はフルに展開されて表示されます。 スイッチ ratexpandは同じ効果を持ちます。 psexpandfalseの時、 有理関数パッケージのように多変数式が表示されます。 psexpandmultiなら、同じ総次数の項が一緒にグループ化されます。

展開を制御するには taylor_logexpandスイッチも参照してください。

例:

 
(%i1) taylor (sqrt (sin(x) + a*x + 1), x, 0, 3);
                           2             2
             (a + 1) x   (a  + 2 a + 1) x
(%o1)/T/ 1 + --------- - -----------------
                 2               8

                                   3      2             3
                               (3 a  + 9 a  + 9 a - 1) x
                             + -------------------------- + . . .
                                           48
(%i2) %^2;
                                    3
                                   x
(%o2)/T/           1 + (a + 1) x - -- + . . .
                                   6
(%i3) taylor (sqrt (x + 1), x, 0, 5);
                       2    3      4      5
                  x   x    x    5 x    7 x
(%o3)/T/      1 + - - -- + -- - ---- + ---- + . . .
                  2   8    16   128    256
(%i4) %^2;
(%o4)/T/                  1 + x + . . .
(%i5) product ((1 + x^i)^2.5, i, 1, inf)/(1 + x^2);
                         inf
                        /===\
                         ! !    i     2.5
                         ! !  (x  + 1)
                         ! !
                        i = 1
(%o5)                   -----------------
                              2
                             x  + 1
(%i6) ev (taylor(%, x,  0, 3), keepfloat);
                               2           3
(%o6)/T/    1 + 2.5 x + 3.375 x  + 6.5625 x  + . . .
(%i7) taylor (1/log (x + 1), x, 0, 3);
                               2       3
                 1   1   x    x    19 x
(%o7)/T/         - + - - -- + -- - ----- + . . .
                 x   2   12   24    720
(%i8) taylor (cos(x) - sec(x), x, 0, 5);
                                4
                           2   x
(%o8)/T/                - x  - -- + . . .
                               6
(%i9) taylor ((cos(x) - sec(x))^3, x, 0, 5);
(%o9)/T/                    0 + . . .
(%i10) taylor (1/(cos(x) - sec(x))^3, x, 0, 5);
                                               2          4
            1     1       11      347    6767 x    15377 x
(%o10)/T/ - -- + ---- + ------ - ----- - ------- - --------
             6      4        2   15120   604800    7983360
            x    2 x    120 x

                                                          + . . .
(%i11) taylor (sqrt (1 - k^2*sin(x)^2), x, 0, 6);
               2  2       4      2   4
              k  x    (3 k  - 4 k ) x
(%o11)/T/ 1 - ----- - ----------------
                2            24

                                    6       4       2   6
                               (45 k  - 60 k  + 16 k ) x
                             - -------------------------- + . . .
                                          720
(%i12) taylor ((x + 1)^n, x, 0, 4);
                      2       2     3      2         3
                    (n  - n) x    (n  - 3 n  + 2 n) x
(%o12)/T/ 1 + n x + ----------- + --------------------
                         2                 6

                               4      3       2         4
                             (n  - 6 n  + 11 n  - 6 n) x
                           + ---------------------------- + . . .
                                          24
(%i13) taylor (sin (y + x), x, 0, 3, y, 0, 3);
               3                 2
              y                 y
(%o13)/T/ y - -- + . . . + (1 - -- + . . .) x
              6                 2

                    3                       2
               y   y            2      1   y            3
          + (- - + -- + . . .) x  + (- - + -- + . . .) x  + . . .
               2   12                  6   12
(%i14) taylor (sin (y + x), [x, y], 0, 3);
                     3        2      2      3
                    x  + 3 y x  + 3 y  x + y
(%o14)/T/   y + x - ------------------------- + . . .
                                6
(%i15) taylor (1/sin (y + x), x, 0, 3, y, 0, 3);
          1   y              1    1               1            2
(%o15)/T/ - + - + . . . + (- -- + - + . . .) x + (-- + . . .) x
          y   6               2   6                3
                             y                    y

                                           1            3
                                      + (- -- + . . .) x  + . . .
                                            4
                                           y
(%i16) taylor (1/sin (y + x), [x, y], 0, 3);
                             3         2       2        3
            1     x + y   7 x  + 21 y x  + 21 y  x + 7 y
(%o16)/T/ ----- + ----- + ------------------------------- + . . .
          x + y     6                   360

Categories:  Power series

オプション変数: taylordepth

デフォルト値: 3

もしまだ非ゼロ項がないなら、展開の次数が n 2^taylordepth以下である限り、 taylorg(x)の展開の次数を倍にします。

Categories:  Power series

関数: taylorinfo (expr)

Taylor級数 exprについての情報を返します。 戻り値はリストのリストです。 リストそれぞれは、変数名、展開点、展開次数から構成されます。

もし exprが Taylor級数でないなら、 taylorinfofalseを返します。

例:

 
(%i1) taylor ((1 - y^2)/(1 - x), x, 0, 3, [y, a, inf]);
                  2                       2
(%o1)/T/ - (y - a)  - 2 a (y - a) + (1 - a )

         2                        2
 + (1 - a  - 2 a (y - a) - (y - a) ) x

         2                        2   2
 + (1 - a  - 2 a (y - a) - (y - a) ) x

         2                        2   3
 + (1 - a  - 2 a (y - a) - (y - a) ) x  + . . .
(%i2) taylorinfo(%);
(%o2)               [[y, a, inf], [x, 0, 3]]

Categories:  Power series

関数: taylorp (expr)

もし exprが Taylor級数なら trueを、 そうでないなら falseを返します。

Categories:  Predicate functions · Power series

オプション変数: taylor_logexpand

デフォルト値: true

taylor_logexpandtaylor級数の中の対数の展開を制御します。

taylor_logexpandtrueの時、 対数すべては完全に展開されるので、 対数的恒等式を含むゼロ認識問題は展開プロセスを邪魔しません。 しかしながら、分岐情報を無視するのでこの方法はいつも数学的に正しいわけではありません。

taylor_logexpandfalseに設定されている時、 なされる対数の唯一の展開は形式的なべき級数を得るのに必要なものです。

オプション変数: taylor_order_coefficients

デフォルト値: true

taylor_order_coefficientsは Taylor級数の中の係数の順序付けを制御します。

taylor_order_coefficientstrueの時、 Taylor級数の係数は標準に順序付けられます。

Categories:  Power series

関数: taylor_simplifier (expr)

べき級数 exprの係数を整理します。 taylorがこの関数をコールします。

Categories:  Power series

オプション変数: taylor_truncate_polynomials

デフォルト値: true

taylor_truncate_polynomialstrueの時、 多項式は入力切り詰めレベルを基礎に切り詰められます。

そうでないなら、 taylorへの多項式入力は不定の精度を持つと考えられます。

Categories:  Power series

関数: taytorat (expr)

taylor形式から標準有理式 (CRE)形式に exprを変換します。 効果は rat (ratdisrep (expr))と同じですがより速いです。

関数: trunc (expr)

一般式 exprの内部表現に注釈をする(annotate)ので、まるでその和が切り詰められた Taylor級数かのように表示されます。 exprは別に変更されません。

例:

 
(%i1) expr: x^2 + x + 1;
                            2
(%o1)                      x  + x + 1
(%i2) trunc (expr);
                                2
(%o2)                  1 + x + x  + . . .
(%i3) is (expr = trunc (expr));
(%o3)                         true

Categories:  Power series

関数: unsum (f, n)

最初の後方差 f(n) - f(n - 1)を返します。 従って unsumはある意味 sumの逆です。

nusumも参照してください。

例:

 
(%i1) g(p) := p*4^n/binomial(2*n,n);
                                     n
                                  p 4
(%o1)               g(p) := ----------------
                            binomial(2 n, n)
(%i2) g(n^4);
                              4  n
                             n  4
(%o2)                   ----------------
                        binomial(2 n, n)
(%i3) nusum (%, n, 0, n);
                     4        3       2              n
      2 (n + 1) (63 n  + 112 n  + 18 n  - 22 n + 3) 4      2
(%o3) ------------------------------------------------ - ------
                    693 binomial(2 n, n)                 3 11 7
(%i4) unsum (%, n);
                              4  n
                             n  4
(%o4)                   ----------------
                        binomial(2 n, n)

Categories:  Sums and products

オプション変数: verbose

デフォルト値: false

verbosetrueの時、 powerseriesは進捗メッセージを印字します。

Categories:  Power series


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4 Introduction to Fourier series

fourieパッケージは Fourier級数のシンボル計算のための関数を含みます。 fourieパッケージの中には Fourier積分係数を計算する関数や式の操作のためのいくつかの関数があります。

Categories:  Fourier transform · Share packages · Package fourie


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.5 Functions and Variables for Fourier series

関数: equalp (x, y)

もし equal (x, y)なら trueを返し、 そうでないなら falseを返します。 (この場合 equal (x, y)がするようなエラーメッセージを与えません。)

Categories:  Package fourie

関数: remfun  
    remfun (f, expr)  
    remfun (f, expr, x)

remfun (f, expr)exprの中の f (arg)すべてを argで置き換えます。

remfun (f, expr, x)exprの中の f (arg)argが変数 xを含むときだけ argで置き換えます。

Categories:  Package fourie

関数: funp  
    funp (f, expr)  
    funp (f, expr, x)

もし exprが関数 fを含むなら funp (f, expr)trueを返します。

もし exprが関数 fを含み、変数 xfのインスタンスの1つの引数のどこかにあるなら、 funp (f, expr, x)trueを返します。

Categories:  Package fourie

関数: absint  
    absint (f, x, halfplane)  
    absint (f, x)  
    absint (f, x, a, b)

absint (f, x, halfplane)は、 与えられた半平面 (pos, neg, またはboth)での fxに関する不定積分を返します。 fは形式 abs (x), abs (sin (x)), abs (a) * exp (-abs (b) * abs (x))の式を含むことができます。

absint (f, x)absint (f, x, pos)と同値です。

absint (f, x, a, b)xに関する faからbまでの定積分を返します。 fは絶対値を含むことができます。

Categories:  Package fourie · Integral calculus

関数: fourier (f, x, p)

区間 [-p, p]上で定義された f(x)の Fourier係数のリストを返します。

Categories:  Package fourie

関数: foursimp (l)

もし sinnpiflagtrueなら sin (n %pi)を0に整理します。 もし cosnpiflagtrueなら cos (n %pi)(-1)^nに整理します。

オプション変数: sinnpiflag

デフォルト値: true

foursimpを参照してください。

Categories:  Package fourie

オプション変数: cosnpiflag

デフォルト値: true

foursimpを参照してください。

Categories:  Package fourie

関数: fourexpand (l, x, p, limit)

Fourier係数 lのリストから limit項までのFourier級数を構成して返します。 (limitは infも取り得ます。) xpfourierにおけるものと同じ意味を持ちます。

Categories:  Package fourie

関数: fourcos (f, x, p)

[0, p]上で定義された f(x)の Fourierコサイン係数を返します。

Categories:  Package fourie

関数: foursin (f, x, p)

[0, p]上で定義された f(x)の Fourierサイン係数を返します。

Categories:  Package fourie

関数: totalfourier (f, x, p)

fourexpand (foursimp (fourier (f, x, p)), x, p, 'inf)を返します。

Categories:  Package fourie

関数: fourint (f, x)

[minf, inf]上で定義された f(x)の Fourier積分係数のリストを構成して返します。

Categories:  Package fourie

関数: fourintcos (f, x)

[0, inf]上の f(x)の Fourierコサイン積分係数を返します。

Categories:  Package fourie

関数: fourintsin (f, x)

[0, inf]上の f(x)の Fourierサイン積分係数を返します。

Categories:  Package fourie


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6 Functions and Variables for Poisson series

関数: intopois (a)

aを Poisson符号に変換します。

Categories:  Poisson series

関数: outofpois (a)

aを Poisson符号から一般表現に変換します。 もし aが Poisson形式でないなら、 outofpoisは変換を実行します。 すなわち、その戻り値は outofpois (intopois (a))です。 例えば、この関数は特定のタイプのサインやコサイン項のべきの和に関する標準 (canonical)整理器です。

Categories:  Poisson series

関数: poisdiff (a, b)

abに関して微分します。 bは三角関数の引数の中だけか係数の中だけにいなければいけません。

Categories:  Poisson series

関数: poisexpt (a, b)

関数的に intopois (a^b)と同一です。 bは正の整数でなければいけません。

Categories:  Poisson series

関数: poisint (a, b)

(poisdiffと)同様に制限された意味で積分します。 もし bが三角関数の引数の中にあるなら bの中の非周期的項を落とします。

Categories:  Poisson series

オプション変数: poislim

デフォルト値: 5

poislimは三角関数の引数の中の係数の領域を決定します。 初期値 5は区間 [-2^(5-1)+1,2^(5-1)] すなわち[-15,16]に対応しますが、 [-2^(n-1)+1, 2^(n-1)]に設定することができます。

Categories:  Poisson series

関数: poismap (series, sinfn, cosfn)

関数 sinfnを与えられた Poisson級数のサイン項に、 cosfnをコサイン項にマップします。 sinfncosfnは 2引数関数です。 引数それぞれは級数の中の項の係数と三角関数部です。

Categories:  Poisson series

関数: poisplus (a, b)

関数的に intopois (a + b)と同一です。

Categories:  Poisson series

関数: poissimp (a)

aを一般表現の aに関する Poisson級数に変換します。

Categories:  Poisson series

特殊シンボル: poisson

シンボル /P/は Poisson級数式の行ラベルに続きます。

Categories:  Poisson series

関数: poissubst (a, b, c)

acの中の bに代入します。 cは Poisson級数です。

(1) bが変数 u, v, w, x, y, zのいずれかの場合、 aはそれらの変数に関して線形の式(例えば 6*u + 4*v)でなければいけません。

(2) bはそれらの変数以外の場合、 aもまたそれらの変数を含んではいけなく、さらにサインもコサインも含んではいけません。

poissubst (a, b, c, d, n)は上のタイプ (1)のようにabに関して演算しますが、 dが Poisson級数の場合、 cの中で ba + dを代入した結果を供給するために、 cos(d)sin(d)を次数 nに展開する特殊なタイプの代入です。 アイデアは dが小さなパラメータの項に関する展開だということです。 例えば、 poissubst (u, v, cos(v), %e, 3)cos(u)*(1 - %e^2/2) - sin(u)*(%e - %e^3/6)をもたらします。

Categories:  Poisson series

関数: poistimes (a, b)

intopois (a*b)と同じ機能です。

Categories:  Poisson series

関数: poistrim ()

(もしユーザーがそれを定義したら) Poisson乗算の間、適用する予約関数です。 項の中の u, v, ..., zの係数を引数とする6引数の述語論理関数です。 (この項の係数に関して) poistrimtrueとなる項は乗算の間に消去されます。

Categories:  Poisson series

関数: printpois (a)

可読フォーマットで Poisson級数を印字します。 outofpoisと共通で、もし必要なら aを最初に Poisson符号に変換します。

Categories:  Poisson series · Display functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29. Number Theory


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.1 Functions and Variables for Number Theory

関数: bern (n)

整数 nについて n番目の Bernoulli数を返します。 もし zerobernfalseならゼロに等しい Bernoulli数は抑制されます。

burnも参照してください。

 
(%i1) zerobern: true$
(%i2) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
                      1  1       1      1        1
(%o2)           [1, - -, -, 0, - --, 0, --, 0, - --]
                      2  6       30     42       30
(%i3) zerobern: false$
(%i4) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
                      1  1    1   1     1   5     691   7
(%o4)           [1, - -, -, - --, --, - --, --, - ----, -]
                      2  6    30  42    30  66    2730  6

Categories:  Number theory

関数: bernpoly (x, n)

変数 xに関する n番目の Bernoulli多項式を返します。

Categories:  Number theory

関数: bfzeta (s, n)

引数 sに関する Riemannのゼータ関数を返します。 戻り値は多倍長浮動小数点です; nは戻り値の小数点以下の桁数です。

関数: bfhzeta (s, h, n)

引数 shに関する Hurwitzのゼータ関数を返します。 戻り値は多倍長浮動小数点です; nは戻り値の小数点以下の桁数です。

Hurwitzゼータ関数は以下のように定義されます。

 
                        inf
                        ====
                        \        1
         zeta (s,h)  =   >    --------
                        /            s
                        ====  (k + h)
                        k = 0

load ("bffac")でこの関数をロードします。

関数: burn (n)

n番目の Bernoulli数の近似の有理数をを返します。 burnは(有理) Bernoulli数が まあまあの効率で(超越的)ゼータによって近似できるという観察を利用します。

 
                   n - 1  1 - 2 n
              (- 1)      2        zeta(2 n) (2 n)!
     B(2 n) = ------------------------------------
                                2 n
                             %pi

bernは返す前にインデックス nまでの Bernoulli数すべてを計算するので、 burnは大きな、孤立した n(たぶん 105以上の n)に対しては bernより効率的かもしれません。 burnは 255よりおおきな偶数 nに対しては近似を呼び出します。 奇数と 255以下の nに対しては関数 bernが呼び出されます。

load ("bffac")でこの関数をロードします。 bernも参照してください。

Categories:  Number theory

関数: chinese ([r_1, …, r_n], [m_1, …, m_n])

連立合同式 x = r_1 mod m_1, …, x = r_n mod m_nを解きます。 剰余 r_nは任意の整数が可能である一方、 法 m_nは正の互いに素な整数でなければいけません。

 
(%i1) mods : [1000, 1001, 1003, 1007];
(%o1)                   [1000, 1001, 1003, 1007]
(%i2) lreduce('gcd, mods);
(%o2)                               1
(%i3) x : random(apply("*", mods));
(%o3)                         685124877004
(%i4) rems : map(lambda([z], mod(x, z)), mods);
(%o4)                       [4, 568, 54, 624]
(%i5) chinese(rems, mods);
(%o5)                         685124877004
(%i6) chinese([1, 2], [3, n]);
(%o6)                    chinese([1, 2], [3, n])
(%i7) %, n = 4;
(%o7)                              10

Categories:  Number theory

関数: cf (expr)

連分数近似を計算します。 exprは連分数と整数の平方根と実数リテラル(整数、有理数、通常の浮動小数点や多倍長浮動小数点)から構成される式です。 cfは有理数に関して厳密な展開を計算しますが、 通常の浮動小数点に関して展開は ratepsilonで丸められ、 多倍長小数点に関して 10^(-fpprec)で丸められます。

式の中のオペランドは代数演算子を組み合わせられます。 Maximaは cfの外側で連分数に関する演算について知りません。

cfは、 listarithfalseにバインドした後、引数を評価します。 cfはリストとして表現された連分数を返します。

連分数 a + 1/(b + 1/(c + ...))はリスト [a, b, c, ...]で表現されます。 リストの要素 a, b, c, ...は整数に評価されなければいけません。 exprsqrt (n)も含むかもしれません。 nは整数です。 この場合、cfは変数 cflengthの値掛ける周期と同じ数の連分数の項を与えます。

cfdisrepが返す代数表現を評価することで、連分数は数に評価することができます。 連分数を評価する別の方法に関しては cfexpandも参照してください。

cfdisrep, cfexpand, cflengthも参照してください。

例:

Categories:  Continued fractions

関数: cfdisrep (list)

連分数 [a, b, c, ...]のリスト表現から形式 a + 1/(b + 1/(c + ...))の通常の代数式を構成し返します。

 
(%i1) cf ([1, 2, -3] + [1, -2, 1]);
(%o1)                     [1, 1, 1, 2]
(%i2) cfdisrep (%);
                                  1
(%o2)                     1 + ---------
                                    1
                              1 + -----
                                      1
                                  1 + -
                                      2

Categories:  Continued fractions

関数: cfexpand (x)

連分数 xのコンバージェントの最後(列1)とその1つ前(列2)の分子と分母の行列を返します。

 
(%i1) cf (rat (ev (%pi, numer)));

`rat' replaced 3.141592653589793 by 103993/33102 =3.141592653011902
(%o1)                  [3, 7, 15, 1, 292]
(%i2) cfexpand (%);
                         [ 103993  355 ]
(%o2)                    [             ]
                         [ 33102   113 ]
(%i3) %[1,1]/%[2,1], numer;
(%o3)                   3.141592653011902

Categories:  Continued fractions

オプション変数: cflength

デフォルト値: 1

cflengthは、値 cflength掛ける周期として関数 cfが与える連分数の項の数を制御します。 従って、デフォルトは 1周期を与えます。

 
(%i1) cflength: 1$
(%i2) cf ((1 + sqrt(5))/2);
(%o2)                    [1, 1, 1, 1, 2]
(%i3) cflength: 2$
(%i4) cf ((1 + sqrt(5))/2);
(%o4)               [1, 1, 1, 1, 1, 1, 1, 2]
(%i5) cflength: 3$
(%i6) cf ((1 + sqrt(5))/2);
(%o6)           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]

Categories:  Continued fractions

関数: divsum  
    divsum (n, k)  
    divsum (n)

divsum (n, k)nの約数の k乗した和を返します。

divsum (n)nの約数の和を返します。

 
(%i1) divsum (12);
(%o1)                          28
(%i2) 1 + 2 + 3 + 4 + 6 + 12;
(%o2)                          28
(%i3) divsum (12, 2);
(%o3)                          210
(%i4) 1^2 + 2^2 + 3^2 + 4^2 + 6^2 + 12^2;
(%o4)                          210

Categories:  Number theory

関数: euler (n)

非負の整数 nに対して n番目のEuler数を返します。 もし zerobernfalseなら、 0のEuler数は抑制されます。

Euler-Mascheroni定数に関しては %gammaを参照してください。

 
(%i1) zerobern: true$
(%i2) map (euler, [0, 1, 2, 3, 4, 5, 6]);
(%o2)               [1, 0, - 1, 0, 5, 0, - 61]
(%i3) zerobern: false$
(%i4) map (euler, [0, 1, 2, 3, 4, 5, 6]);
(%o4)               [1, - 1, 5, - 61, 1385, - 50521, 2702765]

Categories:  Number theory

オプション変数: factors_only

デフォルト値: false

ifactorsが返す値を制御します。 デフォルトの falseの時、 ifactorsは計算された素因数の多重性について情報を提供するようになります。 もし factors_onlytrueに設定されているなら、 ifactorsは素因数のリスト以外なにも返しません。

例: ifactorsを参照してください。

Categories:  Number theory

関数: fib (n)

n項の Fibonacci数を返します。 fib(0)は 0に等しく、 fib(1)は 1に等しく、 fib (-n)(-1)^(n + 1) * fib(n)に等しいです。

fibをコールした後, prevfibは 最後に計算された1つ前の Fibonacci数 fib (x - 1)に等しいです。

 
(%i1) map (fib, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o1)           [- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]

Categories:  Number theory

関数: fibtophi (expr)

exprに関する Fibonacci数を定数 %phiを使って表現します。 %phi(1 + sqrt(5))/2, 近似的に1.61803399です。

例:

 
(%i1) fibtophi (fib (n));
                           n             n
                       %phi  - (1 - %phi)
(%o1)                  -------------------
                           2 %phi - 1
(%i2) fib (n-1) + fib (n) - fib (n+1);
(%o2)          - fib(n + 1) + fib(n) + fib(n - 1)
(%i3) fibtophi (%);
            n + 1             n + 1       n             n
        %phi      - (1 - %phi)        %phi  - (1 - %phi)
(%o3) - --------------------------- + -------------------
                2 %phi - 1                2 %phi - 1
                                          n - 1             n - 1
                                      %phi      - (1 - %phi)
                                    + ---------------------------
                                              2 %phi - 1
(%i4) ratsimp (%);
(%o4)                           0

Categories:  Number theory

関数: ifactors (n)

正の整数 nに対して nの素因数分解を返します。 もし n=p1^e1..pk^nknの素因数への分解なら、 ifactorsは [[p1, e1], ... , [pk, ek]]を返します。

使われる素因数分解法は 9973までの素数による試行除算と、 Pollardのローとp-1法と、楕円曲線法です。

もし変数 ifactor_verbosetrueに設定されているなら、 ifactorは、因子が見つかり次第直近のフィードバックを含めて何をしているか詳細出力を生成します。

ifactorsが返す値はオプション変数 factors_onlyによって制御されます。 デフォルトの falseの時、 ifactorsは計算された素因数の多重性について情報を提供するようになります。 もし factors_onlytrueに設定されているなら、 ifactorsは単に素因数のリストを返します。

 
(%i1) ifactors(51575319651600);
(%o1)     [[2, 4], [3, 2], [5, 2], [1583, 1], [9050207, 1]]
(%i2) apply("*", map(lambda([u], u[1]^u[2]), %));
(%o2)                        51575319651600
(%i3) ifactors(51575319651600), factors_only : true;
(%o3)                   [2, 3, 5, 1583, 9050207]

Categories:  Number theory

関数: igcdex (n, k)

リスト [a, b, u]を返します。 ここで、 unkの最大公約数で、 ua n + b kに等しいです。 引数 nkは整数でなければいけません。

igcdexはユークリッドのアルゴリズムを実装します。 gcdex.も参照してください。

コマンド load(gcdex)でこの関数をロードします。

例:

 
(%i1) load(gcdex)$

(%i2) igcdex(30,18);
(%o2)                      [- 1, 2, 6]
(%i3) igcdex(1526757668, 7835626735736);
(%o3)            [845922341123, - 164826435, 4]
(%i4) igcdex(fib(20), fib(21));
(%o4)                   [4181, - 2584, 1]

Categories:  Number theory

関数: inrt (x, n)

xの絶対値の整数 n乗根を返します。

 
(%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
(%i2) map (lambda ([a], inrt (10^a, 3)), l);
(%o2) [2, 4, 10, 21, 46, 100, 215, 464, 1000, 2154, 4641, 10000]

Categories:  Number theory

関数: inv_mod (n, m)

mを法とする nの逆元を計算します。 もし nmを法とするゼロ因子なら、 inv_mod (n,m)falseを返します。

 
(%i1) inv_mod(3, 41);
(%o1)                           14
(%i2) ratsimp(3^-1), modulus = 41;
(%o2)                           14
(%i3) inv_mod(3, 42);
(%o3)                          false

Categories:  Number theory

関数: isqrt (x)

整数 xの絶対値の「整数平方根」を返します。

Categories:  Mathematical functions

関数: jacobi (p, q)

pqの Jacobi記号を返します。

 
(%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
(%i2) map (lambda ([a], jacobi (a, 9)), l);
(%o2)         [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]

Categories:  Number theory

関数: lcm (expr_1, ..., expr_n)

引数の最小公倍数を返します。 引数は、整数はもちろん一般式を取り得ます。

load ("functs")でこの関数をロードします。

Categories:  Number theory

関数: lucas (n)

n番目の Lucas数を返します。 lucas(0)は 2に等しく、 lucas(1)は 1に等しく、 lucas(-n)(-1)^(-n) * lucas(n)に等しいです。

 
(%i1) map (lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o1)             [7, - 4, 3, - 1, 2, 1, 3, 4, 7, 11, 18, 29, 47]

After calling lucasを呼び出した後には、グローバル変数 next_lucasは 最後の戻り値に続く Lucas数 lucas (n + 1)に等しいです。 例は、どのようにして Fibonacci数が lucasnext_lucasを使って計算可能かを示します。

 
(%i1) fib_via_lucas(n) :=
         block([lucas : lucas(n)],
         signum(n) * (2*next_lucas - lucas)/5 )$
(%i2) map (fib_via_lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
(%o2)             [- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]

Categories:  Number theory

関数: mod (x, y)

もし xyが実数で、 yがゼロでないなら、 x - y * floor(x / y)を返します。 さらにすべての実数 xに関して mod (x, 0) = xが成り立ちます。 定義 mod (x, 0) = xの議論に関しては、 Graham, Knuth, Patashnik著の「コンピュータの数学」の3.4節を参照してください。 関数 mod (x, 1) は周期が 1で mod (1, 1) = 0mod (0, 1) = 0ののこぎり波関数です。

複素数の偏角の主値(区間 (-%pi, %pi]での数)を見つけるためには、 関数 x |-> %pi - mod (%pi - x, 2*%pi)を使います。 xは引数です。

xyが定数式(例えば 10 * %pi)の時、 modfloorceilingが使うのと同じ多倍長浮動小数点評価スキームを使います。 同様に、まれですが そんな場合にはmodは間違った値を返すことがありえます。

数値でない引数 xyに関して modはいくつかの式整理規則を知っています:

 
(%i1) mod (x, 0);
(%o1)                           x
(%i2) mod (a*x, a*y);
(%o2)                      a mod(x, y)
(%i3) mod (0, x);
(%o3)                           0

Categories:  Mathematical functions

関数: next_prime (n)

nよりも大きな最も小さな素数を返します。

 
(%i1) next_prime(27);
(%o1)                       29

Categories:  Number theory

関数: partfrac (expr, var)

主変数 varに関する部分分数式 exprを展開します。 partfracは完全な部分分数分解を行います。 利用したアルゴリズムは 部分分数展開(元の分母の因子)の分母は互いに素であるという事実に基づいています。 分子は分母の線形結合として書けて、結果は展開されたものになります。

 
(%i1) 1/(1+x)^2 - 2/(1+x) + 2/(2+x);
                      2       2        1
(%o1)               ----- - ----- + --------
                    x + 2   x + 1          2
                                    (x + 1)
(%i2) ratsimp (%);
                                 x
(%o2)                 - -------------------
                         3      2
                        x  + 4 x  + 5 x + 2
(%i3) partfrac (%, x);
                      2       2        1
(%o3)               ----- - ----- + --------
                    x + 2   x + 1          2
                                    (x + 1)

関数: power_mod (a, n, m)

a^n mod mを計算するために剰余アルゴリズムを使います。 ここで、 anは整数で、 mは正の整数です。 もし nが負なら inv_modが剰余逆元を見つけるために使われます。

 
(%i1) power_mod(3, 15, 5);
(%o1)                          2
<(%i2) mod(3^15,5);
(%o2)                          2
(%i3) power_mod(2, -1, 5);
(%o3)                          3
(%i4) inv_mod(2,5);
(%o4)                          3

Categories:  Number theory

関数: primep (n)

素数テスト。 もし primep (n)falseを返すなら、 nは合成数であり、 もし trueを返すなら、 nは非常に高い確率で素数です。

341550071728321より小さな nに対しては Miller-Rabinのテストの決定的バージョンが使われます。 もし primep (n)trueを返すなら、 nは素数です。

341550071728321よりの大きな nに対して、 primepは、 primep_number_of_tests個の Miller-Rabinの疑似素数テストと 1つの Lucasの疑似素数テストを使います。 合成数の nが Miller-Rabinのテスト1つを通過する確率は 1/4より小さいです。 primep_number_of_testsに関してデフォルト値 25を使うと、 通過した nが合成である確率は 10^-15よりもはるかに小さいです。

オプション変数: primep_number_of_tests

デフォルト値: 25

primepの中で使われる Miller-Rabinのテストの回数。

Categories:  Number theory

関数: primes (start, end)

startから endまでのすべての素数のリストを返します。

 
(%i1) primes(3, 7);
(%o1)                     [3, 5, 7]

Categories:  Number theory

関数: prev_prime (n)

nよりも小さな最大の素数を返します。

 
(%i1) prev_prime(27);
(%o1)                       23

Categories:  Number theory

関数: qunit (n)

実二次数体 sqrt (n)の基本単数、すなわちノルムが 1の要素を返します。 ここで nは整数です。 これは結果的にペル方程式 a^2 - n b^2 = 1を解くことになります。

 
(%i1) qunit (17);
(%o1)                     sqrt(17) + 4
(%i2) expand (% * (sqrt(17) - 4));
(%o2)                           1

Categories:  Number theory

関数: totient (n)

n以下の nと互いに素な整数の数を返します。

Categories:  Number theory

オプション変数: zerobern

デフォルト値: true

zerobernfalseの時、 bernは Bernoulli数を除外し、 eulerはゼロに等しい Euler数を除外します。 berneulerを参照してください。

Categories:  Number theory

関数: zeta (n)

Riemannのゼータ関数を返します。 もし xが負の整数か, 0, 1,または正の偶数なら、 Reimannのゼータ関数は厳密な値に整理されます。 正の偶数に対してはオプション変数 zeta%pitrueであることも必要です。 (zeta%piを参照してください。) 浮動小数点または多倍長浮動小数点数に対しては Reimannゼータ関数は数値的に評価されます。 Maximaは、 有理非整数、浮動小数点数、複素数の引数を含む他の引数すべてに対して、 また、 zeta%piが値 falseなら偶数に対しても 名詞形 zeta (n)を返します。

zeta(1)は未定義ですが、 Maximaは上からと下からの極限 limit(zeta(x), x, ,1)を知っています。

bfzetazeta%piも参照してください。

例:

 
(%i1) zeta([-2, -1, 0, 0.5, 2, 3, 1+%i]);
                                             2
            1     1                       %pi
(%o1) [0, - --, - -, - 1.460354508809586, ----, zeta(3),
            12    2                        6
                                                    zeta(%i + 1)]
(%i2) limit(zeta(x),x,1,plus);
(%o2)                          inf
(%i3) limit(zeta(x),x,1,minus);
(%o3)                         minf

Categories:  Number theory

オプション変数: zeta%pi

デフォルト値: true

zeta%pitrueの時、 偶数 nに対して zeta%pi^nに比例する式を返します。 そうでないなら、 偶数 nに対して zetaは名詞形 zeta (n)を返します。

例:

 
(%i1) zeta%pi: true$
(%i2) zeta (4);
                                 4
                              %pi
(%o2)                         ----
                               90
(%i3) zeta%pi: false$
(%i4) zeta (4);
(%o4)                        zeta(4)

Categories:  Number theory

関数: zn_add_table (n)

(Z/nZ)のすべての要素の加算表を表示します。

zn_mult_table, zn_power_tableも参照してください。

Categories:  Number theory

関数: zn_characteristic_factors (n)

nのトーティエントの特性因子を含むリストを返します。

特性因子を使って、 nを法とする乗法群を巡回部分群の群直積として表現できます。

群自身が巡回的の時には、リストはトーティエントのみを含み、 zn_primrootを使って使って生成元を計算できます。 もしトーティエントが複数の特性因子に分割されるなら、 zn_factor_generatorsは対応する部分群の生成元を見つけます。

リストの r個の因子のそれぞれは右に続く因子を割り切ります。 従って、最後の因子 f_rnと互いに素なすべての aに対して a^f_r = 1 (mod n)を満たします。 この因子は Carmichael函数や Carmichaelラムダとしても知られています。

もし n > 2なら、 totient(n)/2^rは平方剰余の数であり、 これらのそれぞれは 2^r個の平方根を持ちます。

totient, zn_primroot, zn_factor_generatorsも参照してください。

例:

14を法とする乗法群は巡回的で、その 6要素は原始根で生成できます。

 
(%i1) [zn_characteristic_factors(14), phi: totient(14)];
(%o1)                              [[6], 6]
(%i2) [zn_factor_generators(14), g: zn_primroot(14)];
(%o2)                              [[3], 3]
(%i3) M14: makelist(power_mod(g,i,14), i,0,phi-1);
(%o3)                         [1, 3, 9, 13, 11, 5]

15を法とする乗法群は巡回的でなかく、その 8要素は2つの因子生成元で生成できます。

 
(%i1) [[f1,f2]: zn_characteristic_factors(15), totient(15)];
(%o1)                             [[2, 4], 8]
(%i2) [[g1,g2]: zn_factor_generators(15), zn_primroot(15)];
(%o2)                           [[11, 7], false]
(%i3) UG1: makelist(power_mod(g1,i,15), i,0,f1-1);
(%o3)                               [1, 11]
(%i4) UG2: makelist(power_mod(g2,i,15), i,0,f2-1);
(%o4)                            [1, 7, 4, 13]
(%i5) M15: create_list(mod(i*j,15), i,UG1, j,UG2);
(%o5)                      [1, 7, 4, 13, 11, 2, 14, 8]

最後の特性因子 4に関して、 M15の中のすべての aに対して a^4 = 1 (mod 15)を満たします。

M15は2つの特性因子と、8/2^2平方剰余を持ち、 これらのそれぞれは 2^2個の平方根を持ちます。

 
(%i6) zn_power_table(15);
                               [ 1   1  1   1 ]
                               [              ]
                               [ 2   4  8   1 ]
                               [              ]
                               [ 4   1  4   1 ]
                               [              ]
                               [ 7   4  13  1 ]
(%o6)                          [              ]
                               [ 8   4  2   1 ]
                               [              ]
                               [ 11  1  11  1 ]
                               [              ]
                               [ 13  4  7   1 ]
                               [              ]
                               [ 14  1  14  1 ]
(%i7) map(lambda([i], zn_nth_root(i,2,15)), [1,4]);
(%o7)                   [[1, 4, 11, 14], [2, 7, 8, 13]]

Categories:  Number theory

関数: zn_carmichael_lambda (n)

もし n1なら 1を返し、 そうでなければ、 nのトーシェントの最大特性因子を返します。

注意と例は zn_characteristic_factorsを参照してください。

Categories:  Number theory

関数: zn_determinant (matrix, p)

LU分解の技法を使って、 (Z/pZ)上の matrixの行列式を計算します。 pは素数でなければいけません。

行列式がゼロに等しい場合、LU分解が失敗するかもしれません。 この場合、 zn_determinantはモジュラーでない行列式を計算し、その後整理します。

zn_invert_by_luも参照してください。

例:

 
(%i1) m : matrix([1,3],[2,4]);
                                [ 1  3 ]
(%o1)                           [      ]
                                [ 2  4 ]
(%i2) zn_determinant(m, 5);
(%o2)                               3
(%i3) m : matrix([2,4,1],[3,1,4],[4,3,2]);
                               [ 2  4  1 ]
                               [         ]
(%o3)                          [ 3  1  4 ]
                               [         ]
                               [ 4  3  2 ]
(%i4) zn_determinant(m, 5);
(%o4)                               0

Categories:  Number theory

関数: zn_factor_generators (n)

nのトーティエントの特性因子に対応する因子生成元を含むリストを返します。

コメントと例に関しては zn_characteristic_factorsを参照してください。

Categories:  Number theory

関数: zn_invert_by_lu (matrix, p)

LU分解の技法を使って、 (Z/pZ)上で matrixのモジュラー逆元を計算します。 pは素数、 matrixは可逆でなければいけません。 matrixが可逆でないなら、 zn_invert_by_lufalseを返します。

zn_determinantも参照してください。

例:

 
(%i1) m : matrix([1,3],[2,4]);
                                [ 1  3 ]
(%o1)                           [      ]
                                [ 2  4 ]
(%i2) zn_determinant(m, 5);
(%o2)                               3
(%i3) mi : zn_invert_by_lu(m, 5);
                                [ 3  4 ]
(%o3)                           [      ]
                                [ 1  2 ]
(%i4) matrixmap(lambda([a], mod(a, 5)), m . mi);
                                [ 1  0 ]
(%o4)                           [      ]
                                [ 0  1 ]

Categories:  Number theory

関数: zn_log  
    zn_log (a, g, n)  
    zn_log (a, g, n, [[p1, e1], …, [pk, ek]])

離散対数を計算します。 (Z/nZ)* が巡回群、 gnを法とする原始根とし、 aがこの群の要素とします。 そのとき、zn_log (a, g, n)は合同式 g^x = a mod nを解きます。

採用したアルゴリズムは totient(n)の素因数分解を必要とします。 この素因数分解はその上時間を消費するかもしれず、いくつかの場合、 最初に素因数分解してそれから因数のリストを 4番目の引数として zn_logに渡すのが実用的かもしれません。 リストは、デフォルトオプション factors_only : falseを使って ifactors(totient(n))が返すリストと同じ形式でなければいけません。

離散対数のために、アルゴリズムは Pohlig-Hellman-縮約と Pollardのロー法を使います。 zn_logの実行時間は主にtotientの最大素因数のビット長に依存します。

zn_primroot, zn_order, ifactors, totientも参照して下さい。

例:

zn_log (a, g, n)は合同式 g^x = a mod nを解きます。

 
(%i1) n : 22$
(%i2) g : zn_primroot(n);
(%o2)                               7
(%i3) ord_7 : zn_order(7, n);
(%o3)                              10
(%i4) powers_7 : makelist(power_mod(g, x, n), x, 0, ord_7 - 1);
(%o4)              [1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
(%i5) zn_log(21, g, n);
(%o5)                               5
(%i6) map(lambda([x], zn_log(x, g, n)), powers_7);
(%o6)                [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

オプションの4番目の引数は ifactors(totient(n))が返すリストと同じ形式でなければいけません。 実行時間は主にtotientの最大素因数のビット長に依存します。

 
(%i1) (p : 2^127-1, primep(p));
(%o1)                             true
(%i2) ifs : ifactors(p - 1)$
(%i3) g : zn_primroot(p, ifs);
(%o3)                              43
(%i4) a : power_mod(g, 1234567890, p)$
(%i5) zn_log(a, g, p, ifs);
(%o5)                          1234567890
(%i6) time(%o5);
(%o6)                            [1.204]
(%i7) f_max : last(ifs);
(%o7)                       [77158673929, 1]
(%i8) slength( printf(false, "~b", f_max[1]) );
(%o8)                              37

Categories:  Number theory

関数: zn_mult_table  
    zn_mult_table (n)  
    zn_mult_table (n, gcd)

オプション引数 gcdがない時、 zn_mult_table(n)は、 nと互いに素な (Z/nZ)*のすべての要素の乗算表を表示します。

オプションの第二引数 gcdは、(Z/nZ)の特定のぶぶ集合を選択することを可能にします。 もし gcdが整数なら、 gcd(x,n) = gcdであるすべての剰余 xの乗算表を返します。 読みやすくするため行と列の見出しも追加されます。 必要なら、これらは submatrix(1, table, 1)で簡単に取り除くことができます。

もし gcdとして allを渡したら、 (Z/nZ)のゼロでないすべての要素を表に印字します。

2番目の例は部分群の乗算表を生成する代わりの方法を提示します。

zn_add_table, zn_power_tableも参照してください。

例:

デフォルトの表は (Z/nZ)*のすべての要素を表示し、 これでモジュラー乗法群の基本性質を例示したり勉強したりできます。 例えば、主対角線はすべての平方剰余を含み、 それぞれの行と列はすべての要素を含み、表は対象であるなど。

もし gcdallを与えると、(Z/nZ)のゼロでない要素すべてを表で表示します。

 
(%i1) zn_mult_table(8);
                                [ 1  3  5  7 ]
                                [            ]
                                [ 3  1  7  5 ]
(%o1)                           [            ]
                                [ 5  7  1  3 ]
                                [            ]
                                [ 7  5  3  1 ]
(%i2) zn_mult_table(8, all);
                            [ 1  2  3  4  5  6  7 ]
                            [                     ]
                            [ 2  4  6  0  2  4  6 ]
                            [                     ]
                            [ 3  6  1  4  7  2  5 ]
                            [                     ]
(%o2)                       [ 4  0  4  0  4  0  4 ]
                            [                     ]
                            [ 5  2  7  4  1  6  3 ]
                            [                     ]
                            [ 6  4  2  0  6  4  2 ]
                            [                     ]
                            [ 7  6  5  4  3  2  1 ]

もし gcdが整数なら、 見やすくするため行と列の見出しがつきます。

もし gcdで選ばれた部分集合が群なら、乗算表を生成する別の方法があります。 1を単位元として持つ群からの同型写像は読みやすい表を作ります。 写像はCRTを介して行われます。

T36_4の第2版の中で、ちょうど表 T9のように、単位元、ここでは 28、が左上隅に置かれます。

 
(%i1) T36_4: zn_mult_table(36,4);
                        [ *   4   8   16  20  28  32 ]
                        [                            ]
                        [ 4   16  32  28  8   4   20 ]
                        [                            ]
                        [ 8   32  28  20  16  8   4  ]
                        [                            ]
(%o1)                   [ 16  28  20  4   32  16  8  ]
                        [                            ]
                        [ 20  8   16  32  4   20  28 ]
                        [                            ]
                        [ 28  4   8   16  20  28  32 ]
                        [                            ]
                        [ 32  20  4   8   28  32  16 ]
(%i2) T9: zn_mult_table(36/4);
                             [ 1  2  4  5  7  8 ]
                             [                  ]
                             [ 2  4  8  1  5  7 ]
                             [                  ]
                             [ 4  8  7  2  1  5 ]
(%o2)                        [                  ]
                             [ 5  1  2  7  8  4 ]
                             [                  ]
                             [ 7  5  1  8  4  2 ]
                             [                  ]
                             [ 8  7  5  4  2  1 ]
(%i3) T36_4: matrixmap(lambda([x], chinese([0,x],[4,9])), T9);
                          [ 28  20  4   32  16  8  ]
                          [                        ]
                          [ 20  4   8   28  32  16 ]
                          [                        ]
                          [ 4   8   16  20  28  32 ]
(%o3)                     [                        ]
                          [ 32  28  20  16  8   4  ]
                          [                        ]
                          [ 16  32  28  8   4   20 ]
                          [                        ]
                          [ 8   16  32  4   20  28 ]

Categories:  Number theory

関数: zn_nth_root  
    zn_nth_root (x, n, m)  
    zn_nth_root (x, n, m, [[p1, e1], …, [pk, ek]])

xを含む (Z/mZ)の乗法部分群から xn乗根すべてのリストを返します。 もし xが法 mに対する n冪剰余でないか、 (Z/mZ)のどの乗法部分群にも含まれないなら、 falseを返します。

もし最大公約数 g = gcd(x,m)m/gと互いに素なら、 xは法 mに対する乗法部分群の要素です。

zn_nth_rootは Adlemanと Manders、 Millerによるアルゴリズムと Daniel Shanksによるモジュラー乗法群に関する定理に基づいています。

アルゴリズムはモジュラス mの素因数分解を必要とします。 mの因数分解がわかっている場合、4番目の引数として因子のリストを渡すことができます。 このオプション引数は デフォルトオプション factors_only: falseを使った時 ifactors(m)が返すリストと同じ形式のものでなければいけません。

例:

n1から6までの値をとる、 1n番目の根すべてを含むリストのリストが続く 14を法とする乗法群のべきテーブル

 
(%i1) zn_power_table(14);
                         [ 1   1   1   1   1   1 ]
                         [                       ]
                         [ 3   9   13  11  5   1 ]
                         [                       ]
                         [ 5   11  13  9   3   1 ]
(%o1)                    [                       ]
                         [ 9   11  1   9   11  1 ]
                         [                       ]
                         [ 11  9   1   11  9   1 ]
                         [                       ]
                         [ 13  1   13  1   13  1 ]
(%i2) makelist(zn_nth_root(1,n,14), n,1,6);
(%o2)  [[1], [1, 13], [1, 9, 11], [1, 13], [1], [1, 3, 5, 9, 11, 13]]

以下の例では xmと互いに素ではないですが、 (Z/mZ)の乗法部分群の要素であり、 任意の n乗根は同じ部分群の要素です。

剰余クラス 3は どの (Z/63Z)の乗法部分群の要素でもなく、 なので 27の3乗根として返されません。

ここで zn_power_tablegcd(x,63) = 9が成り立つ (Z/63Z)のすべての剰余 xを表示します。 この部分群は (Z/7Z)*に同型で、単位元 36はCRTを介して計算されます。

 
(%i1) m: 7*9$

(%i2) zn_power_table(m,9);
                         [ 9   18  36  9   18  36 ]
                         [                        ]
                         [ 18  9   36  18  9   36 ]
                         [                        ]
                         [ 27  36  27  36  27  36 ]
(%o2)                    [                        ]
                         [ 36  36  36  36  36  36 ]
                         [                        ]
                         [ 45  9   27  18  54  36 ]
                         [                        ]
                         [ 54  18  27  9   45  36 ]
(%i3) zn_nth_root(27,3,m);
(%o3)                           [27, 45, 54]
(%i4) id7:1$  id63_9: chinese([id7,0],[7,9]);
(%o5)                                36

以下のRSAのような例では、モジュラス Nは平方因子をもちません。 すなわち、排他的に1乗冪因子に分解され、 0から N-1までのすべての xは乗法部分群に含まれます。

解読処理は e乗根を必要とします。 etotient(N)と互いに素で、なので e乗根は一意です。 この場合、 zn_nth_rootは効果的に CRT-RSAを実行します。 (flattenは括弧は取り除きますが解は取り除かないことに注意してください)

 
(%i1) [p,q,e]: [5,7,17]$  N: p*q$

(%i3) xs: makelist(x,x,0,N-1)$

(%i4) ys: map(lambda([x],power_mod(x,e,N)),xs)$

(%i5) zs: flatten(map(lambda([y], zn_nth_root(y,e,N)), ys))$

(%i6) is(zs = xs);
(%o6)                             true

以下の例では、モジュラスの因数分解が知られていて、 4番目の引数として渡されます。

 
(%i1) p: 2^107-1$  q: 2^127-1$  N: p*q$

(%i4) ibase: obase: 16$

(%i5) msg: 11223344556677889900aabbccddeeff$

(%i6) enc: power_mod(msg, 10001, N);
(%o6)    1a8db7892ae588bdc2be25dd5107a425001fe9c82161abc673241c8b383
(%i7) zn_nth_root(enc, 10001, N, [[p,1],[q,1]]);
(%o7)               [11223344556677889900aabbccddeeff]

Categories:  Number theory

関数: zn_order  
    zn_order (x, n)  
    zn_order (x, n, [[p1, e1], …, [pk, ek]])

xが 有限群 (Z/nZ)*の単位元ならその次数を返し、そうでないなら falseを返します。 xnと互いに素なら nを法とする単位元です。

採用したアルゴリズムは totient(n)の素因数分解を必要とします。 この素因数分解はその上時間を消費するかもしれず、いくつかの場合、 最初に素因数分解してそれから因数のリストを 3番目の引数として zn_orderに渡すのが実用的かもしれません。 リストは、デフォルトオプション factors_only : falseを使って ifactors(totient(n))が返すリストと同じ形式でなければいけません。

zn_primroot, ifactors, totientも参照して下さい。

例:

zn_orderは (Z/nZ)*の単位元 xの次数を計算します。

 
(%i1) n : 22$
(%i2) g : zn_primroot(n);
(%o2)                               7
(%i3) units_22 : sublist(makelist(i,i,1,21), lambda([x], gcd(x, n) = 1));
(%o3)              [1, 3, 5, 7, 9, 13, 15, 17, 19, 21]
(%i4) (ord_7 : zn_order(7, n)) = totient(n);
(%o4)                            10 = 10
(%i5) powers_7 : makelist(power_mod(g,i,n), i,0,ord_7 - 1);
(%o5)              [1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
(%i6) map(lambda([x], zn_order(x, n)), powers_7);
(%o6)              [1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
(%i7) map(lambda([x], ord_7/gcd(x, ord_7)), makelist(i, i,0,ord_7 - 1));
(%o7)              [1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
(%i8) totient(totient(n));
(%o8)                               4

オプションの三番目の引数は ifactors(totient(n))が返すリストと同じ形式でなければいけません。

 
(%i1) (p : 2^142 + 217, primep(p));
(%o1)                             true
(%i2) ifs : ifactors( totient(p) )$
(%i3) g : zn_primroot(p, ifs);
(%o3)                               3
(%i4) is( (ord_3 : zn_order(g, p, ifs)) = totient(p) );
(%o4)                             true
(%i5) map(lambda([x], ord_3/zn_order(x, p, ifs)), makelist(i,i,2,15));
(%o5)        [22, 1, 44, 10, 5, 2, 22, 2, 8, 2, 1, 1, 20, 1]

Categories:  Number theory

関数: zn_power_table  
    zn_power_table (n)  
    zn_power_table (n, gcd)  
    zn_power_table (n, gcd, max_exp)

オプション引数なしの場合、 zn_power_table(n)nと互いに素なすべての剰余クラスである (Z/nZ)*のすべての要素のべき表を表示します。 指数は 1から(Carmichael函数や Carmichaelラムダとしても知られる) totient(n) の最大特性因子までループし、表は右側1の列で終わります。

オプションの第2引数 gcdで (Z/nZ)の特定の部分集合の冪を選択することができます。 もし gcdが整数なら、 gcd(x,n) = gcdが成立するすべての剰余クラス xの冪を返します。 すなわち、 gcdのデフォルト値は 1です。 もし gcdallを渡したら、 表は (Z/nZ)のすべての要素の冪を含みます。

もしオプションの第3引数 max_expを与えると、 指数は1から max_expまでループします。

zn_add_table, zn_mult_tableも参照してください。

例:

gcd = 1であるデフォルトでは 例えば FermatやEulerの基本定理を例示したり勉強したりできます。

引数 gcdで (Z/nZ)の部分集合を選択して乗法部分群や同型写像が勉強できます。 例えば、群 G10G10_2は乗算の下でどちらも G5と同型です。 1G5では単位元です。 それぞれで 1そうなります。 G10では 6も単位元です、G10_2 原始根、n乗根などの対応する写像が存在します。

 
(%i1) zn_power_table(10);
                              [ 1  1  1  1 ]
                              [            ]
                              [ 3  9  7  1 ]
(%o1)                         [            ]
                              [ 7  9  3  1 ]
                              [            ]
                              [ 9  1  9  1 ]
(%i2) zn_power_table(10,2);
                              [ 2  4  8  6 ]
                              [            ]
                              [ 4  6  4  6 ]
(%o2)                         [            ]
                              [ 6  6  6  6 ]
                              [            ]
                              [ 8  4  2  6 ]
(%i3) zn_power_table(10,5);
(%o3)                         [ 5  5  5  5 ]
(%i4) zn_power_table(10,10);
(%o4)                         [ 0  0  0  0 ]
(%i5) G5: [1,2,3,4];
(%o6)                          [1, 2, 3, 4]
(%i6) G10_2: map(lambda([x], chinese([0,x],[2,5])), G5);
(%o6)                          [6, 2, 8, 4]
(%i7) G10: map(lambda([x], power_mod(3, zn_log(x,2,5), 10)), G5);
(%o7)                          [1, 3, 7, 9]

もし gcdallを渡せば、 表は (Z/nZ)のすべての要素の冪を含みます。

3番目の引数 max_expで最高指数を設定できます。 以下の表は RSAの非常に小さな例を表示します。

 
(%i1) N:2*5$ phi:totient(N)$ e:7$ d:inv_mod(e,phi)$

(%i5) zn_power_table(N, all, e*d);
       [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 ]
       [                                                               ]
       [ 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 ]
       [                                                               ]
       [ 2  4  8  6  2  4  8  6  2  4  8  6  2  4  8  6  2  4  8  6  2 ]
       [                                                               ]
       [ 3  9  7  1  3  9  7  1  3  9  7  1  3  9  7  1  3  9  7  1  3 ]
       [                                                               ]
       [ 4  6  4  6  4  6  4  6  4  6  4  6  4  6  4  6  4  6  4  6  4 ]
(%o5)  [                                                               ]
       [ 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5 ]
       [                                                               ]
       [ 6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6 ]
       [                                                               ]
       [ 7  9  3  1  7  9  3  1  7  9  3  1  7  9  3  1  7  9  3  1  7 ]
       [                                                               ]
       [ 8  4  2  6  8  4  2  6  8  4  2  6  8  4  2  6  8  4  2  6  8 ]
       [                                                               ]
       [ 9  1  9  1  9  1  9  1  9  1  9  1  9  1  9  1  9  1  9  1  9 ]

Categories:  Number theory

関数: zn_primroot  
    zn_primroot (n)  
    zn_primroot (n, [[p1, e1], …, [pk, ek]])

もし乗法群 (Z/nZ)*が巡回的なら、 zn_primrootnを法とする最小の原始根を計算します。 もし n2, 4, p^k または 2*p^kに等しいなら (Z/nZ)* は巡回的です。 ここで pは素数で 2より大きく kは自然数です。 もしオプション変数 zn_primroot_pretest (デフォルト: false)が trueに設定されているなら zn_primrootは条件付き事前テスト(according pretest)を実行します。 どんな場合でも計算は上限 zn_primroot_limitで制限されます。

もし (Z/nZ)*が巡回的でないか zn_primroot_limitまで原始根がないなら、 zn_primrootfalseを返します。

採用したアルゴリズムは totient(n)の素因数分解を必要とします。 この素因数分解はその上時間を消費するかもしれず、いくつかの場合、 最初に素因数分解してそれから因数のリストを 3番目の引数として zn_primrootに渡すのが実用的かもしれません。

リストは、デフォルトオプション factors_only : falseを使って ifactors(totient(n))が返すリストと同じ形式でなければいけません。

zn_primroot_p, zn_order, ifactors, totientも参照してください。

例:

zn_primrootnを法とする最小原始根を計算するか、 falseを返します。

 
(%i1) n : 14$
(%i2) g : zn_primroot(n);
(%o2)                               3
(%i3) zn_order(g, n) = totient(n);
(%o3)                             6 = 6
(%i4) n : 15$
(%i5) zn_primroot(n);
(%o5)                             false

オプションの二番目の引数は ifactors(totient(n))が返すリストと同じ形式でなければいけません。

 
(%i1) (p : 2^142 + 217, primep(p));
(%o1)                             true
(%i2) ifs : ifactors( totient(p) )$
(%i3) g : zn_primroot(p, ifs);
(%o3)                               3
(%i4) [time(%o2), time(%o3)];
(%o4)                    [[15.556972], [0.004]]
(%i5) is(zn_order(g, p, ifs) = p - 1);
(%o5)                             true
(%i6) n : 2^142 + 216$
(%i7) ifs : ifactors(totient(n))$
(%i8) zn_primroot(n, ifs),
      zn_primroot_limit : 200, zn_primroot_verbose : true;
`zn_primroot' stopped at zn_primroot_limit = 200
(%o8)                             false

Categories:  Number theory

オプション変数: zn_primroot_limit

デフォルト値: 1000

もし zn_primrootが原始根をみつけられないなら、 上限でやめます。 もしオプション変数 zn_primroot_verbose (デフォルト: false)が trueに設定されているなら、 zn_primroot_limitに到達した時メッセージが表示されます。

Categories:  Number theory

関数: zn_primroot_p  
    zn_primroot_p (x, n)  
    zn_primroot_p (x, n, [[p1, e1], …, [pk, ek]])

xが乗法群 (Z/nZ)*の原始根かチェックします。

採用したアルゴリズムは totient(n)の素因数分解を必要とします。 この素因数分解はその上時間を消費するかもしれず、いくつかの場合、 最初に素因数分解してそれから因数のリストを 3番目の引数として zn_primroot_pに渡すのが実用的かもしれません。 リストは、デフォルトオプション factors_only : falseを使って ifactors(totient(n))が返すリストと同じ形式でなければいけません。

zn_primroot, zn_order, ifactors, totientも参照して下さい。

例:

述語論理関数としての zn_primroot_p

 
(%i1) n : 14$
(%i2) units_14 : sublist(makelist(i,i,1,13), lambda([i], gcd(i, n) = 1));
(%o2)                     [1, 3, 5, 9, 11, 13]
(%i3) zn_primroot_p(13, n);
(%o3)                            false
(%i4) sublist(units_14, lambda([x], zn_primroot_p(x, n)));
(%o4)                            [3, 5]
(%i5) map(lambda([x], zn_order(x, n)), units_14);
(%o5)                      [1, 6, 6, 3, 3, 2]

オプションの三番目の引数は ifactors(totient(n))が返すリストと同じ形式でなければいけません。

 
(%i1) (p : 2^142 + 217, primep(p));
(%o1)                             true
(%i2) ifs : ifactors( totient(p) )$
(%i3) sublist(makelist(i,i,1,50), lambda([x], zn_primroot_p(x, p, ifs)));
(%o3)      [3, 12, 13, 15, 21, 24, 26, 27, 29, 33, 38, 42, 48]
(%i4) [time(%o2), time(%o3)];
(%o4)                   [[7.748484], [0.036002]]

オプション変数: zn_primroot_pretest

デフォルト値: false

もし n2, 4, p^k2*p^kなら 乗法群 (Z/nZ)*は巡回的です。 ここで pは素数で 2より大きく、 kは自然数です。

zn_primroot_pretestzn_primrootが 最小原始根を計算する前にこれらの場合の1つが起こるかどうかチェックするかどうか制御します。 zn_primroot_pretesttrueに設定されているときだけ、 これの事前テストが実行されます。

Categories:  Number theory

オプション変数: zn_primroot_verbose

デフォルト値: false

zn_primroot_limitに達したとき、 zn_primrootがメッセージを表示するかどうか制御します。

Categories:  Number theory


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30. Symmetries


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.1 Introduction to Symmetries

symは多項式の対称群を扱うパッケージです。

これは Annick Valibouze (http://www-calfor.lip6.fr/~avb/) によって Macsyma-Symbolicsのために書かれました。 アルゴリズムは以下の論文に記載されています:

  1. Fonctions symétriques et changements de bases. Annick Valibouze. EUROCAL'87 (Leipzig, 1987), 323-332, Lecture Notes in Comput. Sci 378. Springer, Berlin, 1989.
    http://www.stix.polytechnique.fr/publications/1984-1994.html
  2. Résolvantes et fonctions symétriques. Annick Valibouze. Proceedings of the ACM-SIGSAM 1989 International Symposium on Symbolic and Algebraic Computation, ISSAC'89 (Portland, Oregon). ACM Press, 390-399, 1989.
    http://www-calfor.lip6.fr/~avb/DonneesTelechargeables/MesArticles/issac89ACMValibouze.pdf
  3. Symbolic computation with symmetric polynomials, an extension to Macsyma. Annick Valibouze. Computers and Mathematics (MIT, USA, June 13-17, 1989), Springer-Verlag, New York Berlin, 308-320, 1989.
    http://www.stix.polytechnique.fr/publications/1984-1994.html
  4. Théorie de Galois Constructive. Annick Valibouze. Mémoire d'habilitation à diriger les recherches (HDR), Université P. et M. Curie (Paris VI), 1994.

Categories:  Group theory · Polynomials · Share packages · Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2 Functions and Variables for Symmetries


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.1 Changing bases

関数: comp2pui (n, L)

リスト Lで与えられた与えられた完全対称関数から 0から nまでの基本対称関数への変換 (passing)を実装します。 もしリスト Ln+1個より少ない要素を含むなら、 タイプ h1, h2などの形式的な値で完成されます。 もしリスト Lの最初の要素が存在するなら、 それはアルファベットのサイズを指定します。 そうでないなら、サイズは nに設定されます。

 
(%i1) comp2pui (3, [4, g]);
                        2                    2
(%o1)    [4, g, 2 h2 - g , 3 h3 - g h2 + g (g  - 2 h2)]

Categories:  Package sym

関数: ele2pui (m, L)

基本対称関数から完全関数に変換します。 comp2elecomp2compに似ています。

基数を変える他の関数: comp2ele

Categories:  Package sym

関数: ele2comp (m, L)

基本対称関数から完全関数に変換します。 comp2elecomp2puiに似ています。

基数を変える他の関数: comp2ele

Categories:  Package sym

関数: elem (ele, sym, lvar)

リスト eleで与えられた基本対称関数を使って、 リスト lvarに含まれる変数に関して対称多項式 symを分解します。 もし eleの最初の要素が与えられたらそれがアルファベットのサイズで、 そうでないならサイズは多項式 symの次数です。 もし値がリスト eleにないなら、 タイプ e1, e2などの形式的値が加えられます。 多項式 symは3つの異なる形式で与えられます: contracted (elemはその時、デフォルト値 1であるべきです), partitioned (elemは 3であるべきです),または extended(すなわち多項式全体, そして elemは 2であるべきです)。 関数 puiは同じ方法で使われます。

以下のように、サイズ 3のアルファベットと値 7を持つ最初の基本対称関数 e1上で、 (ここで変数の2つにだけ依存する)短縮された形式が x^4-2*x*yである 3変数の対称多項式を基本対称関数で分解します:

 
(%i1) elem ([3, 7], x^4 - 2*x*y, [x, y]);
(%o1) 7 (e3 - 7 e2 + 7 (49 - e2)) + 21 e3

                                         + (- 2 (49 - e2) - 2) e2
(%i2) ratsimp (%);
                              2
(%o2)             28 e3 + 2 e2  - 198 e2 + 2401

基数を変える他の関数: comp2ele

Categories:  Package sym

関数: mon2schur (L)

リスト Lは Schur関数 S_Lを表します: i_1 <= i_2 <= ... <= i_q成る L = [i_1, i_2, ..., i_q]を持ちます。 Schur関数 S_[i_1, i_2, ..., i_q]は、最初の q個の行と列 1 + i_1, 2 + i_2, ..., q + i_qから成る無限行列 h_[i-j], i <= 1, j <= 1の小行列式です。

この Schur関数は treinatkostkaを使うことで単項式の項で書かれることができます。 返される形式は、変数 x_1,x_2,... の短縮表現の対称多項式です。

 
(%i1) mon2schur ([1, 1, 1]);
(%o1)                       x1 x2 x3
(%i2) mon2schur ([3]);
                                  2        3
(%o2)                x1 x2 x3 + x1  x2 + x1
(%i3) mon2schur ([1, 2]);
                                      2
(%o3)                  2 x1 x2 x3 + x1  x2

以上は3つの変数に関してこれが以下を与えることを意味します:

 
   2 x1 x2 x3 + x1^2 x2 + x2^2 x1 + x1^2 x3 + x3^2 x1
    + x2^2 x3 + x3^2 x2

基数を変えるための他の関数: comp2ele

Categories:  Package sym

関数: multi_elem (l_elem, multi_pc, l_var)

l_elemに含まれる基本対称関数を使って、リスト l_varのリストに含まれる変数のグループに関して多重対称多項式を多重短縮形 multi_pcに分解します。

 
(%i1) multi_elem ([[2, e1, e2], [2, f1, f2]], a*x + a^2 + x^3,
      [[x, y], [a, b]]);
                                                  3
(%o1)         - 2 f2 + f1 (f1 + e1) - 3 e1 e2 + e1
(%i2) ratsimp (%);
                         2                       3
(%o2)         - 2 f2 + f1  + e1 f1 - 3 e1 e2 + e1

基数を変えるための他の関数: comp2ele

Categories:  Package sym

関数: multi_pui

関数 multi_elemが関数 elemに対するものであるように、関数 puiに対するものです。

 
(%i1) multi_pui ([[2, p1, p2], [2, t1, t2]], a*x + a^2 + x^3,
      [[x, y], [a, b]]);
                                            3
                                3 p1 p2   p1
(%o1)              t2 + p1 t1 + ------- - ---
                                   2       2

Categories:  Package sym

関数: pui (L, sym, lvar)

リスト Lの中のべき関数を使って、 リスト lvarの中の変数に関して対称多項式 symを分解します。 もし Lの最初の要素が与えられるなら、それはアルファベットのサイズです。 そうでないなら、サイズは多項式 symの次数になります。 もしリスト Lの中に値がないなら、タイプ p1, p2, などの形式的な値が加えられます。 多項式 symは3つの異なる形式で与えられることができます: contracted (elemは 1でなければならず、デフォルト値です), partitioned (elemは 3でなければいけません), extended (すなわち多項式全体、そして elemは 2でなければいけません)。 関数 puiは同じ方法で使われます。

 
(%i1) pui;
(%o1)                           1
(%i2) pui ([3, a, b], u*x*y*z, [x, y, z]);
                       2
                   a (a  - b) u   (a b - p3) u
(%o2)              ------------ - ------------
                        6              3
(%i3) ratsimp (%);
                                       3
                      (2 p3 - 3 a b + a ) u
(%o3)                 ---------------------
                                6

基数を変えるための他の関数: comp2ele

Categories:  Package sym

関数: pui2comp (n, lpui)

リスト lpuiで与えられたべき関数を使って、 (最初に長さを持ち)最初の n個の完全関数のリストを返します。 もしリスト lpuiが空なら基数は nで、 そうでないなら基数は (comp2elecomp2pui同様)最初の要素です。

 
(%i1) pui2comp (2, []);
                                       2
                                p2 + p1
(%o1)                   [2, p1, --------]
                                   2
(%i2) pui2comp (3, [2, a1]);
                                            2
                                 a1 (p2 + a1 )
                         2  p3 + ------------- + a1 p2
                  p2 + a1              2
(%o2)     [2, a1, --------, --------------------------]
                     2                  3
(%i3) ratsimp (%);
                            2                     3
                     p2 + a1   2 p3 + 3 a1 p2 + a1
(%o3)        [2, a1, --------, --------------------]
                        2               6

基数を変えるための他の関数: comp2ele

Categories:  Package sym

関数: pui2ele (n, lpui)

べき関数から基本対称関数への変換 (passage)に影響します。 もしフラグ pui2elegirardなら 1から nまでの基本対称関数のリストを返し、 もしフラグが closeなら n番目の基本対称関数を返します。

基数を変えるための他の関数: comp2ele

Categories:  Package sym

関数: puireduc (n, lpui)

lpuiは最初の要素が整数 mのリストです。 puireducは最初の m個を使って最初の n個のべき関数を与えます。

 
(%i1) puireduc (3, [2]);
                                         2
                                   p1 (p1  - p2)
(%o1)          [2, p1, p2, p1 p2 - -------------]
                                         2
(%i2) ratsimp (%);
                                           3
                               3 p1 p2 - p1
(%o2)              [2, p1, p2, -------------]
                                     2

Categories:  Package sym

関数: schur2comp (P, l_var)

Pはリスト l_varの変数の多項式です。 これらの変数のそれぞれは完全対称関数を表します。 l_varの中で、 i番目の完全対称関数は 文字 hと整数 iの連結 hiによって表されます。 この関数は Pを Schur関数を使って表現します。

 
(%i1) schur2comp (h1*h2 - h3, [h1, h2, h3]);
(%o1)                         s
                               1, 2
(%i2) schur2comp (a*h3, [h3]);
(%o2)                         s  a
                               3

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.2 Changing representations

関数: cont2part (pc, lvar)

変数が lvarの中に含まれている短縮形 pcに関連付けられた分割多項式を返します。

 
(%i1) pc: 2*a^3*b*x^4*y + x^5;
                           3    4      5
(%o1)                   2 a  b x  y + x
(%i2) cont2part (pc, [x, y]);
                                   3
(%o2)              [[1, 5, 0], [2 a  b, 4, 1]]

Categories:  Package sym

関数: contract (psym, lvar)

リスト lvarに含まれる変数に関する多項式 psymの 短縮形(すなわち、対称群の作用の下での単項軌道)を返します。 関数 exploseは逆演算を実行します。 関数 tcontractは多項式の対称性をテストします。

 
(%i1) psym: explose (2*a^3*b*x^4*y, [x, y, z]);
         3      4      3      4      3    4        3    4
(%o1) 2 a  b y z  + 2 a  b x z  + 2 a  b y  z + 2 a  b x  z

                                           3      4      3    4
                                      + 2 a  b x y  + 2 a  b x  y
(%i2) contract (psym, [x, y, z]);
                              3    4
(%o2)                      2 a  b x  y

Categories:  Package sym

関数: explose (pc, lvar)

短縮形 pcに関連付けられた対称多項式を返します。 リスト lvarは変数を含みます。

 
(%i1) explose (a*x + 1, [x, y, z]);
(%o1)                  a z + a y + a x + 1

Categories:  Package sym

関数: part2cont (ppart, lvar)

対称式を分割形から短縮形に変換します。 短縮形は lvarの中の変数で表されます。

 
(%i1) part2cont ([[2*a^3*b, 4, 1]], [x, y]);
                              3    4
(%o1)                      2 a  b x  y

Categories:  Package sym

関数: partpol (psym, lvar)

psymはリスト lvarの変数に関する対称多項式です。 この関数は分割表現を返します。

 
(%i1) partpol (-a*(x + y) + 3*x*y, [x, y]);
(%o1)               [[3, 1, 1], [- a, 1, 0]]

Categories:  Package sym

関数: tcontract (pol, lvar)

多項式 polがリスト lvarの変数に関して対称かテストします。 もしそうなら関数 contractのように短縮表現を返します。

Categories:  Package sym

関数: tpartpol (pol, lvar)

多項式 polがリスト lvarの中の変数に関して対称かテストします。 もしそうなら関数 partpolのように分割表現を返します。

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.3 Groups and orbits

関数: direct ([p_1, ..., p_n], y, f, [lvar_1, ..., lvar_n])

変数 lvar_1, ..., lvar_nのリストと変数 yについての多項式 p_1, ..., p_nに関して、 関数 fに関連付けられた順像 (direct image) (M. Giusti, D. Lazard et A. Valibouze, ISSAC 1988, Romeを参照してください) を計算します。 関数 fのアリティ (arity)が計算にとって重要です。 例えば、 fについての式がある変数に依存しないなら、その変数を含むことは役に立たず、 含めないなら計算量を相当に減らすことにもなるでしょう。

 
(%i1) direct ([z^2  - e1* z + e2, z^2  - f1* z + f2],
              z, b*v + a*u, [[u, v], [a, b]]);
       2
(%o1) y  - e1 f1 y

                                 2            2             2   2
                  - 4 e2 f2 - (e1  - 2 e2) (f1  - 2 f2) + e1  f1
                + -----------------------------------------------
                                         2
(%i2) ratsimp (%);
              2                2                   2
(%o2)        y  - e1 f1 y + (e1  - 4 e2) f2 + e2 f1
(%i3) ratsimp (direct ([z^3-e1*z^2+e2*z-e3,z^2  - f1* z + f2],
              z, b*v + a*u, [[u, v], [a, b]]));
       6            5         2                        2    2   4
(%o3) y  - 2 e1 f1 y  + ((2 e1  - 6 e2) f2 + (2 e2 + e1 ) f1 ) y

                          3                               3   3
 + ((9 e3 + 5 e1 e2 - 2 e1 ) f1 f2 + (- 2 e3 - 2 e1 e2) f1 ) y

         2       2        4    2
 + ((9 e2  - 6 e1  e2 + e1 ) f2

                    2       2       2                   2    4
 + (- 9 e1 e3 - 6 e2  + 3 e1  e2) f1  f2 + (2 e1 e3 + e2 ) f1 )

  2          2                      2     3          2
 y  + (((9 e1  - 27 e2) e3 + 3 e1 e2  - e1  e2) f1 f2

                 2            2    3                5
 + ((15 e2 - 2 e1 ) e3 - e1 e2 ) f1  f2 - 2 e2 e3 f1 ) y

           2                   3           3     2   2    3
 + (- 27 e3  + (18 e1 e2 - 4 e1 ) e3 - 4 e2  + e1  e2 ) f2

         2      3                   3    2   2
 + (27 e3  + (e1  - 9 e1 e2) e3 + e2 ) f1  f2

                   2    4        2   6
 + (e1 e2 e3 - 9 e3 ) f1  f2 + e3  f1

根が和 a+uである多項式を見つけること。 ただし、 az^2 - e_1 z + e_2の根で、 uz^2 - f_1 z + f_2の根です。

 
(%i1) ratsimp (direct ([z^2 - e1* z + e2, z^2 - f1* z + f2],
                          z, a + u, [[u], [a]]));
       4                    3             2
(%o1) y  + (- 2 f1 - 2 e1) y  + (2 f2 + f1  + 3 e1 f1 + 2 e2

     2   2                              2               2
 + e1 ) y  + ((- 2 f1 - 2 e1) f2 - e1 f1  + (- 2 e2 - e1 ) f1

                  2                     2            2
 - 2 e1 e2) y + f2  + (e1 f1 - 2 e2 + e1 ) f2 + e2 f1  + e1 e2 f1

     2
 + e2

directは2つのフラグを受け付けます: elementairespuissances (デフォルト)。 これらは計算の中に現れる対称多項式をそれぞれ基本対称関数またはべき関数に分解することを 許します。

この関数で使われる symの関数は以下の通りです:

multi_orbit (仲間 orbit), pui_direct, multi_elem (仲間 elem), multi_pui (だからpui), pui2ele, (もしフラグ directpuissancesの中にあるなら) ele2pui

Categories:  Package sym

関数: multi_orbit (P, [lvar_1, lvar_2,..., lvar_p])

Pはリスト lvar_1, lvar_2, ..., lvar_pに含まれる変数の集合に関する多項式です。 この関数はこれら pリストで表された変数の集合の対称群の積の作用の下で多項式 Pの軌道を返します。

 
(%i1) multi_orbit (a*x + b*y, [[x, y], [a, b]]);
(%o1)                [b y + a x, a y + b x]
(%i2) multi_orbit (x + y + 2*a, [[x, y], [a, b, c]]);
(%o2)        [y + x + 2 c, y + x + 2 b, y + x + 2 a]

以下も参照してください: 単対称群の作用に関する orbit

Categories:  Package sym

関数: multsym (ppart_1, ppart_2, n)

次数 nの対称群の作用を法としてのみ働くことで、 n個の変数に関する2つの対称多項式の積を返します。 多項式は分割形式です。

x, yに関する鵜2つの対称多項式: 分割形式が [[3, 1], [2, 1, 1]][[5, 2]]である 3*(x + y) + 2*x*y5*(x^2 + y^2) が与えられたとして、それらの積は、

 
(%i1) multsym ([[3, 1], [2, 1, 1]], [[5, 2]], 2);
(%o1)         [[10, 3, 1], [15, 3, 0], [15, 2, 1]]

、すなわち、 10*(x^3*y + y^3*x) + 15*(x^2*y + y^2*x) + 15*(x^3 + y^3)です。

対称多項式の表現を変える関数は以下の通りです:

contract, cont2part, explose, part2cont, partpol, tcontract, tpartpol

Categories:  Package sym

関数: orbit (P, lvar)

リスト lvarの変数の集合の対称群の作用の下で リスト lvarの変数に関する多項式 Pの軌道を計算します。

 
(%i1) orbit (a*x + b*y, [x, y]);
(%o1)                [a y + b x, b y + a x]
(%i2) orbit (2*x + x^2, [x, y]);
                        2         2
(%o2)                 [y  + 2 y, x  + 2 x]

多項式に関する対称群の積の作用 (action)に関しては multi_orbitも参照してください。

Categories:  Package sym

関数: pui_direct (orbite, [lvar_1, ..., lvar_n], [d_1, d_2, ..., d_n])

fを変数の n個のブロック lvar_1, ..., lvar_nに関する多項式とします。 c_ilvar_iの中の変数の数とし、 SCを次数 c_1, ..., c_nn個の対称群の積とします。 この群は自然に fに作用します。 リスト orbiteSCの作用の下での関数 fの軌道で、 SC(f)を意味します。 (このリストは関数 multi_orbitによって得られます。) dic_1 <= d_1, c_2 <= d_2, ..., c_n <= d_n. を満たすような整数です。

SDを対称群 S_[d_1] x S_[d_2] x ... x S_[d_n] の積とします。 関数 pui_directSC(f)のべき関数から演繹された SD(f)の最初の n個のべき関数を返します。 ここで nSD(f)のサイズです。

結果は SDに関する多重短縮された形式です。 すなわち、 SDの作用の下で軌道毎にただ1つの要素が保持されます。

 
(%i1) l: [[x, y], [a, b]];
(%o1)                   [[x, y], [a, b]]
(%i2) pui_direct (multi_orbit (a*x + b*y, l), l, [2, 2]);
                                       2  2
(%o2)               [a x, 4 a b x y + a  x ]
(%i3) pui_direct (multi_orbit (a*x + b*y, l), l, [3, 2]);
                             2  2     2    2        3  3
(%o3) [2 a x, 4 a b x y + 2 a  x , 3 a  b x  y + 2 a  x ,

    2  2  2  2      3    3        4  4
12 a  b  x  y  + 4 a  b x  y + 2 a  x ,

    3  2  3  2      4    4        5  5
10 a  b  x  y  + 5 a  b x  y + 2 a  x ,

    3  3  3  3       4  2  4  2      5    5        6  6
40 a  b  x  y  + 15 a  b  x  y  + 6 a  b x  y + 2 a  x ]
(%i4) pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a],
      [[x, y], [a, b, c]], [2, 3]);
                             2              2
(%o4) [3 x + 2 a, 6 x y + 3 x  + 4 a x + 4 a ,

                 2                   3        2       2        3
              9 x  y + 12 a x y + 3 x  + 6 a x  + 12 a  x + 8 a ]

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.4 Partitions

関数: kostka (part_1, part_2)

P. Esperetによって書かれ、分割 part_1part_2のKostka数を計算します。

 
(%i1) kostka ([3, 3, 3], [2, 2, 2, 1, 1, 1]);
(%o1)                           6

Categories:  Package sym

関数: lgtreillis (n, m)

重み nと長さ mの分割のリストを返します。

 
(%i1) lgtreillis (4, 2);
(%o1)                   [[3, 1], [2, 2]]

以下も参照してください: ltreillis, treillis, treinat

Categories:  Package sym

関数: ltreillis (n, m)

重み nm以下の長さの分割のリストを返します。

 
(%i1) ltreillis (4, 2);
(%o1)               [[4, 0], [3, 1], [2, 2]]

以下も参照してください: lgtreillis, treillis, treinat

Categories:  Package sym

関数: treillis (n)

重み nの分割すべてを返します。

 
(%i1) treillis (4);
(%o1)    [[4], [3, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1]]

以下も参照してください: lgtreillis, ltreillis, treinat

Categories:  Package sym

関数: treinat (part)

自然な順序に関する分割 partより低い分割のリストを返します。

 
(%i1) treinat ([5]);
(%o1)                         [[5]]
(%i2) treinat ([1, 1, 1, 1, 1]);
(%o2) [[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1],

                                                 [1, 1, 1, 1, 1]]
(%i3) treinat ([3, 2]);
(%o3)                 [[5], [4, 1], [3, 2]]

以下も参照してください: lgtreillis, ltreillis, treillis

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.5 Polynomials and their roots

関数: ele2polynome (L, z)

根の基本対称関数がリスト L = [n, e_1, ..., e_n]の中にあるような zに関する多項式を返します。 ここで nは多項式の次数であり、 e_ii番目の基本対称関数です。

 
(%i1) ele2polynome ([2, e1, e2], z);
                          2
(%o1)                    z  - e1 z + e2
(%i2) polynome2ele (x^7 - 14*x^5 + 56*x^3  - 56*x + 22, x);
(%o2)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
(%i3) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
                  7       5       3
(%o3)            x  - 14 x  + 56 x  - 56 x + 22

逆: polynome2ele (P, z)

次も参照してください: polynome2ele, pui2polynome

Categories:  Package sym

関数: polynome2ele (P, x)

リスト l = [n, e_1, ..., e_n]を与えます。 ここで nは変数 xに関する多項式 Pの次数であり、 e_iPの根の i番目の基本対称関数です。

 
(%i1) polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
(%o1)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
(%i2) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
                  7       5       3
(%o2)            x  - 14 x  + 56 x  - 56 x + 22

逆: ele2polynome (l, x)

Categories:  Package sym

関数: prodrac (L, k)

Lは集合 A上の基本対称関数を含むリストです。 prodracは、根が Aの要素の k掛ける kの積の多項式を返します。

somracも参照してください。

Categories:  Package sym

関数: pui2polynome (x, lpui)

根のべき関数がリスト lpuiで与えられる xに関する多項式を計算します。

 
(%i1) pui;
(%o1)                           1
(%i2) kill(labels);
(%o0)                         done
(%i1) polynome2ele (x^3 - 4*x^2 + 5*x - 1, x);
(%o1)                     [3, 4, 5, 1]
(%i2) ele2pui (3, %);
(%o2)                     [3, 4, 6, 7]
(%i3) pui2polynome (x, %);
                        3      2
(%o3)                  x  - 4 x  + 5 x - 1

以下も参照してください: polynome2ele, ele2polynome

Categories:  Package sym

関数: somrac (L, k)

リスト Lは多項式 Pの基本対称関数を含みます。 関数は根が Pの根の k掛ける kの別個の和である多項式を計算します。

prodracも参照してください。

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.6 Resolvents

関数: resolvante (P, x, f, [x_1,..., x_d])

変数 x_1, ..., x_dで表現された関数 fによって次数 n >= dxに関する多項式 Pの解核を計算します。 計算の効率のため、変換関数 fに現れない変数のリスト [x_1, ..., x_d]に含まれないことが重要です。

計算の効率を増すためには、適切なアルゴリズムを使うように resolvanteに関するフラグを設定することができます:

もし 関数fがユニタリなら:

resolvanteのフラグはそれぞれ:

 
(%i1) resolvante: unitaire$
(%i2) resolvante (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x, x^3 - 1,
      [x]);

" resolvante unitaire " [7, 0, 28, 0, 168, 0, 1120, - 154, 7840,
                         - 2772, 56448, - 33880,

413952, - 352352, 3076668, - 3363360, 23114112, - 30494464,

175230832, - 267412992, 1338886528, - 2292126760]
  3       6      3       9      6      3
[x  - 1, x  - 2 x  + 1, x  - 3 x  + 3 x  - 1,

 12      9      6      3       15      12       9       6      3
x   - 4 x  + 6 x  - 4 x  + 1, x   - 5 x   + 10 x  - 10 x  + 5 x

       18      15       12       9       6      3
 - 1, x   - 6 x   + 15 x   - 20 x  + 15 x  - 6 x  + 1,

 21      18       15       12       9       6      3
x   - 7 x   + 21 x   - 35 x   + 35 x  - 21 x  + 7 x  - 1]
[- 7, 1127, - 6139, 431767, - 5472047, 201692519, - 3603982011]
       7      6        5         4          3           2
(%o2) y  + 7 y  - 539 y  - 1841 y  + 51443 y  + 315133 y

                                              + 376999 y + 125253
(%i3) resolvante: lineaire$
(%i4) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);

" resolvante lineaire "
       24       20         16            12             8
(%o4) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y

                                                    4
                                       + 344489984 y  + 655360000
(%i5) resolvante: general$
(%i6) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);

" resolvante generale "
       24       20         16            12             8
(%o6) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y

                                                    4
                                       + 344489984 y  + 655360000
(%i7) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3, x4]);

" resolvante generale "
       24       20         16            12             8
(%o7) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y

                                                    4
                                       + 344489984 y  + 655360000
(%i8) direct ([x^4 - 1], x, x1 + 2*x2 + 3*x3, [[x1, x2, x3]]);
       24       20         16            12             8
(%o8) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y

                                                    4
                                       + 344489984 y  + 655360000
(%i9) resolvante :lineaire$
(%i10) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);

" resolvante lineaire "
                              4
(%o10)                       y  - 1
(%i11) resolvante: symetrique$
(%i12) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);

" resolvante symetrique "
                              4
(%o12)                       y  - 1
(%i13) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);

" resolvante symetrique "
                           6      2
(%o13)                    y  - 4 y  - 1
(%i14) resolvante: alternee$
(%i15) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);

" resolvante alternee "
            12      8       6        4        2
(%o15)     y   + 8 y  + 26 y  - 112 y  + 216 y  + 229
(%i16) resolvante: produit$
(%i17) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);

" resolvante produit "
        35      33         29        28         27        26
(%o17) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y

         24           23          22            21           20
 + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y

          19           18             17              15
 - 30618 y   - 453789 y   - 40246444 y   + 282225202 y

             14              12             11            10
 - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y

              9            8            7             6
 - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y

            5             3
 - 3720087 y  + 26040609 y  + 14348907
(%i18) resolvante: symetrique$
(%i19) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);

" resolvante symetrique "
        35      33         29        28         27        26
(%o19) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y

         24           23          22            21           20
 + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y

          19           18             17              15
 - 30618 y   - 453789 y   - 40246444 y   + 282225202 y

             14              12             11            10
 - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y

              9            8            7             6
 - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y

            5             3
 - 3720087 y  + 26040609 y  + 14348907
(%i20) resolvante: cayley$
(%i21) resolvante (x^5 - 4*x^2 + x + 1, x, a, []);

" resolvante de Cayley "
        6       5         4          3            2
(%o21) x  - 40 x  + 4080 x  - 92928 x  + 3772160 x  + 37880832 x

                                                       + 93392896

Cayley解核に関しては、最後の2つの引数は中立であり、入力多項式は必然的に次数 5でなければいけません。

以下も参照してください:

resolvante_bipartite, resolvante_produit_sym, resolvante_unitaire, resolvante_alternee1, resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante_diedrale

Categories:  Package sym

関数: resolvante_alternee1 (P, x)

関数 product(x_i - x_j, 1 <= i < j <= n - 1). によって次数 nの変換 P(x)を計算します。 以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante , resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante_diedrale, resolvante_bipartite

Categories:  Package sym

関数: resolvante_bipartite (P, x)

関数 によって 偶次数 nP(x)の変換を計算します。 x_1 x_2 ... x_[n/2] + x_[n/2 + 1] ... x_n.

 
(%i1) resolvante_bipartite (x^6 + 108, x);
              10        8           6             4
(%o1)        y   - 972 y  + 314928 y  - 34012224 y

以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante, resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante_diedrale, resolvante_alternee1.

Categories:  Package sym

関数: resolvante_diedrale (P, x)

関数 x_1 x_2 + x_3 x_4によって P(x)の変換を計算します。

 
(%i1) resolvante_diedrale (x^5 - 3*x^4 + 1, x);
       15       12       11       10        9         8         7
(%o1) x   - 21 x   - 81 x   - 21 x   + 207 x  + 1134 x  + 2331 x

        6         5          4          3          2
 - 945 x  - 4970 x  - 18333 x  - 29079 x  - 20745 x  - 25326 x

 - 697

以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante_alternee1, resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante

Categories:  Package sym

関数: resolvante_klein (P, x)

関数 x_1 x_2 x_4 + x_4によって P(x)の変換を計算します。

以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante_alternee1, resolvante, resolvante_klein3, resolvante_vierer, resolvante_diedrale

Categories:  Package sym

関数: resolvante_klein3 (P, x)

関数 x_1 x_2 x_4 + x_4によって P(x)の変換を計算します。

以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante_alternee1, resolvante_klein, resolvante, resolvante_vierer, resolvante_diedrale

Categories:  Package sym

関数: resolvante_produit_sym (P, x)

多項式 P(x)のすべての積解核のリストを計算します。

 
(%i1) resolvante_produit_sym (x^5 + 3*x^4 + 2*x - 1, x);
        5      4             10      8       7       6       5
(%o1) [y  + 3 y  + 2 y - 1, y   - 2 y  - 21 y  - 31 y  - 14 y

    4       3      2       10      8       7    6       5       4
 - y  + 14 y  + 3 y  + 1, y   + 3 y  + 14 y  - y  - 14 y  - 31 y

       3      2       5      4
 - 21 y  - 2 y  + 1, y  - 2 y  - 3 y - 1, y - 1]
(%i2) resolvante: produit$
(%i3) resolvante (x^5 + 3*x^4 + 2*x - 1, x, a*b*c, [a, b, c]);

" resolvante produit "
       10      8       7    6        5       4       3     2
(%o3) y   + 3 y  + 14 y  - y  - 14 y  - 31 y  - 21 y  - 2 y  + 1

以下も参照してください:

resolvante, resolvante_unitaire, resolvante_alternee1, resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante_diedrale

Categories:  Package sym

関数: resolvante_unitaire (P, Q, x)

多項式 Q(x)によって 多項式 P(x)の解核を計算します。

以下も参照してください:

resolvante_produit_sym, resolvante, resolvante_alternee1, resolvante_klein, resolvante_klein3, resolvante_vierer, resolvante_diedrale

Categories:  Package sym

関数: resolvante_vierer (P, x)

関数 x_1 x_2 - x_3 x_4によって P(x)の変換を計算します。

以下も参照してください:

resolvante_produit_sym, resolvante_unitaire, resolvante_alternee1, resolvante_klein, resolvante_klein3, resolvante, resolvante_diedrale

Categories:  Package sym


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2.7 Miscellaneous

関数: multinomial (r, part)

ここで rは分割 partの重みです。 この関数は、同類の多項係数を返します: もし partの部分が i_1, i_2, ..., i_kなら、 結果は r!/(i_1! i_2! ... i_k!)です。

Categories:  Package sym

関数: permut (L)

リスト Lの置換のリストを返します。

Categories:  Package sym · Lists


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31. Groups


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.1 Functions and Variables for Groups

関数: todd_coxeter  
    todd_coxeter (relations, subgroup)  
    todd_coxeter (relations)

G/Hの次数を見つけます。 ここで、 Gは法 relationsに関する自由群で、 Hは subgroupが生成するGの部分群です。 subgroupはオプションの引数であり、省略すると[]になります。 これをする時には、 Gの G/H上の右作用に関する乗算テーブルを生成します。 ここで、剰余類が [H,Hg2,Hg3,...]と数え上げられます。 これは内部的に変数 todd_coxeter_stateで見ることができます。

例:

 
(%i1) symet(n):=create_list(
        if (j - i) = 1 then (p(i,j))^^3 else
            if (not i = j) then (p(i,j))^^2 else
                p(i,i) , j, 1, n-1, i, 1, j);
                                                       <3>
(%o1) symet(n) := create_list(if j - i = 1 then p(i, j)

                                <2>
 else (if not i = j then p(i, j)    else p(i, i)), j, 1, n - 1,

i, 1, j)
(%i2) p(i,j) := concat(x,i).concat(x,j);
(%o2)        p(i, j) := concat(x, i) . concat(x, j)
(%i3) symet(5);
         <2>           <3>    <2>           <2>           <3>
(%o3) [x1   , (x1 . x2)   , x2   , (x1 . x3)   , (x2 . x3)   ,

            <2>           <2>           <2>           <3>    <2>
          x3   , (x1 . x4)   , (x2 . x4)   , (x3 . x4)   , x4   ]
(%i4) todd_coxeter(%o3);

Rows tried 426
(%o4)                          120
(%i5) todd_coxeter(%o3,[x1]);

Rows tried 213
(%o5)                          60
(%i6) todd_coxeter(%o3,[x1,x2]);

Rows tried 71
(%o6)                          20

Categories:  Group theory


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32. Runtime Environment


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.1 Introduction for Runtime Environment

maxima-init.macは、 Maximaがスタートする時自動的にロードされるファイルです。 自分の Maxima環境をカスタマイズするために maxima-init.macを使うことができます。 maxima-init.macは、もし存在するなら、 関数 file_searchが検索する任意のディレクトリで大丈夫ですが、 通常は maxima_userdirで名付けられたディレクトリの中に置かれます。

以下は maxima-init.macファイルの例です:

 
setup_autoload ("specfun.mac", ultraspherical, assoc_legendre_p);
showtime:all;

この例では、 setup_autoloadはMaximaに もし関数 (ultraspherical, assoc_legendre_p)のいずれかがコールされた時まだ定義されていなかったら、 指定されたファイル (specfun.mac)をロードするように命じます。 このように関数をコールする前にファイルをロードすることを覚えておく必要はありません。

showtime: allは Maximaに showtime変数を設定することを命じます。 maxima-init.macファイルは他の任意の割り当てや Maxima文を含むことができます。

Categories:  Session management


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.2 Interrupts

ユーザーは、時間のかかる計算を ^C (control-C)文字で止めることができます。 デフォルトの動作は、計算を止めて、別のユーザープロンプトを印字することでです。 この場合、止められた計算の再開することはできません。

もし

 
:lisp (setq *debugger-hook* nil)

を実行することによって、 Lisp変数 *debugger-hook*が nilに設定されているなら、 ^Cを受け取ると、Maximaは Lispデバッガに入り、 ユーザーは Lisp環境を検査するためにデバッガを使うことができます。 止められた計算は Lispデバッガの中で、 continueを入力することで、再開することができます。 (計算を完了まで走らせる以外に) Lispデバッガから Maximaに戻る方法は Lispのバージョンそれぞれで異なります。

Unixシステム上では、 文字^Z (control-Z)は Maximaが完全に止まるようにし、 制御はシェルスクリプトに戻ります。 fgコマンドが Maximaが止められた点から再開するようにします。

Categories:  Console interaction


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.3 Functions and Variables for Runtime Environment

システム変数: maxima_tempdir

maxima_tempdirは Maximaが一時的なファイルを生成するディレクトリを指名します。 特に、プロットのための一時ファイルが maxima_tempdirに生成されます。

maxima_tempdirの初期値は、 もし Maximaが置くことができるならユーザーのホームディレクトリです; そうでないなら、Maximaは適切なディレクトリについて推量します。

maxima_tempdirはディレクトリを指名する文字列に割り当てられます。

Categories:  Global variables

システム変数: maxima_userdir

maxima_userdirは、 Maximaが Maximaや Lispファイルを見つけるために検索するディレクトリを指名します。 (Maximaは他のディレクトリも検索します; file_search_maximafile_search_lispが完全なリストです。)

maxima_userdirの初期値は、 もし Maximaが置くことができなら ユーザーのホームディレクトリのサブディレクトリです; そうでないなら Maximaは適切なディレクトリについて推量します。

maxima_userdirはディレクトリを指名する文字列に割り当てられます。 しかしながら、 maxima_userdirへの割り当ては、自動的には file_search_maximafile_search_lispを変えません; それらの変数は別々に変更しなければいけません。

Categories:  Global variables

関数: room  
    room ()  
    room (true)  
    room (false)

Maximaの記憶装置とスタックマネージメントの状態の描写を印字します。 roomは同じ名前の Lisp関数をコールします。

Categories:  Debugging

関数: sstatus (keyword, item)

keywordがシンボル featureの時、 itemがシステムフィーチャのリスト上に追加されます。 sstatus (keyword, item)が実行された後、 status (feature, item)trueを返します。 もし keywordがシンボル nofeatureなら、 itemはシステムフィーチャのリストから削除されます。 これはパッケージ作者が、搭載したフィーチャの追跡をするのに役に立つかもしれません。

statusも参照してください。

Categories:  Programming

関数: status  
    status (feature)  
    status (feature, item)

いくつかのシステム依存のフィーチャの存在と不在についての情報を返す。

sstatusも参照してください。

変数 featuresは数式に適用されるフィーチャのリストを含みます。 もっと情報を知るには、 featuresfeaturepを参照してください。

Categories:  Programming

関数: system (command)

別のプロセスとして commandを実行します。 コマンドは実行のためデフォルトのシェルに渡されます。 systemはオペレーティングシステムすべてではサポートされませんが、 一般に Unixと Unixライクな環境では存在します。

_hist.outは、 xgraphを使ってバーグラフとしてプロットしたい頻度のリストだと仮定します。

 
(%i1) (with_stdout("_hist.out",
           for i:1 thru length(hist) do (
             print(i,hist[i]))),
       system("xgraph -bar -brw .7 -nl < _hist.out"));

プロットをバックグラウンドで( Maximaに制御を戻すように)させるようにし、 終了した後、一次ファルを削除するようにするためには以下のようにします:

 
system("(xgraph -bar -brw .7 -nl < _hist.out;  rm -f _hist.out)&")

関数: time (%o1, %o2, %o3, …)

出力行 %o1, %o2, %o3, …を計算するために使った時間のリストを秒で返します。 返された時間は内部計算時間の Maximaの概算であって、経過時間ではありません。 timeは出力行変数にだけ適用されます; 他の変数に関して timeunknownを返します。

Maximaに出力行それぞれに計算時間と経過時間を印字させるには、 showtime: trueを設定してください。

Categories:  Debugging

関数: timedate  
    timedate (T, tz_offset)

    timedate (T)
    timedate ()  

timedate(T, tz_offset)は タイムゾーン tz_offsetでの時刻 Tを表す文字列を返します。 文字列フォーマットは (小数部を表すのにひつよなだけの数字を使った) YYYY-MM-DD HH:MM:SS.NNN[+|-]ZZ:ZZか もし小数部がなければ YYYY-MM-DD HH:MM:SS[+|-]ZZ:ZZです。

Tは GMTタイムゾーンで1900年1月1日0時から測定された秒です。

tz_offsetはGMTからのタイムゾーンのオフセット時間です。 東が正で西が負です。 tz_offsetは-24以上24以下の整数か有理数か浮動小数点でなければいけません。 もし tz_offsetが1/60の倍数でなければ、 それは最も近い1/60の倍数に丸められます。

timedate(T)は ローカルタイムゾーンのオフセットに等しい tz_offsetでの timedate(T, tz_offset)と同値です。

timedate()timedate(absolute_real_time())と同値です。 すなわち、ローカルタイムゾーンで現在時刻を返します。

例:

引数なしの timedate()は現在時刻と日付を表す文字列を返します。

 
(%i1) d : timedate ();
(%o1)                      2010-06-08 04:08:09+01:00
(%i2) print ("timedate reports current time", d) $
timedate reports current time 2010-06-08 04:08:09+01:00

引数ありの timedateは引数を表す文字列を返します。

 
(%i1) timedate (0);
(%o1)                      1900-01-01 01:00:00+01:00
(%i2) timedate (absolute_real_time () - 7*24*3600);
(%o2)                      2010-06-01 04:19:51+01:00

オプションのタイムゾーンオフセットありの timedate

 
(%i1) timedate (1000000000, -9.5);
(%o1)               1931-09-09 16:16:40-09:30

Categories:  Time and date functions

関数: parse_timedate  
    parse_timedate (S)

日付や日時を表す文字列 Sをパースし、GMT 1900年1月1日零時からの秒数を返します。 もしゼロでない小数部があれば戻り値は有理数で、そうでなければ整数です。 もし許されるフォーマットのどれによっても Sをパースできなければ、 parse_timedatefalseを返します。

文字列 Sは、オプションとしてタイムゾーン指定が続くような 以下のフォーマットのいずれかでなければいけません:

ここで、フィールドは年、月、日、時、分、秒、少数で、 カギ括弧は可能な代替文字を示します。 小数は1つ以上の数字を含むかもしれません。

秒の小数を除いてそれぞれの欄は指定の数字数を持たなければいけません: 年は4つの数字、月、日、時間、分、秒は2つの数字。

タイムゾーン指定は以下の形式のどれかでなくてはいけません:

ここで hhmmは時刻と分です 符号はGMTの東 (+)か西 (-)です。 タイムゾーンは+24時間から-24時間までです。

文字 Z+00:00やその変形と同値で、 GMTを示します。

もしタイムゾーン指定がないなら、 時刻はローカルタイムゾーンと仮定されます。

頭やお尻の空白文字(スペース, タブ, 改行, キャリッジリターン)は無視されますが、 他の文字は parse_timedateが失敗して falseを返す原因となります。

timedateabsolute_real_timeも参照してください。

例:

可能なフォーマットそれぞれでのローカルタイムゾーンでの 1900年1月1日零時。 結果はローカルタイムゾーンでの秒数です。 GMTに先行する場合マイナスでGMTに遅れる場合プラスされます。 この例ではローカルタイムゾーンはGMTに遅れること8時間です。

 
(%i1) parse_timedate ("1900-01-01 00:00:00,000");
(%o1)                         28800
(%i2) parse_timedate ("1900-01-01 00:00:00.000");
(%o2)                         28800
(%i3) parse_timedate ("1900-01-01T00:00:00,000");
(%o3)                         28800
(%i4) parse_timedate ("1900-01-01T00:00:00.000");
(%o4)                         28800
(%i5) parse_timedate ("1900-01-01 00:00:00");
(%o5)                         28800
(%i6) parse_timedate ("1900-01-01T00:00:00");
(%o6)                         28800
(%i7) parse_timedate ("1900-01-01");
(%o7)                         28800

異なる指定のタイムゾーンでの 1900年1月1日零時。 Midnight, January 1, 1900, GMT, in different indicated time zones.

 
(%i1) parse_timedate ("1900-01-01 19:00:00+19:00");
(%o1)                           0
(%i2) parse_timedate ("1900-01-01 07:00:00+07:00");
(%o2)                           0
(%i3) parse_timedate ("1900-01-01 01:00:00+01:00");
(%o3)                           0
(%i4) parse_timedate ("1900-01-01Z");
(%o4)                           0
(%i5) parse_timedate ("1899-12-31 21:00:00-03:00");
(%o5)                           0
(%i6) parse_timedate ("1899-12-31 13:00:00-11:00");
(%o6)                           0
(%i7) parse_timedate ("1899-12-31 08:00:00-16:00");
(%o7)                           0

Categories:  Time and date functions

関数: encode_time  
    encode_time (year, month, day, hours, minutes, seconds, tz_offset)  
    encode_time (year, month, day, hours, minutes, seconds)

year, month, day, hours, minutes, seconds で指定された時刻と日にちを与えると、 encode_timeは(場合によって少数部を含む) GMT 1900年1月1日0時からの秒数を返します。

yearは1899以上の整数でなければいけません。 しかし、1899年は、エンコード時刻の結果が0以上の場合だけ許されます。

monthは1から12までの整数でなければいけません。

dayは1から nまでの整数でなければいけません。 ここで nmonthが指定する月の日数です。

hoursは0から23までの整数でなければいけません。

minutesは0から59までの整数でなければいけません。

secondsは0以上60未満の整数、有理数、少数でなければいけません。 secondsが整数でない時、 encode_timeは 戻り値の少数部が secondsの少数部に等しい有理数を返します。 そうでなければ、 secondsは整数であり、戻り値も同様に整数です。

tz_offsetは時間単位でタイムゾーンのオフセットを示します。 GMTの東が正で西が負です。 tz_offsetは-24から24までの整数、有理数、少数でなければいけません。 もし tz_offsetは 1/3600の倍数でなければ、 最も近い1/3600の倍数に丸められます。

もし tz_offsetが存在しなければ、 オフセットにはローカル時刻が仮定されます。

decode_timeも参照してください。

例:

 
(%i1) encode_time (1900, 1, 1, 0, 0, 0, 0);
(%o1)                           0
(%i2) encode_time (1970, 1, 1, 0, 0, 0, 0);
(%o2)                      2208988800
(%i3) encode_time (1970, 1, 1, 8, 30, 0, 8.5);
(%o3)                      2208988800
(%i4) encode_time (1969, 12, 31, 16, 0, 0, -8);
(%o4)                      2208988800
(%i5) encode_time (1969, 12, 31, 16, 0, 1/1000, -8);
                          2208988800001
(%o5)                     -------------
                              1000
(%i6) % - 2208988800;
                               1
(%o6)                         ----
                              1000

Categories:  Time and date functions

関数: decode_time  
    decode_time (T, tz_offset)  
    decode_time (T)

GMT 1900年1月1日0時からの(場合によって少数部を含む)秒数を与えると、 年、月、月の日、時、分、秒、タイムゾーンオフセットからなるリストで表現された 日にちと時刻を返します。

tz_offsetは時間単位でタイムゾーンのオフセットを示します。 GMTの東が正で西が負です。 tz_offsetは-24から24までの整数、有理数、少数でなければいけません。 もし tz_offsetは 1/3600の倍数でなければ、 最も近い1/3600の倍数に丸められます。

もし tz_offsetが存在しなければ、 オフセットにはローカル時刻が仮定されます。

encode_timeも参照ください。

例:

 
(%i1) decode_time (0, 0);
(%o1)               [1900, 1, 1, 0, 0, 0, 0]
(%i2) decode_time (0);
(%o2)             [1899, 12, 31, 16, 0, 0, - 8]
(%i3) decode_time (2208988800, 9.25);
                                          37
(%o3)              [1970, 1, 1, 9, 15, 0, --]
                                          4
(%i4) decode_time (2208988800);
(%o4)             [1969, 12, 31, 16, 0, 0, - 8]
(%i5) decode_time (2208988800 + 1729/1000, -6);
                                      1729
(%o5)           [1969, 12, 31, 18, 0, ----, - 6]
                                      1000
(%i6) decode_time (2208988800 + 1729/1000);
                                      1729
(%o6)           [1969, 12, 31, 16, 0, ----, - 8]
                                      1000

Categories:  Time and date functions

関数: absolute_real_time ()

GMTで1900年1月1日0時からの秒数を返します。 戻り値は整数です。

elapsed_real_timeelapsed_run_timeも参照してください。

例:

 
(%i1) absolute_real_time ();
(%o1)                      3385045277
(%i2) 1900 + absolute_real_time () / (365.25 * 24 * 3600);
(%o2)                   2007.265612087104

Categories:  Time and date functions

関数: elapsed_real_time ()

Maximaがもっとも最近スタートしたか再スタートして以来の (1秒の小数を含む)秒数を返します。 戻り値は浮動小数点数です。

absolute_real_timeelapsed_run_timeも参照してください。

例:

 
(%i1) elapsed_real_time ();
(%o1)                       2.559324
(%i2) expand ((a + b)^500)$
(%i3) elapsed_real_time ();
(%o3)                       7.552087

Categories:  Time and date functions

関数: elapsed_run_time ()

Maximaがもっとも最近スタートしたか再スタートして以来 Maximaが計算に費やした(1秒の小数を含む)秒数の概算を返します。 戻り値は浮動小数点数です。

absolute_real_timeelapsed_real_timeも参照してください。

例:

 
(%i1) elapsed_run_time ();
(%o1)                         0.04
(%i2) expand ((a + b)^500)$
(%i3) elapsed_run_time ();
(%o3)                         1.26

Categories:  Time and date functions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33. Miscellaneous Options


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.1 Introduction to Miscellaneous Options

この節では、 Maximaの操作上、グローバルな効果を持つ様々なオプションが論じられます。 すべてのユーザー定義関数のリストのような様々なリストも論じられます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.2 Share

Maximaの「共有」ディレクトリは Maximaユーザーのためのものですが、 Maximaのコア実装の部分ではないプログラムと他のファイルを含みます。 これらのプログラムは通常、 loadsetup_autoloadによってロードされます。

:lisp *maxima-sharedir*は ユーザーのファイルシステム内の共有ディレクトリの位置を表示します。

printfile ("share.usg")は共有パッケージの期限切れリストを印字します。 ファイルシステムブラウザを使って共有ディレクトリをブラウズするともっと情報が得られることに ユーザーは気づくでしょう。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.3 Functions and Variables for Miscellaneous Options

システム変数: askexp

asksignがコールされた時、 askexpasksignがテストしている式です。

以前は、control-AでMaximaブレイクに入ることによって ユーザーが askexpを検査することができました。

オプション変数: genindex

デフォルト値: i

genindexは、必要な時、和の次の変数を生成するために使われる アルファベットの接頭辞です。

Categories:  Sums and products

オプション変数: gensumnum

デフォルト値: 0

gensumnumは、和の次の変数を生成するために使われる数値接尾辞です。 もし falseに設定されているなら、インデックスは数値接尾辞なしで genindexだけから構成されます。

Categories:  Sums and products

関数: gensym  
    gensym ()  
    gensym (x)

gensym()は新鮮なシンボルを生成し返します。

新しいシンボルの名前はデフォルトでは、 "g"の接頭辞と Lisp内部カウンタの値がデフォルトの数の十進表現である接尾辞の連結です。

もし xが供給されてそれが文字列なら、この gensymへの呼び出しに限ってその文字列が "g"の代わりに接頭辞として使われます。

もし xが供給されてそれが非負整数なら、 この gensymへの呼び出しに限って内部 Lisp整数の値の代わりに接尾辞として使われます。

もし明示的に接尾辞が供給されない時だけ、 Lisp内部整数が使われた後 1だけ増分されます。

例:

 
(%i1) gensym();
(%o1)                         g887
(%i2) gensym("new");
(%o2)                        new888
(%i3) gensym(123);
(%o3)                         g123

オプション変数: packagefile

デフォルト値: false

packagefile: trueを設定すると、 ファイルがロードされる時必要なところを除いて、 Maximaの情報リスト(例えば、values, functions)への 情報の追加を抑制します。 他の人が使うパッケージ(ファイル)を生成するために savetranslateを使うパッケージデザイナーが使ったりします。 こうすると、 ユーザーが自身のデータを追加した時 パッケージの中身はユーザーのやったことを取り込まないでしょう。 これは起こりうる名前衝突の問題を解決はしないことに注意してください。 このフラグはパッケージファイルへ出力されるものに素直に影響することにも注意してください。 フラグを trueに設定することは Maxima初期化ファイルを生成するにも役に立ちます。

関数: remvalue  
    remvalue (name_1, …, name_n)  
    remvalue remvalue (all)

(添字付きもありえる)ユーザー変数 name_1, ..., name_nの値をシステムから取り除きます。

remvalue (all)は、values― (Maximaが自動的に割り当てたものと対照的に)ユーザーが名前を与えた変数すべてのリスト― の中の変数すべての値を取り除きます。

valuesも参照してください。

Categories:  Evaluation

関数: rncombine (expr)

同一の分母や、たがいに数値因子だけ異なる分母を持つ exprのすべての項を結合することで、 exprを変換します。 これは combineの振る舞いとわずかに違います。 combineは同一分母を持つ項を集めます。

pfeformat: trueを設定し、 combineを使うことは、 rncombineを使って得られるものと似た結果をもたらしますが、 rncombineはクロス積の数値的分母因子のおまけのステップを実行します。 これは、きれいな形式と、いくつかの相殺を認識する可能性をもたらします。

load(rncomb)はこの関数をロードします。

Categories:  Expressions

関数: setup_autoload (filename, function_1, ..., function_n)

もし function_1, ..., function_nのいずれかが参照されたがまだ定義されていないなら、 loadを通じて filenameがロードされるように指定します。 filenameは強制はされませんが、普通、指定された関数の定義を含みます。

setup_autoloadは配列関数については機能しません。

setup_autoloadは引数をクォートします。

例:

 
(%i1) legendre_p (1, %pi);
(%o1)                  legendre_p(1, %pi)
(%i2) setup_autoload ("specfun.mac", legendre_p, ultraspherical);
(%o2)                         done
(%i3) ultraspherical (2, 1/2, %pi);
Warning - you are redefining the Macsyma function ultraspherical
Warning - you are redefining the Macsyma function legendre_p
                            2
                 3 (%pi - 1)
(%o3)            ------------ + 3 (%pi - 1) + 1
                      2
(%i4) legendre_p (1, %pi);
(%o4)                          %pi
(%i5) legendre_q (1, %pi);
                              %pi + 1
                      %pi log(-------)
                              1 - %pi
(%o5)                 ---------------- - 1
                             2

Categories:  Function definition · File input

関数: tcl_output  
    tcl_output (list, i0, skip)  
    tcl_output (list, i0)  
    tcl_output ([list_1, …, list_n], i)

リストの要素をカーリ括弧{ }で囲んで表示します。 Tcl/Tk言語のプログラムの一部として適した形です。

tcl_output (list, i0, skip)は、 要素i0で始まり、 要素 i0 + skip, i0 + 2 skip, などなどというように listを表示します。

tcl_output (list, i0)tcl_output (list, i0, 2)と同値です。

tcl_output ([list_1, ..., list_n], i)list_1, …, list_ni番目の要素を表示します。

例:

 
(%i1) tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$

 {1.000000000     4.000000000
 }
(%i2) tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$

 {2.000000000     5.000000000
 }
(%i3) tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$

 {((RAT SIMP) 3 7) ((RAT SIMP) 11 13)
 }
(%i4) tcl_output ([x1, y1, x2, y2, x3, y3], 2)$

 {$Y1 $Y2 $Y3
 }
(%i5) tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$

 {SIMP 1.000000000     11.00000000
 }


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34. Rules and Patterns


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1 Introduction to Rules and Patterns

この節ではユーザー定義のパターンマッチングと整理ルールを記述します。 幾分違ったパターンマッチング体系を実装した2つの関数グループがあります。 1つのグループは、tellsimp, tellsimpafter, defmatch, defrule, apply1, applyb1, apply2です。 他のグループは、let, letsimpです。 どちらの体系も matchdeclareが宣言したパターン変数を使ってパターンを定義します。

tellsimptellsimpafterが定義するパターンマッチングルールは Maximaの整理器によって自動的に適用されます。 defmatch, defrule, letが定義するルールは 明示的に関数をコールすることで適用されます。

更に、 tellratが多項式に適用するルール用メカニズムと、 affineパッケージの可換/非可換代数用メカニズムがあります。

Categories:  Simplification · Rules and patterns


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.2 Functions and Variables for Rules and Patterns

関数: apply1 (expr, rule_1, ..., rule_n)

rule_1exprに失敗するまで繰り返し適用して、 それから同じルールを exprの部分式すべてに左から右へ、部分式すべてで rule_1が失敗するまで繰り返し適用します。

この方法で exprを変換した結果を expr_2と呼ぶことにします。 次に rule_2expr_2の最上部から始めて同じ方法で適用します。 rule_nが最後の部分式上で失敗した時、結果を返します。

maxapplydepthapply1apply2が処理する最も深い部分式の深さです。

applyb1, apply2, letも参照してください。

Categories:  Rules and patterns

関数: apply2 (expr, rule_1, ..., rule_n)

もし rule_1が与えられた部分式上で失敗したら、 rule_2を繰り返し適用し、などなどと続きます。 すべてのルールが与えられた部分式上で失敗した時だけ、 ルールの全組が次の部分式に繰り返し適用されます。 もしルールの1つが成功したら、 同じ部分式が最初のルールから再処理されます。

maxapplydepthapply1apply2が処理する最も深い部分式の深さです。

apply1letも参照してください。

Categories:  Rules and patterns

関数: applyb1 (expr, rule_1, ..., rule_n)

失敗するまで繰り返し exprの最も深い部分式に rule_1を適用し、 その後、 rule_1がトップレベルの式で失敗するまで 同じルールを1つ高いレベル(すなわち、より大きな部分式)に適用します。 その後、rule_2rule_1の結果に同様に適用します。 rule_nがトップレベルの式に適用された後、結果を返します。

applyb1apply1に似ていますが、トップダウンからの代わりにボトムアップから働きます。

maxapplyheightapplyb1があきらめる前に届く最大の高さです

apply1, apply2, letも参照してください。

Categories:  Rules and patterns

オプション変数: current_let_rule_package

デフォルト値: default_let_rule_package

current_let_rule_packageは、 もし他のルールパッケージが指定されないなら、 (letsimpなど) letパッケージの関数で使われる ルールパッケージの名前です。 この変数には letコマンドを介して定義された任意の規格パッケージの名前が割り当てられます。

もし letsimp (expr, rule_pkg_name)のようなコールがされたら、 ルールパッケージ rule_pkg_nameはその関数コールだけのために使われ、 current_let_rule_packageの値は変わりません。

Categories:  Rules and patterns

オプション変数: default_let_rule_package

デフォルト値: default_let_rule_package

default_let_rule_packageは、 ユーザーがletで明示的に設定したり、 current_let_rule_packageの値を変更することで明示的に設定したりしない時 使われるルールの名前です。

Categories:  Rules and patterns

関数: defmatch  
    defmatch (progname, pattern, x_1, …, x_n)  
    defmatch (progname, pattern)

patternにマッチするか見るために exprをテストする関数 progname(expr, x_1, ..., x_n)を定義します。

(引数として与えられているなら、) patternはパターン引数 x_1, ..., x_nを含む式です。 パターン引数は defmatchの引数として明示的に与えられます。 一方、 matchdeclare関数がパターン変数を宣言します。 matchdeclareのパターン変数か defmatchのパターン引数として宣言されていない任意の変数は それ自身とのみマッチします。

生成関数 prognameの最初の引数はパターンに対してマッチされる式であり、 他の引数はパターンの中のダミー変数 x_1, ..., x_nに対応する実際の引数です。

もしマッチが成功したなら、 prognameは、 左辺がパターン引数やパターン変数で、右辺がパターン引数や変数がマッチした部分式の 等式のリストを返します。 パターン変数はそれらがマッチした部分式に割り当てられますが、 パターン引数には割り当てられません。 もしマッチが失敗したら、 prognamefalseを返します。

リテラルパターン(すなわち、パターン引数もパターン変数も含まないパターン)は、 もしマッチが成功したら trueを返します。

matchdeclare, defrule, tellsimp, tellsimpafterも参照してください。

例:

abxを含まず、 aが非ゼロであるような形式 a*x + bかどうか見るために exprをテストする関数 linearp(expr, x)を定義します。 パターン引数 xdefmatchに与えられているので、 このマッチ関数は任意の変数に関する線形式にマッチします。

 
(%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)), b,
                    freeof(x));
(%o1)                         done
(%i2) defmatch (linearp, a*x + b, x);
(%o2)                        linearp
(%i3) linearp (3*z + (y + 1)*z + y^2, z);
                         2
(%o3)              [b = y , a = y + 4, x = z]
(%i4) a;
(%o4)                         y + 4
(%i5) b;
                                2
(%o5)                          y
(%i6) x;
(%o6)                           x

abxを含まず、 aが非ゼロであるような 形式 a*x + bかどうか見るために exprをテストする関数 linearp(expr, x)を定義します。 defmatchにパターン引数が与えられていないので、 このマッチ関数は他の任意の変数ではなく変数 xに関する線形式にマッチします。

 
(%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)), b,
                    freeof(x));
(%o1)                         done
(%i2) defmatch (linearp, a*x + b);
(%o2)                        linearp
(%i3) linearp (3*z + (y + 1)*z + y^2);
(%o3)                         false
(%i4) linearp (3*x + (y + 1)*x + y^2);
                             2
(%o4)                  [b = y , a = y + 4]

定積分かどうか見るために exprをテストする関数 checklimits(expr)を定義します。

 
(%i1) matchdeclare ([a, f], true);
(%o1)                         done
(%i2) constinterval (l, h) := constantp (h - l);
(%o2)        constinterval(l, h) := constantp(h - l)
(%i3) matchdeclare (b, constinterval (a));
(%o3)                         done
(%i4) matchdeclare (x, atom);
(%o4)                         done
(%i5) simp : false;
(%o5)                         false
(%i6) defmatch (checklimits, 'integrate (f, x, a, b));
(%o6)                      checklimits
(%i7) simp : true;
(%o7)                         true
(%i8) 'integrate (sin(t), t, %pi + x, 2*%pi + x);
                       x + 2 %pi
                      /
                      [
(%o8)                 I          sin(t) dt
                      ]
                      /
                       x + %pi
(%i9) checklimits (%);
(%o9)    [b = x + 2 %pi, a = x + %pi, x = t, f = sin(t)]

Categories:  Rules and patterns

関数: defrule (rulename, pattern, replacement)

与えられたパターンに関する置き換えルールを定義し、名付けます。 もし rulenameと名付けられたルールが (apply1, applyb1, apply2によって)式に適用されるなら、 パターンにマッチするすべての部分式は replacementで置き換えられます。 パターンマッチが値を割り当てる replacementの中の変数すべてはその後整理される置き換えの中のそれらの値を割り当てられます。

ルールそれ自身は、パターンマッチと置き換えを演算 1つにして式を変換する関数として扱うことができます。 マッチが失敗したらルール関数は falseを返します。

Categories:  Rules and patterns

関数: disprule  
    disprule (rulename_1, …, rulename_2)  
    disprule (all)

defrule, tellsimp, tellsimpafterが返すような、または defmatchが定義するパターンのような名前 rulename_1, ..., rulename_nを持つルールを表示します。 ルールそれぞれは中間式ラベル (%t)と一緒に表示されます。

disprule (all)はルールすべてを表示します。

dispruleは引数をクォートします。 dispruleは表示されたルールに対応する中間式ラベルのリストを返します。

letが定義したルールを表示する letrulesも参照してください。

例:

 
(%i1) tellsimpafter (foo (x, y), bar (x) + baz (y));
(%o1)                   [foorule1, false]
(%i2) tellsimpafter (x + y, special_add (x, y));
(%o2)                   [+rule1, simplus]
(%i3) defmatch (quux, mumble (x));
(%o3)                         quux
(%i4) disprule (foorule1, ?\+rule1, quux);
(%t4)        foorule1 : foo(x, y) -> baz(y) + bar(x)

(%t5)          +rule1 : y + x -> special_add(x, y)

(%t6)                quux : mumble(x) -> []

(%o6)                    [%t4, %t5, %t6]
(%i6) ev(%);
(%o6) [foorule1 : foo(x, y) -> baz(y) + bar(x),
     +rule1 : y + x -> special_add(x, y), quux : mumble(x) -> []]

関数: let  
    let (prod, repl, predname, arg_1, …, arg_n)  
    let ([prod, repl, predname, arg_1, …, arg_n], package_name)

prodreplで置き換えられるような letsimpのための代入ルールを定義します。 prodは以下の項の正または負のべきの積です:

正のべきの項は少なくともそのべきを持つ項だけにマッチするでしょう。 一方、負のべきの項は少なくとも負としてのべきをもつ項だけにマッチするでしょう。 prodの中の負のべきの場合、 スイッチ letrattrueに設定しなければいけません。 letratも参照してください。

もし述語論理が引数のリストが続く let関数に含まれるなら、 arg_i'arg_iにマッチした値である場合、 predname (arg_1', ..., arg_n')trueに評価される時だけ試験的なマッチ (すなわち、述語論理が省略されたなら受け入れられるもの)が受け入れられます。 arg_iは任意のアトム名や prodの中に現れる任意の核の引数を取り得ます。 replは任意の有理式を取り得ます。 もし任意のアトムや prodからの引数が replの中に現れるなら、適切な代入が行われます。

グローバルフラグ letratletsimpによる商の整理を制御します。 letratfalseの時、 letsimpexprの分子と分母をそれぞれ整理し、商を整理はしません。 n!/nのような代入は (n-1)!に進み失敗します。 letrattrueの時、分子、分母、商がその順番で整理されます。

これらの代入関数は、同時にいくつかのルールパッケージを使うことを許します。 ルールパッケージそれぞれは任意の数の letルールを含むことができ、ユーザー定義名で参照されます。 コマンド let ([prod, repl, predname, arg_1, ..., arg_n], package_name)は、 ルール prednameをルールパッケージ package_nameに加えます。 コマンド letsimp (expr, package_name)は、 package_nameの中でルールを適用します。 letsimp (expr, package_name1, package_name2, ...)は、 letsimp (%, package_name2), …が続く letsimp (expr, package_name1)と同値です。

current_let_rule_packageは現在使われているルールパッケージの名前です。 この変数は letコマンドを介して定義された任意のルールパッケージの名前に割れ当てられます。 letパッケージを構成する関数のいずれかがパッケージ名なしでコールされた時はいつでも current_let_rule_packageが指定したパッケージが使われます。 もし letsimp (expr, rule_pkg_name)のようなコールがされたら、 ルールパッケージ rule_pkg_nameはその letsimpコマンドだけで使われ、 current_let_rule_packageは変わりません。 もし他に指定されないなら、 current_let_rule_packagedefault_let_rule_packageをデフォルト値とします。

 
(%i1) matchdeclare ([a, a1, a2], true)$
(%i2) oneless (x, y) := is (x = y-1)$
(%i3) let (a1*a2!, a1!, oneless, a2, a1);
(%o3)         a1 a2! --> a1! where oneless(a2, a1)
(%i4) letrat: true$
(%i5) let (a1!/a1, (a1-1)!);
                        a1!
(%o5)                   --- --> (a1 - 1)!
                        a1
(%i6) letsimp (n*m!*(n-1)!/m);
(%o6)                      (m - 1)! n!
(%i7) let (sin(a)^2, 1 - cos(a)^2);
                        2               2
(%o7)                sin (a) --> 1 - cos (a)
(%i8) letsimp (sin(x)^4);
                        4           2
(%o8)                cos (x) - 2 cos (x) + 1

Categories:  Rules and patterns

オプション変数: letrat

デフォルト値: false

letratfalseの時、 letsimpは比の分子と分母それぞれを整理し、商を整理しません。

letrattrueの時、 分子、分母、商はその順番に整理されます。

 
(%i1) matchdeclare (n, true)$
(%i2) let (n!/n, (n-1)!);
                         n!
(%o2)                    -- --> (n - 1)!
                         n
(%i3) letrat: false$
(%i4) letsimp (a!/a);
                               a!
(%o4)                          --
                               a
(%i5) letrat: true$
(%i6) letsimp (a!/a);
(%o6)                       (a - 1)!

Categories:  Rules and patterns

関数: letrules  
    letrules ()  
    letrules (package_name)

ルールパッケージのルールを表示します。 letrules ()は現在のルールパッケージのルールを表示します。 letrules (package_name)package_nameのルールを表示します。

現在のルールパッケージは current_let_rule_packageによって指名されます。 もし他に指定されないなら、 current_let_rule_packagedefault_let_rule_packageがデフォルト値になります。

dispruleも参照してください それは tellsimptellsimpafterが定義するルールを表示します。

Categories:  Rules and patterns

関数: letsimp  
    letsimp (expr)  
    letsimp (expr, package_name)  
    letsimp (expr, package_name_1, …, package_name_n)

exprに変化がなくなるまで繰り返し letが定義する代入ルールを適用します。

letsimp (expr)current_let_rule_packageのルールを使います。

letsimp (expr, package_name)current_let_rule_packageを変えずに package_nameのルールを使います。

letsimp (expr, package_name_1, ..., package_name_n)は、 letsimp (%, package_name_2)などが続く letsimp (expr, package_name_1と同値です。

Categories:  Rules and patterns

オプション変数: let_rule_packages

デフォルト値: [default_let_rule_package]

let_rule_packagesはデフォルトパッケージ default_let_rule_packageに加えるユーザー定義の letルールパッケージすべてのリストです。

Categories:  Rules and patterns

関数: matchdeclare (a_1, pred_1, ..., a_n, pred_n)

述語論理 pred_kを変数 a_kの変数やリストに関連づけます。 なので a_kは述語論理が false以外の何かを返す式にマッチします。

述語論理は関数の名前、ラムダ式、関数コール、最後の引数のないラムダコール、 trueまたは allです。 任意の式が trueallにマッチします。 もし述語論理が関数コールかラムダコールとして指定されるなら、 テストされる式が引数のリストに追加されます; マッチが評価される時引数が評価されます。 そうでないなら、述語論理は関数名またはラムダ式として指定され、 テストされる式が唯一の引数です。 matchdeclareがコールされた時、述語論理関数は定義されている必要はありません; 述語論理はマッチが試みられるまで評価されません。

述語論理は、 truefalseはもちろん、ブーリアン式を返すかもしれません。 ブーリアン式は、構成されたルール関数内で isによって評価されるので、 述語論理内部で isをコールする必要はありません。

もし式がマッチ述語論理を満たすなら、 マッチ変数が式に割り当てられます。 例外は足し算 +や掛け算 *のオペランドのマッチ変数です。 足し算と掛け算だけは特別に扱われます; 他のn項演算子(組み込みもユーザー定義も)は通常の関数のように扱われます。

足し算と掛け算の場合、 マッチ変数はマッチ述語論理を満たす唯一の式か、 そんな式の(それぞれ)和または積に割り当てられます。 そんな多項マッチングはどん欲 (greedy)です: 述語論理群はそれらの関連変数がマッチパターンの中で現れる順に評価され、 複数の述語論理を満たす項は、それが満たす最初の述語論理によってマッチされます。 述語論理それぞれは、 次の述語論理が評価される前に 和や積のオペランドすべてに対してテストされます。 加えて、 もし(それぞれ) 0か 1がマッチ述語論理を満たし、かつ、 述語論理を満たす他の項がないなら、 0か1が述語論理の関連マッチ変数に割り当てられます。

足し算と掛け算パターンを処理するアルゴリズムは、 (例えば、「任意のものにマッチする」変数が現れるパターンのように) マッチパターンの中やマッチされる式の中の項の順序付けに依存したいくつかのマッチ結果をもたらします。 しかしながら、もしマッチ述語論理すべてが相互に排他的なら、 1つのマッチ述語論理はべつのものがマッチした項を受け入れられないので、 マッチ結果は順序付けに影響されません。

変数 aを引数として matchdeclareをコールすると、 もし既に宣言されているなら、 aに関する matchdeclareプロパティが変わります: ルールが定義された時、直近の matchdeclareだけが効果を持ちます。 (matchdeclareremoveを介した) matchdeclareプロパティへの後の変更は、存在するルールに影響しません。

propvars (matchdeclare)matchdeclareプロパティを持つ変数すべてのリストを返します。 printprops (a, matchdeclare)は、 変数 aに関する述語論理を返します。 printprops (all, matchdeclare)は、 すべての matchdeclare変数に関する述語論理のリストを返します。 remove (a, matchdeclare)は、 aから matchdeclareプロパティを削除します。

関数 defmatch, defrule, tellsimp, tellsimpafter, letはパターンに対して式をテストするルールを構成します。

matchdeclareは引数をクォートします。 matchdeclareはいつも doneを返します。

例:

述語論理は、関数名か、ラムダ式か、最後の引数がない関数コールかラムダコールか、 trueallです。

 
(%i1) matchdeclare (aa, integerp);
(%o1)                         done
(%i2) matchdeclare (bb, lambda ([x], x > 0));
(%o2)                         done
(%i3) matchdeclare (cc, freeof (%e, %pi, %i));
(%o3)                         done
(%i4) matchdeclare (dd, lambda ([x, y], gcd (x, y) = 1) (1728));
(%o4)                         done
(%i5) matchdeclare (ee, true);
(%o5)                         done
(%i6) matchdeclare (ff, all);
(%o6)                         done

もし式がマッチ述語論理を満たすなら、 マッチ変数は式に割り当てられます。

 
(%i1) matchdeclare (aa, integerp, bb, atom);
(%o1)                         done
(%i2) defrule (r1, bb^aa, ["integer" = aa, "atom" = bb]);
                    aa
(%o2)        r1 : bb   -> [integer = aa, atom = bb]
(%i3) r1 (%pi^8);
(%o3)               [integer = 8, atom = %pi]

足し算と掛け算の場合、 マッチ変数は、マッチ述語論理を満たす1つの式か、 そんな式の(それぞれ)和か積に割り当てられるかもしれません。

 
(%i1) matchdeclare (aa, atom, bb, lambda ([x], not atom(x)));
(%o1)                         done
(%i2) defrule (r1, aa + bb, ["all atoms" = aa, "all nonatoms" =
               bb]);
bb + aa partitions `sum'
(%o2)  r1 : bb + aa -> [all atoms = aa, all nonatoms = bb]
(%i3) r1 (8 + a*b + sin(x));
(%o3)     [all atoms = 8, all nonatoms = sin(x) + a b]
(%i4) defrule (r2, aa * bb, ["all atoms" = aa, "all nonatoms" =
               bb]);
bb aa partitions `product'
(%o4)   r2 : aa bb -> [all atoms = aa, all nonatoms = bb]
(%i5) r2 (8 * (a + b) * sin(x));
(%o5)    [all atoms = 8, all nonatoms = (b + a) sin(x)]

+*の引数をマッチする時、 もしマッチ述語論理すべてが相互に排他的なら、 1つのマッチ述語論理は別のものがマッチした項を受け入れられないので、 マッチ結果は順序付けに影響されません。

 
(%i1) matchdeclare (aa, atom, bb, lambda ([x], not atom(x)));
(%o1)                         done
(%i2) defrule (r1, aa + bb, ["all atoms" = aa, "all nonatoms" =
               bb]);
bb + aa partitions `sum'
(%o2)  r1 : bb + aa -> [all atoms = aa, all nonatoms = bb]
(%i3) r1 (8 + a*b + %pi + sin(x) - c + 2^n);
                                                     n
(%o3) [all atoms = %pi + 8, all nonatoms = sin(x) + 2  - c + a b]
(%i4) defrule (r2, aa * bb, ["all atoms" = aa, "all nonatoms" =
               bb]);
bb aa partitions `product'
(%o4)   r2 : aa bb -> [all atoms = aa, all nonatoms = bb]
(%i5) r2 (8 * (a + b) * %pi * sin(x) / c * 2^n);
                                                  n
                                         (b + a) 2  sin(x)
(%o5) [all atoms = 8 %pi, all nonatoms = -----------------]
                                                 c

関数 propvarsprintpropsはマッチ変数についての情報を返します。

 
(%i1) matchdeclare ([aa, bb, cc], atom, [dd, ee], integerp);
(%o1)                         done
(%i2) matchdeclare (ff, floatnump, gg, lambda ([x], x > 100));
(%o2)                         done
(%i3) propvars (matchdeclare);
(%o3)             [aa, bb, cc, dd, ee, ff, gg]
(%i4) printprops (ee, matchdeclare);
(%o4)                    [integerp(ee)]
(%i5) printprops (gg, matchdeclare);
(%o5)              [lambda([x], x > 100, gg)]
(%i6) printprops (all, matchdeclare);
(%o6) [lambda([x], x > 100, gg), floatnump(ff), integerp(ee),
                      integerp(dd), atom(cc), atom(bb), atom(aa)]

オプション変数: maxapplydepth

デフォルト値: 10000

maxapplydepthapply1apply2が探索する最大の深さです。

Categories:  Function application

オプション変数: maxapplyheight

デフォルト値: 10000

maxapplyheightapplyb1があきらめる前に到達する最大の高さです。

Categories:  Function application

関数: remlet  
    remlet (prod, name)  
    remlet ()  
    remlet (all)  
    remlet (all, name)

let関数で直近に定義された代入ルール prod -> replを削除します。 名前を渡すとルールをルールパッケージ名から削除します。

remlet()remlet(all)は 現在のルールパッケージから代入ルールすべてを削除します。 例えばremlet (all, name)のようにルールパッケージ名を渡すと、 ルールパッケージ nameも削除します。

もし同じ積の代入を変えようと思ったら、 remletをコールする必要はなく、 let関数と新しい置き換えおよび述語論理名を使って 文字通りに同じ積を使って代入を再定義するだけです。 そこで remlet (prod)をコールすると、元の代入ルールが生き返ります。

remruleも参照してください。 tellsimptellsimpafterで定義されたルールを削除します。

Categories:  Rules and patterns

関数: remrule  
    remrule (op, rulename)  
    remrule (op, all)

tellsimptellsimpafterで定義されたルールを削除します。

remrule (op, rulename)は、演算子 opから名前 rulenameを持つルールを削除します。 opが組み込みか (infix, prefix, などで定義されたような)ユーザー定義演算子の時、 oprulenameはダブルクォートマークでくくられないといけません。

remrule (op, all)は演算子 opに関するルールすべてを削除します。

remletも参照してください。 letで定義されたルールを削除します。

例:

 
(%i1) tellsimp (foo (aa, bb), bb - aa);
(%o1)                   [foorule1, false]
(%i2) tellsimpafter (aa + bb, special_add (aa, bb));
(%o2)                   [+rule1, simplus]
(%i3) infix ("@@");
(%o3)                          @@
(%i4) tellsimp (aa @@ bb, bb/aa);
(%o4)                   [@@rule1, false]
(%i5) tellsimpafter (quux (%pi, %e), %pi - %e);
(%o5)                  [quuxrule1, false]
(%i6) tellsimpafter (quux (%e, %pi), %pi + %e);
(%o6)             [quuxrule2, quuxrule1, false]
(%i7) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
       quux (%e, %pi)];
                                     bb
(%o7) [bb - aa, special_add(aa, bb), --, %pi - %e, %pi + %e]
                                     aa
(%i8) remrule (foo, foorule1);
(%o8)                          foo
(%i9) remrule ("+", ?\+rule1);
(%o9)                           +
(%i10) remrule ("@@", ?\@\@rule1);
(%o10)                         @@
(%i11) remrule (quux, all);
(%o11)                        quux
(%i12) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
        quux (%e, %pi)];
(%o12) [foo(aa, bb), bb + aa, aa @@ bb, quux(%pi, %e),
                                         quux(%e, %pi)]

Categories:  Rules and patterns

関数: tellsimp (pattern, replacement)

tellsimpafterに似ていますが、 古いものの前に新しい情報を置くので組み込み整理ルールの前に適用されます。

整理器が働く前に式を変更することが重要な時、 例えば整理器が式について何か「知っている」がそれが返すものが好みでないなら、 tellsimpを使います。 もし整理器が式の主演算子について何かを「知っている」が単に十分でないなら、 たぶん tellsimpafterを使いたいでしょう。

パターンは、和や積、変数1つ、数は取れません。

システム変数 rulesdefrule, defmatch, tellsimp, tellsimpafterで定義されたルールのリストです。

例:

 
(%i1) matchdeclare (x, freeof (%i));
(%o1)                         done
(%i2) %iargs: false$
(%i3) tellsimp (sin(%i*x), %i*sinh(x));
(%o3)                 [sinrule1, simp-%sin]
(%i4) trigexpand (sin (%i*y + x));
(%o4)         sin(x) cos(%i y) + %i cos(x) sinh(y)
(%i5) %iargs:true$
(%i6) errcatch(0^0);
 0
0  has been generated
(%o6)                          []
(%i7) ev (tellsimp (0^0, 1), simp: false);
(%o7)                  [^rule1, simpexpt]
(%i8) 0^0;
(%o8)                           1
(%i9) remrule ("^", %th(2)[1]);
(%o9)                           ^
(%i10) tellsimp (sin(x)^2, 1 - cos(x)^2);
(%o10)                 [^rule2, simpexpt]
(%i11) (1 + sin(x))^2;
                                      2
(%o11)                    (sin(x) + 1)
(%i12) expand (%);
                                   2
(%o12)               2 sin(x) - cos (x) + 2
(%i13) sin(x)^2;
                                  2
(%o13)                     1 - cos (x)
(%i14) kill (rules);
(%o14)                        done
(%i15) matchdeclare (a, true);
(%o15)                        done
(%i16) tellsimp (sin(a)^2, 1 - cos(a)^2);
(%o16)                 [^rule3, simpexpt]
(%i17) sin(y)^2;
                                  2
(%o17)                     1 - cos (y)

Categories:  Rules and patterns

関数: tellsimpafter (pattern, replacement)

組み込み整理ルールの後、 Maxima整理器が適用する整理ルールを定義します。 patternは、 (matchdeclareで宣言された)パターン変数や他のアトムや演算子 ―パターンマッチング用とみなされるリテラル―からなる式です。

replacementpatternにマッチする実際の式に代入されます; replacementの中のパターン変数には実際の式の中でマッチした値が割り当てられます。

patternは主演算子がパターン変数でない任意の非アトム式を取り得ます; 整理ルールは主演算子に関連付けられます。 (以下で記述する1つの例外がありますが、)関数、リスト、配列の名前が、 (パターン変数でなく)ただリテラルとして、 主演算子として patternの中で現れることができます; これは、パターンとして もし aabbがパターン変数なら aa(x)bb[y]のような式を除外します。 パターン変数である関数、リスト、配列の名前は patternの中で主演算子以外の演算子として現れることがあります。

上の関数名に関するルールに1つ例外があります。 aa[x](y)のような式の中の添字付き関数の名前は、 主演算子が aaでなく Lispアトム mqapplyだからパターン変数にできます。 これは添字付き関数を含む式の表現の結果です。

(もしクォートやフラグ noevalを通して抑制されないなら) 整理ルールは、評価の後、適用されます。 tellsimpafterで確立されたルールは、 組み込みルールの後、それらが定義された順に適用されます。 ルールはボトムアップに適用されます。 すなわち、式全体への適用の前に、最初、部分式に適用されます。 ルールすべてが適用されることを保証するために、 (例えば、クォートクォート演算子 ''やフラグ infevalを介して) 結果を繰り返し整理する必要があるかもしれません。

パターン変数は、整理ルールの中でローカル変数として扱われます。 一旦ルールが定義されると、パターン変数の値はルールに影響せず、ルールによって影響されません。 成功したルールマッチの結果となるパターン変数への割り当ては、 パターン変数の現在の割り当て(またはその欠落)に影響しません。 しかしながら、 Maximaの中のアトムすべてで、 (putや関連関数で定義された)パターン変数のプロパティはグローバルです。

tellsimpafterが構成するルールは patternの主演算子の名前を取って名付けられます。 組み込み演算子や infix, prefix, postfix, matchfix, nofixで定義されたユーザー定義演算子に関するルールは、 Lisp識別子である名前を持ちます。 他の関数に関するルールは Maxima識別子である名前を持ちます。

名詞と動詞形の扱いは少し混乱しています。 もしルールが名詞(または動詞)形に関して定義されて、 対応する動詞(または名詞)形に関するルールが既に存在しているなら、 新しく定義されたルールは両方の形式(名詞と動詞)に適用されます。 もし対応する動詞(名詞)形に関するルールが存在しないなら、 新しく定義されたルールは名詞(または動詞)形にだけ適用されます。

tellsimpafterで構成されたルールは通常の Lisp関数です。 もしルール名が $foorule1なら、 構成子 :lisp (trace $foorule1)は関数をトレースし、 :lisp (symbol-function '$foorule1)は定義を表示します。

tellsimpafterは引数をクォートします。 tellsimpafterpatternの主演算子に関するルールのリストを返します。 このリストは新しく確立されたルールを含みます。

matchdeclare, defmatch, defrule, tellsimp, let, kill, remrule, clear_rulesも参照してください。

例:

patternは主演算子がパターン変数でない任意の非アトム式を取り得ます。

 
(%i1) matchdeclare (aa, atom, [ll, mm], listp, xx, true)$
(%i2) tellsimpafter (sin (ll), map (sin, ll));
(%o2)                 [sinrule1, simp-%sin]
(%i3) sin ([1/6, 1/4, 1/3, 1/2, 1]*%pi);
                    1  sqrt(2)  sqrt(3)
(%o3)              [-, -------, -------, 1, 0]
                    2     2        2
(%i4) tellsimpafter (ll^mm, map ("^", ll, mm));
(%o4)                  [^rule1, simpexpt]
(%i5) [a, b, c]^[1, 2, 3];
                                2   3
(%o5)                      [a, b , c ]
(%i6) tellsimpafter (foo (aa (xx)), aa (foo (xx)));
(%o6)                   [foorule1, false]
(%i7) foo (bar (u - v));
(%o7)                    bar(foo(u - v))

ルールはそれらが定義された順に適用されます。 もし2つのルールが式にマッチできるなら最初に定義されたルールが適用されます。

 
(%i1) matchdeclare (aa, integerp);
(%o1)                         done
(%i2) tellsimpafter (foo (aa), bar_1 (aa));
(%o2)                   [foorule1, false]
(%i3) tellsimpafter (foo (aa), bar_2 (aa));
(%o3)              [foorule2, foorule1, false]
(%i4) foo (42);
(%o4)                       bar_1(42)

整理ルールの中でパターン変数はローカル変数として扱われます。 (defmatchと比較してください。パターン変数をグローバル変数として扱います。)

 
(%i1) matchdeclare (aa, integerp, bb, atom);
(%o1)                         done
(%i2) tellsimpafter (foo(aa, bb), bar('aa=aa, 'bb=bb));
(%o2)                   [foorule1, false]
(%i3) bb: 12345;
(%o3)                         12345
(%i4) foo (42, %e);
(%o4)                 bar(aa = 42, bb = %e)
(%i5) bb;
(%o5)                         12345

アトムすべてと同様に、 たとえ値がローカルでもパターン変数のプロパティはグローバルです。 この例では、割り当てプロパティは define_variableを介して宣言されます。 Maximaの至る所でこれはアトム bbのプロパティです。

 
(%i1) matchdeclare (aa, integerp, bb, atom);
(%o1)                         done
(%i2) tellsimpafter (foo(aa, bb), bar('aa=aa, 'bb=bb));
(%o2)                   [foorule1, false]
(%i3) foo (42, %e);
(%o3)                 bar(aa = 42, bb = %e)
(%i4) define_variable (bb, true, boolean);
(%o4)                         true
(%i5) foo (42, %e);
Error: bb was declared mode boolean, has value: %e
 -- an error.  Quitting.  To debug this try debugmode(true);

ルールは主演算子の名前を取って名付けられます。 組み込みやユーザー定義の演算子に関するルール名は Lisp識別子で、 一方、他の関数に関する名前は Maxima識別子です。

 
(%i1) tellsimpafter (foo (%pi + %e), 3*%pi);
(%o1)                   [foorule1, false]
(%i2) tellsimpafter (foo (%pi * %e), 17*%e);
(%o2)              [foorule2, foorule1, false]
(%i3) tellsimpafter (foo (%i ^ %e), -42*%i);
(%o3)         [foorule3, foorule2, foorule1, false]
(%i4) tellsimpafter (foo (9) + foo (13), quux (22));
(%o4)                   [+rule1, simplus]
(%i5) tellsimpafter (foo (9) * foo (13), blurf (22));
(%o5)                  [*rule1, simptimes]
(%i6) tellsimpafter (foo (9) ^ foo (13), mumble (22));
(%o6)                  [^rule1, simpexpt]
(%i7) rules;
(%o7) [foorule1, foorule2, foorule3, +rule1, *rule1, ^rule1]
(%i8) foorule_name: first (%o1);
(%o8)                       foorule1
(%i9) plusrule_name: first (%o4);
(%o9)                        +rule1
(%i10) remrule (foo, foorule1);
(%o10)                         foo
(%i11) remrule ("^", ?\^rule1);
(%o11)                          ^
(%i12) rules;
(%o12)        [foorule2, foorule3, +rule1, *rule1]

加工された (worked)例: 反可換乗算。

 
(%i1) gt (i, j) := integerp(j) and i < j;
(%o1)           gt(i, j) := integerp(j) and i < j
(%i2) matchdeclare (i, integerp, j, gt(i));
(%o2)                         done
(%i3) tellsimpafter (s[i]^^2, 1);
(%o3)                 [^^rule1, simpncexpt]
(%i4) tellsimpafter (s[i] . s[j], -s[j] . s[i]);
(%o4)                   [.rule1, simpnct]
(%i5) s[1] . (s[1] + s[2]);
(%o5)                    s  . (s  + s )
                          1     2    1
(%i6) expand (%);
(%o6)                      1 - s  . s
                                2    1
(%i7) factor (expand (sum (s[i], i, 0, 9)^^5));
(%o7) 100 (s  + s  + s  + s  + s  + s  + s  + s  + s  + s )
            9    8    7    6    5    4    3    2    1    0

Categories:  Rules and patterns

関数: clear_rules ()

kill (rules)を実行し、足し算 +, 掛け算 *, べき ^に関して次のルール番号を 1に再設定します。

Categories:  Rules and patterns


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35. Sets


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.1 Introduction to Sets

Maximaは、 明示的な列挙によって定義された有限集合用に、積集合や和集合のような集合関数を提供します。 Maximaはリストと集合を別のオブジェクトとして扱います。 この特長は、要素がリストであったり集合であったりする集合を扱うことを可能にします。

有限集合のための関数に加えて、 Maximaは組み合わせ論に関係したいくつかの関数を提供します; これらは、第一種と第二種スターリング数、ベル数、第一種と第二種の多項係数、 非負整数の分割、と2,3の他の関数を含みます。 Maximaはクロネッカーのデルタ関数も定義します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.1.1 Usage

要素 a_1, ..., a_nの集合を構成するには、 set(a_1, ..., a_n)または {a_1, ..., a_n}と書いてください; 空集合を構成するには set()または {}を書いてください。 入力では set(...){ ... }は同値です。 集合はいつも中括弧で表示されます。

もし要素が一度以上リストされているなら、整理によって冗長な要素は消去されます。

 
(%i1) set();
(%o1)                          {}
(%i2) set(a, b, a);
(%o2)                        {a, b}
(%i3) set(a, set(b));
(%o3)                       {a, {b}}
(%i4) set(a, [b]);
(%o4)                       {a, [b]}
(%i5) {};
(%o5)                          {}
(%i6) {a, b, a};
(%o6)                        {a, b}
(%i7) {a, {b}};
(%o7)                       {a, {b}}
(%i8) {a, [b]};
(%o8)                       {a, [b]}

2つの要素候補 xyは、 is(x = y)trueをもたらす (すなわち、集合構成の目的で同じと見なされる)時だけ冗長です。 is(x = y)falseをもたらす一方、 is(equal(x, y))trueをもたらす可能性があることに 注意してください; その場合、要素 xyは異なったものと見なされます。

 
(%i1) x: a/c + b/c;
                              b   a
(%o1)                         - + -
                              c   c
(%i2) y: a/c + b/c;
                              b   a
(%o2)                         - + -
                              c   c
(%i3) z: (a + b)/c;
                              b + a
(%o3)                         -----
                                c
(%i4) is (x = y);
(%o4)                         true
(%i5) is (y = z);
(%o5)                         false
(%i6) is (equal (y, z));
(%o6)                         true
(%i7) y - z;
                           b + a   b   a
(%o7)                    - ----- + - + -
                             c     c   c
(%i8) ratsimp (%);
(%o8)                           0
(%i9) {x, y, z};
                          b + a  b   a
(%o9)                    {-----, - + -}
                            c    c   c

リストの要素から集合を構成するには setifyを使ってください。

 
(%i1) setify ([b, a]);
(%o1)                        {a, b}

もし is(x = y)trueに評価されるなら、 集合の要素 xyは等しいです。 従って rat(x)xは集合の元として等しいです; 結果として

 
(%i1) {x, rat(x)};
(%o1)                          {x}

さらに、 is((x - 1)*(x + 1) = x^2 - 1)falseに評価されるので、 (x - 1)*(x + 1)x^2 - 1は集合の異なる要素です; 従って

 
(%i1) {(x - 1)*(x + 1), x^2 - 1};
                                       2
(%o1)               {(x - 1) (x + 1), x  - 1}

この集合を 1要素集合に縮小するには、 ratを集合の元それぞれに適用してください:

 
(%i1) {(x - 1)*(x + 1), x^2 - 1};
                                       2
(%o1)               {(x - 1) (x + 1), x  - 1}
(%i2) map (rat, %);
                              2
(%o2)/R/                    {x  - 1}

他の集合から冗長性を取り除くために他の整理関数を使う必要があるかもしれません。 以下は trigsimpを使った例です:

 
(%i1) {1, cos(x)^2 + sin(x)^2};
                            2         2
(%o1)                {1, sin (x) + cos (x)}
(%i2) map (trigsimp, %);
(%o2)                          {1}

元が冗長でなく、並べ換えられている時、集合は整理されてます。 集合関数の現在のバージョンは 集合を順に並べるためにMaxima関数 orderlesspを使います; しかしながら、 集合関数の将来のバージョンは、違う並び替え関数を使うかもしれません。

代入のような集合に関するいくつかの演算は、再整理を自動的に強制します; 例えば、

 
(%i1) s: {a, b, c}$
(%i2) subst (c=a, s);
(%o2)                        {a, b}
(%i3) subst ([a=x, b=x, c=x], s);
(%o3)                          {x}
(%i4) map (lambda ([x], x^2), set (-1, 0, 1));
(%o4)                        {0, 1}

Maximaはリストと集合を異なるオブジェクトとして扱います; unionintersectionのような関数は、 もし引数のいずれかが集合でないなら文句を言います。 もしリストに集合関数を適用する必要があるなら、 集合に変換するために setify関数を使ってください。 例えば、

 
(%i1) union ([1, 2], {a, b});
Function union expects a set, instead found [1,2]
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i2) union (setify ([1, 2]), {a, b});
(%o2)                     {1, 2, a, b}

集合 sの集合要素のうち述語論理 fを満たすすべての要素を抽出するためには、 subset(s, f)を使ってください。 (述語論理はブーリアン値関数です。) 例えば、 与えられた集合の中で変数 zに依存しない等式を見つけるには、 以下を使ってください。

 
(%i1) subset ({x + y + z, x - y + 4, x + y - 5},
                                    lambda ([e], freeof (z, e)));
(%o1)               {- y + x + 4, y + x - 5}

Functions and Variables for Setsには Maximaの集合関数すべてがリストされます。

Categories:  Sets


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.1.2 Set Member Iteration

集合の要素上を反復する2つの方法があります。 1つの方法は mapの使用です; 例えば:

 
(%i1) map (f, {a, b, c});
(%o1)                  {f(a), f(b), f(c)}

他の方法は for x in s doを使うことです。

 
(%i1) s: {a, b, c};
(%o1)                       {a, b, c}
(%i2) for si in s do print (concat (si, 1));
a1
b1
c1
(%o2)                         done

Maxima関数 firstrestは集合に対して正しく機能します。 集合に適用されると、 firstは最初に表示される集合の要素を返します; それは実装依存かもしれません。 もし sが集合なら、 rest(s)disjoin(first(s), s)と同値です。 今は、集合に対して正しく機能する Maxima関数が他にもあります。 集合関数の将来のバージョンでは、 firstrestは今と違うように動くかもしれませんし、 全く動かないかもしれません。

Maximaの orderlessordergreatメカニズムは集合関数と互換性がありません。 もし orderlessordergreatのいずれかを使う必要があるなら、 どんなものでも集合を構成する前にこれらの関数をコールしてください。 そして unorderをコールしないでください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.1.3 Authors

マサチューセッツ州ケンブリッジ市の Stavros Macrakisと ネブラスカ大学カーニー校(UNK)の Barton Willisが Maximaの集合関数とそれらのドキュメンテーションを書きました。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35.2 Functions and Variables for Sets

関数: adjoin (x, a)

集合 aに要素 {x}を加えた集合を返します。

もし aが集合リテラルでないなら adjoinは文句を言います。

adjoin(x, a)union(set(x), a)は同値です; しかし adjoinunionより幾分早いかもしれません。

disjoinも参照してください。

例:

 
(%i1) adjoin (c, {a, b});
(%o1)                       {a, b, c}
(%i2) adjoin (a, {a, b});
(%o2)                        {a, b}

Categories:  Sets

関数: belln (n)

n番目のベル数を返します。 belln(n)n個のメンバーを持つ集合の分割の数です。

非負整数 nの場合、 belln(n)n番目のベル数に整理されます。 他の引数の場合どんなものでも bellnは整理されません。

bellnは等式、リスト、行列、集合上に分配されます。

例:

非負整数に適用された belln

 
(%i1) makelist (belln (i), i, 0, 6);
(%o1)               [1, 1, 2, 5, 15, 52, 203]
(%i2) is (cardinality (set_partitions ({})) = belln (0));
(%o2)                         true
(%i3) is (cardinality (set_partitions ({1, 2, 3, 4, 5, 6})) =
                       belln (6));
(%o3)                         true

非負整数でない引数に適用された belln

 
(%i1) [belln (x), belln (sqrt(3)), belln (-9)];
(%o1)        [belln(x), belln(sqrt(3)), belln(- 9)]

Categories:  Sets

関数: cardinality (a)

集合 aの異なる要素の数を返します。

整理がディセーブルされた時でも cardinalityは冗長な要素を無視します。

例:

 
(%i1) cardinality ({});
(%o1)                           0
(%i2) cardinality ({a, a, b, c});
(%o2)                           3
(%i3) simp : false;
(%o3)                         false
(%i4) cardinality ({a, a, b, c});
(%o4)                           3

Categories:  Sets

関数: cartesian_product (b_1, ... , b_n)

形式 [x_1, ..., x_n]のリストの集合を返します。 ここで x_1, ..., x_nはそれぞれ集合 b_1, ... , b_nの要素です。

もし任意の引数が集合リテラルでないなら cartesian_productは文句を言います。

例:

 
(%i1) cartesian_product ({0, 1});
(%o1)                      {[0], [1]}
(%i2) cartesian_product ({0, 1}, {0, 1});
(%o2)           {[0, 0], [0, 1], [1, 0], [1, 1]}
(%i3) cartesian_product ({x}, {y}, {z});
(%o3)                      {[x, y, z]}
(%i4) cartesian_product ({x}, {-1, 0, 1});
(%o4)              {[x, - 1], [x, 0], [x, 1]}

Categories:  Sets

関数: disjoin (x, a)

要素 xを持たない集合 aを返します。 もし xaのメンバーでないなら aをそのまま返します。

もし aが集合リテラルでないなら disjoinは文句を言います。

disjoin(x, a), delete(x, a), setdifference(a, set(x))はすべて同値です。 これらの中で disjoinは一般的に他より速いです。

例:

 
(%i1) disjoin (a, {a, b, c, d});
(%o1)                       {b, c, d}
(%i2) disjoin (a + b, {5, z, a + b, %pi});
(%o2)                      {5, %pi, z}
(%i3) disjoin (a - b, {5, z, a + b, %pi});
(%o3)                  {5, %pi, b + a, z}

Categories:  Sets

関数: disjointp (a, b)

集合 abが交わらないなら trueを返します。

もし abが集合リテラルでないなら disjointpは文句を言います。

例:

 
(%i1) disjointp ({a, b, c}, {1, 2, 3});
(%o1)                         true
(%i2) disjointp ({a, b, 3}, {1, 2, 3});
(%o2)                         false

Categories:  Sets · Predicate functions

関数: divisors (n)

nの約数の集合を表します。

nがゼロでない整数の時、 divisors(n)は整数の集合に整理されます。 約数の集合は要素 1と nを含みます。 負の整数の約数はその絶対値の約数です。

divisorsは等式、リスト、行列、集合上に分配されます。

例:

28は完全数であることを検証できます: (自身を除いた)約数が 28です。

 
(%i1) s: divisors(28);
(%o1)                 {1, 2, 4, 7, 14, 28}
(%i2) lreduce ("+", args(s)) - 28;
(%o2)                          28

divisorsは整理関数です。 divisors(a)の中で aに8を代入することは、 divisors(8)を再評価せずに約数をもたらします。

 
(%i1) divisors (a);
(%o1)                      divisors(a)
(%i2) subst (8, a, %);
(%o2)                     {1, 2, 4, 8}

divisorsは等式、リスト、行列、集合上に分配されます。

 
(%i1) divisors (a = b);
(%o1)               divisors(a) = divisors(b)
(%i2) divisors ([a, b, c]);
(%o2)        [divisors(a), divisors(b), divisors(c)]
(%i3) divisors (matrix ([a, b], [c, d]));
                  [ divisors(a)  divisors(b) ]
(%o3)             [                          ]
                  [ divisors(c)  divisors(d) ]
(%i4) divisors ({a, b, c});
(%o4)        {divisors(a), divisors(b), divisors(c)}

Categories:  Integers

関数: elementp (x, a)

xが集合 aの要素の場合だけ trueを返します。

もし aが集合リテラルでないなら elementpは文句を言います。

例:

 
(%i1) elementp (sin(1), {sin(1), sin(2), sin(3)});
(%o1)                         true
(%i2) elementp (sin(1), {cos(1), cos(2), cos(3)});
(%o2)                         false

Categories:  Sets · Predicate functions

関数: emptyp (a)

aが空の集合か空のリストの場合だけ trueを返します。

例:

 
(%i1) map (emptyp, [{}, []]);
(%o1)                     [true, true]
(%i2) map (emptyp, [a + b, {{}}, %pi]);
(%o2)                 [false, false, false]

Categories:  Sets · Predicate functions

関数: equiv_classes (s, F)

集合 sの同値関係 Fに関する同値クラスの集合を返します。

Fssとの直積集合上の2変数関数です。 Fの戻り値は truefalse、もしくは is(expr)truefalseのような 式 exprです。

Fが同値関数でない時、 equiv_classesは不平なくそれを受け入れますが、 その場合、結果は一般に正しくありません。

例:

同値関係が truefalseを返すラムダ式です。

 
(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0},
                        lambda ([x, y], is (equal (x, y))));
(%o1)            {{1, 1.0}, {2, 2.0}, {3, 3.0}}

同値関係が、istruefalseに評価される 関係関数の名前です。

 
(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, equal);
(%o1)            {{1, 1.0}, {2, 2.0}, {3, 3.0}}

同値クラスが 3の倍数だけ違う数です。

 
(%i1) equiv_classes ({1, 2, 3, 4, 5, 6, 7},
                     lambda ([x, y], remainder (x - y, 3) = 0));
(%o1)              {{1, 4, 7}, {2, 5}, {3, 6}}

Categories:  Sets

関数: every  
    every (f, s)  
    every (f, L_1, ..., L_n)

もし述語論理 fが与えられた引数すべてで trueなら、 trueを返します。

ある集合が二番目の引数として与えられたとして、 もし is(f(a_i))sの中の a_iすべてに関して trueを返すなら、 every(f, s)trueです。 everysの中の a_iすべてに関して fを評価するかどうかわかりません。 集合は順序付けされていないので、 everyは任意の順序で f(a_i)を評価します。

引数に1つか複数のリストが与えられたとして、 もし is(f(x_1, ..., x_n))L_1, ..., L_nそれぞれの中の x_1, ..., x_nすべてに対して trueを返すなら、 every(f, L_1, ..., L_n)trueを返します。 everyは、 x_1, ..., x_nのすべての組み合わせに対して fを評価するかどうかわかりません。 everyはインデックスを増やす順序でリストを評価します。

空の集合 {}または空のリスト []が引数に与えられると、 everytrueを返します。

グローバルフラグ maperrortrueの時、 リスト L_1, ..., L_nすべては長さが等しくなければいけません。 maperrorfalseの時、 リスト引数は最短のリストの長さに効果的に切り詰められます。

truefalse以外の何かに (isを介して)評価される述語論理 fの戻り値は、 prederrorが決定します。 prederrortrueの時、 そんな値は falseとして扱われ、 everyの戻り値は falseです。 prederrorfalseの時、 そんな値は unknownとして扱われ、 everyの戻り値は unknownです。

例:

1つの集合に適用された every。 述語論理は1引数関数です。

 
(%i1) every (integerp, {1, 2, 3, 4, 5, 6});
(%o1)                         true
(%i2) every (atom, {1, 2, sin(3), 4, 5 + y, 6});
(%o2)                         false

2つのリストに適用された every。 述語論理は2引数関数です。

 
(%i1) every ("=", [a, b, c], [a, b, c]);
(%o1)                         true
(%i2) every ("#", [a, b, c], [a, b, c]);
(%o2)                         false

truefalse以外の何かに評価される 述語論理 fの戻り値はグローバルフラグ prederrorが決定します。

 
(%i1) prederror : false;
(%o1)                         false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z],
                   [x^2, y^2, z^2]);
(%o2)              [unknown, unknown, unknown]
(%i3) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)                        unknown
(%i4) prederror : true;
(%o4)                         true
(%i5) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o5)                         false

Categories:  Sets

関数: extremal_subset  
    extremal_subset (s, f, max)  
    extremal_subset (s, f, min)

要素に関数 fを適用した結果が最大または最小値になるような sの部分集合を返します。

extremal_subset(s, f, max)は、 実数値関数 fが最大値を取る、 集合またはリスト sの部分集合を返します。

extremal_subset(s, f, min)は、 実数値関数 fが最小値を取る、 集合またはリスト sの部分集合を返します。

例:

 
(%i1) extremal_subset ({-2, -1, 0, 1, 2}, abs, max);
(%o1)                       {- 2, 2}
(%i2) extremal_subset ({sqrt(2), 1.57, %pi/2}, sin, min);
(%o2)                       {sqrt(2)}

Categories:  Sets

関数: flatten (expr)

exprと同じ演算子を持つ部分式の引数を集め、これらの集めた引数から式を構成します。

exprの主演算子と違った演算子の部分式は、 たとえそれらが逆に exprに関するものと同じ演算子の部分式を含んだとしても、 変更なしにコピーされます。

引数の数が演算子に関して宣言された引数と違う式を flattenが構成する可能性があるかもしれません; これは整理器や評価器からのエラーメッセージを起こさせるかもしれません。 flattenはそんな状況を検出しようとしません。

特別な表現の式、例えば、標準有理式 (CRE)はflattenできません; そんな場合、flattenは引数を変更なしに返します。

例:

リストに適用すると、 flattenはリストの要素すべてを集めます。

 
(%i1) flatten ([a, b, [c, [d, e], f], [[g, h]], i, j]);
(%o1)            [a, b, c, d, e, f, g, h, i, j]

集合に適用すると、 flattenは集合の要素すべてを集めます。

 
(%i1) flatten ({a, {b}, {{c}}});
(%o1)                       {a, b, c}
(%i2) flatten ({a, {[a], {a}}});
(%o2)                       {a, [a]}

flattenは主演算子を n項に宣言する効果に似ています。 しかしながら、flattenは主演算子と違う演算子を持つ部分式上に影響を持ちません。 一方、 n項宣言はそれらに影響します。

 
(%i1) expr: flatten (f (g (f (f (x)))));
(%o1)                     f(g(f(f(x))))
(%i2) declare (f, nary);
(%o2)                         done
(%i3) ev (expr);
(%o3)                      f(g(f(x)))

flattenは他の任意の演算子と同じように添字付き関数を扱います。

 
(%i1) flatten (f[5] (f[5] (x, y), z));
(%o1)                      f (x, y, z)
                            5

引数の数が演算子に関して宣言された引数と違う式を flattenが構成する可能性があるかもしれません;

 
(%i1) 'mod (5, 'mod (7, 4));
(%o1)                   mod(5, mod(7, 4))
(%i2) flatten (%);
(%o2)                     mod(5, 7, 4)
(%i3) ''%, nouns;
Wrong number of arguments to mod
 -- an error.  Quitting.  To debug this try debugmode(true);

Categories:  Sets · Lists

関数: full_listify (a)

aの中のすべての集合演算子をリスト演算子で置き換え、結果を返します。 full_listifyは、たとえ主演算子が setでなくても 入れ子の部分式の中の集合演算子を置き換えます。

listifyは主演算子だけを置き換えます。

例:

 
(%i1) full_listify ({a, b, {c, {d, e, f}, g}});
(%o1)               [a, b, [c, [d, e, f], g]]
(%i2) full_listify (F (G ({a, b, H({c, d, e})})));
(%o2)              F(G([a, b, H([c, d, e])]))

Categories:  Sets

関数: fullsetify (a)

aがリストの時、リスト演算子を集合演算子で置き換え、 fullsetifyを集合であるメンバーそれぞれに適用します。 aがリストでない時、変更なしで返します。

setifyは主演算子だけを置き換えます。

例:

f([b])の主演算子はリストでないので、行 (%o2)fの引数は集合に変換されません。

 
(%i1) fullsetify ([a, [a]]);
(%o1)                       {a, {a}}
(%i2) fullsetify ([a, f([b])]);
(%o2)                      {a, f([b])}

Categories:  Lists

関数: identity (x)

任意の引数 xに対して xを返します。

例:

identityは、引数が既にブーリアン値の時、述語論理として使うことができます。

 
(%i1) every (identity, [true, true]);
(%o1)                         true

関数: integer_partitions  
    integer_partitions (n)  
    integer_partitions (n, len)

nの整数分割を返します。 すなわち、和が nになる整数のリストです。

integer_partitions(n)は整数 nの分割すべての集合を返します。 分割それぞれは大きい順に並べられたリストです。

integer_partitions(n, len)は、長さ len以下の分割すべてを返します; この場合、 lenより少ない項を持つ分割それぞれには、 厳密に len項持つ分割にするようにゼロが足されます。 分割それぞれは大きい順に並べられたリストです。

リスト [a_1, ..., a_m]は、 (1) a_iそれぞれが非ゼロ整数、かつ、 (2) a_1 + ... + a_m = n. の時、非負整数 nの分割です。 従って 0は分割を持ちません。

例:

 
(%i1) integer_partitions (3);
(%o1)               {[1, 1, 1], [2, 1], [3]}
(%i2) s: integer_partitions (25)$
(%i3) cardinality (s);
(%o3)                         1958
(%i4) map (lambda ([x], apply ("+", x)), s);
(%o4)                         {25}
(%i5) integer_partitions (5, 3);
(%o5) {[2, 2, 1], [3, 1, 1], [3, 2, 0], [4, 1, 0], [5, 0, 0]}
(%i6) integer_partitions (5, 2);
(%o6)               {[3, 2], [4, 1], [5, 0]}

条件を満たす分割すべてを見つけるには、 関数 subsetを使ってください; 以下は素数から成る 10の分割すべてを見つける例です。

 
(%i1) s: integer_partitions (10)$
(%i2) cardinality (s);
(%o2)                          42
(%i3) xprimep(x) := integerp(x) and (x > 1) and primep(x)$
(%i4) subset (s, lambda ([x], every (xprimep, x)));
(%o4) {[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5], [7, 3]}

Categories:  Integers

関数: intersect (a_1, ..., a_n)

intersectは以下に見る intersectionと同じです。

Categories:  Sets

関数: intersection (a_1, ..., a_n)

集合 a_1から a_nまでに共通な要素を含む集合を返します。

もし引数のいずれかが集合リテラルでないなら intersectionは文句を言います。

例:

 
(%i1) S_1 : {a, b, c, d};
(%o1)                     {a, b, c, d}
(%i2) S_2 : {d, e, f, g};
(%o2)                     {d, e, f, g}
(%i3) S_3 : {c, d, e, f};
(%o3)                     {c, d, e, f}
(%i4) S_4 : {u, v, w};
(%o4)                       {u, v, w}
(%i5) intersection (S_1, S_2);
(%o5)                          {d}
(%i6) intersection (S_2, S_3);
(%o6)                       {d, e, f}
(%i7) intersection (S_1, S_2, S_3);
(%o7)                          {d}
(%i8) intersection (S_1, S_2, S_3, S_4);
(%o8)                          {}

Categories:  Sets

関数: kron_delta (x, y, …, xp)

クロネッカーのデルタ関数を表します。

kron_deltaは、 xiyjが引数のすべての対で等しい時 1に整理され、 xiyjが引数のある対で等しくない時 0に整理されます。 等号は is(equal(xi,j))を使って決定され、 不等号は is(notsqual(xi,xj))を使って決定されます。 引数が1つの場合、 kron_deltaはエラーをシグナルします。

例:

 
(%i1) kron_delta(a,a);
(%o1)                                  1
(%i2) kron_delta(a,b,a,b);
(%o2)                          kron_delta(a, b)
(%i3) kron_delta(a,a,b,a+1);
(%o3)                                  0
(%i4) assume(equal(x,y));
(%o4)                            [equal(x, y)]
(%i5) kron_delta(x,y);
(%o5)                                  1

関数: listify (a)

aが集合の時、aの要素を含むリストを返します。 そうでないなら、 listifyaを返します。

full_listifyaの中の集合演算子をリスト演算子に置き換えます。

例:

 
(%i1) listify ({a, b, c, d});
(%o1)                     [a, b, c, d]
(%i2) listify (F ({a, b, c, d}));
(%o2)                    F({a, b, c, d})

Categories:  Sets

関数: makeset (expr, x, s)

exprから生成された要素を持つ集合を返します。 ここで xexprの中の変数のリストであり、 sはリストの集合かリストのリストです。 集合の要素それぞれを生成するために、 変数 xを並列に sの要素にバインドして exprを評価します。

sの要素それぞれは xと同じ長さを持たなければいけません。 変数 xのリストは添字の付かないシンボルのリストでなければいけません。 たとえシンボルが1つしかない場合でも、 xは1要素のリストでなければいけなく、 sの要素それぞれは1要素のリストでなければいけません。

makelistも参照してください。

例:

 
(%i1) makeset (i/j, [i, j], [[1, a], [2, b], [3, c], [4, d]]);
                           1  2  3  4
(%o1)                     {-, -, -, -}
                           a  b  c  d
(%i2) S : {x, y, z}$
(%i3) S3 : cartesian_product (S, S, S);
(%o3) {[x, x, x], [x, x, y], [x, x, z], [x, y, x], [x, y, y],
[x, y, z], [x, z, x], [x, z, y], [x, z, z], [y, x, x],
[y, x, y], [y, x, z], [y, y, x], [y, y, y], [y, y, z],
[y, z, x], [y, z, y], [y, z, z], [z, x, x], [z, x, y],
[z, x, z], [z, y, x], [z, y, y], [z, y, z], [z, z, x],
[z, z, y], [z, z, z]}
(%i4) makeset (i + j + k, [i, j, k], S3);
(%o4) {3 x, 3 y, y + 2 x, 2 y + x, 3 z, z + 2 x, z + y + x,
                                       z + 2 y, 2 z + x, 2 z + y}
(%i5) makeset (sin(x), [x], {[1], [2], [3]});
(%o5)               {sin(1), sin(2), sin(3)}

Categories:  Sets

関数: moebius (n)

メビウス関数を表します。

nk個の異なる素数の積の時、 moebius(n)(-1)^kに整理されます; n = 1の時 1に整理されます; 他の正の数すべてに対しては 0に整理されます。

moebiusは等式、リスト、行列、集合上に分配されます。

例:

 
(%i1) moebius (1);
(%o1)                           1
(%i2) moebius (2 * 3 * 5);
(%o2)                          - 1
(%i3) moebius (11 * 17 * 29 * 31);
(%o3)                           1
(%i4) moebius (2^32);
(%o4)                           0
(%i5) moebius (n);
(%o5)                      moebius(n)
(%i6) moebius (n = 12);
(%o6)                    moebius(n) = 0
(%i7) moebius ([11, 11 * 13, 11 * 13 * 15]);
(%o7)                      [- 1, 1, 1]
(%i8) moebius (matrix ([11, 12], [13, 14]));
                           [ - 1  0 ]
(%o8)                      [        ]
                           [ - 1  1 ]
(%i9) moebius ({21, 22, 23, 24});
(%o9)                      {- 1, 0, 1}

Categories:  Integers

関数: multinomial_coeff  
    multinomial_coeff (a_1, ..., a_n)  
    multinomial_coeff ()

多項係数を返します。

a_kそれぞれが非負の整数の時、 多項係数は、 a_1 + ... + a_n個の別々のオブジェクトを k番目の枠の中に a_kの要素を持つ n個の枠に置く方法の数を与えます。

一般に、 multinomial_coeff (a_1, ..., a_n)(a_1 + ... + a_n)!/(a_1! ... a_n!)と同値です。

multinomial_coeff() (引数なし)は 1に評価されます。

minfactorialmultinomial_coeffが返す値を整理することができます。

例:

 
(%i1) multinomial_coeff (1, 2, x);
                            (x + 3)!
(%o1)                       --------
                              2 x!
(%i2) minfactorial (%);
                     (x + 1) (x + 2) (x + 3)
(%o2)                -----------------------
                                2
(%i3) multinomial_coeff (-6, 2);
                             (- 4)!
(%o3)                       --------
                            2 (- 6)!
(%i4) minfactorial (%);
(%o4)                          10

Categories:  Integers

関数: num_distinct_partitions  
    num_distinct_partitions (n)  
    num_distinct_partitions (n, list)

nが非負の整数の時、 nの異なる整数分割の数を返します。 そうでないなら num_distinct_partitionsは名詞形を返します。

num_distinct_partitions(n, list)は、 1, 2, 3, ..., nの異なる分割の数のリストを返します。

nの異なる分割は、 n = k_1 + ... + k_mとなるような 異なる正の整数 k_1, ..., k_mのリストです。

例:

 
(%i1) num_distinct_partitions (12);
(%o1)                          15
(%i2) num_distinct_partitions (12, list);
(%o2)      [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15]
(%i3) num_distinct_partitions (n);
(%o3)              num_distinct_partitions(n)

Categories:  Integers

関数: num_partitions  
    num_partitions (n)  
    num_partitions (n, list)

nが非負の整数の時、 nの整数分割の数を返します。 そうでないなら num_partitionsは名詞式を返します。

num_partitions(n, list)は、 1, 2, 3, ..., nの整数分割の数のリストを返します。

非負の整数 nに対して、 num_partitions(n)cardinality(integer_partitions(n))と等しいです; しかしながら、 num_partitionsは 分割の集合を実際には構成しないのではるかに速いです。

例:

 
(%i1) num_partitions (5) = cardinality (integer_partitions (5));
(%o1)                         7 = 7
(%i2) num_partitions (8, list);
(%o2)            [1, 1, 2, 3, 5, 7, 11, 15, 22]
(%i3) num_partitions (n);
(%o3)                   num_partitions(n)

Categories:  Integers

関数: partition_set (a, f)

集合 aを述語論理 fに従って分割します。

partition_setは2つの集合のリストを返します。 最初の集合は ffalseに評価される aの要素から成り、 二番目は aの他の要素すべてから成ります。 partition_setisfの戻り値に適用しません。

もし aが集合リテラルなら partition_setは文句を言います。

subsetも参照してください。

例:

 
(%i1) partition_set ({2, 7, 1, 8, 2, 8}, evenp);
(%o1)                   [{1, 7}, {2, 8}]
(%i2) partition_set ({x, rat(y), rat(y) + z, 1},
                     lambda ([x], ratp(x)));
(%o2)/R/              [{1, x}, {y, y + z}]

Categories:  Sets

関数: permutations (a)

リストまたは集合 aの要素の異なる順列すべての集合を返します。 順列それぞれは集合でなくリストです。

aがリストの時、 aの重複した要素が順列の中に含まれます。

もし aがリストリテラルや集合リテラルでないなら、 permutationsは文句を言います。

random_permutationも参照してください。

例:

 
(%i1) permutations ([a, a]);
(%o1)                       {[a, a]}
(%i2) permutations ([a, a, b]);
(%o2)           {[a, a, b], [a, b, a], [b, a, a]}

Categories:  Sets · Lists

関数: powerset  
    powerset (a)  
    powerset (a, n)

aの部分集合すべての集合、またはその集合の部分集合を返します。

powerset(a)は 集合 aの部分集合すべての集合を返します。 powerset(a)2^cardinality(a)個の要素を持ちます。

powerset(a, n)は、 濃度 nを持つ aの部分集合すべての集合を返します。

もし aが集合リテラルでないか nが非負の整数でないなら、 powersetは文句を言います。

例:

 
(%i1) powerset ({a, b, c});
(%o1) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}}
(%i2) powerset ({w, x, y, z}, 4);
(%o2)                    {{w, x, y, z}}
(%i3) powerset ({w, x, y, z}, 3);
(%o3)     {{w, x, y}, {w, x, z}, {w, y, z}, {x, y, z}}
(%i4) powerset ({w, x, y, z}, 2);
(%o4)   {{w, x}, {w, y}, {w, z}, {x, y}, {x, z}, {y, z}}
(%i5) powerset ({w, x, y, z}, 1);
(%o5)                 {{w}, {x}, {y}, {z}}
(%i6) powerset ({w, x, y, z}, 0);
(%o6)                         {{}}

Categories:  Sets

関数: random_permutation (a)

クヌースのシャッフルアルゴリズムで構成されるような、 集合またはリスト aのランダムな順列を返します。

戻り値は、たとえ要素すべてが偶然同じでも引数とは別の新しいリストです。 しかしながら引数の要素はコピーされません。

例:

 
(%i1) random_permutation ([a, b, c, 1, 2, 3]);
(%o1)                  [c, 1, 2, 3, a, b]
(%i2) random_permutation ([a, b, c, 1, 2, 3]);
(%o2)                  [b, 3, 1, c, a, 2]
(%i3) random_permutation ({x + 1, y + 2, z + 3});
(%o3)                 [y + 2, z + 3, x + 1]
(%i4) random_permutation ({x + 1, y + 2, z + 3});
(%o4)                 [x + 1, y + 2, z + 3]

Categories:  Sets · Lists

関数: setdifference (a, b)

集合 aの中にあり、集合 bにない要素を含む集合を返します。

もし abが集合リテラルでないなら、 setdifferenceは文句を言います。

例:

 
(%i1) S_1 : {a, b, c, x, y, z};
(%o1)                  {a, b, c, x, y, z}
(%i2) S_2 : {aa, bb, c, x, y, zz};
(%o2)                 {aa, bb, c, x, y, zz}
(%i3) setdifference (S_1, S_2);
(%o3)                       {a, b, z}
(%i4) setdifference (S_2, S_1);
(%o4)                     {aa, bb, zz}
(%i5) setdifference (S_1, S_1);
(%o5)                          {}
(%i6) setdifference (S_1, {});
(%o6)                  {a, b, c, x, y, z}
(%i7) setdifference ({}, S_1);
(%o7)                          {}

Categories:  Sets

関数: setequalp (a, b)

集合 abが同じ要素数を持ち、 listifyが決定した順序で考えて aの要素の中の xbの要素の中の yに対して is(x = y)trueなら、 trueを返します。 そうでないなら setequalpfalseを返します。

例:

 
(%i1) setequalp ({1, 2, 3}, {1, 2, 3});
(%o1)                         true
(%i2) setequalp ({a, b, c}, {1, 2, 3});
(%o2)                         false
(%i3) setequalp ({x^2 - y^2}, {(x + y) * (x - y)});
(%o3)                         false

Categories:  Sets · Predicate functions

関数: setify (a)

リスト aの要素から集合を構成します。 リスト aの重複した要素は削除され、 要素は述語論理 orderlesspに従って並び替えられます。

もし aが集合リテラルでないなら、 setifyは文句を言います。

例:

 
(%i1) setify ([1, 2, 3, a, b, c]);
(%o1)                  {1, 2, 3, a, b, c}
(%i2) setify ([a, b, c, a, b, c]);
(%o2)                       {a, b, c}
(%i3) setify ([7, 13, 11, 1, 3, 9, 5]);
(%o3)                {1, 3, 5, 7, 9, 11, 13}

Categories:  Lists

関数: setp (a)

aが Maximaの集合の時だけ trueを返します。

setpは、 整理された集合はもちろん、未整理の集合(すなわち、冗長な元を持つ集合)に対して、 trueを返します。

setpは Maxima関数 setp(a) := not atom(a) and op(a) = 'set と同値です。

例:

 
(%i1) simp : false;
(%o1)                         false
(%i2) {a, a, a};
(%o2)                       {a, a, a}
(%i3) setp (%);
(%o3)                         true

Categories:  Sets · Predicate functions

関数: set_partitions  
    set_partitions (a)  
    set_partitions (a, n)

aの分割すべての集合、またはその集合の部分集合を返します。

set_partitions(a, n)n個の空でない交わらない部分集合への aの分解すべての集合を返します。

set_partitions(a)は分割すべての集合を返します。

stirling2は集合の分割の集合の濃度を返します。

集合の集合P

  1. Pの要素それぞれが空でない集合
  2. Pの別の要素が交わらない
  3. Pの要素の和集合が Sに等しい

時、 集合 Sの分割です。

例:

条件 1と 2が空ゆえに真なので、空集合はそれ自身の分割です。

 
(%i1) set_partitions ({});
(%o1)                         {{}}

集合の分割の集合の濃度は stirling2を使って見つけられます。

 
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) cardinality(p) = stirling2 (6, 3);
(%o3)                        90 = 90

pの要素それぞれは n = 3個の要素を持たなければいけません; チェックしましょう。

 
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) map (cardinality, p);
(%o3)                          {3}

最後に、 pの要素それぞれに対して、 元の和集合は sに等しくなければいけません; チェックしましょう。

 
(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$
(%i3) map (lambda ([x], apply (union, listify (x))), p);
(%o3)                 {{0, 1, 2, 3, 4, 5}}

Categories:  Sets

関数: some  
    some (f, a)  
    some (f, L_1, ..., L_n)

もし与えられた引数のうち1つ以上で述語論理 ftrueなら trueを返します。

二番目の引数として集合1つが与えられたとして、 もし sの中の1つ以上の a_iに対して is(f(a_i))trueを返すなら、 some(f, s)trueを返します。 somesの中の a_iすべてに対して fを評価するかどうかわかりません。 集合は順序がないので、 someは任意の順序で f(a_i)評価するかもしれません。

引数として 1つ以上のリストが与えられたとして、 もし L_1, ..., L_nそれぞれの中の1つ以上の x_1, ..., x_nis(f(x_1, ..., x_n))trueを返すなら、 some(f, L_1, ..., L_n)trueを返します。 someはいくつかの組み合わせ x_1, ..., x_nに対して fを評価するかどうかわかりません。 someはインデックスを増加する順序でリストを評価します。

引数として空集合 {}か空のリスト []が与えられる場合、 somefalseを返します。

グローバルフラグ maperrortrueの時、 すべてのリスト L_1, ..., L_nは同じ長さを持たなければいけません。 maperrorfalseの時、 リスト引数は最短のリストの長さに効果的に切り詰められます。

(isを介して) truefalse以外の何かに評価される 述語論理 fの戻り値は、 グローバルフラグ prederrorが決定します。 prederrortrueの時、 そんな値は falseとして扱われます。 prederrorfalseの時、 そんな値は unknownとして扱われます。

例:

集合1つに適用された some。 述語論理は引数1つの関数です。

 
(%i1) some (integerp, {1, 2, 3, 4, 5, 6});
(%o1)                         true
(%i2) some (atom, {1, 2, sin(3), 4, 5 + y, 6});
(%o2)                         true

2つのリストに適用された some。 述語論理は引数2つの関数です。

 
(%i1) some ("=", [a, b, c], [a, b, c]);
(%o1)                         true
(%i2) some ("#", [a, b, c], [a, b, c]);
(%o2)                         false

truefalse以外の何かに評価される述語論理 fの戻り値は、グローバルフラグ prederrorが決定します。

 
(%i1) prederror : false;
(%o1)                         false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z],
           [x^2, y^2, z^2]);
(%o2)              [unknown, unknown, unknown]
(%i3) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)                        unknown
(%i4) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o4)                         true
(%i5) prederror : true;
(%o5)                         true
(%i6) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o6)                         false
(%i7) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o7)                         true

Categories:  Sets · Lists

関数: stirling1 (n, m)

第一種のスターリング数を表します。

nmが非負の整数の時、 stirling1 (n, m)の大きさは m個の巡回置換を持つ n個の元を持つ集合の順列の数です。

stirling1は整理関数です。 Maximaは以下の恒等式を知っています:

  1. stirling1(1,k) = kron_delta(1,k), k >= 0,(see http://dlmf.nist.gov/26.8.E2)
  2. stirling1(n,n) = 1, n >= 0 (see http://dlmf.nist.gov/26.8.E1)
  3. stirling1(n,n-1) = -binomial(n,2), n >= 1, (see http://dlmf.nist.gov/26.8.E16)
  4. stirling1(n,0) = kron_delta(n,0), n >=0 (see http://dlmf.nist.gov/26.8.E14 and http://dlmf.nist.gov/26.8.E1)
  5. stirling1(n,1) =(-1)^(n-1) (n-1)!, n >= 1 (see http://dlmf.nist.gov/26.8.E14)
  6. stirling1(n,k) = 0, n >= 0 and k > n.

これらの恒等式は 引数が、整数リテラルまたは整数と宣言されたシンボルで、かつ、 最初の引数が非負の時、 適用されます。 stirling1は、非整数引数に対して整理しません。

例:

 
(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling1 (n, n);
(%o3)                           1

Categories:  Integers

関数: stirling2 (n, m)

第二種スターリング数を表します。

nmが非負の整数の時、 stirling2 (n, m)は、 濃度 nの集合が m個のばらばらの部分集合に分割できる方法の数です。

stirling2は整理関数です。 Maximaは以下の恒等式を知っています。

  1. stirling2(n,0) = 1, n >= 1 (see http://dlmf.nist.gov/26.8.E17 and stirling2(0,0) = 1)
  2. stirling2(n,n) = 1, n >= 0, (see http://dlmf.nist.gov/26.8.E4)
  3. stirling2(n,1) = 1, n >= 1, (see http://dlmf.nist.gov/26.8.E17 and stirling2(0,1) = 0)
  4. stirling2(n,2) = 2^(n-1) -1, n >= 1, (see http://dlmf.nist.gov/26.8.E17)
  5. stirling2(n,n-1) = binomial(n,2), n>= 1 (see http://dlmf.nist.gov/26.8.E16)
  6. stirling2(n,k) = 0, n >= 0 and k > n.

引数が整数リテラルまたは整数と宣言されたシンボルで、かつ、最初の引数が非負の時、 これらの恒等式が適用されます。 stirling2は非整数引数に対して整理されません。

例:

 
(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling2 (n, n);
(%o3)                           1

stirling2は非整数引数に対して整理されません。

 
(%i1) stirling2 (%pi, %pi);
(%o1)                  stirling2(%pi, %pi)

Categories:  Integers

関数: subset (a, f)

述語論理 fを満たす集合 aの部分集合を返します。

subsetは、 aの要素のうち、ffalse以外の何かを返す要素の集合を返します。 subsetisfの戻り値に適用しません。

もし aが集合リテラルでないなら subsetは文句を言います。

partition_setも参照してください。

例:

 
(%i1) subset ({1, 2, x, x + y, z, x + y + z}, atom);
(%o1)                     {1, 2, x, z}
(%i2) subset ({1, 2, 7, 8, 9, 14}, evenp);
(%o2)                      {2, 8, 14}

Categories:  Sets

関数: subsetp (a, b)

集合 abの部分集合の時だけ trueを返します。

もし abのいずれかが集合リテラルでないなら、 subsetpは文句を言います。

例:

 
(%i1) subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3});
(%o1)                         true
(%i2) subsetp ({a, 1, b, 2, c, 3}, {1, 2, 3});
(%o2)                         false

Categories:  Sets · Predicate functions

関数: symmdifference (a_1, …, a_n)

集合 a_1, …, a_nの対称差を返します。

2つの引数が与えられたとして、 symmdifference ( a, b)union (setdifference ( a, b), setdifference (b, a))と同じです。

もし引数が集合リテラルでないなら、 symmdifferenceは文句を言います。

例:

 
(%i1) S_1 : {a, b, c};
(%o1)                       {a, b, c}
(%i2) S_2 : {1, b, c};
(%o2)                       {1, b, c}
(%i3) S_3 : {a, b, z};
(%o3)                       {a, b, z}
(%i4) symmdifference ();
(%o4)                          {}
(%i5) symmdifference (S_1);
(%o5)                       {a, b, c}
(%i6) symmdifference (S_1, S_2);
(%o6)                        {1, a}
(%i7) symmdifference (S_1, S_2, S_3);
(%o7)                        {1, b, z}
(%i8) symmdifference ({}, S_1, S_2, S_3);
(%o8)                        {1,b, z}

Categories:  Sets

関数: union (a_1, ..., a_n)

集合 a_1から a_nの和集合を返します。

union() (引数なし)は空集合を返します。

もし引数が集合リテラルでないなら、unionは文句を言います。

例:

 
(%i1) S_1 : {a, b, c + d, %e};
(%o1)                   {%e, a, b, d + c}
(%i2) S_2 : {%pi, %i, %e, c + d};
(%o2)                 {%e, %i, %pi, d + c}
(%i3) S_3 : {17, 29, 1729, %pi, %i};
(%o3)                {17, 29, 1729, %i, %pi}
(%i4) union ();
(%o4)                          {}
(%i5) union (S_1);
(%o5)                   {%e, a, b, d + c}
(%i6) union (S_1, S_2);
(%o6)              {%e, %i, %pi, a, b, d + c}
(%i7) union (S_1, S_2, S_3);
(%o7)       {17, 29, 1729, %e, %i, %pi, a, b, d + c}
(%i8) union ({}, S_1, S_2, S_3);
(%o8)       {17, 29, 1729, %e, %i, %pi, a, b, d + c}

Categories:  Sets


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36. Function Definition


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.1 Introduction to Function Definition


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.2 Function

Categories:  Function definition · Programming


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.2.1 Ordinary functions

Maximaの中で関数を定義するためには :=演算子を使います。 例えば、

 
f(x) := sin(x)

は関数 fを定義します。 匿名関数も lambdaを使って生成することができます。 例えば、

 
f(i,j) := block ([], ...);

なる fの代わりに

 
lambda ([i, j], ...)

を使うことができます。

 
map (lambda ([i], i+1), l)

は項目それぞれに1を加算したリストを返します。

余分な引数のリストに割り当てられる最後の引数を持つことで、引数が可変の関数も定義できます:

(訳注: 最後の引数変数を[]でくくると、残りの引数のリストがその引数変数に割り当てられます。)

 
(%i1) f ([u]) := u;
(%o1)                      f([u]) := u
(%i2) f (1, 2, 3, 4);
(%o2)                     [1, 2, 3, 4]
(%i3) f (a, b, [u]) := [a, b, u];
(%o3)               f(a, b, [u]) := [a, b, u]
(%i4) f (1, 2, 3, 4, 5, 6);
(%o4)                 [1, 2, [3, 4, 5, 6]]

関数の右辺は式です。 従って、もし一連の式が欲しいなら、

 
f(x) := (expr1, expr2, ...., exprn);

とします。 exprnの値が関数が返すものになります。

もし関数内部のある式から returnしたいなら、 blockreturnを使わなければいけません。

 
block ([], expr1, ..., if (a > 10) then return(a), ..., exprn)

はそれ自身式で、関数定義の右辺にとって代わることができます。 この際、最後の式よりも早く returnが起こるかもしれません。

ブロックの中の最初の []は、 [a: 3, b, c: []]のように変数と変数割り当てのリストを含むかもしれません。 [a: 3, b, c: []]とすると、 block内部や block内部からコールされた関数内部でコードが実行される限り、 3つの変数 a,b,cがグローバル値ではなく 特別な値を参照するようになります。 変数がブロックの開始から抜ける時間まで続くので、これは 動的バインドと呼ばれます。 一旦 blockから戻るかそこから出ると、(もし存在するなら)変数の古い値に戻されます。 この方法で変数を保護することは確かによい考えです。 ブロック変数に関する割り当ては並列に行われることに注意してください。 これは、もし先に c: aを使ったら、 ブロックにちょうど入った時、cの値は aがバインドされる前のaの値であることを意味します。 例えば、

 
block ([a: a], expr1, ... a: a+3, ..., exprn)

のような何かを実行することは、 aの外部の値を変更されないよう保護しますが、その値がなんだったかアクセス可能にします。 割り当ての右辺はバインドが起こる前に入る文脈の中で評価されます。 ただ block ([x], ...)を使うことは、ちょうどまるで新しい Maximaセッションに入ったかのように xがそれ自身を値として持つようにします。

関数の実際の引数は、ブロックの変数と厳密に同じ方法で扱われます。 例えば、

 
f(x) := (expr1, ..., exprn);

 
f(1);

では、式の評価に関して、まるで

 
block ([x: 1], expr1, ..., exprn)

を実行したかのような類似の文脈を持ちます。

定義の右辺がランタイムで計算される時、 関数内部では defineとたぶん buildqを使うことが役に立ちます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.2.2 Array functions

配列関数は、与えられた引数で初めてコールされた時、関数値を記憶し、 同じ引数が与えられた時、再計算することなしに記憶した値を返します。 そんな関数はしばしばメモ化関数と呼ばれます。

配列関数名は(グローバルリスト functionsではなく)グローバルリスト arraysに追加されます。

arrayinfoは記憶された値を持つ引数のリストを返し、 listarrayは記憶された値を返します。 dispfunfundefは配列関数の定義を返します。

arraymakeは、通常の関数に対する funmakeのように配列関数コールを構成します。 arrayapplyは、 通常の関数に対する applyのように、 配列関数をその引数に適用します。 配列関数に対して mapに厳密に似たものはありません。 map(lambda([x], a[x]), L)または makelist(a[x], x, L)Lはリストです―は、目的からそれほど遠くありませんけれども。

remarrayは、通常の関数に対する remfunctionのように (記憶された関数値も含めて、)配列関数の定義を削除します。

kill(a[x])は、配列関数 aの引数 xに関して記憶された値を削除します; 次回、引数 xaがコールされた時、関数値は再計算されます。 しかしながら、関数定義も削除する kill(a)remarray(a)を除いて、 記憶された値すべてを一度に削除する方法はありません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.3 Macros

関数: buildq (L, expr)

リスト Lで指名された変数を式 exprに並列に代入します。 exprは評価しません。 buildqが代入を実行した後、結果の式は整理はされますが評価されません。

Lの要素はシンボルまたは割り当て式 symbol: valueです。 割り当て式は並列に評価されます。 すなわち、ある変数が割り当ての右辺へバインドされるのは、 buildqがコールされた文脈でのバインドです。 変数リスト L内でその変数がバインドされるのではありません。 もし Lの中のある変数に明示的な割り当てがないなら、 buildqでのバインドは、 buildqがコールされた文脈でのそれと同じです。

そして Lで指名された変数は並列に exprに代入されます。 すなわち、すべての変数への代入は他の代入がされる前に決まります。 だから1つの変数の代入は他には一切効果を持ちません。

もし任意の変数 xexprの中で splice (x)のように現れるなら、 xはリストにバインドされなければいけませんし、 リストは代入の代わりに expr に接合(内挿)されます。

exprの中の Lに現れない任意の変数は、 たとえそれらが buildqがコールされた文脈の中でバインドを持っていても、逐語的に結果に繰り越されます。

aは明示的に xにバインドされ、 一方で bは、コールする文脈で同じバインド(すなわち29)を持ち、 cは逐語的に繰り越されます。 結果の式は、明示的な評価 ''%まで評価されません。

 
(%i1) (a: 17, b: 29, c: 1729)$
(%i2) buildq ([a: x, b], a + b + c);
(%o2)                      x + c + 29
(%i3) ''%;
(%o3)                       x + 1758

eはリストにバインドされ、 fooの引数の中でそのように現れ、 barの引数の中に内挿されます。

 
(%i1) buildq ([e: [a, b, c]], foo (x, e, y));
(%o1)                 foo(x, [a, b, c], y)
(%i2) buildq ([e: [a, b, c]], bar (x, splice (e), y));
(%o2)                  bar(x, a, b, c, y)

代入の後、結果は整理されます。 もし代入の前に整理が適用されたら、これら2つの結果は同じになったはずです。

 
(%i1) buildq ([e: [a, b, c]], splice (e) + splice (e));
(%o1)                    2 c + 2 b + 2 a
(%i2) buildq ([e: [a, b, c]], 2 * splice (e));
(%o2)                        2 a b c

Lの中の変数は並列にバインドされます; もし順次バインドされたなら、 最初の結果は foo (b, b)になったはずです。 代入は並列に実行されます; 二番目の結果を substの結果と比較してください。 substは代入を順次実行します。

 
(%i1) buildq ([a: b, b: a], foo (a, b));
(%o1)                       foo(b, a)
(%i2) buildq ([u: v, v: w, w: x, x: y, y: z, z: u],
              bar (u, v, w, x, y, z));
(%o2)                 bar(v, w, x, y, z, u)
(%i3) subst ([u=v, v=w, w=x, x=y, y=z, z=u],
             bar (u, v, w, x, y, z));
(%o3)                 bar(u, u, u, u, u, u)

変数や式が左辺に、それらの値が右辺にある等式のリストを構成します。 macroexpandshow_valuesが返す式を表示します。

 
(%i1) show_values ([L]) ::= buildq ([L], map ("=", 'L, L));
(%o1)   show_values([L]) ::= buildq([L], map("=", 'L, L))
(%i2) (a: 17, b: 29, c: 1729)$
(%i3) show_values (a, b, c - a - b);
(%o3)          [a = 17, b = 29, c - b - a = 1683]
(%i4) macroexpand (show_values (a, b, c - a - b));
(%o4)    map(=, '([a, b, c - b - a]), [a, b, c - b - a])

複数の引数を持つ関数が与えられたとして、 引数のいくつかが固定されたもう1つの関数を生成します。

 
(%i1) curry (f, [a]) :=
        buildq ([f, a], lambda ([[x]], apply (f, append (a, x))))$
(%i2) by3 : curry ("*", 3);
(%o2)        lambda([[x]], apply(*, append([3], x)))
(%i3) by3 (a + b);
(%o3)                       3 (b + a)

Categories:  Function definition

関数: macroexpand (expr)

exprがマクロ関数コールの時、 exprのマクロ展開を評価はせずに返します。 そうでないなら macroexpandexprを返します。

もし exprの展開が別のマクロ関数コールをもたらすなら、 そのマクロ関数コールも展開されます。

macroexpandは引数をクォートします。 しかしながら、もしマクロ関数コールの展開が副作用を持つなら, それらの副作用が実行されます。

::=, macros, macroexpand1も参照してください。

 
(%i1) g (x) ::= x / 99;
                                    x
(%o1)                      g(x) ::= --
                                    99
(%i2) h (x) ::= buildq ([x], g (x - a));
(%o2)            h(x) ::= buildq([x], g(x - a))
(%i3) a: 1234;
(%o3)                         1234
(%i4) macroexpand (h (y));
                              y - a
(%o4)                         -----
                               99
(%i5) h (y);
                            y - 1234
(%o5)                       --------
                               99

Categories:  Function application

関数: macroexpand1 (expr)

exprがマクロ関数コールの時、 exprのマクロ展開を評価せずに返します。 そうでないなら macroexpand1exprを返します。

macroexpandは引数をクォートします。 しかし、もしマクロ関数コールの展開が副作用を持つなら, それらの副作用が実行されます。

もし exprの展開が別のマクロ関数コールをもたらすなら、 そのマクロ関数コールは展開されません。

::=, macros, macroexpandも参照してください。

 
(%i1) g (x) ::= x / 99;
                                    x
(%o1)                      g(x) ::= --
                                    99
(%i2) h (x) ::= buildq ([x], g (x - a));
(%o2)            h(x) ::= buildq([x], g(x - a))
(%i3) a: 1234;
(%o3)                         1234
(%i4) macroexpand1 (h (y));
(%o4)                       g(y - a)
(%i5) h (y);
                            y - 1234
(%o5)                       --------
                               99

Categories:  Function application

Global variable: macros

デフォルト値: []

macrosはユーザー定義のマクロ関数のリストです。 マクロ関数定義演算子 ::=は、このリストに新しいマクロ関数を入れ、 kill, remove, remfunctionはリストからマクロ関数を削除します。

infolistsも参照してください。

関数: splice (a)

splicebuildq内部に現れた時だけ、 アトム aで指名されたリストを式に接合(内挿)します; そうでないなら spliceは未定義関数として扱われます。 もし buildq内部で a単独として (spliceなしに)現れたら、 aはリストとして、結果の中に代入されます(内挿されません)。 spliceの引数はアトムだけを取り得ます; リストリテラルやリストをもたらす式を取ることはできません。

通常、spliceは関数や演算子の引数を提供します。 関数 fに対して、 buildq内部の式 f (splice (a))は、 f (a[1], a[2], a[3], ...)に展開されます。 演算子 oに対して、 buildq内部の式 "o" (splice (a))は、 "o" (a[1], a[2], a[3], ...)に展開されます。 ここでoは、任意のタイプの演算子を取り得ます(通常は複数の引数を取るものです)。 演算子はダブルクォート "でくくられなければいけないことに注意してください。

 
(%i1) buildq ([x: [1, %pi, z - y]], foo (splice (x)) / length (x));
                       foo(1, %pi, z - y)
(%o1)                -----------------------
                     length([1, %pi, z - y])
(%i2) buildq ([x: [1, %pi]], "/" (splice (x)));
                                1
(%o2)                          ---
                               %pi
(%i3) matchfix ("<>", "<>");
(%o3)                          <>
(%i4) buildq ([x: [1, %pi, z - y]], "<>" (splice (x)));
(%o4)                   <>1, %pi, z - y<>

Categories:  Function definition


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36.4 Functions and Variables for Function Definition

関数: apply (F, [x_1, ..., x_n])

F(x_1, ..., x_n)を構成し評価します。

applyは配列関数を通常の関数と区別しようとはしません; Fが配列関数の名前の時、 applyF(...)(カギ括弧の代わりに括弧での関数コール)を評価します。 arrayapplyは、この場合、カギ括弧ありで関数コールを評価します。

funmakeargsも参照してください。

例:

applyは引数を評価します。 この例では minLの値に適用されます。

 
(%i1) L : [1, 5, -10.2, 4, 3];
(%o1)                 [1, 5, - 10.2, 4, 3]
(%i2) apply (min, L);
(%o2)                        - 10.2

applyは、たとえ関数 Fが引数をクォートする場合でも引数を評価します。

 
(%i1) F (x) := x / 1729;
                                   x
(%o1)                     F(x) := ----
                                  1729
(%i2) fname : F;
(%o2)                           F
(%i3) dispfun (F);
                                   x
(%t3)                     F(x) := ----
                                  1729

(%o3)                         [%t3]
(%i4) dispfun (fname);
fundef: no such function: fname
 -- an error. To debug this try: debugmode(true);
(%i5) apply (dispfun, [fname]);
                                   x
(%t5)                     F(x) := ----
                                  1729

(%o5)                         [%t5]

applyは関数名 Fを評価します。 シングルクオート 'は評価を無効にします。 demoivreはグローバル変数の名前であり、また関数でもあります。

 
(%i1) demoivre;
(%o1)                         false
(%i2) demoivre (exp (%i * x));
(%o2)                  %i sin(x) + cos(x)
(%i3) apply (demoivre, [exp (%i * x)]);
apply: found false where a function was expected.
 -- an error. To debug this try: debugmode(true);
(%i4) apply ('demoivre, [exp (%i * x)]);
(%o4)                  %i sin(x) + cos(x)

入れ子のリストを行列に変換する方法:

 
(%i1) a:[[1,2],[3,4]];
(%o1)                   [[1, 2], [3, 4]]
(%i2) apply(matrix,a);
                            [ 1  2 ]
(%o2)                       [      ]
                            [ 3  4 ]

Categories:  Function application

関数: block  
    block ([v_1, …, v_m], expr_1, …, expr_n)  
    block (expr_1, …, expr_n)

関数 blockは変数 v_1, …, v_mをコマンド列でローカルとすることを許可します。 もしこれらの変数が既に束縛されているなら、 ブロックの入り口で blockは(存在するなら)変数 v_1, …, v_mの現在の値を保存し、 それら自身に評価されるようにバインドを解除します; ローカル変数はブロック内では任意の値にバインドできますが、 ブロックを出た時には保存された値が復元され、ブロック内で割り当てられた値は失われます。

ローカル変数を定義する必要がなければ、 blockコマンドの頭のリストは省略できます。 この場合、もし returngoも使わないなら、 blockは以下の構成要素に似た振る舞いをします。

 
( expr_1, expr_2,... , expr_n );

expr_1, ..., expr_nが順に評価され、評価された最後の式の値を返します。 順序は go, throw, return関数で変更することができます。 returnthrowを含む式が評価されないなら、最後の式は expr_nです。

block内部の宣言 local(v_1, ..., v_m)は シンボル v_1, ..., v_mに関連付けられた性質を保存し、 他の式を評価する前に性質を取り除き、ブロック終了時に元に戻します。 いくつかの宣言は :=array, dependencies, atvalue, matchdeclare, atomgrad, constant, nonscalarその他を含むシンボルの性質として実装されます。 localの効果はブロック内部のみで有効な宣言を作ります; そうでないならブロック内部の宣言は実際にグローバル宣言となります。

blockは他の block内部でも現れます。 新しいブロックが評価されるたびにローカル変数が確立されます。 ローカル変数は内包するブロック内ではグローバルです。 ブロックの中で変数がローカルでないなら、 その値は内包するブロックによって割り当てられた最新の値です。 そうでないならグローバル環境の変数の値になります。 このポリシーは「動的スコープ」の普通の理解と一致します。

ブロックの値は、最後の文もしくはブロックから明示的に終了するのに使われる関数 returnの引数の値です。 関数 gogoの引数でタグされたブロックの文に制御を移すのに使われます。 例えば block ([x], x:1, loop, x: x+1, ..., go(loop), ...)goの引数はブロック内部に現れるタグの名前でなければなりません。 goを含んだブロック以外のブロック内部のタグへ飛ぶのに goを使うことはできません。

ブロックは、典型的な場合、関数定義の右辺に現れますが、他の場所でも使うことができます。

returngoも参照してください。

Categories:  Expressions · Programming

関数: break (expr_1, ..., expr_n)

expr_1, ..., expr_nを評価し、印字し、 それからユーザーが環境を検査し変更できるところで Maximaブレイクを引き起こします。 exit;とタイプすると計算を再開します。

Categories:  Debugging

関数: catch (expr_1, ..., expr_n)

expr_1, ..., expr_nを1つずつ評価します; もしどれかが形式 throw (arg)の式の評価に至るなら、 catchの値は throw (arg)の値であり、もう式は評価されません。 ここ「非局所的リターン」は入れ子の任意の深さを通過して、 throwを含む最も近い catchに飛びます。 もし throwを含む catchがないなら、 エラーメッセージが印字されます。

もし引数の評価がいかなる throwの評価にも至らないなら、 catchの値は expr_nの値です。

 
(%i1) lambda ([x], if x < 0 then throw(x) else f(x))$
(%i2) g(l) := catch (map (''%, l))$
(%i3) g ([1, 2, 3, 7]);
(%o3)               [f(1), f(2), f(3), f(7)]
(%i4) g ([1, 2, -3, 7]);
(%o4)                          - 3

もし lが非負数だけから成るなら、 lの要素それぞれの fのリストを返します; そうでないなら glの最初の負の要素を「キャッチ」して、それを「スロー」します。

Categories:  Programming

関数: compfile  
    compfile (filename, f_1, …, f_n)  
    compfile (filename, functions)  
    compfile (filename, all)

Maxima関数を Lispに翻訳し、翻訳したコードをファイル filenameに書き込みます。

compfile(filename, f_1, ..., f_n)は 指定された関数を翻訳します。 compfile (filename, functions)compfile (filename, all)はユーザー定義関数をすべて翻訳します。

Lisp翻訳は評価されず、出力ファイルは Lispコンパイラによって処理もされません。 translateは Lisp翻訳を生成し評価します。 compile_fileは Maximaを Lispに翻訳し、 Lispコンパイラを実行します。

translate, translate_file, compile_fileも参照してください。

関数: compile  
    compile (f_1, …, f_n)  
    compile (functions)  
    compile (all)

Maxima関数 f_1, ..., f_nを Lispに翻訳し、 Lisp翻訳を評価し、翻訳された関数それぞれについて Lisp関数 COMPILEをコールします。 compileはコンパイルされた関数名のリストを返します。

compile (all)compile (functions)はユーザー定義関数すべてをコンパイルします。

compileは引数をクォートします; クォートクォート演算子 ''はクォートに優先します。

関数をネイティブコードにコンパイルすることはスピードの大きな向上に向いていて、 メモリ利用量を劇的に減らす要因となるかもしれません。 提供する必要がある融通性が限られている時コードは特に有効となる傾向があります。 コンパイルが必要とするスピードを提供しないなら、 コードの機能を限定する2,3の方法に以下のものがあります:

関数: define  
    define (f(x_1, …, x_n), expr)  
    define (f[x_1, …, x_n], expr)  
    define (f[x_1, …, x_n](y_1, …, y_m), expr)  
    define (funmake (f, [x_1, …, x_n]), expr)  
    define (arraymake (f, [x_1, …, x_n]), expr)  
    define (ev (expr_1), expr_2)

引数 x_1, …, x_nを持ち、 exprの中身を持つ fという名前の関数を定義します。 defineは(明示的にクオートされていない限り)いつも2番目の引数を評価します。 定義された関数は(かっこでくくられた引数を持つ)通常の Maxima関数か(カギ括弧でくくられた引数を持つ)配列関数です。

最後の関数の引数 x_nが要素1つのリストの時、 defineによって定義される関数は可変な数の引数を受け付けます。 実際の引数は、形式的な引数 x_1, ..., x_(n - 1)に1対1に割り当てられます。 実際の引数がさらに存在するなら x_nにリストとして割り当てられます。

defineの最初の引数が f(x_1, ..., x_n)f[x_1, ..., x_n]の形の式の時、 関数の引数は評価されますが、既にその名前の関数や変数があったとしても fは評価されません。

最初の引数が演算子 funmakearraymake, evを伴う式の時、 最初の引数は評価されます;これは、本体だけでなく、関数名が計算されることを許します。

すべての関数定義は同じ名前空間で現れます; 関数 gの中で関数 fを定義することは、 fのスコープをgに自動的に限定することにはなりません。 しかし、 local(f)は関数 fの定義を localが現れたブロックや他の合成式内部でのみ有効とします。

もしある形式的な引数 x_kが(評価の後)クォートされたシンボルなら、 defineによって定義される関数は対応する実際の引数を評価しません。 そうでないならすべての実際の引数は評価されます。

:=::=も参照してください。

例:

defineは(明示的にクォートされない限り)いつも二番目の引数を評価します。

 
(%i1) expr : cos(y) - sin(x);
(%o1)                    cos(y) - sin(x)
(%i2) define (F1 (x, y), expr);
(%o2)              F1(x, y) := cos(y) - sin(x)
(%i3) F1 (a, b);
(%o3)                    cos(b) - sin(a)
(%i4) F2 (x, y) := expr;
(%o4)                   F2(x, y) := expr
(%i5) F2 (a, b);
(%o5)                    cos(y) - sin(x)

defineが定義する関数は通常の Maxima関数も配列関数も取り得ます。

 
(%i1) define (G1 (x, y), x.y - y.x);
(%o1)               G1(x, y) := x . y - y . x
(%i2) define (G2 [x, y], x.y - y.x);
(%o2)                G2     := x . y - y . x
                       x, y

最後の引数か唯一の引数 x_nが1要素のリストの時、 defineが定義した関数は可変の数の引数を受け付けます。

 
(%i1) define (H ([L]), '(apply ("+", L)));
(%o1)                H([L]) := apply("+", L)
(%i2) H (a, b, c);
(%o2)                       c + b + a

最初の引数が演算子 funmakeか, arraymake, evを含む式なら最初の引数は評価されます。

 
(%i1) [F : I, u : x];
(%o1)                        [I, x]
(%i2) funmake (F, [u]);
(%o2)                         I(x)
(%i3) define (funmake (F, [u]), cos(u) + 1);
(%o3)                  I(x) := cos(x) + 1
(%i4) define (arraymake (F, [u]), cos(u) + 1);
(%o4)                   I  := cos(x) + 1
                         x
(%i5) define (foo (x, y), bar (y, x));
(%o5)                foo(x, y) := bar(y, x)
(%i6) define (ev (foo (x, y)), sin(x) - cos(y));
(%o6)             bar(y, x) := sin(x) - cos(y)

Categories:  Function definition

関数: define_variable (name, default_value, mode)

グローバル変数を Maxima環境に導入します。 define_variableはユーザーが書いたパッケージで役に立ちます。 パッケージはしばしば翻訳されたりコンパイルされたりします。

define_variableは以下のステップを実行します:

  1. mode_declare (name, mode)nameのモードを翻訳器に宣言します。 可能なモードのリストについては mode_declareを参照してください。
  2. もし変数がバインドされていないなら default_valuenameに割り当てられます。
  3. nameが宣言されたモードのただ1つの割り当てられた値であることを保証するために、 nameをテスト関数に関連づけます。

value_checkプロパティは、 define_variableを介して any以外のモードに定義された任意の変数に割り当てることができます。 value_checkプロパティは1変数のラムダ式または関数名です。 それは値を変数に割り当てようとする時にコールされます。 value_check関数の引数は期待値です。

define_variabledefault_valueを評価し、 namemodeをクォートします。 define_variablenameの現在値を返します。 それは、もし nameがそこでバインドされてないなら default_valueで、 そうでないなら nameの以前の値です。

例:

fooはブーリアン変数で、初期値 trueを持ちます。

 
(%i1) define_variable (foo, true, boolean);
(%o1)                         true
(%i2) foo;
(%o2)                         true
(%i3) foo: false;
(%o3)                         false
(%i4) foo: %pi;
translator: foo was declared with mode boolean
                                          , but it has value: %pi
 -- an error. To debug this try: debugmode(true);
(%i5) foo;
(%o5)                         false

barは整数変数で、素数でなければいけません。

 
(%i1) define_variable (bar, 2, integer);
(%o1)                           2
(%i2) qput (bar, prime_test, value_check);
(%o2)                      prime_test
(%i3) prime_test (y) := if not primep(y) then
                           error (y, "is not prime.");
(%o3) prime_test(y) := if not primep(y)
                                   then error(y, "is not prime.")
(%i4) bar: 1439;
(%o4)                         1439
(%i5) bar: 1440;
1440 is not prime.
 -- an error. To debug this try: debugmode(true);
(%i6) bar;
(%o6)                         1439

baz_quuxは値を割り当てられない変数です。 モード any_checkanyのようですが、 any_checkvalue_checkメカニズムを可能にしますが、 anyはそうしません。

 
(%i1) define_variable (baz_quux, 'baz_quux, any_check);
(%o1)                       baz_quux
(%i2) F: lambda ([y], if y # 'baz_quux then
                 error ("Cannot assign to `baz_quux'."));
(%o2) lambda([y], if y # 'baz_quux
                        then error(Cannot assign to `baz_quux'.))
(%i3) qput (baz_quux, ''F, value_check);
(%o3) lambda([y], if y # 'baz_quux
                        then error(Cannot assign to `baz_quux'.))
(%i4) baz_quux: 'baz_quux;
(%o4)                       baz_quux
(%i5) baz_quux: sqrt(2);
Cannot assign to `baz_quux'.
 -- an error. To debug this try: debugmode(true);
(%i6) baz_quux;
(%o6)                       baz_quux

関数: dispfun  
    dispfun (f_1, …, f_n)  
    dispfun (all)

ユーザー定義関数 f_1, ..., f_nの定義を表示します。 引数それぞれは、 (::=で定義された)マクロ名、 (:=defineで定義された)通常の関数、 (:=defineで定義された、しかし引数をカギ括弧 [ ]でくくった)配列関数、 (:=defineで定義された、しかしいくつかの引数をカギ括弧 [ ]で、他の引数を括弧 ( )でくくった)添字付き関数、 特別な添字の値で選択された添字付き関数の族の1つ、定数添字で定義された添字付き関数、 のいずれかを取り得ます。

dispfun (all)は、リスト functions, arrays, macrosで与えられるようなユーザー定義関数すべてを表示します。 定数添字で定義された添字付き関数は除きます。

dispfunは表示された関数それぞれのために (%t1, %t2, など) 中間式ラベルを生成し、関数定義をラベルに割り当てます。 対照的に fundefは関数定義を返します。

dispfunは引数をクォートします; クォートクォート演算子 ''はクォートに優先します。 dispfunは表示された関数に対応する中間式ラベルのリストを返します。

例:

 
(%i1) m(x, y) ::= x^(-y);
                                     - y
(%o1)                   m(x, y) ::= x
(%i2) f(x, y) :=  x^(-y);
                                     - y
(%o2)                    f(x, y) := x
(%i3) g[x, y] :=  x^(-y);
                                    - y
(%o3)                     g     := x
                           x, y
(%i4) h[x](y) :=  x^(-y);
                                    - y
(%o4)                     h (y) := x
                           x
(%i5) i[8](y) :=  8^(-y);
                                    - y
(%o5)                     i (y) := 8
                           8
(%i6) dispfun (m, f, g, h, h[5], h[10], i[8]);
                                     - y
(%t6)                   m(x, y) ::= x

                                     - y
(%t7)                    f(x, y) := x

                                    - y
(%t8)                     g     := x
                           x, y

                                    - y
(%t9)                     h (y) := x
                           x

                                    1
(%t10)                     h (y) := --
                            5        y
                                    5

                                     1
(%t11)                    h  (y) := ---
                           10         y
                                    10

                                    - y
(%t12)                    i (y) := 8
                           8

(%o12)       [%t6, %t7, %t8, %t9, %t10, %t11, %t12]
(%i13) ''%;
                     - y              - y            - y
(%o13) [m(x, y) ::= x   , f(x, y) := x   , g     := x   ,
                                            x, y
                  - y           1              1             - y
        h (y) := x   , h (y) := --, h  (y) := ---, i (y) := 8   ]
         x              5        y   10         y   8
                                5             10

関数: fullmap (f, expr_1, …)

mapと似ていますが、 fullmapは主演算子が同じでなくなるまで部分式すべてに再帰的にマッピングを続けます。

fullmapはある行列操作のための整理に使われています; このように、 Maximaは時々、たとえ ユーザーが 明示的に fullmapをコールしなくても、 fullmapに関係したエラーメッセージを生成します。

例:

 
(%i1) a + b * c;
(%o1)                        b c + a
(%i2) fullmap (g, %);
(%o2)                   g(b) g(c) + g(a)
(%i3) map (g, %th(2));
(%o3)                     g(b c) + g(a)

Categories:  Function application · Expressions

関数: fullmapl (f, list_1, …)

fullmapに似ていますが、 fullmaplはリストや行列にのみマップします。

例:

 
(%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
(%o1)                [[a + 3, 4], [4, 3.5]]

Categories:  Function application · Expressions

システム変数: functions

デフォルト値: []

functionsは現在のセッションでの通常の Maxima関数のリストです。 通常の関数は define:=で構成された関数であり、 括弧 ()を使ってコールされます。 関数は Maximaプロンプトで定義することができ、また、 loadbatchがロードする Maximaファイルの中で定義することができます。

(例えば F[x]のように、カギ括弧でコールされる)配列関数と (例えば F[x](y)のように、カギ括弧と括弧でコールされる)添字付き関数は、 functionsではなくグローバル変数 arraysにリストされます。

Lisp関数はどのリストにも保持されません。

例:

 
(%i1) F_1 (x) := x - 100;
(%o1)                   F_1(x) := x - 100
(%i2) F_2 (x, y) := x / y;
                                      x
(%o2)                    F_2(x, y) := -
                                      y
(%i3) define (F_3 (x), sqrt (x));
(%o3)                   F_3(x) := sqrt(x)
(%i4) G_1 [x] := x - 100;
(%o4)                    G_1  := x - 100
                            x
(%i5) G_2 [x, y] := x / y;
                                     x
(%o5)                     G_2     := -
                             x, y    y
(%i6) define (G_3 [x], sqrt (x));
(%o6)                    G_3  := sqrt(x)
                            x
(%i7) H_1 [x] (y) := x^y;
                                      y
(%o7)                     H_1 (y) := x
                             x
(%i8) functions;
(%o8)              [F_1(x), F_2(x, y), F_3(x)]
(%i9) arrays;
(%o9)                 [G_1, G_2, G_3, H_1]

関数: fundef (f)

関数 fの定義を返します。

引数には以下のものがあります。

fundefは引数をクォートします; クォートクォート演算子 ''はクォートに優先します。

fundef (f)fの定義を返します。 対照的に、 dispfun (f)は中間式ラベルを生成し、ラベルに定義を割り当てます。

Categories:  Function definition

関数: funmake (F, [arg_1, …, arg_n])

F(arg_1, ..., arg_n)を返します。 戻り値は整理されますが、評価されません。 だから関数 Fはたとえ存在してもコールされません。

funmakeは配列関数と通常の関数を区別しようとしません; Fが配列関数名の時、 funmakeF(...)を返します (すなわち、カギ括弧の代わりに括弧での関数コール)。 arraymakeは、この場合,カギ括弧での関数コールを返します。

funmakeは引数を評価します。

applyargsも参照してください。

例:

通常の Maxima関数に適用された funmake

 
(%i1) F (x, y) := y^2 - x^2;
                                   2    2
(%o1)                  F(x, y) := y  - x
(%i2) funmake (F, [a + 1, b + 1]);
(%o2)                    F(a + 1, b + 1)
(%i3) ''%;
                              2          2
(%o3)                  (b + 1)  - (a + 1)

マクロに適用された funmake

 
(%i1) G (x) ::= (x - 1)/2;
                                  x - 1
(%o1)                    G(x) ::= -----
                                    2
(%i2) funmake (G, [u]);
(%o2)                         G(u)
(%i3) ''%;
                              u - 1
(%o3)                         -----
                                2

添字付き関数に適用された funmake

 
(%i1) H [a] (x) := (x - 1)^a;
                                        a
(%o1)                   H (x) := (x - 1)
                         a
(%i2) funmake (H [n], [%e]);
                                       n
(%o2)               lambda([x], (x - 1) )(%e)
(%i3) ''%;
                                    n
(%o3)                       (%e - 1)
(%i4) funmake ('(H [n]), [%e]);
(%o4)                        H (%e)
                              n
(%i5) ''%;
                                    n
(%o5)                       (%e - 1)

いかなる種類の関数にも定義されていないシンボルへ適用された funmake

 
(%i1) funmake (A, [u]);
(%o1)                         A(u)
(%i2) ''%;
(%o2)                         A(u)

funmakeは引数を評価しますが、戻り値を評価しません。

 
(%i1) det(a,b,c) := b^2 -4*a*c;
                                    2
(%o1)              det(a, b, c) := b  - 4 a c
(%i2) (x : 8, y : 10, z : 12);
(%o2)                          12
(%i3) f : det;
(%o3)                          det
(%i4) funmake (f, [x, y, z]);
(%o4)                    det(8, 10, 12)
(%i5) ''%;
(%o5)                         - 284

Maximaは funmakeの戻り値を整理します。

 
(%i1) funmake (sin, [%pi / 2]);
(%o1)                           1

Categories:  Function application · Expressions

関数: lambda  
    lambda ([x_1, …, x_m], expr_1, …, expr_n)  
    lambda ([[L]], expr_1, …, expr_n)  
    lambda ([x_1, …, x_m, [L]], expr_1, …, expr_n)

ラムダ式 (すなわち、匿名関数)を定義し返します。 関数は要求された引数 x_1, ..., x_mを持ち、 また、オプション引数 Lを持つかもしれません。 オプション引数は関数本体の中にリストとして現れます。 関数の戻り値は expr_nです。 ラムダ式は変数に割り当てることができ、通常の関数のように評価できます。 ラムダ式は関数名が期待されるいくつかのコンテキストで現れるかもしれません。

関数が評価される時、 バインドされていないローカル変数 x_1, ..., x_mを生成します。 lambdablockの中や別の lambdaの中で現れるかもしれません; ローカル変数は、別の blocklambdaが評価される度に毎回確立されます。 ローカル変数は内包する blocklambdaにはグローバルのように見えます。 もし変数がローカルでないなら、 その値は、(もし割り当てられたなら)内包する blocklambdaで直近に割り当てられた値です。 そうでないなら、グローバル環境での変数の値です。 このポリシーは「動的スコープ」の普通の理解と一致するかもしれません。

ローカル変数が確立された後、 expr_1から expr_nまでが順に評価されます。 特殊変数 %%―直前の式の値を表します―が認識されます。 throwcatchも式のリストの中に現れるかもしれません。

blockで囲まれない限り returnはラムダ式の中には現れません。 blockで囲まれた場合、 ブロックがたまたま expr_nに至るということでない限り、 returnはラムダ式の戻り値ではなくブロックの戻り値を定義します。 同様に、goblockで囲まれない限りラムダ式の中に現れません。

lambdaは引数をクォートします; クォートクォート演算子 ''はクォートに優先します。

例:

 
(%i1) f: lambda ([x], x^2);
                                      2
(%o1)                    lambda([x], x )
(%i2) f(a);
                                2
(%o2)                          a
 
(%i1) lambda ([x], x^2) (a);
                                2
(%o1)                          a
(%i2) apply (lambda ([x], x^2), [a]);
                                2
(%o2)                          a
(%i3) map (lambda ([x], x^2), [a, b, c, d, e]);
                        2   2   2   2   2
(%o3)                 [a , b , c , d , e ]
 
(%i1) a: %pi$
(%i2) b: %e$
(%i3) g: lambda ([a], a*b);
(%o3)                   lambda([a], a b)
(%i4) b: %gamma$
(%i5) g(1/2);
                             %gamma
(%o5)                        ------
                               2
(%i6) g2: lambda ([a], a*''b);
(%o6)                 lambda([a], a %gamma)
(%i7) b: %e$
(%i8) g2(1/2);
                             %gamma
(%o8)                        ------
                               2
 
(%i1) h: lambda ([a, b], h2: lambda ([a], a*b), h2(1/2));
                                                   1
(%o1)     lambda([a, b], h2 : lambda([a], a b), h2(-))
                                                   2
(%i2) h(%pi, %gamma);
                             %gamma
(%o2)                        ------
                               2
 
(%i1) i: lambda ([a], lambda ([x], a*x));
(%o1)             lambda([a], lambda([x], a x))
(%i2) i(1/2);
(%o2)                   lambda([x], a x)
(%i3) i2: lambda([a], buildq([a: a], lambda([x], a*x)));
(%o3)    lambda([a], buildq([a : a], lambda([x], a x)))
(%i4) i2(1/2);
                                    1
(%o4)                  lambda([x], (-) x)
                                    2
(%i5) i2(1/2)(%pi);
                               %pi
(%o5)                          ---
                                2
 
(%i1) f : lambda ([aa, bb, [cc]], aa * cc + bb);
(%o1)          lambda([aa, bb, [cc]], aa cc + bb)
(%i2) f (foo, %i, 17, 29, 256);
(%o2)       [17 foo + %i, 29 foo + %i, 256 foo + %i]
(%i3) g : lambda ([[aa]], apply ("+", aa));
(%o3)             lambda([[aa]], apply(+, aa))
(%i4) g (17, 29, x, y, z, %e);
(%o4)                  z + y + x + %e + 46

Categories:  Function definition

関数: local (v_1, …, v_n)

シンボル v_1, ..., v_nに関連付けられた性質を保存し、 他の式を評価する前にすべての性質を削除し、 localが現れたブロックや他の合成式の終了時に保存した性質を元に戻します。

いくつかの宣言は、:=array, dependencies, atvalue, matchdeclare, atomgrad, constant, nonscalarその他を含むシンボルの性質として実装されます。 localの効果はブロック内部のみで有効な宣言を作ります; そうでないなら ブロック内部の宣言は実際にグローバル宣言となります。

localblockや関数定義の本体や lambda式の中に現れます。 それぞれの中で1カ所だけ許されます。

localは引数をクォートします。 localdoneを返します。

例:

ローカル関数定義。

 
(%i1) foo (x) := 1 - x;
(%o1)                    foo(x) := 1 - x
(%i2) foo (100);
(%o2)                         - 99
(%i3) block (local (foo), foo (x) := 2 * x, foo (100));
(%o3)                          200
(%i4) foo (100);
(%o4)                         - 99

Categories:  Function definition · Programming

オプション変数: macroexpansion

デフォルト値: false

macroexpansionはマクロ関数コールにマクロ関数の展開(すなわち戻り値)を 代入するかどうかを制御します。 展開を記憶する代価を伴いますが、代入は続く式評価をスピードアップするかもしれません。

false

マクロ関数コールにマクロ関数の展開を代入しません。

expand

マクロ関数コールが初めて評価された時、展開を記憶します。 展開は次のコール時には再計算されません; (printやグローバル変数への割り当てのような)いかなる副作用も 最初にマクロ関数コールを評価した時だけ起こります。 式の中の展開は同じマクロ関数コールを持つ他の式に影響を与えません。

displace

マクロ関数コールを初めて評価した時、展開をコールに代入し、 マクロ関数をコールした式を変更します。 展開は次のコール時には再計算されません; (printやグローバル変数への割り当てのような)いかなる副作用も 最初にマクロ関数コールを評価した時だけ起こります。 式の中の展開は同じマクロ関数コールを持つ他の式に影響を与えません。

macroexpansionfalseの時、 コールする式を評価する度にマクロ関数をコールし、 コールする式は変更されません。

 
(%i1) f (x) := h (x) / g (x);
                                  h(x)
(%o1)                     f(x) := ----
                                  g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x),
                       return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
                                                  return(x + 99))
(%i3) h (x) ::= block (print ("x - 99 is equal to", x),
                       return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
                                                  return(x - 99))
(%i4) macroexpansion: false;
(%o4)                         false
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
                            a b - 99
(%o5)                       --------
                            a b + 99
(%i6) dispfun (f);
                                  h(x)
(%t6)                     f(x) := ----
                                  g(x)

(%o6)                         [%t6]
(%i7) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
                            a b - 99
(%o7)                       --------
                            a b + 99

macroexpansionexpandの時、 マクロ関数を一度だけコールし、 コールする式を変更しません。

 
(%i1) f (x) := h (x) / g (x);
                                  h(x)
(%o1)                     f(x) := ----
                                  g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x),
                       return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
                                                  return(x + 99))
(%i3) h (x) ::= block (print ("x - 99 is equal to", x),
                       return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
                                                  return(x - 99))
(%i4) macroexpansion: expand;
(%o4)                        expand
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
                            a b - 99
(%o5)                       --------
                            a b + 99
(%i6) dispfun (f);
                      mmacroexpanded(x - 99, h(x))
(%t6)         f(x) := ----------------------------
                      mmacroexpanded(x + 99, g(x))

(%o6)                         [%t6]
(%i7) f (a * b);
                            a b - 99
(%o7)                       --------
                            a b + 99

macroexpansiondisplaceの時、 マクロ関数を一度だけコールし、 コールする式を変更します。

 
(%i1) f (x) := h (x) / g (x);
                                  h(x)
(%o1)                     f(x) := ----
                                  g(x)
(%i2) g (x) ::= block (print ("x + 99 is equal to", x),
                       return (x + 99));
(%o2) g(x) ::= block(print("x + 99 is equal to", x),
                                                  return(x + 99))
(%i3) h (x) ::= block (print ("x - 99 is equal to", x),
                       return (x - 99));
(%o3) h(x) ::= block(print("x - 99 is equal to", x),
                                                  return(x - 99))
(%i4) macroexpansion: displace;
(%o4)                       displace
(%i5) f (a * b);
x - 99 is equal to x
x + 99 is equal to x
                            a b - 99
(%o5)                       --------
                            a b + 99
(%i6) dispfun (f);
                                 x - 99
(%t6)                    f(x) := ------
                                 x + 99

(%o6)                         [%t6]
(%i7) f (a * b);
                            a b - 99
(%o7)                       --------
                            a b + 99

オプション変数: mode_checkp

デフォルト値: true

mode_checkptrueの時、 mode_declareはバインドされた変数のモードをチェックします。

オプション変数: mode_check_errorp

デフォルト値: false

mode_check_errorptrueの時、 mode_declareはエラーをコールします。

オプション変数: mode_check_warnp

デフォルト値: true

mode_check_warnptrueの時、 モードエラーが記述されます。

関数: mode_declare (y_1, mode_1, …, y_n, mode_n)

mode_declareは、 その後の関数の翻訳やコンパイルのために変数と関数のモードを宣言するのに使われます。 mode_declareは、通常、 関数定義の始めや Maximaスクリプトの始めに置かれたり、対話プロンプトで実行されたりします。

mode_declareの引数は変数とモードから構成される対です。 モードは boolean, fixnum, number, rational, floatのいずれか1つです。 変数それぞれは同じモードを持つように宣言される変数すべてのリストも取り得ます。

もし変数が配列で、かつ、参照される配列のすべての要素が値を持つなら、

 
array(yi, dim1, dim2, ...)

よりむしろ array (yi, complete, dim1, dim2, …)を 最初に配列のバインドを宣言する時に使うべきです。 もし配列の要素すべてがモード fixnum (float)なら、 completeの代わりに fixnum (float)を使ってください。 もし配列のすべての要素が同じモード― mとしましょう―なら、 効率的な翻訳のためには、

 
mode_declare (completearray (yi), m))

を使うべきです。

配列を使う数値コードは、例えば、10 x 10の浮動小数点配列のために

 
mode_declare (completearray (a [10, 10]), float)

というように期待される配列サイズを宣言することでより速く実行されるかもしれません

引数として function (f_1, f_2, ...)を使うことで 関数の結果のモードを宣言することができます; ここで f_1, f_2, …は関数名です。 例えば、式

 
mode_declare ([function (f_1, f_2, ...)], fixnum)

f_1, f_2, ...が返す値が1ワード整数であることを宣言します。

modedeclaremode_declareと同義です。

関数: mode_identity (arg_1, arg_2)

mode_declaremacrosで、例えば flonumsのリストのリストや他の合成データオブジェクトを宣言するのに使われる特殊形式。 mode_identityの最初の引数は、 mode_declareに与えられるようなプリミティブな値モード名(すなわち、 float, fixnum, number, list, anyのいずれか)であり、 二番目の引数は評価され、 mode_identityの値として返される式です。 しかし、もし最初の引数で宣言されたモードが戻り値を許していないなら、 エラーか警告をシグナルします。 重要なことは、 Maximaによって Lisp翻訳器に命じた式のモードが、 二番目の引数のなかで続く一切から独立して最初の引数として与えられるそれだということです。 例えば、 x: 3.3; mode_identity (fixnum, x);はエラーをもたらします。 mode_identity (flonum, x)は 3.3を返します。 これは多くの使い道があります。 例えば、もし first (l)が数を返すと知っていたなら、 mode_identity (number, first (l))と書くかもしれません。 しかし、それをするもっと効率的な方法は、

 
firstnumb (x) ::= buildq ([x], mode_identity (number, first(x)));

のように新しいプリミティブを定義し、そして数のリストの最初の要素を取る度に firstnumbを使うことです。

関数: remfunction  
    remfunction (f_1, …, f_n)  
    remfunction (all)

シンボル f_1, ..., f_nの関数定義をアンバインドします。 引数は(:=defineで生成された)通常の関数名か (::=で生成された)マクロ関数をとります。

remfunction (all)は関数定義すべてをアンバインドします。

remfunctionは引数をクォートします。

remfunctionは関数定義はアンバインドされたシンボルのリストを返します。 シンボルに関数定義がないなら、シンボルの代わりに falseを返します。

remfunctionは配列関数すなわち添字付き関数には適用されません。 これらのタイプの関数には remarrayを適用します。

Categories:  Function definition

オプション変数: savedef

デフォルト値: true

savedeftrueの時、 関数が解釈される時に ユーザー関数の Maximaバージョンが保持されます。 これは、 dispfunが定義を表示することを許し、 関数を編集することを許します。

savedeffalseの時、 解釈された関数の名前は functionsリストから取り除かれます。

オプション変数: transcompile

デフォルト値: true

transcompiletrueの時、 translatetranslate_fileは 翻訳コードをコンパイルにより適したものにする宣言を生成します。

compfileは実行中 transcompile: trueを設定します。

関数: translate  
    translate (f_1, …, f_n)  
    translate (functions)  
    translate (all)

ユーザー定義関数 f_1, …, f_nを Maxima言語から Lispに翻訳し、 Lisp翻訳を評価します。 通常、翻訳された関数は元の関数より速く実行されます。

translate (all)translate (functions)はユーザー定義関数すべてを翻訳します。

翻訳される関数は、より効率的なコードを生成するために可能な時は 先頭に mode_declareコールを含むべきです。 例えば:

 
f (x_1, x_2, ...) := block ([v_1, v_2, ...],
    mode_declare (v_1, mode_1, v_2, mode_2, ...), ...)

ここで x_1, x_2, ... は関数のパラメータであり、 v_1, v_2, ...はローカル変数です。

もし savedeffalseなら(以下を参照してください) 翻訳された関数の名前は functionsリストから削除され、 propsリストに加えられます。

完全にデバッグされない限り、関数は翻訳すべきではありません。

式は整理されていると仮定されます; もしされていないなら、厳密ですが最適でないコードが生成されます。 従って、ユーザーは simpスイッチを false―翻訳される式の整理を抑制します― に設定すべきではありません。

スイッチ translateは、もし trueなら、 ユーザー関数の Lispへの自動翻訳をもたらします。

Lispと Maximaのバージョンの間である非互換性が存在する可能性があるので、 翻訳された関数は翻訳前にしたやり方と同一の動作をするわけではないことに注意してください。 原則として、もし変数のいずれかが mode_declareされた標準有理式 (CRE)なら 複数の引数を取る rat関数と ratvars関数は使うべきではありません。 また、 prederror: false設定は翻訳されません。

savedef - もし trueなら、 関数が translateされた時、 Maximaバージョンのユーザー関数を残すようにします。 これは定義を dispfunで表示することを可能にし、関数を編集することを可能にします。

transrun - もしfalseなら、 すべての関数について翻訳バージョンではなく、 インタープリトされるバージョン(まだあると仮定して)が実行されるようにします。

translateが返す結果は翻訳された関数名のリストです。

関数: translate_file  
    translate_file (maxima_filename)  
    translate_file (maxima_filename, lisp_filename)

Maximaコードのファイルを Lispコードのファイルに翻訳します。 translate_fileは3つのファイル名のリストを返します: Maximaファイル名、 Lispファイル名、翻訳についての追加情報を含むファイル名。 translate_fileは引数を評価します。

translate_file ("foo.mac"); load("foo.LISP")は、 例えば、 ''%の利用といった若干の制約を除いて、 コマンド batch ("foo.mac")と同じです。

translate_file (maxima_filename)はMaximaファイル maxima_filenameを同様に名付けらた Lispファイルに翻訳します。 例えば foo.macfoo.LISPに翻訳されます。 Maximaのファイル名はディレクトリ名を含むかもしれません。 その場合、 Lisp出力ファイルは Maxima入力ファイルと同じディレクトリに書かれます。

translate_file (maxima_filename, lisp_filename)は、 Maximaファイル maxima_filenameを Lispファイル lisp_filenameに翻訳します。 translate_fileはどんなものでも lisp_filenameのファイル名の拡張子を無視します; Lisp出力ファイルのファイル名の拡張子はいつも LISPです。 Lispファイル名はディレクトリ名を含むかもしれません。 その場合、 Lisp出力ファイルは指定されたディレクトリに書かれます。

translate_fileは 様々な度合いの厳しさの翻訳器警告メッセージのファイルも書き出します。 このファイルのファイル名拡張子は UNLISPです。 翻訳されたコードの中のバグを追跡するために、 このファイルは、あいまいかもしれませんが価値ある情報を含むかもしれません。 UNLISPファイルはいつも Maxima入力が来るのと同じディレクトリに書かれます。

translate_fileは Lispコードがコンパイルされるすぐに宣言や定義が効力を発揮するようにする Lispコードを発行します。 このトピックに関してさらに知るには compile_fileを参照してください。

tr_array_as_ref, tr_bound_function_applyp, tr_exponent, tr_file_tty_messagesp, tr_float_can_branch_complex, tr_function_call_default, tr_numer, tr_optimize_max_loop, tr_semicompile, tr_state_vars, tr_warnings_get, tr_warn_bad_function_calls, tr_warn_fexpr, tr_warn_meval, tr_warn_mode, tr_warn_undeclared, tr_warn_undefined_variable

も参照してください。

オプション変数: transrun

デフォルト値: true

transrunfalseの時、 すべての関数について、翻訳バージョンではなく、 インタープリトされるバージョン(まだあると仮定して)が実行されるようにします。

オプション変数: tr_array_as_ref

デフォルト値: true

もし translate_fast_arraysfalseなら、 translate_fileが発行する Lispコードの中の配列参照は、 tr_array_as_refに影響されます。 tr_array_as_reftrueの時、配列名は評価されます。 そうでないなら 配列名は翻訳されたコードの中で文字リテラルとして現れます。

もし translate_fast_arraystrueなら、 tr_array_as_refは効果を持ちません。

オプション変数: tr_bound_function_applyp

デフォルト値: true

tr_bound_function_applyptrueの時、 もし(関数引数のような)バインドされた変数が関数として使われていることが見つかったら Maximaは警告を与えます。 tr_bound_function_applypはそんな場合に生成されたコードに影響しません。

例えば g (f, x) := f (x+1)のような式は警告メッセージをトリガーします。

オプション変数: tr_file_tty_messagesp

デフォルト値: false

tr_file_tty_messagesptrueの時、 ファイルの翻訳中に translate_fileが生成するメッセージがコンソールに表示され、 falseの時、ファイルの翻訳に関するメッセージは UNLISPファイルに挿入されるだけです。

オプション変数: tr_float_can_branch_complex

デフォルト値: true

Maxima-to-Lisp翻訳器に関数acos, asin, asec, acscが複素数の結果を返すことができることを仮定するように命じます。

tr_float_can_branch_complexの表面上の効果は以下の通りです。 しかし、このフラグは翻訳器出力上の効果を持ちません。

trueの時、たとえ (mode_declareが設定したように) xがモード floatでもacos(x)はモード anyです。 falseの時、 xがモード floatの時だけ acos(x)はモード floatです。

オプション変数: tr_function_call_default

デフォルト値: general

falseはあきらめて mevalをコールすることを意味し、 exprは引数が固定された Lisp関数を仮定することを意味します。 デフォルトであるgeneralmexprsmlexprsにはよいが macrosにはよくないコードを与えます。 generalはコンパイルされたコードの中で変数バインドが正確であることを保証します。 generalモードでは、 F(X)を翻訳する時、もし Fがバインドされた変数なら apply (f, [x])を意味すると仮定され、適切な警告と合わせてそのように翻訳されます。 これをオフにする必要はありません。 デフォルト設定で警告メッセージがないことは、 Maximaインタープリタと、翻訳、コンパイルされたコードの完全互換性を意味します。

オプション変数: tr_numer

デフォルト値: false

tr_numertrueの時、 numerプロパティはそれらを持つアトム、例えば %piに使われます。

オプション変数: tr_optimize_max_loop

デフォルト値: 100

tr_optimize_max_loopは、 翻訳器のマクロ展開と最適化パスが形式を検討する際繰り返す最大回数です。 これはマクロ展開エラーや終了しない最適化プロパティをキャッチします。

オプション変数: tr_semicompile

デフォルト値: false

tr_semicompiletrueの時、 translate_filecompfileは、マクロ展開されたが Lispコンパイラによって機械語にコンパイルされない形式を出力します。

システム変数: tr_state_vars

デフォルト値:

 
[transcompile, tr_semicompile, tr_warn_undeclared, tr_warn_meval,
tr_warn_fexpr, tr_warn_mode, tr_warn_undefined_variable,
tr_function_call_default, tr_array_as_ref,tr_numer]

翻訳された出力の形式に影響するスイッチのリスト。 翻訳器をデバッグしようとする時、この情報はシステムの人たちに役に立ちます。 翻訳された生成物を与えられた状態で生成されるべきだったものと比較することによって、 バグを追跡することが可能です。

関数: tr_warnings_get ()

現在の翻訳の間に翻訳器が与える警告のリストを印字します。

オプション変数: tr_warn_bad_function_calls

デフォルト値: true

- 翻訳時にされた不適切な宣言のせいで正確でないかもしれない関数コールが行われている時、 警告を与えます。

オプション変数: tr_warn_fexpr

デフォルト値: compfile

- もしFEXPRに遭遇したら、警告を与えます。 FEXPRは、通常、翻訳コードの中で出力すべきではありません。 合法で特殊なプログラム形式はすべて翻訳されます。

オプション変数: tr_warn_meval

デフォルト値: compfile

- もし関数 mevalがコールされたら、警告を与えます。 もし mevalがコールされたら、それは翻訳の中の問題を示唆します。

オプション変数: tr_warn_mode

デフォルト値: all

- 変数がそのモードに不適切な値を割り当てられた時、警告を与えます。

オプション変数: tr_warn_undeclared

デフォルト値: compile

- 未宣言変数についての警告をいつ TTYに送るかを決めます。

オプション変数: tr_warn_undefined_variable

デフォルト値: all

- 未定義のグローバル変数が見られた時、警告を与えます。

関数: compile_file  
    compile_file (filename)  
    compile_file (filename, compiled_filename)  
    compile_file (filename, compiled_filename, lisp_filename)

Maximaファイル filenameを Lispに翻訳し、 Lispコンパイラを実行し、 もし翻訳とコンパイルが成功したら、コンパイルされたコードを Maximaにロードします。

compile_fileは4つのファイル名のリストを返します: 元の Maximaファイル、 Lisp翻訳、翻訳時ノート、コンパイルされたコード。 もしコンパイルが失敗したら、4番目の項目は falseです。

Lispコードがコンパイルされると(コンパイルされたコードをロードすることなしに)すぐに いくつかの宣言と定義は効力を発揮します。 これらは :=演算子で定義された関数、 ::=演算子で定義されたマクロ、 alias, declare, define_variable, mode_declare, infix, matchfix, nofix, postfix, prefix, compfile を含みます。

コンパイルされたコードがロードされるまで 割り当てと関数コールは評価されません。 特に、 Maximaファイルの中で (tr_numer, など)翻訳フラグへの割り当ては翻訳時に効果を持ちません。

filename:lisp文を含むことができません。

compile_fileは引数を評価します。

関数: declare_translated (f_1, f_2, …)

Maximaコードのファイルを Lispに翻訳する時、 ファイルの中で見る関数が翻訳された関数としてコールされるか、 コンパイルされた関数としてコールされるか、 また、どの関数が Maxima関数か未定義なのか、翻訳器が知ることが重要です。 この宣言をファイルの先頭に置くと、 翻訳器は、 Lisp関数値をまだ持たないシンボルがコール時には持つだろうということを知ります. (Putting this declaration at the top of the file, lets it know that although a symbol does which does not yet have a Lisp function value, will have one at call time.) fnが Lisp関数になるつもりであることを翻訳器が知らない時、 (MFUNCTION-CALL fn arg1 arg2 ...)が生成されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37. Program Flow


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.1 Lisp and Maxima

Maximaは Lispで書かれており、 Lisp関数や変数を Maximaからアクセスしたり、その逆が簡単にできます。 Lispと Maximaのシンボルは命名の慣例で区別されます。 ドル記号 $で始まる Lispシンボルはドル記号なしの Maximaシンボルに対応します。 クエスチョンマーク ?で始まる Maximaシンボルは、クエスチョンマークなしの Lispシンボルに対応します。 例えば Maximaシンボル fooは Lispシンボル $FOOに対応し、 Maximaシンボル ?fooは LispシンボルFOOに対応します。 ?foo?fooの間にスペースを入れずに書くことに注意してください。 でないと、それは describe ("foo")に間違えられます。

Lispシンボルの中にハイフン -やアスタリスク *、他の特殊文字があるなら、 Maximaのコードの中ではバックスラッシュ \でエスケープしないといけません。 例えば、Lispの識別子 *foo-bar*は、Maximaでは ?\*foo\-bar\*と書きます。

Maximaセッションの中で Lispコードを実行できます。 特殊コマンド :lispを使って、 (1つか複数のフォームを含む) Lispの一行を実行できます。例えば、

 
(%i1) :lisp (foo $x $y)

は、 Lisp関数 fooを Maxima変数 x, yを引数としてコールします。 :lisp構成子は 対話プロンプトや batchdemoによって処理されるファイルの中で使えますが、 load, batchload, translate_file, compile_fileが処理するファイルの中では使えません。

関数 to_lisp()を実行すると 対話的な Lispセッションが始まります。 (to-maxima)を入力すると Lispセッションを終了して Maximaに戻ります。

Lispの関数や変数を、 Maximaで通常の関数名、変数名(特殊な句読点のない名前)に見せるには、 Lispの名前をドル記号 $で始めなければなりません。

Maximaでは識別子の中の大文字、小文字が区別されます。 Lispと Maximaの間の名前変換を決めるルールがあります。

  1. 縦棒で囲まれていない Lisp識別子は Maximaの小文字の識別子に対応します。 Lisp識別子が大文字でも小文字でも混ざっていても無視されます。 例えば Lispの $foo$FOO, $Fooはすべて Maximaのfooに対応します。 でも、これはデフォルトで、 Lispリーダが $foo, $FOO, $Fooを Lispシンボル $FOOに変換するからです。
  2. すべて大文字かすべて小文字で、縦棒で囲まれた Lisp識別子は、大文字小文字を逆にした Maximaの識別子に対応します。 例えば Lispの |$FOO|, |$foo|はそれぞれ Maximaの foo, FOOに対応します。
  3. 大文字小文字が混ざっていて、縦棒で囲まれた Lisp識別子は、そのまま Maximaの識別子に対応します。 例えば Lispの |$Foo|は Maximaの Fooに対応します。

#$ Lisp マクロを使うと、 Maximaの式を Lispコードの中で使うことができます。 #$expr$は Maximaの式 exprと同値な Lispの式に展開されます。

 
(msetq $foo #$[x, y]$)

これは以下のように入力するのと同じ効果です。

 
(%i1) foo: [x, y];

Lisp関数 displaは Maximaフォーマットで式を表示します。

 
(%i1) :lisp #$[x, y, z]$
((MLIST SIMP) $X $Y $Z)
(%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z))
[x, y, z]
NIL

Maximaで定義された関数は通常の Lisp関数ではありません。 Lisp関数 mfuncallは Maxima関数をコールします。 例えば:

 
(%i1) foo(x,y) := x*y$
(%i2) :lisp (mfuncall '$foo 'a 'b)
((MTIMES SIMP) A B)

以下の Lisp関数は Maximaパッケージの中でシャドウされています。

   complement     continue      //
   float          functionp     array
   exp            listen        signum
   atan           asin          acos
   asinh          acosh         atanh
   tanh           cosh          sinh
   tan            break         gcd

Categories:  Programming


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.2 Garbage Collection

数式処理は膨大なゴミ(最終的には使われない一時的な、もしくは中間の結果)を生む傾向があり、 ゴミの効率的な取り扱いは、プログラムをうまく完了させるために非常に重要な場合があります。

(SunOS 4.0やBSDの幾つかを含む) mprotectシステムコールが利用可能な UNIXシステム上での GCLでは、階層化 (stratified)ガーベッジコレクションが利用可能です。 これはガーベッジコレクションを最近書き込まれたページに限定します。 GCLドキュメントの ALLOCATEや GBCを参照してください。 Lispレベルで (setq si::*notify-gbc* t)を実行すると どの領域がより多くの空間を必要としているか決めるのに役立つでしょう。

Maximaを走らせる他の Lispについては、 その Lispの GCの制御の仕方に関するドキュメントを調べてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.3 Introduction to Program Flow

Maximaは goのようなもっとプリミティブな構成子はもちろん、繰り返しのために doループを提供します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.4 Functions and Variables for Program Flow

関数: backtrace  
    backtrace ()  
    backtrace (n)

コールスタック、すなわち、現在アクティブな関数をコールした関数のリストを印字します。

backtrace()はコールスタック全体を印字します。

backtrace (n)は現在アクティブな関数を含めて n個の直近の関数を印字します。

backtraceは、(デバッグの文脈でだけでなく、) スクリプト、関数、対話プロンプトからコールすることができます。

例:

Categories:  Debugging

特殊演算子: do
特殊演算子: while
特殊演算子: unless
特殊演算子: for
特殊演算子: from
特殊演算子: thru
特殊演算子: step
特殊演算子: next
特殊演算子: in

do文は繰り返しを実行するために使われます。 その強力な一般性のために do文は2編で記述されます。 最初、通常の形式が (Fortran, Algol, PL/I, など)いくつかの他のプログラミング言語の中で使われるそれ との類似で与えられます; それから他の特長が言及されます。

この形式の終了条件に関してだけ違う3つの別形があります。 それらは:

(代わりに stepは終了条件や範囲の後与えられるかもしれません。)

initial_value, increment, limit, bodyは任意の式を取り得ます。 もし増分が 1なら "step 1"は省略できます。

do文の実行は、最初 initial_valuevariable (今後、制御変数と呼びます) に割り当てることによって処理されます。 そして: (1) もし制御変数が thru指定の範囲を越えたら、もしくは、 unlessの条件が trueもしくは whileの条件が falseなら、 doは終了します。 (2) bodyが評価されます。 (3) 増分が制御変数に足されます。 終了条件が満たされるまで、いずれかが満たされる時 doが終了する複数の終了条件を与えることもできます。

一般的に、 thruテストは、 もし incrementが非負なら制御変数が limitよりも大きい時、 または、もし incrementが負なら制御変数が limitよりも小さい時、 満たされます。 incrementlimitはこの不等式が決定できる限り数値でない式も取り得ます。 しかし、 do文が入力された時 incrementが構文法的に負(例えば負の数)でない限り、 Maximaは doが実行される時、正と仮定します。 もし正でないなら doは適切に終了しないかもしれません。

limit, increment, 終了条件はループを通して毎回評価されることに注意してください。 もしこれらのいずれかが多くの計算を含み、 bodyの実行中すべてで変わらない結果をもたらすなら、 doに先立って変数をそれらの値に設定し、その変数を do形式の中で使うことはもっと効率的です。

do文が通常返す値はアトム doneです。 しかし、早い時点で doから抜けて任意の望みの値を与えるために、 関数 returnbodyの中で使うことができます。 しかし、 blockの中で起こる doの中の returnは、 doだけから抜けて、 blockからは抜けないことに注意してください。 doから囲んでいる blockに抜けるために、 go関数は使えないことにも注意してください。

制御変数はいつも doにローカルです。

従って、 doの外側の同じ名前を持つ変数の値に影響することなく、任意の変数が使えます。 制御変数は doが終了した後バインドされていません。

 
(%i1) for a:-3 thru 26 step 7 do display(a)$
                             a = - 3

                              a = 4

                             a = 11

                             a = 18

                             a = 25
 
(%i1) s: 0$
(%i2) for i: 1 while i <= 10 do s: s+i;
(%o2)                         done
(%i3) s;
(%o3)                          55

条件 while i <= 10は、 unless i > 10thru 10と同値であることに注意してください。

 
(%i1) series: 1$
(%i2) term: exp (sin (x))$
(%i3) for p: 1 unless p > 7 do
          (term: diff (term, x)/p,
           series: series + subst (x=0, term)*x^p)$
(%i4) series;
                  7    6     5    4    2
                 x    x     x    x    x
(%o4)            -- - --- - -- - -- + -- + x + 1
                 90   240   15   8    2

以上は e^sin(x)のTaylor級数の8項を与えます。

 
(%i1) poly: 0$
(%i2) for i: 1 thru 5 do
          for j: i step -1 thru 1 do
              poly: poly + i*x^j$
(%i3) poly;
                  5      4       3       2
(%o3)          5 x  + 9 x  + 12 x  + 14 x  + 15 x
(%i4) guess: -3.0$
(%i5) for i: 1 thru 10 do
          (guess: subst (guess, x, 0.5*(x + 10/x)),
           if abs (guess^2 - 10) < 0.00005 then return (guess));
(%o5)                  - 3.162280701754386

この例は、Newton-Raphson反復を最大10回使って 10の負の平方根を計算します。 もし収束基準が満たされないなら、戻り値は doneになります。

いつもある量を制御変数に加える代わりに、 繰り返しそれぞれで量をある他の方法で換えたい時があるかもしれません。 この場合、 step incrementの代わりに next expressionを使うことができます。 これは、ループの間、 制御変数が毎回 expressionの評価結果に設定されるようにします。

 
(%i6) for count: 2 next 3*count thru 20 do display (count)$
                            count = 2

                            count = 6

                           count = 18

for variable: value ...do...の代わりとして、 構文法 for variable from value ...do...が使えます。 これは、from valuestepnext値の後や終了条件の後に置くことを許します。 もし from valueが省略されたら初期値として 1が使われます。

制御変数が実際には決して使われないような繰り返しを実行することに 興味があることがあるかもしれません。 それゆえに、貧弱な初期推測を使って 5の平方根を計算する以下の例にあるように、 初期化と更新情報を省略して終了条件だけ与えることが許されます。

 
(%i1) x: 1000$
(%i2) thru 20 do x: 0.5*(x + 5.0/x)$
(%i3) x;
(%o3)                   2.23606797749979
(%i4) sqrt(5), numer;
(%o4)                   2.23606797749979

もし望むなら、終了条件さえ完全に省略し、 無限に bodyを評価し続ける do bodyだけを与えることもできます。 この場合、関数 returndoの実行を終了するのに使われるべきです。

 
(%i1) newton (f, x):= ([y, df, dfx], df: diff (f ('x), 'x),
          do (y: ev(df), x: x - f(x)/y,
              if abs (f (x)) < 5e-6 then return (x)))$
(%i2) sqr (x) := x^2 - 5.0$
(%i3) newton (sqr, 1000);
(%o3)                   2.236068027062195

(returnが実行された時、 xの現在値を doの値として返そうとすることに注意してください。 doがブロックの最後の文なので、 blockから抜けて、 doの値が blockの値として返されます。)

doのもう1つ別の形式が Maximaで利用可能です。構文法は:

 
for variable in list end_tests do body

listの要素は、 bodyの繰り返しのそれぞれで variableに連続的に割り当てられる任意の式です。 オプションの終了テスト end_testsは、 doの実行を終了するのに使うことができます; そうでないなら、 listが使い果たされた時、または、 bodyの中で returnが実行された時、 終了します。 (実際には、 listは非アトムの任意の式を取り得えて、連続的な部分が取られます。)

 
(%i1)  for f in [log, rho, atan] do ldisp(f(1))$
(%t1)                                  0
(%t2)                                rho(1)
                                     %pi
(%t3)                                 ---
                                      4
(%i4) ev(%t3,numer);
(%o4)                             0.78539816

Categories:  Programming

関数: errcatch (expr_1, …, expr_n)

expr_1, …, expr_nを1つずつ評価し、もしエラーが起こらないなら、 [expr_n] (リスト)を返します。 もしいずれかの引数の評価中にエラーが起こったら、 errcatch はエラーが伝搬することを抑制し、 引数をこれ以上評価せずに空のリスト []を返します。

errcatchは、もしエラーがチャッチされないなら batchを終了させるエラーが起こるかもしれないと疑うような batchファイルで役立ちます。

Categories:  Programming

関数: error (expr_1, ..., expr_n)
システム変数: error

expr_1, ..., expr_nを評価して印字します。 そしてエラーがあれば、トップレベル Maximaか直近の errcatchに戻るようにします。

変数 errorはエラーを記述するリストに設定されます。 errorの最初の要素はフォーマット文字列です。 引数 expr_1, ..., expr_nの中の文字列すべてを結合したものです。 残りの要素は文字列でない引数の値です。

errormsg()errorをフォーマットし印字します。 これは直近のエラーメッセージを効果的に再印字します。

Categories:  Programming

オプション変数: error_size

デフォルト値: 10

error_sizeは現れる式のサイズに従ってエラーメッセージを変更します。 もし( Lisp 関数 ERROR-SIZEが決定するような)式のサイズが error_sizeより大きいなら、 式はメッセージの中でシンボルで置き換えられ、シンボルは式に割り当てられます。 シンボルはリスト error_symsから取られます。

そうでないなら、式は error_sizeより小さくメッセージの中に式が表示されます。

errorerror_symsも参照してください。

例:

Uのサイズは ERROR-SIZEで決められるように 24です。

 
(%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$

(%i2) error_size: 20$

(%i3) error ("Example expression is", U);

Example expression is errexp1
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) errexp1;
                            E
                           D
                          C   + B + A
(%o4)                    --------------
                         cos(X - 1) + 1
(%i5) error_size: 30$

(%i6) error ("Example expression is", U);

                         E
                        D
                       C   + B + A
Example expression is --------------
                      cos(X - 1) + 1
 -- an error.  Quitting.  To debug this try debugmode(true);

オプション変数: error_syms

デフォルト値: [errexp1, errexp2, errexp3]

エラーメッセージの中で、 error_sizeより大きな式はシンボルで置き換えられ、シンボルは式に設定されます。 シンボルはリスト error_symsから取られます。 最初の大きすぎる式は error_syms[1]で置き換えられ、 2番目は error_syms[2]で置き換えられ、と続きます。

もし大きすぎる式が error_symsの要素よりもたくさんあるなら シンボルは自動的に構成されます。 n番目のシンボルは concat ('errexp, n)と同値です。

errorerror_sizeも参照してください。

関数: errormsg ()

直近のエラーメッセージを再印字します。 変数 errorはメッセージを保持し、 errormsgはそれをフォーマットし印字します。

Categories:  Programming

オプション変数: errormsg

デフォルト値: true

falseの時、エラーメッセージの出力は抑制されます。

オプション変数 errormsgは ブロックの中でローカル値に設定することはできません。 errormsgのグローバル値が常に存在します。

 
(%i1) errormsg;
(%o1)                         true
(%i2) sin(a,b);
sin: wrong number of arguments.
 -- an error. To debug this try: debugmode(true);
(%i3) errormsg:false;
(%o3)                         false
(%i4) sin(a,b);
 -- an error. To debug this try: debugmode(true);

オプション変数 errormsgはブロックの中でローカル値に設定できません。

 
(%i1) f(bool):=block([errormsg:bool], print ("value of errormsg is",errormsg))$
(%i2) errormsg:true;
(%o2)                         true
(%i3) f(false);
value of errormsg is true
(%o3)                         true
(%i4) errormsg:false;
(%o4)                         false
(%i5) f(true);
value of errormsg is false
(%o5)                         false

Categories:  Programming

関数: go (tag)

制御を goの引数でタグ付けされたブロックの文に移すために block内部で使われます。 文をタグ付けするには、その文の前にアトムの引数を blockの中の別の文として先行させてください。 例えば:

 
block ([x], x:1, loop, x+1, ..., go(loop), ...)

goの引数は同じ blockの中に現れるタグの名前でなければいけません。 goを含む block以外の blockの中のタグに移るために、 goを使うことはできません。

Categories:  Programming

特殊演算子: if

条件評価を表します。 if式の様々な形が認識されます。

if cond_1 then expr_1 else expr_0は、もし cond_1true評価されたら expr_1に*評*価*され、 そうでないなら式は expr_0に評価されます。

コマンド if cond_1 then expr_1 elseif cond_2 then expr_2 elseif ... else expr_0は、 もし cond_ktrueでかつ先行する条件がすべて falseなら、 expr_kに評価されます。 もし条件のいずれも trueでないなら式は expr_0に評価されます。

もし elseがないなら、 最後に else falseが仮定されます。 すなわち、コマンド if cond_1 then expr_1if cond_1 then expr_1 else falseと同値で、 コマンド if cond_1 then expr_1 elseif ... elseif cond_n then expr_nif cond_1 then expr_1 elseif ... elseif cond_n then expr_n else falseと同値です。

選択肢 expr_0, …, expr_nは、任意の Maxima式を取り得ます。 入れ子の if式もあり得ます。 選択肢は、 対応する条件が trueでない限り、 整理も評価もされません。

条件 cond_1, ..., cond_nは、潜在的に、また、実際に truefalseに評価される式です。 条件が実際には trueにも falseにも評価されない時、 ifの振る舞いはグローバルフラグ prederrorで決定されます。 prederrortrueの時、 もし評価された条件のいずれかが trueにも falseにもならなかったら、エラーになります。 そうでないなら、 trueにも falseにも評価されない条件が受け入れられ、 結果は条件式になります。

条件は以下のように他の要素間の関係演算子と論理演算子からなります。

 
演算                 シンボル     タイプ

小なり                <           関係 中置
以下                  <=          関係 中置
等号 (構文法的)        =           関係 中置
不等号 (構文法的)      #           関係 中置
等号 (値)             equal       関係 関数
不等号 (値)           notequal    関係 関数
以上                  >=          関係 中置
大なり                >           関係 中置
かつ                  and         論理 中置
または                or          論理 中置
否定                  not         論理 前置

Categories:  Programming · Predicate functions

関数: map (f, expr_1, …, expr_n)

mapは、主演算子(訳注:内部表現の最上位階層のリストに対応する演算子)は式 expr_1, ..., expr_nのそれと同じ演算子を使い、 そのサブパーツは、引数式の対応するサブパーツに fを適用した結果である式を返します。 fn個の引数の関数名か n個の引数のラムダ形式です。 (訳注:また expr_1, …, expr_nは内部表現に階層リスト構造を持つ式です。)

maperror - もし maperrorfalseなら、 マッピング関数のすべては、(1)もし expr_iのすべてが同じ長さでなければ、 最も短い expr_iが完了した時点で停止し、 (2)もし expr_iが同じタイプのオブジェクトでなければ、 fをリスト [expr_1, expr_2, ...]に適用します。 もし maperrortrueなら、上の2つの場合、エラーメッセージを出力します。

この関数の用法の1つは、ある関数(例えば partfrac)を非常に長い式に適用する際、 計算の間にリスト保存領域を枯渇させるため式全体に適応するのが不可能な場合に、 それぞれの項に関数をマップすることです。

scanmap, maplist, outermap, matrixmap, applyも参照してください。

 
(%i1) map(f,x+a*y+b*z);
(%o1)                        f(b z) + f(a y) + f(x)
(%i2) map(lambda([u],partfrac(u,x)),x+1/(x^3+4*x^2+5*x+2));
                           1       1        1
(%o2)                     ----- - ----- + -------- + x
                         x + 2   x + 1          2
                                         (x + 1)
(%i3) map(ratsimp, x/(x^2+x)+(y^2+y)/y);
                                      1
(%o3)                            y + ----- + 1
                                    x + 1
(%i4) map("=",[a,b],[-0.5,3]);
(%o4)                          [a = - 0.5, b = 3]


Categories:  Function application

関数: mapatom (expr)

exprがマップルーチンでアトムとして扱われる時だけ trueを返します。 "Mapatoms"はアトム、(有理数を含む)数、添字付き変数です。

Categories:  Predicate functions

オプション変数: maperror

デフォルト値: true

maperrorfalseの時は、 マップ関数すべてに以下の例のようにさせます。

 
map (f, expr_1, expr_2, …)

に対しては、 (1) もし expr_iのすべてが同じ長さでないなら、 最も短い expr_iの終わりまで完了した時、停止するようにさせ、 (2) もし expr_iすべてが同じタイプのオブジェクトでないなら、 fを [expr_1, expr_2, ...]に適用するようにさせます。

もし maperrortrueなら、 上の2つの例に関してエラーメッセージが表示されます。

Categories:  Function application

オプション変数: mapprint

デフォルト値: true

mapprinttrueの時、 map, maplist, fullmapからの様々な情報メッセージが 一定の状況で生成されます。 これらは mapapplyを使ったり、 mapが最短のリストで切り詰めているような状況を含みます。

もし mapprintfalseなら、これらのメッセージは抑制されます

Categories:  Function application

関数: maplist (f, expr_1, …, expr_n)

expr_1, …, expr_nのパーツに fを適用した結果のリストを返します。 fは関数名かラムダ式です。

maplistmap (f, expr_1, ..., expr_n)とは違います。 mapは主演算子が expr_iと同じ式を返します。 (整理と mapapplyを行う場合は例外です。)

Categories:  Function application

オプション変数: prederror

デフォルト値: false

prederrortrueの時、 if文の述語論理か is関数が truefalseに評価されるのに失敗した時はいつでも エラーメッセージが表示されます。

もし falseなら、この場合,代わりに unknownが返されます。 prederror: falseモードは翻訳コードではサポートされません; しかし、 maybeは翻訳コードでサポートされます。

ismaybeも参照してください。

Categories:  Programming · Predicate functions

関数: return (value)

引数を連れて、明示的に現在の block, while, for, doループから抜けるために使われます。 なので他のプログラミング言語にある return文と比較できますが、1つ違いがあります: maximaでは、呼ばれた関数全体からではなく現在のブロックから戻るだけです、 この観点では、Cの break文とより似ています。

 
(%i1) for i:1 thru 10 do o:i;
(%o1)                         done
(%i2) for i:1 thru 10 do if i=3 then return(i);
(%o2)                           3
(%i3) for i:1 thru 10 do
    (
        block([i],
            i:3,
            return(i)
        ),
        return(8)
    );
(%o3)                           8
(%i4) block([i],
    i:4,
    block([o],
        o:5,
        return(o)
    ),
    return(i),
    return(10)
 );
(%o4)                           4

for, while, do, blockも参照してください。

Categories:  Programming

関数: scanmap  
    scanmap (f, expr)  
    scanmap (f, expr, bottomup)

トップダウン法で fexprに再帰的に適用します。 完全な因数分解が望まれる時、これは最も役に立ちます。 例えば:

 
(%i1) exp:(a^2+2*a+1)*y + x^2$
(%i2) scanmap(factor,exp);
                                    2      2
(%o2)                         (a + 1)  y + x

scanmapが与えられた関数 factorexprの構成部分式に適用する方法に注意してください; もし exprの別の形が scanmapに適用されるなら、結果は異なるかもしれません。 従って、 scanmapexpの展開形に適用される時、 %o2が再現されません:

 
(%i3) scanmap(factor,expand(exp));
                           2                  2
(%o3)                      a  y + 2 a y + y + x

scanmapが 与えられた関数を指数関数を含む部分式すべてに再帰的に適用する方法の別の例です:

 
(%i4) expr : u*v^(a*x+b) + c$
(%i5) scanmap('f, expr);
                    f(f(f(a) f(x)) + f(b))
(%o5) f(f(f(u) f(f(v)                      )) + f(c))

scanmap (f, expr, bottomup)は、 ボトムアップ法で fexprに適用します。 例えば、未定義 fに関して、

 
scanmap(f,a*x+b) ->
   f(a*x+b) -> f(f(a*x)+f(b)) -> f(f(f(a)*f(x))+f(b))
scanmap(f,a*x+b,bottomup) -> f(a)*f(x)+f(b)
    -> f(f(a)*f(x))+f(b) ->
     f(f(f(a)*f(x))+f(b))

この場合、両方の方法で同じ答えを得ます。

Categories:  Function application

関数: throw (expr)

exprを評価し、直近の catchに値を投げ戻します。 throwcatchと一緒に非ローカルリターンメカニズムとして使われます。

Categories:  Programming

関数: outermap (f, a_1, …, a_n)

関数 fを外積 a_1掛ける a_2 ... 掛ける a_nの要素のそれぞれに適用します。

fn個の引数の関数の名前か、 n個の引数のラムダ式です。

それぞれの引数 a_kは、リストか、入れ子のリストか、行列か、他の任意の種類の式を取り得ます。

outermap戻り値は、入れ子の構造です。 xを戻り値とします。 すると、 xは最初のリストか入れ子のリストか行列引数と同じ構造を持ち、 x[i_1]...[i_m]は、 二番目のリストか入れ子のリストか行列引数と同じ構造を持ち、 x[i_1]...[i_m][j_1]...[j_n]は、 三番目のリストか入れ子のリストか行列引数と同じ構造を持ち、 以下同様。 ここで、 m, n, ...は、 引数それぞれの要素をアクセスするために要求されるインデックスの数 (リストには1つ、行列には2つ、入れ子のリストには1つ以上)です。 リストや行列でない引数は戻り値の構造に影響を与えません。

outermapの効果は cartesian_productが返す外積の要素のそれぞれに fを適用することのそれと違うことに注意してください。 outermapは戻り値で引数の構造を保ちますが、 cartesian_productは違います。

outermapは引数を評価します。

map, maplist, applyも参照してください。

例:

outermapの初等的な例。 よりはっきり引数の組み合わせを示すために、 Fは未定義のままです。

 
(%i1) outermap (F, [a, b, c], [1, 2, 3]);
(%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)],
                                     [F(c, 1), F(c, 2), F(c, 3)]]
(%i2) outermap (F, matrix ([a, b], [c, d]), matrix ([1, 2], [3, 4]));
         [ [ F(a, 1)  F(a, 2) ]  [ F(b, 1)  F(b, 2) ] ]
         [ [                  ]  [                  ] ]
         [ [ F(a, 3)  F(a, 4) ]  [ F(b, 3)  F(b, 4) ] ]
(%o2)    [                                            ]
         [ [ F(c, 1)  F(c, 2) ]  [ F(d, 1)  F(d, 2) ] ]
         [ [                  ]  [                  ] ]
         [ [ F(c, 3)  F(c, 4) ]  [ F(d, 3)  F(d, 4) ] ]
(%i3) outermap (F, [a, b], x, matrix ([1, 2], [3, 4]));
       [ F(a, x, 1)  F(a, x, 2) ]  [ F(b, x, 1)  F(b, x, 2) ]
(%o3) [[                        ], [                        ]]
       [ F(a, x, 3)  F(a, x, 4) ]  [ F(b, x, 3)  F(b, x, 4) ]
(%i4) outermap (F, [a, b], matrix ([1, 2]), matrix ([x], [y]));
       [ [ F(a, 1, x) ]  [ F(a, 2, x) ] ]
(%o4) [[ [            ]  [            ] ],
       [ [ F(a, 1, y) ]  [ F(a, 2, y) ] ]
                              [ [ F(b, 1, x) ]  [ F(b, 2, x) ] ]
                              [ [            ]  [            ] ]]
                              [ [ F(b, 1, y) ]  [ F(b, 2, y) ] ]
(%i5) outermap ("+", [a, b, c], [1, 2, 3]);
(%o5) [[a + 1, a + 2, a + 3], [b + 1, b + 2, b + 3],
                                           [c + 1, c + 2, c + 3]]

outermapの戻り値のより密な検査。 最初の、二番目の、三番目の引数は、それぞれ、行列、リスト、行列です。 戻り値は行列です。 その行列の要素それぞれはリストで、それぞれのリストの要素それぞれは行列です。

 
(%i1) arg_1 :  matrix ([a, b], [c, d]);
                            [ a  b ]
(%o1)                       [      ]
                            [ c  d ]
(%i2) arg_2 : [11, 22];
(%o2)                       [11, 22]
(%i3) arg_3 : matrix ([xx, yy]);
(%o3)                      [ xx  yy ]
(%i4) xx_0 : outermap (lambda ([x, y, z], x / y + z), arg_1,
                                                   arg_2, arg_3);
               [  [      a        a  ]  [      a        a  ]  ]
               [ [[ xx + --  yy + -- ], [ xx + --  yy + -- ]] ]
               [  [      11       11 ]  [      22       22 ]  ]
(%o4)  Col 1 = [                                              ]
               [  [      c        c  ]  [      c        c  ]  ]
               [ [[ xx + --  yy + -- ], [ xx + --  yy + -- ]] ]
               [  [      11       11 ]  [      22       22 ]  ]
                 [  [      b        b  ]  [      b        b  ]  ]
                 [ [[ xx + --  yy + -- ], [ xx + --  yy + -- ]] ]
                 [  [      11       11 ]  [      22       22 ]  ]
         Col 2 = [                                              ]
                 [  [      d        d  ]  [      d        d  ]  ]
                 [ [[ xx + --  yy + -- ], [ xx + --  yy + -- ]] ]
                 [  [      11       11 ]  [      22       22 ]  ]
(%i5) xx_1 : xx_0 [1][1];
           [      a        a  ]  [      a        a  ]
(%o5)     [[ xx + --  yy + -- ], [ xx + --  yy + -- ]]
           [      11       11 ]  [      22       22 ]
(%i6) xx_2 : xx_0 [1][1] [1];
                      [      a        a  ]
(%o6)                 [ xx + --  yy + -- ]
                      [      11       11 ]
(%i7) xx_3 : xx_0 [1][1] [1] [1][1];
                                  a
(%o7)                        xx + --
                                  11
(%i8) [op (arg_1), op (arg_2), op (arg_3)];
(%o8)                  [matrix, [, matrix]
(%i9) [op (xx_0), op (xx_1), op (xx_2)];
(%o9)                  [matrix, [, matrix]

outermapは戻り値の中で引数の構造を保持します。 cartesian_productは保持しません。

 
(%i1) outermap (F, [a, b, c], [1, 2, 3]);
(%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)],
                                     [F(c, 1), F(c, 2), F(c, 3)]]
(%i2) setify (flatten (%));
(%o2) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3),
                                       F(c, 1), F(c, 2), F(c, 3)}
(%i3) map (lambda ([L], apply (F, L)),
                     cartesian_product ({a, b, c}, {1, 2, 3}));
(%o3) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3),
                                       F(c, 1), F(c, 2), F(c, 3)}
(%i4) is (equal (%, %th (2)));
(%o4)                         true

Categories:  Function application


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38. Debugging


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.1 Source Level Debugging

Maximaは組み込みのソースレベルデバッガを持っています。 ユーザーは関数にブレイクポイントを設定でき、そこから行毎に実行することができます。 そのレベルでバインドされた変数と一緒にコールスタックを検査することができます。

コマンド :helpまたは :hでデバッガーコマンドのリストを示します。 (一般的にもし略字がただ1つなら、コマンドは略せます。 もしただ1つでないなら、選択肢がリストされます。) デバッガー内では、変数と式を検査し定義し操作するために、ユーザーは任意の通常の Maxima関数も使うことができます。

Maximaプロンプトで、 :brコマンドでブレイクポイントが設定できます。 デバッガー内では、ユーザーは、 :n ("next")コマンドを使って1度に1行進むことができます。 :bt ("backtrace")コマンドは、スタックフレームのリストを示します。 :r ("resume")コマンドは、デバッガーから抜けて、実行を続けます。 以下の例で、これらのコマンドを例示します。

 
(%i1) load ("/tmp/foobar.mac");

(%o1)                           /tmp/foobar.mac

(%i2) :br foo
Turning on debugging debugmode(true)
Bkpt 0 for foo (in /tmp/foobar.mac line 1)

(%i2) bar (2,3);
Bkpt 0:(foobar.mac 1)
/tmp/foobar.mac:1::

(dbm:1) :bt                        <-- :bt typed here gives a backtrace
#0: foo(y=5)(foobar.mac line 1)
#1: bar(x=2,y=3)(foobar.mac line 9)

(dbm:1) :n                         <-- Here type :n to advance line
(foobar.mac 2)
/tmp/foobar.mac:2::

(dbm:1) :n                         <-- Here type :n to advance line
(foobar.mac 3)
/tmp/foobar.mac:3::

(dbm:1) u;                         <-- Investigate value of u
28

(dbm:1) u: 33;                     <-- Change u to be 33
33

(dbm:1) :r                         <-- Type :r to resume the computation

(%o2)                                1094

ファイル /tmp/foobar.macは以下の通りです:

 
foo(y) := block ([u:y^2],
  u: u+3,
  u: u^2,
  u);

bar(x,y) := (
  x: x+2,
  y: y+2,
  x: foo(y),
  x+y);

EMACSを通してのデバッガーの使用

もしユーザーがシェルウィンドウ (dblシェル)で GNU emacsの下でコードを走らせているか、 グラフィカルならインターフェイスバージョン Xmaximaを走らせているなら、 もしブレイクポイントで停止させたら、 ウィンドウの他の半面に表示されるソースファイルの中に、 赤でハイライトされたか、右行を示す小さな矢印で現在位置を見るでしょう。 M-n (Alt-n)をタイプすることで、一度に一行進めることができます。

Emacsの下では、 dblシェルの中で走らせなければいけません。 dblシェルは elispディレクトリの中に dbl.elファイルを要求します。 elispファイルをインストールしたか、 Maxima elispディレクトリをパスに足したかを確認してください: 例えば、以下を `.emacs'ファイルか `site-init.el'に足してください。

 
(setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
(autoload 'dbl "dbl")

すると emacsの中で、

 
M-x dbl

は、例えば Maxima, gcl, gbbなどのプログラムを走らせることができるシェルウィンドウを開始するでしょう。 このシェルウィンドウはソースレベルデバッグや 他のウィンドウのソースコードの表示についても知っています。

ユーザーは C-x spaceをタイプすることで ファイルのある行にブレイクポイントを設定できます。 これは、カーソルがどの関数の中かがわかり、 カーソルが示すその関数のどの行かわかります。 もしカーソルが例えば fooの行2上なら、 fooを二番目の行でブレイクするために、 他のウィンドウの中でコマンド ":br foo 2"を挿入します。 これをイネーブルにするには、ユーザーはファイル foobar.macが訪れるウィンドウの中で maxima-mode.elを機能させなければいけません。 Alt-Control-xをタイプすることで関数を Maximaに評価ような、そのファイルウィンドウで利用可能な追加のコマンドがあります。

Categories:  Debugging


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.2 Keyword Commands

キーワードコマンドは Maxima式として解釈 (interpret)されない特殊キーワードです。 キーワードコマンドはブレイクプロンプトではできませんが、 Maximaプロンプトやデバッガープロンプトで入力できます。 キーワードコマンドはコロン ':'で始まります。 例えば Lisp形を評価するには :lispの後に評価される形式をタイプします。

 
(%i1) :lisp (+ 2 3)
5

取られる引数の数は特定のコマンドに依存します。 コマンド全体をタイプする必要はありません、ただブレイクキーワードの中で唯一であれば十分です。 例えば :br:breakのために十分です。

キーワードコマンドは以下にリストされます。

:break F n

関数 Fの中に関数の頭から行オフセット nで ブレイクポイントを設定します。 もし Fが文字列として与えられたら、 ファイルと仮定され nはファイルの頭からのオフセットです。 オフセットはオプションです。 もし与えられないなら、ゼロと仮定されます。 (関数かファイルの最初の行。)

:bt

スタックフレームのバックトレイスを印字します。

:continue

計算を継続します。

:delete

指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントを削除します。

:disable

指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントをディセーブルにします。

:enable

指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントをイネーブルにします。

:frame n

スタックフレーム nを、もし指定されないなら現在のフレームを印字します。

:help

デバッガーコマンドに関するヘルプを印字します。 もし指定されないならコマンドすべてのヘルプを印字します。

:info

項目についての情報を印字します。

:lisp some-form

some-formを Lisp形式として評価します。

:lisp-quiet some-form

Lisp形式 some-formを出力せずに評価します。

:next

:nextは関数コールをステップオーバーする点を除いて、 :stepのようなものです。

:quit

計算を完了せずに現在のデバッガーレベルから抜けます。

:resume

計算を継続します。

:step

次のソースー行に至るまで計算を継続します。

:top

計算を完了せずに(任意のデバッガーレベルから) Maximaプロンプトに戻ります。

Categories:  Debugging


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.3 Functions and Variables for Debugging

オプション変数: debugmode

デフォルト値: false

もし debugmodetrueなら、 Maximaのエラーが起こった時 Maximaはデバッガーを開始します。 ユーザーはコールバックを検査したり、ブレイクポイントを設定したり、 Maximaコードをステップ実行したりなどコマンドを入力することができます。 デバッガーコマンドのリストに関しては debuggingを参照してください。

debugmodeをイネーブルにしても Lispのエラーは捕らえられません。

Categories:  Debugging · Global flags

オプション変数: refcheck

デフォルト値: false

refchecktrueの時、 Maximaは計算の中で、バイドされた変数が最初に使われる度にメッセージを印字します。

オプション変数: setcheck

デフォルト値: false

もし setcheckが(添字付きでもよい)変数のリストに設定されているなら、 Maximaは変数またはそれらの添字付き出現が通常の割り当て演算子 :::割り当て演算子や関数引数バインドでバインドされた時 (しかし関数割り当て :=やマクロ割り当て ::=演算子でバインドされた時以外)はいつでもメッセージを印字します。 メッセージは変数名とバインドされた値から構成されます。

setcheckは、 alltrueに設定することができ、それによってすべての変数を含みます。

setcheckの新しい要素のそれぞれは、 チェックする変数の新しいリストを確立し、以前 setcheckに割り当てられたいかなる変数も忘れます。

もし自身以外の何かに評価されるなら、 setcheckに割り当てられた名前はクォートしなければいけません。 例えばもし x, y, zが既にバインドされているなら、 チェックする変数のリストに置くには、

 
setcheck: ['x, 'y, 'z]$

をタイプしてください。

setcheckリスト上の変数が、例えば X: 'Xのようにそれ自身に割り当てられた時はなにも印字されません。

Categories:  Console interaction · Global flags

オプション変数: setcheckbreak

デフォルト値: false

setcheckbreaktrueの時、 setcheckリスト上の変数が新しい値を割り当てられた時はいつでも Maximaはブレイクプロンプトを出します。 ブレイクは割り当てが実行される前に起こります。 この時点で setvalが変数が割り当てられようとしている値を保持します。 なので setvalに割り当てることで違う値を割り当てることができます。

setchecksetvalも参照してください。

Categories:  Console interaction · Global flags

システム変数: setval

setcheckbreakが起こった時、変数が設定されようとしている値を保持します。 なので setvalに割り当てることで、違う値を割り当てることができます。

setchecksetcheckbreakも参照してください。

関数: timer (f_1, …, f_n)  
    timer (all)  
    timer ()

timerは、タイミング統計が収集される関数のリストに与えられた関数 f_1, …, f_nそれぞれを入れます。 timer(f)$ timer(g)$はリストに fを入れ、その後 gを入れます; リストはあるコールから次へ累積されます。

timer(all)は、計測される関数のリストに (グローバル変数 functionsで指名されたように) ユーザー定義関数すべてを入れます。

引数なしでは timerは計測される関数のリストを返します。

Maximaは、計測される関数のリストに関して、 関数それぞれを実行するのに費やされる時間を記録します。 timer_infoはタイミング統計を返します。 関数コール毎に経過した平均時間、コール回数、総経過時間を含みます。 untimerは計測される関数のリストから関数を削除します。

timerは引数をクォートします。 f(x) := x^2$ g:f$ timer(g)$fをタイマーリストに入れません。

もし trace(f)が有効なら timer(f)は有効ではないです; tracetimerが同時に有効にはできません。

timer_devalueも参照してください。

Categories:  Debugging

関数: untimer (f_1, …, f_n)  
    untimer ()

untimerはタイマーリストから与えられた関数 f_1, …, f_nそれぞれを削除します。

引数なしの時、untimerは、現在タイマーリスト上にある関数すべてを削除します。

untimer (f)を実行した後、 timer_info() (引数なし)は 現在タイマーリスト上にない関数についての情報を返さないけれども、 timer_info (f)は以前に集計されたタイミング統計を返します。 timer (f)はタイミング統計すべてをゼロに再設定し、 fをタイマーリストに再び入れます。

Categories:  Debugging

オプション変数: timer_devalue

デフォルト値: false

timer_devaluetrueの時、 Maximaは計られる関数から他の計測される関数で費やされた時間を引きます。 そうでないなら、関数それぞれについて報告された時間は 他の関数で計測される時間を含みます。 計測されない関数で費やされた時間は総時間から引かれないことに注意してください。

timertimer_infoも参照してください。

Categories:  Debugging · Global flags

関数: timer_info (f_1, ..., f_n)  
    timer_info ()

関数 f_1, ..., f_nが与えられると、 timer_infoは関数それぞれのタイミング情報を含む行列を返します。 引数なしでは、 timer_infoは現在タイマーリスト上の関数すべてについてのタイミング情報を返します。 timer_infoが返す行列は、関数名、関数コール毎の時間、関数コールの回数、総時間、 gctimeを含みます。 gctimeは元の Macymaの「ガーベッジコレクション時間」を意味しましたが、今はいつもゼロです。

timer_infoが戻り値を構成するデータは、 get関数でも得ることができます:

 
get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);

timerも参照してください。

Categories:  Debugging

関数: trace (f_1, …, f_n)  
    trace (all)  
    trace ()

関数 f_1, …, f_nが与えられると、 traceは、 それらの関数がコールされたときはいつでも デバッグ情報を印字するよう Maximaに指示します。 trace(f)$ trace(g)$は、トレースする関数のリストに fを入れ、それからgを入れます; リストは1回のコールから次へ累積します。

trace(all)は(グローバル変数 functionsで指名されたように) ユーザー定義関数すべてをトレースする関数のリストに入れます。

引数なしでは、 traceは現在トレースする関数すべてのリストを返します。

untrace関数はトレースをディセーブルします。 trace_optionsも参照してください。

traceは引数をクォートします。 例えば f(x) := x^2$ g:f$ trace(g)$fをトレースリストに入れません。

関数が再定義された時、タイマーリストから削除されます。 例えば timer(f)$ f(x) := x^2$の後、 関数 fはもはやタイマーリストにありません。

もし timer (f)が有効なら、 trace (f)は有効ではありません; tracetimerは同じ関数で同時には有効にできません。

Categories:  Debugging

関数: trace_options (f, option_1, …, option_n)  
    trace_options (f)

関数 fについてトレースオプションを設定します。 いかなる以前のオプションも破棄されます。 trace_options (f, ...)は、 もし (trace_optionsの前でも後でも). trace (f)もコールされないなら、有効になりません。

trace_options (f)はオプションすべてをデフォルト値に再設定します。

オプションキーワードは以下の通りです:

トレースオプションは、2つの形式で指定されます。 オプションキーワード単体の存在は、 オプションを無条件に実行します。 (foo: trueか似た形式を指定することでは、 オプション fooは実行されないことに注意してください; キーワードはクォートする必要はないことにも注意してください。) オプションキーワードを述語論理関数で指定することは、 オプションを述語論理上の条件付きにします。

述語論理関数の引数リストは、いつも [level, direction, function, item]です。 ここで levelは関数の再帰レベルで、 directionenterexitを取り、 functionは関数名であり、 itemは(入るときの)引数リストか(出るときの)戻り値です。

以下は無条件トレースオプションの例です:

 
(%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$

(%i2) trace (ff)$

(%i3) trace_options (ff, lisp_print, break)$

(%i4) ff(3);

以下は述語論理上の条件の breakオプションを持つ同じ関数です:

 
(%i5) trace_options (ff, break(pp))$

(%i6) pp (level, direction, function, item) := block (print (item),
    return (function = 'ff and level = 3 and direction = exit))$

(%i7) ff(6);

Categories:  Debugging

関数: untrace  
    untrace (f_1, …, f_n)  
    untrace ()

untraceは、与えられた関数 f_1, …, f_nについて trace関数でイネーブルされたトレースをディセーブルします。 引数なしでは untraceは関数すべてのトレースをディセーブルします。

untraceはトレースをディセーブルした関数のリストを返します。

Categories:  Debugging


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39. alt-display


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.1 Introduction to alt-display

alt-displayパッケージは、 Maximaが出力を表示する方法を変える手段を提供します。 2002年に *alt-display1d**alt-display2d* Lispフックが Maximaに導入されましたが、 このパッケージの導入まで Maxima REPLから容易にアクセスできませんでした。

パッケージは、代わりの表示関数を定義する汎用の関数と表示関数を設定する別の関数を提供します。 パッケージは、 TeX, Texinfo, XML, Texinfo内の3つの出力フォーマットすべてで出力を生成するカスタマイズされた表示関数も提供します。

以下はサンプルのやり取りです:

 
(%i1) load("alt-display.mac")$
(%i2) set_alt_display(2,tex_display)$

(%i3) x/(x^2+y^2) = 1;
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}=1$$

(%i4) set_alt_display(2,mathml_display)$

(%i5) x/(x^2+y^2) = 1;
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
<mfenced separators=""><msub><mi>%o</mi> <mn>5</mn></msub>
<mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
<mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
<mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
<mn>1</mn> </mfenced> </math>

(%i6) set_alt_display(2,multi_display_for_texinfo)$

(%i7) x/(x^2+y^2) = 1;

@iftex
@tex
\mbox{\tt\red({\it \%o_7}) \black}$${{x}\over{y^2+x^2}}=1$$
@end tex
@end iftex
@ifhtml
@html

<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
<mfenced separators=""><msub><mi>%o</mi> <mn>7</mn></msub>
<mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
<mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
<mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
<mn>1</mn> </mfenced> </math>
@end html
@end ifhtml
@ifinfo
@example
(%o7) x/(y^2+x^2) = 1
@end example
@end ifinfo

もし代わりの表示関数がエラーを起こしたら、エラーが捕捉され、表示関数はデフォルトの表示にリセットされます。 以下の例では、出力を表示するように関数 errorを設定します。 これはエラーをスローし、2d表示をデフォルトにリセットすることでエラーをハンドリングします。

 
(%i8) set_alt_display(2,?error)$

(%i9) x;

Error in *alt-display2d*.
Messge: Condition designator ((MLABEL) $%O9 $X) is not of type (OR SYMBOL STRING
                                                             FUNCTION).
*alt-display2d* reset to nil.
 -- an error. To debug this try: debugmode(true);

(%i10) x;
(%o10)                                 x


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.2 Functions and Variables for alt-display

関数: define_alt_display (function(input), expr)

この関数は defineに似ています: 引数を評価し、関数定義に展開します。 functionは、入力(input)が1つの関数です。 Lisp変数名に簡単にアクセスできるように便宜上、代入は評価の後に exprに適用されます。

プロンプトそれぞれでタイムスタンプを設定する:

 
(%i1) load("alt-display.mac")$

(%i2) display2d:false$

(%i3) define_alt_display(time_stamp(x),
                   block([alt_display1d:false,alt_display2d:false],
                         simp:true,
                         prompt_prefix:printf(false,"~a~%",timedate()),
                         displa(x)));

(%o3) time_stamp(x):=block([simp:false],
                 block([?\*alt\-display1d\*:false,?\*alt\-display2d\*:false],
                       simp:true,
                       ?\*prompt\-prefix\*:printf(false,"~a~%",timedate()),
                       ?displa(x)))
(%i4) set_alt_display(1,time_stamp);

(%o4) done
2016-10-03 09:49:27-05:00
(%i5)

入力行 %i3は、 define_alt_displayを使って time_stampを定義しています。 出力行 %o3は、 displa?displa(表示関数)に置き換えられるのと同様に Maxima変数名 alt_display1d, alt_display2d, prompt_prefixがそれらのLisp解釈に置き換わっていることを示しています。

表示変数 alt_display1d, alt_display2dは、 displa内で無限再帰を抑制するために time_stampの本体の中で両方 falseに束縛されます。

Categories:  Package alt-display

関数: info_display (form)

これはデフォルトの1-d 表示関数のエーリアスです。 代わりの1-dか2-d表示間数として使えます。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2,info_display);

(%o2) done
(%i3) x/y;

(%o3) x/y

Categories:  Package alt-display

関数: mathml_display (form)

MathML出力を生成します。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2,mathml_display);
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
 <mfenced separators=""><msub><mi>%o</mi> <mn>2</mn></msub>
 <mo>,</mo><mi>done</mi> </mfenced> </math>

Categories:  Package alt-display

関数: tex_display (form)

TeX出力を生成します。

 
(%i2) set_alt_display(2,tex_display);
\mbox{\tt\red({\it \%o_2}) \black}$$\mathbf{done}$$
(%i3) x/(x^2+y^2);
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$

Categories:  Package alt-display

関数: multi_display_for_texinfo (form)

3つの表示関数すべてを使ってTexinfo出力を生成します。

 
(%i2) set_alt_display(2,multi_display_for_texinfo)$

(%i3) x/(x^2+y^2);

@iftex
@tex
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$
@end tex
@end iftex
@ifhtml
@html

   <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
   <mfenced separators=""><msub><mi>%o</mi> <mn>3</mn></msub>
   <mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
   <mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
   <mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> </mfenced> </math>
@end html
@end ifhtml
@ifinfo
@example
(%o3) x/(y^2+x^2)
@end example
@end ifinfo

Categories:  Package alt-display

関数: reset_displays ()

プロンプトプレフィックスとサフィックスを空の文字列にリセットし、 1-dと2-d表示関数を両方デフォルトに設定します。

Categories:  Package alt-display

関数: set_alt_display (num, display-function)

入力 numは設定される表示です: 1もしくは2です。 2番目の入力 display-functionは使われる表示関数です。 表示関数は Maxima関数か lambda式のいずれかです。

以下は表示関数が lambda式の例です; ただ TeXとして結果を表示します。

 
(%i1) load("alt-display.mac")$

(%i2) set_alt_display(2, lambda([form], tex(?caddr(form))))$

(%i3) integrate(exp(-t^2),t,0,inf);
$${{\sqrt{\pi}}\over{2}}$$

ユーザー定義の表示関数は、出力を 印刷するように気をつけなければいけません。 文字列を返す表示関数は何も表示しないように見え、エラーも起こしません。

Categories:  Package alt-display

関数: set_prompt (fix, expr)

プロンプトプレフィックスかサフィックスを exprに設定します。 入力 fixは、 prefix, suffix, general, prolog, epilogのいずれか1つに評価されなければいけません。 exprは文字列もしくは falseに評価されなければいけません; もし falseなら、 fixはデフォルト値にリセットされます。

 
(%i1) load("alt-display.mac")$
(%i2) set_prompt('prefix,printf(false,"It is now: ~a~%",timedate()))$

It is now: 2014-01-07 15:23:23-05:00
(%i3)

以下の例は、 prologを除くそれぞれのオプションの効果を示します。 epilogプロンプトは Maximaが閉めるように印刷されることに注意してください。 入力行が $で終了しない限り、generalが入力の終わりと出力の間に印刷されます。

以下はプロンプト文字列が置かれる場所を示す例です。

 
(%i1) load("alt-display.mac")$

(%i2) set_prompt(prefix,"<<prefix>> ",suffix,"<<suffix>> ",general,
           printf(false,"<<general>>~%"),epilog,printf(false,"<<epilog>>~%"));

(%o2)                                done
<<prefix>> (%i3) <<suffix>> x/y;
<<general>>
                                       x
(%o3)                                  -
                                       y
<<prefix>> (%i4) <<suffix>> quit();
<<general>>
<<epilog>>

以下は、 Maximaが、端末か、Emacs(8)のような端末エミュレータ内で走っている時、 入力と出力を群生化させる方法を示す例です。

figures/color_terminal

それぞれのプロンプト文字列は ASCIIエスケープ文字 (27) で始まり、開カギ括弧 (91)が続きます; それぞれの文字列は小文字のm (109) で終わります。 ウェブページ http://misc.flogisoft.com/bash/tip_colors_and_formattinghttp://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html は 端末の色を設定するために制御文字列を使う方法に関して情報を提供します。

Categories:  Package alt-display


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40. asympa


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40.1 Introduction to asympa

関数: asympa

asympaは漸近解析パッケージです。 パッケージは、 複雑性解析と数値解析で広く使われている "ビッグ O"と "リトル o"関数を含む漸近解析のための式整理関数を含みます。

load ("asympa")はこのパッケージをロードします。

Categories:  Package asympa


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40.2 Functions and variables for asympa


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

41. augmented_lagrangian


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

41.1 Functions and Variables for augmented_lagrangian

関数: augmented_lagrangian_method  
    augmented_lagrangian_method (FOM, xx, C, yy)  
    augmented_lagrangian_method (FOM, xx, C, yy, optional_args)  
    augmented_lagrangian_method ([FOM, grad], xx, C, yy)   制約 Cをゼロに保ちながら、式 FOMの変数 xxに関する近似最小を返します。

yyxxの初期推量のリストです。 利用した方法は拡張 Lagrange法です。(文献[1]と[2]を参照してください。)

もしgradが存在するなら、 それは FOMxxに関するグラディエントであり、 xxの変数それぞれに関する式のリストとして表されます。 もし存在ないなら、グラディエントは自動的に構成されます。

FOMと、もし gradが存在するならその要素それぞれは、 関数名やラムダ式ではなく、通常の式でなければいけません。

optional_argssymbol = valueとして指定される追加の引数を表します。 認識するオプション引数は以下の通りです:

niter

拡張 Lagrangeアルゴリズムの繰り返しの回数

lbfgs_tolerance

LBFGSに供給される許容誤差

iprint

LBFGSに供給される IPRINTパラメータ(メッセージ出力を制御する2つの整数のリスト)

%lambda

拡張 Lagrangeを計算するために使われる %lambdaの初期値

この実装は 擬似 Newtonアルゴリズムであるメモリ制限付きBFGS (LBFGS)アルゴリズムを適用することで 拡張 Lagrangeを最小化します。

load("augmented_lagrangian")はこの関数をロードします。

lbfgsも参照してください。

参考文献:

[1] http://www-fp.mcs.anl.gov/otc/Guide/OptWeb/continuous/constrained/nonlinearcon/auglag.html

[2] http://www.cs.ubc.ca/spider/ascher/542/chap10.pdf

例:

 
(%i1) load ("lbfgs");
(%o1)  /home/gunter/src/maxima-code/share/lbfgs/lbfgs.mac
(%i2) load ("augmented_lagrangian");
(%o2) /home/gunter/src/maxima-code/share/contrib/augmented_lagra\
ngian.mac
(%i3) FOM: x^2 + 2*y^2;
                               2    2
(%o3)                       2 y  + x
(%i4) xx: [x, y];
(%o4)                        [x, y]
(%i5) C: [x + y - 1];
(%o5)                      [y + x - 1]
(%i6) yy: [1, 1];
(%o6)                        [1, 1]
(%i7) augmented_lagrangian_method(FOM, xx, C, yy, iprint=[-1,0]);
(%o7) [[x = 0.666659841080023, y = 0.333340272455448],
                                 %lambda = [- 1.333337940892518]]

前と同じ例ですが、今回はグラディエントが引数として供給されます。

 
(%i1) load ("lbfgs")$
(%i2) load ("augmented_lagrangian")$
(%i3) FOM: x^2 + 2*y^2;
                               2    2
(%o3)                       2 y  + x
(%i4) xx: [x, y];
(%o4)                        [x, y]
(%i5) grad : [2*x, 4*y];
(%o5)                      [2 x, 4 y]
(%i6) C: [x + y - 1];
(%o6)                      [y + x - 1]
(%i7) yy: [1, 1];
(%o7)                        [1, 1]
(%i8) augmented_lagrangian_method ([FOM, grad], xx, C, yy,
                             iprint = [-1, 0]);
(%o8) [[x = 0.6666598410800247, y = 0.3333402724554464],
                                 %lambda = [- 1.333337940892525]]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42. Bernstein


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42.1 Functions and Variables for Bernstein

関数: bernstein_poly (k, n, x)

kが負の整数でないと仮定すると、 Bernstein多項式は bernstein_poly(k,n,x) = binomial(n,k) x^k (1-x)^(n-k)で定義されます; 負の整数 kに対してはBernstein多項式 bernstein_poly(k,n,x)はゼロです。 knのどちらかが非整数の時、オプション変数 bernstein_explicitは Bernstein多項式の明示形式への展開を制御します。 例:

 
(%i1) load(bernstein)$

(%i2) bernstein_poly(k,n,x);
(%o2)                bernstein_poly(k, n, x)
(%i3) bernstein_poly(k,n,x), bernstein_explicit : true;
                                       n - k  k
(%o3)            binomial(n, k) (1 - x)      x

Bernstein多項式は gradefプロパティと integrateプロパティの両方を持ちます:

 
(%i4) diff(bernstein_poly(k,n,x),x);
(%o4) (bernstein_poly(k - 1, n - 1, x)
                                 - bernstein_poly(k, n - 1, x)) n
(%i5) integrate(bernstein_poly(k,n,x),x);
(%o5)
                                                            k + 1
 hypergeometric([k + 1, k - n], [k + 2], x) binomial(n, k) x
 ----------------------------------------------------------------
                              k + 1

実数と複素数両方の数値入力に対して Bernstein多項式は数値結果に評価されます:

 
(%i6) bernstein_poly(5,9, 1/2 + %i);
                        39375 %i   39375
(%o6)                   -------- + -----
                          128       256
(%i7) bernstein_poly(5,9, 0.5b0 + %i);
(%o7)           3.076171875b2 %i + 1.5380859375b2

bernstein_polyを使うには、最初に load("bernstein")

変数: bernstein_explicit

デフォルト値: false

knのどちらかが非整数の時、オプション変数 bernstein_explicitは Bernstein多項式の明示形式への展開を制御します; 例えば:

 
(%i1) bernstein_poly(k,n,x);
(%o1)                bernstein_poly(k, n, x)
(%i2) bernstein_poly(k,n,x), bernstein_explicit : true;
                                       n - k  k
(%o2)            binomial(n, k) (1 - x)      x

knの両方が明示的に整数の時、 bernstein(k,n,x)いつも明示形式に展開されます。

関数: multibernstein_poly ([k1,k2,…, kp], [n1,n2,…, np], [x1,x2,…, xp])

多重 Bernstein多項式 multibernstein_poly ([k1, k2, ..., kp], [n1, n2, ..., np], [x1, x2, ..., xp])は Bernstein多項式 bernstein_poly(k1, n1, x1) bernstein_poly(k2, n2, x2) ... bernstein_poly(kp, np, xp)の積です。

multibernstein_polyを使うには、最初に load("bernstein")してください。

関数: bernstein_approx (f, [x1, x1, …, xn], n)

関数 (x1, x2, ..., xn) |--> fn次の一様 Bernstein多項式近似を返します。

 
(%i1) bernstein_approx(f(x),[x], 2);
                 2       1                          2
(%o1)      f(1) x  + 2 f(-) (1 - x) x + f(0) (1 - x)
                         2
(%i2) bernstein_approx(f(x,y),[x,y], 2);
               2  2       1                2
(%o2) f(1, 1) x  y  + 2 f(-, 1) (1 - x) x y
                          2
                  2  2          1   2
 + f(0, 1) (1 - x)  y  + 2 f(1, -) x  (1 - y) y
                                2
       1  1                               1         2
 + 4 f(-, -) (1 - x) x (1 - y) y + 2 f(0, -) (1 - x)  (1 - y) y
       2  2                               2
            2        2       1                      2
 + f(1, 0) x  (1 - y)  + 2 f(-, 0) (1 - x) x (1 - y)
                             2
                  2        2
 + f(0, 0) (1 - x)  (1 - y)

bernstein_approxを使うには、最初に load("bernstein")してください。

関数: bernstein_expand (e, [x1, x1, …, xn])

多項式 eを多変数 Bernstein多項式の線形結合として厳密に表します。

 
(%i1) bernstein_expand(x*y+1,[x,y]);
(%o1)    2 x y + (1 - x) y + x (1 - y) + (1 - x) (1 - y)
(%i2) expand(%);
(%o2)                        x y + 1

一番目の引数が多項式でない時 Maximaはエラーをシグナルします。

bernstein_expandを使うには、最初に load("bernstein")してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

43. bitwise

パッケージ bitwiseは整数定数のビット操作を可能にする関数を提供します。 通常通り、知られているかもしれない変数の属性を考慮してもし定数の実際の値が未知なら、 maximaは演算の結果を整理しようとします。 declareメカニズムを参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

43.1 Functions and Variables for bitwise

関数: bit_not (int)

符号付き整数のすべてのビットを反転させます。 この操作の結果は -int - 1です。

 
(%i1) load("bitwise")$
(%i2) bit_not(i);
(%o2)                      bit_not(i)
(%i3) bit_not(bit_not(i));
(%o3)                           i
(%i4) bit_not(3);
(%o4)                          - 4
(%i5) bit_not(100);
(%o5)                         - 101
(%i6) bit_not(-101);
(%o6)                          100

関数: bit_and (int1, ...)

この関数は、2つ以上の符号付き整数のビット毎の andを計算します。

 
(%i1) load("bitwise")$
(%i2) bit_and(i,i);
(%o2)                           i
(%i3) bit_and(i,i,i);
(%o3)                           i
(%i4) bit_and(1,3);
(%o4)                           1
(%i5) bit_and(-7,7);
(%o5)                           1

もし bit_andのパラメータの1つが偶数かどうかわかっているなら、 関数はこの情報を考慮します。

 
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd);
(%o2)                         done
(%i3) bit_and(1,e);
(%o3)                           0
(%i4) bit_and(1,o);
(%o4)                           1

関数: bit_or (int1, ...)

この関数は2つ以上の符号付き整数のビット毎の orを計算します。

 
(%i1) load("bitwise")$
(%i2) bit_or(i,i);
(%o2)                           i
(%i3) bit_or(i,i,i);
(%o3)                           i
(%i4) bit_or(1,3);
(%o4)                           3
(%i5) bit_or(-7,7);
(%o5)                          - 1

もし bit_orのパラメータの1つが偶数かどうかわかっているなら、 関数はこの情報を考慮します。

 
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd);
(%o2)                         done
(%i3) bit_or(1,e);
(%o3)                         e + 1
(%i4) bit_or(1,o);
(%o4)                           o

関数: bit_xor (int1, ...)

この関数は2つ以上の符号付き整数のビット毎の xorを計算します。

 
(%i1) load("bitwise")$
(%i2) bit_xor(i,i);
(%o2)                           0
(%i3) bit_xor(i,i,i);
(%o3)                           i
(%i4) bit_xor(1,3);
(%o4)                           2
(%i5) bit_xor(-7,7);
(%o5)                          - 2

もし bit_xorのパラメータの1つが偶数かどうかわかっているなら、 関数はこの情報を考慮します。

 
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd);
(%o2)                         done
(%i3) bit_xor(1,e);
(%o3)                         e + 1
(%i4) bit_xor(1,o);
(%o4)                         o - 1

関数: bit_lsh (int, nBits)

この関数は符号付き整数 intのすべてのビットを nBitsだけ左へシフトさせます。 この操作で整数の幅は nBitsだけ拡張されます。 なので、bit_lshの結果は int * 2です(原文に従う)。

 
(%i1) load("bitwise")$
(%i2) bit_lsh(0,1);
(%o2)                           0
(%i3) bit_lsh(1,0);
(%o3)                           1
(%i4) bit_lsh(1,1);
(%o4)                           2
(%i5) bit_lsh(1,i);
(%o5)                     bit_lsh(1, i)
(%i6) bit_lsh(-3,1);
(%o6)                          - 6
(%i7) bit_lsh(-2,1);
(%o7)                          - 4

関数: bit_rsh (int, nBits)

この関数は符号付き整数 intのすべてのビットを nBitsだけ右へシフトさせます。 この操作で整数の幅は nBitsだけ減らされます。

 
(%i1) load("bitwise")$
(%i2) bit_rsh(0,1);
(%o2)                           0
(%i3) bit_rsh(2,0);
(%o3)                           2
(%i4) bit_rsh(2,1);
(%o4)                           1
(%i5) bit_rsh(2,2);
(%o5)                           0
(%i6) bit_rsh(-3,1);
(%o6)                          - 2
(%i7) bit_rsh(-2,1);
(%o7)                          - 1
(%i8) bit_rsh(-2,2);
(%o8)                          - 1

関数: bit_length (int)

変数が数 intを保持するために何ビット長必要か調べます。 この関数は正整数上のみに演算します。

 
(%i1) load("bitwise")$
(%i2) bit_length(0);
(%o2)                           0
(%i3) bit_length(1);
(%o3)                           1
(%i4) bit_length(7);
(%o4)                           3
(%i5) bit_length(8);
(%o5)                           4

関数: bit_onep (int, nBit)

符号付き整数 intでビット nBitがセットされているかどうか調べます。

 
(%i1) load("bitwise")$
(%i2) bit_onep(85,0);
(%o2)                         true
(%i3) bit_onep(85,1);
(%o3)                         false
(%i4) bit_onep(85,2);
(%o4)                         true
(%i5) bit_onep(85,3);
(%o5)                         false
(%i6) bit_onep(85,100);
(%o6)                         false
(%i7) bit_onep(i,100);
(%o7)                   bit_onep(i, 100)

符号付き数では、符号ビットは2の補数相当です。 (原文: For signed numbers the sign bit is interpreted to be more than nBit to the left of the leftmost bit of int that reads 1.)

 
(%i1) load("bitwise")$
(%i2) bit_onep(-2,0);
(%o2)                         false
(%i3) bit_onep(-2,1);
(%o3)                         true
(%i4) bit_onep(-2,2);
(%o4)                         true
(%i5) bit_onep(-2,3);
(%o5)                         true
(%i6) bit_onep(-2,4);
(%o6)                         true

もしテストする数が偶数かどうかわかっているなら、 関数はこの情報を考慮します。

 
(%i1) load("bitwise")$
(%i2) declare(e,even,o,odd);
(%o2)                         done
(%i3) bit_onep(e,0);
(%o3)                         false
(%i4) bit_onep(o,0);
(%o4)                         true


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

44. bode


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

44.1 Functions and Variables for bode

関数: bode_gain (H, range, ...plot_opts...)

Bodeのゲイン線図を描く関数。

例 (1から7までは

 
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html,

から、8はRon Crummettから):

 
(%i1) load("bode")$

(%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$

(%i3) bode_gain (H1 (s), [w, 1/1000, 1000])$

(%i4) H2 (s) := 1 / (1 + s/omega0)$

(%i5) bode_gain (H2 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i6) H3 (s) := 1 / (1 + s/omega0)^2$

(%i7) bode_gain (H3 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i8) H4 (s) := 1 + s/omega0$

(%i9) bode_gain (H4 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i10) H5 (s) := 1/s$

(%i11) bode_gain (H5 (s), [w, 1/1000, 1000])$

(%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$

(%i13) bode_gain (H6 (s), [w, 1/1000, 1000]),
                  omega0 = 10, zeta = 1/10$

(%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$

(%i15) bode_gain (H7 (s), [w, 1/1000, 1000]),
                  omega0 = 10, zeta = 1/10$

(%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$

(%i17) bode_gain (H8 (s), [w, 1/1000, 1000])$

この関数を使うためには、最初に load("bode")と書いてください。 bode_phaseも参照してください。

Categories:  Plotting · Package bode

関数: bode_phase (H, range, ...plot_opts...)

Bodeの位相線図を描く関数。

例 (1から7までは

 
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html,

から、8はRon Crummettから):

 
(%i1) load("bode")$

(%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$

(%i3) bode_phase (H1 (s), [w, 1/1000, 1000])$

(%i4) H2 (s) := 1 / (1 + s/omega0)$

(%i5) bode_phase (H2 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i6) H3 (s) := 1 / (1 + s/omega0)^2$

(%i7) bode_phase (H3 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i8) H4 (s) := 1 + s/omega0$

(%i9) bode_phase (H4 (s), [w, 1/1000, 1000]), omega0 = 10$

(%i10) H5 (s) := 1/s$

(%i11) bode_phase (H5 (s), [w, 1/1000, 1000])$

(%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$

(%i13) bode_phase (H6 (s), [w, 1/1000, 1000]),
                   omega0 = 10, zeta = 1/10$

(%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$

(%i15) bode_phase (H7 (s), [w, 1/1000, 1000]),
                   omega0 = 10, zeta = 1/10$

(%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$

(%i17) bode_phase (H8 (s), [w, 1/1000, 1000])$

(%i18) block ([bode_phase_unwrap : false],
              bode_phase (H8 (s), [w, 1/1000, 1000]));

(%i19) block ([bode_phase_unwrap : true],
              bode_phase (H8 (s), [w, 1/1000, 1000]));

この関数を使うためには、最初にload("bode")と書いてください。 bode_gainも参照してください。

Categories:  Plotting · Package bode


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

45. celine


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

45.1 Introduction to celine

シスターCelineの方法のMaxima実装。 Barton Willisがこのコードを書きました。 Creative Commons CC0 licenseの下で公開されています。

Celineの方法は、Marko Petkovsek, Herbert S. Wilf, Doron Zeilberger著 書籍"A=B"の4.1-4.4節に記述があります。 この本は http://www.math.rutgers.edu/~zeilberg/AeqB.pdfで閲覧可能です。

f = F(n,k)とします。 関数celineはFの漸化式の集合を以下の形式で返します。

p_0(n) * fff(n,k) + p_1(n) * fff(n+1,k) + ... + p_p(n) * fff(n+p,k+q),

ここでp_0から p_pは多項式です。 もしMaximaが sum(sum(a(i,j) * F(n+i,k+j),i,0,p),j,0,q) / F(n,k)が nと kの有理関数だとわからなければ、 celineは空集合を返します。 fがパラメータ(nや k以外の変数)を含む時、 celineはこれらのパラメータについて仮定を作るかもしれません。 'proviso'のキーとともに 'put'を使うと、 Maximaは入力ラベルにこれらの仮定を保存します。

この関数を使うには、最初にパッケージ integer_sequence, opsubst, to_poly_solveをロードします。

例:

 
(%i1) load("integer_sequence")$
(%i2) load("opsubst")$
(%i3) load("to_poly_solve")$
(%i4) load("celine")$
(%i5) celine(n!,n,k,1,0);
(%o5)       {fff(n + 1, k) - n fff(n, k) - fff(n, k)}

結果が正しいことの確認:

 
(%i1) load("integer_sequence")$
(%i2) load("opsubst")$
(%i3) load("to_poly_solve")$
(%i4) load("celine")$
(%i5) g1:{fff(n+1,k)-n*fff(n,k)-fff(n,k)};
(%o5)       {fff(n + 1, k) - n fff(n, k) - fff(n, k)}
(%i6) ratsimp(minfactorial(first(g1))),fff(n,k) := n!;
(%o6)                           0

パラメータ付き例(例の結果が正しいというテストを含む):

 
(%i1) load("integer_sequence")$
(%i2) load("opsubst")$
(%i3) load("to_poly_solve")$
(%i4) load("celine")$
(%i5) e : pochhammer(a,k) * pochhammer(-k,n) / (pochhammer(b,k));
                           (a)  (- k)
                              k      n
(%o5)                      -----------
                              (b)
                                 k
(%i6) recur : celine(e,n,k,2,1);
(%o6) {fff(n + 2, k + 1) - fff(n + 2, k) - b fff(n + 1, k + 1)
 + n ((- fff(n + 1, k + 1)) + 2 fff(n + 1, k) - a fff(n, k)
 - fff(n, k)) + a (fff(n + 1, k) - fff(n, k)) + 2 fff(n + 1, k)
    2
 - n  fff(n, k)}
(%i7) /* Test this result for correctness */
(%i8) first(%), fff(n,k) := ''(e)$
(%i9) makefact(makegamma(%))$
(%o9)                           0
(%i10) minfactorial(factor(minfactorial(factor(%))));

provisoデータが、設定 a = bがより低い次数の漸化式を出力することを示します。 以下の例がそれを示します:

 
(%i1) load("integer_sequence")$
(%i2) load("opsubst")$
(%i3) load("to_poly_solve")$
(%i4) load("celine")$
(%i5) e : pochhammer(a,k) * pochhammer(-k,n) / (pochhammer(b,k));
                           (a)  (- k)
                              k      n
(%o5)                      -----------
                              (b)
                                 k
(%i6) recur : celine(e,n,k,2,1);
(%o6) {fff(n + 2, k + 1) - fff(n + 2, k) - b fff(n + 1, k + 1)
 + n ((- fff(n + 1, k + 1)) + 2 fff(n + 1, k) - a fff(n, k)
 - fff(n, k)) + a (fff(n + 1, k) - fff(n, k)) + 2 fff(n + 1, k)
    2
 - n  fff(n, k)}
(%i7) get('%,'proviso);
(%o7)                         false
(%i8) celine(subst(b=a,e),n,k,1,1);
(%o8) {fff(n + 1, k + 1) - fff(n + 1, k) + n fff(n, k)
                                                     + fff(n, k)}


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46. clebsch_gordan


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.1 Functions and Variables for clebsch_gordan

関数: clebsch_gordan (j1, j2, m1, m2, j, m)

Clebsch-Gordan 係数 <j1, j2, m1, m2 | j, m> を計算します。

Categories:  clebsch_gordan

関数: racah_v (a, b, c, a1, b1, c1)

(関連の Clebsch-Gordan 係数を使って計算される) Racah's V 係数を計算します。

Categories:  clebsch_gordan

関数: racah_w (j1, j2, j5, j4, j3, j6)

(Wigner 6j シンボルを使って計算される)Racah's W 係数を計算します。

Categories:  clebsch_gordan

関数: wigner_3j (j1, j2, j3, m1, m2, m3)

(関連の Clebsch-Gordan 係数を使って計算される) Wigner's 3j シンボルを計算します。

Categories:  clebsch_gordan

関数: wigner_6j (j1, j2, j3, j4, j5, j6)

Wigner's 6j シンボルを計算します。

Categories:  clebsch_gordan

関数: wigner_9j (a, b, c, d, e, f, g, h, i, j,)

Wigner's 9j シンボルを計算します。

Categories:  clebsch_gordan


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

47. cobyla


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

47.1 Introduction to cobyla

fmin_cobylaは Powell[1][2][3]による Fortran制約最適化ルーチン COBYLAの (f2clによる) Common Lisp翻訳です。

COBYLAはX上の形式 g(X) >= 0の M個の不等式制約を条件として目的函数 F(X)を最小化します。 ここで Xは N個の成分を持つ変数のベクトルです。

等式制約 g(X)=0は、 よく、不等式制約の組 g(X)>=0と -g(X)>= 0で実装することができます。 Maximaの COBYLAインターフェースは等式制約を受けつけ、内部的に等式制約を不等式制約の組に変換します。

アルゴリズムは目的函数や制約函数の線形近似を用います。 変数空間内の N+1点での線形補間で形成された近似です。 補間点は単体の頂点としてみなされます。 パラメータ RHOは単体のサイズを制御し、 RHOBEGから EHOENDに自動的に減らされます。 それぞれの RHOで、サブルーチンは現在のサイズにとって変数の良いベクトルを達成しようとし、 そして、 RHOは値 RHOENDに達するまで減らされます。 それゆえに、 RHOBEGと RHOENDはそれぞれ、変数への合理的な初期変化と変数に要求される精度に 設定されるべきですが、 この精度は保証はないので、実験の対象として見るべきです。 変数の変化を計算する時、ルーチンは制約を単一のペナルティ函数にひとまとめにせずに、 制約それぞれを個別に扱います。 サブルーチン名は the phrase Constrained Optimization BY Linear Approximations (線形近似による位相制約下最適化)に由来します。

参考文献:

[1] Fortran Codeはhttp://plato.asu.edu/sub/nlores.html#generalから

[2] M. J. D. Powell, "A direct search optimization method that models the objective and constraint functions by linear interpolation," in Advances in Optimization and Numerical Analysis, eds. S. Gomez and J.-P. Hennart (Kluwer Academic: Dordrecht, 1994), p. 51-67.

[3] M. J. D. Powell, "Direct search algorithms for optimization calculations," Acta Numerica 7, 287-336 (1998). Also available as University of Cambridge, Department of Applied Mathematics and Theoretical Physics, Numerical Analysis Group, Report NA1998/04 from http://www.damtp.cam.ac.uk/user/na/reports.html

Categories:  Numerical methods · Optimization · Share packages · Package cobyla


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

47.2 Functions and Variables for cobyla

関数: fmin_cobyla  
    fmin_cobyla (F, X, Y)  
    fmin_cobyla (F, X, Y, optional_args)

オプションの制約の組を条件として多変数 Xに関する式 Fの近似的最小を返します。 YXに対する初期推測のリストです。

Fは関数名やラムダ式ではなく、通常の式でなければいけません。

optional_argsは、 symbol = valueのように指定される付加的な引数を表します。 認識されるオプションの引数は以下の通りです:

constraints

Xが満たさなければいけない不等式と等式の制約のリスト。 不等式制約は、形式 g(X) >= h(X)もしくは g(X) <= h(X)の実際の不等式でなければいけません。 等式制約は形式 g(X) = h(X)のものでなければいけません。

rhobeg

単体のサイズを制御する内部 RHO変数の初期値(デフォルトは 1.0)。

rhoend

要望される最終値 rhoパラメータ。 近似的に変数の精度です。(デフォルトは 1d-6)

iprint

冗長な出力レベル(デフォルトは 0)。

  • 0 - 出力なし
  • 1 - 計算終了時にまとめ
  • 2 - 変数のベクトルや RHOが減らされる時のある函数情報と一緒に、 RHOと SIGMAのそれぞれの新しい値が印字されます。
  • 3 - 2と同様ですが、 F(X)が計算される時情報が印字されます。
maxfun

函数評価の最大回数(デフォルトは 1000)。

戻る時、ベクトルを返します:

  1. 最小を与える変数の値。 これは Xの中にリストされた変数のそれぞれに関する形式 var = valueの要素のリストです。
  2. 最小化された函数値
  3. 函数評価の回数
  4. 以下の意味を持つリターンコード
    1. 0 - エラーなし。
    2. 1 - 函数評価の最大回数の上限に到達した。
    3. 2 - 進行を妨げる丸め誤差。

load(fmin_cobyla)はこの関数をロードします。

関数: bf_fmin_cobyla  
    bf_fmin_cobyla (F, X, Y)  
    bf_fmin_cobyla (F, X, Y, optional_args)

この関数は、多倍長浮動小数点演算が使われること、 rhoendのデフォルト値が 10^(fpprec/2)であることを除いて、 fmin_cobylaと同一です。

更に知るには fmin_cobylaを参照してください。

load(bf_fmin_cobyla)はこの関数をロードします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

47.3 Examples for cobyla

x1*x2を 1-x1^2-x2^2 >= 0の条件で最小化します。 理論的解は x1 = 1/sqrt(2), x2 = -1/sqrt(2)です。

 
(%i1) load(fmin_cobyla)$
(%i2) fmin_cobyla(x1*x2, [x1, x2], [1,1],
                  constraints = [x1^2+x2^2<=1], iprint=1);
   Normal return from subroutine COBYLA

   NFVALS =   66   F =-5.000000E-01    MAXCV = 1.999845E-12
   X = 7.071058E-01  -7.071077E-01
(%o2) [[x1 = 0.70710584934848, x2 = - 0.7071077130248],
       - 0.49999999999926, [[-1.999955756559757e-12],[]], 66]

追加の例は share/cobyla/exディレクトリにあります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48. contrib_ode


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.1 Introduction to contrib_ode

Maximaの常微分方程式 (ODE)ソルバ ode2は一階と二階の初等線形 ODEを解きます。 関数 contrib_odeは線形と非線形一階 ODEと線形斉次二階 ODEに関する追加の方法で ode2を拡張します。 コードはまだ開発中で、コールの順序は将来のリリースで変わるかもしれません。 一旦コードが安定化したら、投稿ディレクトリから移して Maximaに統合されるかもしれません。

このパッケージは、使用前にコマンド load('contrib_ode)でロードしなければいけません。

contrib_odeのコール取り決めは ode2と同一です。 3つの引数を取ります: ODE (右辺が 0なら左辺だけでもいいです)、 従属変数、独立変数。 成功した時、解のリストを返します。

解の形式は ode2と異なります。 非線形方程式は複数解を持つので、 contrib_odeは解のリストを返します。 解それぞれは複数の形式を持ちます:

%cは一階方程式の積分定数を表すのに使われます。 %k1%k2は二階方程式の定数を表すのに使われます。 もし contrib_odeがいかなる理由でも解を得られないなら、 たぶんエラーメッセージを印字した後 falseを返します。

一階非線形 ODEは複数解を持ち得るので、解のリストを返す必要があります。 例えば:

 
(%i1) load('contrib_ode)$
(%i2) eqn:x*'diff(y,x)^2-(1+x*y)*'diff(y,x)+y=0;
                    dy 2             dy
(%o2)            x (--)  - (1 + x y) -- + y = 0
                    dx               dx
(%i3) contrib_ode(eqn,y,x);
                    dy 2             dy
(%t3)            x (--)  - (1 + x y) -- + y = 0
                    dx               dx

              first order equation not linear in y'

                                             x
(%o3)             [y = log(x) + %c, y = %c %e ]
(%i4) method;
(%o4)                        factor

以下の例の二番目の解のように、 非線形ODEは積分定数を持たない特異解を持ち得ます:

 
(%i1) load('contrib_ode)$
(%i2) eqn:'diff(y,x)^2+x*'diff(y,x)-y=0;
                       dy 2     dy
(%o2)                 (--)  + x -- - y = 0
                       dx       dx
(%i3) contrib_ode(eqn,y,x);
                       dy 2     dy
(%t3)                 (--)  + x -- - y = 0
                       dx       dx

              first order equation not linear in y'

                                           2
                                 2        x
(%o3)              [y = %c x + %c , y = - --]
                                          4
(%i4) method;
(%o4)                       clairault

以下の ODEはダミー変数 %tを使った2つのパラメトリック解を持ちます。 この場合、パラメトリック解を操作して陽解を与えることができます。

 
(%i1) load('contrib_ode)$
(%i2) eqn:'diff(y,x)=(x+y)^2;
                          dy          2
(%o2)                     -- = (x + y)
                          dx
(%i3) contrib_ode(eqn,y,x);
(%o3) [[x = %c - atan(sqrt(%t)), y = (- x) - sqrt(%t)],
                     [x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]]
(%i4) method;
(%o4)                       lagrange

以下の例 (Kamke 1.112)は陰解を例示します。

 
(%i1) load('contrib_ode)$
(%i2) assume(x>0,y>0);
(%o2)                    [x > 0, y > 0]
(%i3) eqn:x*'diff(y,x)-x*sqrt(y^2+x^2)-y;
                     dy           2    2
(%o3)              x -- - x sqrt(y  + x ) - y
                     dx
(%i4) contrib_ode(eqn,y,x);
                                  y
(%o4)                  [x - asinh(-) = %c]
                                  x
(%i5) method;
(%o5)                          lie

以下の Riccati方程式は 変数 %uに関する線形二階 ODEに変換されます。 Maximaは新しい ODEを解くことができません。 なので未評価で返します。

 
(%i1) load('contrib_ode)$
(%i2) eqn:x^2*'diff(y,x)=a+b*x^n+c*x^2*y^2;
                    2 dy      2  2      n
(%o2)              x  -- = c x  y  + b x  + a
                      dx
(%i3) contrib_ode(eqn,y,x);
               d%u
               ---                            2
               dx        2  a       n - 2    d %u
(%o3)  [[y = - ----, %u c  (-- + b x     ) + ---- c = 0]]
               %u c          2                 2
                            x                dx
(%i4) method;
(%o4)                        riccati

一階 ODEに対して contrib_odeode2をコールします。 その後、以下の方法を試します: 因数分解、Clairault, Lagrange, Riccati, Abel, Lie対称性を使った方法。 もし Abel方法が失敗したら、 Lie方法は Abel方程式には試みられませんが、 もし Riccati方法が未解決二階 ODEを返したら、 Lie方法が試みられます。

二階 ODEに対して contrib_odeode2をコールし、その後 odelinをコールします。

もしコマンド put('contrib_ode,true,'verbose)を実行したら 長いデバッグトレースとメッセージが表示されます。

Categories:  Differential equations · Share packages · Package contrib_ode


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.2 Functions and Variables for contrib_ode

関数: contrib_ode (eqn, y, x)

独立変数 xと従属変数 yに関する ODE eqnの解のリストを返します。

Categories:  Package contrib_ode

関数: odelin (eqn, y, x)

odelinは独立変数 xと従属変数 yに関する一階および二階線形斉次 ODEを解きます。 ODEの基本的な解一式を返します。

二階 ODEに対して odelinは、与えられた特殊関数を使って解を探索する Bronsteinと Lafailleによる方法を使います。

 
(%i1) load('contrib_ode)$
(%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x);
       gauss_a(- 6, - 2, - 3, - x)  gauss_b(- 6, - 2, - 3, - x)
(%o2) {---------------------------, ---------------------------}
                    4                            4
                   x                            x

Categories:  Package contrib_ode

関数: ode_check (eqn, soln)

可能な解 solnを代入した後、 ODE eqnの値を返します。 もし solneqnの解なら値はゼロと同値です。

 
(%i1) load('contrib_ode)$
(%i2) eqn:'diff(y,x,2)+(a*x+b)*y;
                         2
                        d y
(%o2)                   --- + (b + a x) y
                          2
                        dx
(%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b)
         +bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)];
                                  3/2
                    1  2 (b + a x)
(%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b)
                    3       3 a
                                          3/2
                            1  2 (b + a x)
                 + bessel_j(-, --------------) %k1 sqrt(a x + b)]
                            3       3 a
(%i4) ode_check(eqn,ans[1]);
(%o4)                           0

Categories:  Package contrib_ode

システム変数: method

変数 methodは成功した解法に設定されます。

Categories:  Package contrib_ode

変数: %c

%cは一階 ODEの積分定数です。

Categories:  Package contrib_ode

変数: %k1

%k1は二階 ODEの最初の積分定数です。

Categories:  Package contrib_ode

変数: %k2

%k2は二階 ODEの二番目の積分定数です。

Categories:  Package contrib_ode

関数: gauss_a (a, b, c, x)

gauss_a(a,b,c,x)gauss_b(a,b,c,x)は 2F1幾何関数です。 それらは超幾何微分方程式 x(1-x) diff(y,x,2) + [c-(a+b+1)x] diff(y,x) - aby = 0 の任意の2つの独立解を表します (A&S 15.5.1)。

これらの関数は odelincontrib_odeが返す ODEの解の中でだけ使われます。 これらの関数の定義と使用は Maimaの将来のリリースで変わるかもしれません。

gauss_b, dgauss_a, gauss_bも参照してください。

Categories:  Package contrib_ode

関数: gauss_b (a, b, c, x)

gauss_aを参照してください。

Categories:  Package contrib_ode

関数: dgauss_a (a, b, c, x)

gauss_a(a, b, c, x)xに関する導関数。

Categories:  Package contrib_ode

関数: dgauss_b (a, b, c, x)

gauss_b(a, b, c, x)xに関する導関数。

Categories:  Package contrib_ode

関数: kummer_m (a, b, x)

Abramowitz and Stegun, Handbook of Mathematical Functions, Section 13.1.2の中で定義される Kummerの M関数

この関数は odelincontrib_odeが返す ODEの解の中でだけ使われます。 この関数の定義と使用は Maimaの将来のリリースで変わるかもしれません。

kummer_u, dkummer_m, dkummer_uも参照してください。

Categories:  Package contrib_ode

関数: kummer_u (a, b, x)

Abramowitz and Stegun, Handbook of Mathematical Functions, Section 13.1.3の中で定義される Kummerの U関数

kummer_mを参照してください。

Categories:  Package contrib_ode

関数: dkummer_m (a, b, x)

kummer_m(a, b, x)xに関する導関数。

Categories:  Package contrib_ode

関数: dkummer_u (a, b, x)

kummer_u(a, b, x)xに関する導関数。

Categories:  Package contrib_ode

関数: bessel_simplify (expr)

Bessel関数 bessel_j, bessel_y, bessel_i, bessel_k, hankel_1, hankel_2, strauve_h, strauve_lを含む式を整理します。 最高次数 nの関数を次数 n-1と n-2の関数で置き換えるのに (Abramowitz and Stegun, Handbook of Mathematical Functions, 9.1.27節に与えられる) 漸化式を使います。

すべての次数の差が2より小さくなるまでこのプレセスを繰り返します。

 
(%i1) load('contrib_ode)$
(%i2) bessel_simplify(4*bessel_j(n,x^2)*(x^2-n^2/x^2)
  +x*((bessel_j(n-2,x^2)-bessel_j(n,x^2))*x
  -(bessel_j(n,x^2)-bessel_j(n+2,x^2))*x)
  -2*bessel_j(n+1,x^2)+2*bessel_j(n-1,x^2));
(%o2)                           0
(%i3) bessel_simplify(-2*bessel_j(1,z)*z^3-10*bessel_j(2,z)*z^2
 +15*%pi*bessel_j(1,z)*struve_h(3,z)*z-15*%pi*struve_h(1,z)*bessel_j(3,z)*z
 -15*%pi*bessel_j(0,z)*struve_h(2,z)*z+15*%pi*struve_h(0,z)*bessel_j(2,z)*z
 -30*%pi*bessel_j(1,z)*struve_h(2,z)+30*%pi*struve_h(1,z)*bessel_j(2,z));
(%o3)                           0

関数: expintegral_e_simplify (expr)

漸化式 (A&S 5.1.14)を使って指数積分 expintegral_eを含む式を整理します。

expintegral_e(n+1,z) = (1/n) * (exp(-z)-z*expintegral_e(n,z)) n = 1,2,3 ....


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.3 Possible improvements to contrib_ode

これらのルーチンは開発進行中です。まだ以下をする必要があります:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.4 Test cases for contrib_ode

ルーチンは 文献 Murphy, Kamke, Zwillinger他からのおおよそ千のテストケース上でテストされています。 これらはテストサブディレクトリに含まれています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.5 References for contrib_ode

  1. E. Kamke, Differentialgleichungen Losungsmethoden und Losungen, Vol 1, Geest & Portig, Leipzig, 1961
  2. G. M. Murphy, Ordinary Differential Equations and Their Solutions, Van Nostrand, New York, 1960
  3. D. Zwillinger, Handbook of Differential Equations, 3rd edition, Academic Press, 1998
  4. F. Schwarz, Symmetry Analysis of Abel's Equation, Studies in Applied Mathematics, 100:269-294 (1998)
  5. F. Schwarz, Algorithmic Solution of Abel's Equation, Computing 61, 39-49 (1998)
  6. E. S. Cheb-Terrab, A. D. Roche, Symmetries and First Order ODE Patterns, Computer Physics Communications 113 (1998), p 239. (http://lie.uwaterloo.ca/papers/ode_vii.pdf)
  7. E. S. Cheb-Terrab, T. Kolokolnikov, First Order ODEs, Symmetries and Linear Transformations, European Journal of Applied Mathematics, Vol. 14, No. 2, pp. 231-246 (2003). (http://arxiv.org/abs/math-ph/0007023,
    http://lie.uwaterloo.ca/papers/ode_iv.pdf)
  8. G. W. Bluman, S. C. Anco, Symmetry and Integration Methods for Differential Equations, Springer, (2002)
  9. M. Bronstein, S. Lafaille, Solutions of linear ordinary differential equations in terms of special functions, Proceedings of ISSAC 2002, Lille, ACM Press, 23-28. (http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/issac2002.pdf)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49. descriptive


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1 Introduction to descriptive

パッケージ descriptiveには記述統計計算とグラフ作成を行うための関数一式が入っています。 ソースコードと一緒に Maximaツリーに3つのデータセットがあります: pidigits.data, wind.data, biomed.data

パッケージ descriptiveの関数の参考文献として、 どんな統計マニュアルでも使うことができます。

コメント、バグ、提案は、 'riotorto AT yahoo DOT com'にコンタクトしてください。

以下は、 descriptiveの中の記述関数が引数やリスト、行列の性質に依存して如何に機能するか を示す簡単な例です。

 
(%i1) load ("descriptive")$
(%i2) /* univariate sample */   mean ([a, b, c]);
                            c + b + a
(%o2)                       ---------
                                3
(%i3) matrix ([a, b], [c, d], [e, f]);
                            [ a  b ]
                            [      ]
(%o3)                       [ c  d ]
                            [      ]
                            [ e  f ]
(%i4) /* multivariate sample */ mean (%);
                      e + c + a  f + d + b
(%o4)                [---------, ---------]
                          3          3

多変数標本では平均は列それぞれに関して計算されることに注意してください。

異なるサイズかもしれない複数の標本の場合、 Maxima関数 mapを使って標本それぞれに対して望みの結果を得ることができます。

 
(%i1) load ("descriptive")$
(%i2) map (mean, [[a, b, c], [d, e]]);
                        c + b + a  e + d
(%o2)                  [---------, -----]
                            3        2

この場合、サイズ 3と 2の2つの標本がリストに格納されました。

1変数標本は以下のようにリストに格納されなければいけません。

 
(%i1) s1 : [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
(%o1)           [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

多変数標本は以下のように行列に格納されなければいけません。

 
(%i1) s2 : matrix ([13.17, 9.29], [14.71, 16.88], [18.50, 16.88],
             [10.58, 6.63], [13.33, 13.25], [13.21,  8.12]);
                        [ 13.17  9.29  ]
                        [              ]
                        [ 14.71  16.88 ]
                        [              ]
                        [ 18.5   16.88 ]
(%o1)                   [              ]
                        [ 10.58  6.63  ]
                        [              ]
                        [ 13.33  13.25 ]
                        [              ]
                        [ 13.21  8.12  ]

この場合、列の数は確率変数次元に等しく、行の数はサンプルのサイズです。

データは手で入力することができますが、 大きな標本は普通プレインテキストファイルの中に格納されています。 例えば、ファイル pidigits.dataは数 %piの最初の100桁を含みます:

 
      3
      1
      4
      1
      5
      9
      2
      6
      5
      3 ...

Maximaでこれらの桁をロードするためには、

 
(%i1) s1 : read_list (file_search ("pidigits.data"))$
(%i2) length (s1);
(%o2)                          100

他方、ファイル wind.dataは アイルランド共和国の5つの気象台の毎日の平均風速を含みます。 (これは12の気象台で取得されたデータセットの一部です。 元のファイルは StatLib Data Repositoryから無料でダウンロードでき、 その分析は Haslett, J., Raftery, A. E. (1989) Space-time Modelling with Long-memory Dependence: Assessing Ireland's Wind Power Resource, with Discussion. Applied Statistics 38, 1-50 で議論されてます。) 以下ではデータをロードします:

 
(%i1) s2 : read_matrix (file_search ("wind.data"))$
(%i2) length (s2);
(%o2)                          100
(%i3) s2 [%]; /* last record */
(%o3)            [3.58, 6.0, 4.58, 7.62, 11.25]

いくつかの標本は数値でないデータを含みます。 例えば、ファイル biomed.data (StatLib Data Repositoryからダウンロードされた別のもっと大きなものの一部)は、異なる年齢の2つのグループ ABの患者から測定された4つの血圧を含みます。

 
(%i1) s3 : read_matrix (file_search ("biomed.data"))$
(%i2) length (s3);
(%o2)                          100
(%i3) s3 [1]; /* first record */
(%o3)            [A, 30, 167.0, 89.0, 25.6, 364]

最初の個人はグループ Aに属し、30歳で、血圧は167.0, 89.0, 25.6, 364でした。

カテゴリデータを扱う時には気をつけなければいけません。 次の例では、シンボル aが以前のある時点で値に割り当てられ、その後、カテゴリ値 aを持つ標本が取られます。

 
(%i1) a : 1$
(%i2) matrix ([a, 3], [b, 5]);
                            [ 1  3 ]
(%o2)                       [      ]
                            [ b  5 ]

Categories:  Descriptive statistics · Share packages · Package descriptive


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2 Functions and Variables for data manipulation

関数: build_sample  
    build_sample (list)  
    build_sample (matrix)

絶対頻度のテーブルから標本を構築します。 入力テーブルは行列か、サイズの等しいリストのリストです。 列の数やリストの長さは1より大きなければいけません。 それぞれの行もしくはそれぞれのリストの最後の要素は絶対頻度として解釈されます。 出力は常に行列形式での標本です。

例:

一変量頻度テーブル。

 
(%i1) load ("descriptive")$
(%i2) sam1: build_sample([[6,1], [j,2], [2,1]]);
                       [ 6 ]
                       [   ]
                       [ j ]
(%o2)                  [   ]
                       [ j ]
                       [   ]
                       [ 2 ]
(%i3) mean(sam1);
                      2 j + 8
(%o3)                [-------]
                         4
(%i4) barsplot(sam1) $

多変量頻度テーブル。

 
(%i1) load ("descriptive")$
(%i2) sam2: build_sample([[6,3,1], [5,6,2], [u,2,1],[6,8,2]]) ;
                           [ 6  3 ]
                           [      ]
                           [ 5  6 ]
                           [      ]
                           [ 5  6 ]
(%o2)                      [      ]
                           [ u  2 ]
                           [      ]
                           [ 6  8 ]
                           [      ]
                           [ 6  8 ]
(%i3) cov(sam2);
       [   2                 2                            ]
       [  u  + 158   (u + 28)     2 u + 174   11 (u + 28) ]
       [  -------- - ---------    --------- - ----------- ]
(%o3)  [     6          36            6           12      ]
       [                                                  ]
       [ 2 u + 174   11 (u + 28)            21            ]
       [ --------- - -----------            --            ]
       [     6           12                 4             ]
(%i4) barsplot(sam2, grouping=stacked) $

Categories:  Package descriptive

関数: continuous_freq  
    continuous_freq (data)  
    continuous_freq (data, m)

continuous_freqの第1引数は数のリストか (make_arrayが生成した)1次元配列でなければいけません。 範囲を区間に分割し、それらの中に値がいくつあるか数えます。 二番目の引数はオプションで、 望みのクラス数 (デフォルトが 10)か、クラス境界と欲しいクラスを含むリストか 境界だけ含むリストのいずれかです。 (訳注: クラスは区間を意味します。)

もしサンプル値がすべて等しいなら、この関数は振幅 2のクラスを1つだけ返します。 (訳注: 振幅は区間幅を意味します。)

例:

オプション引数は望みのクラス数を示します。 出力の最初のリストは区間境界を含み、二番目は対応する個数を含みます: 区間 [0, 1.8]すなわち 0か 1である桁が 16あり、 (1.8, 3.6]すなわち 2か 3である桁が 24あり、など。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, 5);
(%o3) [[0, 1.8, 3.6, 5.4, 7.2, 9.0], [16, 24, 18, 17, 25]]

オプション引数は、境界 -2と 12を持つクラスを 7個欲しいことを示します:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12,7]);
(%o3) [[- 2, 0, 2, 4, 6, 8, 10, 12], [8, 20, 22, 17, 20, 13, 0]]

オプション引数は、境界 -2と 12を持つクラスをデフォルト個欲しいことを示します:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) continuous_freq (s1, [-2,12]);
                3  4  11  18     32  39  46  53
(%o3)  [[- 2, - -, -, --, --, 5, --, --, --, --, 12],
                5  5  5   5      5   5   5   5
               [0, 8, 20, 12, 18, 9, 8, 25, 0, 0]]

第1引数に配列が可能です。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) a1 : make_array (fixnum, length (s1)) $
(%i4) fillarray (a1, s1);
(%o4) {Lisp Array:
#(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 3 8 3 2 7 9 \
5 0 2 8 8 4 1 9 7 1 6 9 3 9 9 3 7 5 1 0 5 8 2 0 9 7 4 9 4 4 5 9
  2 3 0 7 8 1 6 4 0 6 2 8 6 2 0 8 9 9 8 6 2 8 0 3 4 8 2 5 3 4 2 \
1 1 7 0 6 7)}
(%i5) continuous_freq (a1);
           9   9  27  18  9  27  63  36  81
(%o5) [[0, --, -, --, --, -, --, --, --, --, 9],
           10  5  10  5   2  5   10  5   10
                             [8, 8, 12, 12, 10, 8, 9, 8, 12, 13]]

Categories:  Package descriptive

関数: discrete_freq (data)

数値的、記述的両方の離散標本の中の絶対頻度を数えます。 唯一の引数はリストか(make_arrayが生成した)1次元配列です。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) discrete_freq (s1);
(%o3) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                             [8, 8, 12, 12, 10, 8, 9, 8, 12, 13]]

最初のリストは標本値を与え、二番目はそれらの絶対頻度を与えます。 コマンド ? col? transposeは最後の入力を理解するのを助けるはずです。

第1引数に配列が可能です。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) a1 : make_array (fixnum, length (s1)) $
(%i4) fillarray (a1, s1);
(%o4) {Lisp Array:
#(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 3 8 3 2 7 9 \
5 0 2 8 8 4 1 9 7 1 6 9 3 9 9 3 7 5 1 0 5 8 2 0 9 7 4 9 4 4 5 9
  2 3 0 7 8 1 6 4 0 6 2 8 6 2 0 8 9 9 8 6 2 8 0 3 4 8 2 5 3 4 2 \
1 1 7 0 6 7)}
(%i5) discrete_freq (a1);
(%o5) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                             [8, 8, 12, 12, 10, 8, 9, 8, 12, 13]]

Categories:  Package descriptive

関数: standardize  
    standardize (list)  
    standardize (matrix)

リストの要素それぞれから標本平均を引き、結果を標準偏差で割ります。 入力が行列の時、 standardizeは行それぞれから多変量平均を引き、対応する標準偏差でそれぞれの成分を割ります。

Categories:  Package descriptive

関数: subsample  
    subsample (data_matrix, predicate_function)  
    subsample (data_matrix, predicate_function, col_num1, col_num2, ...)

これは Maximaの submatrix関数の変形の一種です。 最初の引数はデータ行列であり、二番目は述語関数であり、 オプションの付加引数は返す列の番号です。 その振る舞いは例を使ってよりよく理解されます。

以下は最初の測候所での風速が 18より大きかった多変量レコードです。 ラムダ式の中で i番目の成分は v[i]として参照されることを参考にしてください。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) subsample (s2, lambda([v], v[1] > 18));
              [ 19.38  15.37  15.12  23.09  25.25 ]
              [                                   ]
              [ 18.29  18.66  19.08  26.08  27.63 ]
(%o3)         [                                   ]
              [ 20.25  21.46  19.95  27.71  23.38 ]
              [                                   ]
              [ 18.79  18.96  14.46  26.38  21.84 ]

以下の例では、測候所番号 1で 16以上で、かつ、測候所番号 4で 25ノットより小さな風速のレコードの一番目、二番目、五番目の成分だけをリクエストします。 標本は、測候所 1, 2, 5からのデータだけを含みます。 この場合、述語関数は通常の Maxima関数として定義されます。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) g(x):= x[1] >= 16 and x[4] < 25$
(%i4) subsample (s2, g, 1, 2, 5);
                     [ 19.38  15.37  25.25 ]
                     [                     ]
                     [ 17.33  14.67  19.58 ]
(%o4)                [                     ]
                     [ 16.92  13.21  21.21 ]
                     [                     ]
                     [ 17.25  18.46  23.87 ]

以下は biomed.dataのカテゴリ変数の例です。 38歳より年上のグループ Bの患者に対応するレコードが欲しいです。

 
(%i1) load ("descriptive")$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) h(u):= u[1] = B and u[2] > 38 $
(%i4) subsample (s3, h);
                [ B  39  28.0  102.3  17.1  146 ]
                [                               ]
                [ B  39  21.0  92.4   10.3  197 ]
                [                               ]
                [ B  39  23.0  111.5  10.0  133 ]
                [                               ]
                [ B  39  26.0  92.6   12.3  196 ]
(%o4)           [                               ]
                [ B  39  25.0  98.7   10.0  174 ]
                [                               ]
                [ B  39  21.0  93.2   5.9   181 ]
                [                               ]
                [ B  39  18.0  95.0   11.3  66  ]
                [                               ]
                [ B  39  39.0  88.5   7.6   168 ]

統計解析には血圧だけを使うかもしれません。

 
(%i1) load ("descriptive")$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) subsample (s3, lambda([v], v[1] = B and v[2] > 38),
                 3, 4, 5, 6);
                   [ 28.0  102.3  17.1  146 ]
                   [                        ]
                   [ 21.0  92.4   10.3  197 ]
                   [                        ]
                   [ 23.0  111.5  10.0  133 ]
                   [                        ]
                   [ 26.0  92.6   12.3  196 ]
(%o3)              [                        ]
                   [ 25.0  98.7   10.0  174 ]
                   [                        ]
                   [ 21.0  93.2   5.9   181 ]
                   [                        ]
                   [ 18.0  95.0   11.3  66  ]
                   [                        ]
                   [ 39.0  88.5   7.6   168 ]

以下はs3の多変量平均です。

 
(%i1) load ("descriptive")$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) mean (s3);
       65 B + 35 A  317          6 NA + 8144.999999999999
(%o3) [-----------, ---, 87.178, ------------------------,
           100      10                     100
                                                    3 NA + 19587
                                            18.123, ------------]
                                                        100

ここで、一番目の成分は ABはカテゴリなので意味がなく、 二番目の成分は個々人の平均の歳の有理表現であり、 四番目と最後の値はある奇妙な振る舞いを示しています。 これは、シンボル NAnon availableデータを示すようにここで使われているからで、 二つの平均は無意味です。 情報のある種の喪失を意味しますが、可能な解は NAシンボルを持つ行を行列から取り除くことです。

 
(%i1) load ("descriptive")$
(%i2) s3 : read_matrix (file_search ("biomed.data"))$
(%i3) g(v):= v[4] # NA and v[6] # NA $
(%i4) mean (subsample (s3, g, 3, 4, 5, 6));
(%o4) [79.4923076923077, 86.2032967032967, 16.93186813186813,
                                                            2514
                                                            ----]
                                                             13

Categories:  Package descriptive

関数: transform_sample (matrix, varlist, exprlist)

標本 matrixexprlist内の式で変換します。 ここで、それぞれの列は varlistに従って名付けられます。

例:

2番目の引数が3つの列に名前を割り当てます。 これらの名前を使って、式のリストが標本の変換を定義します。

 
(%i1) load ("descriptive")$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $
(%i3) transform_sample(data, [a,b,c], [c, a*b, log(a)]);
                               [ 7  6   log(3) ]
                               [               ]
                               [ 2  21  log(3) ]
(%o3)                          [               ]
                               [ 4  16  log(8) ]
                               [               ]
                               [ 4  10  log(5) ]

定数の列を追加し、3番目の変量を削除します。

 
(%i1) load ("descriptive")$
(%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $
(%i3) transform_sample(data, [a,b,c], [makelist(1,k,length(data)),a,b]);
                                  [ 1  3  2 ]
                                  [         ]
                                  [ 1  3  7 ]
(%o3)                             [         ]
                                  [ 1  8  2 ]
                                  [         ]
                                  [ 1  5  2 ]

Categories:  Package descriptive


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3 Functions and Variables for descriptive statistics

関数: mean  
    mean (list)  
    mean (matrix)

これは標本平均です。以下のように定義されます。

 
                       n
                     ====
             _   1   \
             x = -    >    x
                 n   /      i
                     ====
                     i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) mean (s1);
                               471
(%o3)                          ---
                               100
(%i4) %, numer;
(%o4)                         4.71
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%i6) mean (s2);
(%o6)     [9.9485, 10.1607, 10.8685, 15.7166, 14.8441]

Categories:  Package descriptive

関数: var  
    var (list)  
    var (matrix)

これは標本分散です。以下のように定義されます。

 
                     n
                   ====
           2   1   \          _ 2
          s  = -    >    (x - x)
               n   /       i
                   ====
                   i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) var (s1), numer;
(%o3)                   8.425899999999999

関数 var1も参照してください。

Categories:  Package descriptive

関数: var1  
    var1 (list)  
    var1 (matrix)

これは標本分散です。以下のように定義されます。

 
                     n
                   ====
               1   \          _ 2
              ---   >    (x - x)
              n-1  /       i
                   ====
                   i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) var1 (s1), numer;
(%o3)                    8.5110101010101
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) var1 (s2);
(%o5) [17.39586540404041, 15.13912778787879, 15.63204924242424,
                            32.50152569696971, 24.66977392929294]

関数 varも参照してください。

Categories:  Package descriptive

関数: std  
    std (list)  
    std (matrix)

これは分母 nの分散である関数 varの平方根です。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) std (s1), numer;
(%o3)                   2.902740084816414
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) std (s2);
(%o5) [4.149928523480858, 3.871399812729241, 3.933920277534866,
                            5.672434260526957, 4.941970881136392]

関数 varstd1も参照してください。

Categories:  Package descriptive

関数: std1  
    std1 (list)  
    std1 (matrix)

これは分母 n-1の分散である関数 var1の平方根です。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) std1 (s1), numer;
(%o3)                   2.917363553109228
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) std1 (s2);
(%o5) [4.170835096721089, 3.89090320978032, 3.953738641137555,
                            5.701010936401517, 4.966867617451963]

関数 var1stdも参照してください。

Categories:  Package descriptive

関数: noncentral_moment  
    noncentral_moment (list, k)  
    noncentral_moment (matrix, k)

次数 kの非中心モーメントです。以下のように定義されます。

 
                       n
                     ====
                 1   \      k
                 -    >    x
                 n   /      i
                     ====
                     i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) noncentral_moment (s1, 1), numer; /* the mean */
(%o3)                         4.71
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%i6) noncentral_moment (s2, 5);
(%o6) [319793.8724761505, 320532.1923892463,
      391249.5621381556, 2502278.205988911, 1691881.797742255]

関数 central_momentも参照してください。

Categories:  Package descriptive

関数: central_moment  
    central_moment (list, k)  
    central_moment (matrix, k)

次数 kの中心モーメントです。以下のように定義されます。

 
                    n
                  ====
              1   \          _ k
              -    >    (x - x)
              n   /       i
                  ====
                  i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) central_moment (s1, 2), numer; /* the variance */
(%o3)                   8.425899999999999
(%i5) s2 : read_matrix (file_search ("wind.data"))$
(%i6) central_moment (s2, 3);
(%o6) [11.29584771375004, 16.97988248298583, 5.626661952750102,
                             37.5986572057918, 25.85981904394192]

関数 noncentral_momentmeanも参照してください。

Categories:  Package descriptive

関数: cv  
    cv (list)  
    cv (matrix)

変動係数は標本標準偏差 (std)を平均 meanで割った商です。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) cv (s1), numer;
(%o3)                   .6193977819764815
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) cv (s2);
(%o5) [.4192426091090204, .3829365309260502, 0.363779605385983,
                            .3627381836021478, .3346021393989506]

関数 stdmeanも参照してください。

Categories:  Package descriptive

関数: smin  
    smin (list)  
    smin (matrix)

これは標本 listの最小値です。 引数が行列の時、 sminは統計変数に関連付けられた列の最小値を含むリストを返します。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) smin (s1);
(%o3)                           0
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) smin (s2);
(%o5)             [0.58, 0.5, 2.67, 5.25, 5.17]

関数 smaxも参照してください。

Categories:  Package descriptive

関数: smax  
    smax (list)  
    smax (matrix)

これは標本 listの最大値です。 引数が行列の時、 smaxは統計変数に関連付けられた列の最大値を含むリストを返します。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) smax (s1);
(%o3)                           9
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) smax (s2);
(%o5)          [20.25, 21.46, 20.04, 29.63, 27.63]

関数 sminも参照してください。

Categories:  Package descriptive

関数: range  
    range (list)  
    range (matrix)

範囲は極値の差です。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) range (s1);
(%o3)                           9
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) range (s2);
(%o5)          [19.67, 20.96, 17.37, 24.38, 22.46]

Categories:  Package descriptive

関数: quantile  
    quantile (list, p)  
    quantile (matrix, p)

これは標本 listp分位数です。 p[0, 1]の範囲の数です。 標本分位数にはいくつかの定義がありますが (Hyndman, R. J., Fan, Y. (1996) Sample quantiles in statistical packages. American Statistician, 50, 361-365)、 パッケージ descriptiveでは線形内挿に基づいたものが実装されています。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) /* 1st and 3rd quartiles */
         [quantile (s1, 1/4), quantile (s1, 3/4)], numer;
(%o3)                      [2.0, 7.25]
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) quantile (s2, 1/4);
(%o5)    [7.2575, 7.477500000000001, 7.82, 11.28, 11.48]

Categories:  Package descriptive

関数: median  
    median (list)  
    median (matrix)

一旦標本が順に並べられると、 もし標本サイズが奇数ならメジアンは中央値であり、 そうでないなら2つの中央値の平均です。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) median (s1);
                                9
(%o3)                           -
                                2
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) median (s2);
(%o5)         [10.06, 9.855, 10.73, 15.48, 14.105]

メジアンは 1/2分位数です。

関数 quantileも参照してください。

Categories:  Package descriptive

関数: qrange  
    qrange (list)  
    qrange (matrix)

四分位範囲は三番目と一番目の分位数の差 quantile(list,3/4) - quantile(list,1/4) です。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) qrange (s1);
                               21
(%o3)                          --
                               4
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) qrange (s2);
(%o5) [5.385, 5.572499999999998, 6.022500000000001,
                            8.729999999999999, 6.649999999999999]

関数 quantileも参照してください。

Categories:  Package descriptive

関数: mean_deviation  
    mean_deviation (list)  
    mean_deviation (matrix)

平均偏差です。以下のように定義されます。

 
                     n
                   ====
               1   \          _
               -    >    |x - x|
               n   /       i
                   ====
                   i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) mean_deviation (s1);
                               51
(%o3)                          --
                               20
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) mean_deviation (s2);
(%o5) [3.287959999999999, 3.075342, 3.23907, 4.715664000000001,
                                               4.028546000000002]

関数 meanも参照してください。

Categories:  Package descriptive

関数: median_deviation  
    median_deviation (list)  
    median_deviation (matrix)

メジアン偏差です。以下のように定義されます。

 
                 n
               ====
           1   \
           -    >    |x - med|
           n   /       i
               ====
               i = 1

ここで medlistのメジアンです。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) median_deviation (s1);
                                5
(%o3)                           -
                                2
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) median_deviation (s2);
(%o5)           [2.75, 2.755, 3.08, 4.315, 3.31]

関数 meanも参照してください。

Categories:  Package descriptive

関数: harmonic_mean  
    harmonic_mean (list)  
    harmonic_mean (matrix)

調和平均です。以下のように定義されます。

 
                  n
               --------
                n
               ====
               \     1
                >    --
               /     x
               ====   i
               i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
(%i3) harmonic_mean (y), numer;
(%o3)                   3.901858027632205
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) harmonic_mean (s2);
(%o5) [6.948015590052786, 7.391967752360356, 9.055658197151745,
                            13.44199028193692, 13.01439145898509]

関数 meangeometric_meanも参照してください。

Categories:  Package descriptive

関数: geometric_mean  
    geometric_mean (list)  
    geometric_mean (matrix)

幾何平均です。以下のように定義されます。

 
                 /  n      \ 1/n
                 | /===\   |
                 |  ! !    |
                 |  ! !  x |
                 |  ! !   i|
                 | i = 1   |
                 \         /

例:

 
(%i1) load ("descriptive")$
(%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$
(%i3) geometric_mean (y), numer;
(%o3)                   4.454845412337012
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) geometric_mean (s2);
(%o5) [8.82476274347979, 9.22652604739361, 10.0442675714889,
                            14.61274126349021, 13.96184163444275]

関数meanharmonic_meanも参照してください。

Categories:  Package descriptive

関数: kurtosis  
    kurtosis (list)  
    kurtosis (matrix)

尖度係数です。以下のように定義されます。

 
                    n
                  ====
            1     \          _ 4
           ----    >    (x - x)  - 3
              4   /       i
           n s    ====
                  i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) kurtosis (s1), numer;
(%o3)                  - 1.273247946514421
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) kurtosis (s2);
(%o5) [- .2715445622195385, 0.119998784429451,
     - .4275233490482861, - .6405361979019522, - .4952382132352935]

関数 mean, var, skewnessも参照してください。

Categories:  Package descriptive

関数: skewness  
    skewness (list)  
    skewness (matrix)

歪度係数です。以下のように定義されます。

 
                    n
                  ====
            1     \          _ 3
           ----    >    (x - x)
              3   /       i
           n s    ====
                  i = 1

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) skewness (s1), numer;
(%o3)                  .009196180476450424
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) skewness (s2);
(%o5) [.1580509020000978, .2926379232061854, .09242174416107717,
                            .2059984348148687, .2142520248890831]

関数mean, var, kurtosisも参照してください。

Categories:  Package descriptive

関数: pearson_skewness  
    pearson_skewness (list)  
    pearson_skewness (matrix)

Pearsonの歪度係数です。以下のように定義されます。

 
                _
             3 (x - med)
             -----------
                  s

ここで medlistのメジアンです。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) pearson_skewness (s1), numer;
(%o3)                   .2159484029093895
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) pearson_skewness (s2);
(%o5) [- .08019976629211892, .2357036272952649,
         .1050904062491204, .1245042340592368, .4464181795804519]

関数 mean, var, medianも参照してください。

Categories:  Package descriptive

関数: quartile_skewness  
    quartile_skewness (list)  
    quartile_skewness (matrix)

分位歪度係数です。以下のように定義されます。

 
               c    - 2 c    + c
                3/4      1/2    1/4
               --------------------
                   c    - c
                    3/4    1/4

ここで c_pは標本 listp分位数です。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) quartile_skewness (s1), numer;
(%o3)                  .04761904761904762
(%i4) s2 : read_matrix (file_search ("wind.data"))$
(%i5) quartile_skewness (s2);
(%o5) [- 0.0408542246982353, .1467025572005382,
       0.0336239103362392, .03780068728522298, .2105263157894735]

関数 quantileも参照してください。

Categories:  Package descriptive

関数: km  
    km (list, option ...)  
    km (matrix, option ...)

生存や信頼性のKaplan Meier推定量、函数 S(x)=1-F(x)

データは対のリストや2列行列として導入できます。 最初の要素は観測時間で、二番目の要素は打ち切りインデックスです。 (1 = 打ち切りなし, 0 = 右側打ち切り)

オプションの引数は返される式の中の変数の名前です。 デフォルトは xです。

例:

対のリストとしてのサンプル。

 
(%i1) load ("descriptive")$
(%i2) S: km([[2,1], [3,1], [5,0], [8,1]]);
                       charfun((3 <= x) and (x < 8))
(%o2) charfun(x < 0) + -----------------------------
                                     2
                3 charfun((2 <= x) and (x < 3))
              + -------------------------------
                               4
              + charfun((0 <= x) and (x < 2))
(%i3) load ("draw")$
(%i4) draw2d(
        line_width = 3, grid = true,
        explicit(S, x, -0.1, 10))$

生存確率を見積もります。

 
(%i1) load ("descriptive")$
(%i2) S(t):= ''(km([[2,1], [3,1], [5,0], [8,1]], t)) $
(%i3) S(6);
                            1
(%o3)                       -
                            2

Categories:  Package descriptive

関数: cdf_empirical  
    cdf_empirical (list, option ...)  
    cdf_empirical (matrix, option ...)

経験分布函数 F(x)

データは数値のリストや1列行列として導入できます。

オプションの引数は返される式の中の変数の名前です。 デフォルトは xです。

例:

経験分布函数。

 
(%i1) load ("descriptive")$
(%i2) F(x):= ''(cdf_empirical([1,3,3,5,7,7,7,8,9]));
(%o2) F(x) := (charfun(x >= 9) + charfun(x >= 8)
               + 3 charfun(x >= 7) + charfun(x >= 5)
               + 2 charfun(x >= 3) + charfun(x >= 1))/9
(%i3) F(6);
                           4
(%o3)                      -
                           9
(%i4) load(draw)$
(%i5) draw2d(
        line_width = 3,
        grid       = true,
        explicit(F(z), z, -2, 12)) $

Categories:  Package descriptive

関数: cov (matrix)

多変量標本の共分散行列です。以下のように定義されます。

 
              n
             ====
          1  \           _        _
      S = -   >    (X  - X) (X  - X)'
          n  /       j        j
             ====
             j = 1

ここで X_jは標本行列の j番目の行です。

例:

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec : 7$  /* change precision for pretty output */
(%i4) cov (s2);
      [ 17.22191  13.61811  14.37217  19.39624  15.42162 ]
      [                                                  ]
      [ 13.61811  14.98774  13.30448  15.15834  14.9711  ]
      [                                                  ]
(%o4) [ 14.37217  13.30448  15.47573  17.32544  16.18171 ]
      [                                                  ]
      [ 19.39624  15.15834  17.32544  32.17651  20.44685 ]
      [                                                  ]
      [ 15.42162  14.9711   16.18171  20.44685  24.42308 ]

関数 cov1も参照してください。

Categories:  Package descriptive

関数: cov1 (matrix)

多変量標本の共分散行列です。以下のように定義されます。

 
              n
             ====
         1   \           _        _
   S  = ---   >    (X  - X) (X  - X)'
    1   n-1  /       j        j
             ====
             j = 1

ここで X_jは標本行列の j番目の行です。

例:

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec : 7$ /* change precision for pretty output */
(%i4) cov1 (s2);
      [ 17.39587  13.75567  14.51734  19.59216  15.5774  ]
      [                                                  ]
      [ 13.75567  15.13913  13.43887  15.31145  15.12232 ]
      [                                                  ]
(%o4) [ 14.51734  13.43887  15.63205  17.50044  16.34516 ]
      [                                                  ]
      [ 19.59216  15.31145  17.50044  32.50153  20.65338 ]
      [                                                  ]
      [ 15.5774   15.12232  16.34516  20.65338  24.66977 ]

関数 covも参照してください。

Categories:  Package descriptive

関数: global_variances  
    global_variances (matrix)  
    global_variances (matrix, options ...)

関数 global_variancesは大域分散尺度のリストを返します:

ここで pは多変量確率変数の次元であり、 S_1cov1が返す共分散行列です。

オプション:

例:

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) global_variances (s2);
(%o3) [105.338342060606, 21.06766841212119, 12874.34690469686,
         113.4651792608501, 6.636590811800795, 2.576158149609762]

共分散行列から global_variancesを計算します。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) s : cov1 (s2)$
(%i4) global_variances (s, data=false);
(%o4) [105.338342060606, 21.06766841212119, 12874.34690469686,
         113.4651792608501, 6.636590811800795, 2.576158149609762]

covcov1も参照してください。

Categories:  Package descriptive

関数: cor  
    cor (matrix)  
    cor (matrix, logical_value)

多変量標本の相関行列です。

オプション:

例:

 
(%i1) load ("descriptive")$
(%i2) fpprintprec : 7 $
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) cor (s2);
      [   1.0     .8476339  .8803515  .8239624  .7519506 ]
      [                                                  ]
      [ .8476339    1.0     .8735834  .6902622  0.782502 ]
      [                                                  ]
(%o4) [ .8803515  .8735834    1.0     .7764065  .8323358 ]
      [                                                  ]
      [ .8239624  .6902622  .7764065    1.0     .7293848 ]
      [                                                  ]
      [ .7519506  0.782502  .8323358  .7293848    1.0    ]

共分散行列から相関行列を計算します。

 
(%i1) load ("descriptive")$
(%i2) fpprintprec : 7 $
(%i3) s2 : read_matrix (file_search ("wind.data"))$
(%i4) s : cov1 (s2)$
(%i5) cor (s, data=false); /* this is faster */
      [   1.0     .8476339  .8803515  .8239624  .7519506 ]
      [                                                  ]
      [ .8476339    1.0     .8735834  .6902622  0.782502 ]
      [                                                  ]
(%o5) [ .8803515  .8735834    1.0     .7764065  .8323358 ]
      [                                                  ]
      [ .8239624  .6902622  .7764065    1.0     .7293848 ]
      [                                                  ]
      [ .7519506  0.782502  .8323358  .7293848    1.0    ]

covcov1も参照してください。

Categories:  Package descriptive

関数: list_correlations  
    list_correlations (matrix)  
    list_correlations (matrix, options ...)

関数 list_correlationsは相関尺度のリストを返します:

オプション:

例:

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) z : list_correlations (s2)$
(%i4) fpprintprec : 5$ /* for pretty output */
(%i5) z[1];  /* precision matrix */
      [  .38486   - .13856   - .15626   - .10239    .031179  ]
      [                                                      ]
      [ - .13856   .34107    - .15233    .038447   - .052842 ]
      [                                                      ]
(%o5) [ - .15626  - .15233    .47296    - .024816  - .10054  ]
      [                                                      ]
      [ - .10239   .038447   - .024816   .10937    - .034033 ]
      [                                                      ]
      [ .031179   - .052842  - .10054   - .034033   .14834   ]
(%i6) z[2];  /* multiple correlation vector */
(%o6)      [.85063, .80634, .86474, .71867, .72675]
(%i7) z[3];  /* partial correlation matrix */
      [  - 1.0     .38244   .36627   .49908   - .13049 ]
      [                                                ]
      [  .38244    - 1.0    .37927  - .19907   .23492  ]
      [                                                ]
(%o7) [  .36627    .37927   - 1.0    .10911    .37956  ]
      [                                                ]
      [  .49908   - .19907  .10911   - 1.0     .26719  ]
      [                                                ]
      [ - .13049   .23492   .37956   .26719    - 1.0   ]

covcov1も参照してください。

Categories:  Package descriptive

関数: principal_components  
    principal_components (matrix)  
    principal_components (matrix, options ...)

多変量標本の主成分を計算します。 多変量統計分析で次元を減らすために標本の主成分が使われます。

オプション:

関数 principal_componentsの出力は以下の結果を含むリストです:

例:

この標本では、最初の成分は全分散の83.13パーセントを占める。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) fpprintprec:4 $
(%i4) res: principal_components(s2);
0 errors, 0 warnings
(%o4) [[87.57, 8.753, 5.515, 1.889, 1.613],
[83.13, 8.31, 5.235, 1.793, 1.531],
[ .4149  .03379   - .4757  - 0.581   - .5126 ]
[                                            ]
[ 0.369  - .3657  - .4298   .7237    - .1469 ]
[                                            ]
[ .3959  - .2178  - .2181  - .2749    .8201  ]]
[                                            ]
[ .5548   .7744    .1857    .2319    .06498  ]
[                                            ]
[ .4765  - .4669   0.712   - .09605  - .1969 ]
(%i5) /* accumulated percentages  */
    block([ap: copy(res[2])],
      for k:2 thru length(ap) do ap[k]: ap[k]+ap[k-1],
      ap);
(%o5)                 [83.13, 91.44, 96.68, 98.47, 100.0]
(%i6) /* sample dimension */
      p: length(first(res));
(%o6)                                  5
(%i7) /* plot percentages to select number of
         principal components for further work */
     draw2d(
        fill_density = 0.2,
        apply(bars, makelist([k, res[2][k], 1/2], k, p)),
        points_joined = true,
        point_type    = filled_circle,
        point_size    = 3,
        points(makelist([k, res[2][k]], k, p)),
        xlabel = "Variances",
        ylabel = "Percentages",
        xtics  = setify(makelist([concat("PC",k),k], k, p))) $

共分散行列がわかっている場合、関数に渡すことができるが、 オプション data=falseを使わなくてはいけない。

 
(%i1) load ("descriptive")$
(%i2) S: matrix([1,-2,0],[-2,5,0],[0,0,2]);
                                [  1   - 2  0 ]
                                [             ]
(%o2)                           [ - 2   5   0 ]
                                [             ]
                                [  0    0   2 ]
(%i3) fpprintprec:4 $
(%i4) /* the argumment is a covariance matrix */
      res: principal_components(S, data=false);
0 errors, 0 warnings
                                                  [ - .3827  0.0  .9239 ]
                                                  [                     ]
(%o4) [[5.828, 2.0, .1716], [72.86, 25.0, 2.145], [  .9239   0.0  .3827 ]]
                                                  [                     ]
                                                  [   0.0    1.0   0.0  ]
(%i5) /* transformation to get the principal components
         from original records */
      matrix([a1,b2,c3],[a2,b2,c2]).last(res);
             [ .9239 b2 - .3827 a1  1.0 c3  .3827 b2 + .9239 a1 ]
(%o5)        [                                                  ]
             [ .9239 b2 - .3827 a2  1.0 c2  .3827 b2 + .9239 a2 ]

Categories:  Package descriptive


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4 Functions and Variables for statistical graphs

関数: barsplot (data1, data2, …, option_1, option_2, …)

1変量、多変量どちらの標本でも離散統計変数の棒グラフをプロットします

dataは1標本を意味する結果のリストかもしれませんし、それぞれサイズ mn個の標本を意味する mn列の行列かもしれません。

利用可能なオプションは以下のものです:

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成するための 関数 wxbarsplotもあります。 複数プロット文脈での barsplot

例:

行列形式での1変量標本。絶対頻度。

 
(%i1) load ("descriptive")$
(%i2) m : read_matrix (file_search ("biomed.data"))$
(%i3) barsplot(
        col(m,2),
        title        = "Ages",
        xlabel       = "years",
        box_width    = 1/2,
        fill_density = 3/4)$

異なるサイズの2つの標本。 相対頻度とユーザー宣言の色を使って。

 
(%i1) load ("descriptive")$
(%i2) l1:makelist(random(10),k,1,50)$
(%i3) l2:makelist(random(10),k,1,100)$
(%i4) barsplot(
        l1,l2,
        box_width    = 1,
        fill_density = 1,
        bars_colors  = [black, grey],
        frequencies = relative,
        sample_keys = ["A", "B"])$

サイズが等しい4つの非数標本。

 
(%i1) load ("descriptive")$
(%i2) barsplot(
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        title  = "Asking for something to four groups",
        ylabel = "# of individuals",
        groups_gap   = 3,
        fill_density = 0.5,
        ordering     = ordergreatp)$

スタックバー。

 
(%i1) load ("descriptive")$
(%i2) barsplot(
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        makelist([Yes, No, Maybe][random(3)+1],k,1,50),
        title  = "Asking for something to four groups",
        ylabel = "# of individuals",
        grouping     = stacked,
        fill_density = 0.5,
        ordering     = ordergreatp)$

棒グラフ関連オプションについてはパッケージ drawbarsplotを参照してください。 関数 histogrampiechartも参照してください。

Categories:  Package descriptive · Plotting

関数: barsplot_description (…)

関数 barsplot_descriptionは 他のグラフィックオブジェクトと一緒に複雑なシーンを生成するために グラフィックオブジェクトを生成します。

例: 多重プロット文脈での barsplot

 
(%i1) load ("descriptive")$
(%i2) l1:makelist(random(10),k,1,50)$
(%i3) l2:makelist(random(10),k,1,100)$
(%i4) bp1 :
        barsplot_description(
         l1,
         box_width = 1,
         fill_density = 0.5,
         bars_colors = [blue],
         frequency = relative)$
(%i5) bp2 :
        barsplot_description(
         l2,
         box_width = 1,
         fill_density = 0.5,
         bars_colors = [red],
         frequency = relative)$
(%i6) draw(gr2d(bp1), gr2d(bp2))$

Categories:  Package descriptive · Plotting

関数: boxplot (data)  
    boxplot (data, option_1, option_2, …)

この関数は箱ひげ図をプロットします。 引数 dataはリストだったり行列だったりします。 箱ひげ図は主に異なる標本の比較に使われるので、リストはあまり興味深くありません。 行列の場合には多変量統計変数の複数成分を比較することが可能です。 しかし、できる限り異なる標本サイズの標本のリストも許すようにしています。 実際、これはパッケージ descriptiveの中でこの種のデータ構造を許容する唯一の関数です

箱は、第2四分位数すなわち中央値に置かれた水平区間と共に 第1四分位数から第3四分位数までプロットされます。 デフォルトでは、下ひげと上ひげはそれぞれ最小値と最大値でプロットされます。 オプション rangeは、 quantile(x,3/4)+range*(quantile(x,3/4)-quantile(x,1/4))より大きな値か quantile(x,1/4)-range*(quantile(x,3/4)-quantile(x,1/4))より小さな値が外れ値 と考えられるに違いないことを示すのに使うことができます。 その場合、それらは孤立した点としてプロットされ、ひげはサンプルの残りの極値に置かれます。

利用可能なオプションは以下のものです:

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成するための 関数 wxbarsplotもあります。

例:

多変量標本の箱ひげ図。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix(file_search("wind.data"))$
(%i3) boxplot(s2,
        box_width  = 0.2,
        title      = "Windspeed in knots",
        xlabel     = "Stations",
        color      = red,
        line_width = 2)$

異なるサイズの 3つの標本の箱ひげ図。

 
(%i1) load ("descriptive")$
(%i2) A :
       [[6, 4, 6, 2, 4, 8, 6, 4, 6, 4, 3, 2],
        [8, 10, 7, 9, 12, 8, 10],
        [16, 13, 17, 12, 11, 18, 13, 18, 14, 12]]$
(%i3) boxplot (A, box_orientation = horizontal)$

オプション rangeは外れ値を扱うのに使うことができます。

 
(%i1) load ("descriptive")$
(%i2) B: [[7, 15, 5, 8, 6, 5, 7, 3, 1],
          [10, 8, 12, 8, 11, 9, 20],
          [23, 17, 19, 7, 22, 19]] $
(%i3) boxplot (B, range=1)$
(%i4) boxplot (B, range=1.5, box_orientation = horizontal)$
(%i5) draw2d(
        boxplot_description(
          B,
          range            = 1.5,
          line_width       = 3,
          outliers_size    = 2,
          color            = red,
          background_color = light_gray),
        xtics = {["Low",1],["Medium",2],["High",3]}) $

Categories:  Package descriptive · Plotting

Function: boxplot_description (…)

関数 boxplot_descriptionは 他のグラフィックオブジェクトと一緒に複雑なシーンを生成するために グラフィックオブジェクトを生成します。

Categories:  Package descriptive · Plotting

関数: histogram  
    histogram (list)  
    histogram (list, option_1, option_2, …)  
    histogram (one_column_matrix)  
    histogram (one_column_matrix, option_1, option_2, …)  
    histogram (one_row_matrix)  
    histogram (one_row_matrix, option_1, option_2, …)

この関数は一連の標本からヒストグラムをプロットします。 標本データは数のリストか一次元行列に保存しなければいけません。

利用可能なオプションは以下のものです:

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成する 関数 wxhistogramもあります。

例:

8クラスを持つ簡単なヒストグラム。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
           s1,
           nclasses     = 8,
           title        = "pi digits",
           xlabel       = "digits",
           ylabel       = "Absolute frequency",
           fill_color   = grey,
           fill_density = 0.6)$

ヒストグラムの境界を-2と12に、クラス数を3に設定します。 また予め定義されたチックを導入します:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (
           s1,
           nclasses     = [-2,12,3],
           htics        = ["A", "B", "C"],
           terminal     = png,
           fill_color   = "#23afa0",
           fill_density = 0.6)$

様々なビンの幅の範囲。

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram (s1, nclasses = {0,3,6,7,11})$

クラスの数の最適探索のためのFreedmann - Diakonis ロバスト法

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) histogram(s1, nclasses=fd) $

Categories:  Package descriptive · Plotting

関数: histogram_description (…)

関数 histogram_descriptionは他のグラフィックオブジェクトと一緒に 複雑なシーンを生成するのに適したグラフィックオブジェクトを生成します。 xrangeを設定しシーンの中に明示的な曲線を足すのに histogram_descriptionを利用します:

 
(%i1) load ("descriptive")$
(%i2) ( load("distrib"),
        m: 14, s: 2,
        s2: random_normal(m, s, 1000) ) $
(%i3) draw2d(
        grid   = true,
        xrange = [5, 25],
        histogram_description(
          s2,
          nclasses     = 9,
          frequency    = density,
          fill_density = 0.5),
        explicit(pdf_normal(x,m,s), x, m - 3*s, m + 3* s))$

Categories:  Package descriptive · Plotting

関数: piechart  
    piechart (list)  
    piechart (list, option_1, option_2, …)  
    piechart (one_column_matrix)  
    piechart (one_column_matrix, option_1, option_2, …)  
    piechart (one_row_matrix)  
    piechart (one_row_matrix, option_1, option_2, …)

barsplotに似ていますが、長方形の代わりに扇をプロットします。

利用可能なオプションは以下のものです:

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成する 関数 wxhistogramもあります。

例:

 
(%i1) load ("descriptive")$
(%i2) s1 : read_list (file_search ("pidigits.data"))$
(%i3) piechart(
        s1,
        xrange = [-1.1, 1.3],
        yrange = [-1.1, 1.1],
        title  = "Digit frequencies in pi")$

関数 barsplotも参照してください。

Categories:  Package descriptive · Plotting

関数: piechart_description (…)

関数 piechart_descriptionは他のグラフィックオブジェクトと一緒に 複雑なシーンを生成するのに適したグラフィックオブジェクトを生成します。

Categories:  Package descriptive · Plotting

関数: scatterplot  
    scatterplot (list)  
    scatterplot (list, option_1, option_2, …)  
    scatterplot (matrix)  
    scatterplot (matrix, option_1, option_2, …)

1変量 (list)や多変量 (matrix)の標本の散布図をプロットします。

利用可能なオプションは histogramが許すものと同じです。

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成する 関数 wxscatterplotもあります。

例:

シミュレーティッドGauss標本の1変量散布図。

 
(%i1) load ("descriptive")$
(%i2) load ("distrib")$
(%i3) scatterplot(
        random_normal(0,1,200),
        xaxis      = true,
        point_size = 2,
        dimensions = [600,150])$

二次元散布図。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(
       submatrix(s2, 1,2,3),
       title      = "Data from stations #4 and #5",
       point_type = diamant,
       point_size = 2,
       color      = blue)$

3次元散布図。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(submatrix (s2, 1,2), nclasses=4)$

5つのクラスのヒストグラムと5次元散布図。

 
(%i1) load ("descriptive")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) scatterplot(
        s2,
        nclasses     = 5,
        frequency    = relative,
        fill_color   = blue,
        fill_density = 0.3,
        xtics        = 5)$

2次元か 3次元で孤立点か線で結んだ点をプロットすることについては、 pointsを参照してください。 histogramも参照してください。

Categories:  Package descriptive · Plotting

関数: scatterplot_description (…)

関数 scatterplot_descriptionは他のグラフィックオブジェクトと一緒に 複雑なシーンを生成するのに適したグラフィックオブジェクトを生成します。

Categories:  Package descriptive · Plotting

関数: starplot (data1, data2, …, option_1, option_2, …)

1変量、多変量どちらの標本でも離散統計変数のスターダイアグラムをプロットします

dataは 1標本を意味する結果のリストかもしれませんし、 それぞれサイズ mn個の標本を意味する mn列の行列かもしれません。

利用可能なオプションは以下のものです:

wxMaximaと iMaximaインターフェイスで埋め込みヒストグラムを生成する 関数 wxstarplotもあります。

例:

絶対頻度に基づいたプロット。 ユーザーが定義した位置と半径。

 
(%i1) load ("descriptive")$
(%i2) l1: makelist(random(10),k,1,50)$
(%i3) l2: makelist(random(10),k,1,200)$
(%i4) starplot(
        l1, l2,
        stars_colors = [blue,red],
        sample_keys = ["1st sample", "2nd sample"],
        star_center = [1,2],
        star_radius = 4,
        proportional_axes = xy,
        line_width = 2 ) $

Categories:  Package descriptive · Plotting

関数: starplot_description (…)

関数 starplot_descriptionは他のグラフィックオブジェクトと一緒に 複雑なシーンを生成するのに適したグラフィックオブジェクトを生成します。

Categories:  Package descriptive · Plotting

関数: stemplot  
    stemplot (data)  
    stemplot (data, option)

幹葉図をプロットします。

固有の利用可能なオプションは:

例:

 
(%i1) load ("descriptive")$
(%i2) load(distrib)$
(%i3) stemplot(
        random_normal(15, 6, 100),
        leaf_unit = 0.1);
-5|4
 0|37
 1|7
 3|6
 4|4
 5|4
 6|57
 7|0149
 8|3
 9|1334588
10|07888
11|01144467789
12|12566889
13|24778
14|047
15|223458
16|4
17|11557
18|000247
19|4467799
20|00
21|1
22|2335
23|01457
24|12356
25|455
27|79
key: 6|3 =  6.3
(%o3)                  done

Categories:  Package descriptive · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

50. diag


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

50.1 Functions and Variables for diag

関数: diag (lm)

lmの要素のブロックサムである行列を構成します。 lmの要素は行列だと仮定します; もし要素がスカラーなら、1x1の行列として扱います。

lmの要素それぞれが正方なら、結果の行列は正方になります。

例:

 
(%i1) load("diag")$

(%i2) a1:matrix([1,2,3],[0,4,5],[0,0,6])$

(%i3) a2:matrix([1,1],[1,0])$

(%i4) diag([a1,x,a2]);
                   [ 1  2  3  0  0  0 ]
                   [                  ]
                   [ 0  4  5  0  0  0 ]
                   [                  ]
                   [ 0  0  6  0  0  0 ]
(%o4)              [                  ]
                   [ 0  0  0  x  0  0 ]
                   [                  ]
                   [ 0  0  0  0  1  1 ]
                   [                  ]
                   [ 0  0  0  0  1  0 ]
(%i5) diag ([matrix([1,2]), 3]);
                        [ 1  2  0 ]
(%o5)                   [         ]
                        [ 0  0  3 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Matrices · Share packages · Package diag

関数: JF (lambda,n)

固有値 lambdaを持つ次数 nの Jordan細胞を返します。

例:

 
(%i1) load("diag")$

(%i2) JF(2,5);
                    [ 2  1  0  0  0 ]
                    [               ]
                    [ 0  2  1  0  0 ]
                    [               ]
(%o2)               [ 0  0  2  1  0 ]
                    [               ]
                    [ 0  0  0  2  1 ]
                    [               ]
                    [ 0  0  0  0  2 ]
(%i3) JF(3,2);
                         [ 3  1 ]
(%o3)                    [      ]
                         [ 0  3 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Package diag

関数: jordan (mat)

行列 matの特別な形式でリストにエンコードされた Jordan形を返します。 対応する行列を得るには、 jordanの出力を引数として使って関数 dispJordanをコールしてください。

戻り値のリストの要素はそれ自身リストです。 それぞれの一番目の要素は matの固有値です。 残りの要素はこの固有値に関するJordanブロックの長さ(正の整数)です。 これらの整数は降順で並びます。 固有値は繰り返されません。

関数 dispJordan, minimalPoly, ModeMatrixは、 jordanを呼び出した出力を引数として期待します。 もしこの引数を、 jordanを呼び出さず手で構成するなら、 それぞれの固有値が一度だけ現れること、ブロックサイズが降順で並ぶことを保証しなくてはいけません。 そうでなければ、関数は正しくない答えを返すかもしれません。

例:

 
(%i1) load("diag")$
(%i2) A: matrix([2,0,0,0,0,0,0,0],
                [1,2,0,0,0,0,0,0],
                [-4,1,2,0,0,0,0,0],
                [2,0,0,2,0,0,0,0],
                [-7,2,0,0,2,0,0,0],
                [9,0,-2,0,1,2,0,0],
                [-34,7,1,-2,-1,1,2,0],
                [145,-17,-16,3,9,-2,0,3])$
(%i3) jordan (A);
(%o3)                [[2, 3, 3, 1], [3, 1]]
(%i4) dispJordan (%);
                   [ 2  1  0  0  0  0  0  0 ]
                   [                        ]
                   [ 0  2  1  0  0  0  0  0 ]
                   [                        ]
                   [ 0  0  2  0  0  0  0  0 ]
                   [                        ]
                   [ 0  0  0  2  1  0  0  0 ]
(%o4)              [                        ]
                   [ 0  0  0  0  2  1  0  0 ]
                   [                        ]
                   [ 0  0  0  0  0  2  0  0 ]
                   [                        ]
                   [ 0  0  0  0  0  0  2  0 ]
                   [                        ]
                   [ 0  0  0  0  0  0  0  3 ]

この関数を使うためには最初に load("diag")と書いてください。 dispJordanminimalPolyも参照してください。

Categories:  Package diag

関数: dispJordan (l)

lで与えられた固有値と重複度のリストに対応した行列をJordan標準形で返します。 このリストはは関数 jordanが与える形式でなければいけません。 この形式の詳細は jordanを参照してください。

例:

 
(%i1) load("diag")$

(%i2) b1:matrix([0,0,1,1,1],
                [0,0,0,1,1],
                [0,0,0,0,1],
                [0,0,0,0,0],
                [0,0,0,0,0])$

(%i3) jordan(b1);
(%o3)                  [[0, 3, 2]]
(%i4) dispJordan(%);
                    [ 0  1  0  0  0 ]
                    [               ]
                    [ 0  0  1  0  0 ]
                    [               ]
(%o4)               [ 0  0  0  0  0 ]
                    [               ]
                    [ 0  0  0  0  1 ]
                    [               ]
                    [ 0  0  0  0  0 ]

この関数を使うためには最初に load("diag")と書いてください。 jordanminimalPolyも参照してください。

Categories:  Package diag

関数: minimalPoly (l)

Maximaリストlで与えられたコードに関連付けられた最小多項式を返します。 lは関数 jordanが与える出力です。 この形式の詳細については jordanを参照してください。

例:

 
(%i1) load("diag")$

(%i2) a:matrix([2,1,2,0],
               [-2,2,1,2],
               [-2,-1,-1,1],
               [3,1,2,-1])$

(%i3) jordan(a);
(%o3)               [[- 1, 1], [1, 3]]
(%i4) minimalPoly(%);
                            3
(%o4)                (x - 1)  (x + 1)

この関数を使うためには最初に load("diag")と書いてください。 jordandispJordanも参照してください。

Categories:  Package diag

関数: ModeMatrix (A, [jordan_info])

(M^^-1).A.MAの Jordan形になるような可逆行列 Mを返します。

これを計算するために、Maximaは Aの Jordan形を見つけなければいけません。 それは非常に重い計算になる可能性があります。 もし既に jordanを以前に呼び出して計算したなら、二番目の引数 jordan_infoにそれを渡してください。 要求される形式の詳細は jordanを参照してください。

例:

 
(%i1) load("diag")$
(%i2) A: matrix([2,1,2,0], [-2,2,1,2], [-2,-1,-1,1], [3,1,2,-1])$
(%i3) M: ModeMatrix (A);
                      [  1    - 1   1   1 ]
                      [                   ]
                      [   1               ]
                      [ - -   - 1   0   0 ]
                      [   9               ]
                      [                   ]
(%o3)                 [   13              ]
                      [ - --   1   - 1  0 ]
                      [   9               ]
                      [                   ]
                      [  17               ]
                      [  --   - 1   1   1 ]
                      [  9                ]
(%i4) is ((M^^-1) . A . M = dispJordan (jordan (A)));
(%o4)                         true

この例で、Aの Jordan形が2回計算されていることに注意してください。 これを避けるには、 jordan(A)の出力を変数に保存して、それを jordandispJordanに渡します。

この関数を使うためには最初に load("diag")と書いてください。 jordandispJordanも参照してください。

Categories:  Package diag

関数: mat_function (f,A)

f(A)を返します。 ここで fは解析関数で Aは行列です。 この計算は fのTaylor展開に基づきます。 数値評価には効率的ではありませんが、小さな行列に関して記号的な答えを出すことができます。

例 1:

行列の指数関数。 出力が非常に大きいので、答えの一番目の行だけを求めます。

 
(%i1) load("diag")$
(%i2) A: matrix ([0,1,0], [0,0,1], [-1,-3,-3])$
(%i3) ratsimp (mat_function (exp, t*A)[1]);
           2              - t                   2   - t
         (t  + 2 t + 2) %e       2        - t  t  %e
(%o3)   [--------------------, (t  + t) %e   , --------]
                  2                               2

例 2:

指数関数に関するTaylor級数との比較。 また、 exp(%i*A)をsine, cosineと比較。

 
(%i1) load("diag")$
(%i2) A: matrix ([0,1,1,1],
                 [0,0,0,1],
                 [0,0,0,1],
                 [0,0,0,0])$
(%i3) ratsimp (mat_function (exp, t*A));
                       [           2     ]
                       [ 1  t  t  t  + t ]
                       [                 ]
(%o3)                  [ 0  1  0    t    ]
                       [                 ]
                       [ 0  0  1    t    ]
                       [                 ]
                       [ 0  0  0    1    ]
(%i4) minimalPoly (jordan (A));
                                3
(%o4)                          x
(%i5) ratsimp (ident(4) + t*A + 1/2*(t^2)*A^^2);
                       [           2     ]
                       [ 1  t  t  t  + t ]
                       [                 ]
(%o5)                  [ 0  1  0    t    ]
                       [                 ]
                       [ 0  0  1    t    ]
                       [                 ]
                       [ 0  0  0    1    ]
(%i6) ratsimp (mat_function (exp, %i*t*A));
                  [                        2 ]
                  [ 1  %i t  %i t  %i t - t  ]
                  [                          ]
(%o6)             [ 0   1     0      %i t    ]
                  [                          ]
                  [ 0   0     1      %i t    ]
                  [                          ]
                  [ 0   0     0        1     ]
(%i7) ratsimp (mat_function (cos, t*A) + %i*mat_function (sin, t*A));
                  [                        2 ]
                  [ 1  %i t  %i t  %i t - t  ]
                  [                          ]
(%o7)             [ 0   1     0      %i t    ]
                  [                          ]
                  [ 0   0     1      %i t    ]
                  [                          ]
                  [ 0   0     0        1     ]

例 3:

べき演算。

 
(%i1) load("diag")$
(%i2) A: matrix([1,2,0], [0,1,0], [1,0,1])$
(%i3) integer_pow(x) := block ([k], declare (k, integer), x^k)$
(%i4) mat_function (integer_pow, A);
                       [ 1     2 k     0 ]
                       [                 ]
(%o4)                  [ 0      1      0 ]
                       [                 ]
                       [ k  (k - 1) k  1 ]
(%i5) A^^20;
                         [ 1   40   0 ]
                         [            ]
(%o5)                    [ 0    1   0 ]
                         [            ]
                         [ 20  380  1 ]

この関数を使うためには最初に load("diag")と書いてください。

Categories:  Package diag


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51. distrib


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.1 Introduction to distrib

パッケージ distribには 離散と連続両方の単変量モデル上の確率計算を行う関数一式が入っています。

以下は基本的な確率関連の定義の短い復習です。

f(x)を 絶対連続確率変数 Xdensity function, 密度函数とします。 distribution function, 分布函数は以下のように定義されます。

 
                       x
                      /
                      [
               F(x) = I     f(u) du
                      ]
                      /
                       minf

これは確率 Pr(X <= x)に等しいです。

mean, 平均値は局所化パラメータで、以下のように定義されます。

 
                     inf
                    /
                    [
           E[X]  =  I   x f(x) dx
                    ]
                    /
                     minf

variance, 分散は変動の測度です。

 
                 inf
                /
                [                    2
         V[X] = I     f(x) (x - E[X])  dx
                ]
                /
                 minf

これは正の実数です。 分散の平方根は standard deviation, 標準偏差, D[X]=sqrt(V[X])で、 変動の別の測度です。

skewness coefficient, 歪度係数は非対称性の測度です。

 
                 inf
                /
            1   [                    3
  SK[X] = ----- I     f(x) (x - E[X])  dx
              3 ]
          D[X]  /
                 minf

kurtosis coefficient, 尖度係数は分布のとんがり具合を評価します。

 
                 inf
                /
            1   [                    4
  KU[X] = ----- I     f(x) (x - E[X])  dx - 3
              4 ]
          D[X]  /
                 minf

もし Xがガウシアンなら、 KU[X]=0です。 実際、歪度と尖度は分布の非ガウシアン性を評価するのに使われる形状パラメータです。

もし確率変数 Xが離散的なら、密度すなわち probability, 確率函数 f(x)は数 x_iのある可算集合内で正値を取り、それ以外で0を取ります。 この場合、分布函数は以下の通りです。

 
                       ====
                       \
                F(x) =  >    f(x )
                       /        i
                       ====
                      x <= x
                       i

平均、分散、標準偏差、歪度係数、尖度係数はそれぞれ以下の形を取ります。

 
                       ====
                       \
                E[X] =  >  x  f(x ) ,
                       /    i    i
                       ====
                        x
                         i
 
                ====
                \                     2
        V[X] =   >    f(x ) (x - E[X])  ,
                /        i    i
                ====
                 x
                  i
 
               D[X] = sqrt(V[X]),
 
                     ====
              1      \                     3
  SK[X] =  -------    >    f(x ) (x - E[X])
           D[X]^3    /        i    i
                     ====
                      x
                       i

and

 
                     ====
              1      \                     4
  KU[X] =  -------    >    f(x ) (x - E[X])   - 3 ,
           D[X]^4    /        i    i
                     ====
                      x
                       i

以下はパッケージ distribでの命名規則です。 すべての関数名は 2つの部分を持ちます。 一番目の部分は計算したい函数やパラメータへの参照となります。

 
Functions:
   Density function            (pdf_*)
   Distribution function       (cdf_*)
   Quantile                    (quantile_*)
   Mean                        (mean_*)
   Variance                    (var_*)
   Standard deviation          (std_*)
   Skewness coefficient        (skewness_*)
   Kurtosis coefficient        (kurtosis_*)
   Random variate              (random_*)

二番目の部分は確率モデルの明示的な参照になります。

 
Continuous distributions:
   Normal              (*normal)
   Student             (*student_t)
   Chi^2               (*chi2)
   Noncentral Chi^2    (*noncentral_chi2)
   F                   (*f)
   Exponential         (*exp)
   Lognormal           (*lognormal)
   Gamma               (*gamma)
   Beta                (*beta)
   Continuous uniform  (*continuous_uniform)
   Logistic            (*logistic)
   Pareto              (*pareto)
   Weibull             (*weibull)
   Rayleigh            (*rayleigh)
   Laplace             (*laplace)
   Cauchy              (*cauchy)
   Gumbel              (*gumbel)

Discrete distributions:
   Binomial             (*binomial)
   Poisson              (*poisson)
   Bernoulli            (*bernoulli)
   Geometric            (*geometric)
   Discrete uniform     (*discrete_uniform)
   hypergeometric       (*hypergeometric)
   Negative binomial    (*negative_binomial)
   Finite discrete      (*general_finite_discrete)

例えば pdf_student_t(x,n)はn個の自由度を持つStudent分布の密度函数で、 std_pareto(a,b)はパラメータ abを持つ Pareto分布の標準偏差であり、 kurtosis_poisson(m)は平均値 mを持つ Poisson分布の尖度係数です。

パッケージ distribを利用するには、始めに

 
(%i1) load(distrib)$

とタイプしてそれをロードする必要があります。

ご意見、バグ、提案は著者 'riotorto AT yahoo DOT com'に連絡ください。

Categories:  Statistical functions · Share packages · Package distrib


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.2 Functions and Variables for continuous distributions

関数: pdf_normal (x,m,s)

s>0Normal(m,s)(正規)確率変数の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_normal (x,m,s)

s>0Normal(m,s)(正規)確率変数の密度函数の xでの値を返します。 この関数は Maximaの組み込み誤差関数 erfを使って定義されます。

 
(%i1) load (distrib)$
(%i2) cdf_normal(x,m,s);
                                    x - m
                              erf(---------)
                                  sqrt(2) s    1
(%o2)                         -------------- + -
                                    2          2

erfも参照してください。

Categories:  Package distrib

関数: quantile_normal (q,m,s)

s>0Normal(m,s)(正規)確率変数の q分位数を返します。 言い換えるとこれは cdf_normalの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

 
(%i1) load (distrib)$
(%i2) quantile_normal(95/100,0,1);
                                      9
(%o2)             sqrt(2) inverse_erf(--)
                                      10
(%i3) float(%);
(%o3)               1.644853626951472

Categories:  Package distrib

関数: mean_normal (m,s)

s>0Normal(m,s)(正規)確率変数の平均、すなわち mを返します。 この関数を利用するには、始めに load(distrib)を書いてください。

Categories:  Package distrib

関数: var_normal (m,s)

s>0Normal(m,s)(正規)確率変数の分散、すなわち s^2を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_normal (m,s)

s>0Normal(m,s)(正規)確率変数の分散、すなわち sを返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_normal (m,s)

s>0Normal(m,s)(正規)確率変数の歪度を返します。それは常に 0に等しいです。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_normal (m,s)

s>0Normal(m,s)(正規)確率変数の尖度を返します。それは常に 0に等しいです。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_normal (m,s)  
    random_normal (m,s,n)

s>0Normal(m,s)(正規)確率変量を返します。 三番目の引数 nとともにrandom_normalをコールすると、サイズ nのランダムな標本がシミュレートされます。

これは Box-Muellerアルゴリズムの実装です。 Knuth, D.E. (1981) Seminumerical Algorithms. The Art of Computer Programming. Addison-Wesleyに記載されています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_student_t (x,n)

n>0自由度のStudent確率変数 t(n)の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_student_t (x,n)

n>0自由度の Student確率変数 t(n)の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_student_t(1/2, 7/3);
                                         7  1  28
             beta_incomplete_regularized(-, -, --)
                                         6  2  31
(%o2)    1 - -------------------------------------
                               2
(%i3) float(%);
(%o3)                .6698450596140415

Categories:  Package distrib

関数: quantile_student_t (q,n)

n>0自由度の Student確率変数 t(n)q-分位数を返します。 言い換えるとこれは cdf_student_tの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_student_t (n)

n>0自由度の Student確率変数 t(n)の平均を返します。 それはいつも0に等しいです。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_student_t (n)

n>2自由度の Student確率変数 t(n)の分散を返します。

 
(%i1) load (distrib)$
(%i2) assume(n>2)$  var_student_t(n);
                                n
(%o3)                         -----
                              n - 2

Categories:  Package distrib

関数: std_student_t (n)

n>2自由度の Student確率変数 t(n)の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_student_t (n)

n>3自由度の Student確率変数 t(n)の歪度係数を返します。 それはいつも 0に等しいです。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_student_t (n)

n>4自由度の Student確率変数 t(n)の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_student_t (n)  
    random_student_t (n,m)

n>0自由度の Student確率変量 t(n)を返します。 三番目の引数 mとともに random_student_tをコールすると、 サイズ mのランダムな標本がシミュレートされます。

実装アルゴリズムは、 もし Zが正規確率変数 N(0,1)で、 S^2n自由度のカイ二乗確率変数 Chi^2(n)なら、

 
                           Z
                 X = -------------
                     /   2  \ 1/2
                     |  S   |
                     | ---  |
                     \  n   /

n自由度の Student確率変数 t(n)であるという事実に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_noncentral_student_t (x,n,ncp)

n>0自由度で非中心度パラメータ ncpを持つ 非中心 Student確率変数 nc_t(n,ncp)の密度函数のxでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

時々、最終結果を得るために余分な仕事が必要となります。

 
(%i1) load (distrib)$
(%i2) expand(pdf_noncentral_student_t(3,5,0.1));
                           7/2                         7/2
      0.04296414417400905 5      1.323650307289301e-6 5
(%o2) ------------------------ + -------------------------
         3/2   5/2                       sqrt(%pi)
        2    14    sqrt(%pi)
                                                        7/2
                                   1.94793720435093e-4 5
                                 + ------------------------
                                             %pi
(%i3) float(%);
(%o3)          .02080593159405669

Categories:  Package distrib

関数: cdf_noncentral_student_t (x,n,ncp)

n>0自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の分布函数のxでの値を返します。 この函数は閉形式を持たず、数値的に計算されます。

 
(%i1) load (distrib)$
(%i2) cdf_noncentral_student_t(-2,5,-5);
(%o2)          .9952030093319743

Categories:  Package distrib

関数: quantile_noncentral_student_t (q,n,ncp)

n>0自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)q-分位数を返します。 言い換えると、これは cdf_noncentral_student_tの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_noncentral_student_t (n,ncp)

n>0自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

 
(%i1) load (distrib)$
(%i2) mean_noncentral_student_t(df,k);
                   df - 1
             gamma(------) sqrt(df) k
                     2
(%o2)        ------------------------
                              df
                sqrt(2) gamma(--)
                              2

Categories:  Package distrib

関数: var_noncentral_student_t (n,ncp)

n>2自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_noncentral_student_t (n,ncp)

n>2自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_noncentral_student_t (n,ncp)

n>3自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_noncentral_student_t (n,ncp)

n>3自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_noncentral_student_t (n,ncp)  
    random_noncentral_student_t (n,ncp,m)

n>0自由度で非中心度パラメータ ncpを持つ 非中心Student確率変量 nc_t(n,ncp)を返します。 三番目の引数 mとともにrandom_noncentral_student_tをコールすると、 サイズ mのランダムな標本がシミュレートされます。

もし Xが正規確率変数 N(ncp,1)で、 S^2n自由度のカイ二乗確率変数 Chi^2(n)なら、

 
                           X
                 U = -------------
                     /   2  \ 1/2
                     |  S   |
                     | ---  |
                     \  n   /

n自由度で非中心度パラメータ ncpを持つ 非中心Student確率変数 nc_t(n,ncp)であるという事実に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_chi2 (x,n)

n>0でカイ二乗確率変数 Chi^2(n)の密度函数の xでの値を返します。

Chi^2(n)確率変数は Gamma(n/2,2)と同値です。

 
(%i1) load (distrib)$
(%i2) pdf_chi2(x,n);
                         n/2 - 1   - x/2
                        x        %e
(%o2)                   ----------------
                          n/2       n
                         2    gamma(-)
                                    2

Categories:  Package distrib

関数: cdf_chi2 (x,n)

n>0で、カイ二乗確率変数 Chi^2(n)の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_chi2(3,4);
                                               3
(%o2)      1 - gamma_incomplete_regularized(2, -)
                                               2
(%i3) float(%);
(%o3)               .4421745996289256

Categories:  Package distrib

関数: quantile_chi2 (q,n)

n>0で、カイ二乗確率変数 Chi^2(n)q-分位数を返します; 言い換えると、これは cdf_chi2の逆函数です。 引数 q[0,1]の要素でなければいけません。

この函数は閉形式を持たず、数値的に計算されます。

 
(%i1) load (distrib)$
(%i2) quantile_chi2(0.99,9);
(%o2)                   21.66599433346194

Categories:  Package distrib

関数: mean_chi2 (n)

n>0で、カイ二乗確率変数 Chi^2(n)の平均を返します。

Chi^2(n)確率変数は Gamma(n/2,2)に同値です。

 
(%i1) load (distrib)$
(%i2) mean_chi2(n);
(%o2)                           n

Categories:  Package distrib

関数: var_chi2 (n)

n>0で、カイ二乗確率変数 Chi^2(n)の分散を返します。

Chi^2(n)確率変数は Gamma(n/2,2)に同値です。

 
(%i1) load (distrib)$
(%i2) var_chi2(n);
(%o2)                          2 n

Categories:  Package distrib

関数: std_chi2 (n)

n>0で、カイ二乗確率変数 Chi^2(n)の標準偏差を返します。

Chi^2(n)確率変数は Gamma(n/2,2)です。

 
(%i1) load (distrib)$
(%i2) std_chi2(n);
(%o2)                    sqrt(2) sqrt(n)

Categories:  Package distrib

関数: skewness_chi2 (n)

n>0で、カイ二乗確率変数 Chi^2(n)の歪度係数を返します。

Chi^2(n)確率変数は Gamma(n/2,2)です。

 
(%i1) load (distrib)$
(%i2) skewness_chi2(n);
                                     3/2
                                    2
(%o2)                              -------
                                   sqrt(n)

Categories:  Package distrib

関数: kurtosis_chi2 (n)

n>0で、カイ二乗確率変数 Chi^2(n)の尖度係数を返します。

Chi^2(n)確率変数は Gamma(n/2,2)です。

 
(%i1) load (distrib)$
(%i2) kurtosis_chi2(n);
                               12
(%o2)                          --
                               n

Categories:  Package distrib

関数: random_chi2 (n)  
    random_chi2 (n,m)

n>0で、カイ二乗確率変量 Chi^2(n)を返します。 二番目の引数 mとともにrandom_chi2をコールすると、 サイズ mのランダムな標本がシミュレートされます。

シミュレーションはAhrens-Chengアルゴリズムに基づきます。 詳細はrandom_gammaを参照してください。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_noncentral_chi2 (x,n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 密度函数の xでの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_noncentral_chi2 (x,n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_noncentral_chi2 (q,n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)q-分位数を返します; 言い換えると、これは cdf_noncentral_chi2の逆函数です。 引数 q[0,1]の要素でなければいけません。

この関数は閉形式を持たず、数値的に計算されます。

Categories:  Package distrib

関数: mean_noncentral_chi2 (n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 平均を返します。

Categories:  Package distrib

関数: var_noncentral_chi2 (n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 分散を返します。

Categories:  Package distrib

関数: std_noncentral_chi2 (n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 標準偏差を返します。

Categories:  Package distrib

関数: skewness_noncentral_chi2 (n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 歪度係数を返します。

Categories:  Package distrib

関数: kurtosis_noncentral_chi2 (n,ncp)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変数 nc_Chi^2(n,ncp)の 尖度係数を返します。

Categories:  Package distrib

関数: random_noncentral_chi2 (n,ncp)  
    random_noncentral_chi2 (n,ncp,m)

n>0と非中心度パラメータ ncp>=0を持つ 非中心カイ二乗確率変量 nc_Chi^2(n,ncp)を返します。 三番目の引数 mとともに random_noncentral_chi2をコールすると、 サイズ mのランダムな標本がシミュレートされます。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_f (x,m,n)

m,n>0で、 F確率変数 F(m,n)の密度関数の xの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_f (x,m,n)

m,n>0で、 F確率変数 F(m,n)の分布関数の xの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_f(2,3,9/4);
                                         9  3  3
(%o2)    1 - beta_incomplete_regularized(-, -, --)
                                         8  2  11
(%i3) float(%);
(%o3)                 0.66756728179008

Categories:  Package distrib

関数: quantile_f (q,m,n)

m,n>0で、 F確率変数 F(m,n)q-分位数を返します; 言い換えるとこれは cdf_fの逆函数です。 引数 q[0,1]の要素でなければいけません。

 
(%i1) load (distrib)$
(%i2) quantile_f(2/5,sqrt(3),5);
(%o2)                   0.518947838573693

Categories:  Package distrib

関数: mean_f (m,n)

m,n>2で、 F確率変数 F(m,n)の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_f (m,n)

m,n>4で、 F確率変数 F(m,n)の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_f (m,n)

m,n>4で、 F確率変数 F(m,n)の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_f (m,n)

m,n>6で、 F確率変数 F(m,n)の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_f (m,n)

m,n>8で、 F確率変数 F(m,n)の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_f (m,n)  
    random_f (m,n,k)

m,n>8で、 F確率変量 F(m,n)を返します。 三番目の引数 kとともに random_fをコールすると、 サイズ kのランダムな標本がシミュレートされます。

シミュレーションアルゴリズムは、もし XChi^2(m)確率変数で YChi^2(n)確率変数なら

 
                        n X
                    F = ---
                        m Y

mn自由度を持つ F確率変数 F(m,n)である という事実に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_exp (x,m)

m>0で、 Exponential(m)(指数)確率変数の密度函数の xでの値を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) pdf_exp(x,m);
                                - m x
(%o2)                       m %e

Categories:  Package distrib

関数: cdf_exp (x,m)

m>0で、 Exponential(m)(指数)確率変数の分布函数の xでの値を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) cdf_exp(x,m);
                                 - m x
(%o2)                      1 - %e

Categories:  Package distrib

関数: quantile_exp (q,m)

m>0で、 Exponential(m)(指数)確率変数の q-分位数を返します; 言い換えるとこれはcdf_expの逆函数です。 引数 q[0,1]の要素でなければいけません。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) quantile_exp(0.56,5);
(%o2)                   .1641961104139661
(%i3) quantile_exp(0.56,m);
                             0.8209805520698303
(%o3)                        ------------------
                                     m

Categories:  Package distrib

関数: mean_exp (m)

m>0で、 Exponential(m)(指数)確率変数の平均を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) mean_exp(m);
                                1
(%o2)                           -
                                m

Categories:  Package distrib

関数: var_exp (m)

m>0で、 Exponential(m)(指数)確率変数の分散を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) var_exp(m);
                               1
(%o2)                          --
                                2
                               m

Categories:  Package distrib

関数: std_exp (m)

m>0で、 Exponential(m)(指数)確率変数の標準偏差を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) std_exp(m);
                                1
(%o2)                           -
                                m

Categories:  Package distrib

関数: skewness_exp (m)

m>0で、 Exponential(m)(指数)確率変数の歪度係数を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) skewness_exp(m);
(%o2)                           2

Categories:  Package distrib

関数: kurtosis_exp (m)

m>0で、 Exponential(m)(指数)確率変数の尖度係数を返します。

Exponential(m)(指数)確率変数は Weibull(1,1/m)と同値です。

 
(%i1) load (distrib)$
(%i2) kurtosis_exp(m);
(%o3)                           6

Categories:  Package distrib

関数: random_exp (m)  
    random_exp (m,k)

m>0で、 Exponential(m)(指数)確率変量を返します。 二番目の引数 kとともに random_expをコールすると、 サイズ kのランダムな標本がシミュレートされます。

シミュレーションアルゴリズムは一般逆函数法です。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_lognormal (x,m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の密度函数の xでの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_lognormal (x,m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の分布函数の xでの値を返します。 この関数は Maximaの組み込み誤差関数 erfを使って定義されます。

 
(%i1) load (distrib)$
(%i2) cdf_lognormal(x,m,s);
                           log(x) - m
                       erf(----------)
                           sqrt(2) s     1
(%o2)                  --------------- + -
                              2          2

erfも参照してください。

Categories:  Package distrib

関数: quantile_lognormal (q,m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の q-分位数を返します; 言い換えるとこれは cdf_lognormalの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

 
(%i1) load (distrib)$
(%i2) quantile_lognormal(95/100,0,1);
                  sqrt(2) inverse_erf(9/10)
(%o2)           %e
(%i3) float(%);
(%o3)               5.180251602233015

Categories:  Package distrib

関数: mean_lognormal (m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_lognormal (m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_lognormal (m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_lognormal (m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_lognormal (m,s)

s>0で、 Lognormal(m,s)(対数正規)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_lognormal (m,s)  
    random_lognormal (m,s,n)

s>0で、 Lognormal(m,s)(対数正規)確率変量を返します。 三番目の引数 nとともにrandom_lognormalをコールすると、 サイズ nのランダムな標本がシミュレートされます。

対数世紀変量は確率正規変量の平均によってシミュレートされます。 詳細は random_normalを見てください。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_gamma (x,a,b)

a,b>0で、 Gamma(a,b)確率変数の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_gamma (x,a,b)

a,b>0で、 Gamma(a,b)確率変数の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_gamma(3,5,21);
                                              1
(%o2)     1 - gamma_incomplete_regularized(5, -)
                                              7
(%i3) float(%);
(%o3)              4.402663157376807E-7

Categories:  Package distrib

関数: quantile_gamma (q,a,b)

a,b>0で、 Gamma(a,b)確率変数の p-分位数を返します; 言い換えればこれは cdf_gammaの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_gamma (a,b)

a,b>0で、 Gamma(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_gamma (a,b)

a,b>0で、 Gamma(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_gamma (a,b)

a,b>0で、 Gamma(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_gamma (a,b)

a,b>0で、 Gamma(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_gamma (a,b)

a,b>0で、 Gamma(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_gamma (a,b)  
    random_gamma (a,b,n)

a,b>0で、 Gamma(a,b)確率変量を返します。 三番目の引数 nとともに random_gammaをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムはパラメータ aの値に依存して、2つの手続きの組み合わせです:

a>=1に対して, Cheng, R.C.H. and Feast, G.M. (1979). Some simple gamma variate generators. Appl. Stat., 28, 3, 290-295.

0<a<1に対して, Ahrens, J.H. and Dieter, U. (1974). Computer methods for sampling from gamma, beta, poisson and binomial cdf_tributions. Computing, 12, 223-246.

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_beta (x,a,b)

a,b>0で、 Beta(a,b)確率変数の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_beta (x,a,b)

a,b>0で、 Beta(a,b)確率変数の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_beta(1/3,15,2);
                             11
(%o2)                     --------
                          14348907
(%i3) float(%);
(%o3)              7.666089131388195E-7

Categories:  Package distrib

関数: quantile_beta (q,a,b)

a,b>0で、 Beta(a,b)確率変数の q-分位数を返します; 言い換えるとこれは cdf_betaの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_beta (a,b)

a,b>0で、 Beta(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_beta (a,b)

a,b>0で、 Beta(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_beta (a,b)

a,b>0で、 Beta(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_beta (a,b)

a,b>0で、 Beta(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_beta (a,b)

a,b>0で、 Beta(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_beta (a,b)  
    random_beta (a,b,n)

a,b>0で、 Beta(a,b)確率変量を返します。 三番目の引数 nとともに random_gammaをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは Cheng, R.C.H. (1978). Generating Beta Variates with Nonintegral Shape Parameters. Communications of the ACM, 21:317-322 に定義されています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_continuous_uniform (x,a,b)

a<bで、 Continuous Uniform(a,b)確率変数の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_continuous_uniform (x,a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_continuous_uniform (q,a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の q-分位数を返します。 言い換えるとこれは cdf_continuous_uniformの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_continuous_uniform (a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の 平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_continuous_uniform (a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の 分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_continuous_uniform (a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_continuous_uniform (a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_continuous_uniform (a,b)

a<bで、 Continuous Uniform(a,b)確率変数の分布函数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_continuous_uniform (a,b)  
    random_continuous_uniform (a,b,n)

a<bで、 Continuous Uniform(a,b)確率変量を返します。 三番目の引数 nとともに random_gammaをコールすると、 サイズ nのランダムな標本がシミュレートされます。

これは random組み込みMaxima関数の直接の応用です。

randomも参照してください。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_logistic (x,a,b)

b>0で、 Logistic(a,b)確率変数の密度函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_logistic (x,a,b)

b>0で、 Logistic(a,b)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_logistic (q,a,b)

b>0で、 Logistic(a,b)確率変数の q-分位数を返します。 言い換えると、これは cdf_logisticの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_logistic (a,b)

b>0で、 Logistic(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_logistic (a,b)

b>0で、 Logistic(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_logistic (a,b)

b>0で、 Logistic(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_logistic (a,b)

b>0で、 Logistic(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_logistic (a,b)

b>0で、 Logistic(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_logistic (a,b)  
    random_logistic (a,b,n)

b>0で、 Logistic(a,b)確率変量を返します。 三番目の引数 nとともに random_logisticをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_pareto (x,a,b)

a,b>0で、 Pareto(a,b)確率変数の密度函数の xの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_pareto (x,a,b)

a,b>0で、 Pareto(a,b)確率変数の分布函数の xの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_pareto (q,a,b)

a,b>0で、 Pareto(a,b)確率変数の q-分位数を返します; 言い換えると、これは cdf_paretoの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_pareto (a,b)

a,b>0で、 Pareto(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_pareto (a,b)

a>2,b>0で、 Pareto(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_pareto (a,b)

a>2,b>0で、 Pareto(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_pareto (a,b)

a>2,b>0で、 Pareto(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_pareto (a,b)

a>2,b>0で、 Pareto(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_pareto (a,b)  
    random_pareto (a,b,n)

a>2,b>0で、 Pareto(a,b)確率変量を返します。 三番目の引数 nとともに random_paretoをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_weibull (x,a,b)

a,b>0で、 Weibull(a,b)確率変数の密度函数の xの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_weibull (x,a,b)

a,b>0で、 Weibull(a,b)確率変数の分布函数の xの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_weibull (q,a,b)

a,b>0で、 Weibull(a,b)確率変数の q-分位数を返します; 言い換えれば、これは cdf_weibullの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_weibull (a,b)

a,b>0で、 Weibull(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_weibull (a,b)

a,b>0で、 Weibull(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_weibull (a,b)

a,b>0で、 Weibull(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_weibull (a,b)

a,b>0で、 Weibull(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_weibull (a,b)

a,b>0で、 Weibull(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_weibull (a,b)  
    random_weibull (a,b,n)

a,b>0で、 Weibull(a,b)確率変量を返します。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_rayleigh (x,b)

b>0で、 Rayleigh(b)確率変数の密度函数の xでの値を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) pdf_rayleigh(x,b);
                                    2  2
                           2     - b  x
(%o2)                   2 b  x %e

Categories:  Package distrib

関数: cdf_rayleigh (x,b)

b>0で、 Rayleigh(b)確率変数の分布函数の xでの値を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) cdf_rayleigh(x,b);
                                   2  2
                                - b  x
(%o2)                     1 - %e

Categories:  Package distrib

関数: quantile_rayleigh (q,b)

b>0で、 Rayleigh(b)確率変数の q-分位数を返します; 言い換えれば、これは cdf_rayleighの逆函数です。 引数 q[0,1]の要素でなければいけません。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) quantile_rayleigh(0.99,b);
                        2.145966026289347
(%o2)                   -----------------
                                b

Categories:  Package distrib

関数: mean_rayleigh (b)

b>0で、 Rayleigh(b)確率変数の 平均を返します;

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) mean_rayleigh(b);
                            sqrt(%pi)
(%o2)                       ---------
                               2 b

Categories:  Package distrib

関数: var_rayleigh (b)

b>0で、 Rayleigh(b)確率変数の分散を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) var_rayleigh(b);
                                 %pi
                             1 - ---
                                  4
(%o2)                        -------
                                2
                               b

Categories:  Package distrib

関数: std_rayleigh (b)

b>0で、 Rayleigh(b)確率変数の標準偏差を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) std_rayleigh(b);
                                   %pi
                          sqrt(1 - ---)
                                    4
(%o2)                     -------------
                                b

Categories:  Package distrib

関数: skewness_rayleigh (b)

b>0で、 Rayleigh(b)確率変数の歪度係数を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) skewness_rayleigh(b);
                         3/2
                      %pi      3 sqrt(%pi)
                      ------ - -----------
                        4           4
(%o2)                 --------------------
                               %pi 3/2
                          (1 - ---)
                                4

Categories:  Package distrib

関数: kurtosis_rayleigh (b)

b>0で、 Rayleigh(b)確率変数の尖度係数を返します。

Rayleigh(b)確率変数は Weibull(2,1/b)と同値です。

 
(%i1) load (distrib)$
(%i2) kurtosis_rayleigh(b);
                                  2
                             3 %pi
                         2 - ------
                               16
(%o2)                    ---------- - 3
                              %pi 2
                         (1 - ---)
                               4

Categories:  Package distrib

関数: random_rayleigh (b)  
    random_rayleigh (b,n)

b>0で、 Rayleigh(b)確率変量を返します。 二番目の引数 nとともに random_paretoをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_laplace (x,a,b)

b>0で、 Laplace(a,b)確率変数の密度函数の xでの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_laplace (x,a,b)

b>0で、 Laplace(a,b)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_laplace (q,a,b)

b>0で、 Laplace(a,b)確率変数のq-分位数を返します; 言い換えれば、これは cdf_laplaceの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_laplace (a,b)

b>0で、 Laplace(a,b)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_laplace (a,b)

b>0で、 Laplace(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_laplace (a,b)

b>0で、 Laplace(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_laplace (a,b)

b>0で、 Laplace(a,b)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_laplace (a,b)

b>0で、 Laplace(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_laplace (a,b)  
    random_laplace (a,b,n)

b>0で、 Laplace(a,b)確率変量を返します。 三番目の引数 nとともに random_laplaceをコールすると、サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_cauchy (x,a,b)

b>0で、 Cauchy(a,b)確率変数の密度函数のxでの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_cauchy (x,a,b)

b>0で、 Cauchy(a,b)確率変数の分布函数のxでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_cauchy (q,a,b)

b>0で、 Cauchy(a,b)確率変数のq-分位数を返します; 言い換えると、これは cdf_cauchyの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_cauchy (a,b)  
    random_cauchy (a,b,n)

b>0で、 Cauchy(a,b)確率変量を返します。 三番目の引数 nとともに random_cauchyをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_gumbel (x,a,b)

b>0で、 Gumbel(a,b)確率変数の密度函数のxでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_gumbel (x,a,b)

b>0で、 Gumbel(a,b)確率変数の分布函数のxでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_gumbel (q,a,b)

b>0で、 Gumbel(a,b)確率変数のq-分位数を返します; 言い換えれば、これは cdf_gumbelの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_gumbel (a,b)

b>0で、 Gumbel(a,b)確率変数の平均を返します。

 
(%i1) load (distrib)$
(%i2) mean_gumbel(a,b);
(%o2)                     %gamma b + a

ここでシンボル %gammaは Euler-Mascheroni定数を表します。 %gammaも参照してください。

Categories:  Package distrib

関数: var_gumbel (a,b)

b>0で、 Gumbel(a,b)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_gumbel (a,b)

b>0で、 Gumbel(a,b)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_gumbel (a,b)

b>0で、 Gumbel(a,b)確率変数の歪度係数を返します。

 
(%i1) load (distrib)$
(%i2) skewness_gumbel(a,b);
                                  3/2
                               2 6    zeta(3)
(%o2)                          --------------
                                       3
                                    %pi

ここで zetaはRiemannのゼータ函数を表します。

Categories:  Package distrib

関数: kurtosis_gumbel (a,b)

b>0で、 Gumbel(a,b)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Package distrib

関数: random_gumbel (a,b)  
    random_gumbel (a,b,n)

b>0で、 Gumbel(a,b)確率変量を返します。 三番目の引数 nとともに random_gumbelをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは一般逆函数法に基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.3 Functions and Variables for discrete distributions

関数: pdf_general_finite_discrete (x,v)

Pr(X=i) = v_iのようなベクトル確率 vを持つ一般有限離散確率変数の確率函数の xでの値を返します。 ベクトル vは非負式のリストであり得ます。 その成分は確率のベクトルを得るために規格化されます。 この関数を利用するには始めに load(distrib)と書いてください。

 
(%i1) load (distrib)$
(%i2) pdf_general_finite_discrete(2, [1/7, 4/7, 2/7]);
                                4
(%o2)                           -
                                7
(%i3) pdf_general_finite_discrete(2, [1, 4, 2]);
                                4
(%o3)                           -
                                7

Categories:  Package distrib

関数: cdf_general_finite_discrete (x,v)

ベクトル確率 vを持つ一般有限離散確率変数の分布函数の xでの値を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

 
(%i1) load (distrib)$
(%i2) cdf_general_finite_discrete(2, [1/7, 4/7, 2/7]);
                                5
(%o2)                           -
                                7
(%i3) cdf_general_finite_discrete(2, [1, 4, 2]);
                                5
(%o3)                           -
                                7
(%i4) cdf_general_finite_discrete(2+1/2, [1, 4, 2]);
                                5
(%o4)                           -
                                7

Categories:  Package distrib

関数: quantile_general_finite_discrete (q,v)

ベクトル確率 vを持つ一般有限離散確率変数の q-分位数を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: mean_general_finite_discrete (v)

ベクトル確率 vを持つ一般有限離散確率変数の平均を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: var_general_finite_discrete (v)

ベクトル確率 vを持つ一般有限離散確率変数の分散を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: std_general_finite_discrete (v)

ベクトル確率 vを持つ一般有限離散確率変数の標準偏差を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: skewness_general_finite_discrete (v)

ベクトル確率 vを持つ一般有限離散確率変数の歪度係数を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: kurtosis_general_finite_discrete (v)

ベクトル確率 vを持つ一般有限離散確率変数の尖度係数を返します。

さらなる詳細は pdf_general_finite_discreteを参照してください。

Categories:  Package distrib

関数: random_general_finite_discrete (v)  
    random_general_finite_discrete (v,m)

ベクトル確率 vを持つ一般有限離散確率変量を返します。 二番目の引数 mとともに random_general_finite_discreteをコールすると、サイズ mのランダムな標本がシミュレートされます。

さらなる詳細は pdf_general_finite_discreteを参照してください。

 
(%i1) load (distrib)$
(%i2) random_general_finite_discrete([1,3,1,5]);
(%o2)                          4
(%i3) random_general_finite_discrete([1,3,1,5], 10);
(%o3)           [4, 2, 2, 3, 2, 4, 4, 1, 2, 2]

Categories:  Package distrib · Random numbers

関数: pdf_binomial (x,n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の確率函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_binomial (x,n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_binomial(5,7,1/6);
                            7775
(%o2)                       ----
                            7776
(%i3) float(%);
(%o3)               .9998713991769548

Categories:  Package distrib

関数: quantile_binomial (q,n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数のq-分位数を返します; 言い換えれば、これは cdf_binomialの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_binomial (n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_binomial (n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_binomial (n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_binomial (n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_binomial (n,p)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_binomial (n,p)  
    random_binomial (n,p,m)

0 \leq p \leq 1かつ nは正の整数で、 Binomial(n,p)確率変量を返します。 三番目の引数 mとともにrandom_binomialをコールすると、 サイズ mのランダムな標本がシミュレートされます。

実装アルゴリズムは Kachitvichyanukul, V. and Schmeiser, B.W. (1988) Binomial Random Variate Generation. Communications of the ACM, 31, Feb., 216.に 記載されているものに基づいています。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_poisson (x,m)

m>0で、 Poisson(m)確率変数の確率函数の xでの値を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_poisson (x,m)

m>0で、 Poisson(m)確率変数の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_poisson(3,5);
(%o2)       gamma_incomplete_regularized(4, 5)
(%i3) float(%);
(%o3)               .2650259152973623

Categories:  Package distrib

関数: quantile_poisson (q,m)

m>0で、 Poisson(m)確率変数の q-分位数を返します; 言い換えると、これは cdf_poissonの逆函数です。 引数 q[0,1]の要素でなればいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_poisson (m)

m>0で、 Poisson(m)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_poisson (m)

m>0で、 Poisson(m)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_poisson (m)

m>0で、 Poisson(m)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_poisson (m)

m>0で、 Poisson(m)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_poisson (m)

m>0で、 Poisson(m)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_poisson (m)  
    random_poisson (m,n)

m>0で、 Poisson(m)確率変量を返します。 二番目の引数 nとともに random_binomialをコールすると、 サイズ nのランダムな標本がシミュレートされます。

実装アルゴリズムは Ahrens, J.H. and Dieter, U. (1982) Computer Generation of Poisson Deviates From Modified Normal Distributions. ACM Trans. Math. Software, 8, 2, June,163-179.に記述されたものです。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_bernoulli (x,p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の確率函数の xでの値を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。

 
(%i1) load (distrib)$
(%i2) pdf_bernoulli(1,p);
(%o2)                           p

Categories:  Package distrib

関数: cdf_bernoulli (x,p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_bernoulli (q,p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数のq-分位数を返します; 言い換えると、これは cdf_bernoulliの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_bernoulli (p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の平均を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。

 
(%i1) load (distrib)$
(%i2) mean_bernoulli(p);
(%o2)                           p

Categories:  Package distrib

関数: var_bernoulli (p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の分散を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。 なので、 Maximaが結果を得るのに十分な情報を持たない時は、二項分散に基づいた名詞形を返します。

 
(%i1) load (distrib)$
(%i2) var_bernoulli(p);
(%o2)                       (1 - p) p

Categories:  Package distrib

関数: std_bernoulli (p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の標準偏差を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。

 
(%i1) load (distrib)$
(%i2) std_bernoulli(p);
(%o2)                           sqrt((1 - p) p)

Categories:  Package distrib

関数: skewness_bernoulli (p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の歪度係数を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。

 
(%i1) load (distrib)$
(%i2) skewness_bernoulli(p);
                                    1 - 2 p
(%o2)                           ---------------
                                sqrt((1 - p) p)

Categories:  Package distrib

関数: kurtosis_bernoulli (p)

0 \leq p \leq 1で、 Bernoulli(p)確率変数の尖度係数を返します。

Bernoulli(p)確率変数は Binomial(1,p)と同値です。

 
(%i1) load (distrib)$
(%i2) kurtosis_bernoulli(p);
                         1 - 6 (1 - p) p
(%o2)                    ---------------
                            (1 - p) p

Categories:  Package distrib

関数: random_bernoulli (p)  
    random_bernoulli (p,n)

0 \leq p \leq 1で、 Bernoulli(p)確率変量を返します。 二番目の引数 nとともに random_bernoulliをコールすると、 サイズ nのランダムな標本がシミュレートされます。

これは random組み込みMaxima関数の直接の応用です。

randomも参照してください。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_geometric (x,p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の確率函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_geometric (x,p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_geometric (q,p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の q-分位数を返します; 言い換えると、これは cdf_geometricの逆函数です。 引数 q[0,1]の要素でなければいけません。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_geometric (p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の 平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_geometric (p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_geometric (p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_geometric (p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_geometric (p)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_geometric (p)  
    random_geometric (p,n)

0 \leq p \leq 1で、 Geometric(p)(幾何)確率変量を返します。 二番目の引数 nとともに random_geometricをコールすると、サイズ nのランダムな標本がシミュレートされます。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_discrete_uniform (x,n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の確率函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_discrete_uniform (x,n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の分風函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_discrete_uniform (q,n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の q-分位数を返します; 言い換えると、これは cdf_discrete_uniformの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_discrete_uniform (n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_discrete_uniform (n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_discrete_uniform (n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_discrete_uniform (n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_discrete_uniform (n)

nが厳密に正の整数で、 Discrete Uniform(n)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_discrete_uniform (n)  
    random_discrete_uniform (n,m)

nが厳密に正の整数で、 Discrete Uniform(n)確率変量を返します。 二番目の引数 mとともにrandom_discrete_unformをコールすると、 サイズ mのランダムな標本がシミュレートされます。

これは random組み込み Maxima関数の直接の応用です。

randomも参照してください。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_hypergeometric (x,n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の確率函数の xでの値を返します。 n1がクラス Aのオブジェクトの数、 n2がクラス Bのオブジェクトの数、 nが置き換えなしのサンプルのサイズとして、この関数は 「x個のオブジェクトが厳密にクラス Aである」事象の確率を返します。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_hypergeometric (x,n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の分布函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: quantile_hypergeometric (q,n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の q-分位数を返します。 言い換えると、これは cdf_hypergeometricの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_hypergeometric (n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の平均を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_hypergeometric (n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_hypergeometric (n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_hypergeometric (n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_hypergeometric (n1,n2,n)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_hypergeometric (n1,n2,n)  
    random_hypergeometric (n1,n2,n,m)

n1, n2, nが非負整数でかつ n<=n1+n2で、 Hypergeometric(n1,n2,n)確率変量を返します。 四番目の引数 mとともに random_hypergeometricをコールすると、サイズ mのランダムな標本がシミュレートされます。

Kachitvichyanukul, V., Schmeiser, B.W. (1985) Computer generation of hypergeometric random variates. Journal of Statistical Computation and Simulation 22, 127-145.に記述されたアルゴリズム。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers

関数: pdf_negative_binomial (x,n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の確率函数の xでの値を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: cdf_negative_binomial (x,n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の分布函数の xでの値を返します。

 
(%i1) load (distrib)$
(%i2) cdf_negative_binomial(3,4,1/8);
                            3271
(%o2)                      ------
                           524288

Categories:  Package distrib

関数: quantile_negative_binomial (q,n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の q-分位数を返します; 言い換えると、これは cdf_negative_binomialの逆函数です。 引数 q[0,1]の要素でなければいけません。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: mean_negative_binomial (n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の平均を返します; この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: var_negative_binomial (n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の分散を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: std_negative_binomial (n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の標準偏差を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: skewness_negative_binomial (n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の歪度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: kurtosis_negative_binomial (n,p)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変数の尖度係数を返します。 この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib

関数: random_negative_binomial (n,p)  
    random_negative_binomial (n,p,m)

0 \leq p \leq 1かつ nが正の数で、 Negative Binomial(n,p)確率変量を返します。 三番目の引数 mとともにrandom_negative_binomialをコールすると、 サイズ mのランダムな標本がシミュレートされます。

Devroye, L. (1986) Non-Uniform Random Variate Generation. Springer Verlag, p. 480.に記載されたアルゴリズム。

この関数を利用するには始めに load(distrib)と書いてください。

Categories:  Package distrib · Random numbers


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52. draw

,


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.1 Introduction to draw

drawは Maxima-Gnuplotと Maxima-vtkのインターフェイスです。

Maximaレベルで使われる3つの主な関数があります: draw2d, draw3d, draw

このパッケージのさらに磨きかけられた例のために以下のリンクに従ってください:

http://tecnostats.net/Maxima/gnuplot
http://tecnostats.net/Maxima/vtk

このプログラムを走らせるには Gnuplot 4.2以上が必要です。

Categories:  Plotting · Share packages · Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2 Functions and Variables for draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2.1 Scenes

シーン構成子: gr2d (graphic option, ..., graphic object, ...)

関数 gr2dは 2Dシーンを記述するオブジェクトを作ります。 引数はグラフィックオプショングラフィックオブジェクト、または、 グラフィックオプションとオブジェクト両方を含むリストです。 このシーンは順に解釈されます: グラフィックオプションはその右に置かれたそれらのグラフィックオブジェクトに影響します。 いくつかのグラフィックオプションはシーンのグローバルな外観に影響します。

以下は2次元のシーンで利用可能なグラフィックオブジェクトのリストです: bars, ellipse, explicit, image, implicit, label, parametric, points, polar, polygon, quadrilateral, rectangle, triangle, vector, geomap (パッケージworldmapで定義されるもの)。

drawdraw2dも参照してください。

 
(%i1) load("draw");
(%o1)     /maxima/share/draw/draw.lisp
(%i2) draw(
    gr2d(
        key="sin (x)",grid=[2,2],
        explicit(
            sin(x),
            x,0,2*%pi
        )
    ),
    gr2d(
        key="cos (x)",grid=[2,2],
        explicit(
            cos(x),
            x,0,2*%pi
        )
    )
 );
(%o2)           [gr2d(explicit), gr2d(explicit)]

figures/draw_scene

Categories:  Package draw

シーン構成子: gr3d (graphic option, ..., graphic object, ...)

関数 gr3dは 3dシーンを記述するオブジェクトを作ります。 引数はグラフィックオプショングラフィックオブジェクト、または グラフィックオプションとオブジェクト両方を含むリストです。 このシーンは順に解釈されます: グラフィックオプションはその右に置かれたそれらの グラフィックオブジェクトに影響します。 いくつかのグラフィックオプションはシーンのグローバルな外観に影響します。

以下は3次元のシーンで利用可能なグラフィックオブジェクトのリストです: cylindrical, elevation_grid, explicit, implicit, label, mesh, parametric,
parametric_surface, points, quadrilateral, spherical, triangle, tube,
vector, geomap (パッケージ worldmapで定義されるもの)。

drawdraw3dも参照してください。

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2.2 Functions

関数: draw (gr2d, ..., gr3d, ..., options, ...)

一連のシーンをプロットします; 引数は gr2dgr3dのオブジェクトといくつかのオプションです。 デフォルトでは、1列の中にシーンを一緒に配置します。

関数 drawは以下のグローバルオプションを受け付けます: terminal, columns, dimensions, file_name, delay.

関数 draw2ddraw3dは それぞれ、2次元と3次元に関して、1つのシーンだけが要求される時に使われるショートカットです。

gr2dgr3dも参照してください。

例:

 
(%i1) scene1: gr2d(title="Ellipse",
                   nticks=30,
                   parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
(%i2) scene2: gr2d(title="Triangle",
                   polygon([4,5,7],[6,4,2]))$
(%i3) draw(scene1, scene2, columns = 2)$

The two draw sentences are equivalent:

 
(%i1) draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)));
(%o1)                          [gr3d(explicit)]
(%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1));
(%o2)                          [gr3d(explicit)]

アニメーティド gifファイル:

 
(%i1) draw(
        delay     = 100,
        file_name = "zzz",
        terminal  = 'animated_gif,
        gr2d(explicit(x^2,x,-1,1)),
        gr2d(explicit(x^3,x,-1,1)),
        gr2d(explicit(x^4,x,-1,1)));
End of animation sequence
(%o1)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]

figures/draw_equiv

gr2d, gr3d, draw2d, draw3dも参照してください。

Categories:  Package draw · File output

関数: draw2d (option, graphic_object, ...)

この関数は draw(gr2d(options, ..., graphic_object, ...)). のショートカットです。

2d特化のシーンをプロットするのに使うことができます。

この関数を利用するには、最初に load(draw)と書いてください。

drawgr2dも参照してください。

Categories:  Package draw · File output

関数: draw3d (option, graphic_object, ...)

この関数は draw(gr3d(options, ..., graphic_object, ...)) のショートカットです。

3d特化のシーンをプロットするのに使うことができます。

この関数を利用するには、最初に load(draw)と書いてください。

drawgr3dも参照してください。

Categories:  Package draw · File output

関数: drawf_ile (graphic option, ..., graphic object, ...)

現在のプロットをファイルに保存します。 受け付けられるグラフィックオプションは以下です: terminal, dimensions, file_name

例:

 
(%i1) /* screen plot */
      draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)))$
(%i2) /* same plot in eps format */
      draw_file(terminal  = eps,
                dimensions = [5,5]) $

Categories:  Package draw · File output

関数: multiplot_mode (term)

この関数を使うと、 Maximaを端末 termで 1ウィンドウマルチプロットモードとして動作させることができます; この関数が受け付ける引数は、screen, wxt, aquaterm, noneです。

マルチプロットモードがイネーブルの時、 drawへのそれぞれのコールは、 同じウィンドウに以前のものを消すことなく新しいプロットを送ります。 マルチモードをディセーブルにするには、 multiplot_mode(none)を書いてください。

マルチプロットモードがイネーブルの時、グローバルオプション terminalはブロックされます。 別の端末に変更する前に、この機能中のモードをディセーブルしなければいけません。

この特長は Windowsプラットフォームでは機能しません。

例:

 
(%i1) set_draw_defaults(
         xrange = [-1,1],
         yrange = [-1,1],
         grid   = true,
         title  = "Step by step plot" )$
(%i2) multiplot_mode(screen)$
(%i3) draw2d(color=blue,  explicit(x^2,x,-1,1))$
(%i4) draw2d(color=red,   explicit(x^3,x,-1,1))$
(%i5) draw2d(color=brown, explicit(x^4,x,-1,1))$
(%i6) multiplot_mode(none)$

figures/draw_multiplot

Categories:  Package draw · File output

関数: set_draw_defaults (graphic option, ..., graphic object, ...)

ユーザーグラフィックオプションを設定します。 この関数は 共通のグラフィックスオプションで一連のグラフィックスをプロットするのに役に立ちます。 引数なしにこの関数を呼ぶと、ユーザーデフォルトを取り除きます。

例:

 
(%i1) set_draw_defaults(
         xrange = [-10,10],
         yrange = [-2, 2],
         color  = blue,
         grid   = true)$
(%i2) /* plot with user defaults */
      draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$
(%i3) set_draw_defaults()$
(%i4) /* plot with standard defaults */
      draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2.3 Graphic options

グラフィックオプション: adapt_depth

デフォルト値: 10

adapt_depthは適応プロットルーチンが使う分割の最大数です。

このオプションは 2d explicit関数に対してだけ有効です。

nticksも参照してください。

Categories:  Package draw

グラフィックオプション: allocation

デフォルト値: false

オプション allocationを使うと、出力ウィンドウの中に自在にシーンを置くことが可能です; これはマルチプロットで重要です。 falseの時、シーンは、オプション columnsに割り当てられた値に従って自動的に配置されます。 他の場合には allocationは二組の数のリストに設定しなければいけません; 一番目はシーンの左下隅の位置に対応し、 二番目のペアはプロットの幅と高さを与えます。 すべての数字は0から1の間の相対座標で与えなければいけません。

例:

グラフィックスの配置に関して。

 
(%i1) draw(
        gr2d(
          explicit(x^2,x,-1,1)),
        gr2d(
          allocation = [[1/4, 1/4],[1/2, 1/2]],
          explicit(x^3,x,-1,1),
          grid = true) ) $

figures/draw_allocation

選択された次元を持つマルチプロット。

 
(%i1) draw(
        terminal = wxt,
        gr2d(
          grid=[5,5],
          allocation = [[0, 0],[1, 1/4]],
          explicit(x^2,x,-1,1)),
        gr3d(
          allocation = [[0, 1/4],[1, 3/4]],
          explicit(x^2+y^2,x,-1,1,y,-1,1) ))$

figures/draw_allocation2

オプション columnsも参照して下さい。

Categories:  Package draw

グラフィックオプション: axis_3d

デフォルト値: true

もし axis_3dtrueなら、 x, y z軸が3dシーンで表示されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(axis_3d = false,
             explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$

figures/draw_axis3d

2dでの軸に関しては、 axis_bottom, axis_left, axis_top, axis_rightも参照してください。

Categories:  Package draw

グラフィックオプション: axis_bottom

デフォルト値: true

もし axis_bottomtrueなら、底の軸は 2dシーンで表示されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(axis_bottom = false,
             explicit(x^3,x,-1,1))$

figures/draw_axis_bottom

axis_left, axis_top, axis_right, axis_3dも参照してください。

Categories:  Package draw

グラフィックオプション: axis_left

デフォルト値: true

もし axis_lefttrueなら、左の軸が 2dシーンで表示されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(axis_left = false,
             explicit(x^3,x,-1,1))$

axis_bottom, axis_top, axis_right, axis_3dも参照してください。

Categories:  Package draw

グラフィックオプション: axis_right

デフォルト値: true

もし axis_righttrueなら、 2dシーンで右軸が表示されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(axis_right = false,
             explicit(x^3,x,-1,1))$

axis_bottom, axis_left, axis_top, axis_3dも参照してください。

Categories:  Package draw

グラフィックオプション: axis_top

デフォルト値: true

もし axis_toptrueなら、上部の軸が 2dシーンで表示されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(axis_top = false,
             explicit(x^3,x,-1,1))$

axis_bottom, axis_left, axis_right, axis_3dも参照してください。

Categories:  Package draw

グラフィックオプション: background_color

デフォルト値: white

端末の背景色を設定します。デフォルト背景色は白です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

このオプションは端末 epslatexepslatex_standaloneと一緒には機能しません。

colorも参照してください。

Categories:  Package draw

グラフィックオプション: border

デフォルト値: true

もし bordertrueなら、 ポリゴンの境界は line_typeline_widthに従って塗られます。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(color       = brown,
             line_width  = 8,
             polygon([[3,2],[7,2],[5,5]]),
             border      = false,
             fill_color  = blue,
             polygon([[5,2],[9,2],[7,5]]) )$

figures/draw_border

Categories:  Package draw

グラフィックオプション: capping

デフォルト値: [false, false]

グラフィックオブジェクト tubeの極値が閉か開かを示す 2つの可能な値 truefalseのリスト。 デフォルトでは極値は開です。

設定 capping = falsecapping = [false, false]と同値で、 capping = truecapping = [true, true]と同値です。

例:

 
(%i1) draw3d(
        capping = [false, true],
        tube(0, 0, a, 1,
             a, 0, 8) )$

figures/draw_tube_extremes

Categories:  Package draw

グラフィックオプション: cbrange

デフォルト値: auto

もし cbrangeautoなら enhanced3dfalseでない時 色付けられる値の範囲は自動的に計算されます。 カラー範囲外の値は、最も近い端の色を使います。

enhanced3dcolorboxfalseの時、オプション cbrangeは効果を持ちません。

もしユーザーが色付けられた値の特定の区間が欲しいなら、 cbrange=[-2, 3]のように Maximaリストとして与えられなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d (
        enhanced3d     = true,
        color          = green,
        cbrange = [-3,10],
        explicit(x^2+y^2, x,-2,2,y,-2,2)) $

figures/draw_cbrange

enhanced3d, colorbox, cbticsも参照してください。

Categories:  Package draw

グラフィックオプション: cbtics

デフォルト値: auto

このグラフィックオプションは、オプション enhanced3dfalseでない時、カラーボックス上にチックマークを描く方法を制御します。

enhanced3dcolorboxfalseの時、 オプション cbticsは効果を持ちません。

完全な記述に関しては、xticsを参照してください。

例:

 
(%i1) draw3d (
        enhanced3d = true,
        color      = green,
        cbtics  = {["High",10],["Medium",05],["Low",0]},
        cbrange = [0, 10],
        explicit(x^2+y^2, x,-2,2,y,-2,2)) $

figures/draw_cbtics

enhanced3d, colorbox, cbrangeも参照してください。

Categories:  Package draw

グラフィックオプション: color

デフォルト値: "blue"

colorは、線や点、ポリゴンやラベルの境界をプロットする色を指定します。

色は名前や16進数の rgbコードとして与えられます。 もし gnuplot version >= 5.0が使われていて使用中の端末がこのrgbaをサポートしているなら、 透過情報を持つ色もまたサポートされます。

利用可能な色の名前は以下のものです:

white            black            gray0            grey0
gray10           grey10           gray20           grey20
gray30           grey30           gray40           grey40
gray50           grey50           gray60           grey60
gray70           grey70           gray80           grey80
gray90           grey90           gray100          grey100
gray             grey             light_gray       light_grey
dark_gray        dark_grey        red              light_red
dark_red         yellow           light_yellow     dark_yellow
green            light_green      dark_green       spring_green
forest_green     sea_green        blue             light_blue
dark_blue        midnight_blue    navy             medium_blue
royalblue        skyblue          cyan             light_cyan
dark_cyan        magenta          light_magenta    dark_magenta
turquoise        light_turquoise  dark_turquoise   pink
light_pink       dark_pink        coral            light_coral
orange_red       salmon           light_salmon     dark_salmon
aquamarine       khaki            dark_khaki       goldenrod
light_goldenrod  dark_goldenrod   gold             beige
brown            orange           dark_orange      violet
dark_violet      plum             purple

16進コードでの色彩成分は形式 "#rrggbb"で導入されます。

例:

 
(%i1) draw2d(explicit(x^2,x,-1,1), /* default is black */
             color = red,
             explicit(0.5 + x^2,x,-1,1),
             color = blue,
             explicit(1 + x^2,x,-1,1),
             color = light_blue,
             explicit(1.5 + x^2,x,-1,1),
             color = "#23ab0f",
             label(["This is a label",0,1.2])  )$

figures/draw_color

 
(%i1) draw2d(
             line_width=50,
             color="#FF0000",
             explicit(sin(x),x,0,10),
             color="#0000FF80",
             explicit(cos(x),x,0,10)
      );

figures/draw_color2

fill_colorも参照してください。

Categories:  Package draw

グラフィックオプション: colorbox

デフォルト値: true

もし colorboxtrueなら、 ラベルなしの色スケールが image 2Dオブジェクトか色付けされた 3dオブジェクトと一緒に描かれます。 もし colorboxfalseなら、色スケールは表示されません。 もし colorboxが文字列なら、ラベル付き色スケールを描きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) im: apply('matrix,
                 makelist(makelist(random(200),i,1,30),i,1,30))$
(%i2) draw(
          gr2d(image(im,0,0,30,30)),
          gr2d(colorbox = false, image(im,0,0,30,30))
      )$

figures/draw_colorbox 色スケールと3D色付けオブジェクト。

 
(%i1) draw3d(
        colorbox   = "Magnitude",
        enhanced3d = true,
        explicit(x^2+y^2,x,-1,1,y,-1,1))$

figures/draw_colorbox2

palette_drawも参照してください。

Categories:  Package draw

グラフィックオプション: columns

デフォルト値: 1

columnsは多重プロットでの列の数です。

これはグローバルグラフィックオプションなので、シーン記述での位置はかまいません。 関数 drawの引数として使うこともできます。

例:

 
(%i1) scene1: gr2d(title="Ellipse",
                   nticks=30,
                   parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
(%i2) scene2: gr2d(title="Triangle",
                   polygon([4,5,7],[6,4,2]))$
(%i3) draw(scene1, scene2, columns = 2)$

figures/draw_columns

Categories:  Package draw

グラフィックオプション: contour

デフォルト値: none

オプション contourを使うと、ユーザーは等高線をプロットする場所を選択できます。 可能な値は以下の通りです:

これはグローバルグラフィックオプションなので、シーン記述での位置はかまいません。

例:

 
(%i1) draw3d(explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
             contour_levels = 15,
             contour        = both,
             surface_hide   = true) $

figures/draw_contour

 
(%i1) draw3d(explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
             contour_levels = 15,
             contour        = map
      ) $

figures/draw_contour2

Categories:  Package draw

グラフィックオプション: contour_levels

デフォルト値: 5

このグラフィックオプションは等高線が描かれる方法を制御します。 contour_levelsは、正の整数、 3つの数のリスト、または、数の任意の集合に設定することができます:

これはグローバルグラフィックオプションなので、シーン記述での位置はかまいません。

例:

10の等しく間隔の空けられた等高線。 レベルの実際の数は簡単なラベルを与えるために調整することができます。

 
(%i1) draw3d(color = green,
             explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
             contour_levels = 10,
             contour        = both,
             surface_hide   = true) $

-8から 8まで 4つのステップで。

 
(%i1) draw3d(color = green,
             explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
             contour_levels = [-8,4,8],
             contour        = both,
             surface_hide   = true) $

レベル -7, -6, 0.8, 5での等値線。

 
(%i1) draw3d(color = green,
             Explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
             Contour_levels = {-7, -6, 0.8, 5},
             Contour        = both,
             Surface_hide   = true) $

contourも参照してください。

Categories:  Package draw

グラフィックオプション: data_file_name

デフォルト値: "data.gnuplot"

これは、リクエストされたプロットを構築するために Gnuplotが必要とする数値データを含むファイルの名前です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。 関数 drawの引数としても使うことができます。

gnuplot_file_nameの中で例を参照してください。

Categories:  Package draw

グラフィックオプション: delay

デフォルト値: 5

これはアニメーション gifファイルにおけるフレームの 1/100秒単位の遅延です。

これはグローバルグラフィックスオプションなので、 シーン記述の位置は問題なりません。 関数 drawの引数としても使うことができます。

例:

 
(%i1) draw(
        delay     = 100,
        file_name = "zzz",
        terminal  = 'animated_gif,
        gr2d(explicit(x^2,x,-1,1)),
        gr2d(explicit(x^3,x,-1,1)),
        gr2d(explicit(x^4,x,-1,1)));
End of animation sequence
(%o2)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]

オプション delayはアニメーション gifに関してだけアクティブです; 他のいかなる場合も無視されます。

terminal, dimensionsも参照してください。

Categories:  Package draw

グラフィックオプション: dimensions

デフォルト値: [600,500]

出力端末の寸法。 その値は、幅と高さで形成されるリストです。 2つの数の意味は使っている端末に依存します。

端末 gif, animated_gif, png, jpg, svg, screen, wxt, aquatermでは、 整数はそれぞれの方向の点の数を表します。 もし整数でないなら丸められます。

端末 eps, eps_color, pdf, pdfcairoでは、 両方の数は 1/100cm単位の長さを表します。 デフォルトでは、これらのフォーマットでの画像は幅 6cm、高さ 5cmであることを意味します。

これはグローバルグラフィックオプションなので、シーン記述での位置は関係ありません。 関数 drawの引数として使われることもあります。

例:

ファイル出力と wxtキャンバスに適用されたオプション dimensions

 
(%i1) draw2d(
        dimensions = [300,300],
        terminal   = 'png,
        explicit(x^4,x,-1,1)) $
(%i2) draw2d(
        dimensions = [300,300],
        terminal   = 'wxt,
        explicit(x^4,x,-1,1)) $

eps出力に適用されたオプション dimensions。 A4縦寸法の epsファイルが欲しいです。

 
(%i1) A4portrait: 100*[21, 29.7]$
(%i2) draw3d(
        dimensions = A4portrait,
        terminal   = 'eps,
        explicit(x^2-y^2,x,-2,2,y,-2,2)) $

Categories:  Package draw

グラフィックオプション: draw_realpart

デフォルト値: true

trueの時、描画される関数は複素関数とみなされ、実部の値をプロットします; falseの時、関数が実数値を与えないときは何もプロットしません。

このオプションは 2Dや 3Dにおけるオブジェクト explicitparametricparametric_surfaceに作用します。

例:

オプション draw_realpartはオブジェクト explicitparametricに作用します。

 
(%i1) draw2d(
        draw_realpart = false,
        explicit(sqrt(x^2  - 4*x) - x, x, -1, 5),
        color         = red,
        draw_realpart = true,
        parametric(x,sqrt(x^2  - 4*x) - x + 1, x, -1, 5) );

Categories:  Package draw

グラフィックオプション: enhanced3d

デフォルト値: none

もし enhanced3dnoneなら3Dプロットで表面を色付けしません。 色付けされた表面を得るには、オプション enhanced3dにリストを割り当てなければいけません。 リストの最初の要素は色で、残りはその式中で使われる変数やパラメータの名前です。 [f(x,y,z), x, y, z]のようなリストは、表面の点 [x,y,z]に数 f(x,y,z)を割り当てることを意味します。数は実際の paletteに従って色付けされます。 パラメータで定義されたそれらの3Dグラフィックオブジェクトに関して、 parametricオブジェクトと tubeオブジェクトに関して[f(u), u]という具合に、 あるいは、 parametric_surfaceオブジェクトに関して [f(u,v), u, v]という具合に、 パラメータで色数を定義することが可能です。 3Dオブジェクトがすべて絶対座標に基づいたモデル [f(x,y,z), x, y, z]を採用する一方、 その中の explicitelevation_gridの2つだけは [x,y]座標上で定義されたモデル [f(x,y), x, y]も受け付けます。 3Dグラフィックオブジェクト implicit[f(x,y,z), x, y, z]モデルだけを受け付けます。 オブジェクト points[f(x,y,z), x, y, z]モデルを受け付けますが、点が順序的性質を持つ時は モデル [f(k), k]も有効です。 kは順序パラメータです。

enhanced3dnone以外の何かを割り当てた時、オプション colorsurface_hideは無視されます。

リストで定義れた変数名はグラフィックオブジェクトの定義で使われたものと異なるかもしれません。

下位互換性を維持するために、 enhanced3d = falseenhanced3d = noneと同値で、 enhanced3d = trueenhanced3d = [z, x, y, z]と同値です。 もし enhanced3dに式が与えられたら、 その変数は表面定義で使われたものと同じでなければいけません。 リストを使う時にはこれは必要ありません。

もし enhanced3dfalseなら、 3dプロットで表面は色付けられません。 もし enhanced3dtrueなら、 Gnuplotの pm3dモードを設定して表面が色付けられます。 もし式が enhanced3dに与えられるなら、 それは paletteに従って色を割り当てるのに使われます; この式の中の変数は表面記述で使われるものと同じでなければいけません。

如何にパレットが指定されるか知るためには、オプション paletteを参照してください。

例:

 
(%i1) draw3d(
         enhanced3d = [x-z/10,x,y,z],
         palette    = gray,
         explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$

figures/draw_enhanced3d

[f(x,y), x, y]モデルで定義された色付けを持つ explicitオブジェクト。 リストで定義れた変数名はグラフィックオブジェクトの定義で使われたものと異なるかもしれません; この場合、 rxに、 syに対応します。

 
(%i1) draw3d(
         enhanced3d = [sin(r*s),r,s],
         explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$

figures/draw_enhanced3d2

[f(x,y,z), x, y, z]モデルで定義された色付けを持つ parametricオブジェクト。

 
(%i1) draw3d(
         nticks = 100,
         line_width = 2,
         enhanced3d = [if y>= 0 then 1 else 0, x, y, z],
         parametric(sin(u)^2,cos(u),u,u,0,4*%pi)) $

figures/draw_enhanced3d3

[f(u), u]モデルで定義された色付けを持つ parametricオブジェクト。

この場合、 (u-1)^2[(u-1)^2,u]のショートカットです。

 
(%i1) draw3d(
         nticks = 60,
         line_width = 3,
         enhanced3d = (u-1)^2,
         parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2))$

figures/draw_enhanced3d4

[f(x,y), x, y]モデルで定義された色付けを持つ elevation_gridオブジェクト。

 
(%i1) m: apply(
           matrix,
           makelist(makelist(cos(i^2/80-k/30),k,1,30),i,1,20)) $
(%i2) draw3d(
         enhanced3d = [cos(x*y*10),x,y],
         elevation_grid(m,-1,-1,2,2),
         xlabel = "x",
         ylabel = "y");

figures/draw_enhanced3d5

[f(x,y,z), x, y, z]モデルで定義された色付けを持つ tubeオブジェクト。

 
(%i1) draw3d(
         enhanced3d = [cos(x-y),x,y,z],
         palette = gray,
         xu_grid = 50,
         tube(cos(a), a, 0, 1, a, 0, 4*%pi) )$

figures/draw_enhanced3d6

[f(u), u]モデルで定義された色付けを持つ tubeオブジェクト。 ここで enhanced3d = -aenhanced3d = [-foo,foo]のショートカットになります。

 
(%i1) draw3d(
         capping = [true, false],
         palette = [26,15,-2],
         enhanced3d = [-foo, foo],
         tube(a, a, a^2, 1, a, -2, 2) )$

figures/draw_enhanced3d7

[f(x,y,z), x, y, z]モデルで定義された色付けを持つ implicitオブジェクトと pointsオプジェクト

 
(%i1) draw3d(
         enhanced3d = [x-y,x,y,z],
         implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
                  x,-1,1,y,-1.2,2.3,z,-1,1)) $
(%i2) m: makelist([random(1.0),random(1.0),random(1.0)],k,1,2000)$

figures/draw_enhanced3d9

 
(%i3) draw3d(
         point_type = filled_circle,
         point_size = 2,
         enhanced3d = [u+v-w,u,v,w],
         points(m) ) $

figures/draw_enhanced3d10

点が順序的性質を持つ時、モデル [f(k), k]も有効です。 kは順序パラメータです。

 
(%i1) m:makelist([random(1.0), random(1.0), random(1.0)],k,1,5)$
(%i2) draw3d(
         enhanced3d = [sin(j), j],
         point_size = 3,
         point_type = filled_circle,
         points_joined = true,
         points(m)) $

figures/draw_enhanced3d11

Categories:  Package draw

グラフィックオプション: error_type

デフォルト値: y

値は x, y, xyを取り得ますが、 その値に依存して、グラフィックオブジェクト errorsは水平エラーバー、垂直エラーバー、その両方を伴って点を描画します。 error_type=boxesの時、クロスの代わりにボックスが描かれます。

errorsも参照してください。

グラフィックオプション: file_name

デフォルト値: "maxima_out"

これは、端末png, jpg, eps, eps_color, pdf, pdfcairoがグラフィックを保存するファイルの名前です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(file_name = "myfile",
             explicit(x^2,x,-1,1),
             terminal  = 'png)$

terminal, dimensionsも参照してください。

Categories:  Package draw

グラフィックオプション: fill_color

デフォルト値: "red"

fill_colorはポリゴンと 2d explicit関数を塗りつぶすための色を指定します。

如何に色が指定されるかを知るには colorを参照してください。

Categories:  Package draw

グラフィックオプション: fill_density

デフォルト値: 0

fill_densitybarsオブジェクトに関して fill_colorの強度を指定する数です。 0と 1の間の数です。

例を見るには barsを参照してください。

グラフィックオプション: filled_func

デフォルト値: false

オプション filled_funcは関数によって制限された領域が如何に塗りつぶされるべきかを 制御します。 filled_functrueの時、 オブジェクト explicitとグラフィックウィンドウの底で定義された関数によって閉ざされた領域を fill_colorで塗りつぶします。 filled_funcが関数式を含む時、 この関数とオブジェクト explicit で定義された関数によって閉ざされた領域を 塗りつぶします。 デフォルトでは、明示的な関数は塗りつぶされません。

役に立つ特殊なケースは filled_func=0です。 水平軸と明示関数による領域の縁を生成します。

このオプションは 2dグラフィックオブジェクト explicitだけに影響します。

例:

explicitオブジェクトとグラフィックウィンドウによって閉ざされた領域。

 
(%i1) load(draw)$
(%i2) draw2d(fill_color  = red,
             filled_func = true,
             explicit(sin(x),x,0,10) )$

explicitオブジェクトとオプション filled_funcで定義された関数によって閉ざされた領域。 filled_funcの中の変数は explicitの中で使われるものと同じでなければいけないことに注意してください。

 
(%i1) draw2d(fill_color  = red,
             filled_func = sin(x),
             explicit(-sin(x),x,0,%pi));

figures/draw_filledfunc

Region bounded by an explicitオブジェクトとオプション filled_funcで定義された関数で囲まれた領域。 Note that the variable in filled_funcの変数は explicitで使われるそれと同じでなければいけないことに注意してください。

 
(%i1) draw2d(fill_color  = grey,
             filled_func = sin(x),
             explicit(-sin(x),x,0,%pi));

figures/draw_filledfunc2 fill_colorexplicitも参照してください。

Categories:  Package draw

グラフィックオプション: font

デフォルト値: "" (empty string)

このオプションは端末が使う書体を設定するために使うことができます。 プロットを通して書体とサイズは1つだけ使うことができます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

font_sizeも参照してください。

Gnuplotはそれ自身フォントを扱いません。 異なる端末のサポートライブラリに任せます。 それぞれはフォントに関して独自の哲学を持っています。 簡単なまとめは以下の通りです:

Gnuplotドキュメンテーションは端末とフォントに関する情報の重要なソースです。

Categories:  Package draw

グラフィックオプション: font_size

デフォルト値: 10

このオプションは、端末が使うフォントサイズを設定するために使うことができます。 1つの書体とサイズだけがプロットの間中で使うことができます。 オプション fontが空の文字列に等しくない時だけ、 font_sizeはアクティブです。

これはグローバルグラフィックスオプションなので、 シーン記述の位置は問題になりません。

fontも参照してください。

Categories:  Package draw

グラフィックオプション: gnuplot_file_name

デフォルト値: "maxout_xxx.gnuplot" ここで "xxx"は同時に走っているmaximaプロセスそれぞれに固有の数字です。

これは Gnuplotで処理される必要なコマンドを含むファイルの名前です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。 関数 drawの引数としても使うことができます。

例:

 
(%i1) draw2d(
       file_name = "my_file",
       gnuplot_file_name = "my_commands_for_gnuplot",
       data_file_name    = "my_data_for_gnuplot",
       terminal          = png,
       explicit(x^2,x,-1,1)) $

data_file_nameも参照してください。

Categories:  Package draw

グラフィックオプション: grid

デフォルト値: false

もし gridnot falseなら、 xy平面上に格子を描きます。 もし gridに trueを割り当てたなら、 それぞれの軸の目盛毎にグリッド線を1つ引きます。 もし grid[nx,ny] > [0,0]のリスト nx,nyを割り当てたなら、 x軸の目盛毎に nx個の線を、y軸の目盛毎に ny個の線を引きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(grid = true,
             explicit(exp(u),u,-2,2))$

figures/draw_grid

 
(%i1) draw2d(grid = [2,2],
             explicit(sin(x),x,0,2*%pi))$

figures/draw_grid2

Categories:  Package draw

グラフィックオプション: head_angle

デフォルト値: 45

head_angleは矢印の頭と線分の間の角度を度の単位で示します。

このオプションは vectorオブジェクトに対してだけ有効です。

例:

 
(%i1) draw2d(xrange      = [0,10],
             yrange      = [0,9],
             head_length = 0.7,
             head_angle  = 10,
             vector([1,1],[0,6]),
             head_angle  = 20,
             vector([2,1],[0,6]),
             head_angle  = 30,
             vector([3,1],[0,6]),
             head_angle  = 40,
             vector([4,1],[0,6]),
             head_angle  = 60,
             vector([5,1],[0,6]),
             head_angle  = 90,
             vector([6,1],[0,6]),
             head_angle  = 120,
             vector([7,1],[0,6]),
             head_angle  = 160,
             vector([8,1],[0,6]),
             head_angle  = 180,
             vector([9,1],[0,6]) )$

figures/draw_head_angle

head_both, head_length, head_typeも参照してください。

Categories:  Package draw

グラフィックオプション: head_both

デフォルト値: false

もし head_bothtrueなら、ベクトルを2つの矢先と共に描画します。 もし falseなら1つの矢だけが描かれます。

このオプションは vectorオブジェクトに対してだけ有効です。

例:

 
(%i1) draw2d(xrange      = [0,8],
             yrange      = [0,8],
             head_length = 0.7,
             vector([1,1],[6,0]),
             head_both   = true,
             vector([1,7],[6,0]) )$

figures/draw_head_both

head_length, head_angle, head_typeも参照してください。

Categories:  Package draw

グラフィックオプション: head_length

デフォルト値: 2

head_lengthは矢印の頭の長さを x-軸の単位で示します。

このオプションは vectorオブジェクトに対してだけ有効です。

例:

 
(%i1) draw2d(xrange      = [0,12],
             yrange      = [0,8],
             vector([0,1],[5,5]),
             head_length = 1,
             vector([2,1],[5,5]),
             head_length = 0.5,
             vector([4,1],[5,5]),
             head_length = 0.25,
             vector([6,1],[5,5]))$

head_both, head_angle, head_typeも参照してください。

Categories:  Package draw

グラフィックオプション: head_type

デフォルト値: filled

head_typeは矢印の頭を如何にプロットするかを指定するのに使われます。 可能な値は以下の通りです: filled (閉じていて塗りつぶされた矢印の頭), empty (閉じているが塗りつぶされていない矢印の頭), nofilled (開いた矢印の頭)。

このオプションは vectorオブジェクトにだけ有効です。

例:

 
(%i1) draw2d(xrange      = [0,12],
             yrange      = [0,10],
             head_length = 1,
             vector([0,1],[5,5]), /* default type */
             head_type = 'empty,
             vector([3,1],[5,5]),
             head_type = 'nofilled,
             vector([6,1],[5,5]))$

figures/draw_head_type

head_both, head_angle, head_lengthも参照してください。

Categories:  Package draw

グラフィックオプション: interpolate_color

デフォルト値: false

このオプションは enhanced3dfalseでない時だけ有効です。

interpolate_colorfalseの時、表面が均一な四角形で色付けします。 trueの時、色の遷移を内挿で滑らかにします。

interpolate_colorは2つの数字のリスト [m,n]も受け付けます。 正の mnの場合、四角形もしくは三角形それぞれをそれぞれの方向に m回、 n回内挿します。 負の mnの場合、少なくとも |m|点、 |n|点描かれるように内挿頻度を選びます; 特殊なグリッド関数と考えるといいでしょう。 ゼロ、すなわち interpolate_color=[0,0]は表面上の内挿点の最適数を自動的に選択します。

また、 interpolate_color=trueinterpolate_color=[0,0]と等価です。

例:

陽関数での色内挿。

 
(%i1) draw3d(
        enhanced3d   = sin(x*y),
        explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $

figures/draw_interpolate_color

 
(%i2) draw3d(
        interpolate_color = true,
        enhanced3d   = sin(x*y),
        explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $

figures/draw_interpolate_color2

 
(%i3) draw3d(
        interpolate_color = [-10,0],
        enhanced3d   = sin(x*y),
        explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $

figures/draw_interpolate_color3

meshグラフィックオブジェクトでの色内装。

パラメトリック表面内の内挿色は予期しない結果をもたらす可能性があります。

 
(%i1) draw3d(
        enhanced3d = true,
        mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
             [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
             [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $

figures/draw_interpolate_color4

 
(%i2) draw3d(
        enhanced3d        = true,
        interpolate_color = true,
        mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
             [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
             [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $

figures/draw_interpolate_color5

 
(%i3) draw3d(
        enhanced3d        = true,
        interpolate_color = true,
        view=map,
        mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
             [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
             [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $

figures/draw_interpolate_color6

enhanced3dも参照してください。

Categories:  Package draw

グラフィックオプション: ip_grid

デフォルト値: [50, 50]

ip_gridは陰的プロットでの最初のサンプリングのためにグリッドを設定します。

このオプションは implicitオブジェクトに対してだけ関係があります。

Categories:  Package draw

グラフィックオプション: ip_grid_in

デフォルト値: [5, 5]

ip_gridi_inは陰的プロットでの二番目のサンプリングのためにグリッドを設定します。

このオプションは implicitオブジェクトに対してだけ関係があります。

Categories:  Package draw

グラフィックオプション: key

デフォルト値: "" (empty string)

keyは凡例の中の関数名です。 もし keyが空の文字列なら、関数にキーを割り当てません。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(key   = "Sinus",
             explicit(sin(x),x,0,10),
             key   = "Cosinus",
             color = red,
             explicit(cos(x),x,0,10) )$

figures/draw_key

グラフィックオプション: key_pos

デフォルト値: "" (空文字列)

key_pos は凡例を描画する位置を定義します。 もし key が空文字列なら、 "top_right" を使います。 利用可能な位置指定子は以下の通り: top_left, top_center, top_right, center_left, center, center_right, bottom_left, bottom_center, bottom_right

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
        key_pos = top_left,
        key   = "x",
        explicit(x,  x,0,10),
        color= red,
        key   = "x squared",
        explicit(x^2,x,0,10))$
(%i3) draw3d(
        key_pos = center,
        key   = "x",
        explicit(x+y,x,0,10,y,0,10),
        color= red,
        key   = "x squared",
        explicit(x^2+y^2,x,0,10,y,0,10))$

figures/draw_key_pos

Categories:  Package draw

グラフィックオプション: label_alignment

デフォルト値: center

label_alignmentは 与えられた座標に関するラベルを書く場所を指定するのに使われます。 可能な値は以下のものです: center, left, right.

このオプションは labelオブジェクトに対してだけ有効です。

例:

 
(%i1) draw2d(xrange          = [0,10],
             yrange          = [0,10],
             points_joined   = true,
             points([[5,0],[5,10]]),
             color           = blue,
             label(["Centered alignment (default)",5,2]),
             label_alignment = 'left,
             label(["Left alignment",5,5]),
             label_alignment = 'right,
             label(["Right alignment",5,8]))$

figures/draw_label_alignment

label_orientation, colorも参照してください。

Categories:  Package draw

グラフィックオプション: label_orientation

デフォルト値: horizontal

label_orientationはラベルの向きを指定するのに使われます。 可能な値は以下のものです: horizontal, vertical.

このオプションは labelオブジェクトに対してだけ有効です。

例:

この例では、ダミーの点がイメージを得るために加えられます。 パッケージ drawはいつもシーンを描くのにデータを必要とします。

 
(%i1) draw2d(xrange     = [0,10],
             yrange     = [0,10],
             point_size = 0,
             points([[5,5]]),
             color      = navy,
             label(["Horizontal orientation (default)",5,2]),
             label_orientation = 'vertical,
             color             = "#654321",
             label(["Vertical orientation",1,5]))$

figures/draw_label_orientation

label_alignmentcolorも参照してください。

Categories:  Package draw

グラフィックオプション: line_type

デフォルト値: solid

line_typeは線が如何に表示されるかを示します; 可能な値は soliddotsで、どちらもすべての端末で利用可能です。そして dashes, short_dashes, short_long_dashes, short_short_long_dashes, dot_dash, これらは png, jpg, gif 端末の中で利用可能です。

このオプションは以下のグラフィックオブジェクトに鋭意供します:

例:

 
(%i1) draw2d(line_type = dots,
             explicit(1 + x^2,x,-1,1),
             line_type = solid, /* default */
             explicit(2 + x^2,x,-1,1))$

figures/draw_line_type

line_widthも参照してください。

Categories:  Package draw

グラフィックオプション: line_width

デフォルト値: 1

line_widthはプロットする線の幅です。 値は正の数でなければいけません。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(explicit(x^2,x,-1,1), /* default width */
             line_width = 5.5,
             explicit(1 + x^2,x,-1,1),
             line_width = 10,
             explicit(2 + x^2,x,-1,1))$

figures/draw_line_width

line_typeも参照してください。

Categories:  Package draw

グラフィックオプション: logcb

デフォルト値: false

もし logcbtrueなら、 カラーボックスのチックを対数スケールで描きます。

enhanced3dcolorboxfalseの時、オプション logcbは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d (
        enhanced3d = true,
        color      = green,
        logcb = true,
        logz  = true,
        palette = [-15,24,-9],
        explicit(exp(x^2-y^2), x,-2,2,y,-2,2)) $

figures/draw_logcb

enhanced3d, colorbox, cbrangeも参照してください。

Categories:  Package draw

グラフィックオプション: logx

デフォルト値: false

もし logxtrueなら x軸を対数スケールで描きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。 ただし、どの2D explicitオブジェクトより先に記述されなければいけないという例外があります。 そうすることで drawはよりよいプロットを生成できます。

例:

 
(%i1) draw2d(logx = true,
             logx = true)$

logy_draw, logx_secondary, logy_secondary, logzも参照してください。

Categories:  Package draw

グラフィックオプション: logx_secondary

デフォルト値: false

もし logx_secondarytrueなら、 第2の x 軸を対数スケールで描画します。

このオプションは2dシーンでだけ有効です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
        grid = true,
        key="x^2, linear scale",
        color=red,
        explicit(x^2,x,1,100),
        xaxis_secondary = true,
        xtics_secondary = true,
        logx_secondary  = true,
        key = "x^2, logarithmic x scale",
        color = blue,
        explicit(x^2,x,1,100) )$

figures/draw_logx_secondary

logx_draw, logy_draw, logy_secondary, logzも参照してください。

Categories:  Package draw

グラフィックオプション: logy

デフォルト値: false

もし logytrueなら y軸は対数スケールで描かれます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(logy = true,
             explicit(exp(x),x,0,5))$

logx_draw, logx_secondary, logy_secondary, logz.も参照してください。

Categories:  Package draw

グラフィックオプション: logy_secondary

デフォルト値: false

もし logy_secondarytrueなら、 第2の y 軸を対数スケールで描画します。

このオプションは2dシーンでだけ有効です。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
        grid = true,
        key="x^2, linear scale",
        color=red,
        explicit(x^2,x,1,100),
        yaxis_secondary = true,
        ytics_secondary = true,
        logy_secondary  = true,
        key = "x^2, logarithmic y scale",
        color = blue,
        explicit(x^2,x,1,100) )$

logx_draw, logy_draw, logx_secondary, logzも参照してください。

Categories:  Package draw

グラフィックオプション: logz

デフォルト値: false

もし logztrueなら z軸を対数スケールで描きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d(logz = true,
             explicit(exp(u^2+v^2),u,-2,2,v,-2,2))$

logx_draw, logy_drawも参照してください。

Categories:  Package draw

グラフィックオプション: nticks

デフォルト値: 29

2dでは、 nticksは、適応プロットルーチンが陽的オブジェクトに関して使う点の初期数を与えます。 それはパラメトリック曲線と極座標曲線で描かれる点の数でもあります。

このオプションは以下のグラフィックオブジェクトに影響を与えます:

adapt_depthも参照してください。

例:

 
(%i1) draw2d(transparent = true,
             ellipse(0,0,4,2,0,180),
             nticks = 5,
             ellipse(0,0,4,2,180,180) )$

figures/draw_nticks

Categories:  Package draw

グラフィックオプション: palette

デフォルト値: color

paletteはグレイレベルを色成分上にマップする仕方を示します。 3Dオブジェクトでのオプション enhanced3dと一緒に機能します。 3Dオブジェクトは表面のすべての点を実数かグレイレベルに関連付けます。 グレイイメージとも一緒に機能します。 paletteによってレベルは色に変換されます。

これらの変換を定義するには2つの方法があります。

1つ目の方法では、 paletteは -36から +36までの範囲の成分の長さ 3のベクトルです; それぞれの値はそれぞれ赤、緑、青色上にレベルをマップする公式に関する添字です:

 
 0: 0               1: 0.5           2: 1
 3: x               4: x^2           5: x^3
 6: x^4             7: sqrt(x)       8: sqrt(sqrt(x))
 9: sin(90x)       10: cos(90x)     11: |x-0.5|
12: (2x-1)^2       13: sin(180x)    14: |cos(180x)|
15: sin(360x)      16: cos(360x)    17: |sin(360x)|
18: |cos(360x)|    19: |sin(720x)|  20: |cos(720x)|
21: 3x             22: 3x-1         23: 3x-2
24: |3x-1|         25: |3x-2|       26: (3x-1)/2
27: (3x-2)/2       28: |(3x-1)/2|   29: |(3x-2)/2|
30: x/0.32-0.78125 31: 2*x-0.84     32: 4x;1;-2x+1.84;x/0.08-11.5
33: |2*x - 0.5|    34: 2*x          35: 2*x - 0.5
36: 2*x - 1

負の数は負の色成分を意味します。 palette = graypalette = colorは、それぞれ palette = [3,3,3]palette = [7,5,15]のショートカットです

2つ目の方法では、 paletteはユーザー定義のルックアップテーブルです。 この場合、長さ nのルックアップテーブルを構成するフォーマットは palette=[color_1, color_2, ..., color_nです。 ここで、 color_icolor_iを最低のグレイレベルに割り当て、 color_nを最高に割り当てるような均整のとれた色です (オプション colorを参照してください)。 残りの色は内挿されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

3Dオブジェクトでのオプション enhanced3dと一緒に機能します。

 
(%i1) draw3d(
        enhanced3d = [z-x+2*y,x,y,z],
        palette = [32, -8, 17],
        explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$

figures/draw_palette

グレイイメージとも一緒に機能します。

 
(%i1) im: apply(
           'matrix,
            makelist(makelist(random(200),i,1,30),i,1,30))$
(%i2) /* palette = color, default */
      draw2d(image(im,0,0,30,30))$
(%i3) draw2d(palette = gray, image(im,0,0,30,30))$
(%i4) draw2d(palette = [15,20,-4],
             colorbox=false,
             image(im,0,0,30,30))$

figures/draw_palette2

paletteはユーザー定義のルックアップテーブルの場合があります。 この例では、 xの低いレベルは赤に割り当てられ、高いレベルは黄色に割り当てられています。

 
(%i1) draw3d(
         palette = [red, blue, yellow],
         enhanced3d = x,
         explicit(x^2+y^2,x,-1,1,y,-1,1)) $

figures/draw_palette3

colorboxenhanced3dも参照してください。

Categories:  Package draw

グラフィックオプション: point_size

デフォルト値: 1

point_sizeはプロットする点のサイズを設定します。 非負数でなければいけません。

グラフィックオプション point_typedotに設定される時このオプションは効果を持ちません。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(points(makelist([random(20),random(50)],k,1,10)),
        point_size = 5,
        points(makelist(k,k,1,20),makelist(random(30),k,1,20)))$

figures/draw_point_size

Categories:  Package draw

グラフィックオプション: point_type

デフォルト値: 1

point_typeは孤立した点をどう表示するかを示します; このオプションの値は、 -1以上の整数インデックスもしくは点スタイルの名前であり得ます: $none (-1), dot (0), plus (1), multiply (2), asterisk (3), square (4), filled_square (5), circle (6), filled_circle (7), up_triangle (8), filled_up_triangle (9), down_triangle (10), filled_down_triangle (11), diamant (12), filled_diamant (13)。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(xrange = [0,10],
             yrange = [0,10],
             point_size = 3,
             point_type = diamant,
             points([[1,1],[5,1],[9,1]]),
             point_type = filled_down_triangle,
             points([[1,2],[5,2],[9,2]]),
             point_type = asterisk,
             points([[1,3],[5,3],[9,3]]),
             point_type = filled_diamant,
             points([[1,4],[5,4],[9,4]]),
             point_type = 5,
             points([[1,5],[5,5],[9,5]]),
             point_type = 6,
             points([[1,6],[5,6],[9,6]]),
             point_type = filled_circle,
             points([[1,7],[5,7],[9,7]]),
             point_type = 8,
             points([[1,8],[5,8],[9,8]]),
             point_type = filled_diamant,
             points([[1,9],[5,9],[9,9]]) )$

figures/draw_point_type

Categories:  Package draw

グラフィックオプション: points_joined

デフォルト値: false

points_joinedtrueの時、点を線で結びます; falseの時、孤立した点が描かれます。 このグラフィックオプションの三番目の可能な値は impulsesです; この場合、点から x軸(2D)もしくは xy平面(3D)へ垂直の線分が描かれます。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(xrange        = [0,10],
             yrange        = [0,4],
             point_size    = 3,
             point_type    = up_triangle,
             color         = blue,
             points([[1,1],[5,1],[9,1]]),
             points_joined = true,
             point_type    = square,
             line_type     = dots,
             points([[1,2],[5,2],[9,2]]),
             point_type    = circle,
             color         = red,
             line_width    = 7,
             points([[1,3],[5,3],[9,3]]) )$

figures/draw_points_joined

Categories:  Package draw

グラフィックオプション: proportional_axes

デフォルト値: none

proportional_axesxyxyzに等しい時、 2Dか 3Dシーンでそれらの相対的な長さに比例する軸とともに描画するように 軸単位のアスペクトレシオを 1:1に設定します。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

このオプションは Gnuplot 4.2.6以上で機能します。

例:

単プロット。

 
(%i1) draw2d(
        ellipse(0,0,1,1,0,360),
        transparent=true,
        color = blue,
        line_width = 4,
        ellipse(0,0,2,1/2,0,360),
        proportional_axes = xy) $

figures/draw_proportional_axis

多重プロット。

 
(%i1) draw(
        terminal = wxt,
        gr2d(proportional_axes = xy,
             explicit(x^2,x,0,1)),
        gr2d(explicit(x^2,x,0,1),
             xrange = [0,1],
             yrange = [0,2],
             proportional_axes=xy),
        gr2d(explicit(x^2,x,0,1)))$

figures/draw_proportional_axis2

Categories:  Package draw

グラフィックオプション: surface_hide

デフォルト値: false

もし surface_hidetrueなら、隠れた部分を 3d表面にプロットしません。

これはグローバルグラフィックオプションなので、シーン記述での位置はかまいません。

例:

 
(%i1) draw(columns=2,
           gr3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)),
           gr3d(surface_hide = true,
                explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)) )$

figures/draw_surface_hide

Categories:  Package draw

グラフィックオプション: terminal

デフォルト値: screen

Gnuplotが使う端末を選択します; 可能な値は: screen (デフォルト), png, pngcairo, jpg, gif, eps, eps_color, epslatex, epslatex_standalone, svg, canvas, dumb, dumb_file, pdf, pdfcairo, wxt, animated_gif, multipage_pdfcairo, multipage_pdf, multipage_eps, multipage_eps_color, aquaterm

端末 screen, wxt, aquatermは2つの要素を持つリストとしても定義できます: 端末自身の名前と非負の整数。 この形式では、それぞれ対応する番号を持つ複数のウィンドウを同時に開くことができます。 この特長は Windowsプラットフォームでは機能しません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。 関数 drawの引数としても使われます。

注意せよ― pdfcairoは Gnuplot 4.3を必要とします。 pdfは、Gnuplotをオプション --enable-pdfでコンパイルすることを必要とし、 libpdfがインストールされていなければいけません。 pdfライブラリは以下で入手可能です: http://www.pdflib.com/en/download/pdflib-family/pdflib-lite/

例:

 
(%i1) /* screen terminal (default) */
      draw2d(explicit(x^2,x,-1,1))$
(%i2) /* png file */
      draw2d(terminal  = 'png,
             explicit(x^2,x,-1,1))$
(%i3) /* jpg file */
      draw2d(terminal   = 'jpg,
             dimensions = [300,300],
             explicit(x^2,x,-1,1))$
(%i4) /* eps file */
      draw2d(file_name = "myfile",
             explicit(x^2,x,-1,1),
             terminal  = 'eps)$
(%i5) /* pdf file */
      draw2d(file_name = "mypdf",
             dimensions = 100*[12.0,8.0],
             explicit(x^2,x,-1,1),
             terminal  = 'pdf)$
(%i6) /* wxwidgets window */
      draw2d(explicit(x^2,x,-1,1),
             terminal  = 'wxt)$

複数のウィンドウ。

 
(%i1) draw2d(explicit(x^5,x,-2,2), terminal=[screen, 3])$
(%i2) draw2d(explicit(x^2,x,-2,2), terminal=[screen, 0])$

動画 gifファイル。

 
(%i1) draw(
        delay     = 100,
        file_name = "zzz",
        terminal  = 'animated_gif,
        gr2d(explicit(x^2,x,-1,1)),
        gr2d(explicit(x^3,x,-1,1)),
        gr2d(explicit(x^4,x,-1,1)));
End of animation sequence
(%o1)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]

オプション delayは動画 gifでだけ有効です; 他のいかなる場合も無視されます。

eps 形式での複数ページ出力。

 
(%i1) draw(
        file_name = "parabol",
        terminal  = multipage_eps,
        dimensions = 100*[10,10],
        gr2d(explicit(x^2,x,-1,1)),
        gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1))) $

file_name, dimensions, delayも参照してください。

Categories:  Package draw

グラフィックオプション: title

デフォルト値: "" (empty string)

オプション title、文字列は、シーンのメインタイトルです。 デフォルトではタイトルは書かれません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(explicit(exp(u),u,-2,2),
             title = "Exponential function")$

figures/draw_title

Categories:  Package draw

グラフィックオプション: transform

デフォルト値: none

もし transformnoneなら、 空間を変換せず、グラフィックオブジェクトを定義の通り描画します。 空間変換を望む時、リストをオプション transformに割り当てられなければいけません。 2Dシーンの場合、リストは形式 [f1(x,y), f2(x,y), x, y]を取ります。 3Dシーンの場合、リストは形式 [f1(x,y,z), f2(x,y,z), f3(x,y,z), x, y, z]を取ります。 リストの中で定義されている変数名は グラフィックオブジェクトの定義の中で使われるものと異なるかもしれません。

例:

2Dの回転。

 
(%i1) th : %pi / 4$
(%i2) draw2d(
        color = "#e245f0",
        proportional_axes = 'xy,
        line_width = 8,
        triangle([3,2],[7,2],[5,5]),
        border     = false,
        fill_color = yellow,
        transform  = [cos(th)*x - sin(th)*y,
                      sin(th)*x + cos(th)*y, x, y],
        triangle([3,2],[7,2],[5,5]) )$

figures/draw_transform

3Dでの変形。

 
(%i1) draw3d(
        color     = "#a02c00",
        explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
        transform = [x+10,y+10,z+10,x,y,z],
        color     = blue,
        explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3) )$

Categories:  Package draw

グラフィックオプション: transparent

デフォルト値: false

もし transparentfalseなら、 ポリゴンの内側の領域は fill_colorに従って塗りつぶされます。

このオプションは以下のグラフィックオブジェクトに影響します:

例:

 
(%i1) draw2d(polygon([[3,2],[7,2],[5,5]]),
             transparent = true,
             color       = blue,
             polygon([[5,2],[9,2],[7,5]]) )$

figures/draw_transparent

Categories:  Package draw

グラフィックオプション: unit_vectors

デフォルト値: false

もし unit_vectorstrueなら、ベクトルは単位 1でプロットされます。 これはベクトル場をプロットするのに役に立ちます。 もし unit_vectorsfalseなら、ベクトルは元の長さでプロットされます。

このオプションは vectorオブジェクトに対してだけ有効です。

例:

 
(%i1) draw2d(xrange      = [-1,6],
             yrange      = [-1,6],
             head_length = 0.1,
             vector([0,0],[5,2]),
             unit_vectors = true,
             color        = red,
             vector([0,3],[5,2]))$

figures/draw_unit_vectors

Categories:  Package draw

グラフィックオプション: user_preamble

デフォルト値: "" (empty string)

熟練 Gnuplotユーザーは、 plotsplotコマンドの前に送られる設定を書くことで、 このオプションを利用して、 Gnuplotの振る舞いを微調整することができます。

このオプションの値は文字列か(行毎に1つの)文字列のリストでなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

Gnuplotにグラフィックオブジェクトの頭に軸とグリッドを描画するよう命令します。

 
(%i1) draw2d(
        xaxis =true, xaxis_type=solid,
        yaxis =true, yaxis_type=solid,
        user_preamble="set grid front",
        region(x^2+y^2<1 ,x,-1.5,1.5,y,-1.5,1.5))$

figures/draw_user_preamble

gnuplotに黒ですべての等高線を描画するように命令します。

 
(%i1) wxdraw3d(
          contour=both,
          surface_hide=true,enhanced3d=true,wired_surface=true,
          contour_levels=10,
          user_preamble="set for [i=1:8] linetype i dashtype i linecolor 0",
          explicit(sin(x)*cos(y),x,1,10,y,1,10)
      );

figures/draw_user_preamble2

Categories:  Package draw

グラフィックオプション: view

デフォルト値: [60,30]

3Dシーンでビュー方向を示す度数で測られた角度の対。 最初の角度は x軸回りの垂直回転であり、 [0, 360]の範囲です。 二番目は z回りの水平回転であり、 [0, 360]の範囲です。

もしオプション viewに値 mapを与えたなら、ビュー方向をxy-平面に垂直に設定します。

これはグローバルグラフィックスオプションなので、 シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(view = [170, 50],
             enhanced3d = true,
             explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$

figures/draw_view

 
(%i2) draw3d(view = map,
             enhanced3d = true,
             explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$

figures/draw_view2

Categories:  Package draw

グラフィックオプション: wired_surface

デフォルト値: false

enhanced3dモードでの 3D 表面が点を結合したグリッドを表示するかどうかを示します。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d(
        enhanced3d    = [sin(x),x,y],
        wired_surface = true,
        explicit(x^2+y^2,x,-1,1,y,-1,1)) $

figures/draw_wired_surface

Categories:  Package draw

グラフィックオプション: x_voxel

デフォルト値: 10

x_voxelは 3d 陰的オブジェクトで実装されたマーチングキューブアルゴリズム x方向のボクセルの数です。 グラフィックオブジェクト regionでも使われます。

Categories:  Package draw

グラフィックオプション: xaxis

デフォルト値: false

もし xaxistrueなら、 x軸を描きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             xaxis       = true,
             xaxis_color = blue)$

figures/draw_xaxis

xaxis_width, xaxis_type, xaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: xaxis_color

デフォルト値: "black"

xaxis_colorx軸の色を指定します。 色をどう定義するかを知るには colorを参照してください。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             xaxis       = true,
             xaxis_color = red)$

xaxis, xaxis_width, xaxis_typeも参照してください。

Categories:  Package draw

グラフィックオプション: xaxis_secondary

デフォルト値: false

もし xaxis_secondarytrueなら、 関数値を、二番目の x軸に関してプロットできます。 二番目の x軸はシーンのトップに描かれます。

これは 2dプロットにだけ影響する局所的なグラフィックオプションであることに注意してください。

例:

 
(%i1) draw2d(
         key   = "Bottom x-axis",
         explicit(x+1,x,1,2),
         color = red,
         key   = "Above x-axis",
         xtics_secondary = true,
         xaxis_secondary = true,
         explicit(x^2,x,-1,1)) $

figures/draw_xaxis_secondary

xrange_secondary, xtics_secondary, xtics_rotate_secondary, xtics_axis_secondary, xaxis_secondaryも参照してください。

グラフィックオプション: xaxis_type

デフォルト値: dots

xaxis_typex軸をどう表示するかを示します; 可能な値は soliddotsです。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             xaxis       = true,
             xaxis_type  = solid)$

xaxis, xaxis_width, xaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: xaxis_width

デフォルト値: 1

xaxis_widthx軸の幅です。 その値は正数でなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             xaxis       = true,
             xaxis_width = 3)$

xaxis, xaxis_type, xaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: xlabel

デフォルト値: ""

オプションxlabel、文字列は x軸のラベルです。 デフォルトでは、軸は文字列 "x"でラベルされます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(xlabel = "Time",
             explicit(exp(u),u,-2,2),
             ylabel = "Population")$

xlabel_secondaryylabel, ylabel_secondary, zlabelも参照してください。

Categories:  Package draw

グラフィックオプション: xlabel_secondary

デフォルト値: "" (空の文字列)

文字列であるオプション xlabel_secondaryは副x軸のラベルです。 デフォルトでは何も書かれません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
         xaxis_secondary=true,yaxis_secondary=true,
         xtics_secondary=true,ytics_secondary=true,
         xlabel_secondary="t[s]",
         ylabel_secondary="U[V]",
         explicit(sin(t),t,0,10) )$

xlabel, ylabel, ylabel_secondary, zlabelも参照してください。

Categories:  Package draw

グラフィックオプション: xrange

デフォルト値: auto

もし xrangeautoなら x座標の範囲を自動的に計算します。

もしユーザーが xに関して特定の区間が欲しいなら、 xrange=[-2, 3]のように Maximaリストとして与えられなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(xrange = [-3,5],
             explicit(x^2,x,-1,1))$

yrangezrangeも参照してください。

Categories:  Package draw

グラフィックオプション: xrange_secondary

デフォルト値: auto

もし xrange_secondaryautoなら 二番目の x軸の範囲を自動的に計算します。

もしユーザーが二番目の x軸の特定した区間が欲しいなら、 xrange_secondary=[-2, 3]のように Maximaリストとして与えられなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

xrange, yrange, zrange, yrange_secondaryも参照してください。

Categories:  Package draw

グラフィックオプション: xtics

デフォルト値: true

このグラフィックオプション制御はチックマークを x軸上に描く方法を制御します。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

チックをディセーブルします。

 
(%i1) draw2d(xtics = 'false,
             explicit(x^3,x,-1,1)  )$

1/4単位毎のチック。

 
(%i1) draw2d(xtics = 1/4,
             explicit(x^3,x,-1,1)  )$

-3/4から 3/4まで 1/8のステップでチック。

 
(%i1) draw2d(xtics = [-3/4,1/8,3/4],
             explicit(x^3,x,-1,1)  )$

点 -1/2, -1/4, 3/4にチック。

 
(%i1) draw2d(xtics = {-1/2,-1/4,3/4},
             explicit(x^3,x,-1,1)  )$

ラベルされたチック。

 
(%i1) draw2d(xtics = {["High",0.75],["Medium",0],["Low",-0.75]},
             explicit(x^3,x,-1,1)  )$

ytics, zticsも参照してください。

Categories:  Package draw

グラフィックオプション: xtics_axis

デフォルト値: false

もし xtics_axistrueなら、 チックマークとそれらのラベルを x軸に沿ってだけプロットします。 もし falseなら、チックを境界上にプロットします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: xtics_rotate

デフォルト値: false

もし xtics_rotatetrueなら、 x軸上のチックマークを90度回転します。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: xtics_rotate_secondary

デフォルト値: false

もし xtics_rotate_secondarytrueなら、 補助的な x軸上のチックマークが 90度回転されます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: xtics_secondary

デフォルト値: auto

このグラフィックオプションは、二番目の x軸上にチックマークを描く方法を制御します。

完全な記述に関しては xticsを参照してください。

Categories:  Package draw

グラフィックオプション: xtics_secondary_axis

デフォルト値: false

もし xtics_secondary_axistrueなら、 チックマークとそれらのラベルを補助的な x軸に沿ってだけプロットし、 もし falseなら境界上にプロットします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: xu_grid

デフォルト値: 30

xu_gridは サンプル点のグリッドを構築するための一番目の変数 (陽での x、パラメトリック3d表面での u)の座標の数です。

このオプションは以下のグラフィックオブジェクトに影響を与えます:

例:

 
(%i1) draw3d(xu_grid = 10,
             yv_grid = 50,
             explicit(x^2+y^2,x,-3,3,y,-3,3) )$

yv_gridも参照してください。

Categories:  Package draw

グラフィックオプション: xy_file

デフォルト値: "" (empty string)

xy_fileは、マウスでクリックし 'x'キーを叩いた後、座標を保存するファイルの名前です。 デフォルトでは座標を保存しません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

Categories:  Package draw

グラフィックオプション: xyplane

デフォルト値: false

3Dシーンの中に xy平面を配置します。 xyplanefalseの時、 xy平面は自動的に置かれます; 実数の時、 xy平面はこのレベルで z軸と交わります。 このオプションは 2Dシーンでは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(xyplane = %e-2,
             explicit(x^2+y^2,x,-1,1,y,-1,1))$

Categories:  Package draw

グラフィックオプション: y_voxel

デフォルト値: 10

y_voxelは 3d陰的オブジェクトで実装されたマーチングキューブアルゴリズムで使われる y方向のボクセルの数です。 グラフィックオブジェクト regionでも使われます。

Categories:  Package draw

グラフィックオプション: yaxis

デフォルト値: false

もし yaxistrueなら y軸を描きます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             yaxis       = true,
             yaxis_color = blue)$

yaxis_width, yaxis_type, yaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: yaxis_color

デフォルト値: "black"

yaxis_colory軸の色を指定します。 色がどのように定義されているか知るには colorを参照してください。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             yaxis       = true,
             yaxis_color = red)$

yaxis, yaxis_width, yaxis_typeも参照してください。

Categories:  Package draw

グラフィックオプション: yaxis_secondary

デフォルト値: false

もし yaxis_secondarytrueなら、 関数値を二番目の y軸に関してプロットできます。 二番目の y軸をシーンの右側に描きます。

これは 2dプロットにだけ影響する局所的なグラフィックオプションであることに注意してください。

例:

 
(%i1) draw2d(
         explicit(sin(x),x,0,10),
         yaxis_secondary = true,
         ytics_secondary = true,
         color = blue,
         explicit(100*sin(x+0.1)+2,x,0,10));

yrange_secondary, ytics_secondary, ytics_rotate_secondary, ytics_axis_secondaryも参照してください。

Categories:  Package draw

グラフィックオプション: yaxis_type

デフォルト値: dots

yaxis_typey軸がどのように表示されるか示します; 可能な値は soliddotsです。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             yaxis       = true,
             yaxis_type  = solid)$

yaxis, yaxis_width, yaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: yaxis_width

デフォルト値: 1

yaxis_widthy軸の幅です。 その値は正の数でなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw2d(explicit(x^3,x,-1,1),
             yaxis       = true,
             yaxis_width = 3)$

yaxis, yaxis_type, yaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: ylabel

デフォルト値: ""

オプションylabel、文字列は y軸のラベルです。 デフォルトでは軸は文字列 "y"でラベルされます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(xlabel = "Time",
             ylabel = "Population",
             explicit(exp(u),u,-2,2) )$

xlabel, xlabel_secondary, ylabel_secondary, zlabelも参照してください。

Categories:  Package draw

グラフィックオプション: ylabel_secondary

デフォルト値: "" (空の文字列)

文字列であるオプション ylabel_secondaryは副y軸のラベルです。 デフォルトではラベルを書きません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
        key_pos=bottom_right,
        key="current",
        xlabel="t[s]",
        ylabel="I[A]",ylabel_secondary="P[W]",
        explicit(sin(t),t,0,10),
        yaxis_secondary=true,
        ytics_secondary=true,
        color=red,key="Power",
        explicit((sin(t))^2,t,0,10)
    )$

xlabel_draw, xlabel_secondary, ylabel_draw, zlabelも参照してください。

Categories:  Package draw

グラフィックオプション: yrange

デフォルト値: auto

もし yrangeautoなら、 y座標の範囲を自動的に計算します。

もしユーザーが yの特定の区間が欲しいなら、 yrange=[-2, 3]のように Maximaリストとして与えなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(yrange = [-2,3],
             explicit(x^2,x,-1,1),
             xrange = [-3,3])$

xrange, yrange_secondary, zrangeも参照してください。

Categories:  Package draw

グラフィックオプション: yrange_secondary

デフォルト値: auto

もし yrange_secondaryautoなら、二番目の y軸の範囲を自動的に計算します。

もしユーザーが二番目の y軸の特定の区間が欲しいなら、 yrange_secondary=[-2, 3]のように Maximaリストとして与えなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw2d(
         explicit(sin(x),x,0,10),
         yaxis_secondary = true,
         ytics_secondary = true,
         yrange = [-3, 3],
         yrange_secondary = [-20, 20],
         color = blue,
         explicit(100*sin(x+0.1)+2,x,0,10)) $

xrange, yrange, zrangeも参照してください。

Categories:  Package draw

グラフィックオプション: ytics

デフォルト値: true

このグラフィックオプションは y軸上にチックマークを描く方法を制御します。

完全な記述に関しては xticsを参照してください。

Categories:  Package draw

グラフィックオプション: ytics_axis

デフォルト値: false

もし ytics_axistrueなら、 チックマークとそれらのラベルを y軸に沿ってだけプロットし、 もし falseなら境界上にプロットします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: ytics_rotate

デフォルト値: false

もし ytics_rotatetrueなら、 y軸上のチックマークを90度回転させます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: ytics_rotate_secondary

デフォルト値: false

もし ytics_rotate_secondarytrueなら、 補助的な y軸上のチックマークを 90度回転させます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: ytics_secondary

デフォルト値: auto

このグラフィックオプションは、二番目の y軸上にチックマークを描く方法を制御します。

完全な記述に関しては xticsを参照してください。

Categories:  Package draw

グラフィックオプション: ytics_secondary_axis

デフォルト値: false

もし ytics_secondary_axistrueなら、 チックマークとそれらのラベルを補助的な y軸に沿ってだけプロットし、 もし falseなら境界上にプロットします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: yv_grid

デフォルト値: 30

yv_gridはサンプル点のグリッドを構築するための二番目の変数(陽での y、パラメトリック 3d表面での v)の座標の数です。

このオプションは以下のグラフィックオブジェクトに影響を与えます:

例:

 
(%i1) draw3d(xu_grid = 10,
             yv_grid = 50,
             explicit(x^2+y^2,x,-3,3,y,-3,3) )$

figures/draw_xugrid

xu_gridも参照してください。

Categories:  Package draw

グラフィックオプション: z_voxel

デフォルト値: 10

z_voxelは 3d 陰的オブジェクトで実装されたマーチングキューブアルゴリズム で使われる z方向のボクセルの数です。

Categories:  Package draw

グラフィックオプション: zaxis

デフォルト値: false

もし zaxistrueなら、 3Dプロットで z軸を描きます。 このオプションは 2Dシーンでは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
             zaxis       = true,
             zaxis_type  = solid,
             zaxis_color = blue)$

zaxis_width, zaxis_type, zaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: zaxis_color

デフォルト値: "black"

zaxis_colorz軸の色を指定します。 色がどのように定義されているか知るには colorを参照してください。 このオプションは 2Dシーンでは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
             zaxis       = true,
             zaxis_type  = solid,
             zaxis_color = red)$

zaxis, zaxis_width, zaxis_typeも参照してください。

Categories:  Package draw

グラフィックオプション: zaxis_type

デフォルト値: dots

zaxis_typez軸がどのように表示されるか示します; 可能な値は soliddotsです。 このオプションは 2Dシーンでは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
             zaxis       = true,
             zaxis_type  = solid)$

zaxis, zaxis_width, zaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: zaxis_width

デフォルト値: 1

zaxis_widthz軸の幅です。 その値は正の数でなければいけません。 このオプションは 2Dシーンでは効果を持ちません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題なりません。

例:

 
(%i1) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
             zaxis       = true,
             zaxis_type  = solid,
             zaxis_width = 3)$

zaxis, zaxis_type, zaxis_colorも参照してください。

Categories:  Package draw

グラフィックオプション: zlabel

デフォルト値: ""

オプション zlabel文字列は z軸のラベルです。 デフォルトでは軸は文字列 "z"でラベルされます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d(zlabel = "Z variable",
             ylabel = "Y variable",
             explicit(sin(x^2+y^2),x,-2,2,y,-2,2),
             xlabel = "X variable" )$

xlabel_drawylabel_drawも参照してください。

Categories:  Package draw

グラフィックオプション: zlabel_rotate

デフォルト値: "auto"

このグラフィックオプションは もし3dプロットのz軸ラベルを水平に描画するか (false)垂直か (true) もしくはラベルの長さに基づいてmaximaが方向を自動的に選択するか auto)を選ぶことを可能にします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d(
          explicit(sin(x)*sin(y),x,0,10,y,0,10),
          zlabel_rotate=false
      )$

zlabel_drawも参照してください。

Categories:  Package draw

グラフィックオプション: zrange

デフォルト値: auto

もし zrangeautoなら、 z座標の範囲を自動的に計算します。

もしユーザーが zの特定の区間が欲しいなら、 zrange=[-2, 3]のように Maximaリストとして与えなければいけません。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

例:

 
(%i1) draw3d(yrange = [-3,3],
             zrange = [-2,5],
             explicit(x^2+y^2,x,-1,1,y,-1,1),
             xrange = [-3,3])$

xrange, yrangeも参照してください。

Categories:  Package draw

グラフィックオプション: ztics

デフォルト値: auto

このグラフィックオプションは、 z軸上にチックマークを描く方法を制御します。

完全な記述に関しては xticsを参照してください。

Categories:  Package draw

グラフィックオプション: ztics_axis

デフォルト値: false

もし ztics_secondary_axistrueなら、 チックマークとそれらのラベルを補助的な z軸に沿ってだけプロットし、 もし falseなら境界上にプロットします。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw

グラフィックオプション: ztics_rotate

デフォルト値: false

もし ztics_rotatetrueなら、 z軸上のチックマークを 90度回転させます。

これはグローバルグラフィックスオプションなので、シーン記述の位置は問題になりません。

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2.4 Graphics objects

グラフィックオブジェクト: bars ([x1,h1,w1], [x2,h2,w2, ...])

2D内に垂直バーを描画します。

2D

bars ([x1,h1,w1], [x2,h2,w2, ...])は値 x1, x2, ...に中心を持ち、高さ h1, h2, ...と幅 w1, w2, ...を持つバーを描画します。

このオブジェクトは以下のグラフィックオプションに影響されます: key, fill_color, fill_density, line_width

例:

 
(%i1) draw2d(
       key          = "Group A",
       fill_color   = blue,
       fill_density = 0.2,
       bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4]),
       key          = "Group B",
       fill_color   = red,
       fill_density = 0.6,
       line_width   = 4,
       bars([1.2,4,0.4],[2.2,-2,0.4],[3.2,5,0.4]),
       xaxis = true);

figures/draw_bars

グラフィックオブジェクト: cylindrical (radius, z, minz, maxz, azi, minazi, maxazi)

円柱座標で定義された 3D関数を描画します。

3D

cylindrical (radius, z, minz, maxz, azi, minazi, maxazi)minzから maxzまでの値を取る zminaziから maxaziまで値を取る方位角 aziを伴う円柱座標で定義された関数 radius(z,azi)をプロットします。

このオブジェクトは以下のグラフィックオプションに作用されます: xu_grid, yv_grid, line_type, key, wired_surface, enhanced3d, color

例:

 
(%i1) draw3d(cylindrical(1,z,-2,2,az,0,2*%pi))$

figures/draw_cylindrical

Categories:  Package draw

グラフィックオブジェクト: elevation_grid (mat,x0,y0,width,height)

3D空間に行列 matを描画します。 x0から x0 + widthまでの横座標範囲と y0から y0 + heightまでの縦座標範囲で、 z値は matから取られます。 要素 a(1,1)は点 (x0,y0+height)上に射影され、 a(1,n)(x0+width,y0+height)上に射影され、 a(m,1)(x0,y0)上に射影され、 a(m,n)(x0+width,y0)上に射影されます。

このオブジェクトは以下のグラフィックオプションに作用されます: line_type, line_width, key, wired_surface, enhanced3d, color

Maximaの古いバージョンでは elevation_gridmeshと呼びました。 meshも参照してください。

例:

 
(%i1) m: apply(
            matrix,
            makelist(makelist(random(10.0),k,1,30),i,1,20)) $
(%i2) draw3d(
         color = blue,
         elevation_grid(m,0,0,3,2),
         xlabel = "x",
         ylabel = "y",
         surface_hide = true);

figures/draw_elevation_grid

Categories:  Package draw

グラフィックオブジェクト: ellipse (xc, yc, a, b, ang1, ang2)

2D内で楕円や円を描画します。

2D

ellipse (xc, yc, a, b, ang1, ang2)[xc, yc]を中心とし、水平と垂直半軸にそれぞれ abを持ち、角度 ang1から始まり、角度 ang2に等しい振幅を持つ楕円をプロットします。

このオブジェクトは以下のgraphic optionsに影響されます: nticks, transparent, fill_color, border, line_width, line_type, key, color.

例:

 
(%i1) draw2d(transparent = false,
             fill_color  = red,
             color       = gray30,
             transparent = false,
             line_width  = 5,
             ellipse(0,6,3,2,270,-270),
             /* center (x,y), a, b, start & end in degrees */
             transparent = true,
             color       = blue,
             line_width  = 3,
             ellipse(2.5,6,2,3,30,-90),
             xrange      = [-3,6],
             yrange      = [2,9] )$

figures/draw_ellipse

Categories:  Package draw

グラフィックオブジェクト: errors ([x1, x2, …], [y1, y2, …])

オプション error_typeの値に依存して、 水平、垂直もしくは両方のエラーバーと共に点を描きます。

2D

もし error_type = xなら、 errorsの引数は形式 [x, y, xdelta][x, y, xlow, xhigh]でなければいけません。 もし error_type = yなら、 引数は形式 [x, y, ydelta][x, y, ylow, yhigh]でなければいけません。 もし error_type = xyerror_type = boxesなら、 errorsの引数は形式 [x, y, xdelta, ydelta][x, y, xlow, xhigh, ylow, yhigh]でなければいけません。

error_typeも参照してください。

このオブジェクトは以下のグラフィックオブジェクトによって影響されます: error_type, points_joined, line_width, key, line_type, color, fill_density, xaxis_secondary, yaxis_secondary.

オプション fill_densityerror_type=boxesの時だけ有効です。

例:

水平エラーバー。

 
(%i1) draw2d(
        error_type = y,
        errors([[1,2,1], [3,5,3], [10,3,1], [17,6,2]]))$

figures/draw_errors

垂直および水平エラーバー。

 
(%i1) draw2d(
        error_type = xy,
        points_joined = true,
        color = blue,
        errors([[1,2,1,2], [3,5,2,1], [10,3,1,1], [17,6,1/2,2]]));

figures/draw_errors2

Categories:  Package draw

グラフィックオブジェクト: explicit  
    explicit (fcn,var,minval,maxval)  
    explicit (fcn,var1,minval1,maxval1,var2,minval2,maxval2)

(fcn,var1,minval1,maxval1,var2,minval2,maxval2) 2Dおよび3Dにて陽関数を描画します。

2D

explicit(fcn,var,minval,maxval)minvalから maxvalまで値を取る変数 varを伴う陽関数 fcnをプロットします。

このオブジェクトは以下のgraphic optionsに作用されます: nticks, adapt_depth, draw_realpart, line_width, line_type, key, filled_func, fill_color, color

例:

 
(%i1) draw2d(line_width = 3,
             color      = blue,
             explicit(x^2,x,-3,3) )$

figures/draw_explicit

 
(%i2) draw2d(fill_color  = brown,
             filled_func = true,
             explicit(x^2,x,-3,3) )$

figures/draw_explicit2

3D

explicit(fcn, var1, minval1, maxval1, var2, minval2, maxval2)minval1から maxval1まで値を取る変数 var1minval2から maxval2まで値を取る変数 var2を伴う陽関数 fcnをプロットします。

このオブジェクトは以下のグラフィックオプションの影響を受けます: draw_realpart, xu_grid, yv_grid, line_type, line_width, key, wired_surface, enhanced3d, color

例:

 
(%i1) draw3d(key   = "Gauss",
             color = "#a02c00",
             explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
             yv_grid     = 10,
             color = blue,
             key   = "Plane",
             explicit(x+y,x,-5,5,y,-5,5),
             surface_hide = true)$

figures/draw_explicit3

埋められた関数に関しては filled_funcも参照してください。

Categories:  Package draw

グラフィックオブジェクト: image (im,x0,y0,width,height)

2Dにてイメージを描写します。

2D

image (im,x0,y0,width,height)は 実平面上の頂点 (x0,y0)から (x0+width,y0+height)までの長方形領域にイメージ imをプロットします。 引数 imは実数の行列、長さ 3のベクトルの行列もしくは pictureオブジェクトでなければいけません。

もし imが実数の行列か levels pictureオブジェクトなら、ピクセル値は -36から +36に広がる成分を持つ長さ 3のベクトルであるグラフィックオプション paletteに従って解釈されます; それぞれの値はレベルをそれぞれ赤、緑、青色にマップする公式のインデックスです。

 
 0: 0               1: 0.5           2: 1
 3: x               4: x^2           5: x^3
 6: x^4             7: sqrt(x)       8: sqrt(sqrt(x))
 9: sin(90x)       10: cos(90x)     11: |x-0.5|
12: (2x-1)^2       13: sin(180x)    14: |cos(180x)|
15: sin(360x)      16: cos(360x)    17: |sin(360x)|
18: |cos(360x)|    19: |sin(720x)|  20: |cos(720x)|
21: 3x             22: 3x-1         23: 3x-2
24: |3x-1|         25: |3x-2|       26: (3x-1)/2
27: (3x-2)/2       28: |(3x-1)/2|   29: |(3x-2)/2|
30: x/0.32-0.78125                  31: 2*x-0.84
32: 4x;1;-2x+1.84;x/0.08-11.5
33: |2*x - 0.5|    34: 2*x          35: 2*x - 0.5
36: 2*x - 1

負の数は負の色成分を意味します。

palette = graypalette = colorはそれぞれ、 palette = [3,3,3]palette = [7,5,15]へのショートカットです。

もし imが長さ 3のベクトルの行列か rgb pictureオブジェクトなら、それらは赤、緑、青の色成分として解釈されます。

例:

もし imが実数の行列なら、ピクセル値はグラフィックオプション paletteに従って解釈されます。

 
(%i1) im: apply(
           'matrix,
            makelist(makelist(random(200),i,1,30),i,1,30))$
(%i2) /* palette = color, default */
      draw2d(image(im,0,0,30,30))$

figures/draw_image

 
(%i3) draw2d(palette = gray, image(im,0,0,30,30))$

figures/draw_image2

 
(%i4) draw2d(palette = [15,20,-4],
             colorbox=false,
             image(im,0,0,30,30))$

figures/draw_image3

colorboxも参照してください。

もし imが長さ3のベクトルの行列なら、 それらは赤、緑、青の色成分として解釈されます。

 
(%i1) im: apply(
            'matrix,
             makelist(
               makelist([random(300),
                         random(300),
                         random(300)],i,1,30),i,1,30))$
(%i2) draw2d(image(im,0,0,30,30))$

figures/draw_image4

パッケージ drawは自動的にパッケージ pictureをロードします。 この例ではレベルピクチャオブジェクトを手動で組み立て、描画します。

 
(%i1) im: make_level_picture([45,87,2,134,204,16],3,2);
(%o1)       picture(level, 3, 2, {Array:  #(45 87 2 134 204 16)})
(%i2) /* default color palette */
      draw2d(image(im,0,0,30,30))$

figures/draw_image5

 
(%i3) /* gray palette */
      draw2d(palette = gray,
             image(im,0,0,30,30))$

figures/draw_image6

xpmファイルを読み込み、描写します。

 
(%i1) load(draw)$
(%i2) im: read_xpm("myfile.xpm")$
(%i3) draw2d(image(im,0,0,10,7))$

make_level_picture, make_rgb_picture, read_xpmも参照してください。

http://www.telefonica.net/web2/biomates/maxima/gpdraw/image
には更に丹念な例があります。

Categories:  Package draw

グラフィックオブジェクト: implicit  
    implicit (fcn,x,xmin,xmax,y,ymin,ymax)  
    implicit (fcn,x,xmin,xmax,y,ymin,ymax,z,zmin,zmax)

(fcn,x,xmin,xmax,y,ymin,ymax,z,zmin,zmax) 2Dおよび 3Dにて陰関数を描画します。

2D

implicit(fcn,x,xmin,xmax,y,ymin,ymax)xminから xmaxまでの値を取る変数 xyminから ymaxまでの値を取る変数 yを伴う fcnで定義された陰関数をプロットします。

このオブジェクトは以下のグラフィックオプションの影響を受けます: ip_grid, ip_grid_in, line_width, line_type, key, color.

例:

 
(%i1) draw2d(grid      = true,
             line_type = solid,
             key       = "y^2=x^3-2*x+1",
             implicit(y^2=x^3-2*x+1, x, -4,4, y, -4,4),
             line_type = dots,
             key       = "x^3+y^3 = 3*x*y^2-x-1",
             implicit(x^3+y^3 = 3*x*y^2-x-1, x,-4,4, y,-4,4),
             title     = "Two implicit functions" )$

figures/draw_implicit

3D

implicit (fcn,x,xmin,xmax, y,ymin,ymax, z,zmin,zmax)xminから xmaxまでの値を取る変数 xyminから ymaxまでの値を取る変数 yzminから zmaxまでの値を取る変数 zを伴う fcnで定義された陰表面をプロットします。 このオブジェクトはマーチングキューブアルゴリズムを実装します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: x_voxel, y_voxel, z_voxel, line_width, line_type, key, wired_surface, enhanced3d, color

例:

 
(%i1) draw3d(
        color=blue,
        implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
                 x,-1,1,y,-1.2,2.3,z,-1,1),
        surface_hide=true);

figures/draw_implicit2

Categories:  Package draw

グラフィックオブジェクト: label  
    label ([string,x,y],...)  
    label ([string,x,y,z],...)

2Dと 3D内でラベルを書きます。

色付けられたラベルは Gnuplot 4.3以上で機能します。 これはパッケージ drawに関して既知のバグです。

このオブジェクトは以下のグラフィックオプションの影響を受けます: label_alignment, label_orientation, color.

2D

label([string,x,y])は点 [x,y]stringを書きます。

例:

 
(%i1) draw2d(yrange = [0.1,1.4],
             color = red,
             label(["Label in red",0,0.3]),
             color = "#0000ff",
             label(["Label in blue",0,0.6]),
             color = light_blue,
             label(["Label in light-blue",0,0.9],
                   ["Another light-blue",0,1.2])  )$

figures/draw_label

3D

label([string,x,y,z])は、 点[x,y,z]stringを書きます。

例:

 
(%i1) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
             color = red,
             label(["UP 1",-2,0,3], ["UP 2",1.5,0,4]),
             color = blue,
             label(["DOWN 1",2,0,-3]) )$

figures/draw_label2

Categories:  Package draw

グラフィックオブジェクト: mesh (row_1,row_2,...)

3Dで四角形のメッシュを描画します。

3D

引数 row_i[[x_i1,y_i1,z_i1], ...,[x_in,y_in,z_in]]という形の n個の 3D 点のリストで、行すべては同じ長さです。 これらの点すべては 3Dでの任意の表面を定義し、ある意味 elevation_gridオブジェクトの一般化です。

このオブジェクトは以下のグラフィックオプションに作用されます: line_type, line_width, color, key, wired_surface, enhanced3d, transform

例:

簡単な例。

 
(%i1) draw3d(
         mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
              [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
              [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $

figures/draw_mesh

3Dで三角形をプロット。

 
(%i1) draw3d(
        line_width = 2,
        mesh([[1,0,0],[0,1,0]],
             [[0,0,1],[0,0,1]])) $

figures/draw_mesh2

2つの四角形。

 
(%i1) draw3d(
        surface_hide = true,
        line_width   = 3,
        color = red,
        mesh([[0,0,0], [0,1,0]],
             [[2,0,2], [2,2,2]]),
        color = blue,
        mesh([[0,0,2], [0,1,2]],
             [[2,0,4], [2,2,4]])) $

figures/draw_mesh3

Categories:  Package draw

グラフィックオブジェクト: parametric  
    parametric (xfun,yfun,par,parmin,parmax)  
    parametric (xfun,yfun,zfun,par,parmin,parmax)

2Dおよび 3Dにてパラメトリック関数を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: nticks, line_width, line_type, key, color, enhanced3d.

2D

コマンド parametric(xfun, yfun, par, parmin, parmax)parminから parmaxまで値を取るパラメータ parを伴う パラメトリック関数 [xfun, yfun]をプロットします。

例:

 
(%i1) draw2d(explicit(exp(x),x,-1,3),
             color = red,
             key   = "This is the parametric one!!",
             parametric(2*cos(rrr),rrr^2,rrr,0,2*%pi))$

figures/draw_parametric

3D

parametric (xfun, yfun, zfun, par, parmin, parmax)parminから parmaxまで値を取るパラメータ parを伴うパラメトリック曲線 [xfun, yfun, zfun]をプロットします。

例:

 
(%i1) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
             color = royalblue,
             parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2),
             color      = turquoise,
             line_width = 2,
             parametric(t^2,sin(t),2+t,t,0,2),
             surface_hide = true,
             title = "Surface & curves" )$

figures/draw_parametric2

Categories:  Package draw

グラフィックオブジェクト: parametric_surface (xfun, yfun, zfun, par1, par1min, par1max, par2, par2min, par2max)

3Dにおいてパラメトリックな表面を描画します。

3D

コマンド parametric_surface (xfun, yfun, zfun, par1, par1min, par1max, par2, par2min, par2max)par1minから par1maxまでを値として取るパラメータ par1par2minから par2maxまでを値として取るパラメータ par2を伴う パラメトリックな表面 [xfun, yfun, zfun]をプロットします。

このオブジェクトは以下のグラフィックオプションの影響を受けます: xu_grid, yv_grid, line_type, line_width, key, wired_surface, enhanced3d, color

例:

 
(%i1) draw3d(title          = "Sea shell",
             xu_grid        = 100,
             yv_grid        = 25,
             view           = [100,20],
             surface_hide   = true,
             parametric_surface(0.5*u*cos(u)*(cos(v)+1),
                           0.5*u*sin(u)*(cos(v)+1),
                           u*sin(v) - ((u+3)/8*%pi)^2 - 20,
                           u, 0, 13*%pi, v, -%pi, %pi) )$

figures/draw_parametric3

Categories:  Package draw

グラフィックオブジェクト: points  
    points ([[x1,y1], [x2,y2],...])  
    points ([x1,x2,...], [y1,y2,...])  
    points ([y1,y2,...])  
    points ([[x1,y1,z1], [x2,y2,z2],...])  
    points ([x1,x2,...], [y1,y2,...], [z1,z2,...])  
    points (matrix)  
    points (1d_y_array)  
    points (1d_x_array, 1d_y_array)  
    points (1d_x_array, 1d_y_array, 1d_z_array)  
    points (2d_xy_array)  
    points (2d_xyz_array)

2Dや 3Dの中で点を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: point_size, point_type, points_joined, line_width, key, line_type, color. 3Dモードでは enhanced3dの影響も受けます。

2D

points ([[x1,y1], [x2,y2],...])points ([x1,x2,...], [y1,y2,...])は 点 [x1,y1], [x2,y2],などをプロットします。 もし横座標が与えられないなら、それらは連続する正の整数に設定されます。 だから、points ([y1,y2,...])は点 [1,y1], [2,y2]などを描画します。 もし matrixが2列または2行行列なら、 points (matrix)は関連した点を描画します。 もし matrixが 1列または 1行行列なら、横座標が自動的に割り当てられます。

もし 1d_y_arrayが数の 1Dの lisp配列なら、 points (1d_y_array)は 横座標を連続する正の整数に設定してそれらをプロットします。 points (1d_x_array, 1d_y_array)は 引数として渡された 2つの配列から取られた座標を持つ点をプロットします。 もし 2d_xy_arrayが 2列の 2D配列なら、 points (2d_xy_array)は平面上に対応する点をプロットします。

例:

pointsへの2種類の引数、ペアのリストと分離した座標の2つのリスト。

 
(%i1) draw2d(
        key = "Small points",
        points(makelist([random(20),random(50)],k,1,10)),
        point_type    = circle,
        point_size    = 3,
        points_joined = true,
        key           = "Great points",
        points(makelist(k,k,1,20),makelist(random(30),k,1,20)),
        point_type    = filled_down_triangle,
        key           = "Automatic abscissas",
        color         = red,
        points([2,12,8]))$

figures/draw_points

衝撃を描画。

 
(%i1) draw2d(
        points_joined = impulses,
        line_width    = 2,
        color         = red,
        points(makelist([random(20),random(50)],k,1,10)))$

figures/draw_points2

座標の配列。

 
(%i1) a: make_array (flonum, 100) $
(%i2) for i:0 thru 99 do a[i]: random(1.0) $
(%i3) draw2d(points(a)) $

figures/draw_points3

分離した座標の 2つの配列。

 
(%i1) x: make_array (flonum, 100) $
(%i2) y: make_array (fixnum, 100) $
(%i3) for i:0 thru 99 do (
        x[i]: float(i/100),
        y[i]: random(10) ) $
(%i4) draw2d(points(x, y)) $

figures/draw_points4

2列 2D配列。

 
(%i1) xy: make_array(flonum, 100, 2) $
(%i2) for i:0 thru 99 do (
        xy[i, 0]: float(i/100),
        xy[i, 1]: random(10) ) $
(%i3) draw2d(points(xy)) $

figures/draw_points5

関数 read_arrayで埋められた配列の描画。

 
(%i1) a: make_array(flonum,100) $
(%i2) read_array (file_search ("pidigits.data"), a) $
(%i3) draw2d(points(a)) $

3D

points([[x1, y1, z1], [x2, y2, z2], ...])points([x1, x2, ...], [y1, y2, ...], [z1, z2, ...])は 点 [x1, y1, z1], [x2, y2, z2]などをプロットします。 もし matrixが 3列または 3行行列なら、 points (matrix)は関連した点を描画します。

引数が lisp配列の時、 points (1d_x_array, 1d_y_array, 1d_z_array)は 3つの 1D配列から座標を取ります。 もし 2d_xyz_arrayが 3列または 3行を持つ 2D配列なら、 points (2d_xyz_array)は対応する点をプロットします。

例:

3次元のサンプル1つ、

 
(%i1) load ("numericalio")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) draw3d(title = "Daily average wind speeds",
             point_size = 2,
             points(args(submatrix (s2, 4, 5))) )$

3次元のサンプル2つ、

 
(%i1) load ("numericalio")$
(%i2) s2 : read_matrix (file_search ("wind.data"))$
(%i3) draw3d(
         title = "Daily average wind speeds. Two data sets",
         point_size = 2,
         key        = "Sample from stations 1, 2 and 3",
         points(args(submatrix (s2, 4, 5))),
         point_type = 4,
         key        = "Sample from stations 1, 4 and 5",
         points(args(submatrix (s2, 2, 3))) )$

1次元配列、

 
(%i1) x: make_array (fixnum, 10) $
(%i2) y: make_array (fixnum, 10) $
(%i3) z: make_array (fixnum, 10) $
(%i4) for i:0 thru 9 do (
        x[i]: random(10),
        y[i]: random(10),
        z[i]: random(10) ) $
(%i5) draw3d(points(x,y,z)) $

figures/draw_points6

2次元色付け配列、

 
(%i1) xyz: make_array(fixnum, 10, 3) $
(%i2) for i:0 thru 9 do (
        xyz[i, 0]: random(10),
        xyz[i, 1]: random(10),
        xyz[i, 2]: random(10) ) $
(%i3) draw3d(
         enhanced3d = true,
         points_joined = true,
         points(xyz)) $

figures/draw_points7

ユーザーが明示的に指定した色数。

 
(%i1) pts: makelist([t,t^2,cos(t)], t, 0, 15)$
(%i2) col_num: makelist(k, k, 1, length(pts))$
(%i3) draw3d(
        enhanced3d = ['part(col_num,k),k],
        point_size = 3,
        point_type = filled_circle,
        points(pts))$

figures/draw_points8

Categories:  Package draw

グラフィックオブジェクト: polar (radius,ang,minang,maxang)

極座標で定義された2D関数を描画します。

2D

polar (radius,ang,minang,maxang)minangから maxangまで値を取る変数 angを伴う極座標で定義された関数 radius(ang)をプロットします。

このオブジェクトは以下のグラフィックオプションの影響を受けます: nticks, line_width, line_type, key, color.

例:

 
(%i1) draw2d(user_preamble = "set grid polar",
             nticks        = 200,
             xrange        = [-5,5],
             yrange        = [-5,5],
             color         = blue,
             line_width    = 3,
             title         = "Hyperbolic Spiral",
             polar(10/theta,theta,1,10*%pi) )$

figures/draw_polar

Categories:  Package draw

グラフィックオブジェクト: polygon  
    polygon ([[x1, y1], [x2, y2], …])  
    polygon ([x1, x2, …], [y1, y2, …])

2D内でポリゴンを描画します。

2D

コマンド polygon ([[x1, y1], [x2, y2],...])polygon ([x1, x2,...], [y1, y2,...])は 頂点 [x1, y1], [x2, y2]などを持つポリゴンを 平面上にプロットします。

このオブジェクトは以下のグラフィックオプションの影響を受けます: transparent, fill_color, border, line_width, key, line_type, color.

例:

 
(%i1) draw2d(color      = "#e245f0",
             line_width = 8,
             polygon([[3,2],[7,2],[5,5]]),
             border      = false,
             fill_color  = yellow,
             polygon([[5,2],[9,2],[7,5]]) )$

figures/draw_polygon

Categories:  Package draw

グラフィックオブジェクト: quadrilateral (point_1, point_2, point_3, point_4)

四辺形を描画します。

2D

quadrilateral ([x1, y1], [x2, y2], [x3, y3], [x4, y4])は 頂点 [x1, y1], [x2, y2], [x3, y3], [x4, y4]を持つ四辺形を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます:
transparent, fill_color, border, line_width, key, xaxis_secondary, yaxis_secondary, line_type, transform, color.

例:

 
(%i1) draw2d(
        quadrilateral([1,1],[2,2],[3,-1],[2,-2]))$

figures/draw_quadrilateral

3D

quadrilateral([x1, y1, z1], [x2, y2, z2], [x3, y3, z3], [x4, y4, z4])は 頂点 [x1, y1, z1], [x2, y2, z2], [x3, y3, z3], [x4, y4, z4]を持つ四辺形を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: line_type, line_width, color, key, enhanced3d, transform.

Categories:  Package draw

グラフィックオブジェクト: rectangle ([x1,y1], [x2,y2])

2D内で長方形を描画します。

2D

rectangle ([x1,y1], [x2,y2])は、対角頂点 [x1,y1][x2,y2]を持つ長方形を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: transparent, fill_color, border, line_width, key, line_type, color.

例:

 
(%i1) draw2d(fill_color  = red,
             line_width  = 6,
             line_type   = dots,
             transparent = false,
             fill_color  = blue,
             rectangle([-2,-2],[8,-1]), /* opposite vertices */
             transparent = true,
             line_type   = solid,
             line_width  = 1,
             rectangle([9,4],[2,-1.5]),
             xrange      = [-3,10],
             yrange      = [-3,4.5] )$

figures/draw_rectangle

Categories:  Package draw

グラフィックオブジェクト: region (expr,var1,minval1,maxval1,var2,minval2,maxval2)

平面上に不等式で定義された領域を描画します。

2D exprは不等式とブーリアン演算子 and, or, notで形成された式です。 領域は [minval1, maxval1][minval2, maxval2]で定義された長方形で区切られています。

このオブジェクトは以下のグラフィックオプションの影響を受けます: fill_color, key, x_voxel, y_voxel.

例:

 
(%i1) load(draw)$
(%i2) draw2d(
        x_voxel = 30,
        y_voxel = 30,
        region(x^2+y^2<1 and x^2+y^2 > 1/2,
               x, -1.5, 1.5, y, -1.5, 1.5));

グラフィックオブジェクト: spherical (radius, azi, minazi, maxazi, zen, minzen, maxzen)

球座標で定義された3D関数を描画します。

3D

spherical(radius, azi, minazi, maxazi, zen, minzen, maxzen)minaziから maxaziまで値を取る 方位角 aziminzenから maxzenまで値を取る 天頂角 zenを伴う球座標で定義された関数 radius(azi, zen)を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: xu_grid, yv_grid, line_type, key, wired_surface, enhanced3d, color

例:

 
(%i1) draw3d(spherical(1,a,0,2*%pi,z,0,%pi))$

figures/draw_spherical

Categories:  Package draw

グラフィックオブジェクト: triangle (point_1, point_2, point_3)

三角形を描画します。

2D

triangle ([x1,y1], [x2,y2], [x3,y3])は、頂点 [x1,y1], [x2,y2], [x3,y3]を持つ三角形を描画します。

このオブジェクトは以下のグラフィックオプションに影響されます:
transparent, fill_color, border, line_width, key, xaxis_secondary, yaxis_secondary, line_type, transform, color.

例:

 
(%i1) draw2d(
        triangle([1,1],[2,2],[3,-1]))$

figures/draw_triangle

3D

triangle ([x1,y1,z1], [x2,y2,z2], [x3,y3,z3])は頂点 [x1,y1,z1], [x2,y2,z2], [x3,y3,z3]を持つ三角形を描画します。

このオブジェクトは以下のグラフィックオプションに影響されます: line_type, line_width, color, key, enhanced3d, transform.

Categories:  Package draw

グラフィックオブジェクト: tube (xfun,yfun,zfun,rfun,p,pmin,pmax)

3Dにおいて径が変化する管を描画します。

3D

[xfun,yfun,zfun]pminから pmaxまで値を取るパラメータ pを伴うパラメトリックな曲線です。 パラメトリックな曲線上に中心を持ち、曲線と垂直な半径 rfunの円が置かれます。

このオブジェクトは以下のグラフィックオプションの影響を受けます: xu_grid, yv_grid, line_type, line_width, key, wired_surface, color, capping

例:

 
(%i1) draw3d(
        enhanced3d = true,
        xu_grid = 50,
        tube(cos(a), a, 0, cos(a/10)^2,
             a, 0, 4*%pi) )$

figures/draw_tube

Categories:  Package draw

グラフィックオブジェクト: vector  
    vector ([x,y], [dx,dy])  
    vector ([x,y,z], [dx,dy,dz])

2Dおよび 3D内でベクトルを描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: head_both, head_length, head_angle, head_type, line_width, line_type, key, color.

2D

vector([x,y], [dx,dy])[x,y]を原点とするベクトル[dx,dy]を プロットします。

例:

 
(%i1) draw2d(xrange      = [0,12],
             yrange      = [0,10],
             head_length = 1,
             vector([0,1],[5,5]), /* default type */
             head_type = 'empty,
             vector([3,1],[5,5]),
             head_both = true,
             head_type = 'nofilled,
             line_type = dots,
             vector([6,1],[5,5]))$

figures/draw_vector

3D

vector([x,y,z], [dx,dy,dz])[x,y,z]を原点とするベクトル [dx,dy,dz]をプロットします。

例:

 
(%i1) draw3d(color = cyan,
             vector([0,0,0],[1,1,1]/sqrt(3)),
             vector([0,0,0],[1,-1,0]/sqrt(2)),
             vector([0,0,0],[1,1,-2]/sqrt(6)) )$

figures/draw_vector2

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.3 Functions and Variables for pictures

関数: get_pixel (pic,x,y)

ピクチャからピクセルを返します。 座標 xyは 0からそれぞれ width-1height-1までの範囲を取ります。

Categories:  Package draw

関数: make_level_picture  
    make_level_picture (data)  
    make_level_picture (data,width,height)

レベル pictureオブジェクトを返します。 make_level_picture (data)は行列 dataから pictureオブジェクトを作ります。 make_level_picture (data,width,height)は 数のリストからオブジェクトを作ります; この場合、 widthheight両方を与えなければいけません。

返された pictureオブジェクトは以下の4つの部分を含みます:

  1. シンボル level
  2. イメージの幅
  3. イメージの高さ
  4. 0から 255までの範囲のピクセルデータを持つ整数配列 引数 dataは 0から 255までの数のみを含まなければいけません; 負の数は 0に置き換えられ、 255よりも大きな数は 255に設定されます。

例:

行列からのレベルピクチャ。

 
(%i1) make_level_picture(matrix([3,2,5],[7,-9,3000]));
(%o1)         picture(level, 3, 2, {Array:  #(3 2 5 7 0 255)})

数値リストからのレベルピクチャ

 
(%i1) make_level_picture([-2,0,54,%pi],2,2);
(%o1)            picture(level, 2, 2, {Array:  #(0 0 54 3)})

Categories:  Package draw

関数: make_rgb_picture (redlevel,greenlevel,bluelevel)

rgb色付けされた pictureオブジェクトを返します。 3つ引数すべては赤、緑、青のレベルを持つレベルピクチャでなければいけません;

戻り値の pictureオブジェクトは以下の4つの部分を含みます:

  1. シンボル rgb
  2. イメージの幅
  3. イメージの高さ
  4. 0から 255までの範囲のピクセルデータを持つ長さ 3*width*heightの整数配列。 それぞれのピクセルは。3つの連続する数 (赤、緑、青)で表現されます。

例:

 
(%i1) red: make_level_picture(matrix([3,2],[7,260]));
(%o1)           picture(level, 2, 2, {Array:  #(3 2 7 255)})
(%i2) green: make_level_picture(matrix([54,23],[73,-9]));
(%o2)           picture(level, 2, 2, {Array:  #(54 23 73 0)})
(%i3) blue: make_level_picture(matrix([123,82],[45,32.5698]));
(%o3)          picture(level, 2, 2, {Array:  #(123 82 45 33)})
(%i4) make_rgb_picture(red,green,blue);
(%o4) picture(rgb, 2, 2,
              {Array:  #(3 54 123 2 23 82 7 73 45 255 0 33)})

Categories:  Package draw

関数: negative_picture (pic)

(levelまたはrgb)ピクチャの反転を返します。

Categories:  Package draw

関数: picture_equalp (x,y)

等しいピクチャの場合 trueを、そうでないなら falseを返します。

Categories:  Package draw · Predicate functions

関数: picturep (x)

もし引数が適正なイメージならtrueを、そうでないなら falseを返します。

Categories:  Package draw · Predicate functions

関数: read_xpm (xpm_file)

xpm形式のファイルを読み、ピクチャオブジェクトを返します。

Categories:  Package draw

関数: rgb2level (pic)

rgbピクチャを赤、緑、青チャンネルを平均することで levelの1つに変換します。

Categories:  Package draw

関数: take_channel (im,color)

もし引数 colorred, greenまたは blueなら、関数 take_channelはピクチャ imの対応する色チャンネルを返します。 例:

 
(%i1) red: make_level_picture(matrix([3,2],[7,260]));
(%o1)           picture(level, 2, 2, {Array:  #(3 2 7 255)})
(%i2) green: make_level_picture(matrix([54,23],[73,-9]));
(%o2)           picture(level, 2, 2, {Array:  #(54 23 73 0)})
(%i3) blue: make_level_picture(matrix([123,82],[45,32.5698]));
(%o3)          picture(level, 2, 2, {Array:  #(123 82 45 33)})
(%i4) make_rgb_picture(red,green,blue);
(%o4) picture(rgb, 2, 2,
              {Array:  #(3 54 123 2 23 82 7 73 45 255 0 33)})
(%i5) take_channel(%,'green);  /* simple quote!!! */
(%o5)           picture(level, 2, 2, {Array:  #(54 23 73 0)})

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.4 Functions and Variables for worldmap

このパッケージは自動的にパッケージ drawをロードします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.4.1 Variable and Functions

グローバル変数: boundaries_array

デフォルト値: false

boundaries_arrayはグラフィックオプション geomapが境界座標を探すところです。

boundaries_arrayのそれぞれの成分は浮動小数点量の配列であり、 多角形のセグメントかマップ境界の座標です。

geomapも参照してください。

Categories:  Package draw

関数: numbered_boundaries (nlist)

その数 (boundaries_array座標)でラベルされた多角形セグメント(境界)のリストを 描画します。 これは新しい地理的なものを作る時に非常に役立ちます。

例:

boundaries_array内の成分数で境界をラベルされたヨーロッパの地図

 
(%i1) load(worldmap)$
(%i2) european_borders:
           region_boundaries(-31.81,74.92,49.84,32.06)$
(%i3) numbered_boundaries(european_borders)$

Categories:  Package draw

関数: make_poly_continent  
    make_poly_continent (continent_name)  
    make_poly_continent (country_list)

色付けられた大陸や国のリストを描画するのに必要なポリゴンを作ります。

例:

 
(%i1) load(worldmap)$
(%i2) /* A continent */
      make_poly_continent(Africa)$
(%i3) apply(draw2d, %)$

figures/worldmap_make_poly_continent

 
(%i4) /* A list of countries */
      make_poly_continent([Germany,Denmark,Poland])$
(%i5) apply(draw2d, %)$

figures/worldmap_make_poly_continent2

Categories:  Package draw

関数: make_poly_country (country_name)

色付けられた国を描画するのに必要なポリゴンを作ります。 もし島が存在するなら、 1つの国は複数のポリゴンで定義されることがあります。

例:

 
(%i1) load(worldmap)$
(%i2) make_poly_country(India)$
(%i3) apply(draw2d, %)$

figures/worldmap_make_poly_country

Categories:  Package draw

関数: make_polygon (nlist)

境界添字から polygonオブジェクトを返します。 引数 nlistboundaries_arrayの成分のリストです。

例:

ブータンは境界番号 171, 173, 1143で定義されます。 だから、 make_polygon([171,173,1143])は座標 boundaries_array[171], boundaries_array[173], boundaries_array[1143]の配列を付加し、 drawでプロットされるのに適した polygonオブジェクトを返します. エラーメッセージを避けるには、任意の連続する配列が端で共通の 2つの座標を持つという意味で配列は互換性がなければいけません。 この例では、 boundaries_array[171]の最初の 2つの成分は boundaries_array[173]の最後の 2つの座標と等しく、 boundaries_array[173]の最初の 2つは boundaries_array[1143]の最初の 2つに等しいです; 結論として、境界番号 171, 173, 1143は (この順で)互換性があり、色付けられたポリゴンは描画できます。

 
(%i1) load(worldmap)$
(%i2) Bhutan;
(%o2)                        [[171, 173, 1143]]
(%i3) boundaries_array[171];
(%o3) {Array:
       #(88.750549 27.14727 88.806351 27.25305 88.901367 27.282221
         88.917877 27.321039)}
(%i4) boundaries_array[173];
(%o4) {Array:
       #(91.659554 27.76511 91.6008 27.66666 91.598022 27.62499
         91.631348 27.536381 91.765533 27.45694 91.775253 27.4161
         92.007751 27.471939 92.11441 27.28583 92.015259 27.168051
         92.015533 27.08083 92.083313 27.02277 92.112183 26.920271
         92.069977 26.86194 91.997192 26.85194 91.915253 26.893881
         91.916924 26.85416 91.8358 26.863331 91.712479 26.799999
         91.542191 26.80444 91.492188 26.87472 91.418854 26.873329
         91.371353 26.800831 91.307457 26.778049 90.682457 26.77417
         90.392197 26.903601 90.344131 26.894159 90.143044 26.75333
         89.98996 26.73583 89.841919 26.70138 89.618301 26.72694
         89.636093 26.771111 89.360786 26.859989 89.22081 26.81472
         89.110237 26.829161 88.921631 26.98777 88.873016 26.95499
         88.867737 27.080549 88.843307 27.108601 88.750549
         27.14727)}
(%i5) boundaries_array[1143];
(%o5) {Array:
       #(91.659554 27.76511 91.666924 27.88888 91.65831 27.94805
         91.338028 28.05249 91.314972 28.096661 91.108856 27.971109
         91.015808 27.97777 90.896927 28.05055 90.382462 28.07972
         90.396088 28.23555 90.366074 28.257771 89.996353 28.32333
         89.83165 28.24888 89.58609 28.139999 89.35997 27.87166
         89.225517 27.795 89.125793 27.56749 88.971077 27.47361
         88.917877 27.321039)}
(%i6) Bhutan_polygon: make_polygon([171,173,1143])$
(%i7) draw2d(Bhutan_polygon)$

figures/worldmap_make_polygon

Categories:  Package draw

関数: region_boundaries (x1,y1,x2,y2)

頂点 (x1,y1) -左上- と (x2,y2) -右下-の長方形に完全に含まれるグローバル変数 boundaries_arrayの多角形セグメント検出します。

例:

南イタリアをプロットするためのセグメントの数を返します。

 
(%i1) load(worldmap)$
(%i2) region_boundaries(10.4,41.5,20.7,35.4);
(%o2)                [1846, 1863, 1864, 1881, 1888, 1894]
(%i3) draw2d(geomap(%))$

figures/worldmap_region_boundaries

Categories:  Package draw

関数: region_boundaries_plus (x1,y1,x2,y2)

頂点 (x1,y1) -左上- と (x2,y2) -右下-で定義された長方形に少なくとも1つ頂点を含まれる グローバル変数 boundaries_arrayの多角形セグメント検出します。 多角形セグメント検出します。

例:

 
(%i1) load(worldmap)$
(%i2) region_boundaries_plus(10.4,41.5,20.7,35.4);
(%o2) [1060, 1062, 1076, 1835, 1839, 1844, 1846, 1858,
       1861, 1863, 1864, 1871, 1881, 1888, 1894, 1897]
(%i3) draw2d(geomap(%))$

figures/worldmap_region_boundaries_plus

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.4.2 Graphic objects

グラフィックオブジェクト: geomap  
    geomap (numlist)  
    geomap (numlist,3Dprojection)

2Dと 3Dに関して地図を描画します。

2D

この関数はグローバル変数 boundaries_arrayと一緒に機能します。

引数 numlistは数や数のリストを含むリストです。 これらすべての数は、グローバル配列 boundaries_arrayの成分を表す 0以上の整数でなければいけません。

boundaries_arrayのそれぞれの成分は浮動小数点量の配列であり、 多角形セグメントやマップ境界の座標です。

geomap (numlist)は引数を平坦化し、 boundaries_arrayの中に関連した境界を描画します。

このオブジェクトは以下のグラフィックオプションの影響を受けます: line_width, line_type, color.

例:

手で定義された簡単な地図:

 
(%i1) load(draw)$
(%i2) /* Vertices of boundary #0: {(1,1),(2,5),(4,3)} */
   ( bnd0: make_array(flonum,6),
     bnd0[0]:1.0, bnd0[1]:1.0, bnd0[2]:2.0,
     bnd0[3]:5.0, bnd0[4]:4.0, bnd0[5]:3.0 )$
(%i3) /* Vertices of boundary #1: {(4,3),(5,4),(6,4),(5,1)} */
   ( bnd1: make_array(flonum,8),
     bnd1[0]:4.0, bnd1[1]:3.0, bnd1[2]:5.0, bnd1[3]:4.0,
     bnd1[4]:6.0, bnd1[5]:4.0, bnd1[6]:5.0, bnd1[7]:1.0)$
(%i4) /* Vertices of boundary #2: {(5,1), (3,0), (1,1)} */
   ( bnd2: make_array(flonum,6),
     bnd2[0]:5.0, bnd2[1]:1.0, bnd2[2]:3.0,
     bnd2[3]:0.0, bnd2[4]:1.0, bnd2[5]:1.0 )$
(%i5) /* Vertices of boundary #3: {(1,1), (4,3)} */
   ( bnd3: make_array(flonum,4),
     bnd3[0]:1.0, bnd3[1]:1.0, bnd3[2]:4.0, bnd3[3]:3.0)$
(%i6) /* Vertices of boundary #4: {(4,3), (5,1)} */
   ( bnd4: make_array(flonum,4),
     bnd4[0]:4.0, bnd4[1]:3.0, bnd4[2]:5.0, bnd4[3]:1.0)$
(%i7) /* Pack all together in boundaries_array */
   ( boundaries_array: make_array(any,5),
     boundaries_array[0]: bnd0, boundaries_array[1]: bnd1,
     boundaries_array[2]: bnd2, boundaries_array[3]: bnd3,
     boundaries_array[4]: bnd4 )$
(%i8) draw2d(geomap([0,1,2,3,4]))$

figures/worldmap_geomap

補助バッケージ worldmapはグローバル変数 boundaries_arrayを(経度、緯度)座標で実世界境界に設定します。 これらのデータはパブリックドメインであり、 https://web.archive.org/web/20100310124019/http://www-cger.nies.go.jp/grid-e/gridtxt/grid19.html に由来するものです。

パッケージ worldmapは、国、大陸、海岸線の境界も boundaries_arrayの必要な成分を持つリストとして、 定義します。 (更に知るにはファイル share/draw/worldmap.macを参照してください) パッケージ drawは自動的に worldmapをロードしません。

 
(%i1) load(worldmap)$
(%i2) c1: gr2d(geomap([Canada,United_States,
                       Mexico,Cuba]))$
(%i3) c2: gr2d(geomap(Africa))$
(%i4) c3: gr2d(geomap([Oceania,China,Japan]))$
(%i5) c4: gr2d(geomap([France,Portugal,Spain,
                       Morocco,Western_Sahara]))$
(%i6) draw(columns  = 2,
           c1,c2,c3,c4)$

figures/worldmap_geomap2

パッケージ worldmapは国をポリゴンとしてプロットする時にも役に立ちます。 この場合、グラフィックオブジェクト geomapはもはや必要でなく、代わりに polygonオブジェクトが使われます。 配列ではなくリストが現在使われているので、地図レンダリングはより遅いでしょう。 以下のコードを理解するためには、 make_poly_countrymake_poly_continentも参照してください。

 
(%i1) load(worldmap)$
(%i2) mymap: append(
   [color      = white],  /* borders are white */
   [fill_color = red],             make_poly_country(Bolivia),
   [fill_color = cyan],            make_poly_country(Paraguay),
   [fill_color = green],           make_poly_country(Colombia),
   [fill_color = blue],            make_poly_country(Chile),
   [fill_color = "#23ab0f"],       make_poly_country(Brazil),
   [fill_color = goldenrod],       make_poly_country(Argentina),
   [fill_color = "midnight-blue"], make_poly_country(Uruguay))$
(%i3) apply(draw2d, mymap)$

figures/worldmap_geomap3

3D

geomap (numlist)は地図境界を中心が (0,0,0)で半径 1の球上に射影します。 geomap (numlist,3Dprojection)を使うことで、 球や射影タイプを変えることが可能です。

利用可能な 3D射影:

更に丹念な例を見るには、 http://riotorto.users.sf.net/gnuplot/geomap も参照してください。

Categories:  Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53. drawdf


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.1 Introduction to drawdf

関数 drawdfは一階常微分方程式 (ODE)や二連立自律一階 ODE系の方向場を描画します。

これは追加パッケージなので、利用するには、最初に load(drawdf)でロードしなければいけません。 Drawdfは drawパッケージ上に構築されています。これは Gnuplot 4.2を要求します。

単一の ODEの方向場をプロットするには、 ODEを以下の形式で書かなければいけません:

 
       dy
       -- = F(x,y)
       dx

そして関数 Fdrawdfの引数に与えなければいけません。 もし独立変数と従属変数が、上の式のように xyでないなら、 drawdfコマンドへの引数として与えられるリストの中に明示的にそれら 2つの変数を指名しなければいけません。 (例を見てください。)

2つの自律 ODEの組の方向場をプロットするには、それらを以下の形式で書かなければいけません。

 
       dx             dy
       -- = G(x,y)    -- = F(x,y)
       dt             dt

そして drawdfの引数は 2つの関数 GFをその順に持つリストでなければいけません; すなわち、リストの最初の式は水平軸上に表された変数の時間導関数であり、 二番目の式は垂直軸上に表された変数の時間導関数です。 それら 2つの変数は xyである必要はありませんが、 もしそうでないなら、 drawdfに与えられる二番目の引数は 2つの変数を、最初のものが水平軸上のものを、その後が垂直軸上のものを 指定する別のリストでなければいけません。

もしただ 1つの ODEが与えられるなら、 drawdfは暗に x=t,G(x,y)=1と認め、 非自律方程式を2つの自律方程式系に変換します。

Categories:  Differential equations · Plotting Share packages · Package drawdf Package draw


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2 Functions and Variables for drawdf


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2.1 Functions

関数: drawdf  
    drawdf (dydx, ...options and objects...)  
    drawdf (dvdu, [u,v], ...options and objects...)  
    drawdf (dvdu, [u,umin,umax], [v,vmin,vmax], ...options and objects...)  
    drawdf ([dxdt,dydt], ...options and objects...)  
    drawdf ([dudt,dvdt], [u,v], ...options and objects...)  
    drawdf ([dudt,dvdt], [u,umin,umax], [v,vmin,vmax], ...options and objects...)

関数 drawdfは、 オプションの解曲線や drawパッケージを使う他のグラフィックスと一緒に 2D方向場を描きます。

最初の引数は導関数を指定し、式か 2つの式のリストでなければいけません。 dydx, dxdt, dydtxyに依存する式です。 dvdu, dudt, dvdtuvに依存する式です。

もし独立変数と従属変数が xyでないなら、 それらの名前を、導関数に続いてすぐに、 2つの名前のリスト [u,v]のとしてか、形式 [u,umin,umax][v,vmin,vmax]の 2つのリストとしてのいずれかのように,指定しなければいけません。

残りの引数はグラフィックオプショングラフィックオブジェクト, 任意の深さで入れ子になったグラフィックオプションやオブジェクトを含むリストです。 drawdfがサポートするグラフィックオプションとオブジェクトの集合は drawパッケージの draw2dgr2dがサポートするもの上位集合です。

引数は順次解釈されます: グラフィックオプションは続くグラフィックオブジェクトすべてに影響します。 更に、グラフィックオブジェクトは指定された順にキャンバス上に描かれ、 先に描かれたグラフィックスを見えなくするかもしれません。 いくつかのグラフィックオプションはシーンのグローバルな外観に影響します。

drawdfがサポートする追加のグラフィックオブジェクトは以下を含みます: solns_at, points_at, saddles_at, soln_at, point_at, saddle_at.

drawdfがサポートする追加のグラフィックオプションは以下を含みます: field_degree, soln_arrows, field_arrows, field_grid, field_color, show_field, tstep, nsteps, duration, direction, field_tstep, field_nsteps, field_duration.

drawパッケージから受け継がれた、共通に使われるグラフィックオブジェクトは 以下を含みます: explicit, implicit, parametric, polygon, points, vector, label, draw2dgr2dがサポートする他のすべてのもの。

drawパッケージから受け継がれた、共通に使われるグラフィックオプションは 以下を含みます:
points_joined, color, point_type, point_size, line_width, line_type, key, title, xlabel, ylabel, user_preamble, terminal, dimensions, file_name, draw2dgr2dがサポートする他のすべてのもの。

draw2dも参照してください。

wxMaximaや Imaximaのユーザーは wxdrawdfを代わりに使うかもしれません。 それは、グラフィックスが wxdrawを使うノートブック内で描かれることを除いて、 drawdfと同一です。

この関数を利用するには、最初に load(drawdf)と書いてください。

例:

 
(%i1) load(drawdf)$
(%i2) drawdf(exp(-x)+y)$        /* default vars: x,y */
(%i3) drawdf(exp(-t)+y, [t,y])$ /* default range: [-10,10] */
(%i4) drawdf([y,-9*sin(x)-y/5], [x,1,5], [y,-2,2])$

下位互換のために、 drawdfは plotdfがサポートしたパラメータのほとんどを受け付けます。

 
(%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
             [trajectory_at,0,0])$

soln_atsolns_atは、少し強化された 4次の Runge Kutta数値積分器を使って、指定された点を通る解曲線を描きます。

 
(%i6) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
             solns_at([0,0.1],[0,-0.1]),
             color=blue, soln_at(0,0))$

field_degree=2とすると、それぞれのグリッド点での 1次と 2次の導関数に基づいて、場を二次のスプラインで構成します。 field_grid=[COLS,ROWS]はグリッドの列と行の数を指定します。

 
(%i7) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
             field_degree=2, field_grid=[20,15],
             solns_at([0,0.1],[0,-0.1]),
             color=blue, soln_at(0,0))$

soln_arrows=trueは解曲線に矢印を加え、 (デフォルトでは)方向場からそれらを削除します。 また、解曲線を強調するようにデフォルトの色を変えます。

 
(%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
             soln_arrows=true,
             solns_at([0,0.1],[0,-0.1],[0,0]))$

duration=40は数値積分の時間間隔を指定します(デフォルトは 10))。 もし解がプロット領域から遠くに移動し過ぎたり、 導関数が複素数や無限大になったりしても、積分は自動的に停止します。 ここでも field_degree=2を指定して二次スプラインをプロットします。 以下の方程式は捕食者-被食者系をモデル化します。

 
(%i9) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
             field_degree=2, duration=40,
             soln_arrows=true, point_at(1/2,1/2),
             solns_at([0.1,0.2], [0.2,0.1], [1,0.8], [0.8,1],
                      [0.1,0.1], [0.6,0.05], [0.05,0.4],
                      [1,0.01], [0.01,0.75]))$

field_degree='solnsとすると、場は、 4次の Runge Kuttaで計算された多くの小さな解曲線で構成され、この場合、より良い結果をもたらします。

 
(%i10) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
              field_degree='solns, duration=40,
              soln_arrows=true, point_at(1/2,1/2),
              solns_at([0.1,0.2], [0.2,0.1], [1,0.8],
                       [0.8,1], [0.1,0.1], [0.6,0.05],
                       [0.05,0.4], [1,0.01], [0.01,0.75]))$

saddles_atは自動的にそれぞれの鞍部で方程式を線形化しようとし、 セパラトリクスを含む、それぞれの固有ベクトルに対応した数値解をプロットしようとします。 tstep=0.05は数値積分器の最大時間ステップを指定します(デフォルトは 0.1)。 xと yのステップを小さく保つために、小さ目の時間ステップが時々使われます。 以下の方程式は減衰振り子をモデル化します。

 
(%i11) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
              soln_arrows=true, point_size=0.5,
              points_at([0,0], [2*%pi,0], [-2*%pi,0]),
              field_degree='solns,
              saddles_at([%pi,0], [-%pi,0]))$

show_field=falseは場を完全に抑制します。

 
(%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
              show_field=false, soln_arrows=true,
              point_size=0.5,
              points_at([0,0], [2*%pi,0], [-2*%pi,0]),
              saddles_at([3*%pi,0], [-3*%pi,0],
                         [%pi,0], [-%pi,0]))$

drawdfは認識しないパラメータすべてを draw2dgr2dに渡します。 なので、 drawパッケージのフルパワーを drawdfと組み合わせられます。

 
(%i13) drawdf(x^2+y^2, [x,-2,2], [y,-2,2], field_color=gray,
              key="soln 1", color=black, soln_at(0,0),
              key="soln 2", color=red, soln_at(0,1),
              key="isocline", color=green, line_width=2,
              nticks=100, parametric(cos(t),sin(t),t,0,2*%pi))$

drawdfはグラフィクオプションやオブジェクトの入れ子のリストを受け付けます。 なので、 makelistやグラフィックスを生成する他の関数コールの便利な使用が可能です。

 
(%i14) colors : ['red,'blue,'purple,'orange,'green]$
(%i15) drawdf([x-x*y/2, (x*y - 3*y)/4],
              [x,2.5,3.5], [y,1.5,2.5],
              field_color = gray,
              makelist([ key   = concat("soln",k),
                         color = colors[k],
                         soln_at(3, 2 + k/20) ],
                       k,1,5))$

Categories:  Package drawdf


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54. dynamics


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.1 The dynamics package

パッケージ dynamicsには、 3D可視化と、アニメーション、微分差分方程式のグラフィックス解析、微分方程式の数値解のための関数が含まれています。 微分方程式用の関数については Numerical Methodsの節で記述します。 離散力学系とフラクタルの様々なグラフィックス表現を生成するためのいくつかの関数と、 Mandelbrotと Julia集合については Plottingの節で記述します。

このパッケージのすべての関数は初めて使われる時自動的にロードされます。

Categories:  Dynamical systems · Share packages · Package dynamics


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.2 Graphical analysis of discrete dynamical systems

関数: chaosgame ([[x1, y1]…[xm, ym]], [x0, y0], b, n, options, …);

いわゆるカオスゲームを実装します: 初期点 (x0, y0)をプロットし、 m個の点 [x1, y1]…xm, ym]の1つをランダムに選択します。 プロットする次の点はプロットした以前の点からランダムに選ばれた点までの線分上で、 ランダム点からその線分の長さに bを掛けた距離にあります。 手続きは n回繰り返されます。 オプションは plot2dと同じです。

. Sierpinsky三角形のプロット:

 
(%i1) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
                 30000, [style, dots]);

figures/dynamics7

Categories:  Package dynamics · Plotting

関数: evolution (F, y0, n, …, options, …);

2次元グラフに、点の水平座標が整数 0, 1, 2, ..., n、 垂直座標が再帰関係

 
        y(n+1) = F(y(n))

で定義された数列の対応する値 y(n)である n+1個の点を描きます。 ここで、初期値 y(0)y0に等しいです。 Fは1変数にだけ依存する式でなければいけません。 (例の中では yに依存していますが、他のいかなる変数を使うことができます), y0は実数でなければいけなく、 nは正の整数でなければいけません。 この関数は plot2dと同じオプションを受け付けます。

 
(%i1) evolution(cos(y), 2, 11);

figures/dynamics1

Categories:  Package dynamics · Plotting

関数: evolution2d ([F, G], [u, v], [u0, y0], n, options, …);

再帰関係を伴う二次元離散力学系によって定義された点列の中の最初の n+1点を二次元プロットで表示します。 初期値 u0v0を持つ

 
        u(n+1) = F(u(n), v(n))    v(n+1) = G(u(n), v(n))

FGは 2変数 uvのみに依存する式 2つでなければいけません。 変数はリストの中に明示的に指名されなければいけません。 オプションはplot2dと同じです。

。 2次元離散力学系の発展:

 
(%i1) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
(%i2) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
(%i3) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]);

figures/dynamics5

そしてそのフラクタルの小領域の拡大:

 
(%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
                  [y,-0.4,-0.2], [style, dots]);

figures/dynamics6

Categories:  Package dynamics · Plotting

関数: ifs ([r1, …, rm], [A1,…, Am], [[x1, y1], …, [xm, ym]], [x0, y0], n, options, …);

反復関数系法を実装します。 この方法は関数 chaosgameで記述した方法に似ていますが、 現在点からランダムに選ばれた点にセグメントを縮める代わりに、 そのセグメントの2成分はランダムに選ばれた点に対応する 2行 2列行列 Aiを乗算されます。

m個のアトラクティブな点の1つのランダムな選択を重み r1,...,rmで定義された非均一な確率分布で作ることができます。 それらの重みは累積形で与えられます; 例えばもし確率0.2, 0.5, 0.3を持つ3点があるなら、 重み r1, r2r3は 2, 7, 10とできます。 オプションはplot2dと同じです。

。 4つの行列と4点で得られたBarnsleyのシダ:

 
(%i1) a1: matrix([0.85,0.04],[-0.04,0.85])$
(%i2) a2: matrix([0.2,-0.26],[0.23,0.22])$
(%i3) a3: matrix([-0.15,0.28],[0.26,0.24])$
(%i4) a4: matrix([0,0],[0,0.16])$
(%i5) p1: [0,1.6]$
(%i6) p2: [0,1.6]$
(%i7) p3: [0,0.44]$
(%i8) p4: [0,0]$
(%i9) w: [85,92,99,100]$
(%i10) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]);

figures/dynamics8

Categories:  Package dynamics · Plotting

関数: orbits (F, y0, n1, n2, [x, x0, xf, xstep], options, …);

パラメータ xを持つ一次元離散力学系の族に関する軌道図を描画します; この種の図は一次元離散系の分岐の研究に使われます。

関数 F(y)は、 関数 evolutionの場合と同様に値 y0で始まる数列を定義しますが、 この場合、その関数は x0から xfまでの区間内の値を取り、 xstepの増分を持つパラメータ xにも依存します。 パラメータ xに使われるそれぞれの値は水平軸に示されます。 垂直軸は、数列に n1回の時間発展させた後得られる数列 y(n1+1),..., y(n1+n2+1)n2個の値を示します。 plot2dが受け付けるオプションに加えて、 垂直方向に表現された異なる点の最大数を設定するオプション pixelsを受け付けます。

。パラメータ aを持つ2次写像の軌道グラフ:

 
(%i1) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]);

figures/dynamics3

x = -1.25近傍の下位分岐周りの領域を拡大するために使用:

 
(%i2) orbits(x^2+a, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
             [nticks, 400], [style,dots]);

figures/dynamics4

Categories:  Package dynamics · Plotting

関数: staircase (F, y0, n,options,…);

再帰関係によって定義された数列に関する階段図形を描画します。

 
        y(n+1) = F(y(n))

入力パラメータの解釈と許される値は 関数 evolutionに関するものと同じです。 階段図形は線 G(y) = yと共に関数 F(y)のプロットから構成されます。 垂直区間は、その線上の点 (y0, y0)から関数 Fと交差する点まで描画されます。 水平区間はその点から線上の点 (y1, y1)に届くまで描画されます。 手続きは点 (yn, yn)に届くまで n回繰り返されます。 オプションは plot2dと同じです。

 
(%i1) staircase(cos(y), 1, 11, [y, 0, 1.2]);

figures/dynamics2

Categories:  Package dynamics · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.3 Visualization with VTK

関数 sceneは、 Visualization ToolKit (VTK)ソフトウエアを使って3D画像とアニメーションを生成します。 この関数を使うためには、 Xmaximaと VTKを(あるシステムでは別のパッケージに含まれる VTKの TCLバインディングを含めて)システムにインストールしなければいけません。

関数: scene (objects, …, options, …);

空のリストもしくは いくつかの objectsoptionsのリストを受け付けます。 プログラムはXmaximaを起動し、Xmaximaが3次元空間内に与えられたオブジェクトを表現し与えられたオプションを適用した外部ウィンドウを開きます。 それぞれのオブジェクトは以下の4つのクラスの1つに属さなければいけません: 球、立法、円柱、円錐 (Scene objectsを参照してください) オブジェクトは名前を与えることか、最初の要素がクラス名で続く要素がそのオブジェクトのオプションであるリストで識別されます

。 青の背景を持つ六角形ピラミッド:

 
(%i1) scene(cone, [background,"#9980e5"])$

figures/scene1

マウスの左ボタンを押しながらグラフィックスウィンドウ上を動かすことによって、 ピラミッドの別のビューを見せるようにカメラを回すことができます。 2つのプロットオプション elevationazimuthを ビュー用カメラの初期の向きを変えるのに使うことができます。 マウスの中央ボタンを押しながら動かすとカメラを動かすことができ、 マウスの右ボタンを押しながら上下に動かすとズームイン/アウトします。

それぞれのオブジェクトオプションはオプション名で始まるリストでなければいけません。 許されるオプションのリストは Scene object's options節で見つけられます。

。これは、地面に落下してエネルギーを失うことなしに跳ね返る球を示します。 アニメーションを開始したり止めたりするには、play/pauseボタンを押してください。

 
(%i1) p: makelist ([0,0,2.1- 9.8*t^2/2], t, 0, 0.64, 0.01)$

(%i2) p: append (p, reverse(p))$

(%i3) ball: [sphere, [radius,0.1], [thetaresolution,20],
  [phiresolution,20], [position,0,0,2.1], [color,red],
  [animate,position,p]]$

(%i4) ground: [cube, [xlength,2], [ylength,2], [zlength,0.2],
  [position,0,0,-0.1],[color,violet]]$

(%i5) scene (ball, ground, restart)$

figures/scene2

restartオプションは 位置リストの最後の点に届く度に自動的にアニメーションを再始動するのに使われます。 色に関して受け付けられる値はplot2dの colorオプションのものと同じです。

Categories:  Package dynamics · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.3.1 Scene options

シーンオプション: azimuth [azimuth, angle]

デフォルト値: 135

カメラの水平(x, y)平面上の回転。 angleは実数でなければいけません; 角度0は カメラがy軸の方向を示し、x軸が右に現れることを意味します。

Categories:  Package dynamics · Plotting

シーンオプション: background [background, color]

デフォルト値: black

グラフィックスウインドウの背景色。 カラー名と16進数の赤-緑-青文字列を受け付けます (plot2dの colorオプションを参照してください)。

Categories:  Package dynamics · Plotting

シーンオプション: elevation [elevation, angle]

デフォルト値: 30

カメラの垂直回転。 angleは実数でなければいけません; 角度0はカメラが水平面上を指すことを意味し、 デフォルト角度の30度はカメラが水平面から30度下向きを示していることを意味します。

Categories:  Package dynamics · Plotting

シーンオプション: height [height, pixels]

デフォルト値: 500

グラフィックスウィンドウの高さ(ピクセル)です。 pixelsは正の整数でなければいけません。

Categories:  Package dynamics · Plotting

シーンオプション: restart [restart, value]

デフォルト値: false

true値は、リストの終わりに至った時アニメーションが自動的に再スタートすることを意味します。 "restart"とだけ書くのは、[restart, true]と等価です。

Categories:  Package dynamics · Plotting

シーンオプション: tstep [tstep, time]

デフォルト値: 10

連続アニメーションフレームの間の繰り返しの間の時間(ミリ秒単位)です。 timeは実数でなければいけません。

Categories:  Package dynamics · Plotting

シーンオプション: width [width, pixels]

デフォルト値: 500

グラフィックスウインドウの幅(ピクセル)です。 pixelsは正の整数でなければいけません。

Categories:  Package dynamics · Plotting

シーンオプション: windowname [windowtitle, name]

デフォルト値: .scene

nameは文字列でなければいけません。 Xmaximaが sceneグラフィックス用に生成した Tkウインドウの名前として使われます。 デフォルト値 .sceneは新たなトップレベルウィンドウが生成されることを意味します。

Categories:  Package dynamics · Plotting

シーンオプション: windowtitle [windowtitle, name]

デフォルト値: Xmaxima: scene

nameは 文字列でなければいけません。 sceneが生成するウィンドウのタイトルに書かれます。

Categories:  Package dynamics · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.3.2 Scene objects

シーンオブジェクト: cone [cone, options]

高さが1で、軸から0.5単位離れた頂点を持つ六角形の底面を持つ正角錐を生成します。 オプション heightradiusは それらのデフォルト値を変えるのに使い、オプション resolutionは 底面の辺の数を変えるのに使います; より大きな値にするとコーンらしく見えます。 デフォルトでは軸はx軸に沿っていて、軸の中点は原点にあり、頂点はx軸の正側にあります; それらのデフォルトを変えるには、オプション orientationcenterを使ってください。

. これは、プレイボタンを押すとz軸の周りを回転し始める角錐を示します。

 
(%i1) scene([cone, [orientation,0,30,0], [tstep,100],
   [animate,orientation,makelist([0,30,i],i,5,360,5)]], restart)$

Categories:  Package dynamics · Plotting

シーンオブジェクト: cube [cube, options]

単位1の辺でxy, xz, yz面と平行な面を持つ正立方体。 オプション xlength, ylength, zlength で3つの辺の長さを変えることができ、長方形の箱に変えます。 オプション orientationで表面を回転させることができます。

Categories:  Package dynamics · Plotting

シーンオブジェクト: cylinder [cylinder, options]

高さが1で、軸から0.5単位離れた頂点を持つ六角形の底面を持つ正角柱を生成します。 オプション height, radiusでそれらのデフォルトを変えることができ、 オプション resolutionで底面の辺の数を変えることができます; より大きな値にすると円柱らしく見えます。 オプション heightでデフォルトの高さを変えることができます。 デフォルトでは軸はx軸に沿っていて、軸の中点が原点に来ます; それらのデフォルトを変えるにはオプション orientation, centerを使ってください。

Categories:  Package dynamics · Plotting

シーンオブジェクト: sphere [sphere, options]

0.5単位のデフォルト半径を持ち、原点に中心がある球。

Categories:  Package dynamics · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54.3.3 Scene object's options

オブジェクトオプション: animation [animation, property, positions]

propertyは以下の 4つのオプジェクトのプロパティの1つでなければいけません: origin, scale, position, orientation そして positionsは点のリストでなければいけません。 再生ボタンを押すと、オプション tstepが与える時間感覚で オブジェクトプロパティを連続的にリストのすべての値をとるように変化させます。 一連の始めに戻すには巻き戻しボタンを使います。再度再生ボタンを押せばアニメーションが再スタートするようになります。

trackも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: capping [capping, number]

デフォルト値: 1

円錐か円柱に対して、底面を描くかどうかを決めます。 numberの値 1で底面を描き、値 0では描きません。

Categories:  Package dynamics · Plotting

オブジェクトオプション: center [center, point]

デフォルト値: [0, 0, 0]

positionに関するオブジェクトの幾何中心の座標。 pointは3つの実数のリストか、コンマで区切られた3つの実数をとることができます。 円柱や円錐、立方体では、高さの半分にあり、球では中心にあります。

Categories:  Package dynamics · Plotting

オブジェクトオプション: color [color, colorname]

デフォルト値: white

オブジェクトの色。 カラーネームか16進の赤緑青文字列を受け付けます。 (polot2dの colorオプションを参照してください。)

Categories:  Package dynamics · Plotting

オブジェクトオプション: endphi [endphi, angle]

デフォルト値: 180

球に関して、phiはz軸を通る垂直面上の角度です。 z軸の正の部分から測ります。 angleは0と180の間の数でなければいけません。 表面が終わるphiの最終値を設定します。 180より小さな値の時、球の表面の一部が消えます。

startphi, phiresolutionも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: endtheta [endtheta, angle]

デフォルト値: 360

球に関して、thetaは水平面上の角度(経度)です。 x軸の正の部分から測ります。 angleは0と360の間の数でなければいけません。 表面が終わるthetaの最終値を設定します。 360より小さな値の時、球の表面の一部が消えます。

starttheta, thetaresolutionも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: height [height, value]

デフォルト値: 1

valueは正の数字でなければいけません。 円錐や円柱の高さを設定します。

Categories:  Package dynamics · Plotting

オブジェクトオプション: linewidth [linewidth, value]

デフォルト値: 1

オプション wireframeが使われる時の線の幅。 valueは正の数でなければいけません。

Categories:  Package dynamics · Plotting

オブジェクトオプション: opacity [opacity, value]

デフォルト値: 1

valueは0と1の間の数でなければいけません。 数が小さいと、オブジェクトが透明になっていきます。 デフォルト値1は完全に不透明なオブジェクトを意味します。

Categories:  Package dynamics · Plotting

オブジェクトオプション: orientation [orientation, angles]

デフォルト値: [0, 0, 0]

3つの軸に対するオブジェクトの回転角度。 anglesは3つの実数のリストか、コンマで区切られた3つの実数を取ることができます。 : [0, 0, 90]はオブジェクトのx軸を参照系のy軸に回します。

Categories:  Package dynamics · Plotting

オブジェクトオプション: origin [origin, point]

デフォルト値: [0, 0, 0]

オブジェクトの他の寸法を決めるのに使われるオブジェクトの原点の座標。 pointは3つの実数のリストか、コンマで区切られた3つの実数を取ることができます。

Categories:  Package dynamics · Plotting

オブジェクトオプション: phiresolution [phiresolution, num]

デフォルト値:

startphiから endphiまでの phi角度区間が分割される部分区間の数。 numは正の整数でなければいけません。

startphi, endphiも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: points [points]

表面を描画するのに使われる三角測量の頂点のみを表示します。 : [sphere, [points]]

surface, wireframeも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: pointsize [pointsize, value]

デフォルト値: 1

オプション pointsを使う時の点の大きさ valueは正の数でなければいけません。

Categories:  Package dynamics · Plotting

オブジェクトオプション: position [position, point]

デフォルト値: [0, 0, 0]

オブジェクトの位置の座標。 pointは3つの実数のリストかコンマで区切られた3つの実数を取ることができます。

Categories:  Package dynamics · Plotting

オブジェクトオプション: radius [radius, value]

デフォルト値: 0.5

円柱や円錐の底面の頂点と軸の距離、半径。 valueは正の数でなければいけません。

Categories:  Package dynamics · Plotting

オブジェクトオプション: resolution [resolution, number]

デフォルト値: 6

numberは2より大きな整数でなければいけません。 円錐や円柱の底面の辺の数を設定します。

Categories:  Package dynamics · Plotting

オブジェクトオプション: scale [scale, factors]

デフォルト値: [1, 1, 1]

3つの軸に関してオブジェクトをスケールするのに使う3つの数字。 factorsは3つの実数のリストかコンマで区切られた3つの実数を取ることができます。 : [2, 0.5, 1] はオブジェクトをx軸方向に2倍に拡大し、y軸方向に半分に縮小し、z軸方向はそのままにします。

Categories:  Package dynamics · Plotting

オブジェクトオプション: startphi [startphi, angle]

デフォルト値: 0

球に関して、phyはz軸を含む垂直面上の角度です。 z軸の正の部分から測られます。 angle0と180の間の数でなければいけません。 表面が始まるphiの初期値を設定します。 0より大きな値の時、球の表面の一部が消えます。

endphi, phiresolutionも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: starttheta [starttheta, angle]

デフォルト値: 0

球に関して、thetaは水平面の角度(経度)です。 x軸の正の部分から測られます。 angle0と360の間の数でなければいけません。 表面が始まるthetaの初期値を設定します。 0より大きな値の時、球の表面の一部が消えます。

endtheta, thetaresolutionも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: surface [surface]

オブジェクトの表面を描画します。 表面を構築するのに使われる三角測量の線と点を表示します。 これはデフォルトの振る舞いです。 オプション pointswireframeでこの振る舞いを変えることができます。

Categories:  Package dynamics · Plotting

オブジェクトオプション: thetaresolution [thetaresolution, num]

デフォルト値:

startthetaから endthetaまでの theta角度区間を分割する部分区間の数。 numは正の整数でなければいけません。

starttheta, endthetaも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: track [track, positions]

positionsは点のリストでなければいけません。 再生ボタンを押した時、オプション tstepで与えられた時間感覚でオプジェクト位置がリストの点すべてに連続的に変わります。 オブジェクトの軌跡の後を残します。 一連の始めに戻すには巻き戻しボタンを使います。再度再生ボタンを押せばアニメーションが再スタートするようになります。

. これは、5 m/sのスピード、45度の角度で投げられたボールの軌跡を表示します。空気抵抗は無視されます:

 
(%i1) p: makelist ([0,4*t,4*t- 9.8*t^2/2], t, 0, 0.82, 0.01)$

(%i2) ball: [sphere, [radius,0.1], [color,red], [track,p]]$

(%i3) ground: [cube, [xlength,2], [ylength,4], [zlength,0.2],
      [position,0,1.5,-0.2],[color,green]]$

(%i4) scene (ball, ground)$

animationも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: xlength [xlength, length]

デフォルト値: 1

立方体のx方向の高さ。 lengthは正の数でなければいけません。 ylength, zlengthも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: ylength [ylength, length]

デフォルト値: 1

立方体のy方向の高さ。 lengthは正の数でなければいけません。 xlength, zlengthも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: zlength [zlength, length]

デフォルト値: 1

立方体のz方向の高さ。 lengthは正の数でなければいけません。 xlength, ylengthも参照してください。

Categories:  Package dynamics · Plotting

オブジェクトオプション: wireframe [wireframe]

表面を描画するの使われる三角測量の辺だけを表示します。 : [cube, [wireframe]]

surface, pointsも参照してください。

Categories:  Package dynamics · Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

55. engineering-format

工学フォーマットは maximaが浮動小数点数を出力する方法をエンジニアがよく使う記法 a*10^bに変更します。 ここで bは3で割り切れる数です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

55.1 Functions and Variables for engineering-format

オプション変数: engineering_format_floats

デフォルト値: true

この変数は工学フォーマットを一時的にオフに切り返すために使います。

 
(%i1) load("engineering-format");
(%o1)
    /maxima/share/contrib/engineering-format.lisp
(%i2) float(sin(10)/10000);
(%o2)                - 54.40211108893698e-6
(%i3) engineering_format_floats:false$
(%i4) float(sin(10)/10000);
(%o4)                - 5.440211108893698e-5

See also fpprintprec and float.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

55.2 Known Bugs

SBCL 1.3.0の出力ルーチンには、3で割り切れない指数を時々出力するバグがあります。 この場合でも表示数の値はまだ有効です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

56. ezunits


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

56.1 Introduction to ezunits

ezunitsは次元量を扱うためのパッケージです。 次元解析のいくつかの関数を含みます。 ezunitsは次元量と単位変換に関する算術演算を実行できます。 組み込み単位は国際単位系 (SI)と US慣習単位系を含み、他の単位が宣言できます。 physical_constants、物理定数のコレクションも参照してください。

load(ezunits)はこのパッケージをロードします。 demo(ezunits)はいくつかの例を表示します。 便利な関数 known_unitsは組み込みとユーザー宣言単位のリストを返し、そして、 display_known_unit_conversionsは可読性の高いフォーマットで 既知の変換一式を表示します。

a ` bは無次元量を示す aと次元単位 bで次元量を表します。 そのように宣言することなしに、シンボルを単位として使うことができます; 単位シンボルはいかなる特別なプロパティを持つ必要はありません。 式 a ` bの量と単位はそれぞれ、 qty関数と units関数で抽出することができます。

シンボルは、指定された量か指定された単位か両方を持つ次元量であると宣言することができます。

a ` b `` cは 単位 bから単位 cに変換します。 ezunitsは SI基本単位、 SI組立単位、いくつかの非 SI単位に関する組み込み変換を持っています。 まだ ezunitsが知らない単位変換は宣言することができます。 ezunitsが知っている単位変換は 組み込み変換とユーザー定義の変換から構成されるグローバル変数 known_unit_conversionsで指定されます。 単位の積や商、冪に関する変換は知られている単位変換の組から演繹されます。

Maximaは一般的に、 厳密でない数(浮動小数点数か多倍長浮動小数点数)より厳密な数(整数か有理数)を好むので、 次元量でそれらが現れた時、 ezunitsは厳密な数を保護します。 組み込み単位変換すべては厳密な数で表現されます; 宣言された変換で厳密でない数は厳密なものに強制的に変換されます。

単位の表示のために優先される系はありません; 変換を明示的に示さない限り、入力単位を他の単位に変換しません。 ezunitsは前置詞 m-, k-, M, G-(ミリ-, キロ-, メガ-, ギガ-)を SI基本単位や SI組立単位に適用された際、認識しますが、 そのような前置詞は明示的な変換で示された時だけ適用されます。

次元量に対する算術演算子はそのような演算子の慣例的な規則で実行されます。

ezunitsは和の中の単位が同じ次元を持つことを要求しません; そんな項は足さられず、エラーは報告されません。

ezunitsは初等的な次元解析関数を含みます。 すなわち、次元量の基本的な次元と基本的な単位、無次元量と自然単位系の計算です。 次元解析の関数は Barton Willisが書いた別のパッケージの類似の関数から焼き直されました。

次元解析のために基本的な次元のリストと基本的な単位の連想リストは保持されます; デフォルトでは、基本的な次元は、長さ、質量、時刻、電荷、温度、量であり、 基本的な単位は関連したSI単位で、他の基本的な次元や単位を宣言できます。

Categories:  Physical units · Share packages · Package ezunits


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

56.2 Introduction to physical_constants

physical_constantsは物理定数のコレクションです。 CODATA 2006 推奨値 (http://physics.nist.gov/constants)からコピーしました。 load(physical_constants)はこのパッケージをロードし、 まだロードされていないなら ezunitsもロードします。

物理定数は定数値のプロパティを持つシンボルとして表されます。 定数値は ezunitsが表すように次元量です。 関数 constvalueは定数値を取りに行きます; 定数値はシンボルの普通の値ではなく、 constvalueが値を取りに行くまで 物理定数のシンボルは評価される式の中でシンボルのままです。

physical_constantsはある補助情報、すなわち、それぞれの定数の記述文字列、 数値の誤差の見積もり、 TeX表示のためのプロパティを含みます。 物理定数を識別するためにそれぞれのシンボルは physical_constantプロパティを持ちます; なので、 propvars(physical_constant)はそんなシンボルすべてのリストを表示します。

physical_constants以下の定数を含みます。

%c

真空中の光速度

%mu_0

真空の透磁率

%e_0

真空の誘電率

%Z_0

真空の特性インピーダンス

%G

Newtonの重力定数

%h

Planck定数

%h_bar

Planck定数

%m_P

Planck質量

%T_P

Planck温度

%l_P

Planck長

%t_P

Planck時間

%%e

電気素量

%Phi_0

磁束量子

%G_0

コンダクタンス量子

%K_J

Josephson定数

%R_K

von Klitzing定数

%mu_B

Bohr磁子

%mu_N

核磁子

%alpha

微細構造定数

%R_inf

Rydberg定数

%a_0

Bohr半径

%E_h

Hartreeエネルギー

%ratio_h_me

循環量子

%m_e

電子質量

%N_A

Avogadro数

%m_u

原子質量定数

%F

Faraday定数

%R

気体定数

%%k

Boltzmann定数

%V_m

理想気体のモル体積

%n_0

Loschmidt定数

%ratio_S0_R

Sackur-Tetrode定数 (絶対エントロピー定数)

%sigma

Stefan-Boltzmann定数

%c_1

第一放射定数

%c_1L

スペクトル放射強度の第一放射定数

%c_2

第二放射定数

%b

Wien変位則定数

%b_prime

Wien変位則定数

参考文献: http://physics.nist.gov/constants

例:

physical_constant プロパティを持つすべてのシンボルのリスト。

 
(%i1) load ("physical_constants")$
(%i2) propvars (physical_constant);
(%o2) [%c, %mu_0, %e_0, %Z_0, %G, %h, %h_bar, %m_P, %T_P, %l_P,
%t_P, %%e, %Phi_0, %G_0, %K_J, %R_K, %mu_B, %mu_N, %alpha,
%R_inf, %a_0, %E_h, %ratio_h_me, %m_e, %N_A, %m_u, %F, %R, %%k,
%V_m, %n_0, %ratio_S0_R, %sigma, %c_1, %c_1L, %c_2, %b, %b_prime]

物理定数 %cのプロパティ。

 
(%i1) load ("physical_constants")$
(%i2) constantp (%c);
(%o2)                         true
(%i3) get (%c, description);
(%o3)               speed of light in vacuum
(%i4) constvalue (%c);
                                      m
(%o4)                     299792458 ` -
                                      s
(%i5) get (%c, RSU);
(%o5)                           0
(%i6) tex (%c);
$$c$$
(%o6)                         false

1ポンドの質量に等価なエネルギー。 シンボル %cconstvalueが値を取りにいくまでシンボルのままです。

 
(%i1) load ("physical_constants")$
(%i2) m * %c^2;
                                2
(%o2)                         %c  m
(%i3) %, m = 1 ` lbm;
                              2
(%o3)                       %c  ` lbm
(%i4) constvalue (%);
                                            2
                                       lbm m
(%o4)              89875517873681764 ` ------
                                          2
                                         s
(%i5) E : % `` J;
Computing conversions to base units; may take a moment.
                     366838848464007200
(%o5)                ------------------ ` J
                             9
(%i6) E `` GJ;
                      458548560580009
(%o6)                 --------------- ` GJ
                         11250000
(%i7) float (%);
(%o7)              4.0759872051556356e+7 ` GJ

Categories:  Physical units · Share packages · Package physical_constants


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

56.3 Functions and Variables for ezunits

演算子: `

次元量演算子。 式 a ` bは次元量を表します。 aは無次元量を表し、 bは次元単位を表します。 シンボルは宣言せずに単位として使うことができます; 単位シンボルは特別なプロパティを持つ必要はありません。 式 a ` bの量と単位はそれぞれ、 qtyunits関数で抽出することができます。

次元量の算術演算子は演算子の慣例規則に従って実行されます。

ezunitsは和の中の単位が同じ次元であることを要求しません; そのような項は一緒には足されませんし、エラーは報告されません。

load(ezunits)はこの演算子をイネーブルにします。

例:

SI (国際単位系) 単位。

 
(%i1) load ("ezunits")$
(%i2) foo : 10 ` m;
(%o2)                        10 ` m
(%i3) qty (foo);
(%o3)                          10
(%i4) units (foo);
(%o4)                           m
(%i5) dimensions (foo);
(%o5)                        length

"慣習"単位。

 
(%i1) load ("ezunits")$
(%i2) bar : x ` acre;
(%o2)                       x ` acre
(%i3) dimensions (bar);
                                   2
(%o3)                        length
(%i4) fundamental_units (bar);
                                2
(%o4)                          m

アドホック単位。

 
(%i1) load ("ezunits")$
(%i2) baz : 3 ` sheep + 8 ` goat + 1 ` horse;
(%o2)           8 ` goat + 3 ` sheep + 1 ` horse
(%i3) subst ([sheep = 3*goat, horse = 10*goat], baz);
(%o3)                       27 ` goat
(%i4) baz2 : 1000`gallon/fortnight;
                                gallon
(%o4)                   1000 ` ---------
                               fortnight
(%i5) subst (fortnight = 14*day, baz2);
                          500   gallon
(%o5)                     --- ` ------
                           7     day

次元量の算術演算子

 
(%i1) load ("ezunits")$
(%i2) 100 ` kg + 200 ` kg;
(%o2)                       300 ` kg
(%i3) 100 ` m^3 - 100 ` m^3;
                                  3
(%o3)                        0 ` m
(%i4) (10 ` kg) * (17 ` m/s^2);
                                 kg m
(%o4)                      170 ` ----
                                   2
                                  s
(%i5) (x ` m) / (y ` s);
                              x   m
(%o5)                         - ` -
                              y   s
(%i6) (a ` m)^2;
                              2    2
(%o6)                        a  ` m

Categories:  Package ezunits

演算子: ``

単位変換演算子。 式 a ` b `` cは単位 bを単位 cに変換します。 ezunitsには SI基本単位、 SI組立単位、いくつかの非 SI単位のための組み込み変換があります。 ezunitsがまだ知らない単位変換は宣言することができます。 ezunitsが知っている単位変換はグローバル変数 known_unit_conversionsに明記されます。 それは組み込みとユーザー定義の変換を含みます。 単位の積、商、べきの変換は既知の単位変換一式から演繹されます。

単位の表示のためにより好まれる系はありません; 変換が明示的に示されない限り、入力単位は他の単位に変換されません。 ezunitsは、変換が明示的に示されない限り、 前置詞 (milli-, centi-, deci-, etc)で単位を整理しようとしません。

load(ezunits)はこの演算子を有効にします。

例:

既知の単位変換一式。

 
(%i1) load ("ezunits")$
(%i2) display2d : false$
(%i3) known_unit_conversions;
(%o3) {acre = 4840*yard^2,Btu = 1055*J,cfm = feet^3/minute,
       cm = m/100,day = 86400*s,feet = 381*m/1250,ft = feet,
       g = kg/1000,gallon = 757*l/200,GHz = 1000000000*Hz,
       GOhm = 1000000000*Ohm,GPa = 1000000000*Pa,
       GWb = 1000000000*Wb,Gg = 1000000*kg,Gm = 1000000000*m,
       Gmol = 1000000*mol,Gs = 1000000000*s,ha = hectare,
       hectare = 100*m^2,hour = 3600*s,Hz = 1/s,inch = feet/12,
       km = 1000*m,kmol = 1000*mol,ks = 1000*s,l = liter,
       lbf = pound_force,lbm = pound_mass,liter = m^3/1000,
       metric_ton = Mg,mg = kg/1000000,MHz = 1000000*Hz,
       microgram = kg/1000000000,micrometer = m/1000000,
       micron = micrometer,microsecond = s/1000000,
       mile = 5280*feet,minute = 60*s,mm = m/1000,
       mmol = mol/1000,month = 2629800*s,MOhm = 1000000*Ohm,
       MPa = 1000000*Pa,ms = s/1000,MWb = 1000000*Wb,
       Mg = 1000*kg,Mm = 1000000*m,Mmol = 1000000000*mol,
       Ms = 1000000*s,ns = s/1000000000,ounce = pound_mass/16,
       oz = ounce,Ohm = s*J/C^2,
       pound_force = 32*ft*pound_mass/s^2,
       pound_mass = 200*kg/441,psi = pound_force/inch^2,
       Pa = N/m^2,week = 604800*s,Wb = J/A,yard = 3*feet,
       year = 31557600*s,C = s*A,F = C^2/J,GA = 1000000000*A,
       GC = 1000000000*C,GF = 1000000000*F,GH = 1000000000*H,
       GJ = 1000000000*J,GK = 1000000000*K,GN = 1000000000*N,
       GS = 1000000000*S,GT = 1000000000*T,GV = 1000000000*V,
       GW = 1000000000*W,H = J/A^2,J = m*N,kA = 1000*A,
       kC = 1000*C,kF = 1000*F,kH = 1000*H,kHz = 1000*Hz,
       kJ = 1000*J,kK = 1000*K,kN = 1000*N,kOhm = 1000*Ohm,
       kPa = 1000*Pa,kS = 1000*S,kT = 1000*T,kV = 1000*V,
       kW = 1000*W,kWb = 1000*Wb,mA = A/1000,mC = C/1000,
       mF = F/1000,mH = H/1000,mHz = Hz/1000,mJ = J/1000,
       mK = K/1000,mN = N/1000,mOhm = Ohm/1000,mPa = Pa/1000,
       mS = S/1000,mT = T/1000,mV = V/1000,mW = W/1000,
       mWb = Wb/1000,MA = 1000000*A,MC = 1000000*C,
       MF = 1000000*F,MH = 1000000*H,MJ = 1000000*J,
       MK = 1000000*K,MN = 1000000*N,MS = 1000000*S,
       MT = 1000000*T,MV = 1000000*V,MW = 1000000*W,
       N = kg*m/s^2,R = 5*K/9,S = 1/Ohm,T = J/(m^2*A),V = J/C,
       W = J/s}

基本単位変換。

 
(%i1) load ("ezunits")$
(%i2) 1 ` ft `` m;
Computing conversions to base units; may take a moment.
                            381
(%o2)                       ---- ` m
                            1250
(%i3) %, numer;
(%o3)                      0.3048 ` m
(%i4) 1 ` kg `` lbm;
                            441
(%o4)                       --- ` lbm
                            200
(%i5) %, numer;
(%o5)                      2.205 ` lbm
(%i6) 1 ` W `` Btu/hour;
                           720   Btu
(%o6)                      --- ` ----
                           211   hour
(%i7) %, numer;
                                        Btu
(%o7)               3.412322274881517 ` ----
                                        hour
(%i8) 100 ` degC `` degF;
(%o8)                      212 ` degF
(%i9) -40 ` degF `` degC;
(%o9)                     (- 40) ` degC
(%i10) 1 ` acre*ft `` m^3;
                        60228605349    3
(%o10)                  ----------- ` m
                         48828125
(%i11) %, numer;
                                          3
(%o11)                1233.48183754752 ` m

フィートとメートルを相互に強制変換。

 
(%i1) load ("ezunits")$
(%i2) 100 ` m + 100 ` ft;
(%o2)                  100 ` m + 100 ` ft
(%i3) (100 ` m + 100 ` ft) `` ft;
Computing conversions to base units; may take a moment.
                           163100
(%o3)                      ------ ` ft
                            381
(%i4) %, numer;
(%o4)                428.0839895013123 ` ft
(%i5) (100 ` m + 100 ` ft) `` m;
                            3262
(%o5)                       ---- ` m
                             25
(%i6) %, numer;
(%o6)                      130.48 ` m

基本次元と基本単位を見つけるための次元解析

 
(%i1) load ("ezunits")$
(%i2) foo : 1 ` acre * ft;
(%o2)                      1 ` acre ft
(%i3) dimensions (foo);
                                   3
(%o3)                        length
(%i4) fundamental_units (foo);
                                3
(%o4)                          m
(%i5) foo `` m^3;
Computing conversions to base units; may take a moment.
                        60228605349    3
(%o5)                   ----------- ` m
                         48828125
(%i6) %, numer;
                                          3
(%o6)                 1233.48183754752 ` m

宣言された単位変換。

 
(%i1) load ("ezunits")$
(%i2) declare_unit_conversion (MMBtu = 10^6*Btu, kW = 1000*W);
(%o2)                         done
(%i3) declare_unit_conversion (kWh = kW*hour, MWh = 1000*kWh,
                               bell = 1800*s);
(%o3)                         done
(%i4) 1 ` kW*s `` MWh;
Computing conversions to base units; may take a moment.
                             1
(%o4)                     ------- ` MWh
                          3600000
(%i5) 1 ` kW/m^2 `` MMBtu/bell/ft^2;
                       1306449      MMBtu
(%o5)                 ---------- ` --------
                      8242187500          2
                                   bell ft

Categories:  Package ezunits

関数: constvalue (x)

パッケージ physical_constantsが宣言した定数の1つの値と単位を表示します。 パッケージは物理定数やパッケージ ezunitsの中で宣言された新しい定数を含みます。 (declare_constvalueを参照してください。)

constvalueが認識する定数は numervalで宣言された値や constantpが認識する値と区別されることに注意してください。

例:

物理定数の定数値。

 
(%i1) load ("physical_constants")$
(%i2) constvalue (%G);
                                     3
                                    m
(%o2)                    6.67428 ` -----
                                       2
                                   kg s
(%i3) get ('%G, 'description);
(%o3)           Newtonian constant of gravitation

Categories:  Package ezunits

関数: declare_constvalue (a, x)

パッケージ ezunitsの中で使われる定数の値を宣言します。 この関数は load(ezunits)でロードしなければいけません。

例:

 
(%i1) load ("ezunits")$
(%i2) declare_constvalue (FOO, 100 ` lbm / acre);
                                 lbm
(%o2)                      100 ` ----
                                 acre
(%i3) FOO * (50 ` acre);
(%o3)                     50 FOO ` acre
(%i4) constvalue (%);
(%o4)                      5000 ` lbm

Categories:  Package ezunits

関数: remove_constvalue (a)

declare_constvalueの効果を戻します。 この関数は load(ezunits)でロードしなければいけません。

Categories:  Package ezunits

関数: units (x)

次元量 xの単位を返します。 もし xが無次元なら 1を返します。

xは文字通り次元式 a ` bかもしれませんし、 declare_unitsを介して宣言された単位を持つシンボルかもしれませんし、 それらの一方または両方を含む式かもしれません。

この関数は load(ezunits)でロードしなければいけません。

例:

 
(%i1) load ("ezunits")$
(%i2) foo : 100 ` kg;
(%o2)                       100 ` kg
(%i3) bar : x ` m/s;
                                  m
(%o3)                         x ` -
                                  s
(%i4) units (foo);
(%o4)                          kg
(%i5) units (bar);
                                m
(%o5)                           -
                                s
(%i6) units (foo * bar);
                              kg m
(%o6)                         ----
                               s
(%i7) units (foo / bar);
                              kg s
(%o7)                         ----
                               m
(%i8) units (foo^2);
                                 2
(%o8)                          kg

Categories:  Package ezunits

関数: declare_units (a, u)

unitsaの単位 uを返さなければいけないことを宣言します。 ここで uは式です。 この関数は load(ezunits)でロードしなければいけません。

例:

 
(%i1) load ("ezunits")$
(%i2) units (aa);
(%o2)                           1
(%i3) declare_units (aa, J);
(%o3)                           J
(%i4) units (aa);
(%o4)                           J
(%i5) units (aa^2);
                                2
(%o5)                          J
(%i6) foo : 100 ` kg;
(%o6)                       100 ` kg
(%i7) units (aa * foo);
(%o7)                         kg J

Categories:  Package ezunits

関数: qty (x)

次元量 xの無次元パーツを返します。 もし xが無次元なら xを返します。 xは文字通り次元式 a ` bかも知れませんし、 宣言された量のシンボルかもしれませんし、 それらの一方または両方を含む式かもしれません。

この関数は load(ezunits)でロードしなければいけません。

例:

 
(%i1) load ("ezunits")$
(%i2) foo : 100 ` kg;
(%o2)                       100 ` kg
(%i3) qty (foo);
(%o3)                          100
(%i4) bar : v ` m/s;
                                  m
(%o4)                         v ` -
                                  s
(%i5) foo * bar;
                                  kg m
(%o5)                     100 v ` ----
                                   s
(%i6) qty (foo * bar);
(%o6)                         100 v

Categories:  Package ezunits

関数: declare_qty (a, x)

qtyが シンボル axを返さなければいけないことを宣言します。 ここで xは無次元量です。 この関数は load(ezunits)でロードしなければいけません。

例:

 
(%i1) load ("ezunits")$
(%i2) declare_qty (aa, xx);
(%o2)                          xx
(%i3) qty (aa);
(%o3)                          xx
(%i4) qty (aa^2);
                                 2
(%o4)                          xx
(%i5) foo : 100 ` kg;
(%o5)                       100 ` kg
(%i6) qty (aa * foo);
(%o6)                        100 xx

Categories:  Package ezunits

関数: unitp (x)

もし xが文字通り次元式か、次元的と宣言されたシンボルか、主演算子が次元的宣言された式なら、 trueを返します。 それ以外なら、 unitpfalseを返します。

load(ezunits)はこの関数を返します。

例:

文字通り次元式へ適用された unitp

 
(%i1) load ("ezunits")$
(%i2) unitp (100 ` kg);
(%o2)                         true

次元的と宣言されたシンボルへ適用された unitp

 
(%i1) load ("ezunits")$
(%i2) unitp (foo);
(%o2)                         false
(%i3) declare (foo, dimensional);
(%o3)                         done
(%i4) unitp (foo);
(%o4)                         true

主演算子が次元的と宣言された式に適用された unitp

 
(%i1) load ("ezunits")$
(%i2) unitp (bar (x, y, z));
(%o2)                         false
(%i3) declare (bar, dimensional);
(%o3)                         done
(%i4) unitp (bar (x, y, z));
(%o4)                         true

Categories:  Package ezunits

関数: declare_unit_conversion (u = v, ...)

u = v, ... を単位変換演算子 ``が知っている単位変換のリストに追加します。 uvはともにその中のいかなる変数も単位である乗法の項か、文字通り次元式です。

現状では、それぞれの式の左辺が(乗法式でなく)ただの単位か、 1に等しい量とただの単位である単位の文字通り次元式であるような 変換を表現する必要があります。 この限定は将来のバージョンで緩和されるかもしれません。

known_unit_conversionsは既知の単位変換のリストです。

この関数は load(ezunits)でロードしなければいけません。

例:

乗法項の等式で表現された単位変換。

 
(%i1) load ("ezunits")$
(%i2) declare_unit_conversion (nautical_mile = 1852 * m,
                               fortnight = 14 * day);
(%o2)                         done
(%i3) 100 ` nautical_mile / fortnight `` m/s;
Computing conversions to base units; may take a moment.
                            463    m
(%o3)                       ---- ` -
                            3024   s

文字通り次元式の等式で表現された単位変換。

 
(%i1) load ("ezunits")$
(%i2) declare_unit_conversion (1 ` fluid_ounce = 2 ` tablespoon);
(%o2)                         done
(%i3) declare_unit_conversion (1 ` tablespoon = 3 ` teaspoon);
(%o3)                         done
(%i4) 15 ` fluid_ounce `` teaspoon;
Computing conversions to base units; may take a moment.
(%o4)                     90 ` teaspoon

Categories:  Package ezunits

関数: declare_dimensions (a_1, d_1, ..., a_n, d_n)

a_1, ..., a_nがそれぞれ、次元 d_1, ..., d_nを持つと宣言します。

a_kそれぞれはシンボルかシンボルのリストです。 もしリストなら a_k内のすべてのシンボルは次元 d_kを持つように宣言されます。

load(ezunits)はこれらの関数をロードします。

例:

 
(%i1) load ("ezunits") $
(%i2) declare_dimensions ([x, y, z], length, [t, u], time);
(%o2)                         done
(%i3) dimensions (y^2/u);
                                   2
                             length
(%o3)                        -------
                              time
(%i4) fundamental_units (y^2/u);
0 errors, 0 warnings
                                2
                               m
(%o4)                          --
                               s

Categories:  Package ezunits

関数: remove_dimensions (a_1, ..., a_n)

declare_dimensionsの効果を戻します。 この関数は load(ezunits)でロードしなければいけません。

Categories:  Package ezunits

関数: declare_fundamental_dimensions (d_1, d_2, d_3, ...)
関数: remove_fundamental_dimensions (d_1, d_2, d_3, ...)
グローバル変数: fundamental_dimensions

declare_fundamental_dimensionsは基本次元を宣言します。 シンボル d_1, d_2, d_3, ... は、もしそれらがまだリストの中にないなら、基本次元のリストに追加されます。

remove_fundamental_dimensionsdeclare_fundamental_dimensionsの効果を戻します。

fundamental_dimensionsは基本次元のリストです。 デフォルトでは、リストはいくつかの物理次元から成ります。

load(ezunits)はこれらの関数をロードします。

例:

 
(%i1) load ("ezunits") $
(%i2) fundamental_dimensions;
(%o2) [length, mass, time, current, temperature, quantity]
(%i3) declare_fundamental_dimensions (money, cattle, happiness);
(%o3)                         done
(%i4) fundamental_dimensions;
(%o4) [length, mass, time, current, temperature, quantity,
                                        money, cattle, happiness]
(%i5) remove_fundamental_dimensions (cattle, happiness);
(%o5)                         done
(%i6) fundamental_dimensions;
(%o6) [length, mass, time, current, temperature, quantity, money]

Categories:  Package ezunits

関数: declare_fundamental_units (u_1, d_1, ..., u_n, d_n)
関数: remove_fundamental_units (u_1, ..., u_n)

declare_fundamental_unitsu_1, ..., u_nをそれぞれ、次元 d_1, ..., d_nを持つように宣言します。 引数すべてはシンボルでなければいけません。

declare_fundamental_unitsをコールした後、 dimensions(u_k)は引数 u_1, ..., u_nそれぞれに対して d_kを返し、 fundamental_units(d_k)は引数 d_1, ..., d_nそれぞれに対して u_kを返します。

remove_fundamental_unitsdeclare_fundamental_unitsの効果を戻します。

load(ezunits)はこれらの関数をロードします。

例:

 
(%i1) load ("ezunits") $
(%i2) declare_fundamental_dimensions (money, cattle, happiness);
(%o2)                         done
(%i3) declare_fundamental_units (dollar, money, goat, cattle, smile, happiness);
(%o3)                 [dollar, goat, smile]
(%i4) dimensions (100 ` dollar/goat/km^2);
                             money
(%o4)                    --------------
                                      2
                         cattle length
(%i5) dimensions (x ` smile/kg);
                            happiness
(%o5)                       ---------
                              mass
(%i6) fundamental_units (money*cattle/happiness);
0 errors, 0 warnings
                           dollar goat
(%o6)                      -----------
                              smile

Categories:  Package ezunits

関数: dimensions (x)
関数: dimensions_as_list (x)

dimensionsは基礎次元の積と冪で構成された式として次元量 xの次元を返します。

dimensions_as_listはそれぞれの要素が xの次元に関して対応する基礎次元の冪を示す整数であるようなリストとして次元量 xの次元を返します。

load(ezunits)はこれらの関数をロードします。

例:

 
(%i1) load ("ezunits")$
(%i2) dimensions (1000 ` kg*m^2/s^3);
                                2
                          length  mass
(%o2)                     ------------
                                 3
                             time
(%i3) declare_units (foo, acre*ft/hour);
                             acre ft
(%o3)                        -------
                              hour
(%i4) dimensions (foo);
                                   3
                             length
(%o4)                        -------
                              time
 
(%i1) load ("ezunits")$
(%i2) fundamental_dimensions;
(%o2)  [length, mass, time, charge, temperature, quantity]
(%i3) dimensions_as_list (1000 ` kg*m^2/s^3);
(%o3)                 [2, 1, - 3, 0, 0, 0]
(%i4) declare_units (foo, acre*ft/hour);
                             acre ft
(%o4)                        -------
                              hour
(%i5) dimensions_as_list (foo);
(%o5)                 [3, 0, - 1, 0, 0, 0]

Categories:  Package ezunits

関数: fundamental_units  
    fundamental_units (x)  
    fundamental_units ()

fundamental_units(x)dimensions(x)が決定するように xの基本次元に関連付けられた単位を返します。

xは文字通り次元式 a ` bか、 declare_unitsを介して宣言された単位を持つシンボルか それらのいずれかもしくは両方を含む式かもしれません。

fundamental_units()declare_fundamental_unitsが宣言するように、 既知の基本単位すべてのリストを返します。

load(ezunits)はこの関数をロードします。

例:

 
(%i1) load ("ezunits")$
(%i2) fundamental_units ();
(%o2)                 [m, kg, s, A, K, mol]
(%i3) fundamental_units (100 ` mile/hour);
                                m
(%o3)                           -
                                s
(%i4) declare_units (aa, g/foot^2);
                                g
(%o4)                         -----
                                  2
                              foot
(%i5) fundamental_units (aa);
                               kg
(%o5)                          --
                                2
                               m

Categories:  Package ezunits

関数: dimensionless (L)

次元量のリスト Lから形成できる無次元量の基底を返します。

load(ezunits)はこの関数をロードします。

例:

 
(%i1) load ("ezunits") $
(%i2) dimensionless ([x ` m, y ` m/s, z ` s]);
0 errors, 0 warnings
0 errors, 0 warnings
                               y z
(%o2)                         [---]
                                x

基礎物理量から派生される無次元量。 リストの一番目の要素は微細構造定数に比例することに注意してください。

 
(%i1) load ("ezunits") $
(%i2) load ("physical_constants") $
(%i3) dimensionless([%h_bar, %m_e, %m_P, %%e, %c, %e_0]);
0 errors, 0 warnings
0 errors, 0 warnings
                              2
                           %%e        %m_e
(%o3)                [--------------, ----]
                      %c %e_0 %h_bar  %m_P

Categories:  Package ezunits

関数: natural_unit (expr, [v_1, ..., v_n])

dimension(expr) = dimension(v_1^e_1 ... v_n^e_n)であるような指数 e_1, ..., e_nを見つけます。

load(ezunits)はこの関数をロードします。

例:

Categories:  Package ezunits


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

57. f90


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

57.1 Functions and Variables for f90

関数: f90 (expr_1, …, expr_n)

1つか複数の式 expr_1, …, expr_nを Fortran 90プログラムとして印字します。 出力は標準出力に印字されます。

f90は Fortran 90のいわゆる「自由形式」入力フォーマットで出力を印字します: 列位置に特別な注意はありません。 長い行は、アンパサンド &継続文字で固定幅に分割されます。

load(f90)はこの関数をロードします。 関数 fortranも参照してください。

例:

 
(%i1) load ("f90")$
(%i2) foo : expand ((xxx + yyy + 7)^4);
         4            3         3        2    2             2
(%o2) yyy  + 4 xxx yyy  + 28 yyy  + 6 xxx  yyy  + 84 xxx yyy
          2        3             2
 + 294 yyy  + 4 xxx  yyy + 84 xxx  yyy + 588 xxx yyy + 1372 yyy
      4         3          2
 + xxx  + 28 xxx  + 294 xxx  + 1372 xxx + 2401
(%i3) f90 ('foo = foo);
foo = yyy**4+4*xxx*yyy**3+28*yyy**3+6*xxx**2*yyy**2+84*xxx*yyy**2&
+294*yyy**2+4*xxx**3*yyy+84*xxx**2*yyy+588*xxx*yyy+1372*yyy+xxx**&
4+28*xxx**3+294*xxx**2+1372*xxx+2401
(%o3)                         false

複数式。 with_stdout関数を介して標準出力をファイルにとらえます。

 
(%i1) load ("f90")$
(%i2) foo : sin (3*x + 1) - cos (7*x - 2);
(%o2)              sin(3 x + 1) - cos(7 x - 2)
(%i3) with_stdout ("foo.f90",
                   f90 (x = 0.25, y = 0.625, 'foo = foo, 'stop, 'end));
(%o3)                         false
(%i4) printfile ("foo.f90");
x = 0.25
y = 0.625
foo = sin(3*x+1)-cos(7*x-2)
stop
end
(%o4)                        foo.f90


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

58. finance


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

58.1 Introduction to finance

これは金融パッケージ(第0.1版)です。

すべての関数において、 rateは複利率であり、 numは期間で正でなくてはいけません。 また、 flowはキャッシュフローを示すので、産出はフローが負になり、投入は正になります。

このパッケージで定義された関数を使う前に、 load(finance)$と書いて パッケージをロードしなければいけないことに注意してください。

著者: Nicolas Guarin Zapata.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

58.2 Functions and Variables for finance

関数: days360 (year1,month1,day1,year2,month2,day2)

1年は 360日、ひと月は30日と仮定して 2つの日付の距離を計算します。

例:

 
(%i1) load(finance)$
(%i2) days360(2008,12,16,2007,3,25);
(%o2)                      - 621

Categories:  Package finance

関数: fv (rate,PV,num)

ある利率を与えられたとして、現在価値の将来価値を計算します。 rateは利率で、 PVは現在価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) fv(0.12,1000,3);
(%o2)                     1404.928

Categories:  Package finance

関数: pv (rate,FV,num)

ある利率を与えられたとして、将来価値の現在価値を計算します。 rateは利率で、 PVは現在価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) pv(0.12,1000,3);
(%o2)                711.7802478134108

Categories:  Package finance

関数: graph_flow (val)

時間順でマネーフローを、正の値は青で上に、負の値は赤で下にプロットします。 フローの向きは値の符号で与えられます。 valはフローの値のリストです。

例:

 
(%i1) load(finance)$
(%i2) graph_flow([-5000,-3000,800,1300,1500,2000])$

Categories:  Package finance

関数: annuity_pv (rate,PV,num)

(総額のような)現在価値がわかっている年金を計算できます。 年金は一定で定期払いです。 rateは利率で、 PVは現在価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) annuity_pv(0.12,5000,10);
(%o2)                884.9208207992202

Categories:  Package finance

関数: annuity_fv (rate,FV,num)

要望価値(将来価値)がわかっている年金を計算できます。 年金は一定で定期払いです。 rateは利率で、 PVは将来価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) annuity_fv(0.12,65000,10);
(%o2)                3703.970670389863

Categories:  Package finance

関数: geo_annuity_pv (rate,growing_rate,PV,num)

(総額のような)現在価値がわかっている年金を計算できます。 年金は割増定期払いです。 rateは利率で、 growing_rateは成長率、 PVは現在価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) geo_annuity_pv(0.14,0.05,5000,10);
(%o2)                802.6888176505123

Categories:  Package finance

関数: geo_annuity_fv (rate,growing_rate,FV,num)

要望価値(将来価値)がわかっている年金を計算できます。 年金は割増定期払いです。 rateは利率で、 growing_rateは成長率、 FVは将来価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) geo_annuity_fv(0.14,0.05,5000,10);
(%o2)                216.5203395312695

Categories:  Package finance

関数: amortization (rate,amount,num)

特定率で決定された償却表。 rateは利率で、 amountは総価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) amortization(0.05,56000,12)$
      "n"    "Balance"     "Interest"   "Amortization"  "Payment"
     0.000     56000.000         0.000         0.000         0.000
     1.000     52481.777      2800.000      3518.223      6318.223
     2.000     48787.643      2624.089      3694.134      6318.223
     3.000     44908.802      2439.382      3878.841      6318.223
     4.000     40836.019      2245.440      4072.783      6318.223
     5.000     36559.597      2041.801      4276.422      6318.223
     6.000     32069.354      1827.980      4490.243      6318.223
     7.000     27354.599      1603.468      4714.755      6318.223
     8.000     22404.106      1367.730      4950.493      6318.223
     9.000     17206.088      1120.205      5198.018      6318.223
    10.000     11748.170       860.304      5457.919      6318.223
    11.000      6017.355       587.408      5730.814      6318.223
    12.000         0.000       300.868      6017.355      6318.223

Categories:  Package finance

関数: arit_amortization (rate,increment,amount,num)

arit_amortizationによって、 特定率で決定された割増払いの償却表を計算することができます。 支払いは一定ではなく、算術級数的成長を示し、増分は "Payment"列の連続する2行の差であることに注意してください。 rateは利率で、 incrementは増分、 amountは総価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) arit_amortization(0.05,1000,56000,12)$
      "n"    "Balance"     "Interest"   "Amortization"  "Payment"
     0.000     56000.000         0.000         0.000         0.000
     1.000     57403.679      2800.000     -1403.679      1396.321
     2.000     57877.541      2870.184      -473.863      2396.321
     3.000     57375.097      2893.877       502.444      3396.321
     4.000     55847.530      2868.755      1527.567      4396.321
     5.000     53243.586      2792.377      2603.945      5396.321
     6.000     49509.443      2662.179      3734.142      6396.321
     7.000     44588.594      2475.472      4920.849      7396.321
     8.000     38421.703      2229.430      6166.892      8396.321
     9.000     30946.466      1921.085      7475.236      9396.321
    10.000     22097.468      1547.323      8848.998     10396.321
    11.000     11806.020      1104.873     10291.448     11396.321
    12.000        -0.000       590.301     11806.020     12396.321

Categories:  Package finance

関数: geo_amortization (rate,growing_rate,amount,num)

geo_amortizationによって、 ある率、ある総額、ある期間で決定された償却表を見つけることができます。

支払いは一定ではなく、幾何級数的成長を示し、 growing_rateは "Payment"列の連続する 2行の比率であることに注意してください。 rateは利率で、 amountは総価値、 numは期間です。

例:

 
(%i1) load(finance)$
(%i2) geo_amortization(0.05,0.03,56000,12)$
      "n"    "Balance"     "Interest"   "Amortization"  "Payment"
     0.000     56000.000         0.000         0.000         0.000
     1.000     53365.296      2800.000      2634.704      5434.704
     2.000     50435.816      2668.265      2929.480      5597.745
     3.000     47191.930      2521.791      3243.886      5765.677
     4.000     43612.879      2359.596      3579.051      5938.648
     5.000     39676.716      2180.644      3936.163      6116.807
     6.000     35360.240      1983.836      4316.475      6300.311
     7.000     30638.932      1768.012      4721.309      6489.321
     8.000     25486.878      1531.947      5152.054      6684.000
     9.000     19876.702      1274.344      5610.176      6884.520
    10.000     13779.481       993.835      6097.221      7091.056
    11.000      7164.668       688.974      6614.813      7303.787
    12.000         0.000       358.233      7164.668      7522.901

Categories:  Package finance

関数: saving (rate,amount,num)

savingによって、定額預金での価値を表すテーブルを見つけることができます。 amountは要望量を、 numは預金の期間を表します。

例:

 
(%i1) load(finance)$
(%i2) saving(0.15,12000,15)$
      "n"    "Balance"     "Interest"   "Payment"
     0.000         0.000         0.000         0.000
     1.000       252.205         0.000       252.205
     2.000       542.240        37.831       252.205
     3.000       875.781        81.336       252.205
     4.000      1259.352       131.367       252.205
     5.000      1700.460       188.903       252.205
     6.000      2207.733       255.069       252.205
     7.000      2791.098       331.160       252.205
     8.000      3461.967       418.665       252.205
     9.000      4233.467       519.295       252.205
    10.000      5120.692       635.020       252.205
    11.000      6141.000       768.104       252.205
    12.000      7314.355       921.150       252.205
    13.000      8663.713      1097.153       252.205
    14.000     10215.474      1299.557       252.205
    15.000     12000.000      1532.321       252.205

Categories:  Package finance

関数: npv (rate,val)

プロジェクトに関する存続可能性を評価するために、価値系列の正味現在価値を計算します。 valは変動キャッシュフロー(varying cash flow)のリストです。

例:

 
(%i1) load(finance)$
(%i2) npv(0.25,[100,500,323,124,300]);
(%o2)                714.4703999999999

Categories:  Package finance

関数: irr (val,IO)

IRR (内部利益率)は正味現在価値をゼロにする割引率の値です。 valは変動キャッシュフロー(varying cash flow)のリストで、I0は初期投資です。

例:

 
(%i1) load(finance)$
(%i2) res:irr([-5000,0,800,1300,1500,2000],0)$
(%i3) rhs(res[1][1]);
(%o3)                .03009250374237132

Categories:  Package finance

関数: benefit_cost (rate,input,output)

便益コスト比を計算します。 便益は投入の正味現在価値 (NPV)で、 コストは産出の正味現在価値 (NPV)です。 もし特定の期間に関して投入価値か産出価値がゼロなら、投入/産出比はその期間で 0となることに注意してください。 rateは利率であり、 inputは投入価値のリスト、 outputは産出価値のリストです。

例:

 
(%i1) load(finance)$
(%i2) benefit_cost(0.24,[0,300,500,150],[100,320,0,180]);
(%o2)               1.427249324905784

Categories:  Package finance


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59. fractals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59.1 Introduction to fractals

このパッケージはよく知られているフラクタルをいくつか定義します:

- ランダム IFS(反復函数系)を使って: Sierpinski三角形、木、シダ

- 複素フラクタル: Mandelbrotと Julia集合

- Koch雪片集合

- Peano写像: Sierpinskiと Hilbert写像

著者: José Ramírez Labrador.

質問、提案、バグに関しては、 pepe DOT ramirez AAATTT uca DOT esまで、 私に気兼ねせずコンタクトしてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59.2 Definitions for IFS fractals

いくつかのフラクタルは 縮小アフィン変換をランダムに繰り返し適用することで生成することができます; Hoggar S. G., "Mathematics for computer graphics", Cambridge University Press 1994を参照してください。

いくつかの縮小アフィン変換のリストを定義して、 繰り返しの中で変換をランダムに選択します。 変換の選択の確率は縮小比に関係しなければいけません。

変換を変えて別のフラクタルを見つけることができます。

関数: sierpinskiale (n)

Sierpinski三角形: 3つの縮小写像; .5の縮小定数と変形; すべての写像は同じ縮小比です。 引数 nは十分大きく、10000以上でなければいけません、

例:

 
(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,sierpinskiale(n)], [style,dots])$

Categories:  Package fractals

関数: treefale (n)

すべて同じ縮小比を持つ3つの縮小写像。 引数 nは十分大きく、10000以上でなければいけません、

例:

 
(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,treefale(n)], [style,dots])$

Categories:  Package fractals

関数: fernfale (n)

変換を選択する確率が縮小比に関係する、4つの縮小写像。 引数 nは十分大きく、10000以上でなければいけません、

例:

 
(%i1) load(fractals)$
(%i2) n: 10000$
(%i3) plot2d([discrete,fernfale(n)], [style,dots])$

Categories:  Package fractals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59.3 Definitions for complex fractals

関数: mandelbrot_set (x, y)

Mandelbrot集合。

例:

たくさんの演算を実行しなければいけないので、このプログラムは時間がかかります; 計算時間は格子点の数にも関係します。

 
(%i1) load(fractals)$
(%i2) plot3d (mandelbrot_set, [x, -2.5, 1], [y, -1.5, 1.5],
                [gnuplot_preamble, "set view map"],
                [gnuplot_pm3d, true],
                [grid, 150, 150])$

Categories:  Package fractals

関数: julia_set (x, y)

Julia集合。

たくさんの演算を実行しなければいけないので、このプログラムは時間がかかります; 計算時間は格子点の数にも関係します。

例:

 
(%i1) load(fractals)$
(%i2) plot3d (julia_set, [x, -2, 1], [y, -1.5, 1.5],
                [gnuplot_preamble, "set view map"],
                [gnuplot_pm3d, true],
                [grid, 150, 150])$

julia_parameterも参照してください。

Categories:  Package fractals

オプション変数: julia_parameter

デフォルト値: %i

Juliaフラクタルの複素パラメータ。 デフォルト値は%iです; 値-.745+%i*.113002, -.39054-%i*.58679, -.15652+%i*1.03225, -.194+%i*.6557, .011031-%i*.67037などはいかがでしょう。

Categories:  Package fractals

関数: julia_sin (x, y)

関数 julia_setが変換 julia_parameter+z^2を実装する一方、関数 julia_sinjulia_parameter*sin(z)を実装します。 詳細はソースコードを参照してください。

たくさんの sinを計算するので、このプログラムは重いです。

例:

たくさんの演算を実行しなければいけないので、このプログラムは時間がかかります; 計算時間は格子点の数にも関係します。

 
(%i1) load(fractals)$
(%i2) julia_parameter:1+.1*%i$
(%i3) plot3d (julia_sin, [x, -2, 2], [y, -3, 3],
                [gnuplot_preamble, "set view map"],
                [gnuplot_pm3d, true],
                [grid, 150, 150])$

julia_parameterも参照してください。

Categories:  Package fractals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59.4 Definitions for Koch snowflakes

関数: snowmap (ent, nn)

Koch雪片集合。 関数 snowmapは複素平面内の初期値の閉多角形の頂点上に雪 Koch写像をプロットします。 ここで多角形の向きが重要です。 引数 nnは Koch変換の繰り返し適用の回数です; nnは小さく(5か6で)なければいけません。

例:

 
(%i1) load(fractals)$
(%i2) plot2d([discrete,
              snowmap([1,exp(%i*%pi*2/3),exp(-%i*%pi*2/3),1],4)])$
(%i3) plot2d([discrete,
              snowmap([1,exp(-%i*%pi*2/3),exp(%i*%pi*2/3),1],4)])$
(%i4) plot2d([discrete, snowmap([0,1,1+%i,%i,0],4)])$
(%i5) plot2d([discrete, snowmap([0,%i,1+%i,1,0],4)])$

Categories:  Package fractals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

59.5 Definitions for Peano maps

ある面積を覆う連続曲線。 警告: nと共に点の数は指数関数的に増加します。

関数: hilbertmap (nn)

Hilbert写像。 nnは(例えば 5とか)小さくなければいけません。 もし 7以上なら Maximaはクラッシュするかもしれません。

例:

 
(%i1) load(fractals)$
(%i2) plot2d([discrete,hilbertmap(6)])$

Categories:  Package fractals

関数: sierpinskimap (nn)

Sierpinski写像。 nnは(例えば5とか)小さくなければいけません。 もし 7以上なら Maximaはクラッシュするかもしれません。

例:

 
(%i1) load(fractals)$
(%i2) plot2d([discrete,sierpinskimap(6)])$

Categories:  Package fractals


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

60. ggf


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

60.1 Functions and Variables for ggf

オプション変数: GGFINFINITY

デフォルト値: 3

これは関数 ggfのオプション変数です。

母関数の連分数を計算する時、 (厳密に) GGFINFINITYより大きな次数を持つ部分商は捨てます。 現在のコンバージェントは母関数の正確な値として考えられます; 部分商すべての次数はたいてい 0か 1です; もしより大きな値を使うなら、十分精度の高い計算を行うために十分な項を与えるべきです。

ggfも参照してください。

Categories:  Package ggf

オプション変数: GGFCFMAX

デフォルト値: 3

これは関数 ggfのオプション変数です。

母関数の連分数を計算する時、もし GGFCFMAX個の部分商を計算した後、よい結果が見つからないなら (GGFINFINITYフラグを参照してください)、 母関数を2つの多項式の分数でないようにみなし、関数を抜けます。 もっと複雑な母関数のためにより大きな値を自由に入れてください。

ggfも参照してください。

Categories:  Package ggf

関数: ggf (l)

(もし母関数が2つの多項式の分数なら) 与えられた最初の数項に対する数列の母関数を計算します。 lは数のリストです。

解は2つの多項式の分数として返されます。 解が見つからなかったら doneを返します。

この関数はグローバル変数 GGFINFINITYGGFCFMAXで制御されます。 GGFINFINITYGGFCFMAXも参照してください。

この関数を使うには最初に load("ggf")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61. graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.1 Introduction to graphs

graphsパッケージは Maximaに無向グラフ (以下グラフ)とダイグラフ(以下ダイグラフ)のデータ構造を提供します。 ダイグラフは uから vへの有向辺と vから uへの有向辺を持つことがありますが、 グラフやダイグラフは単純です(多重辺もループも持ちません)。

内部的にはグラフは隣接リストで表現され、 lisp構造として実装されます。 頂点はそれらの id (idは整数)で識別されます。 辺/弧は長さ 2のリストで表現されます。 グラフ/ダイグラフの頂点にラベルを割り当てることができ、 グラフ/ダイグラフの辺/弧に重みを割り当てることができます。

グラフを描画するための draw_graph関数があります。 グラフは頂点配置アルゴリズムを使って描画されます。 draw_graphhttp://www.graphviz.orgから入手可能な graphvizプログラムを使うこともできます。 draw_graphは Maxima drawパッケージに基づいています。

graphsパッケージを使うには最初に load(graphs)でロードしてください。

Categories:  Share packages · Package graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2 Functions and Variables for graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2.1 Building graphs

関数: create_graph  
    create_graph (v_list, e_list)  
    create_graph (n, e_list)  
    create_graph (v_list, e_list, directed)

頂点の集合 v_list上に辺 e_listを使って新しいグラフを生成します。

v_listは頂点のリスト ([v1, v2,..., vn])もしくは頂点ラベルを持つ頂点のリスト ([[v1,l1], [v2,l2],..., [vn,ln]])です。

nは頂点の数です。 頂点は 0から n-1までの整数で識別されます。 (訳注: 1から始まる Maximaのリストの添字の慣例とは異なることに注意してください。)

e_listは辺のリスト ([e1, e2,..., em])もしくは辺の重みを持つ辺のリスト ([[e1, w1], ..., [em, wm]])です。

もし directedfalseでないならダイグラフを返します。

例1: 頂点 3つの循環を生成する。

 
(%i1) load ("graphs")$
(%i2) g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
(%i3) print_graph(g)$
Graph on 3 vertices with 3 edges.
Adjacencies:
  3 :  1  2
  2 :  3  1
  1 :  3  2

例2: 辺の重みを持つ頂点 3つの循環を生成する。

 
(%i1) load ("graphs")$
(%i2) g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
                          [[1,3], 3.0]])$
(%i3) print_graph(g)$
Graph on 3 vertices with 3 edges.
Adjacencies:
  3 :  1  2
  2 :  3  1
  1 :  3  2

例3: ダイグラフを生成する:

 
(%i1) load ("graphs")$
(%i2) d : create_graph(
        [1,2,3,4],
        [
         [1,3], [1,4],
         [2,3], [2,4]
        ],
        'directed = true)$
(%i3) print_graph(d)$
Digraph on 4 vertices with 4 arcs.
Adjacencies:
  4 :
  3 :
  2 :  4  3
  1 :  4  3

Categories:  Package graphs

関数: copy_graph (g)

グラフ gのコピーを返します。

関数: circulant_graph (n, d)

パラメータ ndを持つ巡回グラフを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : circulant_graph(10, [1,3])$
(%i3) print_graph(g)$
Graph on 10 vertices with 20 edges.
Adjacencies:
  9 :  2  6  0  8
  8 :  1  5  9  7
  7 :  0  4  8  6
  6 :  9  3  7  5
  5 :  8  2  6  4
  4 :  7  1  5  3
  3 :  6  0  4  2
  2 :  9  5  3  1
  1 :  8  4  2  0
  0 :  7  3  9  1

関数: clebsch_graph ()

Clebschグラフを返します。

関数: complement_graph (g)

グラフ gの補グラフを返します。

関数: complete_bipartite_graph (n, m)

n+mこの頂点上の完全二部グラフを返します。

関数: complete_graph (n)

nこの頂点上の完全グラフを返します。

関数: cycle_digraph (n)

n個の頂点上のダイグラフを返します。

関数: cycle_graph (n)

nこの頂点上の閉路を返します。

関数: cuboctahedron_graph (n)

立方八面体グラフを返します。

関数: cube_graph (n)

n次元立方体を返します。

関数: dodecahedron_graph ()

十二面体グラフを返します。

関数: empty_graph (n)

n個の頂点上の空グラフを返します。

関数: flower_snark (n)

4n個の頂点上の花グラフを返します。

例:

 
(%i1) load ("graphs")$
(%i2) f5 : flower_snark(5)$
(%i3) chromatic_index(f5);
(%o3)                           4

関数: from_adjacency_matrix (A)

隣接行列 Aで表現されるグラフを返します。

関数: frucht_graph ()

Fruchtグラフを返します。

関数: graph_product (g1, g1)

グラフ g1g2の直積を返します。

例:

 
(%i1) load ("graphs")$
(%i2) grid : graph_product(path_graph(3), path_graph(4))$
(%i3) draw_graph(grid)$

figures/graphs01

関数: graph_union (g1, g1)

グラフ g1g2の和を返します。

関数: grid_graph (n, m)

n x mグリッドを返します。

関数: great_rhombicosidodecahedron_graph ()

大菱形二十・十二面体グラフを返します。

関数: great_rhombicuboctahedron_graph ()

大斜方立方八面体グラフを返します。

関数: grotzch_graph ()

Grotzchグラフを返します。

関数: heawood_graph ()

Heawoodグラフを返します。

関数: icosahedron_graph ()

二十面体グラフを返します。

関数: icosidodecahedron_graph ()

二十・十二面体グラフを返します。

関数: induced_subgraph (V, g)

グラフ gの頂点の部分集合 V上の誘導部分グラフを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) V : [0,1,2,3,4]$
(%i4) g : induced_subgraph(V, p)$
(%i5) print_graph(g)$
Graph on 5 vertices with 5 edges.
Adjacencies:
  4 :  3  0
  3 :  2  4
  2 :  1  3
  1 :  0  2
  0 :  1  4

関数: line_graph (g)

グラフ gの折れ線グラフを返します。

関数: make_graph  
    make_graph (vrt, f)  
    make_graph (vrt, f, oriented)

述語論理関数 fを使ってグラフを生成します。

vrtは頂点か整数のリスト/集合です。 もし vrtが整数なら、 グラフの頂点は 1から vrtまでの整数です。

fは述語論理関数です。 もし f(a,b)=trueなら 2つの頂点 abを結合します。

もし directedfalseでないならグラフは有向です。

例 1:

 
(%i1) load(graphs)$
(%i2) g : make_graph(powerset({1,2,3,4,5}, 2), disjointp)$
(%i3) is_isomorphic(g, petersen_graph());
(%o3)                         true
(%i4) get_vertex_label(1, g);
(%o4)                        {1, 2}

例 2:

 
(%i1) load(graphs)$
(%i2) f(i, j) := is (mod(j, i)=0)$
(%i3) g : make_graph(20, f, directed=true)$
(%i4) out_neighbors(4, g);
(%o4)                    [8, 12, 16, 20]
(%i5) in_neighbors(18, g);
(%o5)                    [1, 2, 3, 6, 9]

関数: mycielski_graph (g)

グラフ gの Mycielskiグラフを返します。

関数: new_graph ()

頂点も辺も持たないグラフを返します。

関数: path_digraph (n)

n個の頂点上の有向道を返します。

関数: path_graph (n)

n個の頂点上の道を返します。

関数: petersen_graph  
    petersen_graph ()  
    petersen_graph (n, d)

Petersenグラフ P_{n,d}を返します。 ndのデフォルト値は n=5d=2です。

関数: random_bipartite_graph (a, b, p)

a+b個の頂点上のランダムな2部グラフを返します。 辺それぞれは確率 pで存在します。

関数: random_digraph (n, p)

n個の頂点上のランダムなダイグラフを返します。 弧それぞれは確率 pで存在します。

関数: random_regular_graph  
    random_regular_graph (n)  
    random_regular_graph (n, d)

n個の頂点上のランダムな d正則グラフを返します。 dのデフォルト値は d=3です。

関数: random_graph (n, p)

n個の頂点上のランダムグラフを返します。 辺それぞれは確率 pで存在します。

関数: random_graph1 (n, m)

n個の頂点とランダムな m個の辺上のランダムグラフを返します。

関数: random_network (n, p, w)

n個の頂点上のランダムネットワークを返します。 弧それぞれは確率 pで存在し、範囲 [0,w]の中に重みを持ちます。 関数はリスト [network, source, sink]を返します。

例:

 
(%i1) load ("graphs")$
(%i2) [net, s, t] : random_network(50, 0.2, 10.0);
(%o2)                   [DIGRAPH, 50, 51]
(%i3) max_flow(net, s, t)$
(%i4) first(%);
(%o4)                   27.65981397932507

関数: random_tournament (n)

n個の頂点上のランダムなトーナメントを返します。

関数: random_tree (n)

n個の頂点上のランダムな木を返します。

関数: small_rhombicosidodecahedron_graph ()

斜方二十・十二面体グラフを返します。

関数: small_rhombicuboctahedron_graph ()

斜方立方八面体グラフを返します。

関数: snub_cube_graph ()

変形立方体グラフを返します。

関数: snub_dodecahedron_graph ()

変形十二面体グラフを返します。

関数: truncated_cube_graph ()

切頂六面体グラフを返します。

関数: truncated_dodecahedron_graph ()

切頂十二面体グラフを返します。

関数: truncated_icosahedron_graph ()

切頂二十面体グラフを返します。

関数: truncated_tetrahedron_graph ()

切頂四面体グラフを返します。

関数: tutte_graph ()

Tutteグラフを返します。

関数: underlying_graph (g)

ダイグラフ gの台グラフを返します。

関数: wheel_graph (n)

n+1個の頂点上の車輪グラフを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2.2 Graph properties

関数: adjacency_matrix (gr)

グラフ grの隣接行列を返します。

例:

 
(%i1) load ("graphs")$
(%i2) c5 : cycle_graph(4)$
(%i3) adjacency_matrix(c5);
                         [ 0  1  0  1 ]
                         [            ]
                         [ 1  0  1  0 ]
(%o3)                    [            ]
                         [ 0  1  0  1 ]
                         [            ]
                         [ 1  0  1  0 ]

関数: average_degree (gr)

グラフ grに関する平均次数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) average_degree(grotzch_graph());
                               40
(%o2)                          --
                               11

関数: biconnected_components (gr)

グラフ grの2連結成分(の頂点集合)を返します

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph(
            [1,2,3,4,5,6,7],
            [
             [1,2],[2,3],[2,4],[3,4],
             [4,5],[5,6],[4,6],[6,7]
            ])$
(%i3) biconnected_components(g);
(%o3)        [[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]

figures/graphs13

関数: bipartition (gr)

グラフ grの頂点の二分割か、もし grが二部でないなら空のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) h : heawood_graph()$
(%i3) [A,B]:bipartition(h);
(%o3)  [[8, 12, 6, 10, 0, 2, 4], [13, 5, 11, 7, 9, 1, 3]]
(%i4) draw_graph(h, show_vertices=A, program=circular)$

figures/graphs02

関数: chromatic_index (gr)

グラフ grの彩色指数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) chromatic_index(p);
(%o3)                           4

関数: chromatic_number (gr)

グラフ grの彩色数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) chromatic_number(cycle_graph(5));
(%o2)                           3
(%i3) chromatic_number(cycle_graph(6));
(%o3)                           2

関数: clear_edge_weight (e, gr)

グラフ grの辺 eの重みを削除します。

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
(%i3) get_edge_weight([0,1], g);
(%o3)                          1.5
(%i4) clear_edge_weight([0,1], g)$
(%i5) get_edge_weight([0,1], g);
(%o5)                           1

関数: clear_vertex_label (v, gr)

グラフ grの頂点 vのラベルを削除します。

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
(%i3) get_vertex_label(0, g);
(%o3)                         Zero
(%i4) clear_vertex_label(0, g);
(%o4)                         done
(%i5) get_vertex_label(0, g);
(%o5)                         false

関数: connected_components (gr)

グラフ grの連携成分(の頂点集合)を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g: graph_union(cycle_graph(5), path_graph(4))$
(%i3) connected_components(g);
(%o3)            [[1, 2, 3, 4, 0], [8, 7, 6, 5]]

関数: diameter (gr)

グラフ grの直径を返します。

例:

 
(%i1) load ("graphs")$
(%i2) diameter(dodecahedron_graph());
(%o2)                           5

関数: edge_coloring (gr)

グラフ grの辺の最適色づけを返します。

関数は彩色指数と grの辺の色付けを表すリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) [ch_index, col] : edge_coloring(p);
(%o3) [4, [[[0, 5], 3], [[5, 7], 1], [[0, 1], 1], [[1, 6], 2],
[[6, 8], 1], [[1, 2], 3], [[2, 7], 4], [[7, 9], 2], [[2, 3], 2],
[[3, 8], 3], [[5, 8], 2], [[3, 4], 1], [[4, 9], 4], [[6, 9], 3],
[[0, 4], 2]]]
(%i4) assoc([0,1], col);
(%o4)                           1
(%i5) assoc([0,5], col);
(%o5)                           3

関数: degree_sequence (gr)

グラフ grの頂点次数のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) degree_sequence(random_graph(10, 0.4));
(%o2)            [2, 2, 2, 2, 2, 2, 3, 3, 3, 3]

関数: edge_connectivity (gr)

グラフ grの辺連結性を返します。

min_edge_cutも参照してください。

関数: edges (gr)

(有向)グラフ grの辺(弧)のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) edges(complete_graph(4));
(%o2)   [[2, 3], [1, 3], [1, 2], [0, 3], [0, 2], [0, 1]]

関数: get_edge_weight  
    get_edge_weight (e, gr)  
    get_edge_weight (e, gr, ifnot)

グラフ grの辺 eの重みを返します。

もし辺に割り当てられた重みがないなら、関数は 1を返します。 もし辺がグラフの中に存在しないなら、関数はエラーをシグナルするか、オプション引数 ifnotを返します。

例:

 
(%i1) load ("graphs")$
(%i2) c5 : cycle_graph(5)$
(%i3) get_edge_weight([1,2], c5);
(%o3)                           1
(%i4) set_edge_weight([1,2], 2.0, c5);
(%o4)                         done
(%i5) get_edge_weight([1,2], c5);
(%o5)                          2.0

関数: get_vertex_label (v, gr)

グラフ grの頂点 vのラベルを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
(%i3) get_vertex_label(0, g);
(%o3)                         Zero

関数: graph_charpoly (gr, x)

グラフ grの(変数 xに関する)特性多項式を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) graph_charpoly(p, x), factor;
                                   5        4
(%o3)               (x - 3) (x - 1)  (x + 2)

関数: graph_center (gr)

グラフ grの中心を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : grid_graph(5,5)$
(%i3) graph_center(g);
(%o3)                         [12]

関数: graph_eigenvalues (gr)

グラフ grの固有値を返します。 関数は maxima eigenvalues関数と同じフォーマットで固有値を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) graph_eigenvalues(p);
(%o3)               [[3, - 2, 1], [1, 4, 5]]

関数: graph_periphery (gr)

グラフ grの外周を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : grid_graph(5,5)$
(%i3) graph_periphery(g);
(%o3)                    [24, 20, 4, 0]

関数: graph_size (gr)

グラフ grの辺の数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) graph_size(p);
(%o3)                          15

関数: graph_order (gr)

グラフ grの頂点の数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) graph_order(p);
(%o3)                          10

関数: girth (gr)

grの最短閉路の長さを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : heawood_graph()$
(%i3) girth(g);
(%o3)                           6

関数: hamilton_cycle (gr)

グラフ grの Hamilton閉路を返します。 もし grがハミルトニアンでないなら空のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) c : cube_graph(3)$
(%i3) hc : hamilton_cycle(c);
(%o3)              [7, 3, 2, 6, 4, 0, 1, 5, 7]
(%i4) draw_graph(c, show_edges=vertices_to_cycle(hc))$

figures/graphs03

関数: hamilton_path (gr)

グラフ grの Hamilton経路を返します。 もし grが Hamilton経路を持たないなら空のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) hp : hamilton_path(p);
(%o3)            [0, 5, 7, 2, 1, 6, 8, 3, 4, 9]
(%i4) draw_graph(p, show_edges=vertices_to_path(hp))$

figures/graphs04

関数: isomorphism (gr1, gr2)

グラフ/ダイグラフ gr1gr2の間の同型写像を返します。 もし gr1gr2が同型でないなら、空のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
(%i3) isomorphism(clk5, petersen_graph());
(%o3) [9 -> 0, 2 -> 1, 6 -> 2, 5 -> 3, 0 -> 4, 1 -> 5, 3 -> 6,
                                          4 -> 7, 7 -> 8, 8 -> 9]

関数: in_neighbors (v, gr)

ダイグラフ grの頂点 vの内隣接点のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : path_digraph(3)$
(%i3) in_neighbors(2, p);
(%o3)                          [1]
(%i4) out_neighbors(2, p);
(%o4)                          []

関数: is_biconnected (gr)

もし grが二連結なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_biconnected(cycle_graph(5));
(%o2)                         true
(%i3) is_biconnected(path_graph(5));
(%o3)                         false

関数: is_bipartite (gr)

もし grが二部(二彩色)なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_bipartite(petersen_graph());
(%o2)                         false
(%i3) is_bipartite(heawood_graph());
(%o3)                         true

関数: is_connected (gr)

もしグラフ grが連結なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
(%o2)                         false

関数: is_digraph (gr)

もし grがダイグラフなら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_digraph(path_graph(5));
(%o2)                         false
(%i3) is_digraph(path_digraph(5));
(%o3)                         true

関数: is_edge_in_graph (e, gr)

もし eが(有向)グラフ gの辺(弧)なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) c4 : cycle_graph(4)$
(%i3) is_edge_in_graph([2,3], c4);
(%o3)                         true
(%i4) is_edge_in_graph([3,2], c4);
(%o4)                         true
(%i5) is_edge_in_graph([2,4], c4);
(%o5)                         false
(%i6) is_edge_in_graph([3,2], cycle_digraph(4));
(%o6)                         false

関数: is_graph (gr)

もし grがグラフなら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_graph(path_graph(5));
(%o2)                         true
(%i3) is_graph(path_digraph(5));
(%o3)                         false

関数: is_graph_or_digraph (gr)

もし grがグラフかダイグラフなら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_graph_or_digraph(path_graph(5));
(%o2)                         true
(%i3) is_graph_or_digraph(path_digraph(5));
(%o3)                         true

関数: is_isomorphic (gr1, gr2)

もし グラフ/ダイグラフ gr1gr2が同型なら trueを、 そうでないなら falseを返します。

isomorphismも参照してください。

例:

 
(%i1) load ("graphs")$
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
(%i3) is_isomorphic(clk5, petersen_graph());
(%o3)                         true

関数: is_planar (gr)

もし grが平面グラフなら trueを、 そうでないなら falseを返します。

使われているアルゴリズムはDemoucronのアルゴリズムです。 これは二次時間アルゴリズムです。

例:

 
(%i1) load ("graphs")$
(%i2) is_planar(dodecahedron_graph());
(%o2)                         true
(%i3) is_planar(petersen_graph());
(%o3)                         false
(%i4) is_planar(petersen_graph(10,2));
(%o4)                         true

関数: is_sconnected (gr)

もしダイグラフ grが強連結なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_sconnected(cycle_digraph(5));
(%o2)                         true
(%i3) is_sconnected(path_digraph(5));
(%o3)                         false

関数: is_vertex_in_graph (v, gr)

もし vがグラフ gの頂点なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) c4 : cycle_graph(4)$
(%i3) is_vertex_in_graph(0, c4);
(%o3)                         true
(%i4) is_vertex_in_graph(6, c4);
(%o4)                         false

関数: is_tree (gr)

もし grが木なら trueを、 そうでないなら falseを返します。

例:

 
(%i1) load ("graphs")$
(%i2) is_tree(random_tree(4));
(%o2)                         true
(%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
(%o3)                         false

関数: laplacian_matrix (gr)

グラフ grの Laplace行列を返します。

例:

 
(%i1) load ("graphs")$
(%i2) laplacian_matrix(cycle_graph(5));
                   [  2   - 1   0    0   - 1 ]
                   [                         ]
                   [ - 1   2   - 1   0    0  ]
                   [                         ]
(%o2)              [  0   - 1   2   - 1   0  ]
                   [                         ]
                   [  0    0   - 1   2   - 1 ]
                   [                         ]
                   [ - 1   0    0   - 1   2  ]

関数: max_clique (gr)

グラフ grの最大クリークを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : random_graph(100, 0.5)$
(%i3) max_clique(g);
(%o3)          [6, 12, 31, 36, 52, 59, 62, 63, 80]

関数: max_degree (gr)

グラフ grの頂点の最大次数と最大次数の頂点を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : random_graph(100, 0.02)$
(%i3) max_degree(g);
(%o3)                        [6, 79]
(%i4) vertex_degree(95, g);
(%o4)                           2

関数: max_flow (net, s, t)

ソース sとシンク tを持ち ネットワーク netを通る最大フローを返します。

関数は最大フローの値と最適フローで弧の重みを表現するリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) net : create_graph(
  [1,2,3,4,5,6],
  [[[1,2], 1.0],
   [[1,3], 0.3],
   [[2,4], 0.2],
   [[2,5], 0.3],
   [[3,4], 0.1],
   [[3,5], 0.1],
   [[4,6], 1.0],
   [[5,6], 1.0]],
  directed=true)$
(%i3) [flow_value, flow] : max_flow(net, 1, 6);
(%o3) [0.7, [[[1, 2], 0.5], [[1, 3], 0.2], [[2, 4], 0.2],
[[2, 5], 0.3], [[3, 4], 0.1], [[3, 5], 0.1], [[4, 6], 0.3],
[[5, 6], 0.4]]]
(%i4) fl : 0$
(%i5) for u in out_neighbors(1, net)
     do fl : fl + assoc([1, u], flow)$
(%i6) fl;
(%o6)                          0.7

関数: max_independent_set (gr)

グラフ grの最大独立集合を返します。

例:

 
(%i1) load ("graphs")$
(%i2) d : dodecahedron_graph()$
(%i3) mi : max_independent_set(d);
(%o3)             [0, 3, 5, 9, 10, 11, 18, 19]
(%i4) draw_graph(d, show_vertices=mi)$

figures/graphs05

関数: max_matching (gr)

グラフ grの最大マッチングを返します。

例:

 
(%i1) load ("graphs")$
(%i2) d : dodecahedron_graph()$
(%i3) m : max_matching(d);
(%o3) [[5, 7], [8, 9], [6, 10], [14, 19], [13, 18], [12, 17],
                               [11, 16], [0, 15], [3, 4], [1, 2]]
(%i4) draw_graph(d, show_edges=m)$

figures/graphs06

関数: min_degree (gr)

グラフ grの頂点の最小次数と最小次数の頂点を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : random_graph(100, 0.1)$
(%i3) min_degree(g);
(%o3)                        [3, 49]
(%i4) vertex_degree(21, g);
(%o4)                           9

関数: min_edge_cut (gr)

グラフ grの最小切断辺を返します。

edge_connectivityも参照してください。

関数: min_vertex_cover (gr)

グラフ grの最小頂点被覆を返します。

関数: min_vertex_cut (gr)

グラフ grの最小頂点切断を返します。

vertex_connectivityも参照してください。

関数: minimum_spanning_tree (gr)

グラフ grの最小全域木を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : graph_product(path_graph(10), path_graph(10))$
(%i3) t : minimum_spanning_tree(g)$
(%i4) draw_graph(g, show_edges=edges(t))$

figures/graphs07

関数: neighbors (v, gr)

グラフ grの頂点 vの隣接点のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : petersen_graph()$
(%i3) neighbors(3, p);
(%o3)                       [4, 8, 2]

関数: odd_girth (gr)

グラフ grの最短奇閉路の長さを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g : graph_product(cycle_graph(4), cycle_graph(7))$
(%i3) girth(g);
(%o3)                           4
(%i4) odd_girth(g);
(%o4)                           7

関数: out_neighbors (v, gr)

ダイグラフ grの頂点 vの外隣接点のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p : path_digraph(3)$
(%i3) in_neighbors(2, p);
(%o3)                          [1]
(%i4) out_neighbors(2, p);
(%o4)                          []

関数: planar_embedding (gr)

grの平面埋め込みでのfacial walkのリストを返します。 もし grが平面グラフでないなら falseを返します。

グラフ grは二連結でなければいけません。

使われるアルゴリズムは Demoucronのアルゴリズムです。 これは二次時間アルゴリズムです。

例:

 
(%i1) load ("graphs")$
(%i2) planar_embedding(grid_graph(3,3));
(%o2) [[3, 6, 7, 8, 5, 2, 1, 0], [4, 3, 0, 1], [3, 4, 7, 6],
                                      [8, 7, 4, 5], [1, 2, 5, 4]]

関数: print_graph (gr)

グラフ grについてのある情報を印字します。

例:

 
(%i1) load ("graphs")$
(%i2) c5 : cycle_graph(5)$
(%i3) print_graph(c5)$
Graph on 5 vertices with 5 edges.
Adjacencies:
  4 :  0  3
  3 :  4  2
  2 :  3  1
  1 :  2  0
  0 :  4  1
(%i4) dc5 : cycle_digraph(5)$
(%i5) print_graph(dc5)$
Digraph on 5 vertices with 5 arcs.
Adjacencies:
  4 :  0
  3 :  4
  2 :  3
  1 :  2
  0 :  1
(%i6) out_neighbors(0, dc5);
(%o6)                          [1]

Categories:  Package graphs

関数: radius (gr)

グラフ grの半径を返します。

例:

 
(%i1) load ("graphs")$
(%i2) radius(dodecahedron_graph());
(%o2)                           5

関数: set_edge_weight (e, w, gr)

グラフ grの辺 eに重み wを割り当てます。

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph([1, 2], [[[1,2], 1.2]])$
(%i3) get_edge_weight([1,2], g);
(%o3)                          1.2
(%i4) set_edge_weight([1,2], 2.1, g);
(%o4)                         done
(%i5) get_edge_weight([1,2], g);
(%o5)                          2.1

関数: set_vertex_label (v, l, gr)

グラフ grの頂点 vにラベル lを割り当てます。

例:

 
(%i1) load ("graphs")$
(%i2) g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
(%i3) get_vertex_label(1, g);
(%o3)                          One
(%i4) set_vertex_label(1, "oNE", g);
(%o4)                         done
(%i5) get_vertex_label(1, g);
(%o5)                          oNE

関数: shortest_path (u, v, gr)

グラフ gruから vまでの最短経路を返します。

例:

 
(%i1) load ("graphs")$
(%i2) d : dodecahedron_graph()$
(%i3) path : shortest_path(0, 7, d);
(%o3)                   [0, 1, 19, 13, 7]
(%i4) draw_graph(d, show_edges=vertices_to_path(path))$

figures/graphs08

関数: shortest_weighted_path (u, v, gr)

グラフ gruから vまでの最短重み付き経路とその長さを返します。

重み付き経路の長さは経路内の辺の辺重みの和です。 もし辺に重みがないなら、辺はデフォルト重み1を持ちます。

例:

 
(%i1) load ("graphs")$
(%i2) g: petersen_graph(20, 2)$
(%i3) for e in edges(g) do set_edge_weight(e, random(1.0), g)$
(%i4) shortest_weighted_path(0, 10, g);
(%o4) [2.575143920268482, [0, 20, 38, 36, 34, 32, 30, 10]]

関数: strong_components (gr)

ダイグラフ grの強成分を返します。

例:

 
(%i1) load ("graphs")$
(%i2) t : random_tournament(4)$
(%i3) strong_components(t);
(%o3)                 [[1], [0], [2], [3]]
(%i4) vertex_out_degree(3, t);
(%o4)                           3

関数: topological_sort (dag)

Returns a topological sorting of the vertices of a directed graph ダイグラフ dagの頂点のトポロジカルソートを返します。 もし dagが有向無閉路グラフなら空のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) g:create_graph(
         [1,2,3,4,5],
         [
          [1,2], [2,5], [5,3],
          [5,4], [3,4], [1,3]
         ],
         directed=true)$
(%i3) topological_sort(g);
(%o3)                    [1, 2, 5, 3, 4]

関数: vertex_connectivity (g)

グラフ gの頂点連結性を返します。

min_vertex_cutも参照してください。

関数: vertex_degree (v, gr)

グラフ grの頂点 vの次数を返します。

関数: vertex_distance (u, v, gr)

(有向)グラフ gruvの間の最短経路の長さを返します。

例:

 
(%i1) load ("graphs")$
(%i2) d : dodecahedron_graph()$
(%i3) vertex_distance(0, 7, d);
(%o3)                           4
(%i4) shortest_path(0, 7, d);
(%o4)                   [0, 1, 19, 13, 7]

関数: vertex_eccentricity (v, gr)

グラフ grの頂点 vの離心率を返します。

例:

 
(%i1) load ("graphs")$
(%i2) g:cycle_graph(7)$
(%i3) vertex_eccentricity(0, g);
(%o3)                           3

関数: vertex_in_degree (v, gr)

ダイグラフ grの頂点 vの内次数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) p5 : path_digraph(5)$
(%i3) print_graph(p5)$
Digraph on 5 vertices with 4 arcs.
Adjacencies:
  4 :
  3 :  4
  2 :  3
  1 :  2
  0 :  1
(%i4) vertex_in_degree(4, p5);
(%o4)                           1
(%i5) in_neighbors(4, p5);
(%o5)                          [3]

関数: vertex_out_degree (v, gr)

ダイグラフ grの頂点 vの外次数を返します。

例:

 
(%i1) load ("graphs")$
(%i2) t : random_tournament(10)$
(%i3) vertex_out_degree(0, t);
(%o3)                           2
(%i4) out_neighbors(0, t);
(%o4)                        [7, 1]

関数: vertices (gr)

グラフ grの頂点のリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) vertices(complete_graph(4));
(%o2)                     [3, 2, 1, 0]

関数: vertex_coloring (gr)

グラフ grの頂点の最適色付けを返します。

関数は、彩色数と grの頂点の色付けを表すリストを返します。

例:

 
(%i1) load ("graphs")$
(%i2) p:petersen_graph()$
(%i3) vertex_coloring(p);
(%o3) [3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3],
                                 [6, 1], [7, 1], [8, 2], [9, 2]]]

関数: wiener_index (gr)

グラフ grのWiener指数を返します。

例:

 
(%i2) wiener_index(dodecahedron_graph());
(%o2)                          500


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2.3 Modifying graphs

関数: add_edge (e, gr)

eをグラフ grに加えます。

例:

 
(%i1) load ("graphs")$
(%i2) p : path_graph(4)$
(%i3) neighbors(0, p);
(%o3)                          [1]
(%i4) add_edge([0,3], p);
(%o4)                         done
(%i5) neighbors(0, p);
(%o5)                        [3, 1]

関数: add_edges (e_list, gr)

リスト e_listの中の辺すべてをグラフ grに加えます。

例:

 
(%i1) load ("graphs")$
(%i2) g : empty_graph(3)$
(%i3) add_edges([[0,1],[1,2]], g)$
(%i4) print_graph(g)$
Graph on 3 vertices with 2 edges.
Adjacencies:
  2 :  1
  1 :  2  0
  0 :  1

関数: add_vertex (v, gr)

頂点 vをグラフ grに加えます。

例:

 
(%i1) load ("graphs")$
(%i2) g : path_graph(2)$
(%i3) add_vertex(2, g)$
(%i4) print_graph(g)$
Graph on 3 vertices with 1 edges.
Adjacencies:
  2 :
  1 :  0
  0 :  1

関数: add_vertices (v_list, gr)

リスト v_listの中の頂点すべてをグラフ grに加えます。

関数: connect_vertices (v_list, u_list, gr)

グラフ grに関して、リスト v_list内の頂点すべてをリスト u_list内の頂点に連結します。

v_listu_listは1つの頂点か、頂点のリストを取り得ます。

例:

 
(%i1) load ("graphs")$
(%i2) g : empty_graph(4)$
(%i3) connect_vertices(0, [1,2,3], g)$
(%i4) print_graph(g)$
Graph on 4 vertices with 3 edges.
Adjacencies:
  3 :  0
  2 :  0
  1 :  0
  0 :  3  2  1

関数: contract_edge (e, gr)

グラフ grの辺 eを縮約します。

例:

 
(%i1) load ("graphs")$
(%i2) g: create_graph(
      8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
(%i3) print_graph(g)$
Graph on 8 vertices with 7 edges.
Adjacencies:
  7 :  4
  6 :  4
  5 :  4
  4 :  7  6  5  3
  3 :  4  2  1  0
  2 :  3
  1 :  3
  0 :  3
(%i4) contract_edge([3,4], g)$
(%i5) print_graph(g)$
Graph on 7 vertices with 6 edges.
Adjacencies:
  7 :  3
  6 :  3
  5 :  3
  3 :  5  6  7  2  1  0
  2 :  3
  1 :  3
  0 :  3

関数: remove_edge (e, gr)

グラフ grから辺 eを削除します。

例:

 
(%i1) load ("graphs")$
(%i2) c3 : cycle_graph(3)$
(%i3) remove_edge([0,1], c3)$
(%i4) print_graph(c3)$
Graph on 3 vertices with 2 edges.
Adjacencies:
  2 :  0  1
  1 :  2
  0 :  2

関数: remove_vertex (v, gr)

グラフ grから頂点 vを削除します。

Categories:  Package graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2.4 Reading and writing to files

関数: dimacs_export  
    dimacs_export (gr, fl)  
    dimacs_export (gr, fl, comment1, ..., commentn)

グラフをファイル flにDIMACSフォーマットでエクスポートします。 オプションのコメントはファイルの頭に加えられます。

関数: dimacs_import (fl)

DIMACSフォーマットのファイル flからグラフを返します。

関数: graph6_decode (str)

文字列 strに graph6フォーマットで符号化されたグラフを返します。

関数: graph6_encode (gr)

グラフ grを graph6フォーマットに符号化した文字列を返します。

関数: graph6_export (gr_list, fl)

リスト gr_list内のグラフをファイル flに graph6フォーマットでエクスポートします。

関数: graph6_import (fl)

graph6フォーマットのファイル flからグラフのリストを返します。

関数: sparse6_decode (str)

文字列 strに sparse6フォーマットで符号化されたグラフを返します。

関数: sparse6_encode (gr)

グラフ grを sparse6フォーマットに符号化した文字列を返します。

関数: sparse6_export (gr_list, fl)

リスト gr_list内のグラフをファイル flに sparse6フォーマットでエクスポートします。

関数: sparse6_import (fl)

sparse6フォーマットのファイル flからグラフのリストを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

61.2.5 Visualization

関数: draw_graph  
    draw_graph (graph)  
    draw_graph (graph, option1, ..., optionk)

drawパッケージを使ってグラフを描画します。

頂点を配置するのに使われるアルゴリズムはオプション引数 programで指定されます。 デフォルト値は program=spring_embeddingです。 draw_graphは頂点を配置するのに graphvizプログラムも使うことができますが、 graphvizを別途インストールしなければいけません。

例 1:

 
(%i1) load ("graphs")$
(%i2) g:grid_graph(10,10)$
(%i3) m:max_matching(g)$
(%i4) draw_graph(g,
   spring_embedding_depth=100,
   show_edges=m, edge_type=dots,
   vertex_size=0)$

figures/graphs09

例 2:

 
(%i1) load ("graphs")$
(%i2) g:create_graph(16,
    [
     [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
     [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
     [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
     [10,14],[15,14],[13,14]
    ])$
(%i3) t:minimum_spanning_tree(g)$
(%i4) draw_graph(
    g,
    show_edges=edges(t),
    show_edge_width=4,
    show_edge_color=green,
    vertex_type=filled_square,
    vertex_size=2
    )$

figures/graphs10

例 3:

 
(%i1) load ("graphs")$
(%i2) g:create_graph(16,
    [
     [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
     [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
     [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
     [10,14],[15,14],[13,14]
    ])$
(%i3) mi : max_independent_set(g)$
(%i4) draw_graph(
    g,
    show_vertices=mi,
    show_vertex_type=filled_up_triangle,
    show_vertex_size=2,
    edge_color=cyan,
    edge_width=3,
    show_id=true,
    text_color=brown
    )$

figures/graphs11

例 4:

 
(%i1) load ("graphs")$
(%i2) net : create_graph(
    [0,1,2,3,4,5],
    [
     [[0,1], 3], [[0,2], 2],
     [[1,3], 1], [[1,4], 3],
     [[2,3], 2], [[2,4], 2],
     [[4,5], 2], [[3,5], 2]
    ],
    directed=true
    )$
(%i3) draw_graph(
    net,
    show_weight=true,
    vertex_size=0,
    show_vertices=[0,5],
    show_vertex_type=filled_square,
    head_length=0.2,
    head_angle=10,
    edge_color="dark-green",
    text_color=blue
    )$

figures/graphs12

例 5:

 
(%i1) load(graphs)$
(%i2) g: petersen_graph(20, 2);
(%o2)                         GRAPH
(%i3) draw_graph(g, redraw=true, program=planar_embedding);
(%o3)                         done

figures/graphs14

例 6:

 
(%i1) load(graphs)$
(%i2) t: tutte_graph();
(%o2)                         GRAPH
(%i3) draw_graph(t, redraw=true,
                    fixed_vertices=[1,2,3,4,5,6,7,8,9]);
(%o3)                         done

figures/graphs15

Categories:  Package graphs

オプション変数: draw_graph_program

デフォルト値: spring_embedding

頂点を配置するのに使われるプログラムのデフォルト値は draw_graphプログラムです。

draw_graphオプション: show_id

デフォルト値: false

もし trueなら頂点の idが表示されます。

draw_graphオプション: show_label

デフォルト値: false

もし trueなら頂点のラベルが表示されます。

draw_graphオプション: label_alignment

デフォルト値: center

頂点のラベル/idをいかに整列させるか決めます。 left, center, rightであり得ます。

draw_graphオプション: show_weight

デフォルト値: false

もし trueなら辺の重みを表示します。

draw_graphオプション: vertex_type

デフォルト値: circle

頂点をいかに表示するか定義します。 可能な値に関しては drawパッケージの point_typeオプションを参照してください。

draw_graphオプション: vertex_size

頂点のサイズ。

draw_graphオプション: vertex_color

頂点を表示するのに使う色。

draw_graphオプション: show_vertices

デフォルト値: []

選択された頂点を異なる色を使って表示。

draw_graphオプション: show_vertex_type

show_verticesで指定された頂点をいかに表示するか定義します。 可能な値については drawパッケージの point_typeオプションを参照してください。

draw_graphオプション: show_vertex_size

show_vertices内の頂点のサイズ。

draw_graphオプション: show_vertex_color

show_verticesリスト内の頂点を表示するのに使う色。

draw_graphオプション: vertex_partition

デフォルト値: []

グラフの頂点の分割 [[v1,v2,...],...,[vk,...,vn]]分割内のそれぞれのリストの頂点を 異なる色で描画します。

draw_graphオプション: vertex_coloring

頂点の色付けを指定します。 色付け colvertex_coloringが返すようなフォーマットで指定されなければいけません。

draw_graphオプション: edge_color

辺を表示するのに使われる色。

draw_graphオプション: edge_width

辺の幅。

draw_graphオプション: edge_type

辺をどう表示するか定義します。 drawパッケージの line_typeオプションを参照してください。

draw_graphオプション: show_edges

異なる色を使ってリスト e_list内で指定された辺を表示します。

draw_graphオプション: show_edge_color

show_edgesリスト内の辺を表示するのに使う色。

draw_graphオプション: show_edge_width

show_edges内の辺の幅。

draw_graphオプション: show_edge_type

show_edges内の辺を以下に表示するかを定義します。 drawパッケージの line_typeオプションを参照してください。

draw_graphオプション: edge_partition

グラフの辺の分割 [[e1,e2,...],...,[ek,...,em]]分割内のそれぞれのリストの辺を 異なる色を使って描画します。

draw_graphオプション: edge_coloring

辺の色付け。 色付けは関数 edge_coloringが返すようなフォーマットで指定しなければいけません。

draw_graphオプション: redraw

デフォルト値: false

もし trueなら、 たとえ位置がグラフの以前の描画から保存されていても頂点位置を再計算します。

draw_graphオプション: head_angle

デフォルト値: 15

(ダイグラフの)弧に表示される矢印の角度。

draw_graphオプション: head_length

デフォルト値: 0.1

(ダイグラフの)弧に表示される矢印の長さ。

draw_graphオプション: spring_embedding_depth

デフォルト値: 50

バネ埋め込みグラフ描画アルゴリズムでの繰り返し回数。

draw_graphオプション: terminal

描画で使う端末。 (drawパッケージの terminalオプションを参照してください。)

draw_graphオプション: file_name

端末がスクリーンでないなら描画のファイル名。

draw_graphオプション: program

グラフの頂点を配置するのに使われるプログラムを定義します。 graphvizプログラム (dot, neato, twopi, circ, fdp)の1つ, circular, spring_embedding, planar_embeddingを取り得ます。 二連結平面グラフでは planar_embeddingだけが利用可能です。 program=spring_embeddingの時、 固定位置の頂点の集合が fixed_verticesオプションで指定可能です。

draw_graphオプション: fixed_vertices

正多角形沿いに固定された位置を持つ頂点のリストを指定します。 program=spring_embeddingの時、使うことができます。

関数: vertices_to_path (v_list)

頂点のリスト v_listv_listで定義された経路の辺のリストに変換します。

Categories:  Package graphs

関数: vertices_to_cycle (v_list)

頂点のリスト v_listv_listで定義された閉路の辺のリストに変換します。

Categories:  Package graphs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62. grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.1 Introduction to grobner

grobnerは Maximaで Groebner基底を使うためのパッケージです。

以下の関数を使うには `grobner.lisp'パッケージをロードしなければいけません。

 
load(grobner);
 
demo("grobner.demo");

もしくは

 
batch("grobner.demo")

でデモを開始することができます。

デモの中の計算のいくつかは長い時間かかります。 だから、デモの出力 `grobner-demo.output'を デモファイルと同じディレクトリに用意しています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.1.1 Notes on the grobner package

パッケージは

Marek Rychlik

http://alamos.math.arizona.edu

によって書かれ、 General Public License(GPL)の条件の下、 2002-05-24にリリースされました。 (ファイル `grobner.lisp'を参照してください。) このドキュメントはファイル

`README', `grobner.lisp', `grobner.demo', `grobner-demo.output'

から

Günter Nowakによって抽出されました。

ドキュメントの改善に関する提案は maximaメーリングリスト maxima@math.utexas.eduで議論することができます。 現在、コードは若干古くなっています。 モダンな実装は以下に記載されている高速の F4アルゴリズムを使います。

 
A new efficient algorithm for computing Gröbner bases (F4) 
Jean-Charles Faugère
LIP6/CNRS Université Paris VI 
January 20, 1999

Categories:  Groebner bases · Share packages · Package grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.1.2 Implementations of admissible monomial orders in grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.2 Functions and Variables for grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.2.1 Global switches for grobner

オブション変数: poly_monomial_order

デフォルト値: lex

このグローバルスイッチはどの単項式順序を多項式と Groebner基底計算で使うか制御します。 もし設定しないなら lexを使います。

Categories:  Package grobner

オブション変数: poly_coefficient_ring

デフォルト値: expression_ring

このスイッチは grober計算で使う多項式の係数環を示します。 もし設定しないなら maximaの 一般式環を使います。 もし望むならこの変数を ring_of_integersに設定できます。

Categories:  Package grobner

オブション変数: poly_primary_elimination_order

デフォルト値: false

消去ベース関数で消去される変数のデフォルト順序名。 設定しないなら lexを使います。

Categories:  Package grobner

オブション変数: poly_secondary_elimination_order

デフォルト値: false

消去ベース関数で保持される変数のデフォルト順序名。 設定しないなら lexを使います。

Categories:  Package grobner

オブション変数: poly_elimination_order

デフォルト値: false

消去計算で使われるデフォルト消去順序名。 設定したなら、 変数 poly_primary_elimination_orderpoly_secondary_elimination_orderの設定を上書きします。 ユーザーはこれが消去変数の数に有効な真の消去順序であることを保証しなければいけません。

Categories:  Package grobner

オブション変数: poly_return_term_list

デフォルト値: false

もし trueに設定したなら、 このパッケージの関数すべては maxima一般式ではなく、 それぞれの多項式を現在の単項式順序で並べた項のリストとして返します。

Categories:  Package grobner

オブション変数: poly_grobner_debug

デフォルト値: false

もし trueに設定したなら、 デバッグ用、トレース用出力を生成します。

Categories:  Package grobner

オブション変数: poly_grobner_algorithm

デフォルト値: buchberger

可能な値:

Groebner基底を見つけるのに使うアルゴリズム名。

Categories:  Package grobner

オブション変数: poly_top_reduction_only

デフォルト値: false

もし falseでないなら、 可能な時はいつでも、頭項簡約を使います。 頭項簡約は割り算アルゴリズムが最初の簡約後に停止することを意味します。

Categories:  Package grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.2.2 Simple operators in grobner

poly_add, poly_subtract, poly_multiply, poly_exptは 多項式の算出演算子です。 これらは内部表現を使って実行されますが、 結果は maxima一般形式に変換されます。

関数: poly_add (poly1, poly2, varlist)

2つの多項式 poly1poly2を足します。

 
(%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
                                    2
(%o1)                              x  y + x

Categories:  Package grobner

関数: poly_subtract (poly1, poly2, varlist)

多項式 poly1から poly2を引きます。

 
(%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
                                      2
(%o1)                          2 z + x  y - x

Categories:  Package grobner

関数: poly_multiply (poly1, poly2, varlist)

多項式 poly1poly2の積を返します。

 
(%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
(%o1)                                  0

Categories:  Package grobner

関数: poly_s_polynomial (poly1, poly2, varlist)

2つの多項式 poly1poly2シジジー (syzygy)多項式 (S多項式)を返します。

Categories:  Package grobner

関数: poly_primitive_part (poly1, varlist)

多項式 poly1を係数の GCDで割ったものを返します。

 
(%i1) poly_primitive_part(35*y+21*x,[x,y]);
(%o1)                              5 y + 3 x

Categories:  Package grobner

関数: poly_normalize (poly, varlist)

多項式 poly1を主係数で割ったものを返します。 割り算が可能であることを仮定しています。 これは体の場合には大丈夫ですが、環の場合にはいつも可能なわけではありません。

Categories:  Package grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.2.3 Other functions in grobner

関数: poly_expand (poly, varlist)

この関数は多項式を内部形式にパースします。 もし polyが多項式を正確にパースしたら、それは expand(poly)と同値です。 もし表現が変数 varlistの多項式と互換性がないなら、結果はエラーです。 式が正確に内部表現にパースするかテストするのに使うことができます。 以下の例は添字付き変数と超越関数変数が許されることを例示します。

 
(%i1) poly_expand((x-y)*(y+x),[x,y]);
                                     2    2
(%o1)                               x  - y
(%i2) poly_expand((y+x)^2,[x,y]);
                                2            2
(%o2)                          y  + 2 x y + x
(%i3) poly_expand((y+x)^5,[x,y]);
                  5      4         2  3       3  2      4      5
(%o3)            y  + 5 x y  + 10 x  y  + 10 x  y  + 5 x  y + x
(%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
                                          2
                                  y      x
(%o4)                       - x %e  + ------- - 1
                                       sqrt(y)

(%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
                                2
(%o5)                      - sin (x) + sin(x) - 1

Categories:  Package grobner

関数: poly_expt (poly, number, varlist)

polyの正の整数 numberのべき乗を返します。 もし numberが正の整数でないならエラーが生じます。

 
(%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
(%o1)                                  0

Categories:  Package grobner

関数: poly_content (poly. varlist)

poly_contentは係数の GCDを抽出します。

 
(%i1) poly_content(35*y+21*x,[x,y]);
(%o1)                                  7

Categories:  Package grobner

関数: poly_pseudo_divide (poly, polylist, varlist)

多項式 polyn個の多項式のリスト polylistで擬似的に割ります。 複数の値を返します。 一番目の値は商のリスト aです。 二番目の値は余り rです。 三番目の値は、係数環(体である必要はありません)内で polylistc*polyを割れるようなスカラ係数 cです。 最後に四番目の値は実行された簡約の回数です。 結果のオブジェクトは以下の等式を満たします:

c*poly=sum(a[i]*polylist[i],i=1...n)+r.

Categories:  Package grobner

関数: poly_exact_divide (poly1, poly2, varlist)

多項式 poly1を多項式 poly2で割ります。 余りのない厳密な割り算が可能と仮定します。 商を返します。

Categories:  Package grobner

関数: poly_normal_form (poly, polylist, varlist)

poly_normal_formは多項式の集合 polylistに関して多項式 polyの正規形を見つけます。

Categories:  Package grobner

関数: poly_buchberger_criterion (polylist, varlist)

Buchberger判定 (criterion)を使ってもし polylistが現在の項順序に関して Groebner基底なら trueを返します: Buchberger判定(criterion)は、 polylistの2つの多項式 h1h2すべてに関して、 S多項式 S(h1,h2)polylistとして0に簡約されるというものです。

Categories:  Package grobner

関数: poly_buchberger (polylist_fl varlist)

poly_buchbergerは多項式のリスト上で Buchbergerアルゴリズムを実行し、結果の Groebner基底を返します。

Categories:  Package grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

62.2.4 Standard postprocessing of Groebner Bases

K[ x[1],...,x[n] ]上のイデアル Ik番目の消去イデアル I_kは イデアル intersect(I, K[ x[k+1],...,x[n] ])です。
コロンイデアル I:Jは イデアル {h|for all w in J: w*h in I}です。.
イデアル I:p^infはイデアル {h| there is a n in N: p^n*h in I}です。
イデアル I:J^infはイデアル {h| there is a n in N and a p in J: p^n*h in I}です。
The 根基イデアル sqrt(I)はイデアル {h| there is a n in N : h^n in I }です。

関数: poly_reduction (polylist, varlist)

poly_reductionは多項式のリスト polylistを簡約します。 それぞれの多項式は他の多項式で完全に簡約されます。

Categories:  Package grobner

関数: poly_minimization (polylist, varlist)

polylistと同じ単項式イデアルの最小全域である、 多項式リスト polylistの部分リストを返します。 すなわち、部分リストの中の多項式の主単項式はすべて、他の多項式の主単項式を割りません。

Categories:  Package grobner

関数: poly_normalize_list (polylist, varlist)

poly_normalize_listpoly_normalizeをリストの中の多項式それぞれに適用します。 これはリスト polylistの中のすべての多項式を主係数で割ることを意味します。

Categories:  Package grobner

関数: poly_grobner (polylist, varlist)

多項式リスト polylistで張られたイデアルの Groebner基底を返します。 グローバルフラグで影響を受けます。

Categories:  Package grobner

関数: poly_reduced_grobner (polylist, varlist)

多項式リスト polylistで張られたイデアルの簡約 Groebner基底を返します。

Categories:  Package grobner

関数: poly_depends_p (poly, var, varlist)

poly_dependsは多項式が変数 varに依存するかテストします。

関数: poly_elimination_ideal (polylist, number, varlist)

poly_elimination_idealは、 (必ずしも Groebner基底である必要はない)生成多項式のリストとして指定されたイデアルの number番目の消去イデアルの Groebner基底を返します。

Categories:  Package grobner

関数: poly_colon_ideal (polylist1, polylist2, varlist)

コロンイデアル

I(polylist1):I(polylist2)

の簡約 Groebner基底を返します。

ここで polylist1polylist2は 2つの多項式リストです。

Categories:  Package grobner

関数: poly_ideal_intersection (polylist1, polylist2, varlist)

poly_ideal_intersectionは 2つのイデアルの交わりです。

Categories:  Package grobner

関数: poly_lcm (poly1, poly2, varlist)

poly1poly2の最小公倍数(式)を返します。

Categories:  Package grobner

関数: poly_gcd (poly1, poly2, varlist)

poly1poly2の最大公約数(式)を返します。

ezgcd, gcd, gcdex, gcdivideも参照してください。

例:

 
(%i1) p1:6*x^3+19*x^2+19*x+6; 
                        3       2
(%o1)                6 x  + 19 x  + 19 x + 6
(%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
                  5       4       3       2
(%o2)          6 x  + 13 x  + 12 x  + 13 x  + 6 x
(%i3) poly_gcd(p1, p2, [x]);
                            2
(%o3)                    6 x  + 13 x + 6

Categories:  Package grobner

関数: poly_grobner_equal (polylist1, polylist2, varlist)

poly_grobner_equalは 2つの Groebner基底が同じイデアルを生成するかテストします。 もし Groebner基底と仮定された2つの多項式リスト polylist1polylist2が同じイデアルを生成するなら、 trueを返します。 そうでないなら falseを返します。 これは、一番目の基底のすべての多項式が二番目の基底を法として 0に簡約されるかとその逆をチェックすることと同値です。 以下の例では、一番目のリストが Groebner基底でないので結果が falseであることに注意してください。

 
(%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
(%o1)                         false

Categories:  Package grobner

関数: poly_grobner_subsetp (polylist1, polylist2, varlist)

poly_grobner_subsetppolylist1が生成するイデアルが polylist2が生成するイデアルに含まれるかテストします。 このテストが常に成功するには polylist2が Groebner基底でなければいけません。

関数: poly_grobner_member (poly, polylist, varlist)

もし多項式 polyが Groebner基底であると仮定された多項式リスト polylistが生成するイデアルに属するなら、 trueを返します。 そうでないなら falseを返します。

poly_grobner_memberは多項式が Groebner基底であると仮定された多項式のリストが生成するイデアルに属するかテストします。 normal_formが 0と同値です。

Categories:  Package grobner

関数: poly_ideal_saturation1 (polylist, poly, varlist)

イデアル

I(polylist):poly^inf の saturationの簡約 Groebner基底を返します。

幾何学的に、代数的閉体上で、これは polyの多様体上で恒等的に 0とならない polylistが生成するイデアルの中の多項式の集合です。

Categories:  Package grobner

関数: poly_ideal_saturation (polylist1, polylist2, varlist)

イデアル

I(polylist1):I(polylist2)^inf の saturationの簡約 Groebner基底を返します。

幾何学的に、代数的閉体上で、これは polylist2の多様体上で恒等的に 0とならない polylist1が生成するイデアルの中の多項式の集合です。

Categories:  Package grobner

関数: poly_ideal_polysaturation1 (polylist1, polylist2, varlist)

polylist2は 2個の多項式のリスト [poly1,...,polyn]です。 多項式リスト polylist1が生成するイデアルの多項式リスト polylist2の多項式に関する連続 saturationの列によって得られるイデアル

I(polylist):poly1^inf:...:polyn^inf

の簡約 Groebner基底を返します。

Categories:  Package grobner

関数: poly_ideal_polysaturation (polylist, polylistlist, varlist)

polylistlistは多項式リスト n個のリスト [polylist1,...,polylistn]です。 イデアル

I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf の saturationの簡約 Groebner基底を返します。

Categories:  Package grobner

関数: poly_saturation_extension (poly, polylist, varlist1, varlist2)

poly_saturation_extensionは有名な Rabinowitzのトリックを実装します。

Categories:  Package grobner

関数: poly_polysaturation_extension (poly, polylist, varlist1, varlist2)

Categories:  Package grobner


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

63. impdiff


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

63.1 Functions and Variables for impdiff

関数: implicit_derivative (f,indvarlist,orderlist,depvar)

このサブルーチンは多変数関数の陰導関数を計算します。 fは配列関数で、インデックスは indvarlist順の微分の階数です; indvarlistは独立変数リストです; orderlistは望みの次数です; depvarは従属変数です。

この関数を使うには最初に load("impdiff")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

64. interpol


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

64.1 Introduction to interpol

パッケージ interpolは多項式内挿のための Lagrange、線形、三次スプライン法を定義します。

コメント、バグ、提案は 'mario AT edu DOT xunta DOT es'にコンタクトを取ってください。

Categories:  Numerical methods · Share packages · Package interpol


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

64.2 Functions and Variables for interpol

関数: lagrange  
    lagrange (points)  
    lagrange (points, option)

Lagrange法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:

最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。

option引数を使って独立変数の名前を選択することが可能です。 デフォルトでは 'xです; 別のものを定義するには varname='zのように書いてください。

高次多項式を使って計算する時には、浮動小数点評価は不安定なことに注意してください。

linearinterpol, cspline, ratinterpolも参照してください。

例:

 
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) lagrange(p);
       (x - 7) (x - 6) (x - 3) (x - 1)
(%o3)  -------------------------------
                     35
   (x - 8) (x - 6) (x - 3) (x - 1)
 - -------------------------------
                 12
   7 (x - 8) (x - 7) (x - 3) (x - 1)
 + ---------------------------------
                  30
   (x - 8) (x - 7) (x - 6) (x - 1)
 - -------------------------------
                 60
   (x - 8) (x - 7) (x - 6) (x - 3)
 + -------------------------------
                 84
(%i4) f(x):=''%;
               (x - 7) (x - 6) (x - 3) (x - 1)
(%o4)  f(x) := -------------------------------
                             35
   (x - 8) (x - 6) (x - 3) (x - 1)
 - -------------------------------
                 12
   7 (x - 8) (x - 7) (x - 3) (x - 1)
 + ---------------------------------
                  30
   (x - 8) (x - 7) (x - 6) (x - 1)
 - -------------------------------
                 60
   (x - 8) (x - 7) (x - 6) (x - 3)
 + -------------------------------
                 84
(%i5) /* Evaluate the polynomial at some points */
      expand(map(f,[2.3,5/7,%pi]));
                                  4          3           2
                    919062  73 %pi    701 %pi    8957 %pi
(%o5)  [- 1.567535, ------, ------- - -------- + ---------
                    84035     420       210         420
                                             5288 %pi   186
                                           - -------- + ---]
                                               105       5
(%i6) %,numer;
(%o6) [- 1.567535, 10.9366573451538, 2.89319655125692]
(%i7) load(draw)$  /* load draw package */
(%i8) /* Plot the polynomial together with points */
      draw2d(
        color      = red,
        key        = "Lagrange polynomial",
        explicit(f(x),x,0,10),
        point_size = 3,
        color      = blue,
        key        = "Sample points",
        points(p))$
(%i9) /* Change variable name */
      lagrange(p, varname=w);
       (w - 7) (w - 6) (w - 3) (w - 1)
(%o9)  -------------------------------
                     35
   (w - 8) (w - 6) (w - 3) (w - 1)
 - -------------------------------
                 12
   7 (w - 8) (w - 7) (w - 3) (w - 1)
 + ---------------------------------
                  30
   (w - 8) (w - 7) (w - 6) (w - 1)
 - -------------------------------
                 60
   (w - 8) (w - 7) (w - 6) (w - 3)
 + -------------------------------
                 84

Categories:  Package interpol

関数: charfun2 (x, a, b)

もし数 xが区間 [a, b)に属するなら trueを返し、 そうでないなら falseを返します。

Categories:  Package interpol

関数: linearinterpol  
    linearinterpol (points)  
    linearinterpol (points, option)

線形法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:

最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。

option引数を使って独立変数の名前を選択することが可能です。 デフォルトでは 'xです; 別のものを定義するには varname='zのように書いてください。

lagrange, cspline, ratinterpolも参照してください。

例:

 
(%i1) load(interpol)$
(%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
(%i3) linearinterpol(p);
        13   3 x
(%o3)  (-- - ---) charfun2(x, minf, 3)
        2     2
 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
    5 x
 + (--- - 3) charfun2(x, 3, 6)
     3

(%i4) f(x):=''%;
                13   3 x
(%o4)  f(x) := (-- - ---) charfun2(x, minf, 3)
                2     2
 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
    5 x
 + (--- - 3) charfun2(x, 3, 6)
     3
(%i5)  /* Evaluate the polynomial at some points */
       map(f,[7.3,25/7,%pi]);
                            62  5 %pi
(%o5)                 [2.3, --, ----- - 3]
                            21    3
(%i6) %,numer;
(%o6)  [2.3, 2.952380952380953, 2.235987755982989]
(%i7) load(draw)$  /* load draw package */
(%i8)  /* Plot the polynomial together with points */
       draw2d(
         color      = red,
         key        = "Linear interpolator",
         explicit(f(x),x,-5,20),
         point_size = 3,
         color      = blue,
         key        = "Sample points",
         points(args(p)))$
(%i9)  /* Change variable name */
       linearinterpol(p, varname='s);
       13   3 s
(%o9) (-- - ---) charfun2(s, minf, 3)
       2     2
 + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
    5 s
 + (--- - 3) charfun2(s, 3, 6)
     3

Categories:  Package interpol

関数: cspline  
    cspline (points)  
    cspline (points, option1, option2, ...)

三次スプライン法で多項式内挿を計算します。 引数 pointsは以下のいずれかでなければいけません:

最初の 2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。

特定の必要性に合わせるため3つのオプションがあります:

lagrange, linearinterpol, ratinterpolも参照してください。

例:

 
(%i1) load(interpol)$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) /* Unknown first derivatives at the extremes
         is equivalent to natural cubic splines */
      cspline(p);
              3         2
        1159 x    1159 x    6091 x   8283
(%o3)  (------- - ------- - ------ + ----) charfun2(x, minf, 3)
         3288      1096      3288    1096
            3         2
      2587 x    5174 x    494117 x   108928
 + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
       1644       137       1644      137
          3          2
    4715 x    15209 x    579277 x   199575
 + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
     1644       274        1644      274
            3         2
      3287 x    2223 x    48275 x   9609
 + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
       4932       274      1644     274

(%i4) f(x):=''%$
(%i5) /* Some evaluations */
      map(f,[2.3,5/7,%pi]), numer;
(%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
(%i6) load(draw)$  /* load draw package */
(%i7) /* Plotting interpolating function */
      draw2d(
        color      = red,
        key        = "Cubic splines",
        explicit(f(x),x,0,10),
        point_size = 3,
        color      = blue,
        key        = "Sample points",
        points(p))$
(%i8) /* New call, but giving values at the derivatives */
      cspline(p,d1=0,dn=0);
              3          2
        1949 x    11437 x    17027 x   1247
(%o8)  (------- - -------- + ------- + ----) charfun2(x, minf, 3)
         2256       2256      2256     752
            3          2
      1547 x    35581 x    68068 x   173546
 + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
        564       564        141      141
         3          2
    607 x    35147 x    55706 x   38420
 + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
     188       564        141      47
            3         2
      3895 x    1807 x    5146 x   2148
 + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
       5076       188      141      47
(%i8) /* Defining new interpolating function */
      g(x):=''%$
(%i9) /* Plotting both functions together */
      draw2d(
        color      = black,
        key        = "Cubic splines (default)",
        explicit(f(x),x,0,10),
        color      = red,
        key        = "Cubic splines (d1=0,dn=0)",
        explicit(g(x),x,0,10),
        point_size = 3,
        color      = blue,
        key        = "Sample points",
        points(p))$

Categories:  Package interpol

関数: ratinterpol  
    ratinterpol (points, numdeg)  
    ratinterpol (points, numdeg, option1)

pointsで与えられたデータと numdegに等しい分子の次数の関して有理形内挿を生成します; 分子の次数は自動的に計算されます。 引数 pointsは以下のいずれかでなければいけません:

最初の2つの場合には、 計算を行う前に対を最初の座標に関して並び替えます。

特定の必要性に合わせるためオプションが1つあります:

lagrange, linearinterpol, cspline, minpack_lsquares, lbfgsも参照してください。

例:

 
(%i1) load(interpol)$
(%i2) load(draw)$
(%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$
(%i4) for k:0 thru length(p)-1 do
        draw2d(
          explicit(ratinterpol(p,k),x,0,9),
          point_size = 3,
          points(p),
          title = concat("Degree of numerator = ",k),
          yrange=[0,10])$

Categories:  Package interpol


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

65. lapack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

65.1 Introduction to lapack

lapackは SLATECプロジェクトから得られるような Fortranライブラリ LAPACKの(プログラム f2clを介した) Common Lisp翻訳です。

(訳者注意書き: lapackを使用するには、 load("lapack"); load("eigensys");を実行してください。 load("lapack")には、初回だけコンパイルで時間がかかるかもしれません。)

Categories:  Numerical methods · Share packages · Package lapack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

65.2 Functions and Variables for lapack

関数: dgeev  
    dgeev (A)  
    dgeev (A, right_p, left_p)

行列 Aの固有値と、オプションで固有ベクトルを計算します。 Aの要素はすべて整数か浮動小数点数でなければいけません。 Aは平方(行と列が同じ数)でなければいけません。 Aは対称であってもなくてもいいです。

dgeev(A)Aの固有値だけを計算します。 dgeev(A, right_p, left_p)Aの固有値と、 right_p = trueの時、右固有ベクトル、 left_p = trueの時、左固有ベクトルを計算します。

3項目のリストが返されます。 最初の項目は固有値のリストです。 二番目の項目は falseか右固有ベクトルの行列です。 三番目の項目は falseか左固有ベクトルの行列です。

右固有ベクトル v(j) (右固有ベクトル行列の j番目の列)は

A . v(j) = lambda(j) . v(j)

を満たします。ここで lambda(j)は対応する固有値です。

左固有ベクトル v(j) (左固有ベクトル行列の j番目の列)は

u(j)**H . A = lambda(j) . u(j)**H

を満たします。ここで u(j)**Hu(j)の共役転置を意味します。 Maxima関数 ctransposeが共役転置を計算します。

計算された固有ベクトルは、 Euclideanノルムが 1に等しく、最大成分の虚部が 0になるように規格化されます。

例:

 
(%i1) load ("lapack")$
(%i2) fpprintprec : 6;
(%o2)                           6
(%i3) M : matrix ([9.5, 1.75], [3.25, 10.45]);
                         [ 9.5   1.75  ]
(%o3)                    [             ]
                         [ 3.25  10.45 ]
(%i4) dgeev (M);
(%o4)          [[7.54331, 12.4067], false, false]
(%i5) [L, v, u] : dgeev (M, true, true);
                           [ - .666642  - .515792 ]
(%o5) [[7.54331, 12.4067], [                      ],
                           [  .745378   - .856714 ]
                                        [ - .856714  - .745378 ]
                                        [                      ]]
                                        [  .515792   - .666642 ]
(%i6) D : apply (diag_matrix, L);
                      [ 7.54331     0    ]
(%o6)                 [                  ]
                      [    0     12.4067 ]
(%i7) M . v - v . D;
                [      0.0       - 8.88178E-16 ]
(%o7)           [                              ]
                [ - 8.88178E-16       0.0      ]
(%i8) transpose (u) . M - D . transpose (u);
                     [ 0.0  - 4.44089E-16 ]
(%o8)                [                    ]
                     [ 0.0       0.0      ]

Categories:  Package lapack

関数: dgeqrf (A)

行列 Aの QR分解します。 Aのすべての要素は整数か浮動小数点数でなければいけません。 Aは行と列の数は同じかもしれませんし違うかもしれません。

2つの項目のリストを返します。 一番目の項目は行列 Qで、それは Aと同じ行数を持つ平方正規直交行列です。 二番目の項目は行列 Rで、それは Aと同じサイズで、 対角以下のすべての要素が零に等しいものです。 積 Q . Rは(浮動小数点の丸め誤差を除いて) Aに等しい。 ここで "."は非可換乗算演算子です。

 
(%i1) load ("lapack") $
(%i2) fpprintprec : 6 $
(%i3) M : matrix ([1, -3.2, 8], [-11, 2.7, 5.9]) $
(%i4) [q, r] : dgeqrf (M);
       [ - .0905357  .995893  ]
(%o4) [[                      ],
       [  .995893    .0905357 ]
                               [ - 11.0454   2.97863   5.15148 ]
                               [                               ]]
                               [     0      - 2.94241  8.50131 ]
(%i5) q . r - M;
         [ - 7.77156E-16   1.77636E-15   - 8.88178E-16 ]
(%o5)    [                                             ]
         [      0.0       - 1.33227E-15   8.88178E-16  ]
(%i6) mat_norm (%, 1);
(%o6)                      3.10862E-15

Categories:  Package lapack

関数: dgesv (A, b)

線形方程式 A x = bの解 xを計算します。 ここで、 Aは平方行列、 bAと同じ数の行と任意の長さの列を持つ行列です。 戻り値 xbと同じサイズです。

Abの要素は floatを介して実の浮動小数点数に評価されなければいけません; 従って、要素は任意の数値型か、数値定数のシンボルか、浮動小数点に評価される式であり得ます。 xの要素はいつも浮動小数点数です。 すべての算術は浮動小数演算として実行されます。

dgesvAの LU分解を介して解を計算します。

例:

dgesvは線形方程式 A x = bの解を計算します。

 
(%i1) A : matrix ([1, -2.5], [0.375, 5]);
                               [   1    - 2.5 ]
(%o1)                          [              ]
                               [ 0.375    5   ]
(%i2) b : matrix ([1.75], [-0.625]);
                                  [  1.75   ]
(%o2)                             [         ]
                                  [ - 0.625 ]
(%i3) x : dgesv (A, b);
                            [  1.210526315789474  ]
(%o3)                       [                     ]
                            [ - 0.215789473684211 ]
(%i4) dlange (inf_norm, b - A.x);
(%o4)                                 0.0

bAと同じ数の行と任意の長さの列を持つ行列です。 xbと同じサイズです。

 
(%i1) A : matrix ([1, -0.15], [1.82, 2]);
                               [  1    - 0.15 ]
(%o1)                          [              ]
                               [ 1.82    2    ]
(%i2) b : matrix ([3.7, 1, 8], [-2.3, 5, -3.9]);
                              [  3.7   1    8   ]
(%o2)                         [                 ]
                              [ - 2.3  5  - 3.9 ]
(%i3) x : dgesv (A, b);
      [  3.103827540695117   1.20985481742191    6.781786185657722  ]
(%o3) [                                                             ]
      [ - 3.974483062032557  1.399032116146062  - 8.121425428948527 ]
(%i4) dlange (inf_norm, b - A . x);
(%o4)                       1.1102230246251565E-15

Abの要素は実の浮動小数点数に評価されなければいけません;

 
(%i1) A : matrix ([5, -%pi], [1b0, 11/17]);
                               [   5    - %pi ]
                               [              ]
(%o1)                          [         11   ]
                               [ 1.0b0   --   ]
                               [         17   ]
(%i2) b : matrix ([%e], [sin(1)]);
                                  [   %e   ]
(%o2)                             [        ]
                                  [ sin(1) ]
(%i3) x : dgesv (A, b);
                             [ 0.690375643155986 ]
(%o3)                        [                   ]
                             [ 0.233510982552952 ]
(%i4) dlange (inf_norm, b - A . x);
(%o4)                        2.220446049250313E-16

Categories:  Package lapack · Linear equations

関数: dgesvd  
    dgesvd (A)  
    dgesvd (A, left_p, right_p)

特異値から成る行列 Aの特異値分解 (SVD)を計算します。 オプションで左および右特異ベクトルを取ります。

Aの要素はすべて整数か浮動小数点数でなければいけません。 Aは(行と列が同じ数の)平方かもしれませんし、そうでないかもしれません。

mAの行数、nを列数とします。 Aの特異値分解は A = U . Sigma . V^Tのような 3つの行列 U, Sigma, V^Tから構成されます。 ここで、 Um掛けmのユニタリ行列、 Sigmam掛けnの対角行列、 V^Tn掛けnのユニタリ行列です。

sigma[i]Sigmaの対角要素、すなわち、 Sigma[i, i] = sigma[i]とします。 要素 sigma[i]Aのいわゆる特異値です; これらは実数で、非負で、降順で返されます。 UVの最初の min(m, n)列は Aの左と右特異ベクトルです。 dgesvdV自身ではなく Vの転置を返すことに注意してください。

dgesvd(A)Aの特異値だけを計算します。 dgesvd(A, left_p, right_p)Aの特異値と、 left_p = trueの時、左特異ベクトル、 right_p = trueの時、右特異ベクトルを計算します。

3つの項目のリストを返します。 一つ目の項目は特異値のリストです。 二つ目の項目は falseか、左特異ベクトルの行列です。 三つ目の項目は falseか、右特異ベクトルの行列です。

例:

 
(%i1) load ("lapack")$
(%i2) fpprintprec : 6;
(%o2)                           6
(%i3) M: matrix([1, 2, 3], [3.5, 0.5, 8], [-1, 2, -3], [4, 9, 7]);
                        [  1    2    3  ]
                        [               ]
                        [ 3.5  0.5   8  ]
(%o3)                   [               ]
                        [ - 1   2   - 3 ]
                        [               ]
                        [  4    9    7  ]
(%i4) dgesvd (M);
(%o4)      [[14.4744, 6.38637, .452547], false, false]
(%i5) [sigma, U, VT] : dgesvd (M, true, true);
(%o5) [[14.4744, 6.38637, .452547],
[ - .256731  .00816168   .959029    - .119523 ]
[                                             ]
[ - .526456   .672116   - .206236   - .478091 ]
[                                             ],
[  .107997   - .532278  - .0708315  - 0.83666 ]
[                                             ]
[ - .803287  - .514659  - .180867    .239046  ]
[ - .374486  - .538209  - .755044 ]
[                                 ]
[  .130623   - .836799   0.5317   ]]
[                                 ]
[ - .917986   .100488    .383672  ]
(%i6) m : length (U);
(%o6)                           4
(%i7) n : length (VT);
(%o7)                           3
(%i8) Sigma:
        genmatrix(lambda ([i, j], if i=j then sigma[i] else 0),
                  m, n);
                  [ 14.4744     0        0    ]
                  [                           ]
                  [    0     6.38637     0    ]
(%o8)             [                           ]
                  [    0        0     .452547 ]
                  [                           ]
                  [    0        0        0    ]
(%i9) U . Sigma . VT - M;
          [  1.11022E-15        0.0       1.77636E-15 ]
          [                                           ]
          [  1.33227E-15    1.66533E-15       0.0     ]
(%o9)     [                                           ]
          [ - 4.44089E-16  - 8.88178E-16  4.44089E-16 ]
          [                                           ]
          [  8.88178E-16    1.77636E-15   8.88178E-16 ]
(%i10) transpose (U) . U;
       [     1.0      5.55112E-17    2.498E-16     2.77556E-17  ]
       [                                                        ]
       [ 5.55112E-17      1.0       5.55112E-17    4.16334E-17  ]
(%o10) [                                                        ]
       [  2.498E-16   5.55112E-17       1.0       - 2.08167E-16 ]
       [                                                        ]
       [ 2.77556E-17  4.16334E-17  - 2.08167E-16       1.0      ]
(%i11) VT . transpose (VT);
          [      1.0           0.0      - 5.55112E-17 ]
          [                                           ]
(%o11)    [      0.0           1.0       5.55112E-17  ]
          [                                           ]
          [ - 5.55112E-17  5.55112E-17       1.0      ]

Categories:  Package lapack

関数: dlange (norm, A)
関数: zlange (norm, A)

行列 Aのノルムもしくはノルムのような関数を計算します。

max

max(abs(A(i, j)))を計算します。 ここで ijはそれぞれ行と列を行き渡ります。 この関数は適切な行列ノルムではないことに注意してください。

one_norm

AL[1]ノルム、すなわち、それぞれの列の要素の絶対値の和の最大値を計算します。

inf_norm

AL[inf]ノルム、すなわち、それぞれの行の要素の絶対値の和の最大値を計算します。

frobenius

Aの Frobeniusノルム、すなわち、行列要素の平方の和の平方根を計算します。

Categories:  Package lapack

関数: dgemm  
    dgemm (A, B)  
    dgemm (A, B, options)

2つの行列の積を計算します。オプションで積を三つ目の行列に足し算します。

最も簡単な形式では、 dgemm(A, B)は 2つの実行列 ABの積を計算します。

二番目の形式では、 dgemmalpha * A * B + beta * Cを計算します。 ここで A, B, Cは適当なサイズの実行列であり、 alphabetaは実数です。 オプションで、 Aと/もしくは Bは積を計算する前に転置を取ることができます。 追加のパラメータはオプションのキーワード引数で指定できます: キーワード引数はオプションで、どんな順番でも指定できます。 それらはすべて、形式 key=valを取ります。 キーワード引数は以下の通りです:

C

足すべき行列 C。 デフォルトは falseであり、行列を足さないことを意味します。

alpha

ABの積をこの値に掛けます。 デフォルトは 1です。

beta

もし行列 Cが与えられたら、 この値を、足される前にCに掛けます。 デフォルト値は 0で、これはたとえCが与えられても Cが足されないことを意味します。 故に、必ず betaに零でない値を指定してください。

transpose_a

もし trueなら、 Aの代わりに Aの転置を積に使います。 デフォルトは falseです。

transpose_b

もし trueなら Bの代わりに Bの転置を積に使います。 デフォルトは falseです。

 
(%i1) load ("lapack")$
(%i2) A : matrix([1,2,3],[4,5,6],[7,8,9]);
                                  [ 1  2  3 ]
                                  [         ]
(%o2)                             [ 4  5  6 ]
                                  [         ]
                                  [ 7  8  9 ]
(%i3) B : matrix([-1,-2,-3],[-4,-5,-6],[-7,-8,-9]);
                               [ - 1  - 2  - 3 ]
                               [               ]
(%o3)                          [ - 4  - 5  - 6 ]
                               [               ]
                               [ - 7  - 8  - 9 ]
(%i4) C : matrix([3,2,1],[6,5,4],[9,8,7]);
                                  [ 3  2  1 ]
                                  [         ]
(%o4)                             [ 6  5  4 ]
                                  [         ]
                                  [ 9  8  7 ]
(%i5) dgemm(A,B);
                         [ - 30.0   - 36.0   - 42.0  ]
                         [                           ]
(%o5)                    [ - 66.0   - 81.0   - 96.0  ]
                         [                           ]
                         [ - 102.0  - 126.0  - 150.0 ]
(%i6) A . B;
                            [ - 30   - 36   - 42  ]
                            [                     ]
(%o6)                       [ - 66   - 81   - 96  ]
                            [                     ]
                            [ - 102  - 126  - 150 ]
(%i7) dgemm(A,B,transpose_a=true);
                         [ - 66.0  - 78.0   - 90.0  ]
                         [                          ]
(%o7)                    [ - 78.0  - 93.0   - 108.0 ]
                         [                          ]
                         [ - 90.0  - 108.0  - 126.0 ]
(%i8) transpose(A) . B;
                           [ - 66  - 78   - 90  ]
                           [                    ]
(%o8)                      [ - 78  - 93   - 108 ]
                           [                    ]
                           [ - 90  - 108  - 126 ]
(%i9) dgemm(A,B,c=C,beta=1);
                         [ - 27.0  - 34.0   - 41.0  ]
                         [                          ]
(%o9)                    [ - 60.0  - 76.0   - 92.0  ]
                         [                          ]
                         [ - 93.0  - 118.0  - 143.0 ]
(%i10) A . B + C;
                            [ - 27  - 34   - 41  ]
                            [                    ]
(%o10)                      [ - 60  - 76   - 92  ]
                            [                    ]
                            [ - 93  - 118  - 143 ]
(%i11) dgemm(A,B,c=C,beta=1, alpha=-1);
                            [ 33.0   38.0   43.0  ]
                            [                     ]
(%o11)                      [ 72.0   86.0   100.0 ]
                            [                     ]
                            [ 111.0  134.0  157.0 ]
(%i12) -A . B + C;
                               [ 33   38   43  ]
                               [               ]
(%o12)                         [ 72   86   100 ]
                               [               ]
                               [ 111  134  157 ]

Categories:  Package lapack

関数: zgeev  
    zgeev (A)  
    zgeev (A, right_p, left_p)

dgeev同様、しかし行列 Aは複素行列です。

Categories:  Package lapack

関数: zheev  
    zheev (A)  
    zheev (A, eigvec_p)

zheev同様、しかし行列 Aは平方複素エルミート行列と仮定されます。 もし eigvec_ptrueなら、 行列の固有ベクトルも計算します。

実際には行列 Aがエルミートであることはチェックしません。

dgeevと同じように2つの項目のリストを返します: 固有値のリストと、 falseまたは固有ベクトルの行列。

Categories:  Package lapack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

66. lbfgs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

66.1 Introduction to lbfgs

lbfgsは L-BFGS algorithm [1]の実装であり、 限定メモリ準Newton (BFGS)アルゴリズムによって無制約な最小化問題を解きます。 Hessian行列の逆元全体の代わりに低ランク近似が保存されるので、限定メモリと呼ばれます。 最初、 Jorge J. MoréとDavid J. Thuenteが最初に書いたいくつかの関数を組み入れて Jorge Nocedalがプログラムを Fortranで書き、 プログラム f2clによって Lispに自動翻訳されました。

Maximaパッケージ lbfgsは翻訳されたコードといくつかの詳細を扱うインターフェース関数からなります。

参考文献:

[1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large scale optimization". Mathematical Programming B 45:503-528 (1989)

[2] http://netlib.org/opt/lbfgs_um.shar

Categories:  Numerical methods · Optimization · Share packages · Package lbfgs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

66.2 Functions and Variables for lbfgs

関数: lbfgs  
    lbfgs (FOM, X, X0, epsilon, iprint)  
    lbfgs ([FOM, grad] X, X0, epsilon, iprint)

初期見積もり X0から始めて 変数リスト X上での、 norm(grad(FOM)) < epsilon*max(1, norm(X))のような性能指標 FOMの無制約最小化の近似解を見つけます。

もし与えられたなら、 gradFOMの多変数 Xに関する勾配です。 gradXの要素それぞれに対して要素を1つ持つリストかリストを返す関数です。 もし与えられなかったら、勾配を記号微分で自動的に計算します。 もし FOMが関数なら、勾配 gradを共有しなければいけません。

適用されるアルゴリズムは限定メモリ準 Newton(BFGS)アルゴリズム [1]です。 Hessian行列の逆元全体の代わりに低ランク近似が保存されるので、限定メモリと呼ばれます。 アルゴリズムのそれぞれの繰り返しは直線探索です。 すなわち、変数 Xに関して、近似 Hessian逆元から計算される探索方向の線 (ray)に沿っての探索です。 FOMはいつも直線探索でうまく減少します。 (いつもではありませんが)普通 FOMの勾配のノルムも減少します。

iprintlbfgsが印字する進捗メッセージを制御します。

iprint[1]

iprint[1] controls the frequency of progress messages.

iprint[1] < 0

進捗メッセージなし。

iprint[1] = 0

最初と最後の繰り返しでメッセージ。

iprint[1] > 0

iprint[1]回の繰り返してメッセージを印字する。

iprint[2]

iprint[2]は進捗メッセージの量を制御します。

iprint[2] = 0

繰り返し回数、 FOMの評価回数、 FOMの値、 FOMの勾配のノルム、ステップ長を印字します。

iprint[2] = 1

iprint[2] = 0に加えて、 X0X0で評価された FOMの勾配を印字します。

iprint[2] = 2

iprint[2] = 1に加えて、 繰り返しそれぞれで Xの値を印字します。

iprint[2] = 3

iprint[2] = 2に加えて、 繰り返しそれぞれで FOMの勾配を印字します。

lbfgsが印字する列は以下の通りです。

I

繰り返し関数。それぞれの直線探索で増えます。

NFN

性能指標の評価回数。

FUNC

最も最近の直線探索の最後での性能指標の値。

GNORM

最も最近の直線探索の最後での性能指標の勾配のノルム。

STEPLENGTH

探索アルゴリズムの内部パラメータ。

アルゴリズムの詳細に関係する付加情報は、元々の Fortranコード[2]のコメントに見つけられます。

lbfgs_nfeval_maxlbfgs_ncorrectionsも参照してください。

参考文献:

[1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large scale optimization". Mathematical Programming B 45:503-528 (1989)

[2] http://netlib.org/opt/lbfgs_um.shar

例:

Netlibの LBFGSパッケージの中で、プログラム sdrive.f中の、 FGCOMPUTEが計算したのと同じ FOM。 問題の変数が添字付き変数であることに注意してください。 FOMは u[k] = 1(k = 1, ..., 8)で 0に等しい厳密な最小を持ちます。

 
(%i1) load ("lbfgs")$
(%i2) t1[j] := 1 - u[j];
(%o2)                     t1  := 1 - u
                            j         j
(%i3) t2[j] := 10*(u[j + 1] - u[j]^2);
                                          2
(%o3)                t2  := 10 (u      - u )
                       j         j + 1    j
(%i4) n : 8;
(%o4)                           8
(%i5) FOM : sum (t1[2*j - 1]^2 + t2[2*j - 1]^2, j, 1, n/2);
                 2 2           2              2 2           2
(%o5) 100 (u  - u )  + (1 - u )  + 100 (u  - u )  + (1 - u )
            8    7           7           6    5           5
                     2 2           2              2 2           2
        + 100 (u  - u )  + (1 - u )  + 100 (u  - u )  + (1 - u )
                4    3           3           2    1           1
(%i6) lbfgs (FOM, '[u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8]],
       [-1.2, 1, -1.2, 1, -1.2, 1, -1.2, 1], 1e-3, [1, 0]);
*************************************************
  N=    8   NUMBER OF CORRECTIONS=25
       INITIAL VALUES
 F=  9.680000000000000D+01   GNORM=  4.657353755084533D+02
*************************************************
 
 I NFN   FUNC                    GNORM                   STEPLENGTH

 1   3   1.651479526340304D+01   4.324359291335977D+00   7.926153934390631D-04
 2   4   1.650209316638371D+01   3.575788161060007D+00   1.000000000000000D+00
 3   5   1.645461701312851D+01   6.230869903601577D+00   1.000000000000000D+00
 4   6   1.636867301275588D+01   1.177589920974980D+01   1.000000000000000D+00
 5   7   1.612153014409201D+01   2.292797147151288D+01   1.000000000000000D+00
 6   8   1.569118407390628D+01   3.687447158775571D+01   1.000000000000000D+00
 7   9   1.510361958398942D+01   4.501931728123679D+01   1.000000000000000D+00
 8  10   1.391077875774293D+01   4.526061463810630D+01   1.000000000000000D+00
 9  11   1.165625686278198D+01   2.748348965356907D+01   1.000000000000000D+00
10  12   9.859422687859144D+00   2.111494974231706D+01   1.000000000000000D+00
11  13   7.815442521732282D+00   6.110762325764183D+00   1.000000000000000D+00
12  15   7.346380905773044D+00   2.165281166715009D+01   1.285316401779678D-01
13  16   6.330460634066464D+00   1.401220851761508D+01   1.000000000000000D+00
14  17   5.238763939854303D+00   1.702473787619218D+01   1.000000000000000D+00
15  18   3.754016790406625D+00   7.981845727632704D+00   1.000000000000000D+00
16  20   3.001238402313225D+00   3.925482944745832D+00   2.333129631316462D-01
17  22   2.794390709722064D+00   8.243329982586480D+00   2.503577283802312D-01
18  23   2.563783562920545D+00   1.035413426522664D+01   1.000000000000000D+00
19  24   2.019429976373283D+00   1.065187312340952D+01   1.000000000000000D+00
20  25   1.428003167668592D+00   2.475962450735100D+00   1.000000000000000D+00
21  27   1.197874264859232D+00   8.441707983339661D+00   4.303451060697367D-01
22  28   9.023848942003913D-01   1.113189216665625D+01   1.000000000000000D+00
23  29   5.508226405855795D-01   2.380830599637816D+00   1.000000000000000D+00
24  31   3.902893258879521D-01   5.625595817143044D+00   4.834988416747262D-01
25  32   3.207542206881058D-01   1.149444645298493D+01   1.000000000000000D+00
26  33   1.874468266118200D-01   3.632482152347445D+00   1.000000000000000D+00
27  34   9.575763380282112D-02   4.816497449000391D+00   1.000000000000000D+00
28  35   4.085145106760390D-02   2.087009347116811D+00   1.000000000000000D+00
29  36   1.931106005512628D-02   3.886818624052740D+00   1.000000000000000D+00
30  37   6.894000636920714D-03   3.198505769992936D+00   1.000000000000000D+00
31  38   1.443296008850287D-03   1.590265460381961D+00   1.000000000000000D+00
32  39   1.571766574930155D-04   3.098257002223532D-01   1.000000000000000D+00
33  40   1.288011779655132D-05   1.207784334505595D-02   1.000000000000000D+00
34  41   1.806140190993455D-06   4.587890258846915D-02   1.000000000000000D+00
35  42   1.769004612050548D-07   1.790537363138099D-02   1.000000000000000D+00
36  43   3.312164244118216D-10   6.782068546986653D-04   1.000000000000000D+00
 
 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
(%o6) [u  = 1.000005339816132, u  = 1.000009942840108,
        1                       2
u  = 1.000005339816132, u  = 1.000009942840108,
 3                       4
u  = 1.000005339816132, u  = 1.000009942840108,
 5                       6
u  = 1.000005339816132, u  = 1.000009942840108]
 7                       8

回帰問題。 FOMは予言値 F(X[i])と観測値 Y[i]の二乗平均差です。 関数 Fは有界な単調関数(いわゆる「シグモイド」函数)です。 この例では、 Fのパラメータに関して lbfgsは近似値を計算し、 plot2dFの観測データとの比較を表示します。

 
(%i1) load ("lbfgs")$
(%i2) FOM : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1,
                                                length(X)));
                               2
               sum((F(X ) - Y ) , i, 1, length(X))
                       i     i
(%o2)          -----------------------------------
                            length(X)
(%i3) X : [1, 2, 3, 4, 5];
(%o3)                    [1, 2, 3, 4, 5]
(%i4) Y : [0, 0.5, 1, 1.25, 1.5];
(%o4)                [0, 0.5, 1, 1.25, 1.5]
(%i5) F(x) := A/(1 + exp(-B*(x - C)));
                                   A
(%o5)            F(x) := ----------------------
                         1 + exp((- B) (x - C))
(%i6) ''FOM;
                A               2            A                2
(%o6) ((----------------- - 1.5)  + (----------------- - 1.25)
          - B (5 - C)                  - B (4 - C)
        %e            + 1            %e            + 1
            A             2            A               2
 + (----------------- - 1)  + (----------------- - 0.5)
      - B (3 - C)                - B (2 - C)
    %e            + 1          %e            + 1
             2
            A
 + --------------------)/5
      - B (1 - C)     2
   (%e            + 1)
(%i7) estimates : lbfgs (FOM, '[A, B, C], [1, 1, 1], 1e-4, [1, 0]);
*************************************************
  N=    3   NUMBER OF CORRECTIONS=25
       INITIAL VALUES
 F=  1.348738534246918D-01   GNORM=  2.000215531936760D-01
*************************************************

 
I  NFN  FUNC                    GNORM                   STEPLENGTH
1    3  1.177820636622582D-01   9.893138394953992D-02   8.554435968992371D-01
2    6  2.302653892214013D-02   1.180098521565904D-01   2.100000000000000D+01
3    8  1.496348495303004D-02   9.611201567691624D-02   5.257340567840710D-01
4    9  7.900460841091138D-03   1.325041647391314D-02   1.000000000000000D+00
5   10  7.314495451266914D-03   1.510670810312226D-02   1.000000000000000D+00
6   11  6.750147275936668D-03   1.914964958023037D-02   1.000000000000000D+00
7   12  5.850716021108202D-03   1.028089194579382D-02   1.000000000000000D+00
8   13  5.778664230657800D-03   3.676866074532179D-04   1.000000000000000D+00
9   14  5.777818823650780D-03   3.010740179797108D-04   1.000000000000000D+00
 
 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
(%o7) [A = 1.461933911464101, B = 1.601593973254801,
                                           C = 2.528933072164855]
(%i8) plot2d ([F(x), [discrete, X, Y]], [x, -1, 6]), ''estimates;
(%o8)

FOMの勾配が(自動的に計算される代わりに)指定されます。 FOMとその勾配の両方を関数として lbfgsに渡します。

 
(%i1) load ("lbfgs")$
(%i2) F(a, b, c) := (a - 5)^2 + (b - 3)^4 + (c - 2)^6$
(%i3) define(F_grad(a, b, c),
             map (lambda ([x], diff (F(a, b, c), x)), [a, b, c]))$
(%i4) estimates : lbfgs ([F, F_grad],
                   [a, b, c], [0, 0, 0], 1e-4, [1, 0]);
*************************************************
  N=    3   NUMBER OF CORRECTIONS=25
       INITIAL VALUES
 F=  1.700000000000000D+02   GNORM=  2.205175729958953D+02
*************************************************

 
   I  NFN     FUNC                    GNORM                   STEPLENGTH

   1    2     6.632967565917637D+01   6.498411132518770D+01   4.534785987412505D-03
   2    3     4.368890936228036D+01   3.784147651974131D+01   1.000000000000000D+00
   3    4     2.685298972775191D+01   1.640262125898520D+01   1.000000000000000D+00
   4    5     1.909064767659852D+01   9.733664001790506D+00   1.000000000000000D+00
   5    6     1.006493272061515D+01   6.344808151880209D+00   1.000000000000000D+00
   6    7     1.215263596054292D+00   2.204727876126877D+00   1.000000000000000D+00
   7    8     1.080252896385329D-02   1.431637116951845D-01   1.000000000000000D+00
   8    9     8.407195124830860D-03   1.126344579730008D-01   1.000000000000000D+00
   9   10     5.022091686198525D-03   7.750731829225275D-02   1.000000000000000D+00
  10   11     2.277152808939775D-03   5.032810859286796D-02   1.000000000000000D+00
  11   12     6.489384688303218D-04   1.932007150271009D-02   1.000000000000000D+00
  12   13     2.075791943844547D-04   6.964319310814365D-03   1.000000000000000D+00
  13   14     7.349472666162258D-05   4.017449067849554D-03   1.000000000000000D+00
  14   15     2.293617477985238D-05   1.334590390856715D-03   1.000000000000000D+00
  15   16     7.683645404048675D-06   6.011057038099202D-04   1.000000000000000D+00
 
 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
(%o4) [a = 5.000086823042934, b = 3.052395429705181,
                                           c = 1.927980629919583]

Categories:  Package lbfgs

変数: lbfgs_nfeval_max

デフォルト値: 100

lbfgs_nfeval_maxは、lbfgsがする性能指標 (FOM)の評価の最大回数です。 lbfgs_nfeval_maxに届いた時、 lbfgsは最後に成功した直線探索の結果を返します。

Categories:  Package lbfgs

変数: lbfgs_ncorrections

デフォルト値: 25

lbfgs_ncorrectionslbfgsが保つ近似逆 Hessian行列に適用された修正回数です。

Categories:  Package lbfgs


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

67. lindstedt


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

67.1 Functions and Variables for lindstedt

関数: Lindstedt (eq,pvar,torder,ic)

これは Lindstedtコードでの最初のパスです。 摂動方程式上の初期条件が i>0に対して z[i]=0, z'[i]=0で、 入力した初期条件― (%k1%k2だけでなく)任意の定数があり得ます―で問題を解くことができます。 icは初期条件のリストです。

初期条件を与えない時、 摂動方程式の中の定数がゼロ次方程式解と同じなので、問題が起こります。 また Van der Pol方程式のように、摂動方程式の初期条件が i>0に対して z[i]=0, z'[i]=0でない時、問題が起こります。

例:

 
(%i1) load("makeOrders")$

(%i2) load("lindstedt")$

(%i3) Lindstedt('diff(x,t,2)+x-(e*x^3)/6,e,2,[1,0]);
          2
         e  (cos(5 T) - 24 cos(3 T) + 23 cos(T))
(%o3) [[[---------------------------------------
                          36864
   e (cos(3 T) - cos(T))
 - --------------------- + cos(T)],
            192
          2
       7 e    e
T = (- ---- - -- + 1) t]]
       3072   16

この関数を使うには、最初に load("makeOrders")load("lindstedt")を書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

68. linearalgebra


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

68.1 Introduction to linearalgebra

linearalgebraは線形代数に関する関数のコレクションです。

例:

 
(%i1) M : matrix ([1, 2], [1, 2]);
                            [ 1  2 ]
(%o1)                       [      ]
                            [ 1  2 ]
(%i2) nullspace (M);
                               [  1  ]
                               [     ]
(%o2)                     span([   1 ])
                               [ - - ]
                               [   2 ]
(%i3) columnspace (M);
                                [ 1 ]
(%o3)                      span([   ])
                                [ 1 ]
(%i4) ptriangularize (M - z*ident(2), z);
                         [ 1   2 - z   ]
(%o4)                    [             ]
                         [           2 ]
                         [ 0  3 z - z  ]
(%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
                     [ 1 - z    2      3   ]
                     [                     ]
(%o5)                [   4    5 - z    6   ]
                     [                     ]
                     [   7      8    9 - z ]
(%i6) MM : ptriangularize (M, z);
              [ 4  5 - z            6            ]
              [                                  ]
              [                2                 ]
              [     66        z    102 z   132   ]
              [ 0   --      - -- + ----- + ---   ]
(%o6)         [     49        7     49     49    ]
              [                                  ]
              [               3        2         ]
              [           49 z    245 z    147 z ]
              [ 0    0    ----- - ------ - ----- ]
              [            264      88      44   ]
(%i7) algebraic : true;
(%o7)                         true
(%i8) tellrat (MM [3, 3]);
                         3       2
(%o8)                  [z  - 15 z  - 18 z]
(%i9) MM : ratsimp (MM);
               [ 4  5 - z           6           ]
               [                                ]
               [                2               ]
(%o9)          [     66      7 z  - 102 z - 132 ]
               [ 0   --    - ------------------ ]
               [     49              49         ]
               [                                ]
               [ 0    0             0           ]
(%i10) nullspace (MM);
                        [        1         ]
                        [                  ]
                        [   2              ]
                        [  z  - 14 z - 16  ]
                        [  --------------  ]
(%o10)             span([        8         ])
                        [                  ]
                        [    2             ]
                        [   z  - 18 z - 12 ]
                        [ - -------------- ]
                        [         12       ]
(%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],
                   [13, 14, 15, 16]);
                       [ 1   2   3   4  ]
                       [                ]
                       [ 5   6   7   8  ]
(%o11)                 [                ]
                       [ 9   10  11  12 ]
                       [                ]
                       [ 13  14  15  16 ]
(%i12) columnspace (M);
                           [ 1  ]  [ 2  ]
                           [    ]  [    ]
                           [ 5  ]  [ 6  ]
(%o12)                span([    ], [    ])
                           [ 9  ]  [ 10 ]
                           [    ]  [    ]
                           [ 13 ]  [ 14 ]
(%i13) apply ('orthogonal_complement, args (nullspace (transpose (M))));
                           [ 0 ]  [  1  ]
                           [   ]  [     ]
                           [ 1 ]  [  0  ]
(%o13)                span([   ], [     ])
                           [ 2 ]  [ - 1 ]
                           [   ]  [     ]
                           [ 3 ]  [ - 2 ]

Categories:  Linear algebra · Share packages · Package linearalgebra


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

68.2 Functions and Variables for linearalgebra

関数: addmatrices (f, M_1, …, M_n)

関数 fを加算関数として使い、行列 M_1, …, M_nの和を返します。 関数 fは任意の数の引数を受け付けなければいけません (Maxima n項関数)。

例:

 
(%i1) m1 : matrix([1,2],[3,4])$
(%i2) m2 : matrix([7,8],[9,10])$
(%i3) addmatrices('max,m1,m2);
(%o3) matrix([7,8],[9,10])
(%i4) addmatrices('max,m1,m2,5*m1);
(%o4) matrix([7,10],[15,20])

Categories:  Package linearalgebra

関数: blockmatrixp (M)

Mのエントリがすべて行列なら、その時に限って trueを返します。

関数: columnop (M, i, j, theta)

もし Mが行列なら、 列演算 C_i <- C_i - theta * C_jを施すことで生じる行列を返します。 もし Mが行 iか行 jを持たないならエラーをシグナルします。

Categories:  Package linearalgebra

関数: columnswap (M, i, j)

もし Mが行列なら、列 ijを交換します。 もし Mに列 ijがないならエラーをシグナルします。

Categories:  Package linearalgebra

関数: columnspace (M)

もし Mが行列なら span (v_1, ..., v_n)を返します。 ここで、集合 {v_1, ..., v_n}Mの列空間の基底です。 空集合の包は {0}です。 従って、列空間が 1員だけ持つ時 span ()を返します。

Categories:  Package linearalgebra

関数: cholesky  
    cholesky (M)  
    cholesky (M, field)

自己共役(すなわち Hermite)行列の Cholesky分解を返します。

二番目の引数はデフォルトでは 'generalring'です。 fieldの取り得る値の説明については lu_factorを参照してください。

関数: ctranspose (M)

行列 Mの複素共役転置を返します。 関数 ctransposeはそれぞれの行列要素を転置するのに matrix_element_transposeを使います。

Categories:  Package linearalgebra

関数: diag_matrix (d_1, d_2,...,d_n)

対角成分 d_1, d_2,...,d_nを持つ対角行列を返します。 対角成分が行列の時、戻り値行列の零成分は適切なサイズの零行列です; 例えば:

 
(%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));

                            [ [ 1  0 ]  [ 0  0 ] ]
                            [ [      ]  [      ] ]
                            [ [ 0  2 ]  [ 0  0 ] ]
(%o1)                       [                    ]
                            [ [ 0  0 ]  [ 3  0 ] ]
                            [ [      ]  [      ] ]
                            [ [ 0  0 ]  [ 0  4 ] ]
(%i2) diag_matrix(p,q);

                                   [ p  0 ]
(%o2)                              [      ]
                                   [ 0  q ]

Categories:  Package linearalgebra

関数: dotproduct (u, v)

ベクトル uvの内積を返します。 これは conjugate (transpose (u)) . vと同じです。 引数 uvは列ベクトルでなければいけません。

Categories:  Package linearalgebra

関数: eigens_by_jacobi  
    eigens_by_jacobi (A)  
    eigens_by_jacobi (A, field_type)

Aの固有値と固有ベクトルを Jacobi回転法で計算します。 Aは対称行列でなければいけません。 (しかし、正定値である必要も半正定値である必要もありません。) field_typeは計算上の体を示し、 floatfieldbigfloatfieldです。 もし field_typeを指定しないなら、デフォルトは floatfieldです。

Aの要素は、数か、 (field_typeに依存して )floatbfloatを介して数に評価される式でなければいけません。

例:

 
(%i1) S: matrix([1/sqrt(2), 1/sqrt(2)],[-1/sqrt(2), 1/sqrt(2)]);
                     [     1         1    ]
                     [  -------   ------- ]
                     [  sqrt(2)   sqrt(2) ]
(%o1)                [                    ]
                     [      1        1    ]
                     [ - -------  ------- ]
                     [   sqrt(2)  sqrt(2) ]
(%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
                      [ sqrt(3)     0    ]
(%o2)                 [                  ]
                      [    0     sqrt(5) ]
(%i3) M : S . L . transpose (S);
            [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
            [ ------- + -------  ------- - ------- ]
            [    2         2        2         2    ]
(%o3)       [                                      ]
            [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
            [ ------- - -------  ------- + ------- ]
            [    2         2        2         2    ]
(%i4) eigens_by_jacobi (M);
The largest percent change was 0.1454972243679
The largest percent change was 0.0
number of sweeps: 2
number of rotations: 1
(%o4) [[1.732050807568877, 2.23606797749979],
                        [  0.70710678118655   0.70710678118655 ]
                        [                                      ]]
                        [ - 0.70710678118655  0.70710678118655 ]
(%i5) float ([[sqrt(3), sqrt(5)], S]);
(%o5) [[1.732050807568877, 2.23606797749979],
                        [  0.70710678118655   0.70710678118655 ]
                        [                                      ]]
                        [ - 0.70710678118655  0.70710678118655 ]
(%i6) eigens_by_jacobi (M, bigfloatfield);
The largest percent change was 1.454972243679028b-1
The largest percent change was 0.0b0
number of sweeps: 2
number of rotations: 1
(%o6) [[1.732050807568877b0, 2.23606797749979b0],
                [  7.071067811865475b-1   7.071067811865475b-1 ]
                [                                              ]]
                [ - 7.071067811865475b-1  7.071067811865475b-1 ]

関数: get_lu_factors (x)

x = lu_factor (A)の時、 get_lu_factorsは形式 [P, L, U]のリストを返します。 ここで、 Pは置換行列、 Lは対角成分を含む下三角行列、 Uは上三角行列であり、 A = P L Uが成り立ちます。

Categories:  Package linearalgebra

関数: hankel  
    hankel (col)  
    hankel (col, row)

Hankel行列 Hを返します。 Hの最初の列は colです; 最初の成分を除いて、 Hの最後の行は rowです。 rowのデフォルトは colと同じ長さを持つ零ベクトルです。

Categories:  Package linearalgebra

関数: hessian (f, x)

変数 xのリストに関する fの Hessian行列を返します。 Hessian行列の (i, j)成分は diff(f, x[i], 1, x[j], 1)です。

例:

 
(%i1) hessian (x * sin (y), [x, y]);
                     [   0       cos(y)   ]
(%o1)                [                    ]
                     [ cos(y)  - x sin(y) ]
(%i2) depends (F, [a, b]);
(%o2)                       [F(a, b)]
(%i3) hessian (F, [a, b]);
                        [   2      2   ]
                        [  d F    d F  ]
                        [  ---   ----- ]
                        [    2   da db ]
                        [  da          ]
(%o3)                   [              ]
                        [   2      2   ]
                        [  d F    d F  ]
                        [ -----   ---  ]
                        [ da db     2  ]
                        [         db   ]

関数: hilbert_matrix (n)

n掛け nの Hilbert行列を返します。 nが正の整数でない時、エラーをシグナルします。

Categories:  Package linearalgebra

関数: identfor  
    identfor (M)  
    identfor (M, fld)

行列 Mと同じ形を持つ単位行列を返します。 単位行列の対角成分は体 fldの乗算単位元です; fldのデフォルトは generalringです。

一番目の引数 Mは平方行列か非行列でなければいけません。 Mが行列の時、 Mのそれぞれの成分は平方行列であり得ます。 - 従って、 Mは区分されたMaxima行列であり得ます。 行列は任意の(有限の)深さに区分できます。

zeroforも参照してください。

Categories:  Package linearalgebra

関数: invert_by_lu (M, (rng generalring))

LU分解を使って行列 Mの逆行列を返します。 LU分解は環 rngを使って実行されます。

Categories:  Package linearalgebra

関数: jacobian (f, x)

変数のリスト xに関する関数のリスト fの Jacobi行列を返します。 Jacobi行列の (i, j)成分は diff(f[i], x[j])です。

例:

 
(%i1) jacobian ([sin (u - v), sin (u * v)], [u, v]);
                  [ cos(v - u)  - cos(v - u) ]
(%o1)             [                          ]
                  [ v cos(u v)   u cos(u v)  ]
(%i2) depends ([F, G], [y, z]);
(%o2)                  [F(y, z), G(y, z)]
(%i3) jacobian ([F, G], [y, z]);
                           [ dF  dF ]
                           [ --  -- ]
                           [ dy  dz ]
(%o3)                      [        ]
                           [ dG  dG ]
                           [ --  -- ]
                           [ dy  dz ]

関数: kronecker_product (A, B)

行列 ABの Kronecker積を返します。

Categories:  Package linearalgebra

関数: listp  
    listp (e, p)  
    listp (e)

オプションの引数 pが与えられたとして、もし eが Maximaリストで、 pがすべてのリストの要素で trueに評価されるなら、 trueを返します。 listpがオプションの引数を与えられない時、もし eが Maximaリストなら、 trueを返します。 他のすべての場合 falseを返します。

関数: locate_matrix_entry (M, r_1, c_1, r_2, c_2, f, rel)

一番目の引数は行列でなければいけません; 引数 r_1から c_2は行 r_1から r_2と列 c_1から c_2から成る Mの部分行列を決定します。

ある性質を満たす部分行列 Mの中の成分を見つけます。 3つのケース:

(1) rel = 'boolfが述語論理:

左から右へ、そして上から下へ部分行列をスキャンし、 述語論理 fを満たす最初の成分のインデックスを返します。 もし fを満たす行列成分がないなら、 falseを返します。

(2) rel = 'maxfが実関数:

fを最大にする成分を探して部分行列をスキャンします。 最大化の成分のインデックスを返します。

(3) rel = 'minfが実関数:

fを最小にする成分を探して部分行列をスキャンします。 最小化の成分のインデックスを返します。

Categories:  Package linearalgebra

関数: lu_backsub (M, b)

M = lu_factor (A, field)の時、 lu_backsub (M, b)は線形系 A x = bを解きます。

Categories:  Package linearalgebra

関数: lu_factor (M, field)

形式 [LU, perm, fld][LU, perm, fld, lower-cnd upper-cnd]のリストを返します。 ここで、

(1) 行列 LUMの分解をパックされた形式で含みます。 パックされた形式は3つのことを意味します; 第一に LUの行はリスト permに従って置換されます。 もし、例えば、 permがリスト [3,2,1]なら、 LU分解の実際の一番目の行は行列 LUの三番目の行です。 第二に、 mの下三角因子はすべて 1で置き換えられた対角成分を持つ LUの下三角部です。 第三に、 Mの上三角因子は LUの上三角部です。

(2) 体が floatfieldcomplexfieldの時、数 lower-cndupper-cndMの無限ノルム条件数の下限と上限です。 すべての体に対して条件数を見積ることができるわけではありません; そんな体に対しては lu_factorは 2項目リストを返します。 下限と上限どちらも真の値から任意に大きな因子だけ異なる可能性があります。 (mat_condも参照してください。)

引数 Mは平方行列でなければいけません。

オプション引数 fldは環か体かを決めるシンボルでなければいけません。 予め定義された体と環は以下のものがあります:

(a) generalring - Maxima式の環, (b) floatfield - 倍精度浮動小数点数体, (c) complexfield - 倍精度浮動小数点複素数体, (d) crering - Maxima CRE式の環, (e) rationalfield - 有理数体, (f) runningerror - 浮動小数点の丸め誤差をトラック, (g) noncommutingring - 乗算が非可換ドット演算子のMaxima式の環

体が floatfieldcomplexfield, runningerrorのいずれかの時、アルゴリズムは部分ピボットを使います; 他のすべての体に対しては、零ピボットを避ける必要があるときだけ行をスイッチします。

浮動小数点加算算術は結合的でなく、'体'の意味は数学的定義と異なります。

runningerrorの要素は形式 [x,n]の 2つの要素の Maximaリストです。 ここで、 xは浮動小数点数で、 nは整数です。 xの'真'の値と xの相対差は計算機イプシロンに nをかけたもので近似的に抑えられます。 ランニングエラー境界はオーダーが計算機イプシロンの平方の項をいくつか落とします。 The running error bound drops some terms that of the order the square of the machine epsilon.

新しい体を定義するユーザーインターフェースはありません。 Common Lispに精通しているユーザーは新しい体を定義することができるはずです。 これをするには、ユーザーは算術演算のための関数と 体表現と Maximaの相互変換のための関数を定義しなければいけません。 さらに、(部分ピボットが使われる)順序体に関しては、 ユーザーは大きさの関数と体の元の比較関数を定義しなければいけません。 あとは、 Common Lisp 構造体 mringを定義することだけです。 ファイル mringに多くの例があります。

分解を計算するために、最初の仕事は行列成分それぞれを指定された体の元に変換することです。 変換が不可能な時は、分解はエラーメッセージとともに停止します。 体の元は Maxima式である必要はありません。 例えば、complexfieldの元は Common Lisp複素数です。 そして、分解を計算した後には、行列成分は Maxima式に変換されなければいけません。

get_lu_factorsも参照してください。

例:

 
(%i1) w[i,j] := random (1.0) + %i * random (1.0);
(%o1)          w     := random(1.) + %i random(1.)
                i, j
(%i2) showtime : true$
Evaluation took 0.00 seconds (0.00 elapsed)
(%i3) M : genmatrix (w, 100, 100)$
Evaluation took 7.40 seconds (8.23 elapsed)
(%i4) lu_factor (M, complexfield)$
Evaluation took 28.71 seconds (35.00 elapsed)
(%i5) lu_factor (M, generalring)$
Evaluation took 109.24 seconds (152.10 elapsed)
(%i6) showtime : false$

(%i7) M : matrix ([1 - z, 3], [3, 8 - z]);
                        [ 1 - z    3   ]
(%o7)                   [              ]
                        [   3    8 - z ]
(%i8) lu_factor (M, generalring);
          [ 1 - z         3        ]
          [                        ]
(%o8)    [[   3            9       ], [1, 2], generalring]
          [ -----  - z - ----- + 8 ]
          [ 1 - z        1 - z     ]
(%i9) get_lu_factors (%);
                  [   1    0 ]  [ 1 - z         3        ]
        [ 1  0 ]  [          ]  [                        ]
(%o9)  [[      ], [   3      ], [                9       ]]
        [ 0  1 ]  [ -----  1 ]  [   0    - z - ----- + 8 ]
                  [ 1 - z    ]  [              1 - z     ]
(%i10) %[1] . %[2] . %[3];
                        [ 1 - z    3   ]
(%o10)                  [              ]
                        [   3    8 - z ]

関数: mat_cond  
    mat_cond (M, 1)  
    mat_cond (M, inf)

行列 mp-ノルムの行列条件数を返します。 pに許される値は 1と infです。 この関数は、行列 mの逆元を計算するのに LU分解を使います。 このため mat_condの実行時間は行列サイズの三乗に比例します; lu_factorは、行列サイズの二乗に比例する時間内に 無限大ノルム条件数の下限と上限を決定します。

Categories:  Package linearalgebra

関数: mat_norm  
    mat_norm (M, 1)  
    mat_norm (M, inf)  
    mat_norm (M, frobenius)

行列 Mの行列 p-ノルムを返します。 pに許される値は 1か inffrobenius (Frobenius行列ノルム)です。 行列 Mは区分されない行列でなければいけません。

Categories:  Package linearalgebra

関数: matrixp  
    matrixp (e, p)  
    matrixp (e)

オプション引数 pが与えられたとして、 もし eが行列で、 pが行列成分すべてに対して trueに評価されるなら、 trueを返します。 matrixpがオプション引数を与えられない時は、もし eが行列なら、 trueを返します。 他のすべての場合には falseを返します。

blockmatrixpも参照してください。

関数: matrix_size (M)

行列 Mの行数と列数をそれぞれ与える 2要素リストを返します。

Categories:  Package linearalgebra

関数: mat_fullunblocker (M)

もし Mが区分行列なら、 行列をすべてのレベルで区分解除します。 もし Mが行列なら、 Mを返します; それ以外ではエラーをシグナルします。

Categories:  Package linearalgebra

関数: mat_trace (M)

行列 Mの跡を返します。 もし Mが行列でないなら、名詞形を返します。 Mが区分行列の時、 mat_trace(M)mat_trace(mat_unblocker(m))するのと同じ値を返します。

Categories:  Package linearalgebra

関数: mat_unblocker (M)

もし Mが区分行列なら、 Mを 1レベル区分解除します。 もし Mが行列なら、 mat_unblocker (M)Mを返します; それ以外ではエラーをシグナルします。

このように、もし Mの成分それぞれが行列なら、 mat_unblocker (M)は区分されていない行列を返しますが、 もし Mの成分それぞれが区分行列なら、 mat_unblocker (M)は区分が 1レベル少ない区分行列を返します。

もし区分行列を使うなら、おそらく、 matrix_element_mult"."に、 matrix_element_transpose'transposeに設定したくなるでしょう。 mat_fullunblockerも参照してください。

例:

 
(%i1) A : matrix ([1, 2], [3, 4]);
                            [ 1  2 ]
(%o1)                       [      ]
                            [ 3  4 ]
(%i2) B : matrix ([7, 8], [9, 10]);
                            [ 7  8  ]
(%o2)                       [       ]
                            [ 9  10 ]
(%i3) matrix ([A, B]);
                     [ [ 1  2 ]  [ 7  8  ] ]
(%o3)                [ [      ]  [       ] ]
                     [ [ 3  4 ]  [ 9  10 ] ]
(%i4) mat_unblocker (%);
                         [ 1  2  7  8  ]
(%o4)                    [             ]
                         [ 3  4  9  10 ]

Categories:  Package linearalgebra

関数: nullspace (M)

もし Mが行列なら、 span (v_1, ..., v_n)を返します。 ここで集合 {v_1, ..., v_n}Mの零空間の基底です。 空集合のスパンは {0}です。 なので、零空間が要素を 1つだけ持つときは span ()を返します。

Categories:  Package linearalgebra

関数: nullity (M)

もし Mが行列なら、 Mの零空間の次元を返します。

Categories:  Package linearalgebra

関数: orthogonal_complement (v_1, ..., v_n)

span (u_1, ..., u_m)を返します。 ここで集合 {u_1, ..., u_m}は集合 (v_1, ..., v_n)の直交補空間の基底です。

ベクトル v_1から v_nそれぞれは列ベクトルでなければいけません。

Categories:  Package linearalgebra

関数: polynomialp  
    polynomialp (p, L, coeffp, exponp)  
    polynomialp (p, L, coeffp)  
    polynomialp (p, L)

もし pがリスト Lの中の変数に関して多項式なら、 trueを返します。 述語論理 coeffpは係数それぞれに対して trueに評価されなければいけなく、述語論理 exponpLの中の変数の指数すべてに対して trueに評価されなければいけません。 もし exponpに対してデフォルトでない値を使いたいなら、 たとえ coeffpに関してデフォルトを使いたくても coeffpを値とともに供給しなければいけません。

polynomialp (p, L, coeffp)polynomialp (p, L, coeffp, 'nonnegintegerp)と同値です。

polynomialp (p, L)polynomialp (p, L, 'constantp, 'nonnegintegerp)と同値です。

多項式は展開する必要はありません:

 
(%i1) polynomialp ((x + 1)*(x + 2), [x]);
(%o1)                         true
(%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
(%o2)                         false

coeffpと exponpにデフォルトでない値を使う例:

 
(%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
(%o1)                         true
(%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp,
                                                        numberp);
(%o2)                         true

2変数多項式:

 
(%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
(%o1)                         false
(%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
(%o2)                         true

関数: polytocompanion (p, x)

もし pxの多項式なら、 pのコンパニオン行列を返します。 次数 nのモニック多項式(最高次数の係数が1の多項式)に対しては、 p = (-1)^n charpoly (polytocompanion (p, x)) があります。

pxの多項式でないなら、エラーをシグナルします。

Categories:  Package linearalgebra

関数: ptriangularize (M, v)

もし Mがそれぞれの成分がvの多項式の行列なら、以下のような行列 M2を返します。

(1) M2は上三角で、

(2) M2 = E_n ... E_1 M, ここで E_1から E_nは成分が vの多項式の基本行列です。

(3) |det (M)| = |det (M2)|,

注意: この関数はすべての成分が vの多項式かチェックしません。

Categories:  Package linearalgebra

関数: rowop (M, i, j, theta)

もし Mが行列なら、行演算 R_i <- R_i - theta * R_jをすることで生じる行列を返します。 もし Mに行ijがないなら、エラーをシグナルします。

Categories:  Package linearalgebra

関数: rank (M)

行列 Mの階数を返します。 階数は列空間の次元です。

例:

 
(%i1) rank(matrix([1,2],[2,4]));
(%o1)                                  1
(%i2) rank(matrix([1,b],[c,d]));
Proviso:  {d - b c # 0}
(%o2)                                  2

Categories:  Package linearalgebra

関数: rowswap (M, i, j)

もし Mが行列なら行 ijを入れ替えます。 もし Mに行ijがないならエラーをシグナルします。

Categories:  Package linearalgebra

関数: toeplitz  
    toeplitz (col)  
    toeplitz (col, row)

Toeplitz行列 Tを返します。 Tの一番目の列は colです; 一番目の成分を除いて、 Tの最初の行は rowです。 rowのデフォルトは colの複素共役です。

例:

 
(%i1)  toeplitz([1,2,3],[x,y,z]);

                                  [ 1  y  z ]
                                  [         ]
(%o1)                             [ 2  1  y ]
                                  [         ]
                                  [ 3  2  1 ]
(%i2)  toeplitz([1,1+%i]);

                              [   1     1 - %I ]
(%o2)                         [                ]
                              [ %I + 1    1    ]

Categories:  Package linearalgebra

関数: vandermonde_matrix ([x_1, ..., x_n])

i番目の行が [1, x_i, x_i^2, ... x_i^(n-1)]n掛け n行列を返します。

Categories:  Package linearalgebra

関数: zerofor  
    zerofor (M)  
    zerofor (M, fld)

行列 Mと同じ形の零行列を返します。 零行列の成分すべては体 fldの加算の単位元です; fldのデフォルトは generalringです。

一番目の引数 Mは平方行列か行列以外でなければいけません。 Mが行列の時、 Mの成分それぞれは平方行列であり得ます。 - 従って Mは区分 Maxima行列であり得ます。 行列は任意の(有限の)深さに区分できます。

identforも参照してください。

Categories:  Package linearalgebra

関数: zeromatrixp (M)

Mが区分行列でない時、 もし行列 Mのそれぞれの要素 eに対して is (equal (e, 0))が真なら、 trueを返します。 Mが区分行列の時、 もしeの要素それぞれに対して zeromatrixptrueに評価されるなら、 trueを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

69. lsquares


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

69.1 Introduction to lsquares

lsquaresは数値データからモデルのパラメータを見積もる最小二乗法を実装するための 関数のコレクションです。

Categories:  Statistical estimation · Share packages · Package lsquares


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

69.2 Functions and Variables for lsquares

関数: lsquares_estimates  
    lsquares_estimates (D, x, e, a)   最小二乗の方法で決定されるような変数 xaの方程式 eをデータ

Dに最良フィットするパラメータ aを見積もります。 lsquares_estimatesは最初に厳密な解を探し、それが失敗したら近似的な解を探します。

戻り値は形式 [a = ..., b = ..., c = ...]の等式のリストのリストです。 リストのそれぞれの要素は二乗平均誤差の、個別の等価な最小です。

データ Dは行列でなければいけません。 行それぞれは(文脈によって「レコード」とか「ケース」とか呼ばれる)1つのデータで、 列それぞれはすべてのデータに関するある変数の値を含みます。 変数のリスト xDの列それぞれの名前を与えます。 解析をしない列にも名前を与えます。

パラメータのリスト aは見積もられるパラメータの名前を与えます。 方程式 eは変数 xaに関する式か等式です; もし eが等式でないなら e = 0と同様に扱われます。

lsquares_estimatesの付加引数は等式として指定され、 厳密な結果が見つからなかった時、数値方法で見積もりを見つけるためにコールされる関数 lbfgsへそのまま渡されます。

もしある厳密解が (solveを介して)見つけることができるなら、データ Dは非数値を含むかもしれません。 しかし、もし厳密解が見つからないなら Dの要素それぞれは数値でなければいけません。 これは数リテラル(整数、有理数、通常の浮動小数点、多倍長浮動小数点)はもちろん、 %pi%eのような数値定数を含みます。 数値計算は通常の浮動小数点算出で実行されます。 他の種類の数値は計算のため、すべて通常の浮動小数点に変換されます。

load(lsquares)はこの関数をロードします。

lsquares_estimates_exact, lsquares_estimates_approximate,
lsquares_mse, lsquares_residuals, lsquares_residual_mseも参照してください。

例:

厳密解が見つかる問題。

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
        [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) lsquares_estimates (
         M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
                  59        27      10921        107
(%o3)     [[A = - --, B = - --, C = -----, D = - ---]]
                  16        16      1024         32

厳密解が見つからない問題。 だから lsquares_estimatesは数値近似に頼ります。

 
(%i1) load ("lsquares")$
(%i2) M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
                            [ 1  1  ]
                            [       ]
                            [    7  ]
                            [ 2  -  ]
                            [    4  ]
                            [       ]
(%o2)                       [    11 ]
                            [ 3  -- ]
                            [    4  ]
                            [       ]
                            [    13 ]
                            [ 4  -- ]
                            [    4  ]
(%i3) lsquares_estimates (
  M, [x,y], y=a*x^b+c, [a,b,c], initial=[3,3,3], iprint=[-1,0]);
(%o3) [[a = 1.375751433061394, b = 0.7148891534417651,
                                       c = - 0.4020908910062951]]

指数関数は最小二乗法フィッティングにはよい条件ではありません。 それらにフィッティングする場合、対数を使って指数関数を避けられるかもしれません。

 
(%i1) load ("lsquares")$
(%i2) yvalues:[1,3,5,60,200,203,80]$
(%i3) time:[1,2,4,5,6,8,10]$
(%i4) f:y=a*exp(b*t);
                                   b t
(%o4)                      y = a %e
(%i5) yvalues_log:log(yvalues)$
(%i6) f_log:log(subst(y=exp(y),f));
                                    b t
(%o6)                   y = log(a %e   )
(%i7) lsquares_estimates(
    transpose(matrix(yvalues_log,time)),
    [y,t],
    f_log,
    [a,b]
 );
*************************************************
  N=    2   NUMBER OF CORRECTIONS=25
       INITIAL VALUES
 F=  6.802906290754687D+00   GNORM=  2.851243373781393D+01
*************************************************

   I  NFN     FUNC                    GNORM                   STEPLENGTH

   1    3     1.141838765593467D+00   1.067358003667488D-01   1.390943719972406D-02
   2    5     1.141118195694385D+00   1.237977833033414D-01   5.000000000000000D+00
   3    6     1.136945723147959D+00   3.806696991691383D-01   1.000000000000000D+00
   4    7     1.133958243220262D+00   3.865103550379243D-01   1.000000000000000D+00
   5    8     1.131725773805499D+00   2.292258231154026D-02   1.000000000000000D+00
   6    9     1.131625585698168D+00   2.664440547017370D-03   1.000000000000000D+00
   7   10     1.131620564856599D+00   2.519366958715444D-04   1.000000000000000D+00

 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
(%o7)   [[a = 1.155904145765554, b = 0.5772666876959847]]

関数: lsquares_estimates_exact (MSE, a)

方程式系を構成し、solveを介して記号的にそれらを解くことを試みることで、平均二乗誤差 MSEを最小化するパラメータ aを見積もります。 平均二乗誤差は lsquares_mseが返すようなパラメータ aの式です。

戻り値は形式 [a = ..., b = ..., c = ...]の等式のリストのリストです。 戻り値は、 0個か 1個、 2以上の要素を含むかもしれません。 もし複数の要素が返されたら、それぞれは個別の、平均二乗誤差の等価最小を表します。

lsquares_estimates, lsquares_estimates_approximate, lsquares_mse,
lsquares_residuals, lsquares_residual_mseも参照してください。

例:

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
         [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
         5
        ====
        \                                         2     2
         >    ((- B M    ) - A M     + (M     + D)  - C)
        /            i, 3       i, 2     i, 1
        ====
        i = 1
(%o3)   -------------------------------------------------
                                5
(%i4) lsquares_estimates_exact (mse, [A, B, C, D]);
                  59        27      10921        107
(%o4)     [[A = - --, B = - --, C = -----, D = - ---]]
                  16        16      1024         32

Categories:  Package lsquares

関数: lsquares_estimates_approximate (MSE, a, initial = L, tol = t)

平均二乗誤差 MSEを最小化するパラメータ aを数値最小化関数 lbfgsを介して見積もります。 平均二乗誤差は lsquares_mseが返すようなパラメータ aの式です。

lsquares_estimates_approximateが返す解は平均二乗誤差の (たぶん大域ですが)局所最小値です。 lsquares_estimates_exactとの一貫性のため、戻り値は要素 1つ、すなわち、形式 [a = ..., b = ..., c = ...]の等式のリストを持つ入れ子のリストです。

lsquares_estimates_approximateの付加引数は等式として指定され、 数値方法で見積もりを見つけるためにコールされる関数 lbfgsへそのまま渡されます。

パラメータが数値が割り当てられた時 MSEは数に評価されなければいけません。 これは MSEを構成するデータが %pi%e、数リテラル (整数、有理数、通常の浮動小数点、多倍長浮動小数点)のような数値定数だけを含むことを 要求します。 数値計算は通常の浮動小数点算出で実行されます。 他の種類の数値は計算のため、すべて通常の浮動小数点に変換されます。

load(lsquares)はこの関数をロードします。

lsquares_estimates, lsquares_estimates_exact, lsquares_mse, lsquares_residuals, lsquares_residual_mseも参照してください。

例:

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
         [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
         5
        ====
        \                                         2     2
         >    ((- B M    ) - A M     + (M     + D)  - C)
        /            i, 3       i, 2     i, 1
        ====
        i = 1
(%o3)   -------------------------------------------------
                                5
(%i4) lsquares_estimates_approximate (
        mse, [A, B, C, D], iprint = [-1, 0]);
(%o4) [[A = - 3.678504947401971, B = - 1.683070351177937,
                 C = 10.63469950148714, D = - 3.340357993175297]]

関数: lsquares_mse (D, x, e)

平均二乗誤差 (MSE)、すなわち、変数 xの 方程式eに関するデータ Dの和の式を返します。

MSEは以下のように定義されます:

 
                    n
                   ====
               1   \                        2
               -    >    (lhs(e ) - rhs(e ))
               n   /           i         i
                   ====
                   i = 1

ここで、 nはデータ数で、 e[i]は、 i番目のデータ D[i]から値を割り当てられた xの中の変数に対して評価された方程式 eです。

load(lsquares)はこの関数をロードします。

例:

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
         [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
         5
        ====
        \                                         2     2
         >    ((- B M    ) - A M     + (M     + D)  - C)
        /            i, 3       i, 2     i, 1
        ====
        i = 1
(%o3)   -------------------------------------------------
                                5
(%i4) diff (mse, D);
(%o4)
      5
     ====
     \                                                     2
   4  >    (M     + D) ((- B M    ) - A M     + (M     + D)  - C)
     /       i, 1             i, 3       i, 2     i, 1
     ====
     i = 1
   --------------------------------------------------------------
                                 5
(%i5) ''mse, nouns;
               2                 2         9 2               2
(%o5) (((D + 3)  - C - 2 B - 2 A)  + ((D + -)  - C - B - 2 A)
                                           4
           2               2         3 2               2
 + ((D + 2)  - C - B - 2 A)  + ((D + -)  - C - 2 B - A)
                                     2
           2             2
 + ((D + 1)  - C - B - A) )/5
 
(%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
           5
          ====
          \                 2                         2
           >    ((D + M    )  - C - M     B - M     A)
          /            i, 1          i, 3      i, 2
          ====
          i = 1
(%o3)     ---------------------------------------------
                                5
 
(%i4) diff (mse, D);
         5
        ====
        \                             2
      4  >    (D + M    ) ((D + M    )  - C - M     B - M     A)
        /           i, 1         i, 1          i, 3      i, 2
        ====
        i = 1
(%o4) ----------------------------------------------------------
                                  5
 
(%i5) ''mse, nouns;
               2                 2         9 2               2
(%o5) (((D + 3)  - C - 2 B - 2 A)  + ((D + -)  - C - B - 2 A)
                                           4
           2               2         3 2               2
 + ((D + 2)  - C - B - 2 A)  + ((D + -)  - C - 2 B - A)
                                     2
           2             2
 + ((D + 1)  - C - B - A) )/5

Categories:  Package lsquares

関数: lsquares_residuals (D, x, e, a)

指定されたパラメータ aとデータ Dでの方程式 eに関する残差を返します。

Dは行列で、 xは変数のリスト、 eは方程式か一般式です; もし方程式でないなら、 ee = 0であるかのように扱われます。 axを除いた eの任意の自由変数に値を指定する方程式のリストです。

残差は以下のように定義されます:

 
                        lhs(e ) - rhs(e )
                             i         i

ここで、 e[i]は、 aから任意の残りの自由変数を割り当てて、 i番目のデータ D[i]から値を割り当てられた xの中の変数に対して評価された方程式 eです。

load(lsquares)はこの関数をロードします。

例:

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
         [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) a : lsquares_estimates (
          M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
                  59        27      10921        107
(%o3)     [[A = - --, B = - --, C = -----, D = - ---]]
                  16        16      1024         32
(%i4) lsquares_residuals (
          M, [z,x,y], (z+D)^2 = A*x+B*y+C, first(a));
                     13    13    13  13  13
(%o4)               [--, - --, - --, --, --]
                     64    64    32  64  64

Categories:  Package lsquares

関数: lsquares_residual_mse (D, x, e, a)

指定されたパラメータ aとデータ Dでの方程式 eに関する残差平均二乗誤差を返します。

残差 MSEは以下のように定義されます:

 
                    n
                   ====
               1   \                        2
               -    >    (lhs(e ) - rhs(e ))
               n   /           i         i
                   ====
                   i = 1

ここで、 e[i]は、 aから任意の残りの自由変数を割り当てて、 i番目のデータ D[i]から値を割り当てられた xの中の変数に対して評価された方程式 eです。

load(lsquares)はこの関数をロードします。

例:

 
(%i1) load ("lsquares")$
(%i2) M : matrix (
         [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
                           [ 1  1  1 ]
                           [         ]
                           [ 3       ]
                           [ -  1  2 ]
                           [ 2       ]
                           [         ]
(%o2)                      [ 9       ]
                           [ -  2  1 ]
                           [ 4       ]
                           [         ]
                           [ 3  2  2 ]
                           [         ]
                           [ 2  2  1 ]
(%i3) a : lsquares_estimates (
       M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
                  59        27      10921        107
(%o3)     [[A = - --, B = - --, C = -----, D = - ---]]
                  16        16      1024         32
(%i4) lsquares_residual_mse (
       M, [z,x,y], (z + D)^2 = A*x + B*y + C, first (a));
                              169
(%o4)                         ----
                              2560

Categories:  Package lsquares

関数: plsquares  
    plsquares (Mat,VarList,depvars)  
    plsquares (Mat,VarList,depvars,maxexpon)  
    plsquares (Mat,VarList,depvars,maxexpon,maxdegree)

「最小二乗」法によるデータ表の多変数多項式調整。 Matはデータを含む行列であり、 VarListは変数名 (Mat列それぞれの名前ですが、 Mat列を無視する際には変数名の代わりに"-")のリストであり、 depvarsは従属変数の名前か、 従属変数の1つ以上の名前(その名前 VarListの中になければいけません)のリストであり、 maxexponはオプションの、独立変数それぞれの最大指数(デフォルト1)であり、 maxdegreeはオプションの最大多項式次数(デフォルトで maxexpon)です; それぞれの項の指数の和は maxdegree以下でなければいけないことに注意してください。 もし maxdgree = 0なら制限は適用されません。

もし depvarsが(リストではなく)従属変数の名前なら、 plsquaresは調整された多項式を返します。 もし depvarsが1つ以上の従属変数のリストなら、 plsquaresは調整された多項式のリストを返します。 適合度について知らせるために決定係数が表示されます。 それは 0(無相関)から 1(厳密相関)までの範囲です。 これらの値はグローバル変数 DETCOEF(もし depvarsがリストならリスト)にも保管されます。

多変数線形調整の簡単な例:

 
(%i1) load("plsquares")$

(%i2) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
                [x,y,z],z);
     Determination Coefficient for z = .9897039897039897
                       11 y - 9 x - 14
(%o2)              z = ---------------
                              3

次数制限のない同じ例:

 
(%i3) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
                [x,y,z],z,1,0);
     Determination Coefficient for z = 1.0
                    x y + 23 y - 29 x - 19
(%o3)           z = ----------------------
                              6

N面ポリゴンは何本の対角線を持ちますか? いくつの多項式次数を使うべきですか?

 
(%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
                [N,diagonals],diagonals,5);
     Determination Coefficient for diagonals = 1.0
                                2
                               N  - 3 N
(%o4)              diagonals = --------
                                  2
(%i5) ev(%, N=9);   /* Testing for a 9 sides polygon */
(%o5)                 diagonals = 27

何通りの方法でn掛けnのチェス盤に2つのクィーンを取られないように置けますか?

 
(%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
                [n,positions],[positions],4);
     Determination Coefficient for [positions] = [1.0]
                         4       3      2
                      3 n  - 10 n  + 9 n  - 2 n
(%o6)    [positions = -------------------------]
                                  6
(%i7) ev(%[1], n=8); /* Testing for a (8 x 8) chessboard */
(%o7)                positions = 1288

6つの従属変数を持つ例:

 
(%i8) mtrx:matrix([0,0,0,0,0,1,1,1],[0,1,0,1,1,1,0,0],
                  [1,0,0,1,1,1,0,0],[1,1,1,1,0,0,0,1])$
(%i8) plsquares(mtrx,[a,b,_And,_Or,_Xor,_Nand,_Nor,_Nxor],
                     [_And,_Or,_Xor,_Nand,_Nor,_Nxor],1,0);
      Determination Coefficient for
[_And, _Or, _Xor, _Nand, _Nor, _Nxor] =
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
(%o2) [_And = a b, _Or = - a b + b + a,
_Xor = - 2 a b + b + a, _Nand = 1 - a b,
_Nor = a b - b - a + 1, _Nxor = 2 a b - b - a + 1]

この関数を使うには最初に load("lsquares")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

70. minpack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

70.1 Introduction to minpack

Minpackは Netlibで入手可能な Fortranライブラリ MINPACKの (f2clを介した) Common Lisp翻訳です。

Categories:  Numerical methods · Share packages · Package minpack · Package minpack


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

70.2 Functions and Variables for minpack

関数: minpack_lsquares (flist, varlist, guess [, tolerance, jacobian])

リスト flistの関数の平方の和を最小化する点を計算します。 変数はリスト varlistの中にあります。 最適点の初期推測は guessで供給されなければいけません。

オプションのキーワード引数 tolerancejacobianはアルゴリズム上のある制御を提供します。 toleranceは平方の和に関する望みの見積もり相対誤差です。 jacobianは Jacobianを指定するのに使うことができます。 もし jacobianが与えられず(デフォルトの) true なら、 Jacobianを flistから計算します。 もし jacobianfalseなら数値近似を使います。

minpack_lsquaresはリストを返します。 一番目の項目は見積られた解です; 二番目は平方の和で,三番目はアルゴリズムの成功を示します。 可能な値は以下の通りです。

0

不適切な入力パラメータ。

1

アルゴリズムが平方の和の相対誤差がせいぜい toleranceと見積もります。

2

アルゴリズムがxと解の相対誤差がせいぜい toleranceと見積もります。

3

info = 1と info = 2の条件が両方とも成立します。

4

fvec が機械精度の jacobianの列に直交的です。

5

iflag = 1が 100*(n+1)に至る fcnへのコールの回数

6

tolが小さすぎます。平方の和の更なる減少は不可能です。

7

tolが小さすぎます。近似解 xの更なる改善は不可能です。

 
/* Problem 6: Powell singular function */
(%i1) powell(x1,x2,x3,x4) :=
         [x1+10*x2, sqrt(5)*(x3-x4), (x2-2*x3)^2,
              sqrt(10)*(x1-x4)^2]$
(%i2) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4],
                       [3,-1,0,1]);
(%o2) [[1.652117596168394e-17, - 1.652117596168393e-18,
        2.643388153869468e-18, 2.643388153869468e-18],
       6.109327859207777e-34, 4]
 
/* Same problem but use numerical approximation to Jacobian */
(%i3) minpack_lsquares(powell(x1,x2,x3,x4), [x1,x2,x3,x4],
                       [3,-1,0,1], jacobian = false);
(%o3) [[5.060282149485331e-11, - 5.060282149491206e-12,
        2.179447843547218e-11, 2.179447843547218e-11],
       3.534491794847031e-21, 5]

関数: minpack_solve (flist, varlist, guess [, tolerance, jacobian])

n個の未知数に関する n個の方程式系を解きます。 n個の方程式形はリスト flistで与えられます。 解の初期推測は guessの中で提供されます。

オプションのキーワード引数 tolerancejacobianはアルゴリズム上のある制御を提供します。 toleranceは平方の和に関して望まれる見積り相対誤差です。 jacobianは Jacobianを指定するのに使うことができます。 もし jacobianを与えないか、(デフォルトの) trueなら、 Jacobianを flistから計算します。 もし jacobianfalseなら数値近似を使います。

minpack_solveはリストを返します。 一番目の項目は見積られた解です; 二番目は平方の和で,三番目はアルゴリズムの成功を示します。 可能な値は以下の通りです。

0

不適切な入力パラメータ。

1

アルゴリズムが、解の相対誤差がせいぜい toleranceと見積もります。

2

iflag = 1で fcnをコールした回数が 100*(n+1)に達しました。

3

tolが小さ過ぎます。平方和の中で換算がこれ以上不可能です。

4

繰り返しがよい進捗を産んでいません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

71. makeOrders


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

71.1 Functions and Variables for makeOrders

関数: makeOrders (indvarlist,orderlist)

引数までの多項式のべきすべてのリストを返します。

 
(%i1) load("makeOrders")$

(%i2) makeOrders([a,b],[2,3]);
(%o2) [[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1],
            [1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3]]
(%i3) expand((1+a+a^2)*(1+b+b^2+b^3));
       2  3      3    3    2  2      2    2    2
(%o3) a  b  + a b  + b  + a  b  + a b  + b  + a  b + a b
                                                  2
                                           + b + a  + a + 1

ここで、 [0, 1]は項 bに関連づけられ、 [2, 3]a^2 b^3に関連づけられます。

この関数を使うには最初に load("makeOrders")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

72. mnewton


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

72.1 Introduction to mnewton

mnewtonは1変数または多変数の非線形方程式を解くための Newton法の実装です。

Categories:  Numerical methods · Share packages · Package mnewton


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

72.2 Functions and Variables for mnewton

オプション変数: newtonepsilon

デフォルト値: 10.0^(-fpprec/2)

mnewton関数が解に向かって収束した時を決定する精度。 もし newtonepsilonが多倍長浮動小数点なら、 mnewton計算を多倍長浮動小数点でします。 mnewtonも参照してください。

Categories:  Package mnewton

オプション変数: newtonmaxiter

デフォルト値: 50

もし収束しないか収束が遅すぎるなら mnewton関数を止める繰り返しの最大数。

mnewtonも参照してください。

Categories:  Package mnewton

関数: mnewton (FuncList,VarList,GuessList)

Newton法を使った複数非線形関数の解。 FuncListは解くべき関数のリスト、 VarListは変数名のリスト、 GuessListは初期近似のリストです。

solve()が返すのと同じフォーマットで解を返されます。 もし解が見つからないなら、[]を返します。

グローバル変数 newtonepsilonnewtonmaxiterがこの関数を制御します。

 
(%i1) load("mnewton")$

(%i2) mnewton([x1+3*log(x1)-x2^2, 2*x1^2-x1*x2-5*x1+1],
              [x1, x2], [5, 5]);
(%o2) [[x1 = 3.756834008012769, x2 = 2.779849592817897]]
(%i3) mnewton([2*a^a-5],[a],[1]);
(%o3)             [[a = 1.70927556786144]]
(%i4) mnewton([2*3^u-v/u-5, u+2^v-4], [u, v], [2, 2]);
(%o4) [[u = 1.066618389595407, v = 1.552564766841786]]

変数 newtonepsilonは近似の精度を制御します。 それはまた、計算を浮動小数点で実行するか、多倍長浮動小数点で実行するかを制御します。

 
(%i1) (load("mnewton"), fpprec : 25, newtonepsilon : bfloat(10^(-fpprec+5)))$

(%i2) mnewton([2*3^u-v/u-5, u+2^v-4], [u, v], [2, 2]);
(%o2) [[u = 1.066618389595406772591173b0, v = 1.552564766841786450100418b0]]

この関数を使うためには最初に load("mnewton")と書いてください。 newtonepsilonnewtonmaxiterも参照してください。

Categories:  Package mnewton


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73. numericalio


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.1 Introduction to numericalio

numericalioはファイルやストリームを読み書きする関数のコレクションです。 プレインテキスト入出力のための関数は、数(整数、浮動小数点、多倍長浮動小数点)やシンボル、 文字列を読み書きできます。 バイナリ入出力のための関数は、浮動小数点数だけを読み書きできます。

もし既に入力データを記憶すべきリスト、行列、配列オブジェクトがあるなら、 numericalio入力関数群はデータをそのオブジェクトに書き込むことができます。 そうでないなら、 numericalioはデータを記憶するオブジェクトの構造をある程度推測し、 そのオブジェクトを返します。

Categories:  File input · File output · Share packages · Package numericalio


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.1.1 Plain-text input and output

プレインテキスト入出力では、 読み書きする項目それぞれがアトムであることが仮定されます: 整数、浮動小数点数、多倍長浮動小数点、文字列、シンボルであり、 有理数や複素数や他のどんなアトムでない式でもありません。 numericalio関数群は、アトムでない式に直面した時、 何か適当なことを試みるかもしれませんが、 結果はここで規定されず、変更の対象となります。

入力ファイルと出力ファイルどちらのアトムも、 Maximaバッチファイルや対話コンソールでのものと同じフォーマットを持ちます。 特に、文字列はダブルクォートで括られ、 バックスラッシュ \は次の文字の任意の特殊解釈を抑制し、クエスチョンマーク ?は (Maximaシンボルではなく、) Lispシンボルを意味するシンボルの始まりとして認識されます。 (分割された行をつなぎ合わせる)いかなる継続文字も認識されません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.1.2 Separator flag values for input

プレインテキスト入出力のための関数は、オプションの引数 separator_flagを取ります。 それはどの文字がデータを分離するかを示します。

プレインテキスト入力では、 separator_flagの以下の値が認識されます: コンマで区切られた値のための comma、 垂直バー文字 |で区切られた値のための pipe、 セミコロン ;で区切られた値のための semicolon、 空白かタブ文字で区切られた値のための space。 もしファイル名が .csvで終わり、 separator_flagが指定されていないなら、 commaを仮定します。 もしファイル名が .csv以外の何かで終わり、 separator_flagが指定されていないなら、 spaceを仮定します。

プレインテキスト入力では、 複数続く空白とタブ文字は1つの区切り文字として数えられます. しかしながら、複数のコンマ、パイプまたはセミコロンは意味を持ちます。 連続するコンマ、パイプ、セミコロン文字は (空白やタブが間に入ろうが入るまいが) 区切り文字の間に falseを持つと見なされます。 例えば、 1234,,Foo1234,false,Fooと同じと扱われます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.1.3 Separator flag values for output

プレインテキスト出力では、comma, pipe, semicolon, そして spaceはもちろん、タブ文字で区切られた値のための tabも、 separator_flagの値として認識されます。

プレインテキスト出力では、 falseアトムは以下のように書かれます: リスト [1234, false, Foo]1234,false,Fooと書かれ、 出力を 1234,,Fooにつぶすことはありません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.1.4 Binary floating-point input and output

numericalio関数群は8バイトIEEE754浮動小数点数を読み書きすることができます。 これらの数は、 assume_external_byte_orderで設定されたグローバルフラグに従って、 最下位バイトから順でも最上位バイトから順でも記憶することができます。

もし指定されないなら、 numericalioは外部バイト順は最上位バイトからと仮定します。

他の種類の数は8バイト浮動小数点に強制変換されます; numericalioはアトムでないバイナリデータを読み書きできません。

いくつかのLisp実装は IEEE 754の特殊値(正負の無限大、非数値、指数表現でない数)を認識しません。 numericalioでそんな値を読み込むことの効果は未定義です。

numericalioは バイトストリームを読んだり書いたりするためのストリームを開く関数を含みます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.2 Functions and Variables for plain-text input and output

関数: read_matrix  
    read_matrix (S)  
    read_matrix (S, M)  
    read_matrix (S, separator_flag)  
    read_matrix (S, M, separator_flag)

read_matrix(S)は、 ソースSを読み込み、行列として内容全体を返します。 行列のサイズは入力データから推論されます; ファイルの行それぞれは行列の 1行になります。 もし複数の行が異なる長さを持つなら read_matrixはエラーを出力します。

read_matrix(S, M)は、 Mが一杯になるか、ソースが尽きるまで、ソース Sを行列 Mに読み込みます。 入力データは行優先順に行列に読み込まれます; 入力は Mと同じ行数と列数を持つ必要はありません。

ソース Sは 例えばファイルのまさに最初の行をスキップすることを許すファイル名かストリームでありえます。 (もし 最初の行が列の説明を含む CSVデータを読むなら、それは役立つかもしれません。)

 
s : openr("data.txt");
readline(s);  /* skip the first line */
M : read_matrix(s, 'comma);  /* read the following (comma-separated) lines into matrix M */
close(s);

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagを指定しないならファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File input

関数: read_array  
    read_array (S, A)  
    read_array (S, A, separator_flag)

Aが一杯になるか、ソースが尽きるまで、ソース Sを配列 Aに読み込みます。 入力データは列優先順に配列に読み込まれます; 入力は Aの次元に一致する必要はありません。

ソース Sはファイル名かストリームかもしれません。

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagを指定しないならファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File input

関数: read_hashed_array  
    read_hashed_array (S, A)  
    read_hashed_array (S, A, separator_flag)

ソース Sが読み込まれ、ハッシュ配列として内容全体が返されます。 ソース Sはファイル名かストリームかもしれません。

read_hashed_arrayは、 それぞれの行の最初の項目をハッシュキーとして扱い、 行の残りを(リストとして)キーと結合します。 例えば、行 567 12 17 32 55A[567]: [12, 17, 32, 55]$と同値です。 行数は要素数と同じである必要はありません。

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagが指定しないならファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File input

関数: read_nested_list (S)
関数: read_nested_list (S, separator_flag)

ソース Sを読み込み、入れ子のリストとして内容全体を返します。 ソース Sはファイル名かストリームかもしれません。

read_nested_listは入力のそれぞれの行について部分リストを持つリストを返します。 行数は要素数と同じである必要はありません。 空の行は無視されません: 空の行は空の部分リストをもたらします。

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagを指定しないなら、ファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File input

関数: read_list  
    read_list (S)  
    read_list (S, L)  
    read_list (S, separator_flag)  
    read_list (S, L, separator_flag)

read_list(S)は、ソース Sを読み込み、フラットなリストとして内容全体を返します。

read_list(S, L)は、 Lが一杯になるかソースが尽きるまで、ソース Sをリスト Lに読み込みます。

ソース Sはファイル名かストリームかもしれません。

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagを指定しないなら、ファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File input

関数: write_data  
    write_data (X, D)  
    write_data (X, D, separator_flag)

オブジェクト Xをデスティネーション Dに書き出します。

write_dataは行列を行につき一行で行優先順に書き出します。

write_dataarraymake_arrayで生成された配列を行優先順でスラブ毎に改行して書き出します。 高次元スラブは更に改行で分割されます。

write_dataはハッシュ配列をキーそれぞれに結合したリストが続くように 1行に書き出します。

write_dataは入れ子のリストをそれぞれの部分リストを 1行に書き出します。

write_dataはフラットなリストすべてを 1行に書き出します。

デスティネーション Dはファイル名かストリームかもしれません。 デスティネーションがファイル名の時、グローバル変数 file_output_appendは出力ファイルに追加されるか上書きされるか決定します。 デスティネーションがストリームの時、 write_dataはデータすべてが書かれた後、特殊なアクションを取ります; 特にストリームは開いたままとなります。

separator_flagの認識される値は comma, pipe, semicolon, spaceです。 もし separator_flagを指定しないなら、ファイルは空白で区切られていると仮定します。

Categories:  Package numericalio · File output


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

73.3 Functions and Variables for binary input and output

関数: assume_external_byte_order (byte_order_flag)

numericalioにバイナリデータを読み書きするためのバイトオーダーを知らせます。 byte_order_flagの2つの値が認識されます: リトルエンディアンバイトオーダーとも呼ばれる最下位バイト優先を示す lsb と ビッグエンディアンバイトオーダーとも呼ばれる最上位バイト優先を示す msb

もし指定しないなら、 numericalioは外部のバイトオーダーは最上位バイト優先を仮定します。

Categories:  Package numericalio

関数: openr_binary (file_name)

file_nameという名前のファイルを読むための 8ビット符号なしバイトの入力ストリームを返します。

Categories:  Package numericalio · File input

関数: openw_binary (file_name)

file_nameという名前のファイルに書き込むための 8ビット符号なしバイトの出力ストリームを返します。

Categories:  Package numericalio · File output

関数: opena_binary (file_name)

file_nameという名前のファイルに追加するための 8ビット符号なしバイトの出力ストリームを返します。

Categories:  Package numericalio · File output

関数: read_binary_matrix (S, M)

Mが一杯になるかソースが尽きるまで、ソース Sから行列 Mにバイナリの 8バイト浮動小数点数を読み込みます。 Mの要素は行優先順で読み込まれます。

ソース Sはファイル名かストリームかもしれません。

ソースの要素のバイトオーダーは assume_external_byte_orderで指定します。

Categories:  Package numericalio · File input

関数: read_binary_array (S, A)

Aが一杯になるかソースが尽きるまで、ソース Sから配列 Aにバイナリの 8バイト浮動小数点数を読み込みます。 Mの要素は行優先順で読み込まれます。

ソース Sはファイル名かストリームかもしれません。

ソースの要素のバイトオーダーは assume_external_byte_orderで指定されます。

Categories:  Package numericalio · File input

関数: read_binary_list  
    read_binary_list (S)  
    read_binary_list (S, L)

read_binary_list(S)は、バイナリ 8バイト浮動小数点数の数列としてソース Sの内容全体を読み込み、それをリストとして返します。 ソース Sはファイル名かストリームかもしれません。

read_binary_list(S, L)は、リスト Lが一杯になるかソースが尽きるまで、ソース Sからバイナリ8バイト浮動小数点数を読み込みます。

ソースの要素のバイトオーダーは assume_external_byte_orderで指定します。

Categories:  Package numericalio · File input

関数: write_binary_data (X, D)

バイナリ 8バイトIEEE 754浮動小数点数で構成されるオブジェクト Xをディスティネーション Dに書き込みます。 他の種類の数は 8バイト浮動小数点に強制変換されます。 write_binary_dataは非数データを書くことはできません。

オブジェクト Xはリストか、入れ子のリスト、行列、もしくは、 arraymake_arrayで生成された配列であり得ます; Xは未宣言配列や他のいかなる種類のオブジェクトもありえません。 write_binary_dataは入れ子のリスト、行列、配列を行優先順に書き込みます。

デスティネーション Dはファイル名かストリームかもしれません。 デスティネーションがファイル名の時、グローバル変数 file_output_appendが出力ファイルに追加されるか上書きされるか決めます。 デスティネーションがストリームの時、データすべてが書かれた後 write_binary_dataは特別な動作は何もしません; 特に、ストリームは開かれたままです。

デスティネーションの要素のバイトオーダーは assume_external_byte_orderで指定します。

Categories:  Package numericalio · File output


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

74. operatingsystem


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

74.1 Introduction to operatingsystem

パッケージ operatingsystemは、 ファイルシステム操作のようなオペレーティングシステムのタスクのための関数を含みます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

74.2 Directory operations

関数: chdir (dir)

ディレクトリ dirに変えます。

関数: mkdir (dir)

ディレクトリ dirを作ります。

関数: rmdir (dir)

ディレクトリ dirを削除します。

関数: getcurrentdirectory ()

現在のワーキングディレクトリを返します。

directoryも参照して下さい。

例:

 
(%i1) load("operatingsystem")$
(%i2) mkdir("testdirectory")$
(%i3) chdir("testdirectory")$
(%i4) chdir("..")$
(%i5) rmdir("testdirectory")$


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

74.3 File operations

関数: copy_file (file1, file2)

ファイル file1file2にコピーします。

関数: rename_file (file1, file2)

ファイル file1file2にリネームします。

関数: delete_file (file1)

ファイル file1を削除します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

74.4 Environment operations

関数: getenv (env)

環境変数 envの値を取得します。

例:

 
(%i1) load("operatingsystem")$
(%i2) getenv("PATH");
(%o2) /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

75. opsubst


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

75.1 Functions and Variables for opsubst

関数: opsubst (f,g,e)
関数: opsubst (g=f,e)
関数: opsubst ([g1=f1,g2=f2,..., gn=fn],e)

関数 opsubstは、 opsubstは式の中の演算子への代入だけをすることを除いて、 関数 substに似ています。 一般に、 fが式 eの中の演算子の時、 式 eの中で gfに代入します。

演算子を決定するために、 opsubstinflagを trueに設定します。 これは、 opsubstが式の中の表示演算子ではなく内部演算子への代入をすることを意味します。

例:

 
(%i1) load ("opsubst")$

(%i2) opsubst(f,g,g(g(x)));
(%o2)                     f(f(x))
(%i3) opsubst(f,g,g(g));
(%o3)                       f(g)
(%i4) opsubst(f,g[x],g[x](z));
(%o4)                       f(z)
(%i5) opsubst(g[x],f, f(z));
(%o5)                      g (z)
                            x
(%i6) opsubst(tan, sin, sin(sin));
(%o6)                     tan(sin)
(%i7) opsubst([f=g,g=h],f(x));
(%o7)                       h(x)

内部的に Maximaは単項否定や割り算、引き算演算子を使いません; 例えば:

 
(%i8) opsubst("+","-",a-b);
(%o8)                     a - b
(%i9) opsubst("f","-",-a);
(%o9)                      - a
(%i10) opsubst("^^","/",a/b);
                             a
(%o10)                       -
                             b

-a*bの内部表現は *(-1,a,b)です; 例えば、

 
(%i11) opsubst("[","*", -a*b);
(%o11)                  [- 1, a, b]

どちらかの演算子が Maximaシンボルでない時、他のある関数は一般にエラーを知らせます:

 
(%i12) opsubst(a+b,f, f(x));

Improper name or value in functional position:
b + a
 -- an error.  Quitting.  To debug this try debugmode(true);

しかしながら、添字付き演算子は許されます:

 
(%i13) opsubst(g[5],f, f(x));
(%o13)                     g (x)
                            5

この関数を使うためには最初に load("opsubst")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76. orthopoly


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1 Introduction to orthogonal polynomials

orthopolyは、 Chebyshev, Laguerre, Hermite, Jacobi, Legendre, 超球 (Gegenbauer)多項式を含むいくつかの種類の直交多項式の シンボリックな評価と数値評価のためのパッケージです。 さらに、 orthopolyは球 Bessel, 球 Hankel, 球調和関数のサポートを含みます。

ほとんどの部分に関して、 orthopolyは Abramowitz and StegunのHandbook of Mathematical Functions, Chapter 22 (10th printing, December 1972)の慣例に従います; 加えて、 Gradshteyn and RyzhikのTable of Integrals, Series, and Products (1980 corrected and enlarged edition)と Eugen MerzbacherのQuantum Mechanics (2nd edition, 1970)を使います。

University of Nebraska at Kearney (UNK)のBarton Willisが orthopolyパッケージとドキュメンテーションを書きました。 パッケージは GNU General Public License (GPL)の下で公開されています。

Categories:  Orthogonal polynomials · Share packages · Package orthopoly


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.1 Getting Started with orthopoly

load ("orthopoly")orthopolyパッケージをロードします。

3次の Legendre多項式を見つけるには、

 
(%i1) legendre_p (3, x);
                      3             2
             5 (1 - x)    15 (1 - x)
(%o1)      - ---------- + ----------- - 6 (1 - x) + 1
                 2             2

これを xの冪の和として表すには、 ratsimpratを結果に適用してください。

 
(%i2) [ratsimp (%), rat (%)];
                        3           3
                     5 x  - 3 x  5 x  - 3 x
(%o2)/R/            [----------, ----------]
                         2           2

あるいはまた、 legendre_pの第二引数 (「主」変数)を正準有理形 (CRE)にしてください。

 
(%i1) legendre_p (3, rat (x));
                              3
                           5 x  - 3 x
(%o1)/R/                   ----------
                               2

浮動小数点評価に関して、 orthopolyはランニング誤差解析を使って誤差の上限を推定します。 例えば、

 
(%i1) jacobi_p (150, 2, 3, 0.2);
(%o1) interval(- 0.062017037936715, 1.533267919277521E-11)

区間は interval (c, r)形を取ります。 ここで cは中央値、 rは区間の半径です。 Maximaは区間上の算術をサポートしていないので、グラフィックスなどいくつかの状況では 誤差を抑制し、区間の中央値だけ出力したいでしょう。 これをするには、オプション変数 orthopoly_returns_intervalsfalseに設定してください。

 
(%i1) orthopoly_returns_intervals : false;
(%o1)                         false
(%i2) jacobi_p (150, 2, 3, 0.2);
(%o2)                  - 0.062017037936715

更に知るにはセクション see Floating point Evaluationを参照してください。

orthopolyのほとんどの関数は gradefプロパティを持ちます; 例えば、

 
(%i1) diff (hermite (n, x), x);
(%o1)                     2 n H     (x)
                               n - 1
(%i2) diff (gen_laguerre (n, a, x), x);
              (a)               (a)
           n L   (x) - (n + a) L     (x) unit_step(n)
              n                 n - 1
(%o2)      ------------------------------------------
                               x

二番目の例の単位階段関数は、 nが 0で評価することによって、そうでなければ生じる誤差を抑制します。

 
(%i3) ev (%, n = 0);
(%o3)                           0

gradefプロパティは「主」変数にのみ適用されます; 他の引数に関する導関数は、普通、エラーメッセージに帰着します; 例えば、

 
(%i1) diff (hermite (n, x), x);
(%o1)                     2 n H     (x)
                               n - 1
(%i2) diff (hermite (n, x), n);

Maxima doesn't know the derivative of hermite with respect the first
argument
 -- an error.  Quitting.  To debug this try debugmode(true);

一般に orthopolyの関数はリストや行列上に写像します。 写像を完全に評価するには、 オプション変数 doallmxopslistarithはともに true(デフォルト値)でなければいけません。 行列上への写像を見るには以下を考えてください。

 
(%i1) hermite (2, x);
                                     2
(%o1)                    - 2 (1 - 2 x )
(%i2) m : matrix ([0, x], [y, 0]);
                            [ 0  x ]
(%o2)                       [      ]
                            [ y  0 ]
(%i3) hermite (2, m);
               [                             2  ]
               [      - 2        - 2 (1 - 2 x ) ]
(%o3)          [                                ]
               [             2                  ]
               [ - 2 (1 - 2 y )       - 2       ]

二番目の例では、値の i, j要素は hermite (2, m[i,j])です; 次の例で見るように、これは計算 -2 + 4 m . mと同じではありません。

 
(%i4) -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
                    [ 4 x y - 2      0     ]
(%o4)               [                      ]
                    [     0      4 x y - 2 ]

定義域外の点で関数を評価すると、一般に、 orthopolyは未評価関数を返します。 例えば、

 
(%i1) legendre_p (2/3, x);
(%o1)                        P   (x)
                              2/3

orthopolyは TeXへの翻訳をサポートします; 端末上での 2次元出力も行います。

 
(%i1) spherical_harmonic (l, m, theta, phi);
                          m
(%o1)                    Y (theta, phi)
                          l
(%i2) tex (%);
$$Y_{l}^{m}\left(\vartheta,\varphi\right)$$
(%o2)                         false
(%i3) jacobi_p (n, a, a - b, x/2);
                          (a, a - b) x
(%o3)                    P          (-)
                          n          2
(%i4) tex (%);
$$P_{n}^{\left(a,a-b\right)}\left({{x}\over{2}}\right)$$
(%o4)                         false

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.2 Limitations

式がいくつかの直交多項式を記号順で含む時、 式が実際に 0になる可能性がありますが、 まだ Maximaはそれを零に整理することができません。 もしそんな量で割るなら、困ったことになるでしょう。 例えば、以下の式は 1より大きな整数 nで零になりますが、 まだ Maximaはそれを零に整理することができません。

 
(%i1) (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x)
      + (1 - n) * legendre_p (n - 2, x);
(%o1)  (2 n - 1) P     (x) x - n P (x) + (1 - n) P     (x)
                  n - 1           n               n - 2

特定の nでは式を零に換算できます。

 
(%i2) ev (% ,n = 10, ratsimp);
(%o2)                           0

一般に、直交多項式の多項式形は浮動小数点評価に関しては不適当です。 以下は例です。

 
(%i1) p : jacobi_p (100, 2, 3, x)$

(%i2) subst (0.2, x, p);
(%o2)                3.4442767023833592E+35
(%i3) jacobi_p (100, 2, 3, 0.2);
(%o3)  interval(0.18413609135169, 6.8990300925815987E-12)
(%i4) float(jacobi_p (100, 2, 3, 2/10));
(%o4)                   0.18413609135169

真値は約0.184です; この計算は極端な減算消去誤差に苦しみます。 多項式を展開し評価すると、よりよい結果を与えます。

 
(%i5) p : expand(p)$
(%i6) subst (0.2, x, p);
(%o6) 0.18413609766122982

これは一般的な規則ではありません; 多項式を展開することはいつも、より数値評価に適した式を生じるわけではありません。 数値評価する最もよい方法は断然、関数引数を少なくとも1つ浮動小数点数にすることです。 それをすることで、特別な浮動小数点アルゴリズムが評価に使われます。

Maximaの float関数は幾分でたらめです; もし floatを記号次数や順序パラメータを持つ直交多項式を含む式に適用するなら、 これらのパラメータは浮動小数点に変換されるかもしれません; その後、式は完全には評価されません。 以下を考えてください。

 
(%i1) assoc_legendre_p (n, 1, x);
                               1
(%o1)                         P (x)
                               n
(%i2) float (%);
                              1.0
(%o2)                        P   (x)
                              n
(%i3) ev (%, n=2, x=0.9);
                             1.0
(%o3)                       P   (0.9)
                             2

(%o3)の式は浮動小数点に評価されません; orthopolyは整数を要求するところで浮動小数点値を認識しません。 同様に、 pochhammer_max_indexを越える位数の pochhammer関数の数値評価はトラブルの元かもしれません; 以下を考えてください。

 
(%i1) x :  pochhammer (1, 10), pochhammer_max_index : 5;
(%o1)                         (1)
                                 10

floatを適用することは xを浮動小数点に評価しません。

 
(%i2) float (x);
(%o2)                       (1.0)
                                 10.0

xを浮動小数点に評価するには、 pochhammer_max_indexを 11以上にバインドして、 floatxに適用する必要があります。

 
(%i3) float (x), pochhammer_max_index : 11;
(%o3)                       3628800.0

pochhammer_max_indexのデフォルト値は 100です; orthopolyをロードした後、値を変えてください。

最後に、参考書は直交多項式の定義を変えることを承知してください; 一般的に Abramowitz and Stegunの慣例を使っています。

orhtopolyのバグを疑う前にいくつかの特殊なケースをチェックして、あなたの定義が orthopolyが使っているものと一致しているかを明らかにしてください。

定義はしばしば規格化について異なります; 時々、著者は (-1, 1)以外の区間上で直交な族を作る関数の「シフト」版を使います。 例えば、 (0, 1)上で直交するLegendre多項式を定義するのに、 以下を定義します。

 
(%i1) shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$

(%i2) shifted_legendre_p (2, rat (x));
                            2
(%o2)/R/                 6 x  - 6 x + 1
(%i3) legendre_p (2, rat (x));
                               2
                            3 x  - 1
(%o3)/R/                    --------
                               2


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.3 Floating point Evaluation

orthopolyの関数のほとんどは浮動小数点評価中の誤差を見積もるのに、 ランニング誤差解析を使います; 例外は球 Bessel関数と第二種 Legendreの陪多項式です。 数値評価のため、球 Bessel関数は SLATEC関数をコールします。 第二種 Legendreの陪多項式の数値評価のために特別な方法は使われません。

ランニング誤差解析は (丸め単位としても知られている)計算機イプシロンの二次か高次の誤差を無視します。 2,3の他の誤差も無視します。 (ありそうにありませんが、)実際の誤差は推定を越える可能性があります。

区間は形式 interval (c, r)を持ちます。 ここで、cは区間の中心で、 rは半径です。 区間の中心は複素数であり得ますし、 半径はいつも正の実数です。

以下は例です。

 
(%i1) fpprec : 50$

(%i2) y0 : jacobi_p (100, 2, 3, 0.2);
(%o2) interval(0.1841360913516871, 6.8990300925815987E-12)
(%i3) y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
(%o3) 1.8413609135168563091370224958913493690868904463668b-1

実際の誤差が誤差推定よりも小さいことをテストしましょう。

 
(%i4) is (abs (part (y0, 1) - y1) < part (y0, 2));
(%o4)                         true

なるほど、この例では、 誤差推定は真の誤差の上限です。

Maximaは区間の算術をサポートしていません。

 
(%i1) legendre_p (7, 0.1) + legendre_p (8, 0.1);
(%o1) interval(0.18032072148437508, 3.1477135311021797E-15)
        + interval(- 0.19949294375000004, 3.3769353084291579E-15)

ユーザーは区間算数を行う計算をする演算子を定義できます。 区間の足し算を定義するには、以下のように定義できます。

 
(%i1) infix ("@+")$

(%i2) "@+"(x,y) := interval (part (x, 1) + part (y, 1), part (x, 2)
      + part (y, 2))$

(%i3) legendre_p (7, 0.1) @+ legendre_p (8, 0.1);
(%o3) interval(- 0.019172222265624955, 6.5246488395313372E-15)

引数が複素数の時、特殊な浮動小数点ルーチンがコールされます。 例えば、

 
(%i1) legendre_p (10, 2 + 3.0*%i);
(%o1) interval(- 3.876378825E+7 %i - 6.0787748E+7,
                                           1.2089173052721777E-6)

これを真値と比較しましょう。

 
(%i1) float (expand (legendre_p (10, 2 + 3*%i)));
(%o1)          - 3.876378825E+7 %i - 6.0787748E+7

更に、引数が多倍長浮動小数点の時、特殊な浮動小数点ルーチンがコールされます; しかしながら、多倍長浮動小数点は倍精度浮動小数点に変換され、最終結果は倍精度です。

 
(%i1) ultraspherical (150, 0.5b0, 0.9b0);
(%o1) interval(- 0.043009481257265, 3.3750051301228864E-14)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.4 Graphics and orthopoly

直交多項式を含む式をプロットするには 2つのことをしなければいけません:

  1. オプション変数 orthopoly_returns_intervalsfalseに設定する。
  2. orthopoly関数のすべてのコールをクォートする。

もし関数コールがクォートされていないなら、 Maximaはプロットする前にそれらを多項式に評価します; 結果として、特殊な浮動小数点コードはコールされません。 以下は、 Legendre多項式を含む式をどうやってプロットするかの例です。

 
(%i1) plot2d ('(legendre_p (5, x)), [x, 0, 1]),
                        orthopoly_returns_intervals : false;
(%o1)

figures/orthopoly1

legendre_p (5, x)全体をクォートします; これは 'legendre_p (5, x)を使って関数名をクォートするだけとは違います。

Categories:  Plotting


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.5 Miscellaneous Functions

orthopolyパッケージは Pochhammerシンボルと単位階段函数を定義します。 orthopolygradef文の中で Kroneckerのデルタ函数と単位階段函数を使います。

Pochhammerシンボルをガンマ函数の商に変換するには、 makegammaを使ってください。

 
(%i1) makegamma (pochhammer (x, n));
                          gamma(x + n)
(%o1)                     ------------
                            gamma(x)
(%i2) makegamma (pochhammer (1/2, 1/2));
                                1
(%o2)                       ---------
                            sqrt(%pi)

Pochhammerシンボルの導函数は psi函数を使って与えられます。

 
(%i1) diff (pochhammer (x, n), x);
(%o1)             (x)  (psi (x + n) - psi (x))
                     n     0             0
(%i2) diff (pochhammer (x, n), n);
(%o2)                   (x)  psi (x + n)
                           n    0

(%o1)の式に注意する必要があります; psi函数の差分は x = -1, -2, .., -nの時多項式です。 これらの多項式は nが正の整数の時、導函数を n - 1次多項式にするように、 pochhammer (x, n)の因子を相殺します。

Pochhammerシンボルはガンマ函数の商としての表現を通して負の位数で定義されます。 以下を考えてください。

 
(%i1) q : makegamma (pochhammer (x, n));
                          gamma(x + n)
(%o1)                     ------------
                            gamma(x)
(%i2) sublis ([x=11/3, n= -6], q);
                               729
(%o2)                        - ----
                               2240

代わりに、この結果を直接得ることができます。

 
(%i1) pochhammer (11/3, -6);
                               729
(%o1)                        - ----
                               2240

単位階段函数は左連続です; 従って、

 
(%i1) [unit_step (-1/10), unit_step (0), unit_step (1/10)];
(%o1)                       [0, 0, 1]

もし零で左連続でも右連続でもない単位階段函数が必要なら、 signumを使って自分のものを定義してください; 例えば、

 
(%i1) xunit_step (x) := (1 + signum (x))/2$

(%i2) [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
                                1
(%o2)                       [0, -, 1]
                                2

unit_step自身を再定義しないでください; orthopolyの中のあるコードは単位階段函数が左連続であることを要求します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.1.6 Algorithms

一般的に、 orthopolyは直交多項式の超幾何表現を使うことで記号評価をします。 超幾何函数は(ドキュメント化されていない)関数 hypergeo11hypergeo21を使って評価されます。 例外は半整数 Bessel函数と第二種 Legendreの陪函数です。 半整数 Bessel函数は明示的な表現を使って評価されます。 第二種 Legendreの陪函数は再帰を使って評価されます。

浮動小数点評価のために、函数のほとんどを超幾何形式に再び変換します; 順方向再帰を使って超幾何函数を評価します。 ここでも、例外は半整数 Bessel函数と第二種 Legendreの陪函数です。 半整数 Bessel函数は SLATECコードを使って数値的に評価されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

76.2 Functions and Variables for orthogonal polynomials

関数: assoc_legendre_p (n, m, x)

次数 nと位数 mの第一種Legendre陪函数。

参考文献: Abramowitz and Stegun, equations 22.5.37, page 779, 8.6.6 (second equation), page 334, and 8.2.5, page 333.

Categories:  Package orthopoly

関数: assoc_legendre_q (n, m, x)

次数 nと位数 mの第二種Legendre陪函数。

参考文献: Abramowitz and Stegun, equation 8.5.3 and 8.1.8.

Categories:  Package orthopoly

関数: chebyshev_t (n, x)

n次の第一種 Chebyshev多項式。

参考文献: Abramowitz and Stegun, equation 22.5.47, page 779.

Categories:  Package orthopoly

関数: chebyshev_u (n, x)

n次の第二種 Chebyshev多項式。

参考文献: Abramowitz and Stegun, equation 22.5.48, page 779.

Categories:  Package orthopoly

関数: gen_laguerre (n, a, x)

次数 nの一般化 Laguerre多項式。

参考文献: Abramowitz and Stegun, equation 22.5.54, page 780.

Categories:  Package orthopoly

関数: hermite (n, x)

n次の Hermite多項式。

参考文献: Abramowitz and Stegun, equation 22.5.55, page 780.

Categories:  Package orthopoly

関数: intervalp (e)

もし入力が区間なら trueを、そうでないなら falseを返します。

関数: jacobi_p (n, a, b, x)

Jacobiの多項式。

Jacobiの多項式は実際には abすべてに対して定義されます; しかし、Jacobi多項式の重み (1 - x)^a (1 + x)^ba <= -1b <= -1で可積分でありません。

参考文献: Abramowitz and Stegun, equation 22.5.42, page 779.

Categories:  Package orthopoly

関数: laguerre (n, x)

n次の Laguerre多項式。

参考文献: Abramowitz and Stegun, equations 22.5.16 and 22.5.54, page 780.

Categories:  Package orthopoly

関数: legendre_p (n, x)

n次の第一種 Legendre多項式。

参考文献: Abramowitz and Stegun, equations 22.5.50 and 22.5.51, page 779.

Categories:  Package orthopoly

関数: legendre_q (n, x)

n次の第二種 Legendre函数。

参考文献: Abramowitz and Stegun, equations 8.5.3 and 8.1.8.

Categories:  Package orthopoly

関数: orthopoly_recur (f, args)

引数 argsを持つ直交函数族 fの漸化式を返します。 再帰は多項式次数に関してです。

 
(%i1) orthopoly_recur (legendre_p, [n, x]);
                    (2 n + 1) P (x) x - n P     (x)
                               n           n - 1
(%o1)   P     (x) = -------------------------------
         n + 1                   n + 1

orthopoly_recurの二番目の引数は 関数 fの正しい数の引数のリストでなければいけません; もしそうでないなら Maximaはエラーをシグナルします。

 
(%i1) orthopoly_recur (jacobi_p, [n, x]);

Function jacobi_p needs 4 arguments, instead it received 2
 -- an error.  Quitting.  To debug this try debugmode(true);

更に、 fが直交多項式族の1つの名前でないなら、エラーがシグナルされます。

 
(%i1) orthopoly_recur (foo, [n, x]);

A recursion relation for foo isn't known to Maxima
 -- an error.  Quitting.  To debug this try debugmode(true);

Categories:  Package orthopoly

変数: orthopoly_returns_intervals

デフォルト値: true

orthopoly_returns_intervalstrueの時、浮動小数点の結果が形式 interval (c, r)で返されます。 ここで、 cは区間の中心で、 rは半径です。 中心は複素数であり得ます; その場合、区間は複素平面上の円です。

Categories:  Package orthopoly

関数: orthopoly_weight (f, args)

3つの要素のリストを返します; 一番目の要素はリスト argsが与える引数を持つ直交多項式族 fの重みの公式です; 二番目と三番目の要素は直交性の区間の下限と上限を与えます。 例えば、

 
(%i1) w : orthopoly_weight (hermite, [n, x]);
                            2
                         - x
(%o1)                 [%e    , - inf, inf]
(%i2) integrate(w[1]*hermite(3, x)*hermite(2, x), x, w[2], w[3]);
(%o2)                           0

fの主変数はシンボルでなければいけません; そうでないなら Maximaはエラーをシグナルします。

Categories:  Package orthopoly

関数: pochhammer (x, n)

Pochhammerシンボル。 n <= pochhammer_max_indexの非負整数 nに対して、式 pochhammer (x, n)n > 0の時、積 x (x + 1) (x + 2) ... (x + n - 1)を評価します。 n = 0の時は 1です。 負の nに対しては、 pochhammer (x, n)(-1)^n / pochhammer (1 - x, -n)として定義されます。 従って、

 
(%i1) pochhammer (x, 3);
(%o1)                   x (x + 1) (x + 2)
(%i2) pochhammer (x, -3);
                                 1
(%o2)               - -----------------------
                      (1 - x) (2 - x) (3 - x)

Pochhammerシンボルをガンマ函数の商に変換するには、 (Abramowitz and Stegun, equation 6.1.22を参照してください) makegammaを使ってください; 例えば、

 
(%i1) makegamma (pochhammer (x, n));
                          gamma(x + n)
(%o1)                     ------------
                            gamma(x)

npochhammer_max_indexを越えるか、 nが記号の時、 pochhammerは名詞形を返します。

 
(%i1) pochhammer (x, n);
(%o1)                         (x)
                                 n

変数: pochhammer_max_index

デフォルト値: 100

pochhammer (n, x)n <= pochhammer_max_indexの時だけ 積を展開します。

例:

 
(%i1) pochhammer (x, 3), pochhammer_max_index : 3;
(%o1)                   x (x + 1) (x + 2)
(%i2) pochhammer (x, 4), pochhammer_max_index : 3;
(%o2)                         (x)
                                 4

参考文献: Abramowitz and Stegun, equation 6.1.16, page 256.

関数: spherical_bessel_j (n, x)

第一種球 Bessel函数。

参考文献: Abramowitz and Stegun, equations 10.1.8, page 437 and 10.1.15, page 439.

関数: spherical_bessel_y (n, x)

第二種球 Bessel函数。

参考文献: Abramowitz and Stegun, equations 10.1.9, page 437 and 10.1.15, page 439.

関数: spherical_hankel1 (n, x)

第一種球 Hankel函数。

参考文献: Abramowitz and Stegun, equation 10.1.36, page 439.

関数: spherical_hankel2 (n, x)

第二種球 Hankel函数。

参考文献: Abramowitz and Stegun, equation 10.1.17, page 439.

関数: spherical_harmonic (n, m, x, y)

球調和函数。

参考文献: Merzbacher 9.64.

Categories:  Package orthopoly

関数: unit_step (x)

左連続の単位階段函数;なので unit_step (x)x <= 0で0であり、 x > 0で1です。

もし0で値1/2を取る単位階段函数が欲しいなら、 (1 + signum (x))/2を使ってください。

関数: ultraspherical (n, a, x)

(Gegenbauer多項式としても知られている)超球多項式。

参考文献: Abramowitz and Stegun, equation 22.5.46, page 779.

Categories:  Package orthopoly


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

77. ratpow

パッケージ ratpowは CRE多項式の分母の指数を見つける関数を提供します。 もし分母の指数が必要なら、代わりに ratdenomを使って先に分母を抽出できます。 戻り値の係数は数を除いて CRE形式です。

CRE多項式の変数のリストを取得するには、 showratvarsが使えます。

CREに関する情報については rat, ratdisrep showratvarsを参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

77.1 Functions and Variables for ratpow

関数: ratp_hipow (expr, x)

ratnumer(expr)の主変数の最大指数を見つけます。

 
(%i1) load("ratpow")$
(%i2) ratp_hipow( x^(5/2) + x^2 , x);
(%o2)                           2
(%i3) ratp_hipow( x^(5/2) + x^2 , sqrt(x));
(%o3)                           5

関数: ratp_lopow (expr, x)

ratnumer(expr)の主変数の最小指数を見つけます。

 
(%i1) load("ratpow")$
(%i2) ratp_lopow( x^5 + x^2 , x);
(%o2)                           2

1x^0に等しいので、以下の例は0を返します:

 
(%i1) load("ratpow")$
(%i2) ratp_lopow( x^5 + x^2 + 1, x);
(%o2)                           0

以下の等式のCRE形式は sqrt(x)xを含みます。 それらは独立変数として解釈されるので、 この場合、 ratp_lopow0を返します:

 
(%i1) load("ratpow")$
(%i2) g:sqrt(x)^5 + sqrt(x)^2;
                             5/2
(%o2)                       x    + x
(%i3) showratvars(g);
                              1/2
(%o3)                       [x   , x]
(%i4) ratp_lopow( g, x);
(%o4)                           0
(%i5) ratp_lopow( g, sqrt(x));
(%o5)                           0

関数: ratp_coeffs (expr, x)

ratnumer(expr)の主変数の指数と係数のリストを生成します。

 
(%i1) load("ratpow")$
(%i2) ratp_coeffs( 4*x^3 + x + sqrt(x), x);
(%o2)/R/         [[3, 4], [1, 1], [0, sqrt(x)]]

関数: ratp_dense_coeffs (expr, x)

ratnumer(expr)の係数のリストを生成します; 戻り値の係数は数を除いて CRE形式です。

 
(%i1) load("ratpow")$
(%i2) ratp_dense_coeffs( 4*x^3 + x + sqrt(x), x);
(%o2)/R/               [4, 0, 1, sqrt(x)]


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

78. romberg


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

78.1 Functions and Variables for romberg

関数: romberg  
    romberg (expr, x, a, b)  
    romberg (F, a, b)

Romberg法による数値積分を計算します。

romberg(expr, x, a, b)は積分 integrate(expr, x, a, b)の概算を返します。

exprは、 xが浮動小数点値にバインドされた時 浮動小数点値に評価される式でなければいけません。

romberg(F, a, b)は積分 integrate(F(x), x, a, b)の概算を返します。 ここで、 xFの名付けられない唯一の引数を表します; 実際の引数は xと名付けられません。 Fは、引数が浮動小数点値の時、浮動小数点値を返す Maximaか Lispの関数でなければいけません。 Fは翻訳またはコンパイルされた Maxima関数を指定することができます。

グローバル変数 rombergabsrombergtolrombergの精度を決定します。 rombergは、連続する近似の間の絶対差が rombergabsよりも小さい時か、連続する近似に関する相対差が rombergtolよりも小さい時、成功のうちに終了します。 従って、 rombergabsが 0.0 (デフォルト)の時、 相対誤差テストだけが rombergに効果を持ちます。

rombergは、 あきらめる前に、せいぜい rombergit回、ステップサイズを半分にします; それゆえ関数評価の最大回数は 2^rombergitです。 もし rombergabsrombergtolによって確立される誤差基準が満たされないなら、 rombergはエラーメッセージを印字します。 rombergはいつも、少なくとも rombergmin回の繰り返しを行います; これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。

rombergは、積分変数を特定の値にバインド(する前ではなく)した後、 被積分関数を繰り返し評価します。 この評価ポリシーは、多次元積分を計算するための rombergの入れ子のコールを可能にします。 しかしながら、誤差計算は入れ子の積分の誤差を考慮しないので、 エラーは過小評価されるかもしれません。 また、多次元問題のために特別に工夫された方法は より少ない関数評価で同じ精度をもたらす可能性があります。

load(romberg)はこの関数をロードします。

QUADPACK、数値積分関数のコレクションも参照してください。

例:

1次元積分。

 
(%i1) load ("romberg");
(%o1)    /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
(%i2) f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000)
              + 1/((x - 3)^2 + 1/200);
                    1                 1                1
(%o2) f(x) := -------------- + --------------- + --------------
                     2    1           2    1            2    1
              (x - 1)  + ---   (x - 2)  + ----   (x - 3)  + ---
                         100              1000              200
(%i3) rombergtol : 1e-6;
(%o3)                 9.9999999999999995E-7
(%i4) rombergit : 15;
(%o4)                          15
(%i5) estimate : romberg (f(x), x, -5, 5);
(%o5)                   173.6730736617464
(%i6) exact : integrate (f(x), x, -5, 5);
(%o6) 10 sqrt(10) atan(70 sqrt(10))
 + 10 sqrt(10) atan(30 sqrt(10)) + 10 sqrt(2) atan(80 sqrt(2))
 + 10 sqrt(2) atan(20 sqrt(2)) + 10 atan(60) + 10 atan(40)
(%i7) abs (estimate - exact) / exact, numer;
(%o7)                7.5527060865060088E-11

rombergの入れ子のコールで実装された 2次元積分。

 
(%i1) load ("romberg");
(%o1)    /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
(%i2) g(x, y) := x*y / (x + y);
                                    x y
(%o2)                   g(x, y) := -----
                                   x + y
(%i3) rombergtol : 1e-6;
(%o3)                 9.9999999999999995E-7
(%i4) estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
(%o4)                   0.81930239628356
(%i5) assume (x > 0);
(%o5)                        [x > 0]
(%i6) integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
                                          3
                                    2 log(-) - 1
                    9                     2        9
(%o6)       - 9 log(-) + 9 log(3) + ------------ + -
                    2                    6         2
(%i7) exact : radcan (%);
                    26 log(3) - 26 log(2) - 13
(%o7)             - --------------------------
                                3
(%i8) abs (estimate - exact) / exact, numer;
(%o8)                1.3711979871851024E-10

オプション変数: rombergabs

デフォルト値: 0.0

グローバル変数 rombergabsrombergtolrombergの精度を決定します。 rombergは、連続する近似の間の絶対差が rombergabsよりも小さい時か、連続する近似に関する相対差が rombergtolよりも小さい時、成功のうちに終了します。 従って、 rombergabsが 0.0 (デフォルト)の時、 相対誤差テストだけが rombergに効果を持ちます。

rombergitrombergminも参照してください。

Categories:  Package romberg

オプション変数: rombergit

デフォルト値: 11

rombergは、あきらめる前に、せいぜい rombergit回、ステップサイズを半分にします; それゆえ、関数評価の最大回数は 2^rombergitです。 rombergはいつも、少なくとも rombergmin回の繰り返しを行います; これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。

rombergabsrombergtolも参照してください。

Categories:  Package romberg

オプション変数: rombergmin

デフォルト値: 0

rombergはいつも、少なくとも rombergmin回の繰り返しを行います; これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。

rombergit, rombergabs, rombergtolも参照してください。

Categories:  Package romberg

オプション変数: rombergtol

デフォルト値: 1e-4

グローバル変数 rombergabsrombergtolrombergの精度を決定されます。 rombergは、連続する近似の間の絶対差が rombergabsよりも小さい時か、連続する近似に関する相対差が rombergtolよりも小さい時、成功のうちに終了します。 従って、 rombergabsが 0.0 (デフォルト)の時、 相対誤差テストだけが rombergに効果を持ちます。

rombergitrombergminも参照してください。

Categories:  Package romberg


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79. simplex


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79.1 Introduction to simplex

simplexはシンプレックスアルゴリズムを使った線形最適化のパッケージです。

例:

 
(%i1) load("simplex")$
(%i2) minimize_lp(x+y, [3*x+2*y>2, x+4*y>3]);
                  9        7       1
(%o2)            [--, [y = --, x = -]]
                  10       10      5

Categories:  Numerical methods · Optimization · Share packages · Package simplex


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79.1.1 Tests for simplex

ディレクトリ share/simplex/Testsにいくつかテストがあります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79.1.1.1 klee_minty

関数 klee_mintylinear_programのための入力を生成します。 入力に関してスケーリングなしには解くためには指数時間が要求されます。

例:

 
load(klee_minty)$
apply(linear_program, klee_minty(6));

よりよいアプローチ:

 
epsilon_sx : 0$
scale_sx : true$
apply(linear_program, klee_minty(10));

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79.1.1.2 NETLIB

netlib (http://www.netlib.org/lp/data/) テストスイートからいくつかのより小さい問題が Maximaが可読なフォーマットに変換されます。 問題は adlittle, afiro, kb2, sc50aです。 それぞれの問題は、行列 A とベクトル bcのため、CSVフォーマットの3つの入力ファイルを持ちます。

例:

 
A : read_matrix("adlittle_A.csv", 'csv)$
b : read_list("adlittle_b.csv", 'csv)$
c : read_list("adlittle_c.csv", 'csv)$
linear_program(A, b, c)$
%[2]
=> 225494.963126615

結果:

 
PROBLEM        MINIMUM                SCALING
adlittle       225494.963126615       no
afiro          - 464.7531428571429    no
kb2            - 1749.900129055996    yes
sc50a          - 64.5750770585645     no


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

79.2 Functions and Variables for simplex

オプション変数: epsilon_lp

デフォルト値: 10^-8

linear_programの数値計算で使われるイプシロン。

以下も参照してください: linear_program

Categories:  Package simplex

関数: linear_program (A, b, c)

linear_programはシンプレックスアルゴリズムの実装です。 linear_program(A, b, c)は、 A.x = bかつ x >= 0を満たすベクトルの中で c.xが可能な最小となるベクトル xを計算します。 引数 Aは行列で、引数 bcはリストです。

linear_programは、最小化ベクトル xと最小値 c.xを含むリストを返します。 もし問題が有界でないなら、 "Problem not bounded!"を返し、 もし問題が実現可能でないなら、 "Problem not feasible!"を返します。

この関数を使うためには、最初に load(simplex);simplexパッケージをロードしてください。

例:

 
(%i2) A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
(%i3) b: [1,1,6]$
(%i4) c: [1,-2,0,0]$
(%i5) linear_program(A, b, c);
                   13     19        3
(%o5)            [[--, 4, --, 0], - -]
                   2      2         2

以下も参照してください: minimize_lp, scale_lp, epsilon_lp

関数: maximize_lp (obj, cond, [pos])

いくつかの線形制約 condに従う線形目標関数 objを最大化します。 引数と戻り値の詳細な記述に関しては、 minimize_lpを参照してください。

以下も参照してください: minimize_lp.

関数: minimize_lp (obj, cond, [pos])

いくつかの線形制約 condに従う線形目標関数 objを最小化します。 condは線形等式や不等式のリストです。 厳密な不等式では、 >>=に、 <<=に置き換えられます。 オプションの引数 posは正と仮定される決定変数のリストです。

もし最小が存在するなら、 minimize_lpは目標関数の最小値と最小が得られる決定変数値のリストを含むリストです。 もし問題が有界でないなら、 minimize_lpは "Problem not bounded!"を返し、 もし問題が実現可能でないなら、 "Ploblem not feasible!"を返します。

決定変数はデフォルトでは非負とは仮定されません。 もし決定変数すべてが正なら、 nonegative_lptrueに設定してください。 もし決定変数のいくつかだけが正なら、オプション引数 posの中でそれらをリストしてください。 (これは制約を足すより効率的だということに注意してください。)

minimize_lpは Maximaの linear_program関数で実装されたシンプレックスアルゴリズムを使います。

この関数を使うためには、最初に load(simplex);simplexパッケージをロードしてください。

例:

 
(%i1) minimize_lp(x+y, [3*x+y=0, x+2*y>2]);
                      4       6        2
(%o1)                [-, [y = -, x = - -]]
                      5       5        5
(%i2) minimize_lp(x+y, [3*x+y>0, x+2*y>2]), nonegative_lp=true;
(%o2)                [1, [y = 1, x = 0]]
(%i3) minimize_lp(x+y, [3*x+y=0, x+2*y>2]), nonegative_lp=true;
(%o3)                Problem not feasible!
(%i4) minimize_lp(x+y, [3*x+y>0]);
(%o4)                Problem not bounded!

いかも参照してください: maximize_lp, nonegative_lp, epsilon_lp

オプション変数: nonegative_lp

デフォルト値: false

もし nonegative_lpが trueなら、 minimize_lpmaximize_lpの決定変数すべては正と仮定されます。

以下も参照してください: minimize_lp

Categories:  Package simplex

オプション変数: scale_lp

デフォルト値: false

scale_lptrueの時、 linear_programは行や列それぞれの最大絶対値が1になるように入力をスケールします。

Categories:  Package simplex

変数: pivot_count_sx

linear_programが戻った後、 pivot_count_sxは最後の計算のピボットの数です。

Categories:  Package simplex

変数: pivot_max_sx

pivot_max_sxlinear_programが許すピボットの最大数です。

Categories:  Package simplex


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80. simplification


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.1 Introduction to simplification

ディレクトリ maxima/share/simplificationは整理ルールと整理関数を実装する いくつかのスクリプトと整理に関係しないいくつかの関数を含みます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.2 Package absimp

absimpパッケージは abssignum関数のために組み込み整理ルールを拡張するパターンマッチングルールを含みます。 absimpは、組み込み assume関数で確立された関係や、偶数や奇数に関する modedeclare (m, even, n, odd)のような宣言によって確立された関係を考慮します。

absimpabssignumを使って unitrampunitstep関数を定義します。

load ("absimp")はこのパッケージをロードします。 demo (absimp)はこのパッケージのデモを表示します。

例:

 
(%i1) load ("absimp")$
(%i2) (abs (x))^2;
                                2
(%o2)                          x
(%i3) diff (abs (x), x);
                               x
(%o3)                        ------
                             abs(x)
(%i4) cosh (abs (x));
(%o4)                        cosh(x)

Categories:  Simplification functions · Rules and patterns · Share packages · Package absimp


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.3 Package facexp

facexpパッケージは、 制御された展開によって式を構造化する能力をユーザーに与えるいくつかの関連関数を含みます。 式が物理的意味を持つ変数を含むとき、この能力は特に役に立ちます。 そんな式の最も簡潔な形式は、それらの変数に関して式を完全に展開し、 その後係数を因数分解することで得られることがしばしばあるからです。 この手続きは標準の Maxima関数を使って実行することは難しくありませんが、 追加の微調整も望まれていて、これらの仕上げは適用するのが更に難しくなることがあります。

関数 facsumとその関連形式は、 この方法で式の構造を制御するための便利な手段を提供します。 別の関数 collecttermsは、この形式に既に整理された複数の式を 式全体を再整理することなく、足し合わせるのに使うことができます。 式が非常に大きいとき、この関数は役に立つかもしれません。

load ("facexp")はこのパッケージをロードします。 demo (facexp)はこのパッケージのデモを見せます。

Categories:  Expressions · Share packages · Package facexp

関数: facsum (expr, arg_1, ..., arg_n)

引数 arg_1, ..., arg_nに依存する exprの形式を返します。 引数は ratvarsに適した任意の形式か、そんな形式のリストを取り得ます。 もし引数がリストでないなら、 返される形式は、引数に関して完全に展開され、引数の係数は因数分解されます。 これらの係数は、非合理的な意味合いを除いて引数に依存しません。

引数のいずれかがリストなら、リストすべてを 1つのリストに結合し、 facsumは、 引数の係数に対して factorをコールする代わりに これらの係数に対して自分自身をコールします。 この再帰コールに関しては、上記で新しく構成されたリストを新しい引数リストとして使います。 この処理は、リストの中に望まれた要素を入れ子にすることで、 任意の深さまで繰り返すことができます。

log (x + y)のような、より複雑な部分式に関して facsumしたいかも知れません。 そんな引数も許されています。

時々、ユーザーは 式に関して、先頭演算子によってのみ指定された上記形式いずれかが欲しいかもしれません。 例えば、すべての logに関して facsumしたかもしれません。 この場合、この方法で扱われる特定の logか、代わりに式 operator (log)'operator (log)を引数に含むことができます。 もし演算子 op_1, ..., op_nに関して 式 exprfacsumしたいなら、 facsum (expr, operator (op_1, ..., op_n))を評価します。 operator形式はリスト引数の中でも可能です。

更に、スイッチ facsum_combinenextlayerfactorの設定は facsumの結果に影響するかもしれません。

Categories:  Package facexp · Expressions

グローバル変数: nextlayerfactor

デフォルト値: false

nextlayerfactortrueの時、引数の係数の因数分解された形式の因子に facsumの再帰コールを適用します。

falseの時、 facsumの再帰コールが起こる時はいつでも、 全体としてそれぞれの係数にfacsumを適用します。

facsumの引数リストにアトム nextlayerfactorを入れると、 nextlayerfactor: trueの効果がありますが、 式の次のレベルだけに関してです。

nextlayerfactorはいつも truefalseにバインドされているので、 facsumの引数リストの中に現れる時はいつでも、 シングルクォートで表さなければいけません。

Categories:  Package facexp · Expressions

グローバル変数: facsum_combine

デフォルト値: true

引数が多項式の商の時、 facsum_combinefacsumが返す最終結果の形式を制御します。 もし facsum_combinefalseなら、 形式は既に記述したような完全に展開された和として返されますが、 もし trueなら、返される式は既に記述した形式の多項式の比です。

有理式の分子と分母両方を facsumしたいが、分母が分子の項ずつに掛けられたくない時、このスイッチの true設定が役に立ちます。

Categories:  Package facexp · Expressions

関数: factorfacsum (expr, arg_1, ... arg_n)

exprの因子に関して引数として arg_1, ... arg_nを付けて facsumをコールすることで得られる exprの形式を返します。 もし exprの因子のいずれかがべきに累乗されるなら、 因子と指数と両方がこの方法で処理されます。

Categories:  Package facexp · Expressions

関数: collectterms (expr, arg_1, ..., arg_n)

arg_1 ... arg_nを含むすべての項を集めます。 もしいくつかの式が facsumfactorfacsum, factenexpand, facexpten, factorfacexptenで整理されていて、 それらが一緒に加算されているなら、関数 collecttermsを使ってそれらを結合することが望まれる場合があります。 collecttermsnextlayerfactorを除いてこれらの他の関連した関数に渡すことができる引数すべてを 引数として取ることができます。 collecttermsの利点は facsumと似た形式を返すことです。 しかし、既に facsumで処理された加算形式なのでこの処理を繰り返す必要はありません。 この能力は加算する式が非常に大きい時特に役立ちます。

factorも参照してください。

例:

 
(%i1) (exp(x)+2)*x+exp(x);
                             x          x
(%o1)                   x (%e  + 2) + %e
(%i2) collectterms(expand(%),exp(x));
                                  x
(%o2)                   (x + 1) %e  + 2 x

Categories:  Package facexp · Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.4 Package functs

Categories:  Share packages · Package functs

関数: rempart (expr, n)

exprからパーツ nを削除します。

もし nが形式 [l, m]のリストなら、パーツ lから mまでを削除します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Expressions

関数: wronskian ([f_1, ..., f_n], x)

変数 xに関する式のリスト[f_1, ..., f_n]の Wronskian行列を返します。 Wronskian行列の行列式は式のリストの Wronskian行列式です。

wronskianを使うには最初に load(functs)してください。例えば:

 
(%i1) load(functs)$
(%i2) wronskian([f(x), g(x)],x);
                    [   f(x)       g(x)    ]
                    [                      ]
(%o2)               [ d          d         ]
                    [ -- (f(x))  -- (g(x)) ]
                    [ dx         dx        ]

関数: tracematrix (M)

行列 Mの跡(対角要素の和)を返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Matrices

関数: rational (z)

分母を有理化するように、 zの分子と分母に分母の複素共役を掛けます。 もし与えられたものが正準有理式 (CRE)形式なら、正準有理式 (CRE)形式を返し、 そうでないなら、一般形式を返します。

この関数を使うには最初に load(functs)を書いてください。

Categories:  Package functs · Expressions

関数: nonzeroandfreeof (x, expr)

もし exprがゼロでなく、 freeof (x, expr)trueを返すなら、 trueを返します。 そうでないなら falseを返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Expressions

関数: linear (expr, x)

expra*x + bの形の式の時、 linearは 3つの形式変数 b, a, xに対応する3つの等式のリストを返します。 ここで、 aはゼロでなく、 abxに依存しません。 そうでないなら、 linearexprを返します。

load(antid)はこの関数をロードします。

例:

 
(%i1) load ("antid");
(%o1)  /maxima/share/integration/antid.mac
(%i2) linear ((1 - w)*(1 - x)*z, z);
(%o2) [bargumentb = 0, aargumenta = (w - 1) x - w + 1,
                                                  xargumentx = z]
(%i3) linear (cos(u - v) + cos(u + v), u);
(%o3)                         false

Categories:  Package antid · Expressions

関数: gcdivide (p, q)

takegcdtrueの時、 gcdivideは多項式 pqを最大公約多項式で割り、結果の比を返します。

takegcdfalseの時、 gcdivideは比 p/qを返します。

この関数を使うには最初にload(functs)と書いてください。

ezgcd, gcd, gcdex, poly_gcdも参照してください。

例:

 
(%i1) load(functs)$

(%i2) p1:6*x^3+19*x^2+19*x+6;
                        3       2
(%o2)                6 x  + 19 x  + 19 x + 6
(%i3) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
                  5       4       3       2
(%o3)          6 x  + 13 x  + 12 x  + 13 x  + 6 x
(%i4) gcdivide(p1, p2);
                             x + 1
(%o4)                        ------
                              3
                             x  + x
(%i5) takegcd:false;
(%o5)                         false
(%i6) gcdivide(p1, p2);
                       3       2
                    6 x  + 19 x  + 19 x + 6
(%o6)          ----------------------------------
                  5       4       3       2
               6 x  + 13 x  + 12 x  + 13 x  + 6 x
(%i7) ratsimp(%);
                             x + 1
(%o7)                        ------
                              3
                             x  + x

Categories:  Package functs · Polynomials

関数: arithmetic (a, d, n)

算術級数 a, a + d, a + 2*d, ..., a + (n - 1)*dの第 n項を返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Sums and products

関数: geometric (a, r, n)

幾何級数 a, a*r, a*r^2, ..., a*r^(n - 1)の第 n項を返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Sums and products

関数: harmonic (a, b, c, n)

調和級数 a/b, a/(b + c), a/(b + 2*c), ..., a/(b + (n - 1)*c)の第 n項を返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Sums and products

関数: arithsum (a, d, n)

算術級数の 1から nまでの和を返します。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Sums and products

関数: geosum (a, r, n)

幾何級数の 1から nまでの和を返します。 もし nが無限大 (inf)なら、 rの絶対値が 1未満でのみ、和は有限です。

この関数を使うには最初に load(functs)と書いてください。

Categories:  Package functs · Sums and products

関数: gaussprob (x)

Gaussian確率函数 %e^(-x^2/2) / sqrt(2*%pi)を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: gd (x)

Gudermannian函数 2*atan(%e^x)-%pi/2を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: agd (x)

逆 Gudermannian函数 log (tan (%pi/4 + x/2))を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: vers (x)

正矢(せいし) 1 - cos (x)を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: covers (x)

余矢(よし) 1 - sin (x)を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: exsec (x)

外正割 (exsecant) sec (x) - 1を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: hav (x)

半正矢 (1 - cos(x))/2を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: combination (n, r)

一度に r個を取る n個のオブジェクトの組み合わせの数を返します。

この関数を使うには最初に load(functs)と書いてください。

関数: permutation (n, r)

n個のオブジェクトの集合から選択された r個のオブジェクトの置換の数を返します。

この関数を使うには最初に load(functs)と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.5 Package ineq

ineqパッケージは不等式の整理規則を含みます。

セッション例:

 
(%i1) load(ineq)$
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
tellsimp: warning: rule will treat '+
                          ' as noncommutative and nonassociative.
(%i2) a>=4;  /* a sample inequality */
(%o2)                        a >= 4
(%o3)                     b + a > c + 4
(%o4)                       7 x < 7 y
(%o5)                    - 2 x <= - 6 z
                                 2
(%o6)                      1 <= a  + 1
(%o8)                       2 x < 3 x
(%o9)                        a >= b
(%o10)                   a + 3 >= b + 3
(%o11)                       a >= b
(%o12)                     a >= c - b
(%o13)                     b + a >= c
(%o14)                 (- c) + b + a >= 0
(%o15)                   c - b - a <= 0
                               2
(%o16)                  (z - 1)  > - 2 z
                            2
(%o17)                     z  + 1 > 0
(%o18)                        true
(%i19) (b>c)+%; /* add a second, strict inequality */

不等式の回りで括弧を使うことについて注意してください; ユーザーが (A > B) + (C = 5)と入力した時、 結果は A + C > B + 5ですが、 A > B + C = 5は構文エラーであり、 (A > B + C) = 5は完全に何か他のものです。

規則定義の完全なリストを見るには、 disprule (all)を実行してください。

Maximaが不等式に掛けられる量の符号を決定できない時、 ユーザーは問い合わせを受けるでしょう。

最もありふれた仕様の欠陥を以下に例示します:

 
(%i1) eq: a > b;
(%o1)                         a > b
(%i2) 2*eq;
(%o2)                       2 (a > b)
(%i3) % - eq;
(%o3)                         a > b

別の問題は 0掛ける不等式です; これを 0にするデフォルト動作はそのままです。 しかし、もし X*some_inequalityとタイプして、 Maximaが Xの符号を尋ね、 zero (または z)と答えたなら、 プログラムは X*some_inequalityを返し、 Xが 0という情報を使いません。 そんな時は、データベースは、決定の際、 Xを評価する目的ではなく、比較目的のためだけに使われるので、 ev (%, x: 0)を実行すべきです。

パッケージがロードされた時、 整理器が、パッケージなしよりたくさんの規則を検証するよう強制されるので、 ユーザーはより遅い応答に気がつくかもしれません。 だから、これらを利用した後、規則を取り除きたいかもしれません。 (あなたが定義したかもしれないものすべてを含み)規則すべてを消すには、 kill (rules)してください; もしくは、もっと選択的にそれらのうちのいくつかだけ消すかもしれません; もしくは、特定の規則に remruleを使ってください。

もし自分の規則を定義した後、このパッケージをロードするなら、 同じ名前を持つあなたの規則をつぶすでしょう。 このパッケージの規則は以下の通りです: *rule1, ..., *rule8, +rule1, ..., +rule18, そして、それを参照するには、 "+"に関する最初の規則を限定して取り除くための remrule ("+", "+rule1")とか、 二番目の乗法規則の定義を表示するための disprule ("*rule2")とか、 規則名を引用符で囲まなければいけません。

Categories:  Simplification functions · Rules and patterns · Share packages · Package ineq


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.6 Package rducon

Categories:  Expressions · Share packages · Package rducon

関数: reduce_consts (expr)

exprの定部分式を構成された定アトムで置き換え、 これら構成された定数すべての定義を等式のリスト const_eqnsに保存し、修正された exprを返します。 exprのそれらのパーツは、関数 constantpが施された時 trueを返す定数です。 それゆえ、 reduce_constsを呼び出す前に、

 
declare ([objects to be given the constant property], constant)$

をして、自分の式に現れる定数量のデータベースを設定すべきです。

もしこれらの数式計算の後、 Fortran出力を生成する予定があるなら、 最初のコードセクションの 1つはすべての定数の計算であるべきです。 このコードセグメントを生成するには、

 
map ('fortran, const_eqns)$

を実行してください。

reduce_constsに影響する const_eqnsを除いた変数は以下の通りです: const_prefix (デフォルト値: xx) 定部分式を表すために reduce_constsが生成するシンボルすべてに接頭として付けるのに使われる文字列です。

const_counter (デフォルト値: 1)は reduce_constsが見つける定部分式それぞれを表すためのユニークなシンボルを生成するのに使われる整数添字です。

load ("rducon")はこの関数をロードします。 demo (rducon)はこの関数のデモを見せます。

Categories:  Package rducon · Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.7 Package scifac

Categories:  Expressions · Share packages · Package scifac

関数: gcfac (expr)

gcfacは、科学者が式をより簡単にしようとする時に適用するのと同じ発見的方法の適用を 試みる因数分解関数です。 gcfacは単項式タイプの因数分解に限られます。 和に関しては gcfacは以下を行います:

  1. 整数上で素因数分解します。
  2. 項の複雑さに関わらず、生じる項の最大の冪を係数として因数分解します。
  3. 項の隣同士の対を因数分解する時に、(1)と(2)を使います。
  4. 式がもはや変化しなくなるまで、 これらのテクニックを繰り返し、再帰的に適用します。

対のすべての可能な再配列の中から最も簡潔な対因数分解された結果を産むものを見つけることの 組み合わせ的に困難な性質のため、 項目(3)は必ずしも、対での因数分解の最善の仕事をしません。

load ("scifac")はこの関数をロードします。 demo (scifac)はこの関数のデモを見せます。

Categories:  Package scifac · Expressions


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

80.8 Package sqdnst

関数: sqrtdenest (expr)

可能なら、簡単で、数値的で、二項無理数 (binomial surds)の sqrtを denestします。

例えば、

 
(%i1) load ("sqdnst")$
(%i2) sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
                             sqrt(3)
                        sqrt(------- + 1)
                                2
(%o2)                 ---------------------
                      sqrt(11 sqrt(2) - 12)
(%i3) sqrtdenest(%);
                           sqrt(3)   1
                           ------- + -
                              2      2
(%o3)                     -------------
                             1/4    3/4
                          3 2    - 2

時々、 (19601-13860 sqrt(2))^(7/4)に対してのように、 sqrtdenestを複数回適用することが役立ちます。

load ("sqdnst")はこの関数をロードします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

81. solve_rec


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

81.1 Introduction to solve_rec

solve_recは多項式係数を持つ線形漸化式を解くためのパッケージです。

デモが demo(solve_rec);で利用可能です。

例:

 
(%i1) load("solve_rec")$
(%i2) solve_rec((n+4)*s[n+2] + s[n+1] - (n+1)*s[n], s[n]);
                                    n
                 %k  (2 n + 3) (- 1)          %k
                   1                            2
(%o2)       s  = -------------------- + ---------------
             n     (n + 1) (n + 2)      (n + 1) (n + 2)

Categories:  Linear recurrences · Share packages · Package solve_rec


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

81.2 Functions and Variables for solve_rec

関数: reduce_order (rec, sol, var)

特殊解 solが知られている時、線形漸化式 recの次数を減らします。

例:

 
(%i3) rec: x[n+2] = x[n+1] + x[n]/n;
                                      x
                                       n
(%o3)               x      = x      + --
                     n + 2    n + 1   n
(%i4) solve_rec(rec, x[n]);
WARNING: found some hypergeometrical solutions!
(%o4)                    x  = %k  n
                          n     1
(%i5) reduce_order(rec, n, x[n]);
(%t5)                    x  = n %z
                          n       n

                           n - 1
                           ====
                           \
(%t6)                %z  =  >     %u
                       n   /        %j
                           ====
                           %j = 0

(%o6)             (- n - 2) %u     - %u
                              n + 1     n
(%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);
                                     n
                            %k  (- 1)
                              1
(%o6)                 %u  = ----------
                        n    (n + 1)!

だから一般解は以下の通りです。

             n - 1
             ====        j
             \      (- 1)
       %k  n  >    -------- + %k  n
         2   /     (j + 1)!     1
             ====
             j = 0

Categories:  Package solve_rec

オプション変数: simplify_products

デフォルト値: true

もし simplify_productstrueなら、 solve_recは答えの積を整理しようとします。

以下も参照してください: solve_rec.

Categories:  Package solve_rec

関数: simplify_sum (expr)

exprに現れるすべての和を閉形式に整理しようとします。

この関数を初めて使うには、 load(simplify_sum)simplify_sumパッケージをロードしてください。

例:

 
(%i1) load("simplify_sum")$
(%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
        n                          n
       ====                       ====
       ¥     binomial(n + k, k)   ¥
(%o2)   >    ------------------ +  >    binomial(2 n, 2 k)
       /              k           /
       ====          2            ====
       k = 1                      k = 1
(%i3) simplify_sum(%);

                         2 n - 1    n
(%o3)                   2        + 2  - 2

関数: solve_rec (eqn, var, [init])

変数 varに関して多項式係数を持つ線形漸化式 eqnの超幾何解について解きます。 オプション引数 initは初期条件です。

solve_recは定数係数の線形漸化式を解くことができ、 多項式係数の斉次線形漸化式の超幾何解と多項式係数の有理解を見つけ、 Ricatti型漸化式を解くことができます。

超幾何解を見つけるのに使われるアルゴリズムの実行時間は主係数と最小次数 (trailing)係数の次数に関して指数的であることに注意してください。

この関数を使うには最初に load(solve_rec);solve_recパッケージをロードしてください。

定係数の線形漸化式の例:

 
(%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
                        n          n
           (sqrt(5) - 1)  %k  (- 1)
                            1           n
(%o2) a  = ------------------------- - ----
       n               n                  n
                      2                5 2
                                                n
                                   (sqrt(5) + 1)  %k
                                                    2    2
                                 + ------------------ - ----
                                            n              n
                                           2            5 2

多項式係数の線形漸化式の例:

 
(%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
                         2
(%o7) (x - 1) y      - (x  + 3 x - 2) y      + 2 x (x + 1) y
               x + 2                   x + 1                x
(%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
                              x
                           3 2    x!
(%o9)                 y  = ---- - --
                       x    4     2

Ricatti型漸化式の例:

 
(%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
                            y         y
                             x + 1     x
(%o2)         x y  y      - ------ + ----- = 0
                 x  x + 1   x + 2    x - 1
(%i3) solve_rec(%, y[x], y[3]=5)$
(%i4) ratsimp(minfactorial(factcomb(%)));
                                   3
                               30 x  - 30 x
(%o4) y  = - -------------------------------------------------
       x        6      5       4       3       2
             5 x  - 3 x  - 25 x  + 15 x  + 20 x  - 12 x - 1584

以下も参照してください: solve_rec_rat, simplify_products, product_use_gamma

Categories:  Package solve_rec

関数: solve_rec_rat (eqn, var, [init])

線形漸化式の有理解について解きます。 引数の記述については solve_recを参照してください。

この関数を使うには最初に load(solve_rec);solve_recパッケージをロードしてください。

例:

 
(%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
(%o1)  (x + 4) a      + (x + 3) a      - x a
                x + 3            x + 2      x + 1
                                                   2
                                               + (x  - 1) a
                                                            x
(%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
                       1
(%o2)      a  = ---------------
            x   (x - 1) (x + 1)

以下も参照してください: solve_rec

Categories:  Package solve_rec

オプション変数: product_use_gamma

デフォルト値: true

積を整理する時、もし product_use_gammatrueなら、 solve_recは式の中にガンマ函数を導入します。

以下も参照してください: simplify_products, solve_rec

Categories:  Package solve_rec

関数: summand_to_rec  
    summand_to_rec (summand, k, n)  
    summand_to_rec (summand, [k, lo, hi], n)

和が満たす再帰を返します。

 
     hi
    ====
    \
     >     summand
    /
    ====
  k = lo

が満たす漸化式を返します。 ここで、被和 (summand)は knに対して超幾何的です。 もし lohiが省略されたら、 それらは lo = -infhi = infと仮定されます。

この関数を初めて使うには load(simplify_sum)simplify_sumパッケージをロードしてください。

例:

 
(%i1) load("simplify_sum")$
(%i2) summand: binom(n,k);
(%o2)                           binomial(n, k)
(%i3) summand_to_rec(summand,k,n);
(%o3)                      2 sm  - sm      = 0
                               n     n + 1
(%i7) summand: binom(n, k)/(k+1);
                                binomial(n, k)
(%o7)                           --------------
                                    k + 1
(%i8) summand_to_rec(summand, [k, 0, n], n);
(%o8)               2 (n + 1) sm  - (n + 2) sm      = - 1
                                n             n + 1

Categories:  Package solve_rec


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

82. stats


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

82.1 Introduction to stats

パッケージ statsは古典的な統計推定や仮説検定手続き一式を含みます。

これらの関数はすべて、母集団推定と意思決定のための必要な結果を含む inference_result Maximaオブジェクトを返します。

グローバル変数 stats_numerは、 結果を浮動小数点フォーマットで与えるか、シンボルと有理数のフォーマットで与えるかを制御します; デフォルト値は trueで、結果を浮動小数点フォーマットで返します。

パッケージ descriptiveはデータ構造(リストと行列)を操作するための いくつかのユーティリティを含みます; 例えば、部分サンプルを抽出するためのもの。 プレインテキストファイルからデータを読むためのパッケージ numericalioの使い方に関するいくつかの例も含みます。 詳細は descriptivenumericalioを参照してください。

パッケージ statsは、パッケージ descriptive, distrib, inference_resultをロードします。

コメント、バグ、提案は、作者 'mario AT edu DOT xunta DOT es'にコンタクトしてください。

Categories:  Statistical inference · Share packages · Package stats


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

82.2 Functions and Variables for inference_result

関数: inference_result (title, values, numbers)

statsの関数が返す型の inference_resultオブジェクトを構成します。 引数 titleは手続き名の文字列です; valuesは形式 symbol = valueの要素を持つリストであり、 numbersは、どの値がデフォルトで表示されるか示す 1から length(values)までの範囲の正の整数のリストです。

例:

これは長方形に関する結果を示す簡単な例です。 このオブジェクトのタイトルは文字列 "Rectangle"であり、 'base, 'height, 'diagonal, 'area, 'perimeterと指名された 5つの結果を格納しますが、 一番目、二番目、五番目と四番目だけが表示されます。 'diagonalはこのオブジェクトに格納されますが、表示されません; その値にアクセスするには関数 take_inferenceを利用してください。

 
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) inference_result("Rectangle",
                        ['base=b,
                         'height=h,
                         'diagonal=sqrt(b^2+h^2),
                         'area=b*h,
                         'perimeter=2*(b+h)],
                        [1,2,5,4] );
                        |   Rectangle
                        |
                        |    base = 3
                        |
(%o3)                   |   height = 2
                        |
                        | perimeter = 10
                        |
                        |    area = 6
(%i4) take_inference('diagonal,%);
(%o4)                        sqrt(13)

take_inferenceも参照してください。

Categories:  Package stats

関数: inferencep (obj)

objinference_resultオブジェクトか否かに依存して、 truefalseを返します。

Categories:  Package stats

関数: items_inference (obj)

objに格納された項目名のリストを返します。 objinference_resultオブジェクトでなければいけません。

例:

inference_resultオブジェクトは 'pi'eと名付けられた2つの値を格納しますが、二番目だけが表示されます。 items_inference関数は、表示されるされないに関係なく、項目すべての名前を返します。

 
(%i1) load(inference_result)$
(%i2) inference_result("Hi", ['pi=%pi,'e=%e],[2]);
                            |   Hi
(%o2)                       |
                            | e = %e
(%i3) items_inference(%);
(%o3)                        [pi, e]

Categories:  Package stats

関数: take_inference  
    take_inference (n, obj)  
    take_inference (name, obj)  
    take_inference (list, obj)

もし nが正の整数なら、 objに格納された n番目の値を返します。 もし nameが項目名なら、そう名付けられた項目を返します。 もし一番目の引数が数やシンボルのリストなら、 関数 take_inferenceは対応する結果のリストを返します。

例:

ある inference_resultオブジェクトが与えられたとして、 それに格納されたある情報を抽出するために関数 take_inferenceがコールされます。

 
(%i1) load(inference_result)$
(%i2) b: 3$ h: 2$
(%i3) sol: inference_result("Rectangle",
                            ['base=b,
                             'height=h,
                             'diagonal=sqrt(b^2+h^2),
                             'area=b*h,
                             'perimeter=2*(b+h)],
                            [1,2,5,4] );
                        |   Rectangle
                        |
                        |    base = 3
                        |
(%o3)                   |   height = 2
                        |
                        | perimeter = 10
                        |
                        |    area = 6
(%i4) take_inference('base,sol);
(%o4)                           3
(%i5) take_inference(5,sol);
(%o5)                          10
(%i6) take_inference([1,'diagonal],sol);
(%o6)                     [3, sqrt(13)]
(%i7) take_inference(items_inference(sol),sol);
(%o7)                [3, 2, sqrt(13), 6, 10]

inference_resulttake_inferenceも参照してください。

Categories:  Package stats


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

82.3 Functions and Variables for stats

オプション変数: stats_numer

デフォルト値: true

もし stats_numertrueなら、 推定統計的関数は浮動小数点数で結果を返します。 もし falseなら、 結果は記号と有理フォーマットで与えられます。

関数: test_mean  
    test_mean (x)  
    test_mean (x, options ...)

これは平均t検定です。 引数 xは1次元標本を含むリストか列行列です。 もしオプション 'asymptotictrueなら、 中心極限定理に基づいた漸近検定も実行します。

オプション:

関数 test_meanの出力は 以下の結果を示すinference_result Maximaオブジェクトです:

  1. 'mean_estimate: 標本平均。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 母平均の信頼度。
  4. 'method: 推定手続き。
  5. 'hypotheses: 検定される帰無と対立仮説。
  6. 'statistic: 帰無仮説を検定するために使われる標本統計の値。
  7. 'distribution: パラメータと合わせて、標本統計分布。
  8. 'p_value: 検定のp

例:

未知の分散で正確確率 t検定を実行します。 片側対立 H_1: mean<50に対して 帰無仮説は H_0: mean=50です; 結果に従うと、p値が大きすぎ、 H_0を却下する証拠がありません。

 
(%i1) load("stats")$
(%i2) data: [78,64,35,45,45,75,43,74,42,42]$
(%i3) test_mean(data,'conflevel=0.9,'alternative='less,'mean=50);
          |                 MEAN TEST
          |
          |            mean_estimate = 54.3
          |
          |              conf_level = 0.9
          |
          | conf_interval = [minf, 61.51314273502712]
          |
(%o3)     |  method = Exact t-test. Unknown variance.
          |
          | hypotheses = H0: mean = 50 , H1: mean < 50
          |
          |       statistic = .8244705235071678
          |
          |       distribution = [student_t, 9]
          |
          |        p_value = .7845100411786889

今回、Maximaは 中心極限定理に基づく漸近検定を実行します。 両側対立 H_1: not equal(mean, 50)に対して 帰無仮説は H_0: equal(mean, 50)です; 結果に従うと、 p値は非常に小さく、 対立 H_1を指示して、H_0は却下すべきです。 . Note that, as indicated by the Method成分が示すように、 この手続きは多くの標本に適用すべきです。

 
(%i1) load("stats")$
(%i2) test_mean([36,118,52,87,35,256,56,178,57,57,89,34,25,98,35,
              98,41,45,198,54,79,63,35,45,44,75,42,75,45,45,
              45,51,123,54,151],
              'asymptotic=true,'mean=50);
          |                       MEAN TEST
          |
          |           mean_estimate = 74.88571428571429
          |
          |                   conf_level = 0.95
          |
          | conf_interval = [57.72848600856194, 92.04294256286663]
          |
(%o2)     |    method = Large sample z-test. Unknown variance.
          |
          |       hypotheses = H0: mean = 50 , H1: mean # 50
          |
          |             statistic = 2.842831192874313
          |
          |             distribution = [normal, 0, 1]
          |
          |             p_value = .004471474652002261

Categories:  Package stats

関数: test_means_difference  
    test_means_difference (x1, x2)  
    test_means_difference (x1, x2, options ...)

これは2つの標本の平均の差 t検定です。 引数 x1x2は2つの独立標本を含むリストか列行列です。 異なる未知の分散の場合 (以下のオプション 'dev1, 'dev2, 'varequalを参照してください)、 自由度の次数はWelch近似を使って計算されます。 もしオプション 'asymptotictrueに設定されているなら 中心極限定理に基づく漸近検定も実行します。

オプション:

関数 test_means_differenceの出力は 以下の結果を示すinference_result Maximaオブジェクトです:

  1. 'diff_estimate: 平均差推定。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 平均差の信頼区間。
  4. 'method: 推定手続き。
  5. 'hypotheses: 検定される帰無、対立仮説。
  6. 'statistic: 帰無仮説を検定するのに使われる標本統計値
  7. 'distribution: パラメータを伴う標本統計分布。
  8. 'p_value: 検定のp値。

例:

母平均 m_1m_2で対立 H_1: m_1>m_2に対して 2つの小さな標本 x yで平均が等しいか検定します; 分散は未知で異なると仮定されます。

 
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: [1.2,6.9,38.7,20.4,17.2]$
(%i4) test_means_difference(x,y,'alternative='greater);
            |              DIFFERENCE OF MEANS TEST
            |
            |         diff_estimate = 20.31999999999999
            |
            |                 conf_level = 0.95
            |
            |    conf_interval = [- .04597417812882298, inf]
            |
(%o4)       |        method = Exact t-test. Welch approx.
            |
            | hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
            |
            |           statistic = 1.838004300728477
            |
            |    distribution = [student_t, 8.62758740184604]
            |
            |            p_value = .05032746527991905

前と同じ検定、 しかし今回は分散が等しいと仮定されます。

 
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: matrix([1.2],[6.9],[38.7],[20.4],[17.2])$
(%i4) test_means_difference(x,y,'alternative='greater,
                                                 'varequal=true);
            |              DIFFERENCE OF MEANS TEST
            |
            |         diff_estimate = 20.31999999999999
            |
            |                 conf_level = 0.95
            |
            |     conf_interval = [- .7722627696897568, inf]
            |
(%o4)       |   method = Exact t-test. Unknown equal variances
            |
            | hypotheses = H0: mean1 = mean2 , H1: mean1 > mean2
            |
            |           statistic = 1.765996124515009
            |
            |           distribution = [student_t, 9]
            |
            |            p_value = .05560320992529344

Categories:  Package stats

関数: test_variance  
    test_variance (x)  
    test_variance (x, options, ...)

これは分散 chi^2検定です。 引数 xは 正規母集団から取られた1次元標本を含む リストか列行列です。

オプション:

関数 test_varianceの出力は 以下の結果を示すinference_result Maximaオブジェクトです:

  1. 'var_estimate: 標本分散。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 母分散の信頼区間。
  4. 'method: 推定手続き。
  5. 'hypotheses: 検定される帰無、対立仮説。
  6. 'statistic: 帰無仮説を検定するのに使う標本統計値。
  7. 'distribution: パラメータを伴う標本統計分布。
  8. 'p_value: 検定の p値。

例:

平均が未知の母集団の分散が200以上か検定します。

 
(%i1) load("stats")$
(%i2) x: [203,229,215,220,223,233,208,228,209]$
(%i3) test_variance(x,'alternative='greater,'variance=200);
             |                  VARIANCE TEST
             |
             |              var_estimate = 110.75
             |
             |                conf_level = 0.95
             |
             |     conf_interval = [57.13433376937479, inf]
             |
(%o3)        | method = Variance Chi-square test. Unknown mean.
             |
             |    hypotheses = H0: var = 200 , H1: var > 200
             |
             |                 statistic = 4.43
             |
             |             distribution = [chi2, 8]
             |
             |           p_value = .8163948512777689

Categories:  Package stats

関数: test_variance_ratio  
    test_variance_ratio (x1, x2)  
    test_variance_ratio (x1, x2, options ...)

これは2つの正規母集団の分散比 F検定です。 引数 x1x2は 2つの独立標本を含むリストか列行列です。

オプション:

関数 test_variance_ratioの出力は 以下の結果を示すinference_result Maximaオブジェクトです:

  1. 'ratio_estimate: 標本分散比。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 分散比の信頼区間。
  4. 'method: 推定手続き。
  5. 'hypotheses: 検定される帰無、対立仮説。
  6. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  7. 'distribution: パラメータを伴う標本統計分布。
  8. 'p_value: 検定のp値。

例:

前者が後者より大きいという対立仮説に対して、 2つの正規母集団の分散の等しさが

 
(%i1) load("stats")$
(%i2) x: [20.4,62.5,61.3,44.2,11.1,23.7]$
(%i3) y: [1.2,6.9,38.7,20.4,17.2]$
(%i4) test_variance_ratio(x,y,'alternative='greater);
              |              VARIANCE RATIO TEST
              |
              |       ratio_estimate = 2.316933391522034
              |
              |               conf_level = 0.95
              |
              |    conf_interval = [.3703504689507268, inf]
              |
(%o4)         | method = Variance ratio F-test. Unknown means.
              |
              | hypotheses = H0: var1 = var2 , H1: var1 > var2
              |
              |         statistic = 2.316933391522034
              |
              |            distribution = [f, 5, 4]
              |
              |          p_value = .2179269692254457

Categories:  Package stats

関数: test_proportion  
    test_proportion (x, n)  
    test_proportion (x, n, options ...)

出現率推定。 引数 xは 未知の確率でのBernoulli実験のn回試行での成功回数です。

オプション:

The output of function 関数 test_proportionの出力は 以下の結果を示す inference_result Maximaオブジェクトです:

  1. 'sample_proportion: 標本出現率。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 出現率のWilson信頼区間。
  4. 'method: 推定手続き。
  5. 'hypotheses: 検定される帰無、対立仮説。
  6. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  7. 'distribution: パラメータを伴う標本統計分布。
  8. 'p_value: 検定のp値。

例:

正確確率検定を実行します。 片側対立 H_1: p<1/2に対して、 帰無仮説は H_0: p=1/2です。

 
(%i1) load("stats")$
(%i2) test_proportion(45, 103, alternative = less);
         |            PROPORTION TEST
         |
         | sample_proportion = .4368932038834951
         |
         |           conf_level = 0.95
         |
         | conf_interval = [0, 0.522714149150231]
         |
(%o2)    |     method = Exact binomial test.
         |
         | hypotheses = H0: p = 0.5 , H1: p < 0.5
         |
         |             statistic = 45
         |
         |  distribution = [binomial, 103, 0.5]
         |
         |      p_value = .1184509388901454

両側漸近検定。信頼度は99/100です。

 
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportion(45, 103,
                  conflevel = 99/100, asymptotic=true);
      |                 PROPORTION TEST
      |
      |           sample_proportion = .43689
      |
      |                conf_level = 0.99
      |
      |        conf_interval = [.31422, .56749]
      |
(%o3) | method = Asympthotic test with Yates correction.
      |
      |     hypotheses = H0: p = 0.5 , H1: p # 0.5
      |
      |               statistic = .43689
      |
      |      distribution = [normal, 0.5, .048872]
      |
      |                p_value = .19662

Categories:  Package stats

関数: test_proportions_difference  
    test_proportions_difference (x1, n1, x2, n2)  
    test_proportions_difference (x1, n1, x2, n2, options …)

2つの出現率の差の推定。 引数 x1は 一番目の母集団でのBernoulli実験の n1回の試行での成功回数であり、 x2n2は 二番目の母集団での対応する値です。 標本は独立で、検定は漸近です。

オプション:

関数 test_proportions_differenceの出力は 以下の結果を示す inference_result Maximaオブジェクトです:

  1. 'proportions: 2つの標本出現率のリスト。
  2. 'conf_level: ユーザーが選択した信頼度。
  3. 'conf_interval: 出現率の差 p1 - p2の信頼区間。
  4. 'method: 推定手続きと 標本サイズのいずれかが10より小さい場合の警告メッセージ
  5. 'hypotheses: 検定される帰無、対立仮説。
  6. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  7. 'distribution: パラメータを伴う標本統計分布。
  8. 'p_value: 検定のp値。

例:

機械が250個のうち、10個の欠陥製品を製造しました。 その機械は、ある保守作業のあと、 150個のうち、4個の欠陥製品を製造しました。 機械が改善したか知るために、 対立 H0:p1>p2に対して 帰無仮説 H0:p1=p2を検定します。 ここで、 p1p2は 保守の前と後で製造された製品が欠陥である確率です。 p値に従うと、対立を受け入れる十分な証拠はありません。

 
(%i1) load("stats")$
(%i2) fpprintprec:7$
(%i3) test_proportions_difference(10, 250, 4, 150,
                                alternative = greater);
      |       DIFFERENCE OF PROPORTIONS TEST
      |
      |       proportions = [0.04, .02666667]
      |
      |              conf_level = 0.95
      |
      |      conf_interval = [- .02172761, 1]
      |
(%o3) | method = Asymptotic test. Yates correction.
      |
      |   hypotheses = H0: p1 = p2 , H1: p1 > p2
      |
      |            statistic = .01333333
      |
      |    distribution = [normal, 0, .01898069]
      |
      |             p_value = .2411936

データが未知の時の漸近正規分布の正確確率標準偏差。

 
(%i1) load("stats")$
(%i2) stats_numer: false$
(%i3) sol: test_proportions_difference(x1,n1,x2,n2)$
(%i4) last(take_inference('distribution,sol));
               1    1                  x2 + x1
              (-- + --) (x2 + x1) (1 - -------)
               n2   n1                 n2 + n1
(%o4)    sqrt(---------------------------------)
                           n2 + n1

Categories:  Package stats

関数: test_sign  
    test_sign (x)  
    test_sign (x, options …)

これは連続母集団のメジアンに関するノンパラメトリック符号検定です。 引数 xは1次元標本を含むリストか列行列です。

オプション:

関数 test_signの出力は 以下の結果を示す inference_result Maximaオブジェクトです:

  1. 'med_estimate: 標本メジアン。
  2. 'method: 推定手続き。
  3. 'hypotheses: 検定される帰無、対立仮説。
  4. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  5. 'distribution: パラメータを伴う標本統計分布。
  6. 'p_value: 検定のp値。

例:

対立 H_1: median > 6に対して、 標本が採られた母集団がメジアン6を持つかどうかチェックします。

 
(%i1) load("stats")$
(%i2) x: [2,0.1,7,1.8,4,2.3,5.6,7.4,5.1,6.1,6]$
(%i3) test_sign(x,'median=6,'alternative='greater);
               |                  SIGN TEST
               |
               |              med_estimate = 5.1
               |
               |      method = Non parametric sign test.
               |
(%o3)          | hypotheses = H0: median = 6 , H1: median > 6
               |
               |                statistic = 7
               |
               |      distribution = [binomial, 10, 0.5]
               |
               |         p_value = .05468749999999989

Categories:  Package stats

関数: test_signed_rank  
    test_signed_rank (x)  
    test_signed_rank (x, options …)

これは 連続母集団のメジアンに関する推定を行う Wilcoxonの符号順位検定です。 引数 xは 1次元標本を含む リストか列行列です。 もし標本サイズが20より大きいか、複数の零すなわち引き分けがあれば、 正規近似を実行します

pdf_rank_testcdf_rank_testも参照してください。

オプション:

関数 test_signed_rankの出力は 以下の結果を持つ inference_result Maximaオブジェクトです:

  1. 'med_estimate: 標本メジアン。
  2. 'method: 推定手続き。
  3. 'hypotheses: 検定される帰無、対立仮説。
  4. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  5. 'distribution: パラメータを伴う標本統計分布。
  6. 'p_value: 検定のp値。

例:

対立 H_1: median > 15に対して 帰無仮説 H_0: median = 15をチェックします。 引き分けがないので、これは正確確率検定です。

 
(%i1) load("stats")$
(%i2) x: [17.1,15.9,13.7,13.4,15.5,17.6]$
(%i3) test_signed_rank(x,median=15,alternative=greater);
                 |             SIGNED RANK TEST
                 |
                 |           med_estimate = 15.7
                 |
                 |           method = Exact test
                 |
(%o3)            | hypotheses = H0: med = 15 , H1: med > 15
                 |
                 |              statistic = 14
                 |
                 |     distribution = [signed_rank, 6]
                 |
                 |            p_value = 0.28125

Checks the null hypothesis H_0: equal(median, 2.5) against the alternative H_1: not equal(median, 2.5). This is an approximated test, since there are ties.

 
(%i1) load("stats")$
(%i2) y:[1.9,2.3,2.6,1.9,1.6,3.3,4.2,4,2.4,2.9,1.5,3,2.9,4.2,3.1]$
(%i3) test_signed_rank(y,median=2.5);
             |                 SIGNED RANK TEST
             |
             |                med_estimate = 2.9
             |
             |          method = Asymptotic test. Ties
             |
(%o3)        |    hypotheses = H0: med = 2.5 , H1: med # 2.5
             |
             |                 statistic = 76.5
             |
             | distribution = [normal, 60.5, 17.58195097251724]
             |
             |           p_value = .3628097734643669

Categories:  Package stats

関数: test_rank_sum  
    test_rank_sum (x1, x2)  
    test_rank_sum (x1, x2, option)

これは 2つの連続母集団のメジアンを比較するWilcoxon-Mann-Whitney検定です。 最初の2つの引数 x1x2は 2つの独立標本のデータを持つリストか列行列です。 もし標本サイズのいずれかが10より大きいか、 引き分けがあるなら、 正規近似を実行します。

オプション:

The output of function 関数 test_rank_sumの出力は 以下の結果を持つ inference_result Maximaオブジェクトです:

  1. 'method: 推定手続き。
  2. 'hypotheses: 検定される帰無、対立仮説。
  3. 'statistic: 帰無仮説を検定するのに使われる標本統計値。
  4. 'distribution: パラメータを伴う標本統計分布。
  5. 'p_value: 検定のp値。

例:

母集団が似たメジアンを持つかチェックします。 標本サイズは小さく、正確確率検定がされます。

 
(%i1) load("stats")$
(%i2) x:[12,15,17,38,42,10,23,35,28]$
(%i3) y:[21,18,25,14,52,65,40,43]$
(%i4) test_rank_sum(x,y);
              |                 RANK SUM TEST
              |
              |              method = Exact test
              |
              | hypotheses = H0: med1 = med2 , H1: med1 # med2
(%o4)         |
              |                 statistic = 22
              |
              |        distribution = [rank_sum, 9, 8]
              |
              |          p_value = .1995886466474702

次は、 より大きな標本で引き分けを含み、 手続きは正規近似をします。 対立仮説は H_1: median1 < median2です。

 
(%i1) load("stats")$
(%i2) x: [39,42,35,13,10,23,15,20,17,27]$
(%i3) y: [20,52,66,19,41,32,44,25,14,39,43,35,19,56,27,15]$
(%i4) test_rank_sum(x,y,'alternative='less);
             |                  RANK SUM TEST
             |
             |          method = Asymptotic test. Ties
             |
             |  hypotheses = H0: med1 = med2 , H1: med1 < med2
(%o4)        |
             |                 statistic = 48.5
             |
             | distribution = [normal, 79.5, 18.95419580097078]
             |
             |           p_value = .05096985666598441

Categories:  Package stats

関数: test_normality (x)

正規性のShapiro-Wilk検定。 引数 xは 数のリストであり、 標本サイズは2より大きく、5000以下でなければいけません。 そうでないなら、関数 test_normalityはエラーメッセージをシグナルします。

参考文献:

[1] Algorithm AS R94, Applied Statistics (1995), vol.44, no.4, 547-551

関数 test_normalityの出力は 以下の結果を持つ inference_result Maximaオブジェクトです:

  1. 'statistic: W統計値
  2. 'p_value: 正規仮定のp値。

例:

サイズ9の標本に基づいて母集団の正規性をチェックします。

 
(%i1) load("stats")$
(%i2) x:[12,15,17,38,42,10,23,35,28]$
(%i3) test_normality(x);
                       |      SHAPIRO - WILK TEST
                       |
(%o3)                  | statistic = .9251055695162436
                       |
                       |  p_value = .4361763918860381

Categories:  Package stats

関数: linear_regression  
    linear_regression (x)  
    linear_regression (x option)

重回帰 y_i = b0 + b1*x_1i + b2*x_2i + ... + bk*x_ki + u_i。 ここで u_iN(0,sigma)個の独立確率変数です。 引数 xは複数の列を持つ行列でなければいけません。 最後の列は応答 (y_i)とみなされます。

オプション:

関数 linear_regressionの出力は 以下の結果を持つ inference_result Maximaオブジェクトです:

  1. 'b_estimation: 回帰係数推定。
  2. 'b_covariances: 回帰係数推定の共分散行列。
  3. b_conf_int: 回帰係数の信頼区間。
  4. b_statistics: 係数テストの統計。
  5. b_p_values: 係数テストのp値。
  6. b_distribution: 係数テストの確率分布。
  7. v_estimation: 不偏分散推定量。
  8. v_conf_int: 分散信頼区間。
  9. v_distribution: 分散テストの確率分布。
  10. residuals: 残差。
  11. adc: 調整済み決定係数。
  12. aic: 赤池情報量規準。
  13. bic: Bayes情報量規準。

上の項目 1, 4, 5, 6, 7, 8, 9, 11だけがこの順で、デフォルトで表示されます。 残りはユーザーが関数 items_inferencetake_inferenceを利用するまで 隠されたままです。

例:

線形モデルの三変量標本へのフィッティング。 最後の列は応答 (y_i)と見なされます。

 
(%i2) load("stats")$
(%i3) X:matrix(
    [58,111,64],[84,131,78],[78,158,83],
    [81,147,88],[82,121,89],[102,165,99],
    [85,174,101],[102,169,102])$
(%i4) fpprintprec: 4$
(%i5) res: linear_regression(X);
             |       LINEAR REGRESSION MODEL
             |
             | b_estimation = [9.054, .5203, .2397]
             |
             | b_statistics = [.6051, 2.246, 1.74]
             |
             | b_p_values = [.5715, .07466, .1423]
             |
(%o5)        |   b_distribution = [student_t, 5]
             |
             |         v_estimation = 35.27
             |
             |     v_conf_int = [13.74, 212.2]
             |
             |      v_distribution = [chi2, 5]
             |
             |             adc = .7922
(%i6) items_inference(res);
(%o6) [b_estimation, b_covariances, b_conf_int, b_statistics,
b_p_values, b_distribution, v_estimation, v_conf_int,
v_distribution, residuals, adc, aic, bic]
(%i7) take_inference('b_covariances, res);
                  [  223.9    - 1.12   - .8532  ]
                  [                             ]
(%o7)             [ - 1.12    .05367   - .02305 ]
                  [                             ]
                  [ - .8532  - .02305   .01898  ]
(%i8) take_inference('bic, res);
(%o8)                          30.98
(%i9) load("draw")$
(%i10) draw2d(
    points_joined = true,
    grid = true,
    points(take_inference('residuals, res)) )$


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

82.4 Functions and Variables for special distributions

関数: pdf_signed_rank (x, n)

符号順位統計の正確確率分布の確率密度関数。 引数 xは実数であり、 nは正の整数です。

test_signed_rankも参照してください。

Categories:  Package stats

関数: cdf_signed_rank (x, n)

符号順位統計の正確確率分布の累積密度関数。 引数 xは実数であり、 nは正の整数です。

test_signed_rankも参照してください。

Categories:  Package stats

関数: pdf_rank_sum (x, n, m)

順位和統計の正確確率分布の確率密度関数。 引数 xは実数であり、 nmはともに正の整数です。

test_rank_sumも参照してください。

Categories:  Package stats

関数: cdf_rank_sum (x, n, m)

順位和統計の正確確率分布の累積密度関数。 引数 xは実数であり、 nmはともに正の整数です。

test_rank_sumも参照してください。

Categories:  Package stats


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

83. stirling


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

83.1 Functions and Variables for stirling

関数: stirling  
    stirling (z,n)  
    stirling (z,n,pred)

gamma(x)O(1/x^(2n-1)) Stirling公式で置き換えます。 nが非負の整数の時、エラーを知らせます。 オプションの三番目の引数 predがあると、 predが trueの時だけ Stirling公式を適用します。

参照文献: Abramowitz & Stegun, " Handbook of mathematical functions", 6.1.40.

例:

 
(%i1) load ("stirling")$

(%i2) stirling(gamma(%alpha+x)/gamma(x),1);
       1/2 - x             x + %alpha - 1/2
(%o2) x        (x + %alpha)
                                   1           1
                            --------------- - ---- - %alpha
                            12 (x + %alpha)   12 x
                          %e
(%i3) taylor(%,x,inf,1);
                    %alpha       2    %alpha
          %alpha   x       %alpha  - x       %alpha
(%o3)/T/ x       + -------------------------------- + . . .
                                 2 x
(%i4) map('factor,%);
                                       %alpha - 1
         %alpha   (%alpha - 1) %alpha x
(%o4)   x       + -------------------------------
                                  2

関数 stirlingは変数 'gamma'と関数 gammaの違いを知っています:

 
(%i5) stirling(gamma + gamma(x),0);
                                    x - 1/2   - x
(%o5)    gamma + sqrt(2) sqrt(%pi) x        %e
(%i6) stirling(gamma(y) + gamma(x),0);
                         y - 1/2   - y
(%o6) sqrt(2) sqrt(%pi) y        %e
                                              x - 1/2   - x
                         + sqrt(2) sqrt(%pi) x        %e

変数 kを含む項だけに Stirling公式を適用するためにオプションの三番目の引数を使います; 例えば、

 
(%i7) makegamma(pochhammer(a,k)/pochhammer(b,k));
(%o7) (gamma(b)*gamma(k+a))/(gamma(a)*gamma(k+b))
(%i8) stirling(%,1, lambda([s], not(freeof(k,s))));
(%o8) (%e^(b-a)*gamma(b)*(k+a)^(k+a-1/2)*(k+b)^(-k-b+1/2))/gamma(a)

gamma(a)gamma(b)は、 kを含まないので、 Stirling公式はこれら2つの項に適用されませんでした。

この関数を使うには最初に load("stirling")と書いてください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84. stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84.1 Introduction to String Processing

パッケージ stringprocはフォーマットやエンコードやデータストリームを含む文字列と文字を処理する関数を含みます。 例えば base64や hash関数といった暗号のためのいくつかのツールがこのパッケージを締めくくります。

これは load(stringproc)を介して直接ロードもできますし、関数の1つを使うと自動的にロードされます。

質問やバグレポートは、著者に連絡してください。 以下のコマンドは著者の eメールアドレスを印字します。

printf(true, "~{~a~}@gmail.com", split(sdowncase("Volker van Nek")))$

例えば "Text"とタイプすることで文字列が構成されます。 オプション変数 stringdispがデフォルトの falseに設定されている時、 ダブルクオートは印字されません。 stringpは オブジェクトが文字列かどうかのテストです。

 
(%i1) str: "Text";
(%o1)                         Text
(%i2) stringp(str);
(%o2)                         true

文字は、長さ1の文字列で表されます。 charpは対応するテストです。

 
(%i1) char: "e";
(%o1)                           e
(%i2) charp(char);
(%o2)                         true

Maximaでは文字列の位置インデックスはリストと同様 1から始まり、 以下の一貫性が成り立ちます。

 
(%i1) is(charat("Lisp",1) = charlist("Lisp")[1]);
(%o1)                         true

文字列は Maximaの式を含むかもしれません。 これらは parse_stringでパースできます。

 
(%i1) map(parse_string, ["42" ,"sqrt(2)", "%pi"]);
(%o1)                   [42, sqrt(2), %pi]
(%i2) map('float, %);
(%o2)        [42.0, 1.414213562373095, 3.141592653589793]

文字列は文字として処理したり、オクテットとしてバイナリ形式で処理できます。 変換の関数は string_to_octetsoctets_to_stringです。 使用できるエンコードはプラットフォームやアプリケーション、裏にあるLispに依存します。 (以下はSBCLでコンパイルされた GNU/Linux上の Maximaを見せます)

 
(%i1) obase: 16.$
(%i2) string_to_octets("$£€", "cp1252");
(%o2)                     [24, 0A3, 80]
(%i3) string_to_octets("$£€", "utf-8");
(%o3)               [24, 0C2, 0A3, 0E2, 82, 0AC]

文字列は文字ストリームに書かれたり、オクテットとしてバイナリストリームに書かれたりします。 以下の例は文字のファイル入出力を例示します。

openwはファイルへの出力ストリームを返します。 printfはそのファイルにフォーマットされたものを書き込みます。 例えば、closeで ストリームに含まれるすべての文字はファイルに書き込まれます。

 
(%i1) s: openw("file.txt");
(%o1)                #<output stream file.txt>
(%i2) printf(s, "~%~d ~f ~a ~a ~f ~e ~a~%",
42, 1.234, sqrt(2), %pi, 1.0e-2, 1.0e-2, 1.0b-2)$
(%i3) close(s)$

そして openrは以前使ったファイルから入力ストリームを返します。 readlineは文字列として読み込んだ行を返します。 文字列は、例えば splittokensでトークン化され、 最終的に parse_stringでパースできます。

 
(%i4) s: openr("file.txt");
(%o4)                 #<input stream file.txt>
(%i5) readline(s);
(%o5)          42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
(%i6) map(parse_string, split(%));
(%o6)       [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
(%i7) close(s)$

Categories:  Strings · Share packages · Package stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84.2 Input and Output

例: ファイルへのフォーマットされた印字。

 
(%i1) s: openw("file.txt");
(%o1)                      #<output stream file.txt>
(%i2) control:
"~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2t\
and an integer: ~20t~d~%"$
(%i3) printf( s,control, 'true,[1,2,3],42 )$
(%o3)                                false
(%i4) close(s);
(%o4)                                true
(%i5) s: openr("file.txt");
(%o5)                      #<input stream file.txt>
(%i6) while stringp( tmp:readline(s) ) do print(tmp)$
  An atom:          true
  and a list:       one two three
  and an integer:   42
(%i7) close(s)$

関数: close (stream)

streamを閉じて、もし streamが開いていたら trueを返します。

関数: flength (stream)

streamはファイルからかファイルへの開いたストリームでなかればいけません。 その時 flengthはこのファイルの中に現在存在するバイト数を返します。

例: writebyteを参照してください。

関数: flush_output (stream)

streamをフラッシュします。 ここで streamはファイルへの出力ストリームでなければいけません。

例: writebyteを参照してください。

Categories:  File output · Package stringproc

関数: fposition  
    fposition (stream)  
    fposition (stream, pos)

もし posが使われてないなら、 streamの中の現在位置を返します。 もし posが使われているなら、 fpositionstreamの中の位置を設定します。 posは正の数でなければいけません。

データストリームの位置は文字列やリスト同様、1から始まります。 すなわち、 streamの最初の要素は位置 1にあります。

関数: freshline  
    freshline ()  
    freshline (stream)

もし位置が行の最初でないなら 標準出力ストリームに改行を書き込み、 trueを返します。 オプション引数 streamを使うと、そのストリームに改行を書き込みます。 freshline()が期待通りに動かない場合がいくつかあります。

newlineも参照してください。

Categories:  File output · Package stringproc

関数: get_output_stream_string (stream)

現在 streamに存在するすべての文字を含む文字列を返します。 streamはオープンな文字列出力ストリームでなければいけません。 戻り値の文字は streamから取り除かれます。

例: make_string_output_streamを参照してください。

Categories:  Package stringproc

関数: make_string_input_stream  
    make_string_input_stream (string)  
    make_string_input_stream (string, start)  
    make_string_input_stream (string, start, end)

stringの一部とファイルの終了を含む入力ストリームを返します。 オプション引数がない場合、ストリームは全体の文字列を含み、一番目の文字の前に位置されます。 startendはストリームに含まれた部分文字列を定義します。 一番目の文字は位置 1で得られます。

 
(%i1) istream : make_string_input_stream("text", 1, 4);
(%o1)              #<string-input stream from "text">
(%i2) (while (c : readchar(istream)) # false do sprint(c), newline())$
t e x
(%i3) close(istream)$

Categories:  Package stringproc

関数: make_string_output_stream ()

文字を受け付ける出力ストリームを返します。 このストリームに現在存在する文字は get_output_stream_stringを使って取り出すことができます。

 
(%i1) ostream : make_string_output_stream();
(%o1)               #<string-output stream 09622ea0>
(%i2) printf(ostream, "foo")$

(%i3) printf(ostream, "bar")$

(%i4) string : get_output_stream_string(ostream);
(%o4)                            foobar
(%i5) printf(ostream, "baz")$

(%i6) string : get_output_stream_string(ostream);
(%o6)                              baz
(%i7) close(ostream)$

Categories:  Package stringproc

関数: newline  
    newline ()  
    newline (stream)

標準出力ストリームに改行を書き込みます。 オプション引数 streamを使うと、そのストリームに改行を書き込みます。 newline()が期待通りに動かないいくつかの場合があります。

newline()の使用の例に関しては、 sprintを参照してください。

Categories:  File output · Package stringproc

関数: opena (file)

fileへの文字出力ストリームを返します。 もし存在しているファイルを開いたら、 openafileの終わりに要素を追加します。

バイナリ出力に関しては opena_binaryを参照してください。

Categories:  File output · Package stringproc

関数: openr  
    openr (file)  
    openr (file, encoding)

fileへの文字入力ストリームを返します。 openrfileが存在すること仮定します。 もしファイルを読んでエンコーディングについてのLispエラーが出たら、 引数 encodingとして正しい文字列を渡すことが役に立つかもしれません。 利用可能なエンコーディングとそれらの名前は使用しているlispに依存します。 sbclでは適切な文字列のリストは http://www.sbcl.org/manual/#External-Formats で確認することができます。

バイナリ出力に関しては openr_binaryを参照してください。 close, openwも参照してください。

 
(%i1) istream : openr("data.txt","EUC-JP");
(%o1)     #<FD-STREAM for "file /home/gunter/data.txt" {10099A3AE3}>
(%i2) close(istream);
(%o2)                                true

Categories:  File input · Package stringproc

関数: openw (file)

fileへの文字出力ストリームを返します。 もし fileが存在しないなら、生成されます。 もし存在しているファイルを開いたら、 openwfileを破壊的に変更します。

バイナリ出力に関しては openw_binaryを参照してください。

close, openrも参照してください。

Categories:  File output · Package stringproc

関数: printf  
    printf (dest, string)  
    printf (dest, string, expr_1, ..., expr_n)

制御文字列 stringの文字を出力し、ティルデがディレクティブを導入することを観察することで フォーマットされた出力を生成します。 ティルデの後の文字は、前置パラメータと修飾子が先立つこともありますが、どの種類のフォーマットが望まれているか指定します。 ほとんどのディレクティブは1つか複数の要素の引数 expr_1, ..., expr_nを使い、出力を生成します。

もし destがストリームか trueなら、 printffalseを返します。 そうでなければ、 printfは出力を含む文字列を返します。 デフォルトでは、ストリーム stdin, stdout, stderrが定義されています。 もしmaximaがサーバーとして走っているなら (これは もし maximaがグラフィカルユーザーインタフェースと通信しているなら通常のケースです)、 setup-clientold_stdoutold_stderrも定義します。

printfは Maximaの Common Lisp 関数 formatを提供します。 以下の例はこれら二つの関数の一般的な関係を具体的に示します。

 
(%i1) printf(true, "R~dD~d~%", 2, 2);
R2D2
(%o1)                                false
(%i2) :lisp (format t "R~dD~d~%" 2 2)
R2D2
NIL

以下の記述は printfの可能性の雑なスケッチに限定されます。

Lisp関数 formatは詳細は多くの参考書籍に記述されています。 例えば、 Guy L. Steeleによる無料のオンラインマニュアル "Common Lisp the Language"が役立つでしょう。 それの chapter 22.3.3を参照してください。

 
   ~%       改行
   ~&       行のフレッシュ
   ~t       タブ
   ~$       通貨記号
   ~d       10進整数
   ~b       2進整数
   ~o       8進整数
   ~x       16進整数
   ~br      b進整数
   ~r       整数を一字一字
   ~p       複数形
   ~f       浮動小数点
   ~e       科学的記数法
   ~g       大きさに応じて~fまたは~e
   ~h       多倍長浮動小数点
   ~a       Maxima関数文字列を使う
   ~s       ~aと同様, しかし"ダブルコーテーション"で囲まれた出力
   ~~       ~
   ~<       行揃え, ~> 終端
   ~(       大文字小文字変換, ~) 終端
   ~[       選択, ~] 終端
   ~{       繰り返し, ~} 終端

多倍長浮動小数点に関するディレクティブ ~hは Lisp標準ではないので、以下に具体的に示します。

ディレクティブ ~*はサポートされていないことに注意してください。

もし destがストリームか trueなら、 printffalseを返します。 そうでなければ、 printfは出力を含む文字列を返します。

 
(%i1) printf( false, "~a ~a ~4f ~a ~@r",
              "String",sym,bound,sqrt(12),144), bound = 1.234;
(%o1)                 String sym 1.23 2*sqrt(3) CXLIV
(%i2) printf( false,"~{~a ~}",["one",2,"THREE"] );
(%o2)                          one 2 THREE
(%i3) printf(true,"~{~{~9,1f ~}~%~}",mat ),
          mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$
      1.1       2.0       3.3
      4.0       5.0       6.0
      7.0       8.9       9.0
(%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
(%i5) printf( false,control, n,n,if n=1 then 1 else 2 ), n=2;
(%o5)                    Two birds are singing.

ディレクティブ ~hは多倍長浮動小数点を扱うために導入されました。

 
~w,d,e,x,o,p@H
 w : width
 d : decimal digits behind floating point
 e : minimal exponent digits
 x : preferred exponent
 o : overflow character
 p : padding character
 @ : display sign for positive numbers
 
(%i1) fpprec : 1000$
(%i2) printf(true, "|~h|~%", 2.b0^-64)$
|0.0000000000000000000542101086242752217003726400434970855712890625|
(%i3) fpprec : 26$
(%i4) printf(true, "|~h|~%", sqrt(2))$
|1.4142135623730950488016887|
(%i5) fpprec : 24$
(%i6) printf(true, "|~h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i7) printf(true, "|~28h|~%", sqrt(2))$
|   1.41421356237309504880169|
(%i8) printf(true, "|~28,,,,,'*h|~%", sqrt(2))$
|***1.41421356237309504880169|
(%i9) printf(true, "|~,18h|~%", sqrt(2))$
|1.414213562373095049|
(%i10) printf(true, "|~,,,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-3|
(%i11) printf(true, "|~,,2,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-03|
(%i12) printf(true, "|~20h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i13) printf(true, "|~20,,,,'+h|~%", sqrt(2))$
|++++++++++++++++++++|

Categories:  File output · Package stringproc

関数: readbyte (stream)

streamの中の最初のバイトを削除し返します。 streamはバイナリ入力ストリームでなければいけません。 もしファイルの終端に来たら、readbytefalseを返します。

例: OpenSSLのAESで暗号化されたファイルから最初の16バイトを読みます。

 
(%i1) ibase: obase: 16.$

(%i2) in: openr_binary("msg.bin");
(%o2)                       #<input stream msg.bin>
(%i3) (L:[],  thru 16. do push(readbyte(in), L),  L:reverse(L));
(%o3) [53, 61, 6C, 74, 65, 64, 5F, 5F, 88, 56, 0DE, 8A, 74, 0FD, 0AD, 0F0]
(%i4) close(in);
(%o4)                                true
(%i5) map(ascii, rest(L,-8));
(%o5)                      [S, a, l, t, e, d, _, _]
(%i6) salt: octets_to_number(rest(L,8));
(%o6)                          8856de8a74fdadf0

Categories:  File input · Package stringproc

関数: readchar (stream)

streamの一番目の文字を取り出し、返します。 ファイルの終端になったら、 readcharfalseを返します。

例: make_string_input_streamを参照してください。

Categories:  File input · Package stringproc

関数: readline (stream)

streamの現在位置から行の終わりまでの文字を含む文字列か、 もしファイルの終わりが来たら falseを返します。

Categories:  File input · Package stringproc

関数: sprint (expr_1, …, expr_n)

引数を順に評価し、一番左から始まる「一行」に表示します。 式は数の右隣にスペース文字と共に印字され、行の長さを無視します。 改行には newline()が役に立つかもしれません。

例: sprintを使って連続的に印字。 newline()で改行を生成。

 
(%i1) for n:0 thru 19 do sprint(fib(n))$
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
(%i2) for n:0 thru 22 do (
         sprint(fib(n)),
         if mod(n,10) = 9 then newline() )$
0 1 1 2 3 5 8 13 21 34
55 89 144 233 377 610 987 1597 2584 4181
6765 10946 17711

Categories:  Package stringproc

関数: writebyte (byte, stream)

streambyteを書き出します。 streamはバイナリ出力ストリームでなければいけません。 writebytebyteを返します。

例: バイナリファイル出力ストリームに数バイト書き出します。 この例では、バイトすべては印字可能文字に対応していて printfileで印字されます。 バイトは flush_outpucloseが呼ばれるまでストリームに残ります。

 
(%i1) ibase: obase: 16.$

(%i2) bytes: map(cint, charlist("GNU/Linux"));
(%o2)                [47, 4E, 55, 2F, 4C, 69, 6E, 75, 78]
(%i3) out: openw_binary("test.bin");
(%o3)                      #<output stream test.bin>
(%i4) for i thru 3 do writebyte(bytes[i], out);
(%o4)                                done
(%i5) printfile("test.bin")$

(%i6) flength(out);
(%o6)                                  0
(%i7) flush_output(out);
(%o7)                                true
(%i8) flength(out);
(%o8)                                  3
(%i9) printfile("test.bin")$
GNU
(%i0A) for b in rest(bytes,3) do writebyte(b, out);
(%o0A)                               done
(%i0B) close(out);
(%o0B)                               true
(%i0C) printfile("test.bin")$
GNU/Linux

Categories:  File output · Package stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84.3 Characters

文字は長さ 1の文字列です。

関数: adjust_external_format ()

Lispリーダーの現在の外部フォーマットに関する情報を印字し、 外部フォーマットのエンコーディングが Maximaを走らせているアプリケーションのエンコーディングと違う場合、 adjust_external_formatはエンコーディングの調整を試みて、 ヘルプか指示を印字します。 adjust_external_formatは、 外部フォーマットが変更された時 trueを、 そうでなければ falseを返します。

cint, unicode, octets_to_string, string_to_octets のような関数は、 Unicode文字フルレンジで適切に動くために、 Lispリーダーの外部フォーマットとして UTF-8を必要とします。

例(2016年3月 Windows上の Maxima): デフォルトの外部フォーマットがアプリケーションが提供するエンコーディングと等しくない時に adjust_external_formatを使用

1. コマンドライン Maxima

端末セッションが好まれる場合、 SBCLでコンパイルされた Maximaを使うことをお勧めします。 そうすれば Unicodeがデフォルトでサポートされ、 adjust_external_formatを呼び出す必要がありません。

もし MaximaがCLISPか GCLでコンパイルされたなら、 端末エンコーディングを CP850から CP1252に変更することをお勧めします。 adjust_external_formatがヘルプを印字します。

CCLは UTF-8を読み込む一方、端末入力はデフォルトで CP850です。 CCLは CP1252をサポートしません。 adjust_external_formatは 端末エンコーディングと外部フォーマット両方を iso-8859-1に変更するための指示を印字します。

2. wxMaxima

wxMaximaでは SBCLはデフォルトで CP1252を読み込みますが、 アプリケーションからの入力は UTF-8エンコードです。 調整が必要です。

一度、adjust_external_formatを呼び出し、 Maximaを再起動すると、 デフォルト外部フォーマットは UTF-0になります。

 
(%i1)adjust_external_format();
The line
(setf sb-impl::*default-external-format* :utf-8)
has been appended to the init file
C:/Users/Username/.sbclrc
Please restart Maxima to set the external format to UTF-8.
(%i1) false

Maximaを再起動。

 
(%i1) adjust_external_format();
The external format is currently UTF-8
and has not been changed.
(%i1) false

Categories:  Package stringproc

関数: alphacharp (char)

もし charがアルファベット文字なら trueを返します。

非 US-ASCII文字をアルファベット文字か確認するには、 背後のLispが完全なUnicodeサポートを提供しなければいけません。 例えば、ドイツ語のウムラウトは GNU/Linux上の SBCLではアルファベット文字として検出されますが、 GCLではそうなりません。 (Windows Maximaでは、SBCLでコンパイルされた時、 UTF-8を設定しなければいけません。 詳しくは adjust_external_formatを参照してください)

例: 非 US-ASCII文字のテスト

背後のLisp (SBCL, GNU/Linux)は タイプされた文字をLisp文字に変換してテストすることができます。

 
(%i1) alphacharp("ü");
(%o1)                          true

GCLではこれはできまsねん。 エラーが起こります。

 
(%i1) alphacharp("u");
(%o1)                          true
(%i2) alphacharp("ü");

package stringproc: ü cannot be converted into a Lisp character.
 -- an error.

関数: alphanumericp (char)

もし charがアルファベット文字か数字なら trueを返します。 (対応する US-ASCII文字だけが数字とみなされます)

注意: alphacharpの注記を参照してください。

関数: ascii (int)

128未満の整数 intに対応するUS-ASCII文字を返します。

127より大きな符号位置を変換するには unicodeを参照してください。

例:

 
(%i1) for n from 0 thru 127 do (
        ch: ascii(n),
        if alphacharp(ch) then sprint(ch),
        if n = 96 then newline() )$
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z

Categories:  Package stringproc

関数: cequal (char_1, char_2)

もし char_1char_2が同じ文字なら trueを返します。

関数: cequalignore (char_1, char_2)

cequalと同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

関数: cgreaterp (char_1, char_2)

もし char_1の符号位置が char_2のそれより大きいなら trueを返します。

関数: cgreaterpignore (char_1, char_2)

cgreaterpと同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

関数: charp (obj)

もし objが Maxima-文字なら trueを返します。 例えばイントロダクションを参照してください。

関数: cint (char)

Maxima文字 charのUnicode符号位置を返します。 charは長さ 1でなければいけません。

例: いくつかの文字の16進符号位置。 (GNU/Linux上の SBCLを使った Maxima)

 
(%i1) obase: 16.$
(%i2) map(cint, ["$","£","€"]);
(%o2)                           [24, 0A3, 20AC]

警告: 外部フォーマットが UTF-8に設定されている時、 Windows上の SBCLを使った wxMaximaでは 16ビットより大きな符号位置に対応した文字を入力できません。 adjust_external_formatを参照してください。

CMUCLはこれらの文字を 1文字として処理しません。 そして cintfalseを返します。 回避策として文字をUTF-8オクテットを介して符号位置に変換すればいいかもしれません:

utf8_to_unicode(string_to_octets(character));

utf8_to_unicode, string_to_octetsを参照してください。

Categories:  Package stringproc

関数: clessp (char_1, char_2)

もし char_1の符号位置が char_2のそれより小さいなら trueを返します。

関数: clesspignore (char_1, char_2)

clesspと同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

関数: constituent (char)

もし charが、グラフィック文字ですがスペース文字でないなら、 trueを返します。 グラフィック文字は見ることができる文字とスペース文字です。 (constituentは Paul Grahamによって定義されています。 Paul Graham, ANSI Common Lisp, 1996, page 67を参照してください)

 
(%i1) for n from 0 thru 255 do (
tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
! " #  %  ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
d e f g h i j k l m n o p q r s t u v w x y z { | } ~

関数: digitcharp (char)

対応する US-ASCII文字が数字とみなされるような場合だけ もし charが数字なら trueを返します。

関数: lowercasep (char)

もし charが小文字なら trueを返します。

注意: alphacharpの注記を参照してください。

変数: newline

改行文字(ASCII文字 10)。

変数: space

スペース文字。

変数: tab

タブ文字。

関数: unicode (arg)

argが定義する文字を返します。 もし背後の LispがUnicodeのフルサポートを提供するなら argは Unicode符号位置か名前文字列です。

例: 16進符号位置で定義された文字 (GNU/Linux上の SBCLを使った Maxima)

 
(%i1) ibase: 16.$
(%i2) map(unicode, [24, 0A3, 20AC]);
(%o2)                            [$, £, €]

警告: 外部フォーマットが UTF-8に設定されている時、 Windows上の SBCLを使った wxMaximaでは 16ビットより大きな符号位置に対応した文字を入力できません。 adjust_external_formatを参照してください。

CMUCLはこれらの文字を 1文字として処理しません。 そして cintfalseを返します。 回避策として文字をUTF-8オクテットを介して符号位置に変換すればいいかもしれません:

octets_to_string(unicode_to_utf8(code_point));

octets_to_string, unicode_to_utf8を参照してください。

背後の Lispが Unicodeのフルサポートを提供するなら 文字は、名前で指定できるかもしれません。 以下は、ECL, CLISP, SBCLで可能です。 ここで Windows上のSBCLでは外部フォーマットはUTF-8に設定しなければいけません。 CMUCLも unicode(name)をサポートしますが、また 16ビット文字に限定されます。

unicodeの文字列引数は基本的に "~@c"して石を使った printfが返すのと同じ文字列を返します。 しかし以下で見るように、接頭辞 "#\"は省略しなければいけません。 下線はスペースに置き換えられ、大文字は小文字に置き換えられます。

例 (続き): 名前で定義された文字 (GNU/Linux上の SBCLを使った Maxima)

 
(%i3) printf(false, "~@c", unicode(0DF));
(%o3)                    #\LATIN_SMALL_LETTER_SHARP_S
(%i4) unicode("LATIN_SMALL_LETTER_SHARP_S");
(%o4)                                  ß
(%i5) unicode("Latin small letter sharp s");
(%o5)                                  ß

Categories:  Package stringproc

関数: unicode_to_utf8 (code_point)

Unicode code_pointに対応する UTF-8コードを含むリストを返します。

例: Unicode符号位置をUTF-8に、そしてその逆の変換。

 
(%i1) ibase: obase: 16.$
(%i2) map(cint, ["$","£","€"]);
(%o2)                           [24, 0A3, 20AC]
(%i3) map(unicode_to_utf8, %);
(%o3)                 [[24], [0C2, 0A3], [0E2, 82, 0AC]]
(%i4) map(utf8_to_unicode, %);
(%o4)                           [24, 0A3, 20AC]

Categories:  Package stringproc

関数: uppercasep (char)

もし charが大文字なら trueを返します。

注意: alphacharpに関する注記を参照してください。

変数: us_ascii_only

このオプション変数は Maximaを走らせるアプリケーションが提供する文字エンコーディングが UTF-8なのに Lispリーダの外部フォーマットが UTF-8に等しくない時 Maximaに影響します。

GNU/Linux上では Maximaが GCLでビルドされた時にはこれは trueです。 Windows上でGCLか SBCLでビルドされた場合もそうです。

SBCLを使う場合、外部フォーマットを UTF-8に変更することをお薦めします。 その場合、 us_ascii_onlyは設定不要です。 詳細は adjust_external_formatを参照してください。

us_ascii_onlyはデフォルトで falseです。 その時、 Maxima自身が (すなわち上記の状況で) UTF-8エンコーディングをパースします。

us_ascii_onlytrueに設定されている時、 文字列処理関数の引数に使われるすべての文字列は非US-ASCII文字を含まないと仮定されます。 その約束の下、Maximaは UTF-8をパースすることを避けて、文字列をより効率よく処理できます。

関数: utf8_to_unicode (list)

1文字のUTF-8エンコーディングを含む listに対応する Unicode符号位置を返します。

例: unicode_to_utf8を参照してください。

Categories:  Package stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84.4 String Processing

文字列の位置インデックスは Maximaのリストと同様に 1から始まります。 charatの例を参照してください。

関数: charat (string, n)

stringn番目の文字を返します。 stringの一番目の文字は n = 1で返されます。

 
(%i1) charat("Lisp",1);
(%o1)                           L
(%i2) charlist("Lisp")[1];
(%o2)                           L

Categories:  Package stringproc

関数: charlist (string)

stringの文字すべてのリストを返します。

 
(%i1) charlist("Lisp");
(%o1)                     [L, i, s, p]

Categories:  Package stringproc

関数: eval_string (str)

文字列 strを Maxima式としてパースし、評価します。 文字列 strは終端子(ドル記号 $またはセミコロン ;) を持つかもしれませんし持たないかもしれません。

もし複数あるなら、最初の式だけがパースされ、評価されます。

もし strが文字列でないならエラーが出力されます。

例:

 
(%i1) eval_string ("foo: 42; bar: foo^2 + baz");
(%o1)                       42
(%i2) eval_string ("(foo: 42, bar: foo^2 + baz)");
(%o2)                   baz + 1764

parse_stringも参照してください。

Categories:  Package stringproc

関数: parse_string (str)

文字列 strを Maxima式としてパースします(評価しません)。 文字列 strは終端子(ドル記号 $またはセミコロン ;) を持つかもしれませんし持たないかもしれません。

もし複数あるなら、最初の式だけがパースされ、評価されます。

もし strが文字列でないならエラーが出力されます。

例:

 
(%i1) parse_string ("foo: 42; bar: foo^2 + baz");
(%o1)                    foo : 42
(%i2) parse_string ("(foo: 42, bar: foo^2 + baz)");
                                   2
(%o2)          (foo : 42, bar : foo  + baz)

eval_stringも参照してください。

Categories:  Package stringproc

関数: scopy (string)

stringのコピーを新しい文字列として返します。

Categories:  Package stringproc

関数: sdowncase  
    sdowncase (string)  
    sdowncase (string, start)  
    sdowncase (string, start, end)

supcaseと同様ですが、大文字を小文字に変換します。

Categories:  Package stringproc

関数: sequal (string_1, string_2)

もし string_1string_2が同じ文字の列を含むなら、 trueを返します。

関数: sequalignore (string_1, string_2)

sequalと同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

関数: sexplode (string)

sexplodeは関数charlistの別名です。

Categories:  Package stringproc

関数: simplode  
    simplode (list)  
    simplode (list, delim)

simplodeは式のリストを取り、それらを結合して文字列にします。 もしデリミタ delimを指定しないなら、 simplodeはデリミタを使いません。 delimは任意の文字列を取り得ます。

例:

 
(%i1) simplode(["xx[",3,"]:",expand((x+y)^3)]);
(%o1)             xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
(%i2) simplode( sexplode("stars")," * " );
(%o2)                   s * t * a * r * s
(%i3) simplode( ["One","more","coffee."]," " );
(%o3)                   One more coffee.

Categories:  Package stringproc

関数: sinsert (seq, string, pos)

substring (string, 1, pos - 1)と 文字列 seqsubstring (string, pos)の結合となる文字列を返します。 stringの一番目の文字は位置 1にあることに注意してください。

例:

 
(%i1) s: "A submarine."$
(%i2) concat( substring(s,1,3),"yellow ",substring(s,3) );
(%o2)                  A yellow submarine.
(%i3) sinsert("hollow ",s,3);
(%o3)                  A hollow submarine.

Categories:  Package stringproc

関数: sinvertcase  
    sinvertcase (string)  
    sinvertcase (string, start)  
    sinvertcase (string, start, end)

位置 startから endまでのそれぞれの文字を逆順にすることを除いて stringを返します。 もし endを与えないなら、 startから stringの終わりまでのすべての文字列を置き換えます。

例:

 
(%i1) sinvertcase("sInvertCase");
(%o1)                      SiNVERTcASE

Categories:  Package stringproc

関数: slength (string)

stringの中の文字の数を返します。

Categories:  Package stringproc

関数: smake (num, char)

num個の文字 charを持つ新しい文字列を返します。

例:

 
(%i1) smake(3,"w");
(%o1)                          www

Categories:  Package stringproc

関数: smismatch  
    smismatch (string_1, string_2)  
    smismatch (string_1, string_2, test)

string_1string_2が異なる string_1の最初の文字の位置、または falseを返します。 マッチングのデフォルトのテスト関数は sequalです。 もし smismatchが文字の大小を無視なければいけないなら、 テストとして sequalignoreを使ってください。

例:

 
(%i1) smismatch("seven","seventh");
(%o1)                           6

Categories:  Package stringproc

関数: split  
    split (string)  
    split (string, delim)  
    split (string, delim, multiple)

stringのすべてのトークンのリストを返します。 それぞれのトークンはパースされていない文字列です。 splitdelimをデリミタとして使います。 もし delimが与えられないなら、 スペース文字がデフォルトのデリミタです。 multipleはデフォルトで trueのブーリアン変数です。 重複デリミタが 1つとして読まれます。 これは、もしタブが複数スペース文字として保存されているなら、役立ちます。 もしmultiplefalseに設定されるなら、 それぞれのデリミタが有効です。

例:

 
(%i1) split("1.2   2.3   3.4   4.5");
(%o1)                 [1.2, 2.3, 3.4, 4.5]
(%i2) split("first;;third;fourth",";",false);
(%o2)               [first, , third, fourth]

Categories:  Package stringproc

関数: sposition (char, string)

stringの中で charとマッチする最初の文字の位置を返します。 stringの一番目の文字は位置 1にあります。 文字の大小を無視した文字のマッチに関しては, ssearchを参照してください。

Categories:  Package stringproc

関数: sremove  
    sremove (seq, string)  
    sremove (seq, string, test)  
    sremove (seq, string, test, start)  
    sremove (seq, string, test, start, end)

string同様文字列を返しますが、 seqとマッチする部分文字列すべてなしに返します。 マッチのデフォルトのテスト関数は sequalです。 もし sremoveseqを検索する間文字の大小を無視しなければいけないなら、 テストとして sequalignoreを使ってください。 探索を限定するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

例:

 
(%i1) sremove("n't","I don't like coffee.");
(%o1)                   I do like coffee.
(%i2) sremove ("DO ",%,'sequalignore);
(%o2)                    I like coffee.

Categories:  Package stringproc

関数: sremovefirst  
    sremovefirst (seq, string)  
    sremovefirst (seq, string, test)  
    sremovefirst (seq, string, test, start)  
    sremovefirst (seq, string, test, start, end)

seqとマッチする最初の文字列だけが削除されることを除いて、 sremove同様です。

Categories:  Package stringproc

関数: sreverse (string)

stringの文字すべてが逆順の文字列を返します。

Categories:  Package stringproc

関数: ssearch  
    ssearch (seq, string)  
    ssearch (seq, string, test)  
    ssearch (seq, string, test, start)  
    ssearch (seq, string, test, start, end)

文字列seqとマッチする stringの最初の部分文字列の位置を返します。 マッチのためのデフォルトのテスト関数は sequalです。 もし ssearchが文字の大小を無視しなければいけないなら、 テストとして sequalignoreを使ってください。 検索を限定するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

例:

 
(%i1) ssearch("~s","~{~S ~}~%",'sequalignore);
(%o1)                                  4

Categories:  Package stringproc

関数: ssort  
    ssort (string)  
    ssort (string, test)

test (c, d)false、かつ、 test (d, c)trueであるような 2つの連続する文字 cdがないような順で stringの文字すべてを含む文字列を返します。

ソートのためのデフォルトのテスト関数は clesspです。 テスト関数一式は {clessp, clesspignore, cgreaterp, cgreaterpignore, cequal, cequalignore}です。

例:

 
(%i1) ssort("I don't like Mondays.");
(%o1)                    '.IMaddeiklnnoosty
(%i2) ssort("I don't like Mondays.",'cgreaterpignore);
(%o2)                 ytsoonnMlkIiedda.'

Categories:  Package stringproc

関数: ssubst  
    ssubst (new, old, string)  
    ssubst (new, old, string, test)  
    ssubst (new, old, string, test, start)  
    ssubst (new, old, string, test, start, end)

stringの中の oldにマッチするすべての部分文字列を newで置き換えた文字列を返します。 oldnewは同じ長さである必要はありません。 マッチのためのデフォルトのテスト関数は sequalです。 もし ssubstが oldを検索する間大文字小文字を無視すべきなら、 テストとして sequalignoreを使ってください。 検索を制限するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

例:

 
(%i1) ssubst("like","hate","I hate Thai food. I hate green tea.");
(%o1)          I like Thai food. I like green tea.
(%i2) ssubst("Indian","thai",%,'sequalignore,8,12);
(%o2)         I like Indian food. I like green tea.

Categories:  Package stringproc

関数: ssubstfirst  
    ssubstfirst (new, old, string)  
    ssubstfirst (new, old, string, test)  
    ssubstfirst (new, old, string, test, start)  
    ssubstfirst (new, old, string, test, start, end)

oldとマッチする最初の部分文字列だけを置き換えることを除いて、 substと同様です。

Categories:  Package stringproc

関数: strim (seq,string)

stringの両端から seqに現れるすべての文字を除いた文字列を返します。

例:

 
(%i1) "/* comment */"$
(%i2) strim(" /*",%);
(%o2)                        comment
(%i3) slength(%);
(%o3)                           7

Categories:  Package stringproc

関数: striml (seq, string)

stringの左端だけトリムすることを除いて strimと同様です。

Categories:  Package stringproc

関数: strimr (seq, string)

stringの右端だけトリムすることを除いて strimと同様です。

Categories:  Package stringproc

関数: stringp (obj)

objが文字列なら trueを返します。 例はイントロダクションを参照してください。

関数: substring  
    substring (string, start)  
    substring (string, start, end)

位置 startで始まり位置 endで終わる stringの部分文字列を返します。 位置 endの文字は含まれません。 もし endが与えられないなら、部分文字列は文字列の残りを含みます。 stringの一番目の文字は位置 1にあることに注意してください。

例:

 
(%i1) substring("substring",4);
(%o1)                        string
(%i2) substring(%,4,6);
(%o2)                          in

Categories:  Package stringproc

関数: supcase  
    supcase (string)  
    supcase (string, start)  
    supcase (string, start, end)

stringの位置 startから endまでの小文字を対応する大文字に置き換えた文字列を返します。 もし endが与えられないなら、 startから stringの終わりまでのすべての小文字が置き換えられます。

例:

 
(%i1) supcase("english",1,2);
(%o1)                        English

Categories:  Package stringproc

関数: tokens  
    tokens (string)  
    tokens (string, test)

stringから抽出されたトークンのリストを返します。 トークンは、文字があるテスト関数を満たす部分文字列です。 もしtestを与えないなら、 constituentをデフォルトテストとして使います。 {constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp, characterp, alphanumericp}はテスト関数一式です。 (tokensの LispバージョンはPaul Grahamによって書かれました。 ANSI Common Lisp, 1996, page 67.)

例:

 
(%i1) tokens("24 October 2005");
(%o1)                  [24, October, 2005]
(%i2) tokens("05-10-24",'digitcharp);
(%o2)                     [05, 10, 24]
(%i3) map(parse_string,%);
(%o3)                      [5, 10, 24]

Categories:  Package stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

84.5 Octets and Utilities for Cryptography

関数: base64 (arg)

argの base64表現を文字列として返します。 引数 argは文字列か非負整数かオクテットのリストです。

例:

 
(%i1) base64: base64("foo bar baz");
(%o1)                          Zm9vIGJhciBiYXo=
(%i2) string: base64_decode(base64);
(%o2)                            foo bar baz
(%i3) obase: 16.$
(%i4) integer: base64_decode(base64, 'number);
(%o4)                       666f6f206261722062617a
(%i5) octets: base64_decode(base64, 'list);
(%o5)            [66, 6F, 6F, 20, 62, 61, 72, 20, 62, 61, 7A]
(%i6) ibase: 16.$
(%i7) base64(octets);
(%o7)                          Zm9vIGJhciBiYXo=

もし argがウムラウト(127より大きなオクテット)含むなら、 結果のbase64文字列はプラットフォーム依存であることに注意してください。 しかし、デコードされた文字列はオリジナルと同じになります。

Categories:  Package stringproc

関数: base64_decode  
    base64_decode (base64-string)  
    base64_decode (base64-string, return-type)

デフォルトでは base64_decodebase64-stringを元の文字列にデコードします。

オプション引数 return-typeを与えると base64_decodeは代わりに対応する数やオクテットのリストを返します。 return-typestringnumber, listです。

例: base64を参照してください。

Categories:  Package stringproc

関数: crc24sum  
    crc24sum (octets)  
    crc24sum (octets, return-type)

デフォルトでは crc24sumは オクテットリストの CRC24チェックサムを文字列として返します。

オプション引数 return-typeを与えると crc24sumは代わりに対応する数かオクテットリストを返します。 return-typestringnumber, listです。

例:

 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQEcBAEBAgAGBQJVdCTzAAoJEG/1Mgf2DWAqCSYH/AhVFwhu1D89C3/QFcgVvZTM
wnOYzBUURJAL/cT+IngkLEpp3hEbREcugWp+Tm6aw3R4CdJ7G3FLxExBH/5KnDHi
rBQu+I7+3ySK2hpryQ6Wx5J9uZSa4YmfsNteR8up0zGkaulJeWkS4pjiRM+auWVe
vajlKZCIK52P080DG7Q2dpshh4fgTeNwqCuCiBhQ73t8g1IaLdhDN6EzJVjGIzam
/spqT/sTo6sw8yDOJjvU+Qvn6/mSMjC/YxjhRMaQt9EMrR1AZ4ukBF5uG1S7mXOH
WdiwkSPZ3gnIBhM9SuC076gLWZUNs6NqTeE3UzMjDAFhH3jYk1T7mysCvdtIkms=
=WmeC
-----END PGP SIGNATURE-----
 
(%i1) ibase : obase : 16.$
(%i2) sig64 : sconcat(
 "iQEcBAEBAgAGBQJVdCTzAAoJEG/1Mgf2DWAqCSYH/AhVFwhu1D89C3/QFcgVvZTM",
 "wnOYzBUURJAL/cT+IngkLEpp3hEbREcugWp+Tm6aw3R4CdJ7G3FLxExBH/5KnDHi",
 "rBQu+I7+3ySK2hpryQ6Wx5J9uZSa4YmfsNteR8up0zGkaulJeWkS4pjiRM+auWVe",
 "vajlKZCIK52P080DG7Q2dpshh4fgTeNwqCuCiBhQ73t8g1IaLdhDN6EzJVjGIzam",
 "/spqT/sTo6sw8yDOJjvU+Qvn6/mSMjC/YxjhRMaQt9EMrR1AZ4ukBF5uG1S7mXOH",
 "WdiwkSPZ3gnIBhM9SuC076gLWZUNs6NqTeE3UzMjDAFhH3jYk1T7mysCvdtIkms=" )$
(%i3) octets: base64_decode(sig64, 'list)$
(%i4) crc24: crc24sum(octets, 'list);
(%o4)                          [5A, 67, 82]
(%i5) base64(crc24);
(%o5)                              WmeC

Categories:  Package stringproc

関数: md5sum  
    md5sum (arg)  
    md5sum (arg, return-type)

文字列か非負整数かオクテットのリストの MD5チェックサムを返します。 デフォルトの戻り値は32ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると md5sumは代わりに対応する数かオクテットリストを返します。 return-typestringnumber, listです。

例:

 
(%i1) ibase: obase: 16.$
(%i2) msg: "foo bar baz"$
(%i3) string: md5sum(msg);
(%o3)                  ab07acbb1e496801937adfa772424bf7
(%i4) integer: md5sum(msg, 'number);
(%o4)                 0ab07acbb1e496801937adfa772424bf7
(%i5) octets: md5sum(msg, 'list);
(%o5)        [0AB,7,0AC,0BB,1E,49,68,1,93,7A,0DF,0A7,72,42,4B,0F7]
(%i6) sdowncase( printf(false, "~{~2,'0x~^:~}", octets) );
(%o6)           ab:07:ac:bb:1e:49:68:01:93:7a:df:a7:72:42:4b:f7

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 MD5チェックサムはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc

関数: mgf1_sha1  
    mgf1_sha1 (seed, len)  
    mgf1_sha1 (seed, len, return-type)

可変長の擬似乱数を返します。 デフォルトでは戻り値は lenオクテットの長さの数字です。

オプション引数 return-typeを使って mgf1_sha1は代わりに lenオクテットの対応するリストを返すことができます。 return-typenumberlistです。

戻り値の計算は RFC 3447 appendix B.2.1 MGF1に記述されています。 SHA1はハッシュ関数として使われます。 すなわち、計算された数字のランダム度は SHA1ハッシュのランダム度に拠ります。

例:

 
(%i1) ibase: obase: 16.$
(%i2) number: mgf1_sha1(4711., 8);
(%o2)                        0e0252e5a2a42fea1
(%i3) octets: mgf1_sha1(4711., 8, 'list);
(%o3)                  [0E0,25,2E,5A,2A,42,0FE,0A1]

Categories:  Package stringproc

関数: number_to_octets (number)

numberのオクテット表現をオクテットのリストとして返します。 numberは非負整数でなければいけません。

例:

 
(%i1) ibase : obase : 16.$
(%i2) octets: [0ca,0fe,0ba,0be]$
(%i3) number: octets_to_number(octets);
(%o3)                            0cafebabe
(%i4) number_to_octets(number);
(%o4)                      [0CA, 0FE, 0BA, 0BE]

Categories:  Package stringproc

関数: octets_to_number (octets)

octetsのリストの中のオクテットを連結し、数を返します。

例: number_to_octetsを参照してください。

Categories:  Package stringproc

関数: octets_to_oid (octets)

octetsのリストからオブジェクト識別子(OID)を計算します。

例: RSA encryption OID

 
(%i1) ibase : obase : 16.$
(%i2) oid: octets_to_oid([2A,86,48,86,0F7,0D,1,1,1]);
(%o2)                      1.2.840.113549.1.1.1
(%i3) oid_to_octets(oid);
(%o3)               [2A, 86, 48, 86, 0F7, 0D, 1, 1, 1]

Categories:  Package stringproc

関数: octets_to_string  
    octets_to_string (octets)  
    octets_to_string (octets, encoding)

現在のシステムのデフォルトに従って octetsのリストを文字列にデコードします。 非US-ASCII文字に対応するオクテットをデコードする時、 結果はプラットフォームやアプリケーション、背後のLispに依存します。

例: システムデフォルトを使う (GCLでコンパイルされた Maxima。 それはフォーマット定義を使わず、 単にGNU/Linux端末がエンコードした UTF-8オクテットを渡します)

 
(%i1) octets: string_to_octets("abc");
(%o1)                            [61, 62, 63]
(%i2) octets_to_string(octets);
(%o2)                                 abc
(%i3) ibase: obase: 16.$
(%i4) unicode(20AC);
(%o4)                                  €
(%i5) octets: string_to_octets(%);
(%o5)                           [0E2, 82, 0AC]
(%i6) octets_to_string(octets);
(%o6)                                  €
(%i7) utf8_to_unicode(octets);
(%o7)                                20AC

Lispリーダの外部フォーマットが UTF-8に等しい場合、 オプション引数 encodingで オクテットを文字列に変換するエンコーディングを設定できます。 もし必要なら 外部フォーマットの変更に関してadjust_external_formatを参照してください。

サポートするエンコーディングのいくつかの名前 (もっと知るには対応する Lispマニュアルを参照してください):
CCL, CLISP, SBCL: utf-8, ucs-2be, ucs-4be, iso-8859-1, cp1252, cp850
CMUCL: utf-8, utf-16-be, utf-32-be, iso8859-1, cp1252
ECL: utf-8, ucs-2be, ucs-4be, iso-8859-1, windows-cp1252, dos-cp850

例 (続き): オプションのエンコーディング引数を使う (GNU/Linux端末, SBCLでコンパイルされた Maxima).

 
(%i8) string_to_octets("€", "ucs-2be");
(%o8)                              [20, 0AC]

Categories:  Package stringproc

関数: oid_to_octets (oid-string)

オブジェクト識別子(OID)を octetsのリストに変換します。

例: octets_to_oidを参照してください。

Categories:  Package stringproc

関数: sha1sum  
    sha1sum (arg)  
    sha1sum (arg, return-type)

文字列か非負整数かオクテットのリストの SHA1フィンガープリントを返します。 デフォルトの戻り値は40ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると sha1sumは代わりに対応する数かオクテットのリストを返します。 return-typestringnumber, listです。

例:

 
(%i1) ibase: obase: 16.$
(%i2) msg: "foo bar baz"$
(%i3) string: sha1sum(msg);
(%o3)              c7567e8b39e2428e38bf9c9226ac68de4c67dc39
(%i4) integer: sha1sum(msg, 'number);
(%o4)             0c7567e8b39e2428e38bf9c9226ac68de4c67dc39
(%i5) octets: sha1sum(msg, 'list);
(%o5)  [0C7,56,7E,8B,39,0E2,42,8E,38,0BF,9C,92,26,0AC,68,0DE,4C,67,0DC,39]
(%i6) sdowncase( printf(false, "~{~2,'0x~^:~}", octets) );
(%o6)     c7:56:7e:8b:39:e2:42:8e:38:bf:9c:92:26:ac:68:de:4c:67:dc:39

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 SHA1フィンガープリントはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc

関数: sha256sum  
    sha256sum (arg)  
    sha256sum (arg, return-type)

文字列か非負整数かオクテットのリストの SHA256フィンガープリントを返します。 デフォルトの戻り値は64ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると sha256sumは代わりに対応する数かオクテットのリストを返します。 (sha1sumを参照してください)

例:

 
(%i1) string: sha256sum("foo bar baz");
(%o1)  dbd318c1c462aee872f41109a4dfd3048871a03dedd0fe0e757ced57dad6f2d7

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 SHA256フィンガープリントはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc

関数: string_to_octets  
    string_to_octets (string)  
    string_to_octets (string, encoding)

現在のシステムのデフォルトに従って stringをオクテットのリストにエンコードします。 非US-ASCII文字を含む文字列をエンコードする時、 結果はプラットフォームやアプリケーション、背後の Lispに依存します。

Lispリーダの外部フォーマットが UTF-8に等しい場合、 オプション引数 encodingで オクテットを文字列に変換するエンコーディングを設定できます。 もし必要なら 外部フォーマットの変更に関してadjust_external_formatを参照してください。

例やより詳しい情報は octets_to_stringを参照してください。

Categories:  Package stringproc


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

85. to_poly_solve


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

85.1 Functions and Variables for to_poly_solve

パッケージ to_polyto_poly_solveは実験的なものです; これらのパッケージの関数の仕様は変更の可能性があり、 これらのパッケージの関数のいくつかは他の Maxima関数にマージされるかもしれません。

Barton Willis (University of Nebraska at Kearneyの数学科の教授)が to_polyto_poly_solveパッケージと これらのパッケージのための英語のユーザードキュメンテーションを書きました。

Operator: %and

演算子 %andは整理化(simplifying)非短絡論理積です。 Maximaは %and式を trueか falseか論理的に同値ですが整理された式に整理します。 演算子 %andは結合的で可換でべき等的です。 そして、 %andが名詞形を返す時、 %andの引数は非冗長なソートされたリストを形成します; 例えば、

 
(%i1) a %and (a %and b);
(%o1)                       a %and b

もし積の引数の1つが 明示的にもう一つの引数の否定なら、 %andは falseを返します:

 
(%i2) a %and (not a);
(%o2)                         false

積のいずれかのメンバーが falseなら、 たとえ他のメンバーが明白に非ブーリアンでも積は falseに整理されます; 例えば、

 
(%i3) 42 %and false;
(%o3)                         false

inequation(すなわち、不等もしくは等式)の %and式の任意の引数は Fourier消去パッケージを使って整理されます。 Fourier消去整理器は すべてでないですがいくつかの非線形 inequationを線形 inequationに変換するプリプロセッサを持ちます; 例えば、 Fourier消去コードは abs(x) + 1 > 0を trueに整理します。だから、

 
(%i4) (x < 1) %and (abs(x) + 1 > 0);
(%o4)                         x < 1

注釈

制限%andはinequationを 大域的にではなく局所的に整理します。 これは以下のような積は falseに整理されないことを意味します。

 
(%i5) (x < 1) %and (x > 1);
(%o5)                 (x > 1) %and (x < 1)

また、 Fourier消去コードは事実データベースを無視します

 
(%i6) assume(x > 5);
(%o6)                        [x > 5]
(%i7) (x > 1) %and (x > 2);
(%o7)                 (x > 1) %and (x > 2)

最終的に、同値の線形 inequationに容易に変換されない非線形 inequationは整理されません。

%or上に %andを分配するためのサポートはありません; %and上に論理否定を分配するサポートもありません。

利用のためには `load(to_poly_solve)'

関連関数 %or, %if, and, or, not

状況 演算子 %andは実験的です; この関数の仕様は変更の可能性があり、 その機能は他の Maxima関数にマージされるかもしれません。

演算子: %if (bool, a, b)

演算子 %ifは整理化条件文です。 条件 boolはブーリアン値でなければいけません。 条件が trueの時、二番目の引数を返します; 条件が falseの時、三番目の引数を返します; その他の場合、名詞形を返します。

Maxima inequations (不等式か等式)はブーリアン値ではありません; 例えば、 Maximaは 5 < 6を trueに整理 しませんし、 5 = 6を falseに整理しません; しかしながら、 %if文への条件の文脈では、 Maximaは 自動的に inequationの真値を決定しようとします。 例:

 
(%i1) f : %if(x # 1, 2, 8);
(%o1)                 %if(x - 1 # 0, 2, 8)
(%i2) [subst(x = -1,f), subst(x=1,f)];
(%o2)                        [2, 8]

もし条件が inequationを含むなら、 Maximaは Fourier消去パッケージを使ってそれを整理します。

注釈

 
(%i3) %if(42,1,2);
(%o3)                     %if(42, 1, 2)

制限 Fourier消去コードは 同値の線形 inequationに容易に変換可能な非線形 inequationだけを 整理します。

利用には: `load(to_poly_solve)'

状況: 演算子 %ifは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

演算子: %or

演算子 %orは整理化非短絡論理和です。 Maximaは %or式を trueか falseか論理的に同値ですが整理された式に整理します。 演算子 %orは結合的で可換でべき等です。 そして %orが名詞形を返す時、 %orの引数は非冗長なソートされたリストを形成します; 例えば、

 
(%i1) a %or (a %or b);
(%o1)                        a %or b

もし和のメンバーの1つが明示的に他のメンバーの否定なら、 %orは trueを返します:

 
(%i2) a %or (not a);
(%o2)                         true

もし和の任意のメンバーが trueなら、 たとえ和の他のメンバーが明白に非ブーリアンでも和は trueに整理されます。 例えば

 
(%i3) 42 %or true;
(%o3)                         true

inequation(不等式か等式)である %or式の任意の引数は Fourier消去パッケージを使って整理されます。 Fourier消去コードは abs(x) + 1 > 0を trueに整理します。 なので、

 
(%i4) (x < 1) %or (abs(x) + 1 > 0);
(%o4)                         true

注釈

制限%orはinequationを 大域的にではなく、局所的に整理します。 これは以下のような和は trueに整理されないことを意味します。

 
(%i1) (x < 1) %or (x >= 1);
(%o1) (x > 1) %or (x >= 1)

更に Fourier消去コードは事実データベースを無視します:

 
(%i2) assume(x > 5);
(%o2)                        [x > 5]
(%i3) (x > 1) %and (x > 2);
(%o3)                 (x > 1) %and (x > 2)

最終的に、同値の線形 inequationに容易に変換されない非線形 inequationは整理されません。

両方とも falseである項を探すアルゴリズムは弱いものです; また、%and上に %orを分配するためのサポートはありません; %or上に論理否定を分配するサポートもありません。

利用のためには `load(to_poly_solve)'

関連関数 %or, %if, and, or, not

状況 演算子 %orは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: complex_number_p (x)

もし引数が a + %i * b, a, %i b, %iのいずれかなら、 述語論理 complex_number_pは trueを返します。 ここで abは有理数か(多倍長浮動小数点数を含む)浮動小数点数です; 他のすべての入力に対して、 complex_number_pは falseを返します; 例えば

 
(%i1) map('complex_number_p,[2/3, 2 + 1.5 * %i, %i]);
(%o1)                  [true, true, true]
(%i2) complex_number_p((2+%i)/(5-%i));
(%o2)                         false
(%i3) complex_number_p(cos(5 - 2 * %i));
(%o3)                         false

関連関数 isreal_p

利用するには `load(to_poly_solve)'

状況 関数 complex_number_pは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: compose_functions (l)

関数コール compose_functions(l)は リスト lの中の関数の合成をラムダ形を返します。 関数はから へ適用されます; 例えば

 
(%i1) compose_functions([cos, exp]);
                                        %g151
(%o1)             lambda([%g151], cos(%e     ))
(%i2) %(x);
                                  x
(%o2)                       cos(%e )

関数リストが空のとき、恒等関数を返します:

 
(%i3) compose_functions([]);
(%o3)                lambda([%g152], %g152)
(%i4)  %(x);
(%o4)                           x

注釈

 
(%i5) compose_functions([a < b]);

funmake: first argument must be a symbol, subscripted symbol,
string, or lambda expression; found: a < b
#0: compose_functions(l=[a < b])(to_poly_solve.mac line 40)
 -- an error. To debug this try: debugmode(true);

利用するには `load(to_poly_solve)'

状況 関数 compose_functionsは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: dfloat (x)

関数 dfloatfloatに似ていますが、 floatが IEEE 倍精度浮動小数点数に評価するのを失敗した時、 関数 dfloatrectformを適用します; 例えば

 
(%i1) float(4.5^(1 + %i));
                               %i + 1
(%o1)                       4.5
(%i2) dfloat(4.5^(1 + %i));
(%o2)        4.48998802962884 %i + .3000124893895671

注釈

関連関数 float, bfloat

利用するには `load(to_poly_solve)'

状況 関数 dfloatは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: elim (l, x)

関数 elimは 集合もしくはリスト l内の等式から 集合もしくはリスト x内の変数を消去します。 xのメンバーそれぞれはシンボルでなければいけません; lのメンバーは等式か零に等しいと仮定される式であり得ます。

関数 elimは2つのリストのリストを返します; 一番目は変数が消去された式のリストです; 二番目はピボットのリストです; 二番目のリストは elimが変数を消去するのに使った式のリストです。

以下は線形方程式を消去する例です:

 
(%i1) elim(set(x + y + z = 1, x - y  - z = 8, x - z = 1),
           set(x,y));
(%o1)            [[2 z - 7], [y + 7, z - x + 1]]

xyの消去は一つの等式 2 z - 7 = 0をもたらします; 等式 y + 7 = 0z - z + 1 = 1がピボットとして使われました。 これらの等式から3つの変数すべての消去は、線形系を三角化します:

 
(%i2) elim(set(x + y + z = 1, x - y  - z = 8, x - z = 1),
           set(x,y,z));
(%o2)           [[], [2 z - 7, y + 7, z - x + 1]]

もちろん、等式は線形である必要はありません:

 
(%i3) elim(set(x^2 - 2 * y^3 = 1,  x - y = 5), [x,y]);
                     3    2
(%o3)       [[], [2 y  - y  - 10 y - 24, y - x + 5]]

ユーザーは変数が消去される順序を制御しません。 確かに、アルゴリズムは最良のピボットと最良の消去順序を選ぼうとする発見的方法を使います。

注釈

関連関数 elim_allbut, eliminate_using, eliminate

オプション変数 resultant

利用するには `load(to_poly)'

状況 関数 elimは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: elim_allbut (l, x)

この関数は、 等式のリスト l内のリスト x内の変数を 除いて変数すべてを消去することを除いて、 elimに似ています。

 
(%i1) elim_allbut([x+y = 1, x - 5*y = 1],[]);
(%o1)                 [[], [y, y + x - 1]]
(%i2) elim_allbut([x+y = 1, x - 5*y = 1],[x]);
(%o2)                [[x - 1], [y + x - 1]]

利用するには `load(to_poly)'

オプション変数 resultant

関連関数 elim, eliminate_using, eliminate

状況 関数 elim_allbutは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: eliminate_using (l, e, x)

eをピボットとして使って、 lの中の等式のリストか集合からシンボル xを消去します。 関数 eliminate_usingは集合を返します。

 
(%i1) eq : [x^2 - y^2 - z^3 , x*y - z^2 - 5, x - y + z];
               3    2    2     2
(%o1)      [- z  - y  + x , - z  + x y - 5, z - y + x]
(%i2) eliminate_using(eq,first(eq),z);
        3              2      2      3    2
(%o2) {y  + (1 - 3 x) y  + 3 x  y - x  - x ,
                        4    3  3       2  2             4
                       y  - x  y  + 13 x  y  - 75 x y + x  + 125}
(%i3) eliminate_using(eq,second(eq),z);
        2            2       4    3  3       2  2             4
(%o3) {y  - 3 x y + x  + 5, y  - x  y  + 13 x  y  - 75 x y + x
                                                           + 125}
(%i4) eliminate_using(eq, third(eq),z);
        2            2       3              2      2      3    2
(%o4) {y  - 3 x y + x  + 5, y  + (1 - 3 x) y  + 3 x  y - x  - x }

オプション変数 resultant

関連関数 elim, eliminate, elim_allbut

利用するには `load(to_poly)'

状況 関数 elimimate_usingは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: fourier_elim ([eq1, eq2, …], [var1, var, …])

Fourier消去は Gauss消去の線形 inequation(等式か不等式)に関する類似物です。 関数コール fourier_elim([eq1, eq2, ...], [var1, var2, ...])は 線形 inequationsのリスト [eq1, eq2, ...]上の変数 [var1, var2, ...]に関する Fourier消去です; 例えば

 
(%i1) fourier_elim([y-x < 5, x - y < 7, 10 < y],[x,y]);
(%o1)            [y - 5 < x, x < y + 7, 10 < y]
(%i2) fourier_elim([y-x < 5, x - y < 7, 10 < y],[y,x]);
(%o2)        [max(10, x - 7) < y, y < x + 5, 5 < x]

最初に xを、次に yを消去することは xの下限と上限―yに依存します―をもたらし、 そして yの下限と上限ーそれらは数ですーをもたらします。 他の順序での消去は x依存の yの下限と上限、 そして xの数値的下限と上限を与えます。

必要な時、 fourier_elimは inequationのリストの論理和を返します:

 
(%i3) fourier_elim([x # 6],[x]);
(%o3)                  [x < 6] or [6 < x]

解集合が空の時、 fourier_elimemptysetを返し、 解集合が実数すべての時、 fourier_elimuniversalsetを返します; 例えば

 
(%i4) fourier_elim([x < 1, x > 1],[x]);
(%o4)                       emptyset
(%i5) fourier_elim([minf < x, x < inf],[x]);
(%o5)                     universalset

非線形 inequationに対して、 fourier_elimは(幾分)整理された inequationsのリストを返します:

 
(%i6) fourier_elim([x^3 - 1 > 0],[x]);
               2                             2
(%o6) [1 < x, x  + x + 1 > 0] or [x < 1, - (x  + x + 1) > 0]
(%i7) fourier_elim([cos(x) < 1/2],[x]);
(%o7)                  [1 - 2 cos(x) > 0]

inequationのリストの代わりに、 fourier_elimの一番目の引数は論理和か論理積であるかもしれません:

 
(%i8) fourier_elim((x + y < 5) and (x - y >8),[x,y]);
                                              3
(%o8)            [y + 8 < x, x < 5 - y, y < - -]
                                              2
(%i9) fourier_elim(((x + y < 5) and x < 1) or  (x - y >8),[x,y]);
(%o9)          [y + 8 < x] or [x < min(1, 5 - y)]

関数 fourier_elimは inequation演算子 <, <=, >, >=, #, =をサポートします。

Fourier消去コードは 絶対値や最小、最大関数を含むいくつかの非線形 inequationを 線形 inequationに変換するプリプロセッサを持ちます. 加えて、プリプロセッサは線形項の積か商であるいくつかの式を扱います:

 
(%i10) fourier_elim([max(x,y) > 6, x # 8, abs(y-1) > 12],[x,y]);
(%o10) [6 < x, x < 8, y < - 11] or [8 < x, y < - 11]
 or [x < 8, 13 < y] or [x = y, 13 < y] or [8 < x, x < y, 13 < y]
 or [y < x, 13 < y]
(%i11) fourier_elim([(x+6)/(x-9) <= 6],[x]);
(%o11)           [x = 12] or [12 < x] or [x < 9]
(%i12) fourier_elim([x^2 - 1 # 0],[x]);
(%o12)      [- 1 < x, x < 1] or [1 < x] or [x < - 1]

利用するには `load(fourier_elim)'

関数: isreal_p (e)

述語論理 isreal_pは、 Maximaが eが実数線全体上で実数値であることを 決められる時 trueを返します; Maximaが実数線の空でないある部分集合上で eが実数値でないことを決められる時 falseを返します; 他の場合、名詞形を返します。

 
(%i1) map('isreal_p, [-1, 0, %i, %pi]);
(%o1)               [true, true, false, true]

Maxima変数は実と仮定されます; たとえば

 
(%i2) isreal_p(x);
(%o2)                         true

関数 isreal_pは事実データベースを検査します:

 
(%i3) declare(z,complex)$

(%i4) isreal_p(z);
(%o4)                      isreal_p(z)

制限 頻繁すぎるほど isreal_pは falseを返すことができる時に名詞形を返します; 対数函数は実数線全体で実数値ではありません。 だから isreal_p(log(x))は falseを返すべきです; しかしながら

 
(%i5) isreal_p(log(x));
(%o5)                   isreal_p(log(x))

利用するには `load(to_poly_solve)'

関連関数 complex_number_p

状況 関数 isreal_pは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: new_variable (type)

%[z,n,r,c,g]kという形のユニークなシンボルを返します。 ここで kは整数です typeに許される値は integer, natural_number, real, natural_number, generalです。 (自然数(natural number)は 非負整数を意味します; なので零は自然数です 自然数の定義のすべてではありませんがいくつかは零を除外します。)

typeが許される値の1つでない時、 typegeneralにデフォルト設定されます。 整数、自然数、複素数に対して、 Maximaは自動的にこの情報を事実データベースに追加します。

 
(%i1) map('new_variable,
          ['integer, 'natural_number, 'real, 'complex, 'general]);
(%o1)          [%z144, %n145, %r146, %c147, %g148]
(%i2) nicedummies(%);
(%o2)               [%z0, %n0, %r0, %c0, %g0]
(%i3) featurep(%z0, 'integer);
(%o3)                         true
(%i4) featurep(%n0, 'integer);
(%o4)                         true
(%i5) is(%n0 >= 0);
(%o5)                         true
(%i6) featurep(%c0, 'complex);
(%o6)                         true

注釈 一般に、new_variableの引数はクォートすべきです。 クォートは以下に似たエラーを防ぎます。

 
(%i7) integer : 12$

(%i8) new_variable(integer);
(%o8)                         %g149
(%i9) new_variable('integer);
(%o9)                         %z150

関連関数 nicedummies

利用するには `load(to_poly_solve)'

状況 関数 new_variableは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: nicedummies

関数 nicedummiesnew_variableが導入した式の中の変数を零から再インデックスします;

 
(%i1) new_variable('integer) + 52 * new_variable('integer);
(%o1)                   52 %z136 + %z135
(%i2) new_variable('integer) - new_variable('integer);
(%o2)                     %z137 - %z138
(%i3) nicedummies(%);
(%o3)                       %z0 - %z1

関連関数 new_variable

利用するには `load(to_poly_solve)'

状況 関数 nicedummiesは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: parg (x)

関数 pargは複素偏角関数 cargの整理化バージョンです; 例えば

 
(%i1) map('parg,[1,1+%i,%i, -1 + %i, -1]);
                        %pi  %pi  3 %pi
(%o1)               [0, ---, ---, -----, %pi]
                         4    2     4

一般に非定数入力に対して pargは名詞形を返します;例えば

 
(%i2) parg(x + %i * sqrt(x));
(%o2)                 parg(x + %i sqrt(x))

signを使って入力が正の実数か負の実数か決めることができる時 pargは非定数入力に対して非名詞形を返します。 以下は2つの例です:

 
(%i3) parg(abs(x));
(%o3) 0
(%i4) parg(-x^2-1);
(%o4)                          %pi

注釈 sign関数は 複素数と宣言された変数 (declare(x,complex))を ほとんど無視します; 複素数と宣言された変数に対して、 pargは間違った値を返す可能性があります; 例えば

 
(%i1) declare(x,complex)$

(%i2) parg(x^2 + 1);
(%o2) 0

Related function carg, isreal_p

利用するには `load(to_poly_solve)'

状況 関数 pargは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: real_imagpart_to_conjugate (e)

関数 real_imagpart_to_conjugaterealpartimagpartをすべて conjugateを含む代数的に同値な式に置き換えます。

 
(%i1) declare(x, complex)$

(%i2) real_imagpart_to_conjugate(realpart(x) +  imagpart(x) = 3);
          conjugate(x) + x   %i (x - conjugate(x))
(%o2)     ---------------- - --------------------- = 3
                 2                     2

利用するには `load(to_poly_solve)'

状況 関数 real_imagpart_to_conjugateは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: rectform_log_if_constant (e)

関数 rectform_log_if_constant log(c)の形の項をすべて rectform(log(c))に変換します。 ここで cは宣言された定数式か明示的に宣言された定数です。

 
(%i1) rectform_log_if_constant(log(1-%i) - log(x - %i));
                                 log(2)   %i %pi
(%o1)            - log(x - %i) + ------ - ------
                                   2        4
(%i2) declare(a,constant, b,constant)$

(%i3) rectform_log_if_constant(log(a + %i*b));
                       2    2
                  log(b  + a )
(%o3)             ------------ + %i atan2(b, a)
                       2

利用するには `load(to_poly_solve)'

状況 関数 rectform_log_if_constantは実験的です; 仕様は変更の可能性があり、 機能は他のMaxima関数にマージされるかもしれません。

関数: simp_inequality (e)

関数 simp_inequalityは inequationの論理積と論理和にいくつかの整理を適用します。

制限 関数 simp_inequalityは少なくとも2つの点で制限されます; 第一に整理が局所的です; 例えば

 
(%i1) simp_inequality((x > minf) %and (x < 0));
(%o1) (x>1) %and (x<1)

第二に simp_inequalityは事実データベースを参照しません:

 
(%i2) assume(x > 0)$

(%i3) simp_inequality(x > 0);
(%o3)                         x > 0

利用するには `load(fourier_elim)'

状況 関数 simp_inequalityは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: standardize_inverse_trig (e)

この関数は 恒等式 cot(x) = atan(1/x), acsc(x) = asin(1/x),asec, acoth, acsch asechに関する類似の恒等式を式に適応します。 Abramowitz and Stegun, Eqs. 4.4.6 から 4.4.8までと 4.6.4から 4.6.6までを参照してください。

利用するには `load(to_poly_solve)'

状況 関数 standardize_inverse_trigは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: subst_parallel (l, e)

lが単一の等式か等式のリストの時、それぞれの等式の右辺側を左辺に代入します。 代入は並列に行われます; 例えば

 
(%i1) load(to_poly_solve)$

(%i2) subst_parallel([x=y,y=x], [x,y]);
(%o2)                        [y, x]

これを順にされる代入と比較します:

 
(%i3) subst([x=y,y=x],[x,y]);
(%o3)                        [x, x]

関数 subst_parallelは、 subst_parallelは非アトムの代入を許すことを除いて sublisと似ています; 例えば

 
(%i4) subst_parallel([x^2 = a, y = b], x^2 * y);
(%o4)                          a b
(%i5) sublis([x^2 = a, y = b], x^2 * y);

                                                             2
sublis: left-hand side of equation must be a symbol; found: x
 -- an error. To debug this try: debugmode(true);

subst_parallelが行う代入は文字通りであり意味論的ではありません; なので subst_parallelx * yx^2 * yの部分式であることを認識しません

 
(%i6) subst_parallel([x * y = a], x^2 * y);
                               2
(%o6)                         x  y

関数 subst_parallelは整理の前にすべての代入を完了します。 これは、もし整理が前に行われていたらエラーが起こるような条件式への代入を許します:

 
(%i7) subst_parallel([x = 0], %if(x < 1, 5, log(x)));
(%o7)                           5
(%i8) subst([x = 0], %if(x < 1, 5, log(x)));

log: encountered log(0).
 -- an error. To debug this try: debugmode(true);

関連関数 subst, sublis, ratsubst

利用するには `load(to_poly_solve_extra.lisp)'

状況 関数 subst_parallelは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: to_poly (e, l)

関数 to_polyは等式 eを inequation制約を伴う多項式系に変換しようとします; 制約を満たす多項式系の解は等式 eの解です。 非公式には to_polyは等式 eを多項式化しようとします; 例がわかりやすいかもしれません:

 
(%i1) load(to_poly_solve)$

(%i2) to_poly(sqrt(x) = 3, [x]);
                            2
(%o2) [[%g130 - 3, x = %g130 ],
                      %pi                               %pi
                   [- --- < parg(%g130), parg(%g130) <= ---], []]
                       2                                 2

条件 -%pi/2<parg(%g130),parg(%g130)<=%pi/2%g130が平方根関数の範囲内であることを告げます。 これが trueの時、 sqrt(x) = 3に設定された解は %g130-3,x=%g130^2に設定された解と同じです。

三角式を多項式化するには、非代数的代入の導入が必要です; これらの非代数的代入は to_polyが返す三番目のリスト内で返されます; 例えば

 
(%i3) to_poly(cos(x),[x]);
                2                                 %i x
(%o3)    [[%g131  + 1], [2 %g131 # 0], [%g131 = %e    ]]

数字 1が変数リストのメンバーでない限り定数項は多項式化されません; 例えば

 
(%i4) to_poly(x = sqrt(5),[x]);
(%o4)                [[x - sqrt(5)], [], []]
(%i5) to_poly(x = sqrt(5),[1,x]);
                            2
(%o5) [[x - %g132, 5 = %g132 ],
                      %pi                               %pi
                   [- --- < parg(%g132), parg(%g132) <= ---], []]
                       2                                 2

根の 1つとして sqrt(5) + sqrt(7)を持つ多項式を生成するには、以下のコマンドを使います。

 
(%i6) first(elim_allbut(first(to_poly(x = sqrt(5) + sqrt(7),
                                      [1,x])), [x]));
                          4       2
(%o6)                   [x  - 24 x  + 4]

関連関数 to_poly_solve

利用するには `load(to_poly)'

状況: 関数 to_polyは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

関数: to_poly_solve (e, l, [options])

関数 to_poly_solveは等式 eを変数 lについて解こうとします。 等式 eは単一の式か式の集合もしくはリストでありえます; 同様に lは単一のシンボルかシンボルの集合のリストでありえます; eのメンバーが明示的に等式でない時(例えば x^2 -1)、 ソルバは式は 0に等しいと仮定します。

to_poly_solveの基本戦略は 入力を多項式形に変換し、 多項式系上でalgsysを呼ぶことです。 内部的には、 to_poly_solvealgexactを trueに設定します。 algexactのデフォルト置を変えるには、 'algexact=falseを to_poly_solveの引数リストに追加してください。

to_poly_solveが解集合を決定できる時、解集合のそれぞれのメンバーは %unionオブジェクト内のリストです:

 
(%i1) load(to_poly_solve)$

(%i2) to_poly_solve(x*(x-1) = 0, x);
(%o2)               %union([x = 0], [x = 1])

to_poly_solveが解集合を決定できない%solve名詞形が返されます。(この場合、警告が印字されます。)

 
(%i3) to_poly_solve(x^k + 2* x + 1 = 0, x);

Nonalgebraic argument given to 'to_poly'
unable to solve
                          k
(%o3)            %solve([x  + 2 x + 1 = 0], [x])

%solve名詞形への代入は時々解に帰着します。

 
(%i4) subst(k = 2, %);
(%o4)                   %union([x = - 1])

特に三角等式の場合、ソルバは時々任意整数の導入を必要とします。 これらの任意整数は %zXXXという形を持ちます。 ここで XXXは整数です; 例えば

 
(%i5) to_poly_solve(sin(x) = 0, x);
(%o5)   %union([x = 2 %pi %z33 + %pi], [x = 2 %pi %z35])

これらの変数を零から再インデックスするには nicedummiesを使います:

 
(%i6) nicedummies(%);
(%o6)    %union([x = 2 %pi %z0 + %pi], [x = 2 %pi %z1])

時折、ソルバは %cXXXという形の任意複素数か %rXXXという形の任意実数を導入します。 関数 nicedummiesはこれらの識別子を零から再インデックスします。

解集合は時々 論理積、論理和、含意に関してそれぞれ %andか, %or, %ifを含む様々な論理演算子の整理化バージョンを含みます; 例えば

 
(%i7) sol : to_poly_solve(abs(x) = a, x);
(%o7) %union(%if(isnonnegative_p(a), [x = - a], %union()),
                      %if(isnonnegative_p(a), [x = a], %union()))
(%i8) subst(a = 42, sol);
(%o8)             %union([x = - 42], [x = 42])
(%i9) subst(a = -42, sol);
(%o9)                       %union()

空集合は %union()によって表現されます。

関数 to_poly_solveは有理数や非有理べき、絶対値、三角関数、最小最大を含む等式の (すべてではありませんが)いくつかを解くことができます。 Lambert W 函数を使って解くことができるいくつかの等式も解くことができます; 例:

 
(%i1) load(to_poly_solve)$

(%i2) to_poly_solve(set(max(x,y) = 5, x+y = 2), set(x,y));
(%o2)      %union([x = - 3, y = 5], [x = 5, y = - 3])
(%i3) to_poly_solve(abs(1-abs(1-x)) = 10,x);
(%o3)             %union([x = - 10], [x = 12])
(%i4) to_poly_solve(set(sqrt(x) + sqrt(y) = 5, x + y = 10),
                    set(x,y));
                     3/2               3/2
                    5    %i - 10      5    %i + 10
(%o4) %union([x = - ------------, y = ------------],
                         2                 2
                                3/2                 3/2
                               5    %i + 10        5    %i - 10
                          [x = ------------, y = - ------------])
                                    2                   2
(%i5) to_poly_solve(cos(x) * sin(x) = 1/2,x,
                    'simpfuncs = ['expand, 'nicedummies]);
                                         %pi
(%o5)              %union([x = %pi %z0 + ---])
                                          4
(%i6) to_poly_solve(x^(2*a) + x^a + 1,x);
                                        2 %i %pi %z81
                                        -------------
                                  1/a         a
                  (sqrt(3) %i - 1)    %e
(%o6) %union([x = -----------------------------------],
                                  1/a
                                 2
                                                  2 %i %pi %z83
                                                  -------------
                                            1/a         a
                          (- sqrt(3) %i - 1)    %e
                     [x = -------------------------------------])
                                           1/a
                                          2
(%i7) to_poly_solve(x * exp(x) = a, x);
(%o7)              %union([x = lambert_w(a)])

線形不等式に対して、 to_poly_solveは自動的に Fourier消去を行います:

 
(%i8) to_poly_solve([x + y < 1, x - y >= 8], [x,y]);
                               7
(%o8) %union([x = y + 8, y < - -],
                               2
                                                              7
                                 [y + 8 < x, x < 1 - y, y < - -])
                                                              2

to_poly_solveのオプション引数のそれぞれは等式でなければいけません; 一般にこれらのオプションの順序は問題になりません.

f(a) = f(b)という形の等式を解くために to_poly_solveはハッシュ配列 one_to_one_reduceに記憶されたデータを使います。 割り当て one_to_one_reduce['f,'f] : lambda([a,b], a=b)to_poly_solvef(a) = f(b)の解集合がa=bの解集合に等しいことを告げます; 例えば

 
(%i13) one_to_one_reduce['f,'f] : lambda([a,b], a=b)$

(%i14) to_poly_solve(f(x^2-1) = f(0),x);
(%o14)             %union([x = - 1], [x = 1])

さらに一般的に、割り当て one_to_one_reduce['f,'g] : lambda([a,b], w(a, b) = 0to_poly_solvef(a) = f(b)の解集合が w(a,b) = 0の解集合に等しいことを告げます; 例えば

 
(%i15) one_to_one_reduce['f,'g] : lambda([a,b], a = 1 + b/2)$

(%i16) to_poly_solve(f(x) - g(x),x);
(%o16)                   %union([x = 2])

加えて、f(a) = bという形の等式を解くために関数 to_poly_solveはハッシュ配列 function_inverseに記憶されたデータを使います。 割り当て function_inverse['f] : lambda([s], g(s))to_poly_solvef(x) = bに設定された解が x = g(b)に設定された解に等しいことを知らせます; 2つの例:

 
(%i17) function_inverse['Q] : lambda([s], P(s))$

(%i18) to_poly_solve(Q(x-1) = 2009,x);
(%o18)              %union([x = P(2009) + 1])
(%i19) function_inverse['G] : lambda([s], s+new_variable(integer));
(%o19)       lambda([s], s + new_variable(integer))
(%i20) to_poly_solve(G(x - a) = b,x);
(%o20)             %union([x = b + a + %z125])

注釈

 
(%i1) to_poly_solve([x^2 + y^2 + x * y = 5, x * y = 8],
                    [x^2 + y^2, x * y]);
                                  2    2
(%o1)           %union([x y = 8, y  + x  = - 3])
 
(%i1) declare(x,complex)$

(%i2) to_poly_solve(x + (5 + %i) * conjugate(x) = 1, x);
                                   %i + 21
(%o2)              %union([x = - -----------])
                                 25 %i - 125
(%i3) declare(y,complex)$

(%i4) to_poly_solve(set(conjugate(x) - y = 42 + %i,
                        x + conjugate(y) = 0), set(x,y));
                           %i - 42        %i + 42
(%o4)        %union([x = - -------, y = - -------])
                              2              2

Relevant option variables algexact, resultant, algebraic

関連関数 to_poly

利用するには `load(to_poly_solve)'

状況: 関数 to_poly_solveは実験的です; 仕様は変更の可能性があり、 機能は他の Maxima関数にマージされるかもしれません。

演算子: %union (soln_1, soln_2, soln_3, ...)
演算子: %union ()

%union(soln_1, soln_2, soln_3, ...)は 引数の和集合を表します。 引数のそれぞれはto_poly_solveが決定する解集合です。 %union()は空集合を表します。

多くの場合、 解は等式のリスト [x = ..., y = ..., z = ...] です。 ここで x, y, zは未知数です。 そんな場合、 to_poly_solveは 1つ以上のリストを含む %union式を返します。

解集合は時々、論理積、論理和、含意に関してそれぞれ、 %and%or, %ifを含む論理演算子のいくつかの simplifying versionを含みます。

例:

%union(...)は引数の和集合を表します。 引数のそれぞれはto_poly_solveが決定する解集合です。 多くの場合、解は等式のリストです。

 
(%i1) load ("to_poly_solve") $
(%i2) to_poly_solve ([sqrt(x^2 - y^2), x + y], [x, y]);
(%o2)    %union([x = 0, y = 0], [x = %c13, y = - %c13])

%union()は空集合を表します。

 
(%i1) load ("to_poly_solve") $
(%i2) to_poly_solve (abs(x) = -1, x);
(%o2)                       %union()

解集合は時々、論理演算子のいくつかのsimplifying versionを含みます。 The solution set sometimes involves simplifing versions of various of logical operators.

 
(%i1) load ("to_poly_solve") $
(%i2) sol : to_poly_solve (abs(x) = a, x);
(%o2) %union(%if(isnonnegative_p(a), [x = - a], %union()),
                      %if(isnonnegative_p(a), [x = a], %union()))
(%i3) subst (a = 42, sol);
(%o3)             %union([x = - 42], [x = 42])
(%i4) subst (a = -42, sol);
(%o4)                       %union()


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

86. unit


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

86.1 Introduction to Units

unitパッケージは、ユーザーが任意の単位間での変換したり、 方程式の中の次元を扱うことを可能にします。 このパッケージの機能はオリジナルの Maxima単位パッケージとは根本的に違います - オリジナルは定義の基本的なリストでしたが、このパッケージは、 ユーザーが次元基底毎に最後の答えが翻訳される単位を選ぶことを可能にするような ルールセットを使います。 表示でそれらを混ぜる代わりに単位を分離し、 ユーザーが個々の答えに関連付けられた単位を容易に識別することを可能にします。 演繹された単位に整理する間、巧みな制御を供給することはもちろん、 ユーザーが式を基本的な基底単位に整理することを可能にします。 次元解析が可能で、変換と整理オプションを管理するために様々なツールが利用可能です。 カスタマイズ可能な自動変換に加えて、 unitsはこれまでの手動変換オプションも提供します。

注意 - 単位変換が正確でない時、 Maximaは分数に帰着する近似を行います。 これは単位を整理するのに使われる手法の結果です。 このタイプの代入を警告するメッセージは、 この状況はしばしば起こり、警告が出力を埋め尽くすので、 (通常オンですが)単位の場合デフォルトでディセーブルにされています。 (単位変換の後、 ratprintの現行の状態を復元します。 なので、他の点では、その設定のユーザー変更は保持されます。) もしユーザーが単位に関するこの情報を必要とするなら、 単位変換プロセスからの警告の印字を再アクティベートするために unitverbose:onを設定できます。

unitは Maximaに、share/contrib/unitディレクトリに含まれます。 通常の Maximaのパッケージローディング慣例に従います:

 
(%i1) load("unit")$
*******************************************************************
*                       Units version 0.50                        *
*          Definitions based on the NIST Reference on             *
*              Constants, Units, and Uncertainty                  *
*       Conversion factors from various sources including         *
*                   NIST and the GNU units package                *
*******************************************************************

Redefining necessary functions...
WARNING: DEFUN/DEFMACRO: redefining function TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
Initializing unit arrays...
Done.

WARNINGメッセージが予想されますが、心配の原因ではありません - それらは unitパッケージが本来の Maximaで既に定義されている関数を再定義していることを示しています。 これは単位を適切には使うために必要です。 もし他のパッケージがこれらの関数に他の変更を加えたなら それらの変更はこのロードプロセスによって上書きされることにユーザーは気づくべきです。

unit.macファイルは、パッケージに必要な lisp関数を含む lispファイルunit-functions.lispもロードします。

Clifford Yappが主作者です。 彼は、 Nebraska大学Kearney校(UNK)のBarton Willis, Robert Dodier, そして Maximaメーリングリストの他の大胆不敵な人々から 価値ある援助を受けました。

たぶん多くのバグがあります。知らせてください。 floatnumerは期待の動作をしません。

TODO : 次元機能、温度の扱い、略語表示、仲間。単位を含む量の足し算の例を示す。

Categories:  Physical units · Share packages · Package unit


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

86.2 Functions and Variables for Units

関数: setunits (list)

デフォルトでは、 unitパッケージは 組み立てられた次元はどんなものでも使いませんが、 MKS単位を使ってすべての単位を 7つの基本的な次元に変換します。

 
(%i2) N;
                                     kg m
(%o2)                                ----
                                       2
                                      s
(%i3) dyn;
                                   1      kg m
(%o3)                           (------) (----)
                                 100000     2
                                           s
(%i4) g;
                                    1
(%o4)                             (----) (kg)
                                   1000
(%i5) centigram*inch/minutes^2;
                                  127        kg m
(%o5)                       (-------------) (----)
                             1800000000000     2
                                              s

いくつかの場合、これは望みの振る舞いです。 もしユーザーが他の単位を使いたいなら、これは setunitsコマンドで達成されます:

 
(%i6) setunits([centigram,inch,minute]);
(%o6)                                done
(%i7) N;
                            1800000000000   %in cg
(%o7)                      (-------------) (------)
                                 127            2
                                            %min
(%i8) dyn;
                               18000000   %in cg
(%o8)                         (--------) (------)
                                 127          2
                                          %min
(%i9) g;
(%o9)                             (100) (cg)
(%i10) centigram*inch/minutes^2;
                                    %in cg
(%o10)                              ------
                                        2
                                    %min

単位の設定は実に柔軟性があります。 例えば、もしキログラム、メータ、秒に、それらの次元のデフォルトとして戻りたいなら、 以下のようにできます:

 
(%i11) setunits([kg,m,s]);
(%o11)                               done
(%i12) centigram*inch/minutes^2;
                                  127        kg m
(%o12)                      (-------------) (----)
                             1800000000000     2
                                              s

組立単位もこのコマンドで扱います:

 
(%i17) setunits(N);
(%o17)                               done
(%i18) N;
(%o18)                                 N
(%i19) dyn;
                                    1
(%o19)                           (------) (N)
                                  100000
(%i20) kg*m/s^2;
(%o20)                                 N
(%i21) centigram*inch/minutes^2;
                                    127
(%o21)                        (-------------) (N)
                               1800000000000

unitパッケージは質量、長さ、力として二乗された逆時間の非 MKS組み合わせを認識し、それを Newtonのものに変換したことに注目してください。 これは一般に Maximaがどのように働くかを示します。 例えば、もし Newtonのものよりダインを好むなら、単に以下をします:

 
(%i22) setunits(dyn);
(%o22)                               done
(%i23) kg*m/s^2;
(%o23)                          (100000) (dyn)
(%i24) centigram*inch/minutes^2;
                                  127
(%o24)                         (--------) (dyn)
                                18000000

任意の力に整理することを中断するには、 uforgetコマンドを使います:

 
(%i26) uforget(dyn);
(%o26)                               false
(%i27) kg*m/s^2;
                                     kg m
(%o27)                               ----
                                       2
                                      s
(%i28) centigram*inch/minutes^2;
                                  127        kg m
(%o28)                      (-------------) (----)
                             1800000000000     2
                                              s

これは、 uforget(N)uforget(%force)を使っても同じように機能したでしょう。

uforgetも参照してください。 この関数を使うには最初に load("unit")と書いてください。

Categories:  Package unit

関数: uforget (list)

デフォルトでは、 unitパッケージは、 NKS単位を使って単位すべてを 7つの基本次元に変換します。 この振る舞いは setunitsコマンドを使って変えることができます。 その後、ユーザーは、 uforgetコマンドを使って, 特定の次元に関してデフォルトの振る舞いに戻すことができます:

 
(%i13) setunits([centigram,inch,minute]);
(%o13)                               done
(%i14) centigram*inch/minutes^2;
                                    %in cg
(%o14)                              ------
                                        2
                                    %min
(%i15) uforget([cg,%in,%min]);
(%o15)                      [false, false, false]
(%i16) centigram*inch/minutes^2;
                                  127        kg m
(%o16)                      (-------------) (----)
                             1800000000000     2
                                              s

uforgetは単位ではなく次元上で働きます。 だから、特定の次元の任意の単位は機能します。 次元それ自身も合法な引数です。

setunitsも参照してください。 この関数を使うには最初に load("unit")と書いてください。

Categories:  Package unit

関数: convert (expr, list)

グローバル環境をリセットすることがやりすぎの時、 convertコマンドがあります。 これは 1回変換を許します。 変換に使うのに、 1つの引数か単位のリストを受け付けることができます。 変換演算がされた時、 望みの結果が再変換されるのを避けるために正常なグローバル評価系は迂回されます。 結果として、もしこの振る舞いを制御しているグローバル環境 (ratprint)がtrueなら、 不正確な計算に対して "rat"警告が見られるでしょう。 これはグローバル変換の精度の抜き取り検査に役に立ちます。 別の特長は、たとえグローバル環境が組立次元に整理するように設定されても convertはユーザーに基本次元変換を許すことです。

 
(%i2) kg*m/s^2;
                                     kg m
(%o2)                                ----
                                       2
                                      s
(%i3) convert(kg*m/s^2,[g,km,s]);
                                     g km
(%o3)                                ----
                                       2
                                      s
(%i4) convert(kg*m/s^2,[g,inch,minute]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                              18000000000   %in g
(%o4)                        (-----------) (-----)
                                  127           2
                                            %min
(%i5) convert(kg*m/s^2,[N]);
(%o5)                                  N
(%i6) convert(kg*m^2/s^2,[N]);
(%o6)                                 m N
(%i7) setunits([N,J]);
(%o7)                                done
(%i8) convert(kg*m^2/s^2,[N]);
(%o8)                                 m N
(%i9) convert(kg*m^2/s^2,[N,inch]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                                 5000
(%o9)                           (----) (%in N)
                                 127
(%i10) convert(kg*m^2/s^2,[J]);
(%o10)                                 J
(%i11) kg*m^2/s^2;
(%o11)                                 J
(%i12) setunits([g,inch,s]);
(%o12)                               done
(%i13) kg*m/s^2;
(%o13)                                 N
(%i14) uforget(N);
(%o14)                               false
(%i15) kg*m/s^2;
                                5000000   %in g
(%o15)                         (-------) (-----)
                                  127       2
                                           s
(%i16) convert(kg*m/s^2,[g,inch,s]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                                5000000   %in g
(%o16)                         (-------) (-----)
                                  127       2
                                           s

setunitsuforgetも参照してください。 この関数を使うには最初に load("unit")を書いてください。

Categories:  Package unit

オプション変数: usersetunits

デフォルト値: none

もしユーザーが記述されたものよりもデフォルト単位の振る舞いを持ちたいなら、 それらは maxima-init.macusersetunits変数を利用することができます。 unitパッケージは この変数がリストに割り当てられているかを見るためにスタートアップ時にチェックします。 もし割り当てられているなら、そのリスト上で setunitsを使い、 そのリストからの単位をデフォルトに取ります。 uforgetは自身のデフォルト上に usersetunitsで定義された振る舞いに戻します。 例えば、 もし以下を含む maxima-init.macファイルを持っているなら:

 
usersetunits : [N,J];

we would see the following behavior:

 
(%i1) load("unit")$
*******************************************************************
*                       Units version 0.50                        *
*          Definitions based on the NIST Reference on             *
*              Constants, Units, and Uncertainty                  *
*       Conversion factors from various sources including         *
*                   NIST and the GNU units package                *
*******************************************************************

Redefining necessary functions...
WARNING: DEFUN/DEFMACRO: redefining function
 TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
Initializing unit arrays...
Done.
User defaults found...
User defaults initialized.
(%i2) kg*m/s^2;
(%o2)                                  N
(%i3) kg*m^2/s^2;
(%o3)                                  J
(%i4) kg*m^3/s^2;
(%o4)                                 J m
(%i5) kg*m*km/s^2;
(%o5)                             (1000) (J)
(%i6) setunits([dyn,eV]);
(%o6)                                done
(%i7) kg*m/s^2;
(%o7)                           (100000) (dyn)
(%i8) kg*m^2/s^2;
(%o8)                     (6241509596477042688) (eV)
(%i9) kg*m^3/s^2;
(%o9)                    (6241509596477042688) (eV m)
(%i10) kg*m*km/s^2;
(%o10)                   (6241509596477042688000) (eV)
(%i11) uforget([dyn,eV]);
(%o11)                           [false, false]
(%i12) kg*m/s^2;
(%o12)                                 N
(%i13) kg*m^2/s^2;
(%o13)                                 J
(%i14) kg*m^3/s^2;
(%o14)                                J m
(%i15) kg*m*km/s^2;
(%o15)                            (1000) (J)

usersetunitsなしでは、初期の入力は MKSに変換されたでしょうし、 uforgetは MKS規則への復帰をもたらしたでしょう。 なるほど、ユーザーの好みは両方のケースで考慮されます。 もし望まれるなら、これらはまだオーバーライドされることができることに注目してください。 この整理を完全に消すには - すなわち、ユーザーデフォルトを出荷デフォルトに再設定するには - dontusedimensionコマンドを使えます。 usedimensionuforgetを使用上自由にする時だけ uforgetはユーザー設定を再び戻すことができますが、 代わりに、 kill(usersetunits)はユーザーデフォルトの知識すべてを セッションから完全に削除します。 以下はこれらの様々なオプションがいかに働くかを示すいくつかの例です。

 
(%i2) kg*m/s^2;
(%o2)                                  N
(%i3) kg*m^2/s^2;
(%o3)                                  J
(%i4) setunits([dyn,eV]);
(%o4)                                done
(%i5) kg*m/s^2;
(%o5)                           (100000) (dyn)
(%i6) kg*m^2/s^2;
(%o6)                     (6241509596477042688) (eV)
(%i7) uforget([dyn,eV]);
(%o7)                          [false, false]
(%i8) kg*m/s^2;
(%o8)                                  N
(%i9) kg*m^2/s^2;
(%o9)                                  J
(%i10) dontusedimension(N);
(%o10)                             [%force]
(%i11) dontusedimension(J);
(%o11)                         [%energy, %force]
(%i12) kg*m/s^2;
                                     kg m
(%o12)                               ----
                                       2
                                      s
(%i13) kg*m^2/s^2;
                                         2
                                     kg m
(%o13)                               -----
                                       2
                                      s
(%i14) setunits([dyn,eV]);
(%o14)                               done
(%i15) kg*m/s^2;
                                     kg m
(%o15)                               ----
                                       2
                                      s
(%i16) kg*m^2/s^2;
                                         2
                                     kg m
(%o16)                               -----
                                       2
                                      s
(%i17) uforget([dyn,eV]);
(%o17)                         [false, false]
(%i18) kg*m/s^2;
                                     kg m
(%o18)                               ----
                                       2
                                      s
(%i19) kg*m^2/s^2;
                                         2
                                     kg m
(%o19)                               -----
                                       2
                                      s
(%i20) usedimension(N);
Done.  To have Maxima simplify to this dimension, use
setunits([unit]) to select a unit.
(%o20)                               true
(%i21) usedimension(J);
Done.  To have Maxima simplify to this dimension, use
setunits([unit]) to select a unit.
(%o21)                               true
(%i22) kg*m/s^2;
                                     kg m
(%o22)                               ----
                                       2
                                      s
(%i23) kg*m^2/s^2;
                                         2
                                     kg m
(%o23)                               -----
                                       2
                                      s
(%i24) setunits([dyn,eV]);
(%o24)                               done
(%i25) kg*m/s^2;
(%o25)                          (100000) (dyn)
(%i26) kg*m^2/s^2;
(%o26)                    (6241509596477042688) (eV)
(%i27) uforget([dyn,eV]);
(%o27)                           [false, false]
(%i28) kg*m/s^2;
(%o28)                                 N
(%i29) kg*m^2/s^2;
(%o29)                                 J
(%i30) kill(usersetunits);
(%o30)                               done
(%i31) uforget([dyn,eV]);
(%o31)                          [false, false]
(%i32) kg*m/s^2;
                                     kg m
(%o32)                               ----
                                       2
                                      s
(%i33) kg*m^2/s^2;
                                         2
                                     kg m
(%o33)                               -----
                                       2
                                      s

不運にも、広範囲に色々なオプションがあることは最初は少し混乱しますが、 一旦ユーザーがそれらを使うようになると、 仕事環境全体で非常に充実したコントロールを持つことをユーザーは見いだすに違いありません。

Categories:  Package unit

関数: metricexpandall (x)

望みの計量単位すべてを自動的に生成するグローバル単位リストを再構築します。 xは ユーザーがいくつの計量接頭子の定義を望むか指定するのに使われる数値引数です。 引数は、より低い数字の単位を定義するより高い数字それぞれを持つような 以下のようなものです:

 
           0 - none. Only base units
           1 - kilo, centi, milli
(default)  2 - giga, mega, kilo, hecto, deka, deci, centi, milli,
               micro, nano
           3 - peta, tera, giga, mega, kilo, hecto, deka, deci,
               centi, milli, micro, nano, pico, femto
           4 - all

通常は、 Maximaはこれは非常にたくさんの数の単位をもたらすので、完全な展開を定義しませんが、 多少なりとも完全な方法でリストを再構築するのに metricexpandallを使うことができます。 unit.macファイルの中の適切な変数は %unitexpandです。

Categories:  Package unit

変数: %unitexpand

デフォルト値: 2

これは unitの初期ロードの最中に metricexpandallに供給される値です。

Categories:  Package unit


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87. zeilberger


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.1 Introduction to zeilberger

zeilbergerは 超幾何定総和に関する Zeilbergerのアルゴリズムと超幾何不定総和に関する Gosperのアルゴリズムの実装します。

zeilbergerは Axel Rieseによって開発された「フィルタリング」最適化法を利用します。

zeilbergerは Fabrizio Carusoによって開発されました。

load ("zeilberger")はこのパッケージをロードします。

Categories:  Sums and products · Share packages · Package zeilberger


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.1.1 The indefinite summation problem

zeilbergerは超幾何不定総和に関する Gosperのアルゴリズムの実装します。 kの超幾何項 F_kが与えられたとして、 超幾何反差 (anti-difference)、すなわち、以下のような超幾何項 f_kを見つけたいです。

F_k = f_(k+1) - f_k.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.1.2 The definite summation problem

zeilbergerは超幾何定総和に関する Gosperのアルゴリズムの実装します。 適当な (nkに関する)超幾何項 F_(n,k) と正の整数 dが与えられたとして、 F_(n,k) に関する (nに関する)多項式係数を持つ d次の線形漸化式と、 a_0 F_(n,k) + ... + a_d F_(n+d),k = Delta_k(R(n,k) F_(n,k)), のような nkに関する有理函数 Rを見つけたいです。

ここで、 Delta_kk-順方向差分演算子です。すなわち、 Delta_k(t_k) := t_(k+1) - t_k.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.1.3 Verbosity levels

以下の接尾辞の 1つを追加することでコールされる出力が冗長なバージョンのコマンドもあります:

Summary

終わりにサマリだけが表示されます。

Verbose

中間ステップでのある情報。

VeryVerbose

更なる情報。

Extra

Zeilbergerのアルゴリズムでの線形系上の情報を含む更なる情報。

例えば:
GosperVerbose, parGosperVeryVerbose, ZeilbergerExtra, AntiDifferenceSummary.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.2 Functions and Variables for zeilberger

関数: AntiDifference (F_k, k)

もし存在するなら F_kの超幾何反差を返します。
そうでないなら AntiDifferenceno_hyp_antidifferenceを返します。

Categories:  Package zeilberger

関数: Gosper (F_k, k)

もし存在するなら、 F_kに対する有理証 (rational certificate)、 すなわち、以下のような有理函数を返します。 F_k = R(k+1) F_(k+1) - R(k) F_k, そうでないなら Gosperno_hyp_solを返します。

Categories:  Package zeilberger

関数: GosperSum (F_k, k, a, b)

もし F_kが超幾何反差を持つなら、 k = aから k = bまでの F_kの和を返します。 そうでないなら GosperSumnongosper_summableを返します。

例:

 
(%i1) load ("zeilberger")$
(%i2) GosperSum ((-1)^k*k / (4*k^2 - 1), k, 1, n);
Dependent equations eliminated:  (1)
                           3       n + 1
                      (n + -) (- 1)
                           2               1
(%o2)               - ------------------ - -
                                  2        4
                      2 (4 (n + 1)  - 1)
(%i3) GosperSum (1 / (4*k^2 - 1), k, 1, n);
                                3
                          - n - -
                                2       1
(%o3)                  -------------- + -
                                2       2
                       4 (n + 1)  - 1
(%i4) GosperSum (x^k, k, 1, n);
                          n + 1
                         x          x
(%o4)                    ------ - -----
                         x - 1    x - 1
(%i5) GosperSum ((-1)^k*a! / (k!*(a - k)!), k, 1, n);
                                n + 1
                a! (n + 1) (- 1)              a!
(%o5)       - ------------------------- - ----------
              a (- n + a - 1)! (n + 1)!   a (a - 1)!
(%i6) GosperSum (k*k!, k, 1, n);
Dependent equations eliminated:  (1)
(%o6)                     (n + 1)! - 1
(%i7) GosperSum ((k + 1)*k! / (k + 1)!, k, 1, n);
                  (n + 1) (n + 2) (n + 1)!
(%o7)             ------------------------ - 1
                          (n + 2)!
(%i8) GosperSum (1 / ((a - k)!*k!), k, 1, n);
(%o8)                  NON_GOSPER_SUMMABLE

Categories:  Package zeilberger

関数: parGosper (F_(n,k), k, n, d)

F_(n,k)に対して次数 dの漸化式を見つけようとします。

アルゴリズムは解の列 [s_1, s_2, ..., s_m]をもたらします。 解それぞれは形式

[R(n, k), [a_0, a_1, ..., a_d]].

を持ちます。

もし漸化式を見つけられないなら parGosper[]を返します。

Categories:  Package zeilberger

関数: Zeilberger (F_(n,k), k, n)

F_(n,k)の超幾何不定総和を計算しようとします。

Zeilbergerは最初に Gosperを呼び出し、 もしそれが解を見つけるのに失敗したら、 次数 1, 2, 3, ..., から MAX_ORDまでを使って parGosperを呼び出します。 もし Zeilbergerが MAX_ORDに達する前に解を見つけたら、 停止して解を返します。

アルゴリズムは解の列 [s_1, s_2, ..., s_m]をもたらします。 解それぞれは形式

[R(n,k), [a_0, a_1, ..., a_d]].

を持ちます。

もし解を見つけられなかったら、 Zeilberger[]を返します。

ZeilbergerGosper_in_Zeilbergertrueの時だけ Gosperを呼び出します。

Categories:  Package zeilberger


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.3 General global variables

グローバル変数: MAX_ORD

デフォルト値: 5

MAX_ORDZeilbergerが試みる漸化式の最大次数です。

Categories:  Package zeilberger

グローバル変数: simplified_output

デフォルト値: false

simplified_outputtrueの時、 zeilbergerパッケージの関数は解の更なる整理を試みます。

Categories:  Package zeilberger

グローバル変数: linear_solver

デフォルト値: linsolve

linear_solverは Zeilbergerのアルゴリズムで方程式系を解くのに使うソルバを指定します。

Categories:  Package zeilberger

グローバル変数: warnings

デフォルト値: true

warningstrueの時、 zeilbergerパッケージの関数は実行中に警告メッッセージを印字します。

Categories:  Package zeilberger

グローバル変数: Gosper_in_Zeilberger

デフォルト値: true

Gosper_in_Zeilbergertrueの時、 Zeilberger関数は parGosperをコールする前に Gosperをコールします。 そうでないなら、 Zeilbergerはすぐに parGosperに向かいます。

Categories:  Package zeilberger

グローバル変数: trivial_solutions

デフォルト値: true

trivial_solutionstrueの時、 Zeilbergerは 零に等しい証を持つ解か、すべての係数が零に等しい解を返します。

Categories:  Package zeilberger


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

87.4 Variables related to the modular test

グローバル変数: mod_test

デフォルト値: false

mod_testtrueの時、 parGosperは解を持たない系を除くためにモジュラーテストを実行します。

Categories:  Package zeilberger

グローバル変数: modular_linear_solver

デフォルト値: linsolve

modular_linear_solverparGosperでのモジュラーテストが使う線形ソルバを指定します。

Categories:  Package zeilberger

グローバル変数: ev_point

デフォルト値: big_primes[10]

parGosperでモジュラーテストを実行する時 ev_pointで変数 nを評価します。

Categories:  Package zeilberger

グローバル変数: mod_big_prime

デフォルト値: big_primes[1]

mod_big_primeparGosperでモジュラーテストが使う法です。

Categories:  Package zeilberger

グローバル変数: mod_threshold

デフォルト値: 4

mod_thresholdparGosperでのモジュラーテストが試みられる際の最大次数です。

Categories:  Package zeilberger


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88. Error and warning messages

この章は いくつかのエラーメッセージやエラーから復帰する方法についての詳細情報を提供します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1 Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.1 apply: no such "list" element

このエラーメッセージの共通の原因は、 要素番号が < 1> length(list)のリストの要素にアクセスしようと 鍵括弧演算子 ([ ])を使うことです。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.2 argument must be a non-atomic expression

これは通常 1つ以上の(訳注: 原文はmore than one)要素からなるリストや集合、他の何かが期待されたことを意味します。 このエラーメッセージの1つの起こりうる原因は以下の型の生成です:

 
(%i1) l:[1,2,3];
(%o1)                       [1, 2, 3]
(%i2) append(l,4);
append: argument must be a non-atomic expression; found 4
 -- an error. To debug this try: debugmode(true);

リストに変数や数を追加する正しい方法は最初にそれらを要素1つのリストでラップすることです:

 
(%i1) l:[1,2,3];
(%o1)                       [1, 2, 3]
(%i2) append(l,[4]);
(%o2)                     [1, 2, 3, 4]

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.3 assignment: cannot assign to <function name>

Maximaはいくつかの割り当て演算子をサポートします。 関数を定義しようとする時には、:=を使わなければいけません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.4 expt: undefined: 0 to a negative exponent.

このメッセージは古典的なゼロ除算エラーを通知します。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.5 incorrect syntax: , is not a prefix operator

これは、コンマ (,)で始まるコマンドか、別のコンマが直接後に続くコンマが原因です。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.6 incorrect syntax: Illegal use of delimiter )

このエラーの共通の理由は、括弧を開くことなしに閉じたり、コンマが直接先行する閉じ括弧です。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.7 loadfile: failed to load <filename>

このエラーメッセージは通常、ファイルは存在するが読み込めないことを示します。 もしファイルが存在していて可読なら、このエラーメッセージに関して別の可能性があります: Maximaは高速化のためパッケージをネイティブバイナリファイルにコンパイルできます。 もしファイルをコンパイルした後にシステム上の何かがバイナリと非互換にするような方法で バイナリを変更したら、ファイルはもはやロードできなくなります。 Maximaは通常、パッケージから生成するバイナリファイルを 以下のようにタイプした後印字される名前のフォルダ内の binaryと名付けられたフォルダの中に置きます:

 
(%i1) maxima_userdir;
(%o1)                 /home/gunter/.maxima

もしこのディレクトリがなければ、maximaはパッケージをコンパイルしなければいけない時すぐにそれを再度作ります。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.8 makelist: second argument must evaluate to a number

makelistは2番目の引数に刻まれる変数名を期待します。 今回、未定義の変数の名前の代わりにmaximaが他の何か、多分リストかリストの名前を見つけました。

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.9 Only symbols can be bound

このエラーのもっともありえる原因は ループカウンタとして知られる数値の数や変数を使おうとしたことにありました。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.10 operators of arguments must all be the same

このエラーメッセージが現れる1つのありえる理由は等式をリストに追加するために appendを使おうとしようとしたことです:

 
(%i1) l:[a=1,b=2,c=3];
(%o1)                 [a = 1, b = 2, c = 3]
(%i2) append(l,d=5);
append: operators of arguments must all be the same.
 -- an error. To debug this try: debugmode(true);

等式をリストに追加するために最初に要素1つのリストにラップしなくてはいけません:

 
(%i1) l:[a=1,b=2,c=3];
(%o1)                 [a = 1, b = 2, c = 3]
(%i2) append(l,[d=5]);
(%o2)             [a = 1, b = 2, c = 3, d = 5]

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.11 Out of memory

普通Lispは、少なくとも1つのスタックとユーザーオブジェクトを含むヒープを含むいくつかのタイプのメモリを扱います。 メモリの枯渇を避けるにはいくつかの手法が役に立つかもしれません:

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.12 part: fell off the end

part()nより少ない項目を持つ何かの中の n番目の項目をアクセスするのに使われました。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.13 undefined variable (draw or plot)

maximaが値を知らない変数を含んでいたので関数が描画できませんでした。

どの変数がわからないのか見つけるためには、 描画コマンドの名前 (draw2d, plot2dや似たようなもの)を 既存の関数名と衝突しない適当な名前(例えば ddraw2d)で一時的に置き換えて maximaに描画コマンドがなんのパラメータを見ているのか印字させることが時々役に立ちます。

 
(%i1) load("draw")$
(%i2) f(x):=sin(omega*t);
(%o2) f(x) := sin(omega t)
(%i3) draw2d(
        explicit(
          f(x),
          x,1,10
        )
      );
draw2d (explicit): non defined variable
 -- an error. To debug this try: debugmode(true);
(%i4) ddraw2d(
        explicit(
          f(x),
          x,1,10
        )
      );
(%o4) ddraw2d(explicit(sin(omega t), x, 1, 10))

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.1.14 VTK is not installed, which is required for Scene

これは、VTKが実際にインストールされていないかー maximaが見つけられないかー 以下の maximaコマンドを入力した時の出力の名前のディレクトリへの書き込みアクセスができないか を意味します:

 
(%i1) maxima_tempdir;
(%o1)                         /tmp

Categories:  Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.2 Warning messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.2.1 Encountered undefined variable <x> in translation

関数をコンパイルしましたが、変数 xの型がわかりませんでした。 これはコンパイルされたコマンドが、 maximaがこの変数に関して提供するすべての柔軟性を保持する追加のコードを含むことを意味します。 もし xが変数名を意味しなくてコマンドへの名前付きオプションを意味するなら、 名前オプションの前にシングルクォート (')をつけることでこの問題を解決するでしょう。

Error messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

88.2.2 Rat: replaced <x> by <y> = <z>

浮動小数点数は、最大数が普通は十分大きなものですが、依然制限はあります。 無害に見える例でこの制限が小さすぎることを示すよい例はとして、 Wilkinson's Polynomial, Rump多項式、そして正確な1/10は2進数の浮動小数点で表現できないという事実があります。 それゆえに、 浮動小数点エラーが徐々に大きくなったり、項が互いに打ち消し合うことを妨げるあちこちの場所で、 maximaはデフォルトでそれらを正確な分数に置き換えます。 ratprint, ratepsilon, bftorat, fpprintprec, rationalizeも参照してください。

Warning messages


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A. Comments of Translator


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.1 Translation Policies

とにかく、質より量ということで訳を進めました。品質を高めるべく、少しずつ見直しを進めています。 訳者自身が意味を理解していない文もありましたので、誤訳、迷訳についてはご指摘いただければ幸いです。

できるだけ多くの人に参考になるようにと、章のレベルに応じて、訳語を変えたところがあります。 例えば、足し算と加算を使い分けたりしました。その結果、文体に一貫性が欠ける部分があるかと思いますが、意図を汲み取っていただければ幸いです。

章や節などのノード名は、訳すとtexi2htmlに不具合があるので、英文そのままとしました。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.2 About Terms in Japanese

simplification

simplificationとevaluationがMaximaの基礎となっていますが、simplificationは、対応する日本語がないと思いました。Maximaに関する他の記事では、簡易化、簡素化、簡単化などと訳されているようです。一番近いニュアンスは、「式の整理をすること」と思いましたので、「整理」もしくは「式整理」と訳しました。 reduceの訳語には簡約を使いました。

function

functionは、数学的な定義に基づく場合とプログラミング的な定義に基づく場合があるので、前者を函数、後者を関数と漢字を充てました。

Categories:  Help


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

B. Function and Variable Index

Jump to:   !   "   #   $   %   '   *   +   -   .   /   :   ;   <   =   >   ?   @   [   ]   ^   _   `   |   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
Index Entry Section

!
!10.3 Combinatorial Functions
!!10.3 Combinatorial Functions

"
''8.1 Functions and Variables for Evaluation

#
#7.5 Operators for Equations

$
$4.2 Functions and Variables for Command Line

%
%4.2 Functions and Variables for Command Line
%%4.2 Functions and Variables for Command Line
%and85.1 Functions and Variables for to_poly_solve
%c48.2 Functions and Variables for contrib_ode
%e5.4 Functions and Variables for Constants
%e_to_numlog10.4 Root, Exponential and Logarithmic Functions
%edispflag4.3 Functions and Variables for Display
%emode10.4 Root, Exponential and Logarithmic Functions
%enumer10.4 Root, Exponential and Logarithmic Functions
%f15.8 Hypergeometric Functions
%gamma5.4 Functions and Variables for Constants
%i5.4 Functions and Variables for Constants
%iargs10.5.2 Functions and Variables for Trigonometric
%if85.1 Functions and Variables for to_poly_solve
%k148.2 Functions and Variables for contrib_ode
%k248.2 Functions and Variables for contrib_ode
%m15.8 Hypergeometric Functions
%or85.1 Functions and Variables for to_poly_solve
%phi5.4 Functions and Variables for Constants
%pi5.4 Functions and Variables for Constants
%piargs10.5.2 Functions and Variables for Trigonometric
%rnum20.1 Functions and Variables for Equations
%rnum_list20.1 Functions and Variables for Equations
%s15.2 Bessel Functions
%th4.2 Functions and Variables for Command Line
%union85.1 Functions and Variables for to_poly_solve
%union85.1 Functions and Variables for to_poly_solve
%unitexpand86.2 Functions and Variables for Units
%w15.8 Hypergeometric Functions

'
'8.1 Functions and Variables for Evaluation

*
*7.2 Arithmetic operators
**7.2 Arithmetic operators

+
+7.2 Arithmetic operators

-
-7.2 Arithmetic operators

.
.7.2 Arithmetic operators

/
/7.2 Arithmetic operators

:
:7.6 Assignment operators
::7.6 Assignment operators
::=7.6 Assignment operators
:=7.6 Assignment operators

;
;4.2 Functions and Variables for Command Line

<
<7.3 Relational operators
<=7.3 Relational operators

=
=7.5 Operators for Equations

>
>7.3 Relational operators
>=7.3 Relational operators

?
?4.2 Functions and Variables for Command Line
??4.2 Functions and Variables for Command Line

@
@5.8.2 Functions and Variables for Structures

[
[5.5.2 Functions and Variables for Lists

]
]5.5.2 Functions and Variables for Lists

^
^7.2 Arithmetic operators
^^7.2 Arithmetic operators

_
_4.2 Functions and Variables for Command Line
__4.2 Functions and Variables for Command Line

`
`56.3 Functions and Variables for ezunits
`56.3 Functions and Variables for ezunits

|
|25.2.7 Exterior algebra

~
~25.2.7 Exterior algebra

A
abasep27.2 Functions and Variables for atensor
abs10.1 Functions for Numbers
absboxchar4.3 Functions and Variables for Display
absint28.5 Functions and Variables for Fourier series
absolute_real_time32.3 Functions and Variables for Runtime Environment
acos10.5.2 Functions and Variables for Trigonometric
acosh10.5.2 Functions and Variables for Trigonometric
acot10.5.2 Functions and Variables for Trigonometric
acoth10.5.2 Functions and Variables for Trigonometric
acsc10.5.2 Functions and Variables for Trigonometric
acsch10.5.2 Functions and Variables for Trigonometric
activate11.3 Functions and Variables for Facts
activecontexts11.3 Functions and Variables for Facts
adapt_depth12.4 Plotting Options
adapt_depth52.2.3 Graphic options
add_edge61.2.3 Modifying graphs
add_edges61.2.3 Modifying graphs
add_vertex61.2.3 Modifying graphs
add_vertices61.2.3 Modifying graphs
addcol23.2 Functions and Variables for Matrices and Linear Algebra
additive9.2 Functions and Variables for Simplification
addmatrices68.2 Functions and Variables for linearalgebra
addrow23.2 Functions and Variables for Matrices and Linear Algebra
adim27.2 Functions and Variables for atensor
adjacency_matrix61.2.2 Graph properties
adjoin35.2 Functions and Variables for Sets
adjoint23.2 Functions and Variables for Matrices and Linear Algebra
adjust_external_format84.3 Characters
af27.2 Functions and Variables for atensor
aform27.2 Functions and Variables for atensor
agd80.4 Package functs
airy_ai15.3 Airy Functions
airy_bi15.3 Airy Functions
airy_dai15.3 Airy Functions
airy_dbi15.3 Airy Functions
alg_type27.2 Functions and Variables for atensor
algebraic14.2 Functions and Variables for Polynomials
algepsilon20.1 Functions and Variables for Equations
algexact20.1 Functions and Variables for Equations
algsys20.1 Functions and Variables for Equations
alias6.5 Functions and Variables for Expressions
aliases6.5 Functions and Variables for Expressions
all_dotsimp_denoms24.2 Functions and Variables for Affine
allbut6.5 Functions and Variables for Expressions
allocation52.2.3 Graphic options
allroots20.1 Functions and Variables for Equations
allsym25.2.2 Tensor symmetries
alphabetic11.2 Functions and Variables for Properties
alphacharp84.3 Characters
alphanumericp84.3 Characters
amortization58.2 Functions and Variables for finance
and7.4 Logical operators
animation54.3.3 Scene object's options
annuity_fv58.2 Functions and Variables for finance
annuity_pv58.2 Functions and Variables for finance
antid18.1 Functions and Variables for Differentiation
antidiff18.1 Functions and Variables for Differentiation
AntiDifference87.2 Functions and Variables for zeilberger
antisymmetric9.2 Functions and Variables for Simplification
append5.5.2 Functions and Variables for Lists
appendfile13.3 Functions and Variables for File Input and Output
apply36.4 Functions and Variables for Function Definition
apply134.2 Functions and Variables for Rules and Patterns
apply234.2 Functions and Variables for Rules and Patterns
applyb134.2 Functions and Variables for Rules and Patterns
apropos3.2 Functions and Variables for Help
args6.5 Functions and Variables for Expressions
arit_amortization58.2 Functions and Variables for finance
arithmetic80.4 Package functs
arithsum80.4 Package functs
array5.7 Functions and Variables for Arrays
arrayapply5.7 Functions and Variables for Arrays
arrayinfo5.7 Functions and Variables for Arrays
arraymake5.7 Functions and Variables for Arrays
arrays5.7 Functions and Variables for Arrays
arraysetapply5.7 Functions and Variables for Arrays
ascii84.3 Characters
asec10.5.2 Functions and Variables for Trigonometric
asech10.5.2 Functions and Variables for Trigonometric
asin10.5.2 Functions and Variables for Trigonometric
asinh10.5.2 Functions and Variables for Trigonometric
askexp33.3 Functions and Variables for Miscellaneous Options
askinteger11.3 Functions and Variables for Facts
asksign11.3 Functions and Variables for Facts
assoc5.5.2 Functions and Variables for Lists
assoc_legendre_p76.2 Functions and Variables for orthogonal polynomials
assoc_legendre_q76.2 Functions and Variables for orthogonal polynomials
assume11.3 Functions and Variables for Facts
assume_external_byte_order73.3 Functions and Variables for binary input and output
assume_pos11.3 Functions and Variables for Facts
assume_pos_pred11.3 Functions and Variables for Facts
assumescalar11.3 Functions and Variables for Facts
asymbol27.2 Functions and Variables for atensor
asympa40.1 Introduction to asympa
at18.1 Functions and Variables for Differentiation
atan10.5.2 Functions and Variables for Trigonometric
atan210.5.2 Functions and Variables for Trigonometric
atanh10.5.2 Functions and Variables for Trigonometric
atensimp27.2 Functions and Variables for atensor
atom6.5 Functions and Variables for Expressions
atomgrad18.1 Functions and Variables for Differentiation
atrig110.5.2 Functions and Variables for Trigonometric
atvalue18.1 Functions and Variables for Differentiation
augcoefmatrix23.2 Functions and Variables for Matrices and Linear Algebra
augmented_lagrangian_method41.1 Functions and Variables for augmented_lagrangian
av27.2 Functions and Variables for atensor
average_degree61.2.2 Graph properties
axes12.4 Plotting Options
axis_3d52.2.3 Graphic options
axis_bottom52.2.3 Graphic options
axis_left52.2.3 Graphic options
axis_right52.2.3 Graphic options
axis_top52.2.3 Graphic options
azimuth12.4 Plotting Options
azimuth54.3.1 Scene options

B
background54.3.1 Scene options
background_color52.2.3 Graphic options
backslash5.2.1 Introduction to Strings
backsubst20.1 Functions and Variables for Equations
backtrace37.4 Functions and Variables for Program Flow
bars52.2.4 Graphics objects
barsplot49.4 Functions and Variables for statistical graphs
barsplot_description49.4 Functions and Variables for statistical graphs
base6484.5 Octets and Utilities for Cryptography
base64_decode84.5 Octets and Utilities for Cryptography
bashindices28.1 Functions and Variables for Sums and Products
batch13.3 Functions and Variables for File Input and Output
batchload13.3 Functions and Variables for File Input and Output
bc221.2 Functions and Variables for Differential Equations
bdvac26.2.7 Miscellaneous features
belln35.2 Functions and Variables for Sets
benefit_cost58.2 Functions and Variables for finance
berlefact14.2 Functions and Variables for Polynomials
bern29.1 Functions and Variables for Number Theory
bernpoly29.1 Functions and Variables for Number Theory
bernstein_approx42.1 Functions and Variables for Bernstein
bernstein_expand42.1 Functions and Variables for Bernstein
bernstein_explicit42.1 Functions and Variables for Bernstein
bernstein_poly42.1 Functions and Variables for Bernstein
bessel_i15.2 Bessel Functions
bessel_j15.2 Bessel Functions
bessel_k15.2 Bessel Functions
bessel_simplify48.2 Functions and Variables for contrib_ode
bessel_y15.2 Bessel Functions
besselexpand15.2 Bessel Functions
beta15.4 Gamma and factorial Functions
beta_args_sum_to_integer15.4 Gamma and factorial Functions
beta_expand15.4 Gamma and factorial Functions
beta_incomplete15.4 Gamma and factorial Functions
beta_incomplete_generalized15.4 Gamma and factorial Functions
beta_incomplete_regularized15.4 Gamma and factorial Functions
bezout14.2 Functions and Variables for Polynomials
bf_fft22.2 Functions and Variables for fast Fourier transform
bf_find_root22.3 Functions for numerical solution of equations
bf_find_root22.3 Functions for numerical solution of equations
bf_fmin_cobyla47.2 Functions and Variables for cobyla
bf_inverse_fft22.2 Functions and Variables for fast Fourier transform
bf_inverse_real_fft22.2 Functions and Variables for fast Fourier transform
bf_real_fft22.2 Functions and Variables for fast Fourier transform
bfallroots20.1 Functions and Variables for Equations
bffac15.4 Gamma and factorial Functions
bfhzeta29.1 Functions and Variables for Number Theory
bfloat5.1.2 Functions and Variables for Numbers
bfloatp5.1.2 Functions and Variables for Numbers
bfpsi15.4 Gamma and factorial Functions
bfpsi015.4 Gamma and factorial Functions
bftorat5.1.2 Functions and Variables for Numbers
bftrunc5.1.2 Functions and Variables for Numbers
bfzeta29.1 Functions and Variables for Number Theory
biconnected_components61.2.2 Graph properties
bimetric26.2.7 Miscellaneous features
bindtest11.2 Functions and Variables for Properties
binomial10.3 Combinatorial Functions
bipartition61.2.2 Graph properties
bit_and43.1 Functions and Variables for bitwise
bit_length43.1 Functions and Variables for bitwise
bit_lsh43.1 Functions and Variables for bitwise
bit_not43.1 Functions and Variables for bitwise
bit_onep43.1 Functions and Variables for bitwise
bit_or43.1 Functions and Variables for bitwise
bit_rsh43.1 Functions and Variables for bitwise
bit_xor43.1 Functions and Variables for bitwise
block36.4 Functions and Variables for Function Definition
blockmatrixp68.2 Functions and Variables for linearalgebra
bode_gain44.1 Functions and Variables for bode
bode_phase44.1 Functions and Variables for bode
border52.2.3 Graphic options
bothcoef14.2 Functions and Variables for Polynomials
boundaries_array52.4.1 Variable and Functions
box6.5 Functions and Variables for Expressions
boxchar6.5 Functions and Variables for Expressions
boxplot49.4 Functions and Variables for statistical graphs
boxplot_description49.4 Functions and Variables for statistical graphs
break36.4 Functions and Variables for Function Definition
breakup20.1 Functions and Variables for Equations
bug_report2.1 Functions and Variables for Bug Detection and Reporting
build_info2.1 Functions and Variables for Bug Detection and Reporting
build_sample49.2 Functions and Variables for data manipulation
buildq36.3 Macros
burn29.1 Functions and Variables for Number Theory

C
cabs10.2 Functions for Complex Numbers
canform25.2.2 Tensor symmetries
canten25.2.1 Managing indexed objects
capping52.2.3 Graphic options
capping54.3.3 Scene object's options
cardinality35.2 Functions and Variables for Sets
carg10.2 Functions for Complex Numbers
cartan18.1 Functions and Variables for Differentiation
cartesian_product35.2 Functions and Variables for Sets
catch36.4 Functions and Variables for Function Definition
cauchy_matrix23.2 Functions and Variables for Matrices and Linear Algebra
cauchysum28.3 Functions and Variables for Series
cbffac15.4 Gamma and factorial Functions
cbrange52.2.3 Graphic options
cbtics52.2.3 Graphic options
cdf_bernoulli51.3 Functions and Variables for discrete distributions
cdf_beta51.2 Functions and Variables for continuous distributions
cdf_binomial51.3 Functions and Variables for discrete distributions
cdf_cauchy51.2 Functions and Variables for continuous distributions
cdf_chi251.2 Functions and Variables for continuous distributions
cdf_continuous_uniform51.2 Functions and Variables for continuous distributions
cdf_discrete_uniform51.3 Functions and Variables for discrete distributions
cdf_empirical49.3 Functions and Variables for descriptive statistics
cdf_exp51.2 Functions and Variables for continuous distributions
cdf_f51.2 Functions and Variables for continuous distributions
cdf_gamma51.2 Functions and Variables for continuous distributions
cdf_general_finite_discrete51.3 Functions and Variables for discrete distributions
cdf_geometric51.3 Functions and Variables for discrete distributions
cdf_gumbel51.2 Functions and Variables for continuous distributions
cdf_hypergeometric51.3 Functions and Variables for discrete distributions
cdf_laplace51.2 Functions and Variables for continuous distributions
cdf_logistic51.2 Functions and Variables for continuous distributions
cdf_lognormal51.2 Functions and Variables for continuous distributions
cdf_negative_binomial51.3 Functions and Variables for discrete distributions
cdf_noncentral_chi251.2 Functions and Variables for continuous distributions
cdf_noncentral_student_t51.2 Functions and Variables for continuous distributions
cdf_normal51.2 Functions and Variables for continuous distributions
cdf_pareto51.2 Functions and Variables for continuous distributions
cdf_poisson51.3 Functions and Variables for discrete distributions
cdf_rank_sum82.4 Functions and Variables for special distributions
cdf_rayleigh51.2 Functions and Variables for continuous distributions
cdf_signed_rank82.4 Functions and Variables for special distributions
cdf_student_t51.2 Functions and Variables for continuous distributions
cdf_weibull51.2 Functions and Variables for continuous distributions
cdisplay26.2.8 Utility functions
ceiling10.1 Functions for Numbers
center54.3.3 Scene object's options
central_moment49.3 Functions and Variables for descriptive statistics
cequal84.3 Characters
cequalignore84.3 Characters
cf29.1 Functions and Variables for Number Theory
cfdisrep29.1 Functions and Variables for Number Theory
cfexpand29.1 Functions and Variables for Number Theory
cflength29.1 Functions and Variables for Number Theory
cframe_flag26.2.9 Variables used by ctensor
cgeodesic26.2.7 Miscellaneous features
cgreaterp84.3 Characters
cgreaterpignore84.3 Characters
changename25.2.1 Managing indexed objects
changevar19.2 Functions and Variables for Integration
chaosgame54.2 Graphical analysis of discrete dynamical systems
charat84.4 String Processing
charfun11.4 Functions and Variables for Predicates
charfun264.2 Functions and Variables for interpol
charlist84.4 String Processing
charp84.3 Characters
charpoly23.2 Functions and Variables for Matrices and Linear Algebra
chdir74.2 Directory operations
chebyshev_t76.2 Functions and Variables for orthogonal polynomials
chebyshev_u76.2 Functions and Variables for orthogonal polynomials
check_overlaps24.2 Functions and Variables for Affine
checkdiv26.2.7 Miscellaneous features
chinese29.1 Functions and Variables for Number Theory
cholesky68.2 Functions and Variables for linearalgebra
christof26.2.2 The tensors of curved space
chromatic_index61.2.2 Graph properties
chromatic_number61.2.2 Graph properties
cint84.3 Characters
circulant_graph61.2.1 Building graphs
clear_edge_weight61.2.2 Graph properties
clear_rules34.2 Functions and Variables for Rules and Patterns
clear_vertex_label61.2.2 Graph properties
clebsch_gordan46.1 Functions and Variables for clebsch_gordan
clebsch_graph61.2.1 Building graphs
clessp84.3 Characters
clesspignore84.3 Characters
close84.2 Input and Output
closefile13.3 Functions and Variables for File Input and Output
cmetric26.2.1 Initialization and setup
cnonmet_flag26.2.9 Variables used by ctensor
coeff14.2 Functions and Variables for Polynomials
coefmatrix23.2 Functions and Variables for Matrices and Linear Algebra
cograd26.2.7 Miscellaneous features
col23.2 Functions and Variables for Matrices and Linear Algebra
collapse6.5 Functions and Variables for Expressions
collectterms80.3 Package facexp
color12.4 Plotting Options
color52.2.3 Graphic options
color54.3.3 Scene object's options
color_bar12.4 Plotting Options
color_bar_tics12.4 Plotting Options
colorbox52.2.3 Graphic options
columnop68.2 Functions and Variables for linearalgebra
columns52.2.3 Graphic options
columnspace68.2 Functions and Variables for linearalgebra
columnswap68.2 Functions and Variables for linearalgebra
columnvector23.2 Functions and Variables for Matrices and Linear Algebra
combination80.4 Package functs
combine9.2 Functions and Variables for Simplification
commutative9.2 Functions and Variables for Simplification
comp2pui30.2.1 Changing bases
compare11.4 Functions and Variables for Predicates
compfile36.4 Functions and Variables for Function Definition
compile36.4 Functions and Variables for Function Definition
compile_file36.4 Functions and Variables for Function Definition
complement_graph61.2.1 Building graphs
complete_bipartite_graph61.2.1 Building graphs
complete_graph61.2.1 Building graphs
complex11.2 Functions and Variables for Properties
complex_number_p85.1 Functions and Variables for to_poly_solve
components25.2.1 Managing indexed objects
compose_functions85.1 Functions and Variables for to_poly_solve
concan25.2.1 Managing indexed objects
concat5.2.2 Functions and Variables for Strings
cone54.3.2 Scene objects
conjugate10.2 Functions for Complex Numbers
conmetderiv25.2.3 Indicial tensor calculus
connect_vertices61.2.3 Modifying graphs
connected_components61.2.2 Graph properties
cons5.5.2 Functions and Variables for Lists
constant11.2 Functions and Variables for Properties
constantp11.2 Functions and Variables for Properties
constituent84.3 Characters
constvalue56.3 Functions and Variables for ezunits
cont2part30.2.2 Changing representations
content14.2 Functions and Variables for Polynomials
context11.3 Functions and Variables for Facts
contexts11.3 Functions and Variables for Facts
continuous_freq49.2 Functions and Variables for data manipulation
contortion26.2.6 Torsion and nonmetricity
contour52.2.3 Graphic options
contour_levels52.2.3 Graphic options
contour_plot12.3 Functions and Variables for Plotting
contract25.2.1 Managing indexed objects
contract30.2.2 Changing representations
contract_edge61.2.3 Modifying graphs
contragrad26.2.7 Miscellaneous features
contrib_ode48.2 Functions and Variables for contrib_ode
convert86.2 Functions and Variables for Units
coord25.2.3 Indicial tensor calculus
copy6.5 Functions and Variables for Expressions
copy_file74.3 File operations
copy_graph61.2.1 Building graphs
copylist5.5.2 Functions and Variables for Lists
copymatrix23.2 Functions and Variables for Matrices and Linear Algebra
cor49.3 Functions and Variables for descriptive statistics
cos10.5.2 Functions and Variables for Trigonometric
cosh10.5.2 Functions and Variables for Trigonometric
cosnpiflag28.5 Functions and Variables for Fourier series
cot10.5.2 Functions and Variables for Trigonometric
coth10.5.2 Functions and Variables for Trigonometric
cov49.3 Functions and Variables for descriptive statistics
cov149.3 Functions and Variables for descriptive statistics
covdiff25.2.4 Tensors in curved spaces
covect23.2 Functions and Variables for Matrices and Linear Algebra
covers80.4 Package functs
crc24sum84.5 Octets and Utilities for Cryptography
create_graph61.2.1 Building graphs
create_list5.5.2 Functions and Variables for Lists
csc10.5.2 Functions and Variables for Trigonometric
csch10.5.2 Functions and Variables for Trigonometric
csetup26.2.1 Initialization and setup
cspline64.2 Functions and Variables for interpol
ct_coords26.2.9 Variables used by ctensor
ct_coordsys26.2.1 Initialization and setup
ctaylor26.2.3 Taylor series expansion
ctaypov26.2.9 Variables used by ctensor
ctaypt26.2.9 Variables used by ctensor
ctayswitch26.2.9 Variables used by ctensor
ctayvar26.2.9 Variables used by ctensor
ctorsion_flag26.2.9 Variables used by ctensor
ctransform26.2.7 Miscellaneous features
ctranspose68.2 Functions and Variables for linearalgebra
ctrgsimp26.2.9 Variables used by ctensor
cube54.3.2 Scene objects
cube_graph61.2.1 Building graphs
cuboctahedron_graph61.2.1 Building graphs
current_let_rule_package34.2 Functions and Variables for Rules and Patterns
cv49.3 Functions and Variables for descriptive statistics
cycle_digraph61.2.1 Building graphs
cycle_graph61.2.1 Building graphs
cylinder54.3.2 Scene objects
cylindrical52.2.4 Graphics objects

D
data_file_name52.2.3 Graphic options
days36058.2 Functions and Variables for finance
dblint19.2 Functions and Variables for Integration
deactivate11.3 Functions and Variables for Facts
debugmode38.3 Functions and Variables for Debugging
declare11.2 Functions and Variables for Properties
declare_constvalue56.3 Functions and Variables for ezunits
declare_dimensions56.3 Functions and Variables for ezunits
declare_fundamental_dimensions56.3 Functions and Variables for ezunits
declare_fundamental_units56.3 Functions and Variables for ezunits
declare_qty56.3 Functions and Variables for ezunits
declare_translated36.4 Functions and Variables for Function Definition
declare_unit_conversion56.3 Functions and Variables for ezunits
declare_units56.3 Functions and Variables for ezunits
declare_weights24.2 Functions and Variables for Affine
decode_time32.3 Functions and Variables for Runtime Environment
decreasing11.2 Functions and Variables for Properties
decsym25.2.2 Tensor symmetries
default_let_rule_package34.2 Functions and Variables for Rules and Patterns
defcon25.2.1 Managing indexed objects
define36.4 Functions and Variables for Function Definition
define_alt_display39.2 Functions and Variables for alt-display
define_variable36.4 Functions and Variables for Function Definition
defint19.2 Functions and Variables for Integration
defmatch34.2 Functions and Variables for Rules and Patterns
defrule34.2 Functions and Variables for Rules and Patterns
defstruct5.8.2 Functions and Variables for Structures
deftaylor28.3 Functions and Variables for Series
degree_sequence61.2.2 Graph properties
del18.1 Functions and Variables for Differentiation
delay52.2.3 Graphic options
delete5.5.2 Functions and Variables for Lists
delete_file74.3 File operations
deleten26.2.8 Utility functions
delta18.1 Functions and Variables for Differentiation
demo3.2 Functions and Variables for Help
demoivre9.2 Functions and Variables for Simplification
demoivre9.2 Functions and Variables for Simplification
denom14.2 Functions and Variables for Polynomials
dependencies18.1 Functions and Variables for Differentiation
dependencies18.1 Functions and Variables for Differentiation
depends18.1 Functions and Variables for Differentiation
derivabbrev18.1 Functions and Variables for Differentiation
derivdegree18.1 Functions and Variables for Differentiation
derivlist18.1 Functions and Variables for Differentiation
derivsubst18.1 Functions and Variables for Differentiation
describe3.2 Functions and Variables for Help
desolve21.2 Functions and Variables for Differential Equations
determinant23.2 Functions and Variables for Matrices and Linear Algebra
detout23.2 Functions and Variables for Matrices and Linear Algebra
dfloat85.1 Functions and Variables for to_poly_solve
dgauss_a48.2 Functions and Variables for contrib_ode
dgauss_b48.2 Functions and Variables for contrib_ode
dgeev65.2 Functions and Variables for lapack
dgemm65.2 Functions and Variables for lapack
dgeqrf65.2 Functions and Variables for lapack
dgesv65.2 Functions and Variables for lapack
dgesvd65.2 Functions and Variables for lapack
diag50.1 Functions and Variables for diag
diag_matrix68.2 Functions and Variables for linearalgebra
diagmatrix23.2 Functions and Variables for Matrices and Linear Algebra
diagmatrixp26.2.8 Utility functions
diagmetric26.2.9 Variables used by ctensor
diameter61.2.2 Graph properties
diff18.1 Functions and Variables for Differentiation
diff25.2.3 Indicial tensor calculus
digitcharp84.3 Characters
dim26.2.9 Variables used by ctensor
dimacs_export61.2.4 Reading and writing to files
dimacs_import61.2.4 Reading and writing to files
dimension20.1 Functions and Variables for Equations
dimensionless56.3 Functions and Variables for ezunits
dimensions56.3 Functions and Variables for ezunits
dimensions_as_list56.3 Functions and Variables for ezunits
direct30.2.3 Groups and orbits
directory13.3 Functions and Variables for File Input and Output
discrete_freq49.2 Functions and Variables for data manipulation
disjoin35.2 Functions and Variables for Sets
disjointp35.2 Functions and Variables for Sets
disolate6.5 Functions and Variables for Expressions
disp4.3 Functions and Variables for Display
dispcon25.2.1 Managing indexed objects
dispflag20.1 Functions and Variables for Equations
dispform6.5 Functions and Variables for Expressions
dispfun36.4 Functions and Variables for Function Definition
dispJordan50.1 Functions and Variables for diag
display4.3 Functions and Variables for Display
display2d4.3 Functions and Variables for Display
display_format_internal4.3 Functions and Variables for Display
disprule34.2 Functions and Variables for Rules and Patterns
dispterms4.3 Functions and Variables for Display
distrib9.2 Functions and Variables for Simplification
distribute_over9.2 Functions and Variables for Simplification
divide14.2 Functions and Variables for Polynomials
divisors35.2 Functions and Variables for Sets
divsum29.1 Functions and Variables for Number Theory
dkummer_m48.2 Functions and Variables for contrib_ode
dkummer_u48.2 Functions and Variables for contrib_ode
dlange65.2 Functions and Variables for lapack
do37.4 Functions and Variables for Program Flow
doallmxops23.2 Functions and Variables for Matrices and Linear Algebra
dodecahedron_graph61.2.1 Building graphs
domain9.2 Functions and Variables for Simplification
domxexpt23.2 Functions and Variables for Matrices and Linear Algebra
domxmxops23.2 Functions and Variables for Matrices and Linear Algebra
domxnctimes23.2 Functions and Variables for Matrices and Linear Algebra
dontfactor23.2 Functions and Variables for Matrices and Linear Algebra
doscmxops23.2 Functions and Variables for Matrices and Linear Algebra
doscmxplus23.2 Functions and Variables for Matrices and Linear Algebra
dot0nscsimp23.2 Functions and Variables for Matrices and Linear Algebra
dot0simp23.2 Functions and Variables for Matrices and Linear Algebra
dot1simp23.2 Functions and Variables for Matrices and Linear Algebra
dotassoc23.2 Functions and Variables for Matrices and Linear Algebra
dotconstrules23.2 Functions and Variables for Matrices and Linear Algebra
dotdistrib23.2 Functions and Variables for Matrices and Linear Algebra
dotexptsimp23.2 Functions and Variables for Matrices and Linear Algebra
dotident23.2 Functions and Variables for Matrices and Linear Algebra
dotproduct68.2 Functions and Variables for linearalgebra
dotscrules23.2 Functions and Variables for Matrices and Linear Algebra
dotsimp24.2 Functions and Variables for Affine
dpart6.5 Functions and Variables for Expressions
draw52.2.2 Functions
draw2d52.2.2 Functions
draw3d52.2.2 Functions
draw_graph61.2.5 Visualization
draw_graph_program61.2.5 Visualization
draw_realpart52.2.3 Graphic options
drawdf53.2.1 Functions
drawf_ile52.2.2 Functions
dscalar18.1 Functions and Variables for Differentiation
dscalar26.2.7 Miscellaneous features

E
echelon23.2 Functions and Variables for Matrices and Linear Algebra
edge_color61.2.5 Visualization
edge_coloring61.2.2 Graph properties
edge_connectivity61.2.2 Graph properties
edge_partition61.2.5 Visualization
edge_type61.2.5 Visualization
edge_width61.2.5 Visualization
edges61.2.2 Graph properties
eigens_by_jacobi68.2 Functions and Variables for linearalgebra
eigenvalues23.2 Functions and Variables for Matrices and Linear Algebra
eigenvectors23.2 Functions and Variables for Matrices and Linear Algebra
eighth5.5.2 Functions and Variables for Lists
einstein26.2.2 The tensors of curved space
eivals23.2 Functions and Variables for Matrices and Linear Algebra
eivects23.2 Functions and Variables for Matrices and Linear Algebra
elapsed_real_time32.3 Functions and Variables for Runtime Environment
elapsed_run_time32.3 Functions and Variables for Runtime Environment
ele2comp30.2.1 Changing bases
ele2polynome30.2.5 Polynomials and their roots
ele2pui30.2.1 Changing bases
elem30.2.1 Changing bases
elementp35.2 Functions and Variables for Sets
elevation12.4 Plotting Options
elevation54.3.1 Scene options
elevation_grid52.2.4 Graphics objects
elim85.1 Functions and Variables for to_poly_solve
elim_allbut85.1 Functions and Variables for to_poly_solve
eliminate14.2 Functions and Variables for Polynomials
eliminate_using85.1 Functions and Variables for to_poly_solve
ellipse52.2.4 Graphics objects
elliptic_e16.3 Functions and Variables for Elliptic Integrals
elliptic_ec16.3 Functions and Variables for Elliptic Integrals
elliptic_eu16.3 Functions and Variables for Elliptic Integrals
elliptic_f16.3 Functions and Variables for Elliptic Integrals
elliptic_kc16.3 Functions and Variables for Elliptic Integrals
elliptic_pi16.3 Functions and Variables for Elliptic Integrals
ematrix23.2 Functions and Variables for Matrices and Linear Algebra
empty_graph61.2.1 Building graphs
emptyp35.2 Functions and Variables for Sets
encode_time32.3 Functions and Variables for Runtime Environment
endcons5.5.2 Functions and Variables for Lists
endphi54.3.3 Scene object's options
endtheta54.3.3 Scene object's options
engineering_format_floats55.1 Functions and Variables for engineering-format
enhanced3d52.2.3 Graphic options
entermatrix23.2 Functions and Variables for Matrices and Linear Algebra
entertensor25.2.1 Managing indexed objects
entier10.1 Functions for Numbers
epsilon_lp79.2 Functions and Variables for simplex
equal11.4 Functions and Variables for Predicates
equalp28.5 Functions and Variables for Fourier series
equiv_classes35.2 Functions and Variables for Sets
erf15.6 Error Function
erf_generalized15.6 Error Function
erf_representation15.6 Error Function
erfc15.6 Error Function
erfflag19.2 Functions and Variables for Integration
erfi15.6 Error Function
errcatch37.4 Functions and Variables for Program Flow
error37.4 Functions and Variables for Program Flow
error37.4 Functions and Variables for Program Flow
error_size37.4 Functions and Variables for Program Flow
error_syms37.4 Functions and Variables for Program Flow
error_type52.2.3 Graphic options
errormsg37.4 Functions and Variables for Program Flow
errors52.2.4 Graphics objects
euler29.1 Functions and Variables for Number Theory
ev8.1 Functions and Variables for Evaluation
ev_point87.4 Variables related to the modular test
eval8.1 Functions and Variables for Evaluation
eval_string84.4 String Processing
even11.2 Functions and Variables for Properties
evenfun9.2 Functions and Variables for Simplification
evenp5.1.2 Functions and Variables for Numbers
every35.2 Functions and Variables for Sets
evflag8.1 Functions and Variables for Evaluation
evfun8.1 Functions and Variables for Evaluation
evolution54.2 Graphical analysis of discrete dynamical systems
evolution2d54.2 Graphical analysis of discrete dynamical systems
evundiff25.2.3 Indicial tensor calculus
example3.2 Functions and Variables for Help
exp10.4 Root, Exponential and Logarithmic Functions
expand9.2 Functions and Variables for Simplification
expandwrt9.2 Functions and Variables for Simplification
expandwrt_denom9.2 Functions and Variables for Simplification
expandwrt_factored9.2 Functions and Variables for Simplification
expintegral_chi15.5 Exponential Integrals
expintegral_ci15.5 Exponential Integrals
expintegral_e15.5 Exponential Integrals
expintegral_e115.5 Exponential Integrals
expintegral_e_simplify48.2 Functions and Variables for contrib_ode
expintegral_ei15.5 Exponential Integrals
expintegral_li15.5 Exponential Integrals
expintegral_shi15.5 Exponential Integrals
expintegral_si15.5 Exponential Integrals
expintexpand15.5 Exponential Integrals
expintrep15.5 Exponential Integrals
explicit52.2.4 Graphics objects
explose30.2.2 Changing representations
expon9.2 Functions and Variables for Simplification
exponentialize9.2 Functions and Variables for Simplification
exponentialize9.2 Functions and Variables for Simplification
expop9.2 Functions and Variables for Simplification
express18.1 Functions and Variables for Differentiation
expt4.3 Functions and Variables for Display
exptdispflag4.3 Functions and Variables for Display
exptisolate6.5 Functions and Variables for Expressions
exptsubst6.5 Functions and Variables for Expressions
exsec80.4 Package functs
extdiff25.2.7 Exterior algebra
extract_linear_equations24.2 Functions and Variables for Affine
extremal_subset35.2 Functions and Variables for Sets
ezgcd14.2 Functions and Variables for Polynomials

F
f9057.1 Functions and Variables for f90
facexpand14.2 Functions and Variables for Polynomials
facsum80.3 Package facexp
facsum_combine80.3 Package facexp
factcomb10.3 Combinatorial Functions
factlim10.3 Combinatorial Functions
factor14.2 Functions and Variables for Polynomials
factorfacsum80.3 Package facexp
factorflag14.2 Functions and Variables for Polynomials
factorial10.3 Combinatorial Functions
factorial_expand10.3 Combinatorial Functions
factorout14.2 Functions and Variables for Polynomials
factors_only29.1 Functions and Variables for Number Theory
factorsum14.2 Functions and Variables for Polynomials
facts11.3 Functions and Variables for Facts
false5.4 Functions and Variables for Constants
fast_central_elements24.2 Functions and Variables for Affine
fast_linsolve24.2 Functions and Variables for Affine
fasttimes14.2 Functions and Variables for Polynomials
fb26.2.9 Variables used by ctensor
feature11.2 Functions and Variables for Properties
featurep11.2 Functions and Variables for Properties
features11.2 Functions and Variables for Properties
fernfale59.2 Definitions for IFS fractals
fft22.2 Functions and Variables for fast Fourier transform
fib29.1 Functions and Variables for Number Theory
fibtophi29.1 Functions and Variables for Number Theory
fifth5.5.2 Functions and Variables for Lists
file_name52.2.3 Graphic options
file_name61.2.5 Visualization
file_output_append13.3 Functions and Variables for File Input and Output
file_search13.3 Functions and Variables for File Input and Output
file_search_demo13.3 Functions and Variables for File Input and Output
file_search_lisp13.3 Functions and Variables for File Input and Output
file_search_maxima13.3 Functions and Variables for File Input and Output
file_search_tests13.3 Functions and Variables for File Input and Output
file_search_usage13.3 Functions and Variables for File Input and Output
file_type13.3 Functions and Variables for File Input and Output
file_type_lisp13.3 Functions and Variables for File Input and Output
file_type_maxima13.3 Functions and Variables for File Input and Output
filename_merge13.3 Functions and Variables for File Input and Output
fill_color52.2.3 Graphic options
fill_density52.2.3 Graphic options
fillarray5.7 Functions and Variables for Arrays
filled_func52.2.3 Graphic options
find_root22.3 Functions for numerical solution of equations
find_root22.3 Functions for numerical solution of equations
find_root_abs22.3 Functions for numerical solution of equations
find_root_error22.3 Functions for numerical solution of equations
find_root_rel22.3 Functions for numerical solution of equations
findde26.2.7 Miscellaneous features
first5.5.2 Functions and Variables for Lists
firstn5.5.2 Functions and Variables for Lists
fix10.1 Functions for Numbers
fixed_vertices61.2.5 Visualization
flatten35.2 Functions and Variables for Sets
flength84.2 Input and Output
flipflag25.2.1 Managing indexed objects
float5.1.2 Functions and Variables for Numbers
float2bf5.1.2 Functions and Variables for Numbers
floatnump5.1.2 Functions and Variables for Numbers
floor10.1 Functions for Numbers
flower_snark61.2.1 Building graphs
flush25.2.3 Indicial tensor calculus
flush1deriv25.2.3 Indicial tensor calculus
flush_output84.2 Input and Output
flushd25.2.3 Indicial tensor calculus
flushnd25.2.3 Indicial tensor calculus
fmin_cobyla47.2 Functions and Variables for cobyla
font52.2.3 Graphic options
font_size52.2.3 Graphic options
for37.4 Functions and Variables for Program Flow
forget11.3 Functions and Variables for Facts
fortindent13.5 Functions and Variables for Fortran Output
fortran13.5 Functions and Variables for Fortran Output
fortspaces13.5 Functions and Variables for Fortran Output
fourcos28.5 Functions and Variables for Fourier series
fourexpand28.5 Functions and Variables for Fourier series
fourier28.5 Functions and Variables for Fourier series
fourier_elim85.1 Functions and Variables for to_poly_solve
fourint28.5 Functions and Variables for Fourier series
fourintcos28.5 Functions and Variables for Fourier series
fourintsin28.5 Functions and Variables for Fourier series
foursimp28.5 Functions and Variables for Fourier series
foursin28.5 Functions and Variables for Fourier series
fourth5.5.2 Functions and Variables for Lists
fposition84.2 Input and Output
fpprec5.1.2 Functions and Variables for Numbers
fpprintprec5.1.2 Functions and Variables for Numbers
frame_bracket26.2.4 Frame fields
freeof6.5 Functions and Variables for Expressions
freshline84.2 Input and Output
fresnel_c15.6 Error Function
fresnel_s15.6 Error Function
from37.4 Functions and Variables for Program Flow
from_adjacency_matrix61.2.1 Building graphs
frucht_graph61.2.1 Building graphs
full_listify35.2 Functions and Variables for Sets
fullmap36.4 Functions and Variables for Function Definition
fullmapl36.4 Functions and Variables for Function Definition
fullratsimp14.2 Functions and Variables for Polynomials
fullratsubst14.2 Functions and Variables for Polynomials
fullsetify35.2 Functions and Variables for Sets
funcsolve20.1 Functions and Variables for Equations
functions36.4 Functions and Variables for Function Definition
fundamental_dimensions56.3 Functions and Variables for ezunits
fundamental_units56.3 Functions and Variables for ezunits
fundef36.4 Functions and Variables for Function Definition
funmake36.4 Functions and Variables for Function Definition
funp28.5 Functions and Variables for Fourier series
fv58.2 Functions and Variables for finance

G
gamma15.4 Gamma and factorial Functions
gamma_expand15.4 Gamma and factorial Functions
gamma_greek15.4 Gamma and factorial Functions
gamma_incomplete15.4 Gamma and factorial Functions
gamma_incomplete_generalized15.4 Gamma and factorial Functions
gamma_incomplete_regularized15.4 Gamma and factorial Functions
gammalim15.4 Gamma and factorial Functions
gauss_a48.2 Functions and Variables for contrib_ode
gauss_b48.2 Functions and Variables for contrib_ode
gaussprob80.4 Package functs
gcd14.2 Functions and Variables for Polynomials
gcdex14.2 Functions and Variables for Polynomials
gcdivide80.4 Package functs
gcfac80.7 Package scifac
gcfactor14.2 Functions and Variables for Polynomials
gd80.4 Package functs
gdet26.2.9 Variables used by ctensor
gen_laguerre76.2 Functions and Variables for orthogonal polynomials
generalized_lambert_w15.10 Functions and Variables for Special Functions
genfact10.3 Combinatorial Functions
genindex33.3 Functions and Variables for Miscellaneous Options
genmatrix23.2 Functions and Variables for Matrices and Linear Algebra
gensumnum33.3 Functions and Variables for Miscellaneous Options
gensym33.3 Functions and Variables for Miscellaneous Options
geo_amortization58.2 Functions and Variables for finance
geo_annuity_fv58.2 Functions and Variables for finance
geo_annuity_pv58.2 Functions and Variables for finance
geomap52.4.2 Graphic objects
geometric80.4 Package functs
geometric_mean49.3 Functions and Variables for descriptive statistics
geomview_command12.3 Functions and Variables for Plotting
geosum80.4 Package functs
get11.2 Functions and Variables for Properties
get_edge_weight61.2.2 Graph properties
get_lu_factors68.2 Functions and Variables for linearalgebra
get_output_stream_string84.2 Input and Output
get_pixel52.3 Functions and Variables for pictures
get_plot_option12.3 Functions and Variables for Plotting
get_tex_environment13.4 Functions and Variables for TeX Output
get_tex_environment_default13.4 Functions and Variables for TeX Output
get_vertex_label61.2.2 Graph properties
getcurrentdirectory74.2 Directory operations
getenv74.4 Environment operations
gfactor14.2 Functions and Variables for Polynomials
gfactorsum14.2 Functions and Variables for Polynomials
ggf60.1 Functions and Variables for ggf
GGFCFMAX60.1 Functions and Variables for ggf
GGFINFINITY60.1 Functions and Variables for ggf
girth61.2.2 Graph properties
global_variances49.3 Functions and Variables for descriptive statistics
globalsolve20.1 Functions and Variables for Equations
gnuplot_close12.6 Gnuplot_pipes Format Functions
gnuplot_command12.3 Functions and Variables for Plotting
gnuplot_curve_styles12.5 Gnuplot Options
gnuplot_curve_titles12.5 Gnuplot Options
gnuplot_default_term_command12.5 Gnuplot Options
gnuplot_dumb_term_command12.5 Gnuplot Options
gnuplot_file_args12.3 Functions and Variables for Plotting
gnuplot_file_name52.2.3 Graphic options
gnuplot_out_file12.5 Gnuplot Options
gnuplot_pdf_term_command12.5 Gnuplot Options
gnuplot_pm3d12.5 Gnuplot Options
gnuplot_png_term_command12.5 Gnuplot Options
gnuplot_postamble12.5 Gnuplot Options
gnuplot_preamble12.5 Gnuplot Options
gnuplot_ps_term_command12.5 Gnuplot Options
gnuplot_replot12.6 Gnuplot_pipes Format Functions
gnuplot_reset12.6 Gnuplot_pipes Format Functions
gnuplot_restart12.6 Gnuplot_pipes Format Functions
gnuplot_start12.6 Gnuplot_pipes Format Functions
gnuplot_svg_term_command12.5 Gnuplot Options
gnuplot_term12.5 Gnuplot Options
gnuplot_view_args12.3 Functions and Variables for Plotting
go37.4 Functions and Variables for Program Flow
Gosper87.2 Functions and Variables for zeilberger
Gosper_in_Zeilberger87.3 General global variables
GosperSum87.2 Functions and Variables for zeilberger
gr2d52.2.1 Scenes
gr3d52.2.1 Scenes
gradef18.1 Functions and Variables for Differentiation
gradefs18.1 Functions and Variables for Differentiation
gramschmidt23.2 Functions and Variables for Matrices and Linear Algebra
gramschmidt23.2 Functions and Variables for Matrices and Linear Algebra
graph6_decode61.2.4 Reading and writing to files
graph6_encode61.2.4 Reading and writing to files
graph6_export61.2.4 Reading and writing to files
graph6_import61.2.4 Reading and writing to files
graph_center61.2.2 Graph properties
graph_charpoly61.2.2 Graph properties
graph_eigenvalues61.2.2 Graph properties
graph_flow58.2 Functions and Variables for finance
graph_order61.2.2 Graph properties
graph_periphery61.2.2 Graph properties
graph_product61.2.1 Building graphs
graph_size61.2.2 Graph properties
graph_union61.2.1 Building graphs
great_rhombicosidodecahedron_graph61.2.1 Building graphs
great_rhombicuboctahedron_graph61.2.1 Building graphs
grid12.4 Plotting Options
grid52.2.3 Graphic options
grid2d12.4 Plotting Options
grid_graph61.2.1 Building graphs
grind4.3 Functions and Variables for Display
grobner_basis24.2 Functions and Variables for Affine
grotzch_graph61.2.1 Building graphs

H
halfangles10.5.2 Functions and Variables for Trigonometric
hamilton_cycle61.2.2 Graph properties
hamilton_path61.2.2 Graph properties
hankel68.2 Functions and Variables for linearalgebra
hankel_115.2 Bessel Functions
hankel_215.2 Bessel Functions
harmonic80.4 Package functs
harmonic_mean49.3 Functions and Variables for descriptive statistics
hav80.4 Package functs
head_angle52.2.3 Graphic options
head_angle61.2.5 Visualization
head_both52.2.3 Graphic options
head_length52.2.3 Graphic options
head_length61.2.5 Visualization
head_type52.2.3 Graphic options
heawood_graph61.2.1 Building graphs
height54.3.1 Scene options
height54.3.3 Scene object's options
hermite76.2 Functions and Variables for orthogonal polynomials
hessian68.2 Functions and Variables for linearalgebra
hgfred15.10 Functions and Variables for Special Functions
hilbert_matrix68.2 Functions and Variables for linearalgebra
hilbertmap59.5 Definitions for Peano maps
hipow14.2 Functions and Variables for Polynomials
histogram49.4 Functions and Variables for statistical graphs
histogram_description49.4 Functions and Variables for statistical graphs
hodge25.2.7 Exterior algebra
horner22.3 Functions for numerical solution of equations
hypergeometric15.8 Hypergeometric Functions
hypergeometric_representation15.6 Error Function
hypergeometric_simp15.10 Functions and Variables for Special Functions

I
ibase4.3 Functions and Variables for Display
ic121.2 Functions and Variables for Differential Equations
ic221.2 Functions and Variables for Differential Equations
ic_convert25.2.9 Interfacing with ctensor
icc125.2.5 Moving frames
icc225.2.5 Moving frames
ichr125.2.4 Tensors in curved spaces
ichr225.2.4 Tensors in curved spaces
icosahedron_graph61.2.1 Building graphs
icosidodecahedron_graph61.2.1 Building graphs
icounter25.2.1 Managing indexed objects
icurvature25.2.4 Tensors in curved spaces
ident23.2 Functions and Variables for Matrices and Linear Algebra
identfor68.2 Functions and Variables for linearalgebra
identity35.2 Functions and Variables for Sets
idiff25.2.3 Indicial tensor calculus
idim25.2.4 Tensors in curved spaces
idummy25.2.1 Managing indexed objects
idummyx25.2.1 Managing indexed objects
ieqn20.1 Functions and Variables for Equations
ieqnprint20.1 Functions and Variables for Equations
if37.4 Functions and Variables for Program Flow
ifactors29.1 Functions and Variables for Number Theory
ifb25.2.5 Moving frames
ifc125.2.5 Moving frames
ifc225.2.5 Moving frames
ifg25.2.5 Moving frames
ifgi25.2.5 Moving frames
ifr25.2.5 Moving frames
iframe_bracket_form25.2.5 Moving frames
iframes25.2.5 Moving frames
ifri25.2.5 Moving frames
ifs54.2 Graphical analysis of discrete dynamical systems
igcdex29.1 Functions and Variables for Number Theory
igeodesic_coords25.2.4 Tensors in curved spaces
igeowedge_flag25.2.7 Exterior algebra
ikt125.2.6 Torsion and nonmetricity
ikt225.2.6 Torsion and nonmetricity
ilt19.2 Functions and Variables for Integration
image52.2.4 Graphics objects
imaginary11.2 Functions and Variables for Properties
imagpart10.2 Functions for Complex Numbers
imetric25.2.4 Tensors in curved spaces
imetric25.2.4 Tensors in curved spaces
implicit52.2.4 Graphics objects
implicit_derivative63.1 Functions and Variables for impdiff
implicit_plot12.3 Functions and Variables for Plotting
in37.4 Functions and Variables for Program Flow
in_neighbors61.2.2 Graph properties
inchar4.2 Functions and Variables for Command Line
increasing11.2 Functions and Variables for Properties
ind5.4 Functions and Variables for Constants
indexed_tensor25.2.1 Managing indexed objects
indices25.2.1 Managing indexed objects
induced_subgraph61.2.1 Building graphs
inf5.4 Functions and Variables for Constants
inference_result82.2 Functions and Variables for inference_result
inferencep82.2 Functions and Variables for inference_result
infeval8.1 Functions and Variables for Evaluation
infinity5.4 Functions and Variables for Constants
infix7.7 User defined operators
inflag6.5 Functions and Variables for Expressions
info_display39.2 Functions and Variables for alt-display
infolists4.2 Functions and Variables for Command Line
init_atensor27.2 Functions and Variables for atensor
init_ctensor26.2.1 Initialization and setup
inm25.2.6 Torsion and nonmetricity
inmc125.2.6 Torsion and nonmetricity
inmc225.2.6 Torsion and nonmetricity
innerproduct23.2 Functions and Variables for Matrices and Linear Algebra
inpart6.5 Functions and Variables for Expressions
inprod23.2 Functions and Variables for Matrices and Linear Algebra
inrt29.1 Functions and Variables for Number Theory
intanalysis19.2 Functions and Variables for Integration
integer11.2 Functions and Variables for Properties
integer_partitions35.2 Functions and Variables for Sets
integerp5.1.2 Functions and Variables for Numbers
integervalued11.2 Functions and Variables for Properties
integrate19.2 Functions and Variables for Integration
integrate_use_rootsof19.2 Functions and Variables for Integration
integration_constant19.2 Functions and Variables for Integration
integration_constant_counter19.2 Functions and Variables for Integration
interpolate_color52.2.3 Graphic options
intersect35.2 Functions and Variables for Sets
intersection35.2 Functions and Variables for Sets
intervalp76.2 Functions and Variables for orthogonal polynomials
intfaclim14.2 Functions and Variables for Polynomials
intopois28.6 Functions and Variables for Poisson series
intosum28.1 Functions and Variables for Sums and Products
inv_mod29.1 Functions and Variables for Number Theory
invariant126.2.7 Miscellaneous features
invariant226.2.7 Miscellaneous features
inverse_fft22.2 Functions and Variables for fast Fourier transform
inverse_jacobi_cd16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_cn16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_cs16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_dc16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_dn16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_ds16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_nc16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_nd16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_ns16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_sc16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_sd16.2 Functions and Variables for Elliptic Functions
inverse_jacobi_sn16.2 Functions and Variables for Elliptic Functions
inverse_real_fft22.2 Functions and Variables for fast Fourier transform
invert23.2 Functions and Variables for Matrices and Linear Algebra
invert_by_adjoint23.2 Functions and Variables for Matrices and Linear Algebra
invert_by_lu68.2 Functions and Variables for linearalgebra
ip_grid52.2.3 Graphic options
ip_grid_in52.2.3 Graphic options
irr58.2 Functions and Variables for finance
irrational11.2 Functions and Variables for Properties
is11.3 Functions and Variables for Facts
is_biconnected61.2.2 Graph properties
is_bipartite61.2.2 Graph properties
is_connected61.2.2 Graph properties
is_digraph61.2.2 Graph properties
is_edge_in_graph61.2.2 Graph properties
is_graph61.2.2 Graph properties
is_graph_or_digraph61.2.2 Graph properties
is_isomorphic61.2.2 Graph properties
is_planar61.2.2 Graph properties
is_sconnected61.2.2 Graph properties
is_tree61.2.2 Graph properties
is_vertex_in_graph61.2.2 Graph properties
ishow25.2.1 Managing indexed objects
isolate6.5 Functions and Variables for Expressions
isolate_wrt_times6.5 Functions and Variables for Expressions
isomorphism61.2.2 Graph properties
isqrt29.1 Functions and Variables for Number Theory
isreal_p85.1 Functions and Variables for to_poly_solve
items_inference82.2 Functions and Variables for inference_result
iterations12.4 Plotting Options
itr25.2.6 Torsion and nonmetricity

J
jacobi29.1 Functions and Variables for Number Theory
jacobi_cd16.2 Functions and Variables for Elliptic Functions
jacobi_cn16.2 Functions and Variables for Elliptic Functions
jacobi_cs16.2 Functions and Variables for Elliptic Functions
jacobi_dc16.2 Functions and Variables for Elliptic Functions
jacobi_dn16.2 Functions and Variables for Elliptic Functions
jacobi_ds16.2 Functions and Variables for Elliptic Functions
jacobi_nc16.2 Functions and Variables for Elliptic Functions
jacobi_nd16.2 Functions and Variables for Elliptic Functions
jacobi_ns16.2 Functions and Variables for Elliptic Functions
jacobi_p76.2 Functions and Variables for orthogonal polynomials
jacobi_sc16.2 Functions and Variables for Elliptic Functions
jacobi_sd16.2 Functions and Variables for Elliptic Functions
jacobi_sn16.2 Functions and Variables for Elliptic Functions
jacobian68.2 Functions and Variables for linearalgebra
JF50.1 Functions and Variables for diag
join5.5.2 Functions and Variables for Lists
jordan50.1 Functions and Variables for diag
julia12.3 Functions and Variables for Plotting
julia_parameter59.3 Definitions for complex fractals
julia_set59.3 Definitions for complex fractals
julia_sin59.3 Definitions for complex fractals

K
kdels25.2.1 Managing indexed objects
kdelta25.2.1 Managing indexed objects
keepfloat14.2 Functions and Variables for Polynomials
key52.2.3 Graphic options
key_pos52.2.3 Graphic options
kill4.2 Functions and Variables for Command Line
killcontext11.3 Functions and Variables for Facts
kinvariant26.2.9 Variables used by ctensor
km49.3 Functions and Variables for descriptive statistics
kostka30.2.4 Partitions
kron_delta35.2 Functions and Variables for Sets
kronecker_product68.2 Functions and Variables for linearalgebra
kt26.2.9 Variables used by ctensor
kummer_m48.2 Functions and Variables for contrib_ode
kummer_u48.2 Functions and Variables for contrib_ode
kurtosis49.3 Functions and Variables for descriptive statistics
kurtosis_bernoulli51.3 Functions and Variables for discrete distributions
kurtosis_beta51.2 Functions and Variables for continuous distributions
kurtosis_binomial51.3 Functions and Variables for discrete distributions
kurtosis_chi251.2 Functions and Variables for continuous distributions
kurtosis_continuous_uniform51.2 Functions and Variables for continuous distributions
kurtosis_discrete_uniform51.3 Functions and Variables for discrete distributions
kurtosis_exp51.2 Functions and Variables for continuous distributions
kurtosis_f51.2 Functions and Variables for continuous distributions
kurtosis_gamma51.2 Functions and Variables for continuous distributions
kurtosis_general_finite_discrete51.3 Functions and Variables for discrete distributions
kurtosis_geometric51.3 Functions and Variables for discrete distributions
kurtosis_gumbel51.2 Functions and Variables for continuous distributions
kurtosis_hypergeometric51.3 Functions and Variables for discrete distributions
kurtosis_laplace51.2 Functions and Variables for continuous distributions
kurtosis_logistic51.2 Functions and Variables for continuous distributions
kurtosis_lognormal51.2 Functions and Variables for continuous distributions
kurtosis_negative_binomial51.3 Functions and Variables for discrete distributions
kurtosis_noncentral_chi251.2 Functions and Variables for continuous distributions
kurtosis_noncentral_student_t51.2 Functions and Variables for continuous distributions
kurtosis_normal51.2 Functions and Variables for continuous distributions
kurtosis_pareto51.2 Functions and Variables for continuous distributions
kurtosis_poisson51.3 Functions and Variables for discrete distributions
kurtosis_rayleigh51.2 Functions and Variables for continuous distributions
kurtosis_student_t51.2 Functions and Variables for continuous distributions
kurtosis_weibull51.2 Functions and Variables for continuous distributions

L
label52.2.4 Graphics objects
label_alignment52.2.3 Graphic options
label_alignment61.2.5 Visualization
label_orientation52.2.3 Graphic options
labels4.2 Functions and Variables for Command Line
lagrange64.2 Functions and Variables for interpol
laguerre76.2 Functions and Variables for orthogonal polynomials
lambda36.4 Functions and Variables for Function Definition
lambert_w15.10 Functions and Variables for Special Functions
laplace18.1 Functions and Variables for Differentiation
laplacian_matrix61.2.2 Graph properties
lassociative9.2 Functions and Variables for Simplification
last5.5.2 Functions and Variables for Lists
lastn5.5.2 Functions and Variables for Lists
lbfgs66.2 Functions and Variables for lbfgs
lbfgs_ncorrections66.2 Functions and Variables for lbfgs
lbfgs_nfeval_max66.2 Functions and Variables for lbfgs
lc2kdt25.2.1 Managing indexed objects
lc_l25.2.1 Managing indexed objects
lc_u25.2.1 Managing indexed objects
lcm29.1 Functions and Variables for Number Theory
ldefint19.2 Functions and Variables for Integration
ldisp4.3 Functions and Variables for Display
ldisplay4.3 Functions and Variables for Display
leftjust4.3 Functions and Variables for Display
legend12.4 Plotting Options
legendre_p76.2 Functions and Variables for orthogonal polynomials
legendre_q76.2 Functions and Variables for orthogonal polynomials
leinstein26.2.2 The tensors of curved space
length5.5.2 Functions and Variables for Lists
let34.2 Functions and Variables for Rules and Patterns
let_rule_packages34.2 Functions and Variables for Rules and Patterns
letrat34.2 Functions and Variables for Rules and Patterns
letrules34.2 Functions and Variables for Rules and Patterns
letsimp34.2 Functions and Variables for Rules and Patterns
levi_civita25.2.1 Managing indexed objects
lfg26.2.9 Variables used by ctensor
lfreeof6.5 Functions and Variables for Expressions
lg26.2.9 Variables used by ctensor
lgtreillis30.2.4 Partitions
lhospitallim17.1 Functions and Variables for Limits
lhs20.1 Functions and Variables for Equations
li10.4 Root, Exponential and Logarithmic Functions
liediff25.2.3 Indicial tensor calculus
limit17.1 Functions and Variables for Limits
limsubst17.1 Functions and Variables for Limits
Lindstedt67.1 Functions and Variables for lindstedt
line_graph61.2.1 Building graphs
line_type52.2.3 Graphic options
line_width52.2.3 Graphic options
linear80.4 Package functs
linear_program79.2 Functions and Variables for simplex
linear_regression82.3 Functions and Variables for stats
linear_solver87.3 General global variables
linearinterpol64.2 Functions and Variables for interpol
linechar4.2 Functions and Variables for Command Line
linel4.3 Functions and Variables for Display
linenum4.2 Functions and Variables for Command Line
linewidth54.3.3 Scene object's options
linsolve20.1 Functions and Variables for Equations
linsolve_params20.1 Functions and Variables for Equations
linsolvewarn20.1 Functions and Variables for Equations
lispdisp4.3 Functions and Variables for Display
list_correlations49.3 Functions and Variables for descriptive statistics
list_matrix_entries23.2 Functions and Variables for Matrices and Linear Algebra
list_nc_monomials24.2 Functions and Variables for Affine
listarith5.5.2 Functions and Variables for Lists
listarray5.7 Functions and Variables for Arrays
listconstvars6.5 Functions and Variables for Expressions
listdummyvars6.5 Functions and Variables for Expressions
listify35.2 Functions and Variables for Sets
listoftens25.2.1 Managing indexed objects
listofvars6.5 Functions and Variables for Expressions
listp5.5.2 Functions and Variables for Lists
listp68.2 Functions and Variables for linearalgebra
lmax10.1 Functions for Numbers
lmin10.1 Functions for Numbers
lmxchar23.2 Functions and Variables for Matrices and Linear Algebra
load13.3 Functions and Variables for File Input and Output
load_pathname13.3 Functions and Variables for File Input and Output
loadfile13.3 Functions and Variables for File Input and Output
loadprint13.3 Functions and Variables for File Input and Output
local36.4 Functions and Variables for Function Definition
locate_matrix_entry68.2 Functions and Variables for linearalgebra
log10.4 Root, Exponential and Logarithmic Functions
log_gamma15.4 Gamma and factorial Functions
logabs10.4 Root, Exponential and Logarithmic Functions
logarc10.4 Root, Exponential and Logarithmic Functions
logarc10.4 Root, Exponential and Logarithmic Functions
logcb52.2.3 Graphic options
logconcoeffp10.4 Root, Exponential and Logarithmic Functions
logcontract10.4 Root, Exponential and Logarithmic Functions
logexpand10.4 Root, Exponential and Logarithmic Functions
lognegint10.4 Root, Exponential and Logarithmic Functions
logsimp10.4 Root, Exponential and Logarithmic Functions
logx12.4 Plotting Options
logx52.2.3 Graphic options
logx_secondary52.2.3 Graphic options
logy12.4 Plotting Options
logy52.2.3 Graphic options
logy_secondary52.2.3 Graphic options
logz52.2.3 Graphic options
lopow14.2 Functions and Variables for Polynomials
lorentz_gauge25.2.4 Tensors in curved spaces
lowercasep84.3 Characters
lpart6.5 Functions and Variables for Expressions
lratsubst14.2 Functions and Variables for Polynomials
lreduce5.5.2 Functions and Variables for Lists
lriem26.2.9 Variables used by ctensor
lriemann26.2.2 The tensors of curved space
lsquares_estimates69.2 Functions and Variables for lsquares
lsquares_estimates_approximate69.2 Functions and Variables for lsquares
lsquares_estimates_exact69.2 Functions and Variables for lsquares
lsquares_mse69.2 Functions and Variables for lsquares
lsquares_residual_mse69.2 Functions and Variables for lsquares
lsquares_residuals69.2 Functions and Variables for lsquares
lsum28.1 Functions and Variables for Sums and Products
ltreillis30.2.4 Partitions
lu_backsub68.2 Functions and Variables for linearalgebra
lu_factor68.2 Functions and Variables for linearalgebra
lucas29.1 Functions and Variables for Number Theory

M
m1pbranch5.1.2 Functions and Variables for Numbers
macroexpand36.3 Macros
macroexpand136.3 Macros
macroexpansion36.4 Functions and Variables for Function Definition
macros36.3 Macros
mainvar6.5 Functions and Variables for Expressions
make_array5.7 Functions and Variables for Arrays
make_graph61.2.1 Building graphs
make_level_picture52.3 Functions and Variables for pictures
make_poly_continent52.4.1 Variable and Functions
make_poly_country52.4.1 Variable and Functions
make_polygon52.4.1 Variable and Functions
make_random_state10.6 Random Numbers
make_rgb_picture52.3 Functions and Variables for pictures
make_string_input_stream84.2 Input and Output
make_string_output_stream84.2 Input and Output
make_transform12.3 Functions and Variables for Plotting
makebox25.2.3 Indicial tensor calculus
makefact15.4 Gamma and factorial Functions
makegamma15.4 Gamma and factorial Functions
makelist5.5.2 Functions and Variables for Lists
makeOrders71.1 Functions and Variables for makeOrders
makeset35.2 Functions and Variables for Sets
mandelbrot12.3 Functions and Variables for Plotting
mandelbrot_set59.3 Definitions for complex fractals
manual_demo3.2 Functions and Variables for Help
map37.4 Functions and Variables for Program Flow
mapatom37.4 Functions and Variables for Program Flow
maperror37.4 Functions and Variables for Program Flow
maplist37.4 Functions and Variables for Program Flow
mapprint37.4 Functions and Variables for Program Flow
mat_cond68.2 Functions and Variables for linearalgebra
mat_fullunblocker68.2 Functions and Variables for linearalgebra
mat_function50.1 Functions and Variables for diag
mat_norm68.2 Functions and Variables for linearalgebra
mat_trace68.2 Functions and Variables for linearalgebra
mat_unblocker68.2 Functions and Variables for linearalgebra
matchdeclare34.2 Functions and Variables for Rules and Patterns
matchfix7.7 User defined operators
mathml_display39.2 Functions and Variables for alt-display
matrix23.2 Functions and Variables for Matrices and Linear Algebra
matrix_element_add23.2 Functions and Variables for Matrices and Linear Algebra
matrix_element_mult23.2 Functions and Variables for Matrices and Linear Algebra
matrix_element_transpose23.2 Functions and Variables for Matrices and Linear Algebra
matrix_size68.2 Functions and Variables for linearalgebra
matrixexp23.2 Functions and Variables for Matrices and Linear Algebra
matrixmap23.2 Functions and Variables for Matrices and Linear Algebra
matrixp23.2 Functions and Variables for Matrices and Linear Algebra
matrixp68.2 Functions and Variables for linearalgebra
mattrace23.2 Functions and Variables for Matrices and Linear Algebra
max10.1 Functions for Numbers
max_clique61.2.2 Graph properties
max_degree61.2.2 Graph properties
max_flow61.2.2 Graph properties
max_independent_set61.2.2 Graph properties
max_matching61.2.2 Graph properties
MAX_ORD87.3 General global variables
maxapplydepth34.2 Functions and Variables for Rules and Patterns
maxapplyheight34.2 Functions and Variables for Rules and Patterns
maxima_tempdir32.3 Functions and Variables for Runtime Environment
maxima_userdir32.3 Functions and Variables for Runtime Environment
maximize_lp79.2 Functions and Variables for simplex
maxnegex9.2 Functions and Variables for Simplification
maxposex9.2 Functions and Variables for Simplification
maxpsifracdenom15.4 Gamma and factorial Functions
maxpsifracnum15.4 Gamma and factorial Functions
maxpsinegint15.4 Gamma and factorial Functions
maxpsiposint15.4 Gamma and factorial Functions
maxtayorder28.3 Functions and Variables for Series
maybe11.3 Functions and Variables for Facts
md5sum84.5 Octets and Utilities for Cryptography
mean49.3 Functions and Variables for descriptive statistics
mean_bernoulli51.3 Functions and Variables for discrete distributions
mean_beta51.2 Functions and Variables for continuous distributions
mean_binomial51.3 Functions and Variables for discrete distributions
mean_chi251.2 Functions and Variables for continuous distributions
mean_continuous_uniform51.2 Functions and Variables for continuous distributions
mean_deviation49.3 Functions and Variables for descriptive statistics
mean_discrete_uniform51.3 Functions and Variables for discrete distributions
mean_exp51.2 Functions and Variables for continuous distributions
mean_f51.2 Functions and Variables for continuous distributions
mean_gamma51.2 Functions and Variables for continuous distributions
mean_general_finite_discrete51.3 Functions and Variables for discrete distributions
mean_geometric51.3 Functions and Variables for discrete distributions
mean_gumbel51.2 Functions and Variables for continuous distributions
mean_hypergeometric51.3 Functions and Variables for discrete distributions
mean_laplace51.2 Functions and Variables for continuous distributions
mean_logistic51.2 Functions and Variables for continuous distributions
mean_lognormal51.2 Functions and Variables for continuous distributions
mean_negative_binomial51.3 Functions and Variables for discrete distributions
mean_noncentral_chi251.2 Functions and Variables for continuous distributions
mean_noncentral_student_t51.2 Functions and Variables for continuous distributions
mean_normal51.2 Functions and Variables for continuous distributions
mean_pareto51.2 Functions and Variables for continuous distributions
mean_poisson51.3 Functions and Variables for discrete distributions
mean_rayleigh51.2 Functions and Variables for continuous distributions
mean_student_t51.2 Functions and Variables for continuous distributions
mean_weibull51.2 Functions and Variables for continuous distributions
median49.3 Functions and Variables for descriptive statistics
median_deviation49.3 Functions and Variables for descriptive statistics
member5.5.2 Functions and Variables for Lists
mesh52.2.4 Graphics objects
mesh_lines_color12.4 Plotting Options
method48.2 Functions and Variables for contrib_ode
metricexpandall86.2 Functions and Variables for Units
mgf1_sha184.5 Octets and Utilities for Cryptography
min10.1 Functions for Numbers
min_degree61.2.2 Graph properties
min_edge_cut61.2.2 Graph properties
min_vertex_cover61.2.2 Graph properties
min_vertex_cut61.2.2 Graph properties
minf5.4 Functions and Variables for Constants
minfactorial10.3 Combinatorial Functions
minimalPoly50.1 Functions and Variables for diag
minimize_lp79.2 Functions and Variables for simplex
minimum_spanning_tree61.2.2 Graph properties
minor23.2 Functions and Variables for Matrices and Linear Algebra
minpack_lsquares70.2 Functions and Variables for minpack
minpack_solve70.2 Functions and Variables for minpack
mkdir74.2 Directory operations
mnewton72.2 Functions and Variables for mnewton
mod29.1 Functions and Variables for Number Theory
mod_big_prime87.4 Variables related to the modular test
mod_test87.4 Variables related to the modular test
mod_threshold87.4 Variables related to the modular test
mode_check_errorp36.4 Functions and Variables for Function Definition
mode_check_warnp36.4 Functions and Variables for Function Definition
mode_checkp36.4 Functions and Variables for Function Definition
mode_declare36.4 Functions and Variables for Function Definition
mode_identity36.4 Functions and Variables for Function Definition
ModeMatrix50.1 Functions and Variables for diag
modular_linear_solver87.4 Variables related to the modular test
modulus14.2 Functions and Variables for Polynomials
moebius35.2 Functions and Variables for Sets
mon2schur30.2.1 Changing bases
mono24.2 Functions and Variables for Affine
monomial_dimensions24.2 Functions and Variables for Affine
multi_display_for_texinfo39.2 Functions and Variables for alt-display
multi_elem30.2.1 Changing bases
multi_orbit30.2.3 Groups and orbits
multi_pui30.2.1 Changing bases
multibernstein_poly42.1 Functions and Variables for Bernstein
multinomial30.2.7 Miscellaneous
multinomial_coeff35.2 Functions and Variables for Sets
multiplicative9.2 Functions and Variables for Simplification
multiplicities20.1 Functions and Variables for Equations
multiplot_mode52.2.2 Functions
multsym30.2.3 Groups and orbits
multthru9.2 Functions and Variables for Simplification
mycielski_graph61.2.1 Building graphs
myoptions4.2 Functions and Variables for Command Line

N
nary7.7 User defined operators
natural_unit56.3 Functions and Variables for ezunits
nc_degree24.2 Functions and Variables for Affine
ncexpt4.3 Functions and Variables for Display
ncharpoly23.2 Functions and Variables for Matrices and Linear Algebra
negative_picture52.3 Functions and Variables for pictures
negdistrib9.2 Functions and Variables for Simplification
negsumdispflag4.3 Functions and Variables for Display
neighbors61.2.2 Graph properties
new5.8.2 Functions and Variables for Structures
new_graph61.2.1 Building graphs
new_variable85.1 Functions and Variables for to_poly_solve
newcontext11.3 Functions and Variables for Facts
newdet23.2 Functions and Variables for Matrices and Linear Algebra
newline84.2 Input and Output
newton22.3 Functions for numerical solution of equations
newtonepsilon72.2 Functions and Variables for mnewton
newtonmaxiter72.2 Functions and Variables for mnewton
next37.4 Functions and Variables for Program Flow
next_prime29.1 Functions and Variables for Number Theory
nextlayerfactor80.3 Package facexp
nicedummies85.1 Functions and Variables for to_poly_solve
niceindices28.3 Functions and Variables for Series
niceindicespref28.3 Functions and Variables for Series
ninth5.5.2 Functions and Variables for Lists
nm26.2.9 Variables used by ctensor
nmc26.2.9 Variables used by ctensor
noeval8.1 Functions and Variables for Evaluation
nofix7.7 User defined operators
nolabels4.2 Functions and Variables for Command Line
nonarray11.2 Functions and Variables for Properties
noncentral_moment49.3 Functions and Variables for descriptive statistics
nonegative_lp79.2 Functions and Variables for simplex
noninteger11.2 Functions and Variables for Properties
nonmetricity26.2.6 Torsion and nonmetricity
nonnegintegerp5.1.2 Functions and Variables for Numbers
nonscalar11.2 Functions and Variables for Properties
nonscalarp11.2 Functions and Variables for Properties
nonzeroandfreeof80.4 Package functs
not7.4 Logical operators
notequal11.4 Functions and Variables for Predicates
noun6.5 Functions and Variables for Expressions
noundisp6.5 Functions and Variables for Expressions
nounify6.5 Functions and Variables for Expressions
nouns8.1 Functions and Variables for Evaluation
np26.2.9 Variables used by ctensor
npi26.2.9 Variables used by ctensor
nptetrad26.2.5 Algebraic classification
npv58.2 Functions and Variables for finance
nroots20.1 Functions and Variables for Equations
nterms6.5 Functions and Variables for Expressions
ntermst26.2.8 Utility functions
nthroot20.1 Functions and Variables for Equations
nticks12.4 Plotting Options
nticks52.2.3 Graphic options
ntrig10.5.2 Functions and Variables for Trigonometric
nullity68.2 Functions and Variables for linearalgebra
nullspace68.2 Functions and Variables for linearalgebra
num14.2 Functions and Variables for Polynomials
num_distinct_partitions35.2 Functions and Variables for Sets
num_partitions35.2 Functions and Variables for Sets
number_to_octets84.5 Octets and Utilities for Cryptography
numbered_boundaries52.4.1 Variable and Functions
numberp5.1.2 Functions and Variables for Numbers
numer5.1.2 Functions and Variables for Numbers
numer_pbranch5.1.2 Functions and Variables for Numbers
numerval5.1.2 Functions and Variables for Numbers
numfactor15.4 Gamma and factorial Functions
nusum28.3 Functions and Variables for Series
nzeta15.10 Functions and Variables for Special Functions
nzetai15.10 Functions and Variables for Special Functions
nzetar15.10 Functions and Variables for Special Functions

O
obase4.3 Functions and Variables for Display
octets_to_number84.5 Octets and Utilities for Cryptography
octets_to_oid84.5 Octets and Utilities for Cryptography
octets_to_string84.5 Octets and Utilities for Cryptography
odd11.2 Functions and Variables for Properties
odd_girth61.2.2 Graph properties
oddfun9.2 Functions and Variables for Simplification
oddp5.1.2 Functions and Variables for Numbers
ode221.2 Functions and Variables for Differential Equations
ode_check48.2 Functions and Variables for contrib_ode
odelin48.2 Functions and Variables for contrib_ode
oid_to_octets84.5 Octets and Utilities for Cryptography
op6.5 Functions and Variables for Expressions
opacity54.3.3 Scene object's options
opena84.2 Input and Output
opena_binary73.3 Functions and Variables for binary input and output
openr84.2 Input and Output
openr_binary73.3 Functions and Variables for binary input and output
openw84.2 Input and Output
openw_binary73.3 Functions and Variables for binary input and output
operatorp6.5 Functions and Variables for Expressions
opproperties9.2 Functions and Variables for Simplification
opsubst75.1 Functions and Variables for opsubst
opsubst75.1 Functions and Variables for opsubst
opsubst75.1 Functions and Variables for opsubst
optimize6.5 Functions and Variables for Expressions
optimprefix6.5 Functions and Variables for Expressions
optionset4.2 Functions and Variables for Command Line
or7.4 Logical operators
orbit30.2.3 Groups and orbits
orbits54.2 Graphical analysis of discrete dynamical systems
ordergreat6.5 Functions and Variables for Expressions
ordergreatp6.5 Functions and Variables for Expressions
orderless6.5 Functions and Variables for Expressions
orderlessp6.5 Functions and Variables for Expressions
orientation54.3.3 Scene object's options
origin54.3.3 Scene object's options
orthogonal_complement68.2 Functions and Variables for linearalgebra
orthopoly_recur76.2 Functions and Variables for orthogonal polynomials
orthopoly_returns_intervals76.2 Functions and Variables for orthogonal polynomials
orthopoly_weight76.2 Functions and Variables for orthogonal polynomials
out_neighbors61.2.2 Graph properties
outative9.2 Functions and Variables for Simplification
outchar4.2 Functions and Variables for Command Line
outermap37.4 Functions and Variables for Program Flow
outofpois28.6 Functions and Variables for Poisson series

P
packagefile33.3 Functions and Variables for Miscellaneous Options
pade28.3 Functions and Variables for Series
palette12.4 Plotting Options
palette52.2.3 Graphic options
parabolic_cylinder_d15.9 Parabolic Cylinder Functions
parametric52.2.4 Graphics objects
parametric_surface52.2.4 Graphics objects
parg85.1 Functions and Variables for to_poly_solve
parGosper87.2 Functions and Variables for zeilberger
parse_string84.4 String Processing
parse_timedate32.3 Functions and Variables for Runtime Environment
part6.5 Functions and Variables for Expressions
part2cont30.2.2 Changing representations
partfrac29.1 Functions and Variables for Number Theory
partition6.5 Functions and Variables for Expressions
partition_set35.2 Functions and Variables for Sets
partpol30.2.2 Changing representations
partswitch6.5 Functions and Variables for Expressions
path_digraph61.2.1 Building graphs
path_graph61.2.1 Building graphs
pathname_directory13.3 Functions and Variables for File Input and Output
pathname_name13.3 Functions and Variables for File Input and Output
pathname_type13.3 Functions and Variables for File Input and Output
pdf_bernoulli51.3 Functions and Variables for discrete distributions
pdf_beta51.2 Functions and Variables for continuous distributions
pdf_binomial51.3 Functions and Variables for discrete distributions
pdf_cauchy51.2 Functions and Variables for continuous distributions
pdf_chi251.2 Functions and Variables for continuous distributions
pdf_continuous_uniform51.2 Functions and Variables for continuous distributions
pdf_discrete_uniform51.3 Functions and Variables for discrete distributions
pdf_exp51.2 Functions and Variables for continuous distributions
pdf_f51.2 Functions and Variables for continuous distributions
pdf_file12.4 Plotting Options
pdf_gamma51.2 Functions and Variables for continuous distributions
pdf_general_finite_discrete51.3 Functions and Variables for discrete distributions
pdf_geometric51.3 Functions and Variables for discrete distributions
pdf_gumbel51.2 Functions and Variables for continuous distributions
pdf_hypergeometric51.3 Functions and Variables for discrete distributions
pdf_laplace51.2 Functions and Variables for continuous distributions
pdf_logistic51.2 Functions and Variables for continuous distributions
pdf_lognormal51.2 Functions and Variables for continuous distributions
pdf_negative_binomial51.3 Functions and Variables for discrete distributions
pdf_noncentral_chi251.2 Functions and Variables for continuous distributions
pdf_noncentral_student_t51.2 Functions and Variables for continuous distributions
pdf_normal51.2 Functions and Variables for continuous distributions
pdf_pareto51.2 Functions and Variables for continuous distributions
pdf_poisson51.3 Functions and Variables for discrete distributions
pdf_rank_sum82.4 Functions and Variables for special distributions
pdf_rayleigh51.2 Functions and Variables for continuous distributions
pdf_signed_rank82.4 Functions and Variables for special distributions
pdf_student_t51.2 Functions and Variables for continuous distributions
pdf_weibull51.2 Functions and Variables for continuous distributions
pearson_skewness49.3 Functions and Variables for descriptive statistics
permanent23.2 Functions and Variables for Matrices and Linear Algebra
permut30.2.7 Miscellaneous
permutation80.4 Package functs
permutations35.2 Functions and Variables for Sets
petersen_graph61.2.1 Building graphs
petrov26.2.5 Algebraic classification
pfeformat4.3 Functions and Variables for Display
phiresolution54.3.3 Scene object's options
pickapart6.5 Functions and Variables for Expressions
picture_equalp52.3 Functions and Variables for pictures
picturep52.3 Functions and Variables for pictures
piece6.5 Functions and Variables for Expressions
piechart49.4 Functions and Variables for statistical graphs
piechart_description49.4 Functions and Variables for statistical graphs
pivot_count_sx79.2 Functions and Variables for simplex
pivot_max_sx79.2 Functions and Variables for simplex
planar_embedding61.2.2 Graph properties
playback4.2 Functions and Variables for Command Line
plog10.4 Root, Exponential and Logarithmic Functions
plot2d12.3 Functions and Variables for Plotting
plot3d12.3 Functions and Variables for Plotting
plot_format12.4 Plotting Options
plot_options12.3 Functions and Variables for Plotting
plot_realpart12.4 Plotting Options
plotdf22.5 Functions for numerical solution of differential equations
ploteq22.5 Functions for numerical solution of differential equations
plsquares69.2 Functions and Variables for lsquares
png_file12.4 Plotting Options
pochhammer76.2 Functions and Variables for orthogonal polynomials
pochhammer_max_index76.2 Functions and Variables for orthogonal polynomials
point_size52.2.3 Graphic options
point_type12.4 Plotting Options
point_type52.2.3 Graphic options
points52.2.4 Graphics objects
points_joined52.2.3 Graphic options
pointsize54.3.3 Scene object's options
poisdiff28.6 Functions and Variables for Poisson series
poisexpt28.6 Functions and Variables for Poisson series
poisint28.6 Functions and Variables for Poisson series
poislim28.6 Functions and Variables for Poisson series
poismap28.6 Functions and Variables for Poisson series
poisplus28.6 Functions and Variables for Poisson series
poissimp28.6 Functions and Variables for Poisson series
poisson28.6 Functions and Variables for Poisson series
poissubst28.6 Functions and Variables for Poisson series
poistimes28.6 Functions and Variables for Poisson series
poistrim28.6 Functions and Variables for Poisson series
polar52.2.4 Graphics objects
polar_to_xy12.3 Functions and Variables for Plotting
polarform10.2 Functions for Complex Numbers
polartorect22.2 Functions and Variables for fast Fourier transform
poly_add62.2.2 Simple operators in grobner
poly_buchberger62.2.3 Other functions in grobner
poly_buchberger_criterion62.2.3 Other functions in grobner
poly_coefficient_ring62.2.1 Global switches for grobner
poly_colon_ideal62.2.4 Standard postprocessing of Groebner Bases
poly_content62.2.3 Other functions in grobner
poly_depends_p62.2.4 Standard postprocessing of Groebner Bases
poly_elimination_ideal62.2.4 Standard postprocessing of Groebner Bases
poly_elimination_order62.2.1 Global switches for grobner
poly_exact_divide62.2.3 Other functions in grobner
poly_expand62.2.3 Other functions in grobner
poly_expt62.2.3 Other functions in grobner
poly_gcd62.2.4 Standard postprocessing of Groebner Bases
poly_grobner62.2.4 Standard postprocessing of Groebner Bases
poly_grobner_algorithm62.2.1 Global switches for grobner
poly_grobner_debug62.2.1 Global switches for grobner
poly_grobner_equal62.2.4 Standard postprocessing of Groebner Bases
poly_grobner_member62.2.4 Standard postprocessing of Groebner Bases
poly_grobner_subsetp62.2.4 Standard postprocessing of Groebner Bases
poly_ideal_intersection62.2.4 Standard postprocessing of Groebner Bases
poly_ideal_polysaturation62.2.4 Standard postprocessing of Groebner Bases
poly_ideal_polysaturation162.2.4 Standard postprocessing of Groebner Bases
poly_ideal_saturation62.2.4 Standard postprocessing of Groebner Bases
poly_ideal_saturation162.2.4 Standard postprocessing of Groebner Bases
poly_lcm62.2.4 Standard postprocessing of Groebner Bases
poly_minimization62.2.4 Standard postprocessing of Groebner Bases
poly_monomial_order62.2.1 Global switches for grobner
poly_multiply62.2.2 Simple operators in grobner
poly_normal_form62.2.3 Other functions in grobner
poly_normalize62.2.2 Simple operators in grobner
poly_normalize_list62.2.4 Standard postprocessing of Groebner Bases
poly_polysaturation_extension62.2.4 Standard postprocessing of Groebner Bases
poly_primary_elimination_order62.2.1 Global switches for grobner
poly_primitive_part62.2.2 Simple operators in grobner
poly_pseudo_divide62.2.3 Other functions in grobner
poly_reduced_grobner62.2.4 Standard postprocessing of Groebner Bases
poly_reduction62.2.4 Standard postprocessing of Groebner Bases
poly_return_term_list62.2.1 Global switches for grobner
poly_s_polynomial62.2.2 Simple operators in grobner
poly_saturation_extension62.2.4 Standard postprocessing of Groebner Bases
poly_secondary_elimination_order62.2.1 Global switches for grobner
poly_subtract62.2.2 Simple operators in grobner
poly_top_reduction_only62.2.1 Global switches for grobner
polydecomp14.2 Functions and Variables for Polynomials
polyfactor20.1 Functions and Variables for Equations
polygon52.2.4 Graphics objects
polymod14.2 Functions and Variables for Polynomials
polynome2ele30.2.5 Polynomials and their roots
polynomialp68.2 Functions and Variables for linearalgebra
polytocompanion68.2 Functions and Variables for linearalgebra
pop5.5.2 Functions and Variables for Lists
posfun11.2 Functions and Variables for Properties
position54.3.3 Scene object's options
postfix7.7 User defined operators
potential19.2 Functions and Variables for Integration
power_mod29.1 Functions and Variables for Number Theory
powerdisp4.3 Functions and Variables for Display
powerseries28.3 Functions and Variables for Series
powerset35.2 Functions and Variables for Sets
pred8.1 Functions and Variables for Evaluation
prederror37.4 Functions and Variables for Program Flow
prefix7.7 User defined operators
prev_prime29.1 Functions and Variables for Number Theory
primep29.1 Functions and Variables for Number Theory
primep_number_of_tests29.1 Functions and Variables for Number Theory
primes29.1 Functions and Variables for Number Theory
principal_components49.3 Functions and Variables for descriptive statistics
print4.3 Functions and Variables for Display
print_graph61.2.2 Graph properties
printf84.2 Input and Output
printfile13.3 Functions and Variables for File Input and Output
printpois28.6 Functions and Variables for Poisson series
printprops11.2 Functions and Variables for Properties
prodrac30.2.5 Polynomials and their roots
product28.1 Functions and Variables for Sums and Products
product_use_gamma81.2 Functions and Variables for solve_rec
program61.2.5 Visualization
programmode20.1 Functions and Variables for Equations
prompt4.2 Functions and Variables for Command Line
properties11.2 Functions and Variables for Properties
proportional_axes52.2.3 Graphic options
props11.2 Functions and Variables for Properties
propvars11.2 Functions and Variables for Properties
ps_file12.4 Plotting Options
psexpand28.3 Functions and Variables for Series
psi15.4 Gamma and factorial Functions
psi26.2.5 Algebraic classification
psubst6.5 Functions and Variables for Expressions
ptriangularize68.2 Functions and Variables for linearalgebra
pui30.2.1 Changing bases
pui2comp30.2.1 Changing bases
pui2ele30.2.1 Changing bases
pui2polynome30.2.5 Polynomials and their roots
pui_direct30.2.3 Groups and orbits
puireduc30.2.1 Changing bases
push5.5.2 Functions and Variables for Lists
put11.2 Functions and Variables for Properties
pv58.2 Functions and Variables for finance

Q
qput11.2 Functions and Variables for Properties
qrange49.3 Functions and Variables for descriptive statistics
qty56.3 Functions and Variables for ezunits
quad_control19.4 Functions and Variables for QUADPACK
quad_qag19.4 Functions and Variables for QUADPACK
quad_qagi19.4 Functions and Variables for QUADPACK
quad_qagp19.4 Functions and Variables for QUADPACK
quad_qags19.4 Functions and Variables for QUADPACK
quad_qawc19.4 Functions and Variables for QUADPACK
quad_qawf19.4 Functions and Variables for QUADPACK
quad_qawo19.4 Functions and Variables for QUADPACK
quad_qaws19.4 Functions and Variables for QUADPACK
quadrilateral52.2.4 Graphics objects
quantile49.3 Functions and Variables for descriptive statistics
quantile_bernoulli51.3 Functions and Variables for discrete distributions
quantile_beta51.2 Functions and Variables for continuous distributions
quantile_binomial51.3 Functions and Variables for discrete distributions
quantile_cauchy51.2 Functions and Variables for continuous distributions
quantile_chi251.2 Functions and Variables for continuous distributions
quantile_continuous_uniform51.2 Functions and Variables for continuous distributions
quantile_discrete_uniform51.3 Functions and Variables for discrete distributions
quantile_exp51.2 Functions and Variables for continuous distributions
quantile_f51.2 Functions and Variables for continuous distributions
quantile_gamma51.2 Functions and Variables for continuous distributions
quantile_general_finite_discrete51.3 Functions and Variables for discrete distributions
quantile_geometric51.3 Functions and Variables for discrete distributions
quantile_gumbel51.2 Functions and Variables for continuous distributions
quantile_hypergeometric51.3 Functions and Variables for discrete distributions
quantile_laplace51.2 Functions and Variables for continuous distributions
quantile_logistic51.2 Functions and Variables for continuous distributions
quantile_lognormal51.2 Functions and Variables for continuous distributions
quantile_negative_binomial51.3 Functions and Variables for discrete distributions
quantile_noncentral_chi251.2 Functions and Variables for continuous distributions
quantile_noncentral_student_t51.2 Functions and Variables for continuous distributions
quantile_normal51.2 Functions and Variables for continuous distributions
quantile_pareto51.2 Functions and Variables for continuous distributions
quantile_poisson51.3 Functions and Variables for discrete distributions
quantile_rayleigh51.2 Functions and Variables for continuous distributions
quantile_student_t51.2 Functions and Variables for continuous distributions
quantile_weibull51.2 Functions and Variables for continuous distributions
quartile_skewness49.3 Functions and Variables for descriptive statistics
quit4.2 Functions and Variables for Command Line
qunit29.1 Functions and Variables for Number Theory
quotient14.2 Functions and Variables for Polynomials

R
racah_v46.1 Functions and Variables for clebsch_gordan
racah_w46.1 Functions and Variables for clebsch_gordan
radcan9.2 Functions and Variables for Simplification
radexpand9.2 Functions and Variables for Simplification
radius61.2.2 Graph properties
radsubstflag14.2 Functions and Variables for Polynomials
random10.6 Random Numbers
random_bernoulli51.3 Functions and Variables for discrete distributions
random_beta51.2 Functions and Variables for continuous distributions
random_binomial51.3 Functions and Variables for discrete distributions
random_bipartite_graph61.2.1 Building graphs
random_cauchy51.2 Functions and Variables for continuous distributions
random_chi251.2 Functions and Variables for continuous distributions
random_continuous_uniform51.2 Functions and Variables for continuous distributions
random_digraph61.2.1 Building graphs
random_discrete_uniform51.3 Functions and Variables for discrete distributions
random_exp51.2 Functions and Variables for continuous distributions
random_f51.2 Functions and Variables for continuous distributions
random_gamma51.2 Functions and Variables for continuous distributions
random_general_finite_discrete51.3 Functions and Variables for discrete distributions
random_geometric51.3 Functions and Variables for discrete distributions
random_graph61.2.1 Building graphs
random_graph161.2.1 Building graphs
random_gumbel51.2 Functions and Variables for continuous distributions
random_hypergeometric51.3 Functions and Variables for discrete distributions
random_laplace51.2 Functions and Variables for continuous distributions
random_logistic51.2 Functions and Variables for continuous distributions
random_lognormal51.2 Functions and Variables for continuous distributions
random_negative_binomial51.3 Functions and Variables for discrete distributions
random_network61.2.1 Building graphs
random_noncentral_chi251.2 Functions and Variables for continuous distributions
random_noncentral_student_t51.2 Functions and Variables for continuous distributions
random_normal51.2 Functions and Variables for continuous distributions
random_pareto51.2 Functions and Variables for continuous distributions
random_permutation35.2 Functions and Variables for Sets
random_poisson51.3 Functions and Variables for discrete distributions
random_rayleigh51.2 Functions and Variables for continuous distributions
random_regular_graph61.2.1 Building graphs
random_student_t51.2 Functions and Variables for continuous distributions
random_tournament61.2.1 Building graphs
random_tree61.2.1 Building graphs
random_weibull51.2 Functions and Variables for continuous distributions
range49.3 Functions and Variables for descriptive statistics
rank23.2 Functions and Variables for Matrices and Linear Algebra
rank68.2 Functions and Variables for linearalgebra
rassociative9.2 Functions and Variables for Simplification
rat14.2 Functions and Variables for Polynomials
ratalgdenom14.2 Functions and Variables for Polynomials
ratchristof26.2.9 Variables used by ctensor
ratcoef14.2 Functions and Variables for Polynomials
ratdenom14.2 Functions and Variables for Polynomials
ratdenomdivide14.2 Functions and Variables for Polynomials
ratdiff14.2 Functions and Variables for Polynomials
ratdisrep14.2 Functions and Variables for Polynomials
rateinstein26.2.9 Variables used by ctensor
ratepsilon5.1.2 Functions and Variables for Numbers
ratexpand14.2 Functions and Variables for Polynomials
ratexpand14.2 Functions and Variables for Polynomials
ratfac14.2 Functions and Variables for Polynomials
ratinterpol64.2 Functions and Variables for interpol
rational80.4 Package functs
rationalize5.1.2 Functions and Variables for Numbers
ratmx23.2 Functions and Variables for Matrices and Linear Algebra
ratnumer14.2 Functions and Variables for Polynomials
ratnump5.1.2 Functions and Variables for Numbers
ratp14.2 Functions and Variables for Polynomials
ratp_coeffs77.1 Functions and Variables for ratpow
ratp_dense_coeffs77.1 Functions and Variables for ratpow
ratp_hipow77.1 Functions and Variables for ratpow
ratp_lopow77.1 Functions and Variables for ratpow
ratprint14.2 Functions and Variables for Polynomials
ratriemann26.2.9 Variables used by ctensor
ratsimp14.2 Functions and Variables for Polynomials
ratsimp14.2 Functions and Variables for Polynomials
ratsimpexpons14.2 Functions and Variables for Polynomials
ratsubst14.2 Functions and Variables for Polynomials
ratvars14.2 Functions and Variables for Polynomials
ratvars14.2 Functions and Variables for Polynomials
ratvars14.2 Functions and Variables for Polynomials
ratvarswitch14.2 Functions and Variables for Polynomials
ratweight14.2 Functions and Variables for Polynomials
ratweights14.2 Functions and Variables for Polynomials
ratweyl26.2.9 Variables used by ctensor
ratwtlvl14.2 Functions and Variables for Polynomials
read4.2 Functions and Variables for Command Line
read_array73.2 Functions and Variables for plain-text input and output
read_binary_array73.3 Functions and Variables for binary input and output
read_binary_list73.3 Functions and Variables for binary input and output
read_binary_matrix73.3 Functions and Variables for binary input and output
read_hashed_array73.2 Functions and Variables for plain-text input and output
read_list73.2 Functions and Variables for plain-text input and output
read_matrix73.2 Functions and Variables for plain-text input and output
read_nested_list73.2 Functions and Variables for plain-text input and output
read_nested_list73.2 Functions and Variables for plain-text input and output
read_xpm52.3 Functions and Variables for pictures
readbyte84.2 Input and Output
readchar84.2 Input and Output
readline84.2 Input and Output
readonly4.2 Functions and Variables for Command Line
real11.2 Functions and Variables for Properties
real_fft22.2 Functions and Variables for fast Fourier transform
real_imagpart_to_conjugate85.1 Functions and Variables for to_poly_solve
realonly20.1 Functions and Variables for Equations
realpart10.2 Functions for Complex Numbers
realroots20.1 Functions and Variables for Equations
rearray5.7 Functions and Variables for Arrays
rectangle52.2.4 Graphics objects
rectform10.2 Functions for Complex Numbers
rectform_log_if_constant85.1 Functions and Variables for to_poly_solve
recttopolar22.2 Functions and Variables for fast Fourier transform
rediff25.2.3 Indicial tensor calculus
redraw61.2.5 Visualization
reduce_consts80.6 Package rducon
reduce_order81.2 Functions and Variables for solve_rec
refcheck38.3 Functions and Variables for Debugging
region52.2.4 Graphics objects
region_boundaries52.4.1 Variable and Functions
region_boundaries_plus52.4.1 Variable and Functions
rem11.2 Functions and Variables for Properties
remainder14.2 Functions and Variables for Polynomials
remarray5.7 Functions and Variables for Arrays
rembox6.5 Functions and Variables for Expressions
remcomps25.2.1 Managing indexed objects
remcon25.2.1 Managing indexed objects
remcoord25.2.3 Indicial tensor calculus
remfun28.5 Functions and Variables for Fourier series
remfunction36.4 Functions and Variables for Function Definition
remlet34.2 Functions and Variables for Rules and Patterns
remove11.2 Functions and Variables for Properties
remove_constvalue56.3 Functions and Variables for ezunits
remove_dimensions56.3 Functions and Variables for ezunits
remove_edge61.2.3 Modifying graphs
remove_fundamental_dimensions56.3 Functions and Variables for ezunits
remove_fundamental_units56.3 Functions and Variables for ezunits
remove_plot_option12.3 Functions and Variables for Plotting
remove_vertex61.2.3 Modifying graphs
rempart80.4 Package functs
remrule34.2 Functions and Variables for Rules and Patterns
remsym25.2.2 Tensor symmetries
remvalue33.3 Functions and Variables for Miscellaneous Options
rename25.2.1 Managing indexed objects
rename_file74.3 File operations
reset4.2 Functions and Variables for Command Line
reset_displays39.2 Functions and Variables for alt-display
residue19.2 Functions and Variables for Integration
resolution54.3.3 Scene object's options
resolvante30.2.6 Resolvents
resolvante_alternee130.2.6 Resolvents
resolvante_bipartite30.2.6 Resolvents
resolvante_diedrale30.2.6 Resolvents
resolvante_klein30.2.6 Resolvents
resolvante_klein330.2.6 Resolvents
resolvante_produit_sym30.2.6 Resolvents
resolvante_unitaire30.2.6 Resolvents
resolvante_vierer30.2.6 Resolvents
rest5.5.2 Functions and Variables for Lists
restart54.3.1 Scene options
resultant14.2 Functions and Variables for Polynomials
return37.4 Functions and Variables for Program Flow
reveal6.5 Functions and Variables for Expressions
reverse5.5.2 Functions and Variables for Lists
revert28.3 Functions and Variables for Series
revert228.3 Functions and Variables for Series
rgb2level52.3 Functions and Variables for pictures
rhs20.1 Functions and Variables for Equations
ric26.2.9 Variables used by ctensor
ricci26.2.2 The tensors of curved space
riem26.2.9 Variables used by ctensor
riemann26.2.2 The tensors of curved space
rinvariant26.2.2 The tensors of curved space
risch19.2 Functions and Variables for Integration
rk22.5 Functions for numerical solution of differential equations
rmdir74.2 Directory operations
rmxchar23.2 Functions and Variables for Matrices and Linear Algebra
rncombine33.3 Functions and Variables for Miscellaneous Options
romberg78.1 Functions and Variables for romberg
rombergabs78.1 Functions and Variables for romberg
rombergit78.1 Functions and Variables for romberg
rombergmin78.1 Functions and Variables for romberg
rombergtol78.1 Functions and Variables for romberg
room32.3 Functions and Variables for Runtime Environment
rootsconmode20.1 Functions and Variables for Equations
rootscontract20.1 Functions and Variables for Equations
rootsepsilon20.1 Functions and Variables for Equations
round10.1 Functions for Numbers
row23.2 Functions and Variables for Matrices and Linear Algebra
rowop68.2 Functions and Variables for linearalgebra
rowswap68.2 Functions and Variables for linearalgebra
rreduce5.5.2 Functions and Variables for Lists
run_testsuite2.1 Functions and Variables for Bug Detection and Reporting
run_viewer12.4 Plotting Options

S
same_xy12.4 Plotting Options
same_xyz12.4 Plotting Options
save13.3 Functions and Variables for File Input and Output
savedef36.4 Functions and Variables for Function Definition
savefactors14.2 Functions and Variables for Polynomials
saving58.2 Functions and Variables for finance
scalar11.2 Functions and Variables for Properties
scalarmatrixp23.2 Functions and Variables for Matrices and Linear Algebra
scalarp11.2 Functions and Variables for Properties
scale54.3.3 Scene object's options
scale_lp79.2 Functions and Variables for simplex
scaled_bessel_i15.2 Bessel Functions
scaled_bessel_i015.2 Bessel Functions
scaled_bessel_i115.2 Bessel Functions
scalefactors23.2 Functions and Variables for Matrices and Linear Algebra
scanmap37.4 Functions and Variables for Program Flow
scatterplot49.4 Functions and Variables for statistical graphs
scatterplot_description49.4 Functions and Variables for statistical graphs
scene54.3 Visualization with VTK
schur2comp30.2.1 Changing bases
sconcat5.2.2 Functions and Variables for Strings
scopy84.4 String Processing
scsimp9.2 Functions and Variables for Simplification
scurvature26.2.2 The tensors of curved space
sdowncase84.4 String Processing
sec10.5.2 Functions and Variables for Trigonometric
sech10.5.2 Functions and Variables for Trigonometric
second5.5.2 Functions and Variables for Lists
sequal84.4 String Processing
sequalignore84.4 String Processing
set_alt_display39.2 Functions and Variables for alt-display
set_draw_defaults52.2.2 Functions
set_edge_weight61.2.2 Graph properties
set_partitions35.2 Functions and Variables for Sets
set_plot_option12.3 Functions and Variables for Plotting
set_prompt39.2 Functions and Variables for alt-display
set_random_state10.6 Random Numbers
set_tex_environment13.4 Functions and Variables for TeX Output
set_tex_environment_default13.4 Functions and Variables for TeX Output
set_up_dot_simplifications24.2 Functions and Variables for Affine
set_vertex_label61.2.2 Graph properties
setcheck38.3 Functions and Variables for Debugging
setcheckbreak38.3 Functions and Variables for Debugging
setdifference35.2 Functions and Variables for Sets
setelmx23.2 Functions and Variables for Matrices and Linear Algebra
setequalp35.2 Functions and Variables for Sets
setify35.2 Functions and Variables for Sets
setp35.2 Functions and Variables for Sets
setunits86.2 Functions and Variables for Units
setup_autoload33.3 Functions and Variables for Miscellaneous Options
setval38.3 Functions and Variables for Debugging
seventh5.5.2 Functions and Variables for Lists
sexplode84.4 String Processing
sf27.2 Functions and Variables for atensor
sha1sum84.5 Octets and Utilities for Cryptography
sha256sum84.5 Octets and Utilities for Cryptography
share_testsuite_files2.1 Functions and Variables for Bug Detection and Reporting
shortest_path61.2.2 Graph properties
shortest_weighted_path61.2.2 Graph properties
show25.2.1 Managing indexed objects
show_edge_color61.2.5 Visualization
show_edge_type61.2.5 Visualization
show_edge_width61.2.5 Visualization
show_edges61.2.5 Visualization
show_id61.2.5 Visualization
show_label61.2.5 Visualization
show_vertex_color61.2.5 Visualization
show_vertex_size61.2.5 Visualization
show_vertex_type61.2.5 Visualization
show_vertices61.2.5 Visualization
show_weight61.2.5 Visualization
showcomps25.2.1 Managing indexed objects
showratvars14.2 Functions and Variables for Polynomials
showtime4.2 Functions and Variables for Command Line
sierpinskiale59.2 Definitions for IFS fractals
sierpinskimap59.5 Definitions for Peano maps
sign11.3 Functions and Variables for Facts
signum10.1 Functions for Numbers
similaritytransform23.2 Functions and Variables for Matrices and Linear Algebra
simp9.2 Functions and Variables for Simplification
simp_inequality85.1 Functions and Variables for to_poly_solve
simplified_output87.3 General global variables
simplify_products81.2 Functions and Variables for solve_rec
simplify_sum81.2 Functions and Variables for solve_rec
simplode84.4 String Processing
simpmetderiv25.2.3 Indicial tensor calculus
simpproduct28.1 Functions and Variables for Sums and Products
simpsum28.1 Functions and Variables for Sums and Products
simtran23.2 Functions and Variables for Matrices and Linear Algebra
sin10.5.2 Functions and Variables for Trigonometric
sinh10.5.2 Functions and Variables for Trigonometric
sinnpiflag28.5 Functions and Variables for Fourier series
sinsert84.4 String Processing
sinvertcase84.4 String Processing
sixth5.5.2 Functions and Variables for Lists
skewness49.3 Functions and Variables for descriptive statistics
skewness_bernoulli51.3 Functions and Variables for discrete distributions
skewness_beta51.2 Functions and Variables for continuous distributions
skewness_binomial51.3 Functions and Variables for discrete distributions
skewness_chi251.2 Functions and Variables for continuous distributions
skewness_continuous_uniform51.2 Functions and Variables for continuous distributions
skewness_discrete_uniform51.3 Functions and Variables for discrete distributions
skewness_exp51.2 Functions and Variables for continuous distributions
skewness_f51.2 Functions and Variables for continuous distributions
skewness_gamma51.2 Functions and Variables for continuous distributions
skewness_general_finite_discrete51.3 Functions and Variables for discrete distributions
skewness_geometric51.3 Functions and Variables for discrete distributions
skewness_gumbel51.2 Functions and Variables for continuous distributions
skewness_hypergeometric51.3 Functions and Variables for discrete distributions
skewness_laplace51.2 Functions and Variables for continuous distributions
skewness_logistic51.2 Functions and Variables for continuous distributions
skewness_lognormal51.2 Functions and Variables for continuous distributions
skewness_negative_binomial51.3 Functions and Variables for discrete distributions
skewness_noncentral_chi251.2 Functions and Variables for continuous distributions
skewness_noncentral_student_t51.2 Functions and Variables for continuous distributions
skewness_normal51.2 Functions and Variables for continuous distributions
skewness_pareto51.2 Functions and Variables for continuous distributions
skewness_poisson51.3 Functions and Variables for discrete distributions
skewness_rayleigh51.2 Functions and Variables for continuous distributions
skewness_student_t51.2 Functions and Variables for continuous distributions
skewness_weibull51.2 Functions and Variables for continuous distributions
slength84.4 String Processing
smake84.4 String Processing
small_rhombicosidodecahedron_graph61.2.1 Building graphs
small_rhombicuboctahedron_graph61.2.1 Building graphs
smax49.3 Functions and Variables for descriptive statistics
smin49.3 Functions and Variables for descriptive statistics
smismatch84.4 String Processing
snowmap59.4 Definitions for Koch snowflakes
snub_cube_graph61.2.1 Building graphs
snub_dodecahedron_graph61.2.1 Building graphs
solve20.1 Functions and Variables for Equations
solve_rec81.2 Functions and Variables for solve_rec
solve_rec_rat81.2 Functions and Variables for solve_rec
solvedecomposes20.1 Functions and Variables for Equations
solveexplicit20.1 Functions and Variables for Equations
solvefactors20.1 Functions and Variables for Equations
solvenullwarn20.1 Functions and Variables for Equations
solveradcan20.1 Functions and Variables for Equations
solvetrigwarn20.1 Functions and Variables for Equations
some35.2 Functions and Variables for Sets
somrac30.2.5 Polynomials and their roots
sort5.5.2 Functions and Variables for Lists
space84.3 Characters
sparse23.2 Functions and Variables for Matrices and Linear Algebra
sparse6_decode61.2.4 Reading and writing to files
sparse6_encode61.2.4 Reading and writing to files
sparse6_export61.2.4 Reading and writing to files
sparse6_import61.2.4 Reading and writing to files
specint15.10 Functions and Variables for Special Functions
sphere54.3.2 Scene objects
spherical52.2.4 Graphics objects
spherical_bessel_j76.2 Functions and Variables for orthogonal polynomials
spherical_bessel_y76.2 Functions and Variables for orthogonal polynomials
spherical_hankel176.2 Functions and Variables for orthogonal polynomials
spherical_hankel276.2 Functions and Variables for orthogonal polynomials
spherical_harmonic76.2 Functions and Variables for orthogonal polynomials
spherical_to_xyz12.3 Functions and Variables for Plotting
splice36.3 Macros
split84.4 String Processing
sposition84.4 String Processing
spring_embedding_depth61.2.5 Visualization
sprint84.2 Input and Output
sqfr14.2 Functions and Variables for Polynomials
sqrt10.4 Root, Exponential and Logarithmic Functions
sqrtdenest80.8 Package sqdnst
sqrtdispflag4.3 Functions and Variables for Display
sremove84.4 String Processing
sremovefirst84.4 String Processing
sreverse84.4 String Processing
ssearch84.4 String Processing
ssort84.4 String Processing
sstatus32.3 Functions and Variables for Runtime Environment
ssubst84.4 String Processing
ssubstfirst84.4 String Processing
staircase54.2 Graphical analysis of discrete dynamical systems
standardize49.2 Functions and Variables for data manipulation
standardize_inverse_trig85.1 Functions and Variables for to_poly_solve
stardisp4.3 Functions and Variables for Display
starplot49.4 Functions and Variables for statistical graphs
starplot_description49.4 Functions and Variables for statistical graphs
startphi54.3.3 Scene object's options
starttheta54.3.3 Scene object's options
stats_numer82.3 Functions and Variables for stats
status32.3 Functions and Variables for Runtime Environment
std49.3 Functions and Variables for descriptive statistics
std149.3 Functions and Variables for descriptive statistics
std_bernoulli51.3 Functions and Variables for discrete distributions
std_beta51.2 Functions and Variables for continuous distributions
std_binomial51.3 Functions and Variables for discrete distributions
std_chi251.2 Functions and Variables for continuous distributions
std_continuous_uniform51.2 Functions and Variables for continuous distributions
std_discrete_uniform51.3 Functions and Variables for discrete distributions
std_exp51.2 Functions and Variables for continuous distributions
std_f51.2 Functions and Variables for continuous distributions
std_gamma51.2 Functions and Variables for continuous distributions
std_general_finite_discrete51.3 Functions and Variables for discrete distributions
std_geometric51.3 Functions and Variables for discrete distributions
std_gumbel51.2 Functions and Variables for continuous distributions
std_hypergeometric51.3 Functions and Variables for discrete distributions
std_laplace51.2 Functions and Variables for continuous distributions
std_logistic51.2 Functions and Variables for continuous distributions
std_lognormal51.2 Functions and Variables for continuous distributions
std_negative_binomial51.3 Functions and Variables for discrete distributions
std_noncentral_chi251.2 Functions and Variables for continuous distributions
std_noncentral_student_t51.2 Functions and Variables for continuous distributions
std_normal51.2 Functions and Variables for continuous distributions
std_pareto51.2 Functions and Variables for continuous distributions
std_poisson51.3 Functions and Variables for discrete distributions
std_rayleigh51.2 Functions and Variables for continuous distributions
std_student_t51.2 Functions and Variables for continuous distributions
std_weibull51.2 Functions and Variables for continuous distributions
stemplot49.4 Functions and Variables for statistical graphs
step37.4 Functions and Variables for Program Flow
stirling83.1 Functions and Variables for stirling
stirling135.2 Functions and Variables for Sets
stirling235.2 Functions and Variables for Sets
strim84.4 String Processing
striml84.4 String Processing
strimr84.4 String Processing
string5.2.2 Functions and Variables for Strings
string_to_octets84.5 Octets and Utilities for Cryptography
stringdisp5.2.2 Functions and Variables for Strings
stringout13.3 Functions and Variables for File Input and Output
stringp84.4 String Processing
strong_components61.2.2 Graph properties
structures5.8.2 Functions and Variables for Structures
struve_h15.7 Struve Functions
struve_l15.7 Struve Functions
style12.4 Plotting Options
sublis6.5 Functions and Variables for Expressions
sublis_apply_lambda6.5 Functions and Variables for Expressions
sublist5.5.2 Functions and Variables for Lists
sublist_indices5.5.2 Functions and Variables for Lists
submatrix23.2 Functions and Variables for Matrices and Linear Algebra
subnumsimp6.5 Functions and Variables for Expressions
subsample49.2 Functions and Variables for data manipulation
subset35.2 Functions and Variables for Sets
subsetp35.2 Functions and Variables for Sets
subst6.5 Functions and Variables for Expressions
subst_parallel85.1 Functions and Variables for to_poly_solve
substinpart6.5 Functions and Variables for Expressions
substpart6.5 Functions and Variables for Expressions
substring84.4 String Processing
subvar5.7 Functions and Variables for Arrays
subvarp5.7 Functions and Variables for Arrays
sum28.1 Functions and Variables for Sums and Products
sumcontract28.1 Functions and Variables for Sums and Products
sumexpand28.1 Functions and Variables for Sums and Products
summand_to_rec81.2 Functions and Variables for solve_rec
sumsplitfact10.3 Combinatorial Functions
supcase84.4 String Processing
supcontext11.3 Functions and Variables for Facts
surface54.3.3 Scene object's options
surface_hide52.2.3 Graphic options
svg_file12.4 Plotting Options
symbolp6.5 Functions and Variables for Expressions
symmdifference35.2 Functions and Variables for Sets
symmetric9.2 Functions and Variables for Simplification
symmetricp26.2.8 Utility functions
system32.3 Functions and Variables for Runtime Environment

T
t12.4 Plotting Options
tab84.3 Characters
take_channel52.3 Functions and Variables for pictures
take_inference82.2 Functions and Variables for inference_result
tan10.5.2 Functions and Variables for Trigonometric
tanh10.5.2 Functions and Variables for Trigonometric
taylor28.3 Functions and Variables for Series
taylor_logexpand28.3 Functions and Variables for Series
taylor_order_coefficients28.3 Functions and Variables for Series
taylor_simplifier28.3 Functions and Variables for Series
taylor_truncate_polynomials28.3 Functions and Variables for Series
taylordepth28.3 Functions and Variables for Series
taylorinfo28.3 Functions and Variables for Series
taylorp28.3 Functions and Variables for Series
taytorat28.3 Functions and Variables for Series
tcl_output33.3 Functions and Variables for Miscellaneous Options
tcontract30.2.2 Changing representations
tellrat14.2 Functions and Variables for Polynomials
tellsimp34.2 Functions and Variables for Rules and Patterns
tellsimpafter34.2 Functions and Variables for Rules and Patterns
tensorkill26.2.9 Variables used by ctensor
tentex25.2.8 Exporting TeX expressions
tenth5.5.2 Functions and Variables for Lists
terminal52.2.3 Graphic options
terminal61.2.5 Visualization
test_mean82.3 Functions and Variables for stats
test_means_difference82.3 Functions and Variables for stats
test_normality82.3 Functions and Variables for stats
test_proportion82.3 Functions and Variables for stats
test_proportions_difference82.3 Functions and Variables for stats
test_rank_sum82.3 Functions and Variables for stats
test_sign82.3 Functions and Variables for stats
test_signed_rank82.3 Functions and Variables for stats
test_variance82.3 Functions and Variables for stats
test_variance_ratio82.3 Functions and Variables for stats
testsuite_files2.1 Functions and Variables for Bug Detection and Reporting
tex13.4 Functions and Variables for TeX Output
tex113.4 Functions and Variables for TeX Output
tex_display39.2 Functions and Variables for alt-display
texput13.4 Functions and Variables for TeX Output
thetaresolution54.3.3 Scene object's options
third5.5.2 Functions and Variables for Lists
throw37.4 Functions and Variables for Program Flow
thru37.4 Functions and Variables for Program Flow
time32.3 Functions and Variables for Runtime Environment
timedate32.3 Functions and Variables for Runtime Environment
timer38.3 Functions and Variables for Debugging
timer_devalue38.3 Functions and Variables for Debugging
timer_info38.3 Functions and Variables for Debugging
title12.4 Plotting Options
title52.2.3 Graphic options
tldefint19.2 Functions and Variables for Integration
tlimit17.1 Functions and Variables for Limits
tlimswitch17.1 Functions and Variables for Limits
to_lisp4.2 Functions and Variables for Command Line
to_poly85.1 Functions and Variables for to_poly_solve
to_poly_solve85.1 Functions and Variables for to_poly_solve
todd_coxeter31.1 Functions and Variables for Groups
toeplitz68.2 Functions and Variables for linearalgebra
tokens84.4 String Processing
topological_sort61.2.2 Graph properties
totaldisrep14.2 Functions and Variables for Polynomials
totalfourier28.5 Functions and Variables for Fourier series
totient29.1 Functions and Variables for Number Theory
tpartpol30.2.2 Changing representations
tr26.2.9 Variables used by ctensor
tr_array_as_ref36.4 Functions and Variables for Function Definition
tr_bound_function_applyp36.4 Functions and Variables for Function Definition
tr_file_tty_messagesp36.4 Functions and Variables for Function Definition
tr_float_can_branch_complex36.4 Functions and Variables for Function Definition
tr_function_call_default36.4 Functions and Variables for Function Definition
tr_numer36.4 Functions and Variables for Function Definition
tr_optimize_max_loop36.4 Functions and Variables for Function Definition
tr_semicompile36.4 Functions and Variables for Function Definition
tr_state_vars36.4 Functions and Variables for Function Definition
tr_warn_bad_function_calls36.4 Functions and Variables for Function Definition
tr_warn_fexpr36.4 Functions and Variables for Function Definition
tr_warn_meval36.4 Functions and Variables for Function Definition
tr_warn_mode36.4 Functions and Variables for Function Definition
tr_warn_undeclared36.4 Functions and Variables for Function Definition
tr_warn_undefined_variable36.4 Functions and Variables for Function Definition
tr_warnings_get36.4 Functions and Variables for Function Definition
trace38.3 Functions and Variables for Debugging
trace_options38.3 Functions and Variables for Debugging
tracematrix80.4 Package functs
track54.3.3 Scene object's options
transcompile36.4 Functions and Variables for Function Definition
transform52.2.3 Graphic options
transform_sample49.2 Functions and Variables for data manipulation
transform_xy12.4 Plotting Options
translate36.4 Functions and Variables for Function Definition
translate_fast_arrays5.7 Functions and Variables for Arrays
translate_file36.4 Functions and Variables for Function Definition
transparent52.2.3 Graphic options
transpose23.2 Functions and Variables for Matrices and Linear Algebra
transrun36.4 Functions and Variables for Function Definition
tree_reduce5.5.2 Functions and Variables for Lists
treefale59.2 Definitions for IFS fractals
treillis30.2.4 Partitions
treinat30.2.4 Partitions
triangle52.2.4 Graphics objects
triangularize23.2 Functions and Variables for Matrices and Linear Algebra
trigexpand10.5.2 Functions and Variables for Trigonometric
trigexpandplus10.5.2 Functions and Variables for Trigonometric
trigexpandtimes10.5.2 Functions and Variables for Trigonometric
triginverses10.5.2 Functions and Variables for Trigonometric
trigrat10.5.2 Functions and Variables for Trigonometric
trigreduce10.5.2 Functions and Variables for Trigonometric
trigsign10.5.2 Functions and Variables for Trigonometric
trigsimp10.5.2 Functions and Variables for Trigonometric
trivial_solutions87.3 General global variables
true5.4 Functions and Variables for Constants
trunc28.3 Functions and Variables for Series
truncate10.1 Functions for Numbers
truncated_cube_graph61.2.1 Building graphs
truncated_dodecahedron_graph61.2.1 Building graphs
truncated_icosahedron_graph61.2.1 Building graphs
truncated_tetrahedron_graph61.2.1 Building graphs
tstep54.3.1 Scene options
ttyoff4.3 Functions and Variables for Display
tube52.2.4 Graphics objects
tutte_graph61.2.1 Building graphs

U
ueivects23.2 Functions and Variables for Matrices and Linear Algebra
ufg26.2.9 Variables used by ctensor
uforget86.2 Functions and Variables for Units
ug26.2.9 Variables used by ctensor
ultraspherical76.2 Functions and Variables for orthogonal polynomials
und5.4 Functions and Variables for Constants
underlying_graph61.2.1 Building graphs
undiff25.2.3 Indicial tensor calculus
unicode84.3 Characters
unicode_to_utf884.3 Characters
union35.2 Functions and Variables for Sets
unique5.5.2 Functions and Variables for Lists
unit_step76.2 Functions and Variables for orthogonal polynomials
unit_vectors52.2.3 Graphic options
uniteigenvectors23.2 Functions and Variables for Matrices and Linear Algebra
unitp56.3 Functions and Variables for ezunits
units56.3 Functions and Variables for ezunits
unitvector23.2 Functions and Variables for Matrices and Linear Algebra
unknown11.4 Functions and Variables for Predicates
unless37.4 Functions and Variables for Program Flow
unorder6.5 Functions and Variables for Expressions
unsum28.3 Functions and Variables for Series
untellrat14.2 Functions and Variables for Polynomials
untimer38.3 Functions and Variables for Debugging
untrace38.3 Functions and Variables for Debugging
uppercasep84.3 Characters
uric26.2.9 Variables used by ctensor
uricci26.2.2 The tensors of curved space
uriem26.2.9 Variables used by ctensor
uriemann26.2.2 The tensors of curved space
us_ascii_only84.3 Characters
use_fast_arrays5.7 Functions and Variables for Arrays
user_preamble52.2.3 Graphic options
usersetunits86.2 Functions and Variables for Units
utf8_to_unicode84.3 Characters
uvect23.2 Functions and Variables for Matrices and Linear Algebra

V
values4.2 Functions and Variables for Command Line
vandermonde_matrix68.2 Functions and Variables for linearalgebra
var49.3 Functions and Variables for descriptive statistics
var149.3 Functions and Variables for descriptive statistics
var_bernoulli51.3 Functions and Variables for discrete distributions
var_beta51.2 Functions and Variables for continuous distributions
var_binomial51.3 Functions and Variables for discrete distributions
var_chi251.2 Functions and Variables for continuous distributions
var_continuous_uniform51.2 Functions and Variables for continuous distributions
var_discrete_uniform51.3 Functions and Variables for discrete distributions
var_exp51.2 Functions and Variables for continuous distributions
var_f51.2 Functions and Variables for continuous distributions
var_gamma51.2 Functions and Variables for continuous distributions
var_general_finite_discrete51.3 Functions and Variables for discrete distributions
var_geometric51.3 Functions and Variables for discrete distributions
var_gumbel51.2 Functions and Variables for continuous distributions
var_hypergeometric51.3 Functions and Variables for discrete distributions
var_laplace51.2 Functions and Variables for continuous distributions
var_logistic51.2 Functions and Variables for continuous distributions
var_lognormal51.2 Functions and Variables for continuous distributions
var_negative_binomial51.3 Functions and Variables for discrete distributions
var_noncentral_chi251.2 Functions and Variables for continuous distributions
var_noncentral_student_t51.2 Functions and Variables for continuous distributions
var_normal51.2 Functions and Variables for continuous distributions
var_pareto51.2 Functions and Variables for continuous distributions
var_poisson51.3 Functions and Variables for discrete distributions
var_rayleigh51.2 Functions and Variables for continuous distributions
var_student_t51.2 Functions and Variables for continuous distributions
var_weibull51.2 Functions and Variables for continuous distributions
vect_cross23.2 Functions and Variables for Matrices and Linear Algebra
vector52.2.4 Graphics objects
vectorpotential23.2 Functions and Variables for Matrices and Linear Algebra
vectorsimp23.2 Functions and Variables for Matrices and Linear Algebra
verbify6.5 Functions and Variables for Expressions
verbose28.3 Functions and Variables for Series
vers80.4 Package functs
vertex_color61.2.5 Visualization
vertex_coloring61.2.2 Graph properties
vertex_connectivity61.2.2 Graph properties
vertex_degree61.2.2 Graph properties
vertex_distance61.2.2 Graph properties
vertex_eccentricity61.2.2 Graph properties
vertex_in_degree61.2.2 Graph properties
vertex_out_degree61.2.2 Graph properties
vertex_partition61.2.5 Visualization
vertex_size61.2.5 Visualization
vertex_type61.2.5 Visualization
vertices61.2.2 Graph properties
vertices_to_cycle61.2.5 Visualization
vertices_to_path61.2.5 Visualization
view52.2.3 Graphic options

W
warnings87.3 General global variables
weyl26.2.2 The tensors of curved space
wheel_graph61.2.1 Building graphs
while37.4 Functions and Variables for Program Flow
width54.3.1 Scene options
wiener_index61.2.2 Graph properties
wigner_3j46.1 Functions and Variables for clebsch_gordan
wigner_6j46.1 Functions and Variables for clebsch_gordan
wigner_9j46.1 Functions and Variables for clebsch_gordan
windowname54.3.1 Scene options
windowtitle54.3.1 Scene options
wired_surface52.2.3 Graphic options
wireframe54.3.3 Scene object's options
with_stdout13.3 Functions and Variables for File Input and Output
write_binary_data73.3 Functions and Variables for binary input and output
write_data73.2 Functions and Variables for plain-text input and output
writebyte84.2 Input and Output
writefile13.3 Functions and Variables for File Input and Output
wronskian80.4 Package functs

X
x12.4 Plotting Options
x_voxel52.2.3 Graphic options
xaxis52.2.3 Graphic options
xaxis_color52.2.3 Graphic options
xaxis_secondary52.2.3 Graphic options
xaxis_type52.2.3 Graphic options
xaxis_width52.2.3 Graphic options
xlabel12.4 Plotting Options
xlabel52.2.3 Graphic options
xlabel_secondary52.2.3 Graphic options
xlength54.3.3 Scene object's options
xrange52.2.3 Graphic options
xrange_secondary52.2.3 Graphic options
xreduce5.5.2 Functions and Variables for Lists
xthru9.2 Functions and Variables for Simplification
xtics12.4 Plotting Options
xtics52.2.3 Graphic options
xtics_axis52.2.3 Graphic options
xtics_rotate52.2.3 Graphic options
xtics_rotate_secondary52.2.3 Graphic options
xtics_secondary52.2.3 Graphic options
xtics_secondary_axis52.2.3 Graphic options
xu_grid52.2.3 Graphic options
xy_file52.2.3 Graphic options
xy_scale12.4 Plotting Options
xyplane52.2.3 Graphic options

Y
y12.4 Plotting Options
y_voxel52.2.3 Graphic options
yaxis52.2.3 Graphic options
yaxis_color52.2.3 Graphic options
yaxis_secondary52.2.3 Graphic options
yaxis_type52.2.3 Graphic options
yaxis_width52.2.3 Graphic options
ylabel12.4 Plotting Options
ylabel52.2.3 Graphic options
ylabel_secondary52.2.3 Graphic options
ylength54.3.3 Scene object's options
yrange52.2.3 Graphic options
yrange_secondary52.2.3 Graphic options
ytics12.4 Plotting Options
ytics52.2.3 Graphic options
ytics_axis52.2.3 Graphic options
ytics_rotate52.2.3 Graphic options
ytics_rotate_secondary52.2.3 Graphic options
ytics_secondary52.2.3 Graphic options
ytics_secondary_axis52.2.3 Graphic options
yv_grid52.2.3 Graphic options
yx_ratio12.4 Plotting Options

Z
z12.4 Plotting Options
z_voxel52.2.3 Graphic options
zaxis52.2.3 Graphic options
zaxis_color52.2.3 Graphic options
zaxis_type52.2.3 Graphic options
zaxis_width52.2.3 Graphic options
Zeilberger87.2 Functions and Variables for zeilberger
zeroa5.4 Functions and Variables for Constants
zerob5.4 Functions and Variables for Constants
zerobern29.1 Functions and Variables for Number Theory
zeroequiv11.4 Functions and Variables for Predicates
zerofor68.2 Functions and Variables for linearalgebra
zeromatrix23.2 Functions and Variables for Matrices and Linear Algebra
zeromatrixp68.2 Functions and Variables for linearalgebra
zeta29.1 Functions and Variables for Number Theory
zeta%pi29.1 Functions and Variables for Number Theory
zgeev65.2 Functions and Variables for lapack
zheev65.2 Functions and Variables for lapack
zlabel12.4 Plotting Options
zlabel52.2.3 Graphic options
zlabel_rotate52.2.3 Graphic options
zlange65.2 Functions and Variables for lapack
zlength54.3.3 Scene object's options
zmin12.4 Plotting Options
zn_add_table29.1 Functions and Variables for Number Theory
zn_carmichael_lambda29.1 Functions and Variables for Number Theory
zn_characteristic_factors29.1 Functions and Variables for Number Theory
zn_determinant29.1 Functions and Variables for Number Theory
zn_factor_generators29.1 Functions and Variables for Number Theory
zn_invert_by_lu29.1 Functions and Variables for Number Theory
zn_log29.1 Functions and Variables for Number Theory
zn_mult_table29.1 Functions and Variables for Number Theory
zn_nth_root29.1 Functions and Variables for Number Theory
zn_order29.1 Functions and Variables for Number Theory
zn_power_table29.1 Functions and Variables for Number Theory
zn_primroot29.1 Functions and Variables for Number Theory
zn_primroot_limit29.1 Functions and Variables for Number Theory
zn_primroot_p29.1 Functions and Variables for Number Theory
zn_primroot_pretest29.1 Functions and Variables for Number Theory
zn_primroot_verbose29.1 Functions and Variables for Number Theory
zrange52.2.3 Graphic options
ztics52.2.3 Graphic options
ztics_axis52.2.3 Graphic options
ztics_rotate52.2.3 Graphic options

Jump to:   !   "   #   $   %   '   *   +   -   .   /   :   ;   <   =   >   ?   @   [   ]   ^   _   `   |   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C. Documentation Categories

Category: Airy functions

Introduction to Special Functions airy_ai airy_bi airy_dai airy_dbi

Category: Algebraic equations

%rnum %rnum_list algepsilon algexact algsys backsubst breakup dispflag eliminate bf_find_root find_root find_root_abs find_root_error find_root_rel funcsolve multiplicities newton programmode realonly solve solvedecomposes solveexplicit solvefactors solvenullwarn solveradcan solvetrigwarn

Category: Arrays

array arrayapply arrayinfo arraymake arrays arraysetapply fillarray listarray make_array rearray remarray subvar translate_fast_arrays use_fast_arrays

Category: Bessel functions

%f %s Introduction to Special Functions bessel_i bessel_j bessel_k bessel_simplify bessel_y besselexpand hankel_1 hankel_2 scaled_bessel_i scaled_bessel_i0 scaled_bessel_i1 spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2

Category: Binary operations

bit_and bit_length bit_lsh bit_not bit_onep bit_or bit_rsh bit_xor

Category: Complex variables

Introduction to Numbers cabs carg cbffac conjugate demoivre exponentialize imagpart plog polarform polartorect realpart rectform recttopolar residue

Category: Console interaction

% %th ? ?? Documentation Interrupts _ appendfile closefile demo describe entermatrix example ibase kill labels labels linenum myoptions obase optionset playback printfile prompt quit ratprint read readonly refcheck setcheck setcheckbreak setval to_lisp writefile

Category: Constants

%e %gamma %i %phi %pi constant constantp false ind inf infinity minf true und zeroa zerob

Category: Continued fractions

cf cfdisrep cfexpand cflength

Category: Debugging

Keyword Commands Source Level Debugging backtrace break bug_report build_info debugmode error_size error_syms room run_testsuite share_testsuite_files showtime testsuite_files time timer timer_devalue timer_info trace trace_options untimer untrace

Category: Declarations and inferences

activate activecontexts additive alias aliases alphabetic antisymmetric askexp askinteger asksign assume assume_pos assume_pos_pred assumescalar atvalue commutative compare constant context contexts deactivate declare decreasing increasing dependencies depends even odd facts featurep features forget get gradef gradefs infix infolists integer noninteger integervalued is killcontext lassociative linear mainvar matchdeclare maybe multiplicative newcontext nonscalar numerval outative posfun printprops properties props propvars put qput rassociative irrational rational complex imaginary real rem remove scalar sign supcontext symmetric

Category: Descriptive statistics

Introduction to descriptive

Category: Differential calculus

atomgrad del depends derivabbrev derivdegree derivlist derivsubst diff dscalar express gradef gradefs hessian implicit_derivative jacobian vect_cross wronskian

Category: Differential equations

Introduction to contrib_ode Introduction to drawdf Introduction to numerical solution of differential equations Lindstedt at atvalue bc2 desolve ic1 ic2 laplace ode2 plotdf ploteq rk

Category: Differential geometry

cartan

Category: Display flags and variables

%edispflag absboxchar dispflag display2d display_format_internal error_size error_syms exptdispflag fpprintprec grind inchar labels leftjust linechar linel linenum lispdisp lmxchar negsumdispflag noundisp obase outchar pfeformat powerdisp psexpand rmxchar showtime sqrtdispflag stardisp stringdisp ttyoff

Category: Display functions

disp dispcon dispfun display disprule dispterms engineering_format_floats grind labels ldisp ldisplay playback print printpois printprops reveal show showratvars

Category: Dynamical systems

The dynamics package

Category: Elliptic functions

Introduction to Elliptic Functions and Integrals inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn jacobi_cd jacobi_cn jacobi_cs jacobi_dc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_sc jacobi_sd jacobi_sn

Category: Elliptic integrals

elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi

Category: Error messages

0 to a negative exponent Comma is not a prefix operator Illegal use of delimiter No such list element Only symbols can be bound Operators of arguments must all be the same VTK is not installed argument must be a non-atomic expression loadfile failed to load makelist second argument must evaluate to a number out of memory part fell off the end undefined variable during plotting undefined variable during translation

Category: Evaluation flags

%enumer detout eval evflag evfun float infeval noeval nouns numer pred simp

Category: Evaluation

' " : :: Nouns and Verbs at derivlist ev kill refcheck remvalue values

Category: Exponential Integrals

expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_e_simplify expintegral_ei expintegral_li expintegral_shi expintegral_si expintexpand expintrep

Category: Exponential and logarithm functions

%e_to_numlog %edispflag %emode %enumer exp exptsubst li log logabs logarc logconcoeffp logcontract logexpand lognegint logsimp plog polarform taylor_logexpand

Category: Expressions

Package facexp Package rducon Package scifac append args arrayapply arraymake arraysetapply assoc atom block box boxchar collapse collectterms combine concat cons copy delete denom derivdegree derivsubst disolate dispform distrib dontfactor dpart eighth endcons expand expandwrt expandwrt_denom expandwrt_factored expon expop exptdispflag exptisolate exptsubst facsum facsum_combine factorfacsum factorout factorsum fifth first firstn fourth freeof fullmap fullmapl funmake gcfac gfactorsum hipow inflag inpart intosum isolate isolate_wrt_times last lastn length lfreeof lhs linear listconstvars listdummyvars listofvars lopow lpart m1pbranch mainvar maxnegex maxposex member multiplicative multthru nextlayerfactor ninth nonarray nonzeroandfreeof nterms num numfactor op opsubst opsubst optimize optimprefix ordergreat orderless ordergreatp orderlessp part partition partswitch pickapart piece pop psubst push rational reduce_consts rembox rempart rest reveal reverse rhs rncombine rootsconmode sconcat second seventh sixth sqrtdenest sublis sublis_apply_lambda subnumsimp subst substinpart substpart subvar tenth third unorder xthru

Category: File input

Introduction to numericalio batch batchload close demo directory file_search file_search_demo file_search_lisp file_search_maxima file_search_tests file_search_usage file_type filename_merge flength fposition load load_pathname loadfile loadprint openr openr_binary pathname_directory pathname_name pathname_type printfile read_array read_binary_array read_binary_list read_binary_matrix read_hashed_array read_list read_matrix read_nested_list readbyte readchar readline setup_autoload

Category: File output

Introduction to numericalio appendfile close closefile draw draw2d draw3d drawf_ile file_output_append filename_merge flength flush_output fposition freshline multiplot_mode newline opena opena_binary openw openw_binary printf save stringout tex with_stdout write_binary_data write_data writebyte writefile

Category: Fourier transform

Introduction to Fourier series Introduction to fast Fourier transform

Category: Function application

apply fullmap fullmapl funmake macroexpand macroexpand1 macroexpansion map maperror maplist mapprint maxapplydepth maxapplyheight outermap scanmap

Category: Function definition

::= := Function buildq define dispfun functions fundef lambda local macros remfunction setup_autoload splice

Category: Gamma and factorial functions

!! beta beta_args_sum_to_integer beta_expand beta_incomplete beta_incomplete_generalized beta_incomplete_regularized bffac bfpsi bfpsi0 cbffac factcomb factlim ! factorial factorial_expand gamma gamma_expand gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized gammalim genfact log_gamma makefact makegamma maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint pochhammer pochhammer_max_index psi stirling sumsplitfact

Category: Generating functions

ggf

Category: Global flags

debugmode derivabbrev engineering_format_floats file_output_append listarith loadprint logabs m1pbranch macroexpansion nolabels optionset ratvarswitch refcheck setcheck setcheckbreak timer_devalue use_fast_arrays

Category: Global variables

% %% _ __ adim aform aliases arrays asymbol dependencies file_search_demo file_search_lisp file_search_maxima file_search_tests file_search_usage functions infolists macros manual_demo maxima_tempdir maxima_userdir myoptions newline opproperties prompt props setval share_testsuite_files space structures tab testsuite_files us_ascii_only values

Category: Groebner bases

Introduction to Affine Introduction to grobner

Category: Group theory

Introduction to Symmetries todd_coxeter

Category: Help

? ?? About Terms in Japanese apropos demo describe example manual_demo

Category: Hyperbolic functions

%iargs acosh acoth acsch asech asinh atanh cosh coth csch demoivre exponentialize sech sinh tanh

Category: Hypergeometric functions

hypergeometric_simp

Category: Integers

divisors gcfactor integer_partitions intfaclim modulus moebius multinomial_coeff num_distinct_partitions num_partitions stirling1 stirling2

Category: Integral calculus

Introduction to QUADPACK absint antid antidiff changevar dblint defint erfflag intanalysis integrate integrate_use_rootsof integration_constant integration_constant_counter ldefint logabs residue risch tldefint

Category: Integral equations

ieqn ieqnprint

Category: Laplace transform

delta desolve ilt laplace specint

Category: Limits

lhospitallim limit limsubst tlimit tlimswitch

Category: Linear algebra

Introduction to linearalgebra

Category: Linear equations

augcoefmatrix coefmatrix dgesv echelon globalsolve linsolve linsolve_params linsolvewarn triangularize

Category: Linear recurrences

Introduction to solve_rec

Category: Lists

[ ] append assoc cons copylist create_list delete eighth endcons fifth first firstn flatten fourth fullsetify join last lastn length listarith listp lmax lmin lreduce makelist member ninth permut permutations pop push random_permutation rest reverse rreduce second setify seventh sixth some sort sublist sublist_indices tenth third tree_reduce xreduce

Category: Mathematical functions

abs agd ceiling charfun combination covers delta entier exsec fix floor gaussprob gd hav isqrt lmax lmin max min mod permutation round signum sqrt sqrtdispflag truncate unit_step vers

Category: Matrices

addcol addrow adjoint augcoefmatrix cauchy_matrix charpoly coefmatrix col columnvector covect copymatrix determinant detout diag diagmatrix doallmxops domxexpt domxmxops domxnctimes doscmxops doscmxplus echelon eigen ematrix entermatrix genmatrix ident invert list_matrix_entries lmxchar matrix matrix_element_add matrix_element_mult matrix_element_transpose matrixexp matrixmap matrixp mattrace minor ncharpoly newdet nonscalar nonscalarp permanent rank ratmx row scalarmatrixp scalarp setelmx sparse submatrix tracematrix transpose triangularize zeromatrix

Category: Matrix decompositions

cholesky eigens_by_jacobi lu_factor

Category: Nouns and verbs

Nouns and Verbs noun noundisp nounify nouns verbify

Category: Number theory

bern bernpoly bfhzeta bfzeta binomial bit_and bit_length bit_lsh bit_not bit_onep bit_or bit_rsh bit_xor burn chinese divsum euler factors_only fib fibtophi ifactors igcdex inrt inv_mod jacobi lcm lucas minfactorial next_prime power_mod prev_prime primep primep_number_of_tests primes qunit totient zerobern zeta zeta%pi zn_add_table zn_carmichael_lambda zn_characteristic_factors zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table zn_nth_root zn_order zn_power_table zn_primroot zn_primroot_limit zn_primroot_p zn_primroot_pretest zn_primroot_verbose

Category: Numerical evaluation

bffac bfhzeta bfloat bfloatp bfpsi bfpsi0 bftorat bftrunc bfzeta cbffac float float2bf floatnump fpprec fpprintprec keepfloat numer numer_pbranch numerval ratepsilon rationalize ratprint stats_numer

Category: Numerical methods

Introduction to QUADPACK Introduction to cobyla Introduction to fast Fourier transform Introduction to interpol Introduction to lapack Introduction to lbfgs Introduction to minpack Introduction to mnewton Introduction to numerical solution of differential equations Introduction to simplex allroots augmented_lagrangian_method bfallroots bf_find_root find_root find_root_abs find_root_error find_root_rel horner linear_program lsquares_estimates lsquares_estimates_approximate maximize_lp minimize_lp newton nroots plotdf ploteq plsquares polyfactor quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws random realroots rk romberg rootsepsilon

Category: Operators

!! # ' " ** * + - / ^ . : :: ::= := < <= > >= = @ Introduction to operators [ ] ^^ additive and antisymmetric commutative equal express ! factorial infix lassociative linear matchfix nary nofix not notequal op operatorp opproperties or outative posfun postfix prefix rassociative symmetric | ~

Category: Optimization

Introduction to cobyla Introduction to lbfgs Introduction to simplex augmented_lagrangian_method

Category: Orthogonal polynomials

Introduction to orthogonal polynomials

Category: Package absimp

Package absimp

Category: Package affine

Introduction to Affine all_dotsimp_denoms check_overlaps declare_weights dotsimp extract_linear_equations fast_central_elements fast_linsolve grobner_basis list_nc_monomials mono monomial_dimensions nc_degree set_up_dot_simplifications

Category: Package alt-display

define_alt_display info_display mathml_display multi_display_for_texinfo reset_displays set_alt_display set_prompt tex_display

Category: Package antid

linear

Category: Package asympa

asympa

Category: Package atensor

Introduction to atensor abasep adim af aform alg_type asymbol atensimp av init_atensor sf

Category: Package atrig1

atrig1

Category: Package augmented_lagrangian

augmented_lagrangian_method

Category: Package bitwise

bit_and bit_length bit_lsh bit_not bit_onep bit_or bit_rsh bit_xor

Category: Package bode

bode_gain bode_phase

Category: Package cobyla

Introduction to cobyla

Category: Package contrib_ode

%c %k1 %k2 Introduction to contrib_ode bessel_simplify contrib_ode dgauss_a dgauss_b dkummer_m dkummer_u expintegral_e_simplify gauss_a gauss_b kummer_m kummer_u method ode_check odelin

Category: Package ctensor

Introduction to ctensor bdvac bimetric cdisplay cframe_flag cgeodesic checkdiv christof cmetric cnonmet_flag cograd contortion contragrad csetup ct_coords ct_coordsys ctaylor ctaypov ctaypt ctayswitch ctayvar ctorsion_flag ctransform ctrgsimp deleten diagmatrixp diagmetric dim dscalar dscalar einstein fb findde frame_bracket gdet ic_convert init_ctensor invariant1 invariant2 kinvariant kt leinstein lfg lg lriem lriemann nm nmc nonmetricity np npi nptetrad ntermst petrov psi ratchristof rateinstein ratriemann ratweyl ric ricci riem riemann rinvariant scurvature symmetricp tensorkill tr ufg ug uric uricci uriem uriemann weyl weyl

Category: Package descriptive

Introduction to descriptive barsplot barsplot_description boxplot boxplot_description build_sample cdf_empirical central_moment continuous_freq cor cov cov1 cv discrete_freq geometric_mean global_variances harmonic_mean histogram histogram_description km kurtosis list_correlations mean mean_deviation median median_deviation noncentral_moment pearson_skewness piechart piechart_description principal_components qrange quantile quartile_skewness range scatterplot scatterplot_description skewness smax smin standardize starplot starplot_description std std1 stemplot subsample transform_sample var var1

Category: Package diag

JF ModeMatrix diag dispJordan jordan mat_function minimalPoly

Category: Package distrib

Introduction to distrib cdf_bernoulli cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson cdf_rayleigh cdf_student_t cdf_weibull kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete kurtosis_geometric kurtosis_gumbel kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2 kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson kurtosis_rayleigh kurtosis_student_t kurtosis_weibull mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal pdf_pareto pdf_poisson pdf_rayleigh pdf_student_t pdf_weibull quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2 quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t quantile_weibull random_bernoulli random_beta random_binomial random_cauchy random_chi2 random_continuous_uniform random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_poisson random_rayleigh random_student_t random_weibull skewness_bernoulli skewness_beta skewness_binomial skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t skewness_weibull std_bernoulli std_beta std_binomial std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull var_bernoulli var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson var_rayleigh var_student_t var_weibull

Category: Package draw

Introduction to draw Introduction to drawdf adapt_depth allocation axis_3d axis_bottom axis_left axis_right axis_top background_color border boundaries_array capping cbrange cbtics color colorbox columns contour contour_levels cylindrical data_file_name delay dimensions draw draw2d draw3d draw_realpart drawf_ile elevation_grid ellipse enhanced3d errors explicit file_name fill_color filled_func font font_size geomap get_pixel gnuplot_file_name gr2d gr3d grid head_angle head_both head_length head_type image implicit interpolate_color ip_grid ip_grid_in key key_pos label label_alignment label_orientation line_type line_width logcb logx logx_secondary logy logy_secondary logz make_level_picture make_poly_continent make_poly_country make_polygon make_rgb_picture mesh multiplot_mode negative_picture nticks numbered_boundaries palette parametric parametric_surface picture_equalp picturep point_size point_type points points_joined polar polygon proportional_axes quadrilateral read_xpm rectangle region_boundaries region_boundaries_plus rgb2level set_draw_defaults spherical surface_hide take_channel terminal title transform transparent triangle tube unit_vectors user_preamble vector view wired_surface x_voxel xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel xlabel_secondary xrange xrange_secondary xtics xtics_axis xtics_rotate xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid xy_file xyplane y_voxel yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width ylabel ylabel_secondary yrange yrange_secondary ytics ytics_axis ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis yv_grid z_voxel zaxis zaxis_color zaxis_type zaxis_width zlabel zlabel_rotate zrange ztics ztics_axis ztics_rotate

Category: Package drawdf

Introduction to drawdf drawdf

Category: Package dynamics

The dynamics package animation azimuth background capping center chaosgame color cone cube cylinder elevation endphi endtheta evolution evolution2d height height ifs julia linewidth mandelbrot opacity orbits orientation origin phiresolution points pointsize position radius resolution restart scale scene sphere staircase startphi starttheta surface thetaresolution track tstep width windowname windowtitle wireframe xlength ylength zlength

Category: Package eigen

eigen eigenvalues eivals eigenvectors eivects gramschmidt innerproduct inprod similaritytransform simtran ueivects uniteigenvectors unitvector uvect

Category: Package ezunits

Introduction to ezunits ` `` constvalue declare_constvalue declare_dimensions declare_fundamental_dimensions fundamental_dimensions remove_fundamental_dimensions declare_fundamental_units remove_fundamental_units declare_qty declare_unit_conversion declare_units dimensionless dimensions dimensions_as_list fundamental_units natural_unit qty remove_constvalue remove_dimensions unitp units

Category: Package f90

f90

Category: Package facexp

Package facexp collectterms facsum facsum_combine factorfacsum nextlayerfactor

Category: Package fft

Introduction to fast Fourier transform bf_fft bf_inverse_fft bf_inverse_real_fft bf_real_fft fft inverse_fft inverse_real_fft polartorect real_fft recttopolar

Category: Package finance

amortization annuity_fv annuity_pv arit_amortization benefit_cost days360 fv geo_amortization geo_annuity_fv geo_annuity_pv graph_flow irr npv pv saving

Category: Package fourie

Introduction to Fourier series absint cosnpiflag equalp fourcos fourexpand fourier fourint fourintcos fourintsin foursimp foursin funp remfun sinnpiflag totalfourier

Category: Package fractals

fernfale hilbertmap julia_parameter julia_set julia_sin mandelbrot_set sierpinskiale sierpinskimap snowmap treefale

Category: Package functs

Package functs agd arithmetic arithsum combination covers exsec gaussprob gcdivide gd geometric geosum harmonic hav nonzeroandfreeof permutation rational rempart tracematrix vers wronskian

Category: Package ggf

GGFCFMAX GGFINFINITY ggf

Category: Package graphs - constructions

circulant_graph clebsch_graph complement_graph complete_bipartite_graph complete_graph copy_graph cube_graph cuboctahedron_graph cycle_digraph cycle_graph dodecahedron_graph empty_graph flower_snark from_adjacency_matrix frucht_graph graph_product graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grotzch_graph heawood_graph icosahedron_graph icosidodecahedron_graph induced_subgraph line_graph make_graph mycielski_graph new_graph path_digraph path_graph petersen_graph random_bipartite_graph random_digraph random_graph random_graph1 random_network random_regular_graph random_tournament random_tree small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph snub_cube_graph snub_dodecahedron_graph truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tutte_graph underlying_graph wheel_graph

Category: Package graphs - draw_graphs options

draw_graph_program edge_color edge_coloring edge_partition edge_type edge_width file_name fixed_vertices head_angle head_length label_alignment program redraw show_edge_color show_edge_type show_edge_width show_edges show_id show_label show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight spring_embedding_depth terminal vertex_color vertex_coloring vertex_partition vertex_size vertex_type

Category: Package graphs - io

dimacs_export dimacs_import graph6_decode graph6_encode graph6_export graph6_import sparse6_decode sparse6_encode sparse6_export sparse6_import

Category: Package graphs - modifications

add_edge add_edges add_vertex add_vertices connect_vertices contract_edge remove_edge

Category: Package graphs - properties

adjacency_matrix average_degree biconnected_components bipartition chromatic_index chromatic_number clear_edge_weight clear_vertex_label connected_components degree_sequence diameter edge_coloring edge_connectivity edges get_edge_weight get_vertex_label girth graph_center graph_charpoly graph_eigenvalues graph_order graph_periphery graph_size hamilton_cycle hamilton_path in_neighbors is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph is_isomorphic is_planar is_sconnected is_tree is_vertex_in_graph isomorphism laplacian_matrix max_clique max_degree max_flow max_independent_set max_matching min_degree min_edge_cut min_vertex_cover min_vertex_cut minimum_spanning_tree neighbors odd_girth out_neighbors planar_embedding radius set_edge_weight set_vertex_label shortest_path shortest_weighted_path strong_components topological_sort vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertices wiener_index

Category: Package graphs

Introduction to graphs add_edge add_edges add_vertex add_vertices adjacency_matrix average_degree biconnected_components bipartition chromatic_index chromatic_number circulant_graph clear_edge_weight clear_vertex_label clebsch_graph complement_graph complete_bipartite_graph complete_graph connect_vertices connected_components contract_edge copy_graph create_graph cube_graph cuboctahedron_graph cycle_digraph cycle_graph degree_sequence diameter dimacs_export dimacs_import dodecahedron_graph draw_graph draw_graph_program edge_color edge_coloring edge_coloring edge_connectivity edge_partition edge_type edge_width edges empty_graph file_name fixed_vertices flower_snark from_adjacency_matrix frucht_graph get_edge_weight get_vertex_label girth graph6_decode graph6_encode graph6_export graph6_import graph_center graph_charpoly graph_eigenvalues graph_order graph_periphery graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grotzch_graph hamilton_cycle hamilton_path head_angle head_length heawood_graph icosahedron_graph icosidodecahedron_graph in_neighbors induced_subgraph is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph is_isomorphic is_planar is_sconnected is_tree is_vertex_in_graph isomorphism label_alignment laplacian_matrix line_graph make_graph max_clique max_degree max_flow max_independent_set max_matching min_degree min_edge_cut min_vertex_cover min_vertex_cut minimum_spanning_tree mycielski_graph neighbors new_graph odd_girth out_neighbors path_digraph path_graph petersen_graph planar_embedding print_graph program radius random_bipartite_graph random_digraph random_graph random_graph1 random_network random_regular_graph random_tournament random_tree redraw remove_edge remove_vertex set_edge_weight set_vertex_label shortest_path shortest_weighted_path show_edge_color show_edge_type show_edge_width show_edges show_id show_label show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph snub_cube_graph snub_dodecahedron_graph sparse6_decode sparse6_encode sparse6_export sparse6_import spring_embedding_depth strong_components terminal topological_sort truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tutte_graph underlying_graph vertex_color vertex_coloring vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertex_partition vertex_size vertex_type vertices vertices_to_cycle vertices_to_path wheel_graph wiener_index

Category: Package grobner

Introduction to grobner poly_add poly_buchberger poly_buchberger_criterion poly_coefficient_ring poly_colon_ideal poly_content poly_depends_p poly_elimination_ideal poly_elimination_order poly_exact_divide poly_expand poly_expt poly_gcd poly_grobner poly_grobner_algorithm poly_grobner_debug poly_grobner_equal poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm poly_minimization poly_monomial_order poly_multiply poly_normal_form poly_normalize poly_normalize_list poly_polysaturation_extension poly_primary_elimination_order poly_primitive_part poly_pseudo_divide poly_reduced_grobner poly_reduction poly_return_term_list poly_s_polynomial poly_saturation_extension poly_secondary_elimination_order poly_subtract poly_top_reduction_only

Category: Package impdiff

implicit_derivative

Category: Package implicit_plot

implicit_plot

Category: Package ineq

Package ineq

Category: Package interpol

Introduction to interpol charfun2 cspline lagrange linearinterpol ratinterpol

Category: Package itensor

Introduction to itensor allsym canform canten changename components concan conmetderiv contract coord covdiff decsym defcon diff entertensor evundiff extdiff flipflag flush flush1deriv flushd flushnd hodge ic_convert icc1 icc2 ichr1 ichr2 icounter icurvature idiff idim idummy idummyx ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form iframes ifri igeodesic_coords igeowedge_flag ikt1 ikt2 imetric indexed_tensor indices inm inmc1 inmc2 ishow itr kdels kdelta lc2kdt lc_l lc_u levi_civita liediff listoftens lorentz_gauge makebox rediff remcomps remcon remcoord remsym rename show showcomps simpmetderiv tentex undiff | ~

Category: Package lapack

Introduction to lapack dgeev dgemm dgeqrf dgesv dgesvd dlange zlange zgeev zheev

Category: Package lbfgs

Introduction to lbfgs lbfgs lbfgs_ncorrections lbfgs_nfeval_max

Category: Package lindstedt

Lindstedt

Category: Package linearalgebra

Introduction to linearalgebra addmatrices blockmatrixp cholesky columnop columnspace columnswap ctranspose diag_matrix dotproduct eigens_by_jacobi get_lu_factors hankel hessian hilbert_matrix identfor invert_by_lu jacobian kronecker_product listp locate_matrix_entry lu_backsub lu_factor mat_cond mat_fullunblocker mat_norm mat_trace mat_unblocker matrix_size matrixp nonnegintegerp nullity nullspace orthogonal_complement polynomialp polytocompanion ptriangularize rank rowop rowswap toeplitz vandermonde_matrix zerofor zeromatrixp

Category: Package lsquares

Introduction to lsquares lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact lsquares_mse lsquares_residual_mse lsquares_residuals plsquares

Category: Package makeOrders

makeOrders

Category: Package minpack

Introduction to minpack Introduction to minpack

Category: Package mnewton

Introduction to mnewton mnewton newtonepsilon newtonmaxiter

Category: Package nchrpl

mattrace ncharpoly

Category: Package ntrig

ntrig

Category: Package numericalio

Introduction to numericalio assume_external_byte_order opena_binary openr_binary openw_binary read_array read_binary_array read_binary_list read_binary_matrix read_hashed_array read_list read_matrix read_nested_list write_binary_data write_data

Category: Package opsubst

opsubst

Category: Package orthopoly

Introduction to orthogonal polynomials assoc_legendre_p assoc_legendre_q chebyshev_t chebyshev_u gen_laguerre hermite intervalp jacobi_p laguerre legendre_p legendre_q orthopoly_recur orthopoly_returns_intervals orthopoly_weight pochhammer pochhammer_max_index spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2 spherical_harmonic ultraspherical unit_step

Category: Package physical_constants

Introduction to physical_constants

Category: Package quadpack

Introduction to QUADPACK quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws

Category: Package ratpow

ratp_coeffs ratp_dense_coeffs ratp_hipow ratp_lopow

Category: Package rducon

Package rducon reduce_consts

Category: Package romberg

romberg rombergabs rombergit rombergmin rombergtol

Category: Package scifac

Package scifac gcfac

Category: Package simplex

Introduction to simplex epsilon_lp linear_program maximize_lp minimize_lp nonegative_lp pivot_count_sx pivot_max_sx scale_lp

Category: Package solve_rec

Introduction to solve_rec product_use_gamma reduce_order simplify_products simplify_sum solve_rec solve_rec_rat summand_to_rec

Category: Package sqdnst

sqrtdenest

Category: Package stats

Introduction to stats cdf_rank_sum cdf_signed_rank inference_result inferencep items_inference linear_regression pdf_rank_sum pdf_signed_rank stats_numer take_inference test_mean test_means_difference test_normality test_proportion test_proportions_difference test_rank_sum test_sign test_signed_rank test_variance test_variance_ratio

Category: Package stirling

stirling

Category: Package stringproc

Introduction to String Processing adjust_external_format alphacharp alphanumericp ascii base64 base64_decode cequal cequalignore cgreaterp cgreaterpignore charat charlist charp cint clessp clesspignore close constituent crc24sum digitcharp eval_string flength flush_output fposition freshline get_output_stream_string lowercasep make_string_input_stream make_string_output_stream md5sum mgf1_sha1 newline newline number_to_octets octets_to_number octets_to_oid octets_to_string oid_to_octets opena openr openw parse_string printf readbyte readchar readline scopy sdowncase sequal sequalignore sexplode sha1sum sha256sum simplode sinsert sinvertcase slength smake smismatch space split sposition sprint sremove sremovefirst sreverse ssearch ssort ssubst ssubstfirst strim striml strimr string_to_octets stringp substring supcase tab tokens unicode unicode_to_utf8 uppercasep us_ascii_only utf8_to_unicode writebyte

Category: Package sym

Introduction to Symmetries comp2pui cont2part contract direct ele2comp ele2polynome ele2pui elem explose kostka lgtreillis ltreillis mon2schur multi_elem multi_orbit multi_pui multinomial multsym orbit part2cont partpol permut polynome2ele prodrac pui pui2comp pui2ele pui2polynome pui_direct puireduc resolvante resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer schur2comp somrac tcontract tpartpol treillis treinat

Category: Package unit

%unitexpand Introduction to Units convert metricexpandall setunits uforget usersetunits

Category: Package vect

Vectors scalefactors vect_cross vectorpotential vectorsimp

Category: Package zeilberger

AntiDifference Gosper GosperSum Gosper_in_Zeilberger Introduction to zeilberger MAX_ORD Zeilberger Zeilberger ev_point linear_solver mod_big_prime mod_test mod_threshold modular_linear_solver parGosper parGosper simplified_output trivial_solutions warnings

Category: Physical units

Introduction to Units Introduction to ezunits Introduction to physical_constants

Category: Plotting

Introduction to Plotting Introduction to draw Introduction to drawdf Introduction to numerical solution of differential equations Introduction to orthogonal polynomials Plotting Formats adapt_depth animation axes azimuth azimuth background barsplot barsplot_description bode_gain bode_phase box boxplot boxplot_description capping center chaosgame color color color_bar color_bar_tics cone contour_plot cube cylinder elevation elevation endphi endtheta evolution evolution2d geomview_command gnuplot_close gnuplot_command gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command gnuplot_file_args gnuplot_out_file gnuplot_pdf_term_command gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble gnuplot_ps_term_command gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start gnuplot_svg_term_command gnuplot_term gnuplot_view_args grid grid2d height height histogram histogram_description ifs implicit_plot iterations julia label legend linewidth logx logy make_transform mandelbrot mesh_lines_color nticks opacity orbits orientation origin palette pdf_file phiresolution piechart piechart_description plot2d plot3d plot_format plot_options plot_realpart plotdf ploteq png_file point_type points pointsize polar_to_xy position ps_file radius remove_plot_option resolution restart run_viewer same_xy same_xyz scale scatterplot scatterplot_description scene set_plot_option sphere spherical_to_xyz staircase starplot starplot_description startphi starttheta stemplot style surface svg_file t thetaresolution title track transform_xy tstep width windowname windowtitle wireframe x xlabel xlength xtics xy_scale y ylabel ylength ytics yx_ratio z zlabel zlength zmin

Category: Poisson series

intopois outofpois poisdiff poisexpt poisint poislim poismap poisplus poissimp poisson poissubst poistimes poistrim printpois

Category: Polynomials

Introduction to Affine Introduction to Polynomials Introduction to Symmetries allroots berlefact bezout bfallroots bothcoef coeff content divide eliminate ezgcd facexpand factor factorflag fasttimes gcd gcdex gcdivide gfactor lratsubst makeOrders multiplicities nroots nthroot polydecomp polyfactor polymod programmode quotient ratcoef realroots remainder resultant resultant rootsepsilon savefactors sqfr tellrat untellrat

Category: Power series

deftaylor maxtayorder pade powerseries revert revert2 taylor taylor_logexpand taylor_order_coefficients taylor_simplifier taylor_truncate_polynomials taylordepth taylorinfo taylorp taytorat trunc verbose

Category: Predicate functions

abasep alphacharp alphanumericp atom bfloatp blockmatrixp cequal cequalignore cgreaterp cgreaterpignore charp clessp clesspignore constantp constituent diagmatrixp digitcharp disjointp elementp emptyp evenp featurep floatnump if integerp intervalp is listp listp lowercasep mapatom matrixp matrixp maybe member nonnegintegerp nonscalarp numberp oddp operatorp ordergreatp orderlessp picture_equalp picturep poly_depends_p poly_grobner_subsetp polynomialp prederror primep ratnump ratp scalarp sequal sequalignore setequalp setp stringp subsetp subvarp symbolp symmetricp taylorp unknown uppercasep zeroequiv zeromatrixp zn_primroot_p

Category: Programming

Function Lisp and Maxima block catch do for from in next step thru unless while errcatch error errormsg errormsg go if local prederror return sstatus status throw

Category: Random numbers

make_random_state random random_bernoulli random_beta random_binomial random_cauchy random_chi2 random_continuous_uniform random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_poisson random_rayleigh random_student_t random_weibull set_random_state

Category: Rational expressions

Introduction to Polynomials fullratsimp fullratsubst gcd gcdex lratsubst rat ratcoef ratdenom ratdenomdivide ratdiff ratdisrep ratepsilon ratexpand ratfac ratmx ratnumer ratnump ratp ratp_coeffs ratp_dense_coeffs ratp_hipow ratp_lopow ratprint ratsimp ratsimpexpons ratsubst ratvars ratvarswitch ratweight ratweights ratwtlvl showratvars taytorat tellrat totaldisrep untellrat

Category: Rules and patterns

Introduction to Rules and Patterns Package absimp Package ineq apply1 apply2 applyb1 clear_rules current_let_rule_package default_let_rule_package defmatch defrule disprule let let_rule_packages letrat letrules letsimp matchdeclare remlet remrule tellsimp tellsimpafter

Category: Session management

Introduction for Runtime Environment batch batchload kill load loadfile myoptions nolabels optionset reset save stringout

Category: Sets

Introduction to Sets adjoin belln cardinality cartesian_product disjoin disjointp elementp emptyp equiv_classes every extremal_subset flatten full_listify intersect intersection listify lmax lmin makeset partition_set permutations powerset random_permutation set_partitions setdifference setequalp setp some subset subsetp symmdifference tree_reduce union xreduce

Category: Share packages

Introduction to Affine Introduction to Fourier series Introduction to QUADPACK Introduction to String Processing Introduction to Symmetries Introduction to Units Introduction to atensor Introduction to cobyla Introduction to contrib_ode Introduction to ctensor Introduction to descriptive Introduction to distrib Introduction to draw Introduction to drawdf Introduction to ezunits Introduction to fast Fourier transform Introduction to graphs Introduction to grobner Introduction to interpol Introduction to itensor Introduction to lapack Introduction to lbfgs Introduction to linearalgebra Introduction to lsquares Introduction to minpack Introduction to mnewton Introduction to numericalio Introduction to orthogonal polynomials Introduction to physical_constants Introduction to simplex Introduction to solve_rec Introduction to stats Introduction to zeilberger Lindstedt Package absimp Package facexp Package functs Package ineq Package rducon Package scifac The dynamics package Vectors augmented_lagrangian_method diag dimension eigen engineering_format_floats f90 ggf implicit_derivative implicit_plot makeOrders opsubst sqrtdenest stirling

Category: Simplification flags and variables

%e_to_numlog %emode %iargs %piargs algebraic besselexpand beta_args_sum_to_integer beta_expand ctrgsimp distribute_over domain dot0nscsimp dot0simp dot1simp dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules evflag gamma_expand gammalim halfangles logarc logconcoeffp logexpand lognegint logsimp negdistrib radexpand radsubstflag ratalgdenom ratdenomdivide ratsimpexpons rootsconmode scalarmatrixp simpproduct simpsum sumexpand sumsplitfact trigexpandplus trigexpandtimes triginverses trigsign

Category: Simplification functions

Package absimp Package ineq atensimp foursimp fullratsimp hypergeometric_simp logarc radcan ratsimp rootscontract scsimp simplify_sum trigexpand trigrat trigreduce trigsimp unknown vectorsimp

Category: Simplification

Introduction to Rules and Patterns lassociative linear multiplicative

Category: Special functions

%f %m %s %w Introduction to Special Functions airy_ai airy_bi airy_dai airy_dbi bessel_i bessel_j bessel_k bessel_simplify bessel_y besselexpand erf erf_generalized erfc erfi expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_e_simplify expintegral_ei expintegral_li expintegral_shi expintegral_si fresnel_c fresnel_s gamma gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized generalized_lambert_w hankel_1 hankel_2 hypergeometric_simp lambert_w log_gamma nzeta nzetai nzetar parabolic_cylinder_d scaled_bessel_i0 scaled_bessel_i1 struve_h struve_l

Category: Statistical estimation

Introduction to lsquares linear_regression

Category: Statistical functions

Introduction to distrib

Category: Statistical inference

Introduction to stats

Category: Strings

Introduction to String Processing concat sconcat string

Category: Structures

@ defstruct new structures

Category: Sums and products

Introduction to zeilberger arithmetic arithsum bashindices cauchysum genindex gensumnum geometric geosum harmonic lsum niceindices niceindicespref nusum product simplify_sum simpproduct simpsum sum sumcontract sumexpand unsum

Category: Syntax

Comments Identifiers Introduction to Strings Introduction to operators infix matchfix nary nofix postfix prefix

Category: TeX output

get_tex_environment set_tex_environment get_tex_environment_default set_tex_environment_default tentex tex texput

Category: Tensors

Introduction to atensor Introduction to ctensor Introduction to itensor

Category: Time and date functions

absolute_real_time decode_time elapsed_real_time elapsed_run_time encode_time parse_timedate timedate

Category: Translation and compilation

compfile compile compile_file declare_translated define_variable f90 fortindent fortran fortspaces mode_declare mode_identity tr_warnings_get translate translate_file

Category: Translation flags and variables

mode_check_errorp mode_check_warnp mode_checkp packagefile savedef tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex tr_function_call_default tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode tr_warn_undeclared tr_warn_undefined_variable transcompile translate_fast_arrays transrun

Category: Trigonometric functions

%iargs %piargs Introduction to Trigonometric acos acot acsc asec asin atan atan2 atrig1 cos cot csc demoivre exponentialize foursimp halfangles ntrig sec sin tan trigexpand trigexpandplus trigexpandtimes triginverses trigrat trigreduce trigsign trigsimp

Category: Vectors

Vectors eigen express nonscalar nonscalarp scalarp

Category: Warning messages

replaced x by y

Category: clebsch_gordan

clebsch_gordan racah_v racah_w wigner_3j wigner_6j wigner_9j


[Top] [Contents] [Index] [ ? ]

Footnotes

(1)

Applied Mathematics and Programming Division, K.U. Leuven

(2)

Applied Mathematics and Programming Division, K.U. Leuven

(3)

Institut für Mathematik, T.U. Wien

(4)

National Bureau of Standards, Washington, D.C., U.S.A

(5)

http://www.netlib.org/slatec

(6)

http://www.netlib.org/quadpack

(7)

R. Piessens, E. de Doncker-Kapenga, C.W. Uberhuber, and D.K. Kahaner. QUADPACK: A Subroutine Package for Automatic Integration. Berlin: Springer-Verlag, 1983, ISBN 0387125531.

(8)

Emacsの中の infoリーダを使っている読者は実際のプロンプト文字列を見るでしょう; 他の読者は群生化した出力を見るでしょう


[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

Short Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by 市川雄二 on June, 5 2017 using texi2html 1.76.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back previous section in reading order 1.2.2
[ > ] Forward next section in reading order 1.2.4
[ << ] FastBack beginning of this chapter or previous chapter 1
[ Up ] Up up section 1.2
[ >> ] FastForward next chapter 2
[Top] Top cover (top) of document  
[Contents] Contents table of contents  
[Index] Index index  
[ ? ] About about (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated by 市川雄二 on June, 5 2017 using texi2html 1.76.