更新时间:2022-08-25 14:18
关于权因子函数的定义,在实际应用中有太多的形式,此处选取了在测量平差中应用较广的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函数。