Next: Equations, Previous: Differentiation [Contents][Index]
Next: Functions and Variables for Integration, Previous: Integration, Up: Integration [Contents][Index]
Maximaは、積分を扱うためのいくつかのルーチンを持っています。
integrate
関数はそれらのほとんどを利用します。
指定されていない関数(ともちろんその導関数)を扱うantid
パッケージもあります。
数値目的のためには、
quad_qag
, quad_qags
などと名付けられたQUADPACKから適応積分器一式があります。
それらは見出しQUADPACK
の下で記述されています。
超幾何関数を扱うことができます。詳細はspecint
を参照してください。
一般的に言って、Maximaは
「初等関数」(有理関数、三角関数、対数、指数関数、根号など)と2、3の拡張(誤差関数、二重対数関数)を使った積分可能な積分だけを扱います。
g(x)
やh(x)
と言った未知の関数を使った積分を扱いません。
Next: Introduction to QUADPACK, Previous: Introduction to Integration, Up: Integration [Contents][Index]
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
トップレベルMaximaで書かれ、翻訳され機械語にコンパイルされた二重積分ルーチン。
このパッケージをアクセスするにはload ("dblint")
を使ってください。
以下を計算するため、xとy方向に関して
シンプソンの規則方法を使います。
/b /s(x) | | | | f(x,y) dy dx | | /a /r(x)
関数fは、2つの変数の翻訳されコンパイルされた関数でなければいけなく、
rとsはそれぞれ、翻訳されコンパイルされた変数でなければいけません。
一方で、aとbは浮動小数点数でなければいけません。
ルーチンは、
xとyの区間の分割の数を決める2つのグローバル変数を持ちます:
dblint_x
とdblint_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_x
とdblint_y
を増やすことができます。
関数値は保存されないので、もし関数が非常に時間がかかるものなら、
もし何か変えたら再計算を待たなければいけません(すいません)。
関数f, r, sは、 dblint
コールの前に、翻訳されるかコンパイルされるかどちらかが要求されます。
これは、多くの場合、インタープリタコードに対して桁違いの速度改善がなされるでしょう!
demo (dblint)
は、
例の問題に適用されたdblint
のデモンストレーションを実行します。
定積分を計算しようとします。
integrate
は、
積分の範囲が指定されている時、
すなわち、integrate
が
integrate (expr, x, a, b)
としてコールされた時、
defint
をコールします。
このように、ユーザーの観点からは、integrate
をコールすることは十分です。
defint
は、シンボリック式、計算された積分または積分の名詞形、
を返します。
定積分の数値近似に関しては、quad_qag
と関連関数を参照してください。
デフォルト値: true
erfflag
がfalse
の時、
risch
が
もしまず第一に被積分になにもないなら、
答えの中にerf
関数を導入することを妨げます。
exprのsとパラメータtに関する逆ラプラス変換を計算します。
exprは、
分子は線形2次因子だけを持つ多項式の比でなければいけません。
solve
またはlinsolve
と合わせて
関数laplace
やilt
を使うことによって
ユーザーは1つの微分または畳み込み積分方程式やそれらの組を解くことができます。
(%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
デフォルト値: true
true
の時、定積分は、積分区間内の被積分関数の極を見つけようとします。
もしあれば、積分は主値積分として適切に評価されます。
もしintanalysisがfalse
なら、
このチェックは実行されず、積分は極がないことを仮定して実行されます。
ldefint
も参照してください。
例:
intanalysis
がfalse
に設定されている時
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
xに関するexprの積分をシンボリックに計算しようとします。
integrate (expr, x)
は不定積分で、
integrate (expr, x, a, b)
はa,bの上限下限を持つ定積分です。
integrate
はこの制限を強制しませんが、上限下限はxを含んではいけません。
aはbより小さい必要はありません。
bがaと等しいなら、integrate
は0を返します。
定積分の数値近似に関してはquad_qag
と関連関数を参照してください。
(複素積分)留数の計算に関してはresidue
を参照してください。
不定積分の代替計算方法に関してはantid
を参照してください。
integrate
が成功すれば、積分(integrate
を含まない式)を返します。
そうでなければ、積分の名詞形式(クォートされた演算子'integrate
)もしくは1つ以上の名詞形式を含む式を返します。
integrate
の名詞形式は積分記号で表示されます。
いくつかの環境では、(例えば、'integrate (expr, x)
のように、
シングルクオートされたintegrate
で手動で名詞形式を構成することが役に立ちます。
例えば、積分が、また計算されていないいくつかのパラメータに依存しているかもしれません。
名詞は、iが注目の名詞形式であるところのev (i, nouns)
によって、引数に適用されるかもしれません。
integrate
は不定積分とは別に、定積分を扱います。
それぞれの場合を扱うため、ある範囲の発見法を用意しています。
定積分の特別な場合は、0や無限大に等しい積分の下限上限を含んだり、
0や%pi
や2 %pi
に等しい下限上限を持つ三角関数を含んだり、
有理関数やベータやプサイ関数の定義に関連した積分やいくつかの対数的な積分、三角関数積分を含んだりします。
有理関数の処理は、留数の計算を含むかもしれません。
もし適用可能な特殊な場合が見つからなければ、不定積分を計算し、下限上限でそれを評価しようとするでしょう。
これは、下限上限に無限大の極限を取ることを含みます。ldefint
も参照してください。
不定積分の特殊な場合は、三角関数、指数対数関数、有理関数を含みます。
integrate
は初等積分の短いテーブルもまた利用しています。
もし非積分関数が形式f(g(x)) * diff(g(x), x)
を持つなら、integrate
は、変数の交換を実行します。
integrate
は、g(x)
の導関数が非積分関数を割るような部分式g(x)
を見つけようとします。
この探索は、gradef
関数によって定義された導関数を利用します。
changevar
やantid
も参照ください。
もしこれまでの発見法のどれも不定積分を見つけられなければ、リッシュのアルゴリズムが実行されます。
フラグrisch
が、ev
のコールやコマンドライン上でevflag
として設定されるかもしれません。
例えば、ev (integrate (expr, x), risch)
や
integrate (expr, x), risch
というように。
もしrisch
がtrue
なら、integrate
は、発見法を最初に試さずに、risch
関数をコールします。
risch
も参照ください。
integrate
はf(x)
記法で陽に表現された関数関係のみに動作します。
integrate
はdepends
関数で規定された陰の依存性を考慮しません。
integrate
は非積分関数のパラメータのある性質を知っている必要がある場合があります。
integrate
はassume
データベースを最初に参照し、
注目の変数がそこになければ、integrate
はユーザーに問い合わせます。
質問に依存して、適切な応答は、yes;
やno;
やpos;
, zero;
, neg;
など。
integrate
は線形には宣言されていません。declare
とlinear
を参照ください。
integrate
は2、3の特集な場合だけ、部分積分を企てます。
例:
(%i1) integrate (sin(x)^3, x); 3 cos (x) (%o1) ------- - cos(x) 3
(%i2) integrate (x/ sqrt (b^2 - x^2), x); 2 2 (%o2) - sqrt(b - x )
(%i3) integrate (cos(x)^2 * exp(x), x, 0, %pi); %pi 3 %e 3 (%o3) ------- - - 5 5
(%i4) integrate (x^2 * exp(-x^2), x, minf, inf); sqrt(%pi) (%o4) --------- 2
assume
と対話的問い合わせの利用
(%i1) assume (a > 1)$
(%i2) integrate (x**a/(x+1)**(5/2), x, 0, inf); 2 a + 2 Is ------- an integer? 5 no; Is 2 a - 3 positive, negative, or zero? neg; 3 (%o2) beta(a + 1, - - a) 2
gradef
で規定された導関数を使ったものと未知関数r(x)
の微分diff(r(x))
を使ったもの。
(%i3) gradef (q(x), sin(x**2)); (%o3) q(x)
(%i4) diff (log (q (r (x))), x); d 2 (-- (r(x))) sin(r (x)) dx (%o4) ---------------------- q(r(x))
(%i5) integrate (%, x); (%o5) log(q(r(x)))
'integrate
名詞形を含む戻り値。
この例では、Maximaは有理関数の分母の因子を抽出できますが、剰余を因数分解できないか積分をみつけられません。
grind
は、結果として名詞形'integrate
を示します。
積分や有理関数について更に知るにはintegrate_use_rootsof
も参照ください。
(%i1) expand ((x-4) * (x^3+2*x+1)); 4 3 2 (%o1) x - 4 x + 2 x - 7 x - 4
(%i2) integrate (1/%, x); / 2 [ x + 4 x + 18 I ------------- dx ] 3 log(x - 4) / x + 2 x + 1 (%o2) ---------- - ------------------ 73 73
(%i3) grind (%); log(x-4)/73-('integrate((x^2+4*x+18)/(x^3+2*x+1),x))/73$
f_1
の本体は、integrate
の名詞形を含みます。
クォートクォート演算子''
があると、積分が評価され、結果がf_2
の本体になります。
(%i1) f_1 (a) := integrate (x^3, x, 1, a); 3 (%o1) f_1(a) := integrate(x , x, 1, a)
(%i2) ev (f_1 (7), nouns); (%o2) 600
(%i3) /* Note parentheses around integrate(...) here */ f_2 (a) := ''(integrate (x^3, x, 1, a)); 4 a 1 (%o3) f_2(a) := -- - - 4 4
(%i4) f_2 (7); (%o4) 600
デフォルト値: %c
積分定数は、等式の不定積分によって導入され、
定数名は、
integration_constant
とintegration_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
デフォルト値: 0
積分定数が等式の不定積分によって導入された時、
定数名は、
integration_constant
とintegration_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
デフォルト値: false
integrate_use_rootsof
がtrue
かつ有理関数の分子が因数分解できない時、
integrate
は、
分子の(まだ知られていない)根上の和という形式で積分を返します。
例えば、
integrate_use_rootsof
をfalse
に設定すると、
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がもっと役立つ結果を得るのを助けます。
exprのxに関する不定積分を上限bと下限aで評価するために
limit
を使うことによってexprの定積分を計算しようとします。
もし定積分を計算するのに失敗したなら、
ldefint
は、名詞形として極限を含む式を返します。
ldefint
は、integrate
からコールされないので、
o executing
ldefint (expr, x, a, b)
を実行することは、
integrate (expr, x, a, b)
とは違った結果をもたらすかもしれません。
ldefint
は、定積分を評価するためにいつも同じ方法を使いますが、
integrate
は、様々な発見的方法を利用し、いくつかの特殊な場合を認識することもあります。
計算は、
nonlist
または形式
[indeterminatej=expressionj, indeterminatek=expressionk, ...]
でなければならないグローバル変数potentialzeroloc[0]
を利用します。
ここで、前者は後者の中のすべての右辺のnonlist式と同値です(訳者無理解)。
示された右辺は、積分の下限として使われます。
積分の成功は、
それらの値と順序に依存するかもしれません。
potentialzeroloc
は、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
リッシュアルゴリズムの超越な場合を使って、
exprを
xに関して積分します。
(リッシュアルゴリズムの代数的な場合は実装されていません。)
これは、現在、integrate
の主要部ができない入れ子の指数関数や対数関数の場合を扱います。
integrate
は、これらの場合が与えられたなら、自動的にrisch
を適用します。
erfflag
がもしfalse
なら、
もしまず第一に被積分関数になにもないなら、
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)
tlimswitch
がtrue
に設定されているldefint
と同値です。
Next: Functions and Variables for QUADPACK, Previous: Functions and Variables for Integration, Up: Integration [Contents][Index]
QUADPACKは、1次元定積分の数値計算のための関数のコレクションです。 R. Piessens 1, E. de Doncker 2, C. Ueberhuber 3, D. Kahaner 4. の合同プロジェクトから始まりました。
Maximaに含まれるQUADPACKライブラリは、
SLATEC共通数学ライブラリ バージョン4.15
に現れる
QUADPACKのFortranのソースコードの
(プログラムf2cl
による)自動翻訳です。
SLATECライブラリは1993年7月付ですが、QUADPACK関数は何年か前に書かれました。 QUADPACKももう1つのバージョンが Netlib 6に あります; このバージョンがSLATECバージョンとどう違うのかはっきりしません。
Maximaに含まれるQUADPACK関数は、 これらの関数が、不特定の回数の関数の評価を要求し、 指定された精度まで結果を計算しようとする意味で、 すべて自動的です。 Maximaの、QUADPACKのLisp翻訳は、いくつかの自動的でない関数も含みますが、 それらは、Maximaレベルで公開されていません。
QUADPACKについての更なる情報は、 QUADPACK本 7 の中に見つけることができます。
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_qawo
は、
quad_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 です。
大域的適応再分割戦略が適用され、 aまたはbを含む部分区間上では、 変形Clenshaw-Curtis積分を使います。
quad_qawc
f(x)/(x - c)のコーシーの主値を 有限の区間(a, b)上で指定されたcを用いて 計算します。 戦略は、大域的適応的で、 点x = cを含む部分範囲上で変形Clenshaw-Curtis積分が使われます。
Previous: Introduction to QUADPACK, Up: Integration [Contents][Index]
一般関数の有限の区間上の積分。
quad_qag
は、Aind(Piessens, 1973)の戦略を使った
簡単な大域的適応積分器を実装しています。
呼び出し側は、ルール評価コンポーネントのための
ガウスークロンロッドの求積公式の6つのペアの中から選ぶことができます。
強く振動する非積分関数には高次のルールが適切です。
quad_qagは積分 integrate (f(x), x, a, b) を計算します。
非積分関数は依存変数xのf(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
は、イプシロンアルゴリズム(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_qags
は、quad_qag
よりも精確で
効率的であることに注意してください。
一般関数の無限のもしくは半無限の区間上の積分。
区間は、有限の区間上に写像され、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)
被積分関数は、f(x)であり、 従属変数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
f(x)/(x - c)のコーシーの主値を 有限の区間(a, b)上で指定されたcを用いて 計算します。 戦略は、大域的適応的で、 点x = cを含む部分範囲上で変形Clenshaw-Curtis積分が使われます。
quad_qawc
は、
Quadpack QAWCルーチンを使って、
integrate (f(x)/(x - c), x, a, b)
のコーシーの主値を計算します。
被積分関数は、
f(x)/(x - c)
で、
従属変数xを使って、
関数は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
フーリエコサイン変換またはフーリエサイン変換を、
Quadpack QAWF関数を使って、半無限区間上で計算します。
quad_qawo
で使われるのと同じアプローチが、連続する区間に適用され、
イプシロンアルゴリズム(Wynn, 1956)を使った収束の促進が積分寄与の級数に適用されます。
quad_qawf
は積分
integrate (f(x)*w(x), x, a, inf)
を計算します。
重み関数wはtrigによって選択されます:
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
cos(omega x) f(x)
や
sin(omega x) f(x)
の有限の区間上の積分。
ここで、
omega
は定数です。
規則評価構成要素は、変形Clenshaw-Curtis手法に基づいています。
quad_qawo
は、
quad_qags
に似て、外挿とともに適応再分割を適用します。
quad_qawo
は、
Quadpack QAWOルーチンを使って
積分を計算します:
integrate (f(x)*w(x), x, a, b)
重み関数wは、trigによって選択されます:
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
w(x) f(x)の有限の区間上の積分。 ここで、w(x)は、ある代数的または対数関数です。 大域的適応最分割戦略が適用されます。 積分の区間の端点を含む部分区間上で変形Clenshaw-Curtis積分を使います。
quad_qaws
は、
Quadpack QAWSルーチンを使って
積分を計算します:
integrate (f(x)*w(x), x, a, b)
重み関数wはwfunによって選択されます:
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
Applied Mathematics and Programming Division, K.U. Leuven
Applied Mathematics and Programming Division, K.U. Leuven
Institut für Mathematik, T.U. Wien
National Bureau of Standards, Washington, D.C., U.S.A
http://www.netlib.org/quadpack
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.
Next: Equations, Previous: Differentiation [Contents][Index]