0

我想用matlab中的优化工具来校准利率树。需要一些指导来做到这一点。在matlab中计算利率树

利率树是这个样子:

enter image description here

它是如何工作的:

3.73%= 2.5%* EXP(2 * 0.2)

96.40453 =(0.5 * 100 + 0.5 * 100)/(1+ 3.73%)

94.15801 =(0.5 * 96.40453 + 0.5 * 97.56098)/(1 + 2.50%)

2.5%的值是任意的,并且上部节点通过乘以2 *波动率(这里是20%)的指数来获得。

我需要通过改变较低节点的不同值来优化问题。

如何在Matlab中做这种优化?

我到目前为止试过的是什么?

InterestTree{1}(1,1) = 0.03; 
InterestTree{3-1}(1,3-1)= 2.5/100; 
InterestTree{3}(2,:) = 100; 
InterestTree{3-1}(1,3-2)= (2.5*exp(2*0.2))/100; 
InterestTree{3-1}(2,3-1)=(0.5*InterestTree{3}(2,3)+0.5*InterestTree{3}(2,3-1))/(1+InterestTree{3-1}(1,3-1)); 
j = 3-2; 
InterestTree{3-1}(2,3-2)=(0.5*InterestTree{3}(2,j+1)+0.5*InterestTree{3}(2,j))/(1+InterestTree{3-1}(1,j)); 
InterestTree{3-2}(2,3-2)=(0.5*InterestTree{3-1}(2,j+1)+0.5*InterestTree{3-1}(2,j))/(1+InterestTree{3-2}(1,j)); 

但我不知道如何去优化。任何建议,以改善代码,告诉我..需要一些指导在这..

回答

0

你期待树的大小增加?或者你只是优化了“2.5%”参数的值?

如果是后者,有两种方法。首先是使用封闭表单表达式对树进行建模,将树替换为可能的x,即2.5%。 Matlab中有非线性优化工具箱(例如更多here),但由于我已经完成了这个工作,所以已经过了很长时间,以便给出更详细的答案。

秒是我立即要做的方法。我正在解释你给出的例子,所以我使用的方程可能是不正确的 - 但是,使用for循环的原理是相同的。

vol = 0.2; 
maxival = 100; 
val1 = zeros(1,maxival); %Preallocate 
finalval = zeros(1,maxival); 
for ival=1:maxival 
    val1(ival) = i/1000; %Use any scaling you want. This will go from 0.1% to 10% 
    val2=val1(ival)*exp(2*vol); 
    x1 = (0.5*100+0.5*100)/(1+val2); %Based on the equation you gave 
    x2 = (0.5*100+0.5*100)/(1+val1(ival)); %I'm assuming this is how you calculate the bottom node 
    finalval(ival) = x1*0.5+x2*0.5/(1+...); %The example you gave isn't clear, so replace this with whatever it should be 
end 

[maxval, indmaxval] = max(finalval); 

最大值在maxval中,最大化的最大值在val1(indmaxval)中。

+0

但这不是有效的权利?我的意思是,它浪费了大量时间搜索不需要的值。想到在matlab中使用优化工具 – lakesh

+0

我期望树会生长......编辑示例使其与图相同。 – lakesh

+0

是的,效率不高,但对代码和运行速度都非常快。树如何增长?如果更多的节点,然后哪个方向?您可能需要递归执行此操作,或者根据求和推导封闭表单解决方案。 – Lazarus