在进行抗差估计时,必须根据残差计算等价权因子,简称权因子。
权因子是观测残差的一个分段函式,目前常用的是三段函式,当残差的绝对值小于界值k0时,等价权因子取值为1;当残差的绝对值大于界值k0小于界值k1时,等价权因子在区间(0,1)取值;当残差绝对值大于界值k0时,等价权因子取值为0。
基本介绍
- 中文名:权因子
- 外文名:weighting factor
计算公式
关于权因子函式的定义,在实际套用中有太多的形式,此处选取了目前在测量平差中套用较广的Huber函式、IGG1函式和IGG3函式,设计了统一的等价权因子计算函式,取名为Wi。
Huber函式

IGG1函式

IGG3函式

函式原型
double Wi(int fname,double v,double k0,double k1);
fname——权因子函式选择变数,0、1、2分别对应IGG1函式、IGG3函式、Huber函式;
v——权因子函式的自变数;
ko——保权临界值,即等价权公式中的k0;
k1——零权临界值,即等价权公式中的k1;
返回值——等价权因子。
函式原始码
#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函式
v=fabs(v);
if(v<=k0)return 1.0;
if(v>k1)return 0.0;
return k0/v;
case IGG3://IGG3 函式
v=fabs(v);
if(v<=k0)return 1.0;
if(v>k1)return 0.0;
a=(k1-v)/(k1-k0);
return k0/v*a*a;
case Huber://Huber函式
v=fabs(v);
if(v<=k0)return 1.0;
return k0/v;
default:
MyBreak(”等价权函式名称错误!”);
return 1.0;
}
}
说明:为了便于记忆,程式中将IGG1、IGG3、Huber分别定义成三个宏,这样可以用IGG1、IGG3或Huber作为实在参数调用Wi函式。