2017-10-19 275 views
0

我想通過一些代碼,我寫的和一個特定的行給我的問題在MATLAB的工作:如何強制MATLAB不計算爲天道酬勤

Ts = (1+(DatesMod.*Bs)./VolMod).^(VolMod); 

VolMod與順序值的數組DatesMod的值範圍在700,000和740,000之間,Bs的值範圍在0和100之間。請注意,該函數在數學上類似於lim(n> Inf)(1 + B * Dates/n)的n次方。我明白這主要與計算機上分配數字的方法有關。有沒有一種聰明的方法可以強制它計算實際值,而不是爲每個值返回Inf?

在此先感謝。

回答

2

注意,限制

lim(n->Inf) (1+B*Dates/n)^n = exp(B*Dates) 

exp會溢出到Inf一旦參數大於709.9較大,所以計算Ts恰好沒有高精度計算沒有真正的方法。

最好的選擇可能是以對數精度工作,例如,而不是TslogTs

logTs = VolMod .* log1p((DatesMod.*Bs)./VolMod) 

的工作,你就那麼需要重寫任何後續的表達式中使用這個沒有明確計算exp(logTs)(因爲這將溢出)。