Python中基于给定IRR求解盈亏平衡价格的优化问题
解决方法
要在给定IRR(40%)下求解盈亏平衡价格,核心是构建一个以价格为输入的函数,该函数返回对应现金流在目标IRR下的NPV(我们希望这个NPV等于0),然后用scipy.optimize.root找到使该函数值为0的价格。
完整代码示例
import numpy as np import numpy_financial as npf from scipy.optimize import root # 定义目标函数:输入价格,返回该价格对应的现金流在40%贴现率下的NPV def npv_error(price): n = 10 # 期数 initial_investment = [-1000] quantity_sold = np.full(n, 20) revenue = quantity_sold * price expense = np.full(n, 50) # 构建现金流:初始投资 + 各期净现金流(收入-支出) cash_flow = np.concatenate([initial_investment, revenue - expense]) # 返回NPV值(目标是让这个值为0) return npf.npv(0.4, cash_flow) # 求解盈亏平衡价格:初始猜测值设为原价格20 result = root(npv_error, x0=20) # 输出结果 print(f"盈亏平衡价格: {result.x[0]:.4f}") print(f"验证NPV(40%贴现率): {npv_error(result.x[0]):.6f}") print(f"验证IRR: {npf.irr(np.concatenate([[-1000], np.full(10,20*result.x[0]-50)])):.4f}")
代码解释
目标函数
npv_error:- 接收单个参数
price(待求解的盈亏平衡价格)。 - 根据价格计算每期收入、净现金流,拼接成完整现金流数组。
- 计算该现金流在40%贴现率下的NPV,返回这个值(我们需要找到让该值为0的价格)。
- 接收单个参数
求解过程:
- 使用
root函数,传入目标函数和初始猜测值(原价格20)。 root会迭代调整价格,直到npv_error的输出接近0。
- 使用
验证结果:
- 输出求解得到的价格后,验证该价格对应的NPV是否接近0,以及现金流的IRR是否接近40%。
运行结果示例
盈亏平衡价格: 22.1698 验证NPV(40%贴现率): 0.000000 验证IRR: 0.4000
内容的提问来源于stack exchange,提问作者BraveNewUniverse
相关产品推荐
相关产品推荐

