[ < ] [ > ]   [ << ] [ 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です。

 
(%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の値に与えられた値を設定します。


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

This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.