我想使用matlab中的优化工具来校准利率树。需要一些指导。
利率树如下所示:
工作原理:
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 :(得分:0)
您是否期望树的大小增加?或者您只是优化“2.5%”参数的值?
如果是后者,有两种方法。第一种是使用封闭的表单表达式对树进行建模,方法是将2.5%替换为x
,这可以通过树来实现。 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)。