[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
19.1 Introduction to Integration | ||
19.2 Functions and Variables for Integration | ||
19.3 Introduction to QUADPACK | ||
19.4 Functions and Variables for QUADPACK |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Maximaは積分を扱うためのいくつかのルーチンを持っています。
integrate
関数はそれらのほとんどを利用します。
指定されていない関数(ともちろんその導関数)を扱う antid
パッケージもあります。
数値目的のためには
quad_qag
, quad_qags
などと名付けられた
QUADPACKから適応積分器一式があります。
それらは見出し QUADPACK
の下で記述されています。
超幾何関数を扱うことができます。詳細は specint
を参照してください。
一般的に言って、Maximaは「初等関数」(有理関数、三角関数、対数、指数関数、根号など)と
2、3の拡張(誤差関数、二重対数関数)を使った積分可能な積分だけを扱います。
g(x)
や h(x)
といった未知の関数を使った積分は扱いません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [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 |
Categories: Integral calculus
二重積分ルーチン。トップレベル Maximaで書かれ、翻訳され機械語にコンパイルされました。
このパッケージをアクセスするには load (dblint)
を使ってください。
以下を計算するため xとy方向に関してシンプソンの規則方法を使います。
/b /s(x) | | | | f(x,y) dy dx | | /a /r(x) |
関数 fは翻訳かコンパイルされた2変数関数でなければいけなく、
rと sはそれぞれ、翻訳かコンパイルされた1変数関数でなければいけません。
一方で 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
のデモンストレーションを実行します。
Categories: Integral calculus
定積分を計算しようとします。
integrate
は、
積分の範囲が指定された時、
すなわち integrate
が
integrate (expr, x, a, b)
としてコールされた時、
defint
をコールします。
このようにユーザーの観点からは integrate
をコールすれば十分です。
defint
はシンボリック式、計算された積分または積分の名詞形を返します。
定積分の数値近似に関しては quad_qag
と関連関数を参照してください。
Categories: Integral calculus
デフォルト値: true
erfflag
が false
の時、
もし始めから被積分に何もないなら
(if there were none in the integrad to begin with)
risch
が答えの中に erf
関数を導入することを抑制します。
Categories: Integral calculus
exprの sとパラメータ tに関する逆ラプラス変換を計算します。
exprは分子が線形2次因子だけを持つ多項式の比でなければいけません。
solve
か linsolve
と合わせて
関数 laplace
や ilt
を使うことによって
ユーザーは微分方程式または畳み込み積分方程式やそれらの組を解くことができます。
(%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
デフォルト値: 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 |
Categories: Integral calculus
xに関する exprの積分をシンボリックに計算しようとします。
integrate (expr, x)
は不定積分で、
integrate (expr, x, a, b)
は
a,bの上限下限を持つ定積分です。
上限下限は xを含んではいけません。
しかし integrate
はこの制限を強制するわけではありません。
aは bより小さい必要はありません。
bが aと等しいなら 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や%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は有理関数の分母の因子1つを抽出できますが、
残りを因数分解できず、いずれにせよ積分を見つけられません。
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 |
Categories: Integral calculus
デフォルト値: %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 |
Categories: Integral calculus
デフォルト値: 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 |
Categories: Integral calculus
デフォルト値: 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がもっと役立つ結果を得るのを助けます。
Categories: Integral calculus
exprの xに関する不定積分を上限 bと下限 aで評価するために、
limit
を使って exprの定積分を計算しようとします。
もし定積分を計算するのに失敗したなら、
ldefint
は名詞形として極限を含む式を返します。
ldefint
は integrate
からコールされません。
なので、
ldefint (expr, x, a, b)
を実行することは
integrate (expr, x, a, b)
とは違った結果をもたらすかもしれません。
ldefint
は定積分を評価するためにいつも同じ方法を使いますが、
integrate
は様々な発見的方法を利用し、いくつかの特殊な場合を認識することもあります。
Categories: Integral calculus
計算にはグローバル変数potentialzeroloc[0]
を利用します。
それは nonlist
か形式
[indeterminatej=expressionj, indeterminatek=expressionk, ...] |
でなければいけません。
ここで前者 (nonlist
)は後者(リスト形式)の中の右辺すべてに関して
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 |
Categories: Integral calculus · Complex variables
リッシュアルゴリズムの超越な場合を使って 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) |
Categories: Integral calculus
tlimswitch
が true
に設定されている ldefint
と同値です。
Categories: Integral calculus
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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] | [ ? ] |
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積分を使います。
quad_qagp
基本的に quad_qags
と同様ですが、被積分関数の特異点や不連続点を
提供しなければいけません。
これは積分器がよい解を生成するのをより容易にします。
Categories: Integral calculus · Numerical methods · Share packages · Package quadpack
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [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 |
Categories: Numerical methods · Package quadpack
一般関数の有限の区間上の積分。
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
よりも精確で効率的であることに注意してください。
Categories: Numerical methods · Package quadpack
一般関数の無限のもしくは半無限の区間上の積分。
区間を有限の区間上に写像し、 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 |
Categories: Numerical methods · Package quadpack
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 |
Categories: Numerical methods · Package quadpack
フーリエコサイン変換またはフーリエサイン変換を、
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 |
Categories: Numerical methods · Package quadpack
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 |
Categories: Numerical methods · Package quadpack
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 |
Categories: Numerical methods · Package quadpack
有限区間上の一般的な関数の積分。
quad_qagp
は、
Epsilonアルゴリズム (Wynn, 1956)による外挿を使った大域的に適応的な区間部分分割
(de Doncker, 1978)を実装します。
quad_qagp
は積分
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_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] |
被積分関数は 1
と sqrt(2)
で特異性を持つので
これらの点を quad_qagp
に提供します。
quad_qagp
は quad_qags
より精確で効率的であることも特筆します。
Categories: Numerical methods · Package quadpack
quadpackのエラーハンドリングを制御します。 パラメータは以下のシンボルのどれかでなければいけません:
current_error
現在のエラー数
control
メッセージを印字するかしないか制御します。 ゼロ以下に設定すると、メッセージは抑制されます。
max_message
メッセージを印字する最大回数。
valueを与えないと parameterの現在の値を返します。 valueを与えると parameterの値に与えられた値を設定します。
Categories: Numerical methods · Package quadpack
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.