0

f ( x , y , z ) 関数の三重積分を一般領域で求めるプログラムを作ったのですが、なぜか動きません。

積分の順序がdz dy dxの場合のプログラムの抜粋を次に示します。

(B-A)/N→D
0→V

Dsum(seq(fnInt(Y₅,Y,Y₉,Y₀),X,A+.5D,B,D))→V
For(K,1,P)
    A+(B-A)rand→X
    Y₉+(Y₀-Y₉)rand→Y
    Y₇+(Y₈-Y₇)rand→Z
    Y₆→ʟW(K)
End

Vmean(ʟW)→V

使用される変数については、以下で説明します。

Y₆: Equation of f(x,y,z)
Y₇,Y₈: Lower and upper bounds of the innermost integral (dz)
Y₉,Y₀: Lower and upper bounds of the middle integral (dy)
A,B: Lower and upper bounds of the outermost integral (dx)
Y₅: Y₈-Y₇
N: Number of Δx intervals
D: Size of Δx interval
P: Number of points on D to guess the average value of f(x,y,z)
ʟW: List of various values of f(x,y,z)

V: Volume of the region of integration, then of the entire triple integral

だからここに私がそれに近づいている方法があります:

まず、 を使用して積分領域だけの体積を見つけますDsum(seq(fnInt(Y₅,Y,Y₉,Y₀),X,A+.5D,B,D))次に、その領域内のランダムな ( xyz ) 点の束を選び、それらの点をf ( xyz ) にプラグインして、w = f ( xyz )。次に、これらのw値の平均をとります。これにより、三重積分である 4D ソリッドの平均「高さ」をかなり適切に見積もることができます。そして、積分領域「ベース」に平均w値「高さ」を掛けることによって (Vmean(ʟW))、三重積分のハイパーボリュームの適切な見積もりが得られるはずです。

テストされる ( x , y , z ) 点の数が増加するにつれて、三重積分の値は実際の値に多かれ少なかれ収束するはずです。

どういうわけか、そうではありません。一部の積分では素晴らしく機能し、他の積分ではロングショットで失敗します。この良い例は∫[0, 2] ∫[0, 2- x ] ∫[0, 2- x - y ] 2 x dz dy dxです。正解は 4/3 または 1.333... ですが、プログラムはまったく別の数値 2.67 に収束します。ギブ オア テイクです。

なぜこれを行うのですか?三重積分が間違った数に収束するのはなぜですか?


編集: 私の推測では、間違いを犯していないと仮定すると、計算機で使用される RNG アルゴリズムは 0 よりわずかに大きい数値しか生成できず、プログラムが停止している可能性がありますが、方法はありません。 「0よりわずかに大きい」は定量化されていないため、これを確認することも説明することもできません。

4

0 に答える 0