唐懷奎
摘 要:本文針對機載產品中線性度測試無法通用的問題,提出最小二乘法技術。首先探討線性度,然后調用C程序中的Account函數和AccountError函數,實現了10組數據以內的線性度和擬合直線自動測試,并輸出了精確的擬合圖像。
關鍵詞:最小二乘法;線性度;擬合直線
中圖分類號:TG839 文獻標識碼:A 文章編號:1003-5168(2018)07-0067-02
The Realization of Linear Degree Calculation Based on Least Square Method
TANG Huaikui
(Wuhu State-owned Mechanical Factory,Wuhu Anhui 241000)
Abstract: In this paper, the least square method was proposed to solve the problem that the linearity of the airborne products can not be tested. First, we discussed the linearity. Then we called the Account function and the AccountError function in the C program, and achieved the automatic test of linearity and fitting straight line within the 10 sets of data, and output the exact fitting image.
Keywords: least square method;linearity;fitting straight line
在機載產品測試中,需要利用最小二乘法對采集到的數據進行線性度和擬合直線計算分析。該算法的實現多嵌入在各測試程序中,無法通用;或利用Excel表中的圖表功能計算,但只能實現擬合直線計算,無法進行線性度計算。因此,本文基于最小二乘法,在上位機中實現了線性度和擬合直線的自動計算,并提供了使用例程。
1 線性度
線性度是描述傳感器靜態特性的一個重要指標,以被測輸入量處于穩定狀態為前提。在規定條件下,傳感器校準曲線與擬合直線間的最大偏差與滿量程輸出的百分比,稱為線性度,該值越小,表明線性特性越好。
擬合直線是一條通過一定方法繪制出來的直線,求擬合直線的方法有端基法和最小二乘法等。
2 基于最小二乘法的線性度計算
最小二乘法是一種數學優化技術,其通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,并使得這些求得的數據與實際數據之間誤差的平方和為最小。該數據處理方法已在多學科領域中得到廣泛應用,其原理就是找到一條直線使所有圖上的點縱坐標的差值的平方和最小,也就是方差最小[1]。
3 算法實現
3.1 總體思路
對產品某項性能進行測試時,需要對采集到的一組數據進行線性度和擬合直線計算。
3.2 線性度算法實現
線性度算法實現以子函數的形式,包含5個參數,各參數意義與擬合度直線相同,該函數返回值為float型數據,即通過輸入參數計算出線性度。
float AccountError(float k, float b, int num, float *corx, float *cory)
{
CString str;
float error[10];
float liney[10];
for(int i=0; i{
liney[i] = k*corx[i]+b;
error[i] = abs(cory[i]-liney[i]);
}
float errormax = error[0];
float ymax = liney[0];
float ymin = liney[0];
for(int i=1; i
{
float temp1 = 0;
float temp2 = 0;
float temp3 = 0;
float temp4 = 0;
for(int i=0; i{
temp1 = temp1 + corx[i]*cory[i];
temp2 = temp2 + corx[i];
temp3 = temp3 + cory[i];
temp4 = temp4 + corx[i]*corx[i];
}
*k = (num*temp1-temp2*temp3)/(num*temp4-temp2*temp2);
*b = (temp4*temp3-temp2*temp1)/(num*temp4-temp2*temp2);
}
應用中,將產品測試中需要計算擬合直線的參數中一組存在對應關系的數據分別按順序寫入兩個數組,通過調用以上函數,可得到這組數據的擬合直線斜率和截距[2]。
3.4 使用例程
結合多型產品的工藝規程要求,計算線性度時一般最多采集10個點的數據,因此本使用例程假設為采集點數不大于10個的情況。
①定義float型數組。定義float X[10]和float Y[10],用于存放存在對應關系的一組兩個變量的值。
②定義int型變量。定義int k、b、num,分別用于存放擬合直線的斜率、截距和采集點個數。
③定義float型變量。定義float Error,用于存放線性度。
④計算擬合直線。按以下方式調用擬合直線計算函數:Account(X, Y, Num, &K, &B)。
⑤計算線性度。按以下方式調用線性度計算函數:Error = AccountError(K, B, Num, X, Y)。
按以上步驟,可按設計要求實現對擬合直線和線性度的自動計算。本文在上位機中按以上步驟編寫了人機交互界面,該界面分為檢測點數據和顯示兩個區域。在檢測點數據中,通過手動輸入的方式將最多10組數據寫入對應位置,在測試點數框中輸入有效數據組個數;顯示區用于顯示擬合直線和線性度。
3.5 實驗驗證
在檢測點數據區測試點1至測試點8分別輸入以下8組數據:(-8,0.13)(-6,10.8)(-4,1.9)(-1,3.4)(0,3.9)(1,4.6)(3,5.56)(5,6.16)。
在測試點數框內輸入8,依次點擊“讀入數據”“繪制波形”按鈕后,在左側的顯示區將自動顯示出擬合直線和由各測試點連接的折線圖,可直觀顯示數據的線性度情況,并在線性度誤差框內顯示計算出的線性度誤差為±0.03%。
經實驗驗證,該算法實現了基于最小二乘法的數據擬合直線和線性度的自動計算與顯示。
4 結論
本文通過調用C程序中的Account函數和AccountError函數,實現了10組數據以內的線性度和擬合直線自動測試,并輸出了精確的擬合圖像。
參考文獻:
[1]費業泰.誤差理論與數據處理[M].北京:機械工業出版社,2006.
[2]譚浩強.C程序設計[M].2版.北京:清華大學出版社,1999.