Select Case q Case 1 Console Write Line

  • Slides: 29
Download presentation

数値積分:プログラム例 Select Case q Case 1 Console. Write. Line("長方形近似") s = 0. 0 For

数値積分:プログラム例 Select Case q Case 1 Console. Write. Line("長方形近似") s = 0. 0 For i As Integer = 1 To n x = (i - 1) * dx s = s + func(x) * dx Next Case 2 Console. Write. Line("台形公式") s = 0. 0 For i As Integer = 1 To n x 1 = (i - 1) * dx x 2 = i * dx s = s + (func(x 1) + func(x 2)) / 2 * dx Next

数値積分:プログラム例 Case 3 Console. Write. Line("シンプソンの公式") sumo = 0 : sume = 0 For

数値積分:プログラム例 Case 3 Console. Write. Line("シンプソンの公式") sumo = 0 : sume = 0 For i As Integer = 1 To n / 2 - 1 sumo = sumo + func(a + dx * (2 * i - 1)) sume = sume + func(a + dx * 2 * i) Next sumo = sumo + func(b - dx) s = (func(a) + func(b) + 4 * sumo + 2 * sume) _ * dx / 3 End Select Console. Write. Line("分割数は{0, 8}", n) Console. Write. Line("積分値は,I={0, 12}", s) Console. Write. Line("解析値との誤差は,{0, 12}%", _ (s - Math. PI) / Math. PI * 100) End Sub

数値積分:結果比較 Function func(x) Dim y As Double y = Math. Sqrt(4 - x ^

数値積分:結果比較 Function func(x) Dim y As Double y = Math. Sqrt(4 - x ^ 2) Return y End Function それぞれの計算方法で, 積分値の誤差はどうか? 分割数 長方形 誤差(%) 台形 誤差(%) シンプソン 誤差(%) 4 3. 495709 11. 2718755 2. 995709 4. 64361 3. 083595 -1. 84611387 16 3. 248253 3. 39510547 3. 123253 0. 5837687 3. 134398 -0. 22902864 64 3. 170546 0. 92164269 3. 139297 0. 07308303 3. 140695 -0. 02856256 3. 149118 0. 23954185 3. 141305 0. 009144868 3. 141480 -0. 00357924 1024 3. 143509 0. 06102757 3. 141557 0. 001123187 3. 141580 -0. 00041462 4096 3. 142076 0. 01539968 3. 141587 0. 0001821384 3. 141589 -0. 00010346

重積分の数値計算:プログラム例 Sub Main() Dim x, y, dx, dy, s As Double Dim n As

重積分の数値計算:プログラム例 Sub Main() Dim x, y, dx, dy, s As Double Dim n As Integer n = 100 s = 0. 0 dx = 1 / n : dy = 1 / n Function f(x, y) Dim z As Double z = x ^ 3 * y ^ 2 Return z End Function 刻み幅の決定 For j As Integer = 1 To n 座標の計算 For i As Integer = 1 To n x = (i - 1) * dx y = (j - 1) * dy 長方形近似に s = s + f(x, y) * dx * dy よる計算 Next i Next j Console. Write. Line("積分値はI={0}", s) End Sub

モンテカルロ法 1:プログラム例 Dim mu As Integer = 2 ^ 15 Sub Main() Dim x

モンテカルロ法 1:プログラム例 Dim mu As Integer = 2 ^ 15 Sub Main() Dim x As Integer, x 1, y 1, S As Single Dim n As Integer = 100000 S = 0. 0 x = 300 乱数の初期値 For i As Integer = 1 To n x = uni_rnd(x) x 1 = x / mu x = uni_rnd(x) y 1 = x / mu S = S + f(x 1, y 1) Next i 一様乱数の発生 平均値の書き出 し Console. Write. Line("積分値は,I={0, 10}", S / n) End Sub

モンテカルロ法 1:プログラム例 Function f(x, y) Dim z As Single z = x ^ 3

モンテカルロ法 1:プログラム例 Function f(x, y) Dim z As Single z = x ^ 3 * y ^ 2 Return z End Function uni_rnd(x) Dim lambda, c As Integer lambda = 12869 c = 9625 x = (lambda * x + c) Mod mu Return x End Function

モンテカルロ法 2:プログラム例(つづき) Console. Write. Line("π={0}", 4 * c / n) End Sub Function uni_rnd(x)

モンテカルロ法 2:プログラム例(つづき) Console. Write. Line("π={0}", 4 * c / n) End Sub Function uni_rnd(x) As Single Dim lambda, c As Integer lambda = 12869 c = 6925 x = (lambda * x + c) Mod mu Return x End Function 計算値の書き出し

モンテカルロ法 2:プログラム例 Dim mu As Integer = 2 ^ 15 Sub Main() Dim n,

モンテカルロ法 2:プログラム例 Dim mu As Integer = 2 ^ 15 Sub Main() Dim n, x, y, c As Integer Dim S As Single n = 100000 : c = 0 x = 0 : y = 5000 乱数の初期値 一様乱数の発生 For i As Integer = 1 To n x = uni_rnd(x) y = uni_rnd(y) If y / mu <= (x / mu) ^ 2 Then c = c + 1 Next i S = c / n Console. Write. Line("面積はS={0}", S) End Sub

モンテカルロ法 2:プログラム例 Function uni_rnd(x) Dim lambda, c As Integer lambda = 12869 c =

モンテカルロ法 2:プログラム例 Function uni_rnd(x) Dim lambda, c As Integer lambda = 12869 c = 6925 x = (lambda * x + c) Mod mu Return x End Function