Matlab计算具有不同折现率的债券价格

问题描述

我绝对是新程序员,我完全陷入Matlab中的一个问题。

我们需要计算不同折现率的债券价格。债券的价格由给定年份的现金流量(给定)之和除以折扣系数得出。

enter image description here

如果只有一个比率,这是一个相当简单的功能。但是,当存在比率向量时,由于矩阵大小,它会变得复杂,因此您需要使用for循环。我的代码如下:

function c = bond_price(DF,T,R)

c = sum(DF./(1+R).^T);
end

DF1 = [62.5 62.5 62.5 62.5 62.5 62.5 62.5]; %this is given
T1 = (1:7);                                 %also given
R1 = (0 : 0.01 : 0.10);                     %also given
prices = zeros(1,length(R1);
for k = 1 : length(R1)
    prices(k) = prices + vec_sum(DF1,T1,R1(k));
end

有人知道为什么这行不通吗?

解决方法

Q “ ...为什么不起作用?”

第一个原因(可在此处修复):

  syntax error

>>> prices = zeros(1,length(R1);
                                ^

第二个原因(此处不确定):

function c = bond_price( DF,T,R )
         c = sum( DF./( 1 + R ).^T );
end

DF1 = [62.5 62.5 62.5 62.5 62.5 62.5 62.5]; %% this is given
T1  = (1:7);                                %%    also given
R1  = (0 : 0.01 : 0.10);                    %%    also given
                                            %% ---------------------------------<as-was>-state
                                            %%  syntax error
                                            %%
                                            %% >>> prices = zeros(1,length(R1);
                                            %%                                 ^
prices = zeros( 1,length( R1 ) );

for k = 1 : length( R1 )
    prices(k) = prices + vec_sum( DF1,T1,R1(k) );
end
                                            %% --------------------------------<syntax-repaired>-state
                                            %% error: 'vec_sum' undefined near line 16 column 26
                                            %% 

随意修复您的代码并re-test问题,因为vec_sum()应该位于源代码中的“附近”,不是吗?