我必須嘗試使用我的LIMEST工具。與任何自適應工具一樣,它可能會被愚弄,但它通常很不錯。
fun = @(x) (exp(x) - 1)./x;
正如你所看到的,有趣的問題在零。
fun(0)
ans =
NaN
但如果我們接近零評估的樂趣,我們看到這是近1
format long g
fun(1e-5)
ans =
1.00000500000696
LIMEST成功,甚至能夠提供極限的錯誤估計。
[lim,err] = limest(fun,0,'methodorder',3)
lim =
1
err =
2.50668568491927e-15
LIMEST使用多項式逼近的序列,加上自適應理查森外推,以產生兩個極限估計和對限制不確定性的量度。
那麼你看到了什麼問題?你看到的失敗是簡單的減法取消錯誤。因此,看的
即使格式長克,實驗值(1E-20)的雙精度值的值是簡單地過於接近1,當我們減去關閉1,其結果是精確的零。除以任何非零值,我們得到零。當然,當x實際上爲零時,我們有一個0/0的條件,所以當我嘗試時,結果是NaN。
讓我們看看高精度會發生什麼。我將使用我的HPF工具進行計算,並使用64位十進制數字。
DefaultNumberOfDigits 64
exp(hpf('1e-20'))
ans =
1.000000000000000000010000000000000000000050000000000000000000166
看到,當我們sutract斷1,1和指數值之間的差小於EPS(1),因此必須MATLAB產生零值。
exp(hpf('1e-20')) - 1
ans =
1.000000000000000000005000000000000000000016666666666670000000000e-20
的沒有提出的問題是我怎麼會選擇精確地產生在MATLAB該功能。顯然,你不想像我那樣使用強力和定義樂趣,因爲你失去了很多準確性。我可能只是在零點附近的有限區域內擴展泰勒級數,並且如上所述使用有趣的x來顯着區別於零。
好點 - 我總是忘記的功能就是在那裏。 – 2012-04-04 01:37:26
還有'log1p(x)'給''log(1 + x)'很好地適用於小'x'。 – Ramashalanka 2012-04-04 01:42:29