2014-03-19 144 views
0

Nelson-Siegel是一種用於對利率進行建模的方法。有關尼爾森 - 西格爾的更多信息:http://en.wikipedia.org/wiki/Fixed-income_attribution0的輸入在Matlab中返回NaN

我已經寫了這樣的代碼:

function [ interest ] = Nelson_Siegel(s) 
beta0 = 0.0408; beta1 = -0.0396; beta2 = -0.0511; tau= 1.614; 
interest = beta0 + beta1*(tau/s)*(1-exp(-s/tau))+beta2*((tau/s)*(1-exp(-s/tau))-exp(-s/tau)); 
end 

問題是,當我輸入的值爲0,它給我的NaN值。它應該等於0。不知道它出錯的地方。

+1

你有'(TAU /秒)。什麼會發生什麼's = 0'? – Nasser

+0

你確定你應該輸入'0'的值嗎?它沒有任何意義,這是利率,爲什麼你會希望它在0?也許你應該看的最短期限是一夜之間? – Dan

回答

2

一個解決您的除以零問題可能是比較反對eps,並認爲作爲一個特殊情況:`在那裏

function [ interest ] = Nelson_Siegel(s) 
    beta0 = ... 
    if abs(s)<eps, 
    interest = 0; 
    else 
    interest = beta0 + beta1*(tau/s)*... 
    end 
end 
3

這是因爲這個詞的:

T = beta1*(tau/s)*(1-exp(-s/tau)) 

由於s ⇒ 0τ/s ⇒ ∞

1-exp(-s/τ) ⇒ 1-e⁰ = 1-1 = 0 

這樣:

s ⇒ 0 ∴ T ⇒ β₁·∞·0 ⇒ NaN 

因爲∞·0不是一個正確的號碼。