誤差函數的應用
誤差函數的應用
曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
2 November 2025
我們觀察實驗以求取數據,再將數據輸入電腦,以數值分析技術處理數據,整個過程中可能會出現多種誤差,實驗觀察時可能出現誤差,以電腦處理數據時也可能出現誤差。在深入討論誤差函數的應用前,先行對相關於誤差的術語,進行基本說明。
1 電腦處理數據時可能出現的誤差
數值分析技術以電腦來處理數據,在計算過程中,可能產生兩種誤差。
1.1 捨位誤差(Round-off error)
是由於受到電腦內部記憶體位元量的使用限制所產生的。一個包含小數位數的十進制數目,將其轉換成等效的二進制數目時,由於電腦內部可用位元數的限制,必然產生一種轉換誤差,尤其是沒有恰恰相等的二進制表示值時,更加顯著。如果執行計算時,所需的位數比電腦或編譯器能貢獻的位數為多時,亦有另一類捨位誤差產生。
1.2 截項誤差(Truncation error)
它是由於電腦只能處理有限項數學表示式的限制所產生的誤差。以數值分析法解數學問題時,若需將數學問題作一合乎工程要求的近似程序後,才能求得其解,所得的結果,並非絕對性的純數學解,近似式的誤差項,電腦程式主動捨去,因此,應用電腦來解數學問題時,常有截項的要求,也因此產生了誤差。另外,在電腦上以數值分析方法算出超越函數的函數值時,因為電腦不能處理超越函數所展開的無窮多個項式,而僅能處理帶有加、減、乘、除有限項組成的近似於超越函數的式子,截項誤差因而產生。
本文不對上述兩種誤差進行更深入的討論。
2 實驗觀察數據可能出現的誤差
這一部份的敘述內容,摘要自中國科學出版社出版的『誤差理論與實驗數據處理』一書,作者為馮師顏先生,取其說明詳盡、恰當而刻意採用,且因一般讀者難於自行查找此書,故不惜篇幅轉錄於此。本章程式中使用的數據,亦源自該書,特此聲明。
誤差是指觀測值與真值之差,偏差則指觀測值與平均值之差。根據誤差的性質及其產生的原因,可將實驗觀測數據時,可能出現的誤差分為四類:
2.1 系統誤差
是指因為
(1)儀器不良:如刻度不準,砝碼未校正。
(2)周圍環境的改變:如外界溫度、壓力、濕度的變化。
(3)個人的習慣與偏向:如讀數常偏高或偏低…等,所引起的誤差。此種誤差在同一物理量的測量中為一定,根據儀器的缺點、外界環境條件變化影響的大小、個人的偏向,分別加以校正後,可以去除得掉。
2.2 恆定誤差
是指在測量中未發覺或未確認的因子所引起的誤差,這些因子影響結果,永遠朝向一個方向偏差,其大小及符號在同一實驗中完全相同,檢查或改正的方法是擴大實驗範圍,如採取不同方法選取樣品,使用不同方法提存分離樣品…等。
2.3 偶然誤差
在測量中,如果已經消除引起系統誤差的一切因素,而所測量的數字,仍在末一位或末二位數字上有所差別時,我們就稱這種誤差為偶然誤差。偶然誤差有時大、有時小、有時正、有時負,方向不一定。偶然誤差產生的原因,屬於大自然的統計現象,因而也就無法控制,但用同一精密儀器,在同樣條件下,對同一物理量作多次測量,若測量次數足夠多,則可發現偶然誤差完全服從統計上的定律,誤差的大小、以及正負誤差的出現,完全由機率決定,我們沒有理由認為誤差偏向一方比偏向另一方更為可能。因此,誤差與測量的次數有關,隨著測量次數的增加,偶然誤差的算術平均值將更接近於真值。偶然誤差的發生,完全出於偶然,受或然率所支配,因此,偶然誤差可以用或然率理論來處理。
2.4 過失誤差
是一種顯然與事實不符的誤差,它主要是由於粗心大意、過度疲勞、或操作不正確所引起,例如:讀錯刻度值、反讀游標尺、記錄錯誤、計算錯誤…等,此類誤差無規則可循,只要多方警惕,細心操作,過失誤差就可避免。
本文內容針對最後兩項:偶然誤差與過失誤差進行討論,作為應用誤差函數來分析數據的實例,亦即利用統計學理論來分析數據,找出數據中的過失誤差值。而這樣的應用,卻是廣泛存在於工程、研究、實驗、生產…等方面,最為需要的基本分析技術。
範例程式可以直接、實際應用於各種場合,並突破傳統的分析方法,不靠查表,直接算出實際數據,獲得明確的數字解答。因此,可以不必採用傳統上模糊的敘述當作結論。傳統分析方法,通常都僅稱『遠大於或遠小於某值』來代表分析結果。
3 誤差分佈函數
高斯(Gauss)於 1795 年找出了誤差分佈函數,以其繪出的曲線稱為高斯正態誤差分佈曲線,並建立了所謂的高斯誤差定律,其特點如下:
(1) 小誤差比大誤差出現的機會多,故誤差的機率與誤差的大小有關。
(2) 大小相等,符號相反之正負誤差的數目近於相等,故機率曲線對稱於y軸。
(3) 極大的正誤差與負誤差出現的機率非常小,換句話說,就是大誤差一般不會出現。
函數圖形繪如 Fig. 1 所示:
高斯誤差函數表示如下:
(3.1)
Fig. 1 高斯正態誤差分佈函數曲線圖
圖中 y 方向的最高點與標準誤差 𝝈 成反比,標準誤差愈小時,曲線中部升得愈高,兩旁下降愈快,因此,標準誤差可以用來決定誤差分佈曲線幅度的大小。另外,標準誤差還能定出誤差分佈曲線的轉折點,上圖中,曲線中部曲率向下,曲線兩端曲率向上,因此,曲線上必有轉折點,根據微積分原理,在轉折點上曲線斜率的變率為 0 ,而曲線上的轉折點就在 x = ∓ 𝝈 處。
針對同一事件的測量,如果各組數據計算出來的標準誤差明顯不同時,那麼,誤差分佈曲線相互比較的結果,就會如 Fig. 2 所示:
Fig. 2 三種不同大小標準誤差的誤差分佈函數曲線關係
由 Fig. 2 圖中可以看出,一組測量數據的標準誤差愈小,表示這一組測量數據的品質愈好,因為數據都分佈在中央平均值附近。反之,如果一組測量數據的標準誤差愈大,表示這一組測量結果品質欠佳,因為有較多的數據,離中央均值較遠。
4 誤差函數(Error function)
誤差函數指的是在誤差分佈函數中,小於某一誤差值的或然率,通常以 erf(t) 表之,其中的 t 即該指定誤差值。因此,誤差函數必須由前一節所敘述的誤差分佈函數曲線下方的積分面積來獲得,不幸,這是一個無法經由手算獲得其值的積分式子,通常以下式表示(積分範圍從-t積分到+t):
(4.1)
但上式中的 t 值為直接計算出來的數值,若以 X 表測量值, AVG 表平均值,而標準誤差為 𝝈 時,這幾個數值間的關係式為:
(4.2)
我們可以從所有的測量數據 X 直接計算出平均值 AVG 及標準誤差 𝝈 ,然後根據 (4.2) 式算出 t 值。現在先行假設,我們能夠經由 (4.1) 式獲得 erf(t) 之值,然後探討此值代表的實際意義。
erf(t) 值代表一個或然率,它的意義是小於 t 值以下的或然率,若以 1 - erf(t) 表示,則代表 t 範圍以外的或然率,因此,前人就利用這樣的規則來重新表達測量數據之誤差,落於指定範圍以外的或然率為多少?
如果我們再以標準誤差為基準,說明某一測量值之誤差,相當於多少個標準誤差之值時,落於範圍以外的或然率為多少?可以讓觀念簡化。因此,產生了一些分析術語,而術語中所敘述的數字,全都是經由計算 1 - erf(t) 函數後所得的數值,我們先將與這些術語相關的數值列成下表。
表中第一行,表 K 個標準誤差量,而 K = | X - AVG | / 𝝈 。
表中第二行,表對應的或然率 P(K𝝈),其值由 1 - erf(t) 函數計算而得。
表1. K 個標準誤差及其或然率值
K𝝈 P(K𝝈)
0 1.0
0.6745 0.5
1 0.3173
1.6449 0.1000
1.9600 0.0500
誤差量為 0 個標準誤差時,落於此誤差量以外的或然率是 1.0 ,也就是 100%。
誤差量為 0.6745個 標準誤差時,落於此誤差量以外的或然率是 0.5 ,也就是 50% ,它有一個特別的名稱,叫作或然誤差(Propable error)。
誤差量為 1 個標準誤差時,落於標準誤差範圍以外的或然率是 0.3173,也就是 31.73%。
誤差量為 1.6449 個標準誤差時,落於此誤差量以外的或然率是 0.100 ,也就是 10% ,它也有一個特別的名稱,叫作 9/10 誤差(Nine-tenths error),有 1/10 在範圍外。
誤差量在 1.96 個標準誤差時,落於此誤差量以外的或然率是 0.0500 ,也就是只有 5% ,特別名稱則為 95% 誤差(Ninety-five-hundredths error),只有 5% 在範圍外。
這些術語在電腦應用不太發達的時代,可以強化觀念,以便認識數據的分析結論。今天,幾乎人人都可以非常方便的使用電腦了,我們能夠進一步直接計算出上述所有術語中使用的精確數字。敘述方式便可以更直接了當的改述如下:
每個測量數據都可以落於0個標準誤差範圍以外。
誤差落於或然誤差以外的可能性,兩次就可能出現一次,因為或然率為 50%,100/50=2。
誤差落於標準誤差以外的可能性,三次左右可能出現一次,因為或然率為 31.73%,100/31.73=3.1516。
誤差落於 9/10 標準誤差以外的可能性,十次才可能出現一次,因為或然率為 10%,100/10=10。
誤差落於 95% 標準誤差以外的可能行,二十次才有可能出現一次,因為或然率為 5 %,100/5=20。
如此的敘述,將被用來設計我們的數據分析程式,至於幾次才可能出現一次的觀念,則完全可以由電腦直接計算後,合理的印出於輸出報告中,程式就會顯得更為友善與清楚了。
5 erf(t) 函數近似計算程式
我於 2010 年,曾經參與 Fig 總會科學程式庫 #62 Error functions 公益程式公佈前的審核工作,因此收集過不少誤差函數的相關資料,也仔細執行過該程式,知道程式的性能,主要在強調計算所得具有小數點後面將近12位數以上的精確度,程式中也有一個只有大約四位數精確度的附帶程式,以便使用者可以快速取得誤差函數的約略值。
本章由作者自己設計的程式,放棄上述 #62 中的兩個程式,因為第一個太精確了卻計算冗長、程式量龐大,第二個又太精簡了,不如一般書籍中所建之誤差函數表。我在審核程式的過程中,必須花不少錢,才能獲得審核所需的原始論文,因此,耗費不少時間尋求不用花錢的可用資源,後來收集到一個能有 1.5E-5 精確度的有理近似式,現在就列示於此,然後使用於本文的範例程式中。
近似計算的數學式子如下:
其中 t = 1 / ( 1 + pz ) ,而 epsilon 表截項誤差量,所用到的係數如下:
資料出處,為 J. M. Smith 所著之 Scientific analysis on the pocket calculator, Chapter.4 。
erf(z) = 1 - [ t ( a1 + t ( a2 + t ( a3 + t ( a4 + a5 t ) ) ) ) exp ( -x ^ 2 ) ] + epsilon(z)
p = 0.3275911
a1 = 0.254829592
a2 = -0.284496736
a3 = 1.421413741
a4 = -1.453152027
a5 = 1.061405429
6 數據分析程式
\ 數據分析程式
\ 分光儀測量鋁錠中鐵含量(%)十次,分析這十個測試數據是否合理的程式。
\ 作者:曾慶潭 2011/4/21 保有一切版權,知會作者,附加本宣告則允許引用。
\ Copyright 2011/4/21 Ching-Tang Tseng
\ Permission is granted by the author to use this software
\ for any application provided this copyright notice is preserved.
20 VALUE SIZE
SIZE ARRAY DATA
REAL AVG
REAL SIGMA
INTEGER TOTAL
INTEGER I
: INPUT-DATA
{{ DATA ( 1 ) = 1.52 }} \ (1)輸入待分析數據。
{{ DATA ( 2 ) = 1.46 }}
{{ DATA ( 3 ) = 1.61 }}
{{ DATA ( 4 ) = 1.54 }}
{{ DATA ( 5 ) = 1.55 }}
{{ DATA ( 6 ) = 1.49 }}
{{ DATA ( 7 ) = 1.68 }}
{{ DATA ( 8 ) = 1.46 }}
{{ DATA ( 9 ) = 1.83 }}
{{ DATA ( 10 ) = 1.50 }}
[[ TOTAL = 10 ]] \ (2)數據的總量為10。
;
: RESET-DATA BASIC
10 FOR I = 1 TO SIZE
20 LET { DATA ( I ) = 0 }
30 NEXT I
40 LET TOTAL = 0
50 END
;
: AVERAGE BASIC
10 LET { AVG = 0 }
20 FOR I = 1 TO TOTAL
30 LET { AVG = AVG + DATA ( I ) }
40 NEXT I
50 LET { AVG = AVG / I>R ( TOTAL ) }
60 END
;
: DEVIATION BASIC
10 LET { SIGMA = 0 }
20 FOR I = 1 TO TOTAL
30 LET { SIGMA = SIGMA + ( DATA ( I ) - AVG ) * ( DATA ( I ) - AVG ) }
40 NEXT I
50 LET { SIGMA = SQRT ( SIGMA / ( I>R ( TOTAL ) - 1 ) ) }
60 END
;
: REPORT BASIC
10 RUN CR
20 RUN RESET-DATA
30 RUN INPUT-DATA
40 RUN AVERAGE
50 RUN DEVIATION
60 RUN CR
70 PRINT { " 平均值(Average value) = " ; AVG }
80 RUN CR
90 PRINT { " 標準誤差(Standard deviation) = " ; SIGMA }
100 RUN CR
110 END
;
REAL erfx REAL erfy
REAL T REAL D REAL AUX
: ERROR-FUNCTION BASIC
10 LET { AUX = ABS ( erfx ) }
20 LET { T = 1 / ( 1 + 0.3275911 * AUX ) }
30 LET { D = EXP ( NEGATE ( erfx * erfx ) ) }
40 LET { erfy = 1 - D * T * ( 0.254829592 + T * ( -0.284496736
+ T * ( 1.421413741 + T * ( -1.453152027 + 1.061405429 * T ) ) ) ) }
50 IF { erfx >= 0 } THEN 70
60 LET { erfy = NEGATE erfy }
70 END
;
REAL TIMES
INTEGER DISC
INTEGER FLAG
: MAIN BASIC
10 REM
20 REM 數據分析程式
30 REM
40 LET FLAG = 0
40 RUN REPORT
50 FOR I = 1 TO TOTAL
60 LET { erfx = ABS ( DATA ( I ) - AVG ) / ( SQRT ( 2 ) * SIGMA ) }
70 RUN ERROR-FUNCTION
80 LET { TIMES = 1 / ( 1 - erfy ) }
90 LET DISC = INT ( TIMES )
100 IF DISC > TOTAL THEN 120
110 GOTO 160
120 LET FLAG = FLAG + 1
130 PRINT " 統計分析顯示,數據DATA( " ; I ; " ) = " ; { DATA ( I ) ; " 有問題。 " }
140 PRINT " 此值之誤差量,應該是 " ; DISC ; " 次才有可能出現一次。 "
142 print " 1-erfy = " ; { 1 - erfy }
144 print " (data(I)-avg)/sigma = " ; { ( DATA ( I ) - AVG ) / SIGMA }
150 PRINT " 但是這次測量, " ; TOTAL ; " 次就出現一次了,故有問題。"
160 NEXT I
170 IF FLAG <> 0 THEN 190
180 PRINT " 根據誤差函數核算結果顯示,所有數據的誤差量均在合理範圍之內。 "
190 END
;
載入程式後,執行 MAIN 指令,得到下列結果:
MAIN
平均值(Average value) = 1.564000000
標準誤差(Standard deviation) = .1155854662
統計分析顯示,數據 DATA( 9 ) = 1.830000000 有問題。
此值之誤差量,應該是 46 次才有可能出現一次。
1-erfy = 0.0213730758
(data(I)-avg)/sigma = 2.301327396
但是這次測量, 10 次就出現一次了,故有問題。
印出的結果中, 1/0.0213730758 = 46.79291207,這就是報告中 46 次的計算來源。幾十年前,大學生學習統計學,將習得的誤差理論知識,應用於實驗數據分析時,可以經由冗長的手算獲得標準誤差,再算出各個數據與平均值的誤差量,然後計算各個誤差量相當於多少個標準誤差,最後才根據第 4 節中的幾個術語,判斷實驗數據是否合理?所得到的結論是敘述式的:『遠大於某一誤差量』。現今的電腦,可以快速完成冗長的計算,並得到明確的數據,直接說明結果。
根據上列程式印出的報告,我們還能再度利用電腦快速繪圖的功能,以同樣的正態誤差分佈函數曲線圖下方的積分面積,說明分析的結論。Fig. 3 圖中右邊曲線下方的陰影區,即代表 2.3 個標準誤差以外,單邊表示的或然率量,雙邊的積分所得就是 0.0213730758 ,意即發生的可能性只有 2.13730758% ,或明確的說成要測量 46 次以上,才有可能出現一次。
Fig. 3 單邊 2.3 倍標準誤差以外的或然率示意圖
沒有留言:
張貼留言