在進行抗差估計時,必須根據殘差計算等價權因子,簡稱權因子。
權因子是觀測殘差的一個分段函數(shù),目前常用的是三段函數(shù),當殘差的絕對值小于界值k0時,等價權因子取值為1;當殘差的絕對值大于界值k0小于界值k1時,等價權因子在區(qū)間(0,1)取值;當殘差絕對值大于界值k0時,等價權因子取值為0。1
計算公式關于權因子函數(shù)的定義,在實際應用中有太多的形式,此處選取了目前在測量平差中應用較廣的Huber函數(shù)、IGG1函數(shù)和IGG3函數(shù),設計了統(tǒng)一的等價權因子計算函數(shù),取名為Wi。1
Huber函數(shù)
IGG1函數(shù)
IGG3函數(shù)
函數(shù)原型double Wi(int fname,double v,double k0,double k1);
fname——權因子函數(shù)選擇變量,0、1、2分別對應IGG1函數(shù)、IGG3函數(shù)、Huber函數(shù);
v——權因子函數(shù)的自變量;
ko——保權臨界值,即等價權公式中的k0;
k1——零權臨界值,即等價權公式中的k1;
返回值——等價權因子。1
函數(shù)源代碼#defme IGG1 0
#define IGG3 1
#define Huber 2
double Wi(int fname,double v,double k0,double k1)
{
double a:
switch(fname)
{
case IGG1://IGG1函數(shù)
v=fabs(v);
if(vk1)return 0.0;
return k0/v;
case IGG3://IGG3 函數(shù)
v=fabs(v);
if(vk1)return 0.0;
a=(k1-v)/(k1-k0);
return k0/v*a*a;
case Huber://Huber函數(shù)
v=fabs(v);
if(v