在 Julia 中计算 IRR
Calculating IRR in Julia
我可以使用
计算 NPV
tvmnpv(i,cfo,cfall)=begin
n=collect(1:length(cfall));
cfo + sum(cfall./(1+i).^n)
end
其中 cfo
是 t=0 时的初始现金流量,cfall
代表后续现金流量,i
是使用的贴现率。
但是,在给定现金流的情况下,我找不到计算 IRR 的方法。我相信 excel 使用滚动浏览可能值的函数,直到找到 cfo 加上贴现后的现金流量等于零的值。谁能指出我正确的方向?
所需输出的示例如下:
cfo=[-100];cfall=[30,30,30,30]
Out: 0.07713847
因此,内部收益率为 7.713847%。
感谢您的帮助。
计算 IRR is a Root-finding 问题(找到 NPV=0 的 i
)。
进行此计算的一种方法是使用 Roots.jl 程序包 (Pkg.add("Roots")
),如下所示:
julia> using Roots
julia> tvmnpv(i,cfo,cfall)=begin
n=collect(1:length(cfall));
cfo + sum(cfall./(1+i).^n)
end
tvmnpv (generic function with 1 method)
julia> f(x)=tvmnpv(x, cfo, cfall)
f (generic function with 1 method)
julia> cfo=-100.0
-100.0
julia> cfall=[30, 30, 30, 30];
julia> fzero(f, [0.0, 1.0])
0.07713847295208355
可以更改间隔 [0.0, 1.0]
以获得更好的性能。
如果你不想安装包,我建议你实现Bisection方法,简单高效。
使用 Julia 版本 0.5.0 测试
ActuaryUtilities 软件包提供了一个 internal_rate_of_return
(也称为 irr
)函数。
我可以使用
计算 NPVtvmnpv(i,cfo,cfall)=begin
n=collect(1:length(cfall));
cfo + sum(cfall./(1+i).^n)
end
其中 cfo
是 t=0 时的初始现金流量,cfall
代表后续现金流量,i
是使用的贴现率。
但是,在给定现金流的情况下,我找不到计算 IRR 的方法。我相信 excel 使用滚动浏览可能值的函数,直到找到 cfo 加上贴现后的现金流量等于零的值。谁能指出我正确的方向?
所需输出的示例如下:
cfo=[-100];cfall=[30,30,30,30]
Out: 0.07713847
因此,内部收益率为 7.713847%。
感谢您的帮助。
计算 IRR is a Root-finding 问题(找到 NPV=0 的 i
)。
进行此计算的一种方法是使用 Roots.jl 程序包 (Pkg.add("Roots")
),如下所示:
julia> using Roots
julia> tvmnpv(i,cfo,cfall)=begin
n=collect(1:length(cfall));
cfo + sum(cfall./(1+i).^n)
end
tvmnpv (generic function with 1 method)
julia> f(x)=tvmnpv(x, cfo, cfall)
f (generic function with 1 method)
julia> cfo=-100.0
-100.0
julia> cfall=[30, 30, 30, 30];
julia> fzero(f, [0.0, 1.0])
0.07713847295208355
可以更改间隔 [0.0, 1.0]
以获得更好的性能。
如果你不想安装包,我建议你实现Bisection方法,简单高效。
使用 Julia 版本 0.5.0 测试
ActuaryUtilities 软件包提供了一个 internal_rate_of_return
(也称为 irr
)函数。