python - 使用优化的最小化求解复合期权模型参数中的参数的错误
问题描述
我想使用 scipy 优化的最小化来解决嵌入在 Multivariate_Normal 函数中的参数:
复合期权方程:
import numpy as np
from scipy.optimize import fsolve, minimize, root
from scipy.stats import multivariate_normal as mvn
from scipy.stats import norm
import math
def compute_CO(s, d, m, k, d_, Rti, Rtd, SigmaTi, SigmaTd, DeltaTi, DeltaTd):
h1 = (np.log((s + d)/(k + d_))+(Rti - 0.5*SigmaTi**2) * DeltaTi) / (SigmaTi*np.sqrt(DeltaTi))
h2 = (np.log((s+d)/m)+(Rti-0.5*SigmaTd**2)*DeltaTd) / (SigmaTd*np.sqrt(DeltaTd))
m1 = np.array([[(h1 + SigmaTi)], [(h2 + SigmaTd)]])
m2 = np.array([[h1], [h2]])
rho = np.sqrt(DeltaTi/DeltaTd)
covariance = np.array([[1, rho],[rho,1]])
n2 = mvn(cov = covariance)
call = (s+d)*n2.cdf(np.array([h1+SigmaTi, h2+SigmaTd])) - m*np.exp(-Rtd*DeltaTd)*n2.cdf(np.array([h1,h2])) - k*np.exp(-Rti*DeltaTi)*norm.cdf(h1)
return call
我的未知数是v,它是h1中的一个参数,而h1是mvn中的一个参数。当我设置我的已知并使用方程来求解我的方程时:
sigmaV = 0.245
t = 10.48 - 0.2
m = 7.16
r = 0.0163
k = 130
ti = 0.2
td = 10.48
sigmaE = 0.258
ri = 0.1603 / 100
c0 = 6.85
def test_2(v, m, k, v_star, r, ri, sigmaV, sigmaE, td, ti, c0):
return compute_CO(v, m, k, v_star, r, ri, sigmaV, sigmaE, td, ti) - c0
minimize(test_2, 200, args = (m, k, v_star, r, ri, sigmaV, sigmaE, td, ti, c0))
但是当我运行最小化时,我得到了这种类型的错误报告:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-3e20f74b2dc3> in <module>()
1 args_2 = (m, k, v_star, r, ri, sigmaV, sigmaE, td, ti, c0)
2
----> 3 root(test_2, 200, args = (m, k, v_star, r, ri, sigmaV, sigmaE, td, ti, c0))
8 frames
<__array_function__ internals> in apply_along_axis(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/scipy/stats/_multivariate.py in <lambda>(x_slice)
551 # mvnun expects 1-d arguments, so process points sequentially
552 func1d = lambda x_slice: mvn.mvnun(lower, x_slice, mean, cov,
--> 553 maxpts, abseps, releps)[0]
554 out = np.apply_along_axis(func1d, -1, x)
555 return _squeeze_output(out)
ValueError: unexpected array size: new_size=2, got array with arr_size=1
似乎错误与mvn函数有关,但我不知道如何解决。有人可以帮我解决这个错误吗?我会很感激的!
解决方案
推荐阅读
- javascript - 双 for 循环内的 settimeout
- java - 我们如何从android中的地区获取国家代码
- python - 蝗虫gevent语法?
- swift - 在 Swift 或任何其他自定义整数或浮点自定义类型中实现 UInt15
- node.js - Angular 应用更改了默认端口不起作用
- postgresql - 添加 listen_address="*" 使我的 postgres 停止在本地工作
- python - AttributeError:“NoneType”对象没有属性“nnext”
- python - 如何使用 unittest 修补具有不同返回值的链式函数?
- c++ - 获取数组中最大值的索引
- google-cloud-dataflow - 流数据流中的 ApacheBeam Python ReadAllFromText