2014-03-19 1 views
0

Nelson-Siegel은 금리를 모델링하는 데 사용되는 방법입니다. Nelson-Siegel에 대한 자세한 정보 : http://en.wikipedia.org/wiki/Fixed-income_attribution.0을 입력하면 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

당신이'(타우/S)'거기에. '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

이 때문에이 용어이다 : ∞·0 보낸

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

적당한 수 없다 :

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

따라서

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

τ/s ⇒ ∞, s ⇒ 0으로하고

.