以 Riemann Sum 求函式之定積分的近似值

我們想要計算的函式如下

上式中||代表絕對值

請計算 f(x) 由 a 積分至 b 的結果
也就是在函式 f(x) 與 X-座標軸 [a,b] 之間的面積

a, b, 以及所有的係數都是使用者輸入的, 例如:a = -5, b = 5, a5 = 6, a4 = 5, a3 = 4, a2 = 3, a1 = 2, a0 = 1

Riemann Sum

簡單的說就是用多個小塊長方形的面積和來近似積分的值

該近似到什麼地步呢?

如果有誤差的話, 理想上應該是要近似到一個百分比的誤差以內才對。

假設使用者要求近似到百分之一, 那麼也就是說如果正確的積分值是 100 的話, 我們求得的近似值誤差應該要不能超過百分之一, 或是說近似值應該在 99 到 101 之間。

該怎樣製作這個程式呢?

  1. 要使用 Riemann Sum 來近似這個定積分的話, 首先我們必須要讓程式能夠將函式與 X 軸間的面積分成一小塊一小塊地計算出來, 每一塊長方形的面積當然是長與寬的乘積, 如果我們可以將 X 軸上 a 到 b 等分成 N 等分, 寬就是 (b-a)/N, 至於長度的話就必須讓程式求出 f((a+b)/2) 的數值了。

  2. 到底 N 該用多大呢?

    這應該和函式 f 在積分區域間變化的情形有關係, 在這裡我們不用去研究這個關係,

    最簡單的方式就是讓使用者直接輸入一個數字就是了,

    比較好一點的程式可以用嘗試錯誤的方法來做, 也就是你可以由一個適當的數值開始, 然後慢慢地增加 N 的數值, 如果程式發現 N 增加的時候 Riemann Sum 不太改變的話, 我們就可以結束這個程式了。

  3. 那怎樣才知道 Riemann Sum 不太改變了呢?

    假設我們用 N = 400 時算出來的和是 101, 用 N = 401 時算出來的和是 100.5, 改變的比例是 (100-100.5)/100.5, 這個比例越低的話就表示 N 繼續增大時結果不太改變了, 也就可以不要再增加 N 了, 所以我們可以要求使用者輸入一個比例 (例如 0.01 ) 來限制程式測試執行的次數, 當改變的比例低於這個數字的時候就不要再增加 N 的數值了。

程式要求

  1. 係數請以陣列變數存放

  2. 數學函式 f(.) 請一定要用 C 的函式來撰寫, 在 main() 函式內讀到的係數請以參數的方式傳進函式內執行

  3. 你可以只讓使用者輸入一個 N 的數值範圍來執行這個程式, (如果有時間的話, 請你進一步撰寫自動決定 N 的數值的程式, 在這種情況下, 針對某一個 N 的數值來計算 Riemann Sum 這個動作也請你寫成一個 C 函式)

  4. 請以 ANSI C 語法及函式庫來製作

範例執行程式

程式設計課程 首頁

製作日期: 99/10/19 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw