You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中为多个N值运行二叉树看跌期权定价函数

问题原因

你遇到报错的核心原因有两个:

  1. np.linspace(20,250,47)返回的是浮点型数组,而二叉树函数中的N需要作为数组维度、循环迭代次数的参数,必须是正整数,直接传入浮点型数值或者整个数组都会触发报错。
  2. 原代码中直接调用了exp()、sqrt(),没有加np.前缀,如果你没有单独从numpy导入这两个方法,也会触发命名错误。

解决方法

按照以下步骤修改即可实现批量传入多个N值运行:

  1. 修正函数内的语法问题,给所有数学方法加上np.前缀
  2. 将生成的N序列转为正整数类型
  3. 遍历每个N值调用函数,保存所有输出结果

完整可运行代码

import matplotlib.pyplot as plt
import numpy as np

# 固定参数定义
S0 = 9
K = 10
T = 3
r = 0.06
sigma = 0.3

def binomial_tree_put(N, T, S0, sigma, r, K, array_out=False):
    dt = T / N
    u = np.exp(sigma*np.sqrt(dt)+(r-0.5*sigma**2)*dt)
    d = np.exp(-sigma*np.sqrt(dt)+(r-0.5*sigma**2)*dt)
    p = 0.5
    
    price_tree = np.zeros([N+1,N+1])
    for i in range(N+1):
        for j in range(i+1):
            price_tree[j,i] = S0*(d**j)*(u**(i-j))

    option = np.zeros([N+1,N+1])
    option[:,N] = np.maximum(np.zeros(N+1), K - price_tree[:,N])
    
    for i in np.arange(N-1, -1, -1):
        for j in np.arange(0, i+1):
            option[j, i] = np.exp(-r*dt)*(p*option[j, i+1]+(1-p)*option[j+1, i+1])
            
    if array_out:
        return [option[0,0], price_tree, option]
    else:
        return option[0,0]

# 生成整数型N序列(20到250共47个值,步长为5)
N_list = np.linspace(20,250,47).astype(int)
# 批量调用函数获取结果
put_prices = [binomial_tree_put(n, T, S0, sigma, r, K) for n in N_list]

# 可选:绘制N和期权价格的关系图
plt.plot(N_list, put_prices)
plt.xlabel('N值')
plt.ylabel('看跌期权价格')
plt.show()

运行后put_prices列表就存储了每个N对应的期权计算结果,顺序和N_list一一对应。

内容的提问来源于stack exchange,提问作者Tim Deutman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:54:02