1 / 19

台形則による数値積分

台形則による数値積分. 定積分. f(x).  区間 [a, b] で,連続関数 f, x 軸 , x=a, x=b で囲まれた面積. x. a. b. 定積分:. f(x). x. a. b. 定積分:. 台形則による数値積分. 連続関数 f, x 軸 , x=a, x=b ( 区間 [a, b]) で囲まれた面積. 式の変形による関数の積分 ⇒ ごく限られた関数しか定積分できない数値積分 高階関数として,数値積分の Scheme プログラムを作る. 高階関数. 入力は被積分関数 f と 3 つの数値 ( 積分区

hide
Download Presentation

台形則による数値積分

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 台形則による数値積分

  2. 定積分 f(x)  区間 [a, b] で,連続関数 f, x軸, x=a, x=b で囲まれた面積 x a b 定積分:

  3. f(x) x a b 定積分: 台形則による数値積分 連続関数 f, x軸, x=a, x=b (区間 [a, b])で囲まれた面積 • 式の変形による関数の積分 ⇒ ごく限られた関数しか定積分できない数値積分 • 高階関数として,数値積分の Scheme プログラムを作る 高階関数 入力は被積分関数 f と3つの数値(積分区 間の両端の x 座標a, b, 区間分割数 n) 出力は数値 trapezoid

  4. 区間 [a, b] の小区間への分割 f(x) • 区間 [a, b] を,n 等分 • 1小区間の幅: h = (b-a) / n • 小区間: [x0, x1], [x1, x2], ..., [xn-1, xn] 但し,x0 = a, xi = x0 + i × h x x1 x2 xn-1 xn = b x0 = a

  5. 小台形 f(x) f(xi) • 小台形の面積は f(xi+1) x xi xi+1 xn = b x0 = a 小台形

  6. 台形則 trapezoidal rule 区間[a,b]を n 等分(1区間の幅h=(b-a)/n) f(x) • n 個の小台形を考え, その面積の和 Snで,定積分 I を近似 • f(x) が連続関数のとき,n→∞で,Sn→I x1 x2 x3 xn-1 x xn-2 xn = b x0 = a

  7. 台形則による数値積分 • f(x) が連続関数のときは,n を無限大に近づければ,Snは I に近づく

  8. 台形則 両端 x0 = a と xn = b 2回現れる部分 但し  h = (b - a) / n

  9. 単に n を大きくしすぎるのは問題 • 計算時間 • 丸め誤差

  10. 実演

  11. 実演1.台形則による数値積分 • 台形則による数値積分の関数 trapezoidを定義し,実行する • 但し, 積分したい関数 f(x) = e 積分区間: [a, b] 区間数: n -x2

  12. trapezoid 関数の Contract(規約) 入力 ;; trapezoid: (number -> number) number number non-negative-integer ;; -> number 自然数 数値 関数 入力:数値 出力:数値 数値 数値 出力

  13. 数値積分 trapezoid ;;trapezoid : (number -> number) number number non-negative-integer ;; -> number ;;to compute the area under the graph of f between a & b (define (trapezoid f a b n) (local ((defineh (/ (-b a) n)) (define (f_x i) (f (+a (*h i))))) (*h (+ (/ (f a) 2) (foldr +0 (mapf_x (build-list (-n1) add1))) (/ (f b) 2)))))

  14. 次を「定義ウインドウ」で,実行する 実演1の手順 ;;trapezoid : (number -> number) number number non-negative-integer ;; -> number ;;to compute the area under the graph of f between a & b (define (trapezoid f a b n) (local ((defineh (/ (-b a) n)) (define (f_x i) (f (+a (*h i))))) (*h (+ (/ (f a) 2) (foldr +0 (mapf_x (build-list (-n1) add1))) (/ (f b) 2))))) (define (f2 x) (exp (- (*x x)))) 2. その後,次の式を「対話ウインドウ」で評価させる (trapezoidf2 0 1 1000)

  15. 関数 f2を定義している (define (f2x) (exp (- (* x x)))) これは,数値積分したい関数

  16. これは, (trapezoidf2 0 1 1000) と書いて,aの値を 0 に, bの値を 1 に,hの値を 1000 に, fを f2に設定しての実行  評価結果である 「#i0.7468240714991862」 が表示される 

  17. 演習問題1.台形則の計算の精度 • 台形則の計算の精度が,分割幅を小さくするほど高精度になることを確かめる. • 但し, 積分したい関数 f(x) = e 積分区間 0 から 1 分割数 10, 20, 40, 80, 160, 320, 640, 1280 の8通り -x2

  18. 演習問題1の手順  次の式を「対話ウインドウ」で評価させなさい (trapezoid f2 0 1 10) (trapezoid f2 0 1 20) (trapezoid f2 0 1 40) (trapezoid f2 0 1 80) (trapezoid f2 0 1 160) (trapezoid f2 0 1 320) (trapezoid f2 0 1 640) (trapezoid f2 0 1 1280)

  19. 演習問題2 台形則(関数trapezoid)を使い,次を計算 • 計算結果を以下と比較せよ • 区間数 n を,n = 4, 8, 16, 32, 64, 128 と変えて計算を行い,刻み幅と誤差の関係を調べよ • 区間数 n と誤差の関係を書いたグラフを作成し,おおよそ次の関係が成り立っていることを確認せよ DrScheme での (log 2) の実行結果 (c は定数)

More Related