唐懷奎
摘 要:本文針對(duì)機(jī)載產(chǎn)品中線性度測(cè)試無(wú)法通用的問(wèn)題,提出最小二乘法技術(shù)。首先探討線性度,然后調(diào)用C程序中的Account函數(shù)和AccountError函數(shù),實(shí)現(xiàn)了10組數(shù)據(jù)以內(nèi)的線性度和擬合直線自動(dòng)測(cè)試,并輸出了精確的擬合圖像。
關(guān)鍵詞:最小二乘法;線性度;擬合直線
中圖分類號(hào):TG839 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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
在機(jī)載產(chǎn)品測(cè)試中,需要利用最小二乘法對(duì)采集到的數(shù)據(jù)進(jìn)行線性度和擬合直線計(jì)算分析。該算法的實(shí)現(xiàn)多嵌入在各測(cè)試程序中,無(wú)法通用;或利用Excel表中的圖表功能計(jì)算,但只能實(shí)現(xiàn)擬合直線計(jì)算,無(wú)法進(jìn)行線性度計(jì)算。因此,本文基于最小二乘法,在上位機(jī)中實(shí)現(xiàn)了線性度和擬合直線的自動(dòng)計(jì)算,并提供了使用例程。
1 線性度
線性度是描述傳感器靜態(tài)特性的一個(gè)重要指標(biāo),以被測(cè)輸入量處于穩(wěn)定狀態(tài)為前提。在規(guī)定條件下,傳感器校準(zhǔn)曲線與擬合直線間的最大偏差與滿量程輸出的百分比,稱為線性度,該值越小,表明線性特性越好。
擬合直線是一條通過(guò)一定方法繪制出來(lái)的直線,求擬合直線的方法有端基法和最小二乘法等。
2 基于最小二乘法的線性度計(jì)算
最小二乘法是一種數(shù)學(xué)優(yōu)化技術(shù),其通過(guò)最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。該數(shù)據(jù)處理方法已在多學(xué)科領(lǐng)域中得到廣泛應(yīng)用,其原理就是找到一條直線使所有圖上的點(diǎn)縱坐標(biāo)的差值的平方和最小,也就是方差最小[1]。
3 算法實(shí)現(xiàn)
3.1 總體思路
對(duì)產(chǎn)品某項(xiàng)性能進(jìn)行測(cè)試時(shí),需要對(duì)采集到的一組數(shù)據(jù)進(jìn)行線性度和擬合直線計(jì)算。
3.2 線性度算法實(shí)現(xiàn)
線性度算法實(shí)現(xiàn)以子函數(shù)的形式,包含5個(gè)參數(shù),各參數(shù)意義與擬合度直線相同,該函數(shù)返回值為float型數(shù)據(jù),即通過(guò)輸入?yún)?shù)計(jì)算出線性度。
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);
}
應(yīng)用中,將產(chǎn)品測(cè)試中需要計(jì)算擬合直線的參數(shù)中一組存在對(duì)應(yīng)關(guān)系的數(shù)據(jù)分別按順序?qū)懭雰蓚€(gè)數(shù)組,通過(guò)調(diào)用以上函數(shù),可得到這組數(shù)據(jù)的擬合直線斜率和截距[2]。
3.4 使用例程
結(jié)合多型產(chǎn)品的工藝規(guī)程要求,計(jì)算線性度時(shí)一般最多采集10個(gè)點(diǎn)的數(shù)據(jù),因此本使用例程假設(shè)為采集點(diǎn)數(shù)不大于10個(gè)的情況。
①定義float型數(shù)組。定義float X[10]和float Y[10],用于存放存在對(duì)應(yīng)關(guān)系的一組兩個(gè)變量的值。
②定義int型變量。定義int k、b、num,分別用于存放擬合直線的斜率、截距和采集點(diǎn)個(gè)數(shù)。
③定義float型變量。定義float Error,用于存放線性度。
④計(jì)算擬合直線。按以下方式調(diào)用擬合直線計(jì)算函數(shù):Account(X, Y, Num, &K, &B)。
⑤計(jì)算線性度。按以下方式調(diào)用線性度計(jì)算函數(shù):Error = AccountError(K, B, Num, X, Y)。
按以上步驟,可按設(shè)計(jì)要求實(shí)現(xiàn)對(duì)擬合直線和線性度的自動(dòng)計(jì)算。本文在上位機(jī)中按以上步驟編寫了人機(jī)交互界面,該界面分為檢測(cè)點(diǎn)數(shù)據(jù)和顯示兩個(gè)區(qū)域。在檢測(cè)點(diǎn)數(shù)據(jù)中,通過(guò)手動(dòng)輸入的方式將最多10組數(shù)據(jù)寫入對(duì)應(yīng)位置,在測(cè)試點(diǎn)數(shù)框中輸入有效數(shù)據(jù)組個(gè)數(shù);顯示區(qū)用于顯示擬合直線和線性度。
3.5 實(shí)驗(yàn)驗(yàn)證
在檢測(cè)點(diǎn)數(shù)據(jù)區(qū)測(cè)試點(diǎn)1至測(cè)試點(diǎn)8分別輸入以下8組數(shù)據(jù):(-8,0.13)(-6,10.8)(-4,1.9)(-1,3.4)(0,3.9)(1,4.6)(3,5.56)(5,6.16)。
在測(cè)試點(diǎn)數(shù)框內(nèi)輸入8,依次點(diǎn)擊“讀入數(shù)據(jù)”“繪制波形”按鈕后,在左側(cè)的顯示區(qū)將自動(dòng)顯示出擬合直線和由各測(cè)試點(diǎn)連接的折線圖,可直觀顯示數(shù)據(jù)的線性度情況,并在線性度誤差框內(nèi)顯示計(jì)算出的線性度誤差為±0.03%。
經(jīng)實(shí)驗(yàn)驗(yàn)證,該算法實(shí)現(xiàn)了基于最小二乘法的數(shù)據(jù)擬合直線和線性度的自動(dòng)計(jì)算與顯示。
4 結(jié)論
本文通過(guò)調(diào)用C程序中的Account函數(shù)和AccountError函數(shù),實(shí)現(xiàn)了10組數(shù)據(jù)以內(nèi)的線性度和擬合直線自動(dòng)測(cè)試,并輸出了精確的擬合圖像。
參考文獻(xiàn):
[1]費(fèi)業(yè)泰.誤差理論與數(shù)據(jù)處理[M].北京:機(jī)械工業(yè)出版社,2006.
[2]譚浩強(qiáng).C程序設(shè)計(jì)[M].2版.北京:清華大學(xué)出版社,1999.