2014-01-17 48 views
0

有兩個double變量:司在雙精度

a > 0 
b >= 0 

這可能是微小的數字。 'a'表示矩陣的奇異值,'b'表示常數。作爲正則化最小二乘解決方案的一部分,有必要計算量:

c = a*a/(a*a + b) 

然而,如果確實是小的(矩陣的即小的奇異值),a*a可能無法在雙精度表示的。我怎樣才能在a,b的給定範圍內以數值穩定的方式計算這個商?

回答

0

我可以想出的最好的是:

c = 1/(1 + b/a/a) 

爲了推導該同等,請注意,1/Ç是(一個^2 + b)/ ç,然後分解分數。這種形式可能在數值上更穩定,因爲它不需要在任何時間點計算a^2。如果ba都很小,它仍然會失去精度。如果必須處理這種情況,你可能會看看泰勒級數的擴展(可能會或可能不適用於這種情況)。