Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用优化时出错';s最小化求解复合期权模型中的参数';s参数_Python_Scipy Optimize_Scipy Optimize Minimize - Fatal编程技术网

Python 使用优化时出错';s最小化求解复合期权模型中的参数';s参数

Python 使用优化时出错';s最小化求解复合期权模型中的参数';s参数,python,scipy-optimize,scipy-optimize-minimize,Python,Scipy Optimize,Scipy Optimize Minimize,我想使用scipy优化的最小化来解决多元函数_正规函数中嵌入的一个参数: 复合期权方程: 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, Si

我想使用scipy优化的最小化来解决多元函数_正规函数中嵌入的一个参数:

复合期权方程:

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
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))
我的未知是v,它是h1中的一个参数,h1是mvn中的一个参数。当我设置我的已知值并使用方程求解我的方程时:

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
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
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
1 args_2=(m,k,v_星,r,ri,sigmaV,sigmaE,td,ti,c0)
2.
---->3根(测试2,200,args=(m,k,v_星,r,ri,sigmaV,sigmaE,td,ti,c0))
8帧
沿_轴应用_(*args,**kwargs)
/usr/local/lib/python3.7/dist-packages/scipy/stats//u multivariable.py in(x_切片)
551#mvnun需要一维参数,因此按顺序处理点
552 func1d=λx_切片:mvn.mvnun(下,x_切片,平均值,cov,
-->553最大值、绝对值、释放值[0]
554 out=np。沿_轴应用_(func1d,-1,x)
555返回压缩输出(输出)
ValueError:意外的数组大小:new_size=2,获取的数组的arr_size=1
这个错误似乎与mvn函数有关,但我不知道如何解决它。有人能帮我解决这个问题吗?我会非常感激的