我有两个双变量:
a > 0
b >= 0
这可能是微小的数字。 'a'表示矩阵的奇异值,'b'表示Tikhonov regularization常数。作为Tikhonov最小二乘解的一部分,有必要计算数量:
c = a*a / (a*a + b)
但是,如果a非常小(即矩阵的小奇异值),则a*a
可能无法以双精度表示。对于给定范围的a,b?
答案 0 :(得分:0)
我能想到的最好的是:
c = 1 / (1 + b / a / a)
要获得此等效性,请注意1 / c 是( a ^ 2 + b )/ c 然后分解分数。此形式可能在数值上更稳定,因为它不需要在任何点计算 a ^ 2 。如果 b 和 a 都非常小,它仍会失去精确度。如果必须处理这种情况,你可能会看一下泰勒系列扩展(对于这种情况可能适用也可能不适用)。