Nelson-Siegel是一种用于模拟利率的方法。有关Nelson-Siegel的更多信息:http://en.wikipedia.org/wiki/Fixed-income_attribution。
我写了这样的代码:
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。不知道哪里出错了。
答案 0 :(得分: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
不是正确的数字。
答案 1 :(得分:2)
您的除零问题的解决方案可能是与eps
进行比较,并将其视为特例:
function [ interest ] = Nelson_Siegel(s)
beta0 = ...
if abs(s)<eps,
interest = 0;
else
interest = beta0 + beta1*(tau/s)*...
end
end