Python 如何最小化复杂函数

Python 如何最小化复杂函数,python,complex-numbers,minimization,Python,Complex Numbers,Minimization,当我试图使用scipy.optimize fmin或scipy.optimize minimize最小化我的复杂函数时,我遇到了一个问题。事实上,最小化似乎不想考虑到我有一个复杂函数这一事实 我把我的代码分为两部分,第一部分是一个类,第二部分是我的主程序,它调用这个类并解决最小化问题 这是我的班级: import sys,os import numpy as np import random, math import matplotlib.pyplot as plt import cmath

当我试图使用scipy.optimize fmin或scipy.optimize minimize最小化我的复杂函数时,我遇到了一个问题。事实上,最小化似乎不想考虑到我有一个复杂函数这一事实

我把我的代码分为两部分,第一部分是一个类,第二部分是我的主程序,它调用这个类并解决最小化问题

这是我的班级:

import sys,os
import numpy as np
import random, math
import matplotlib.pyplot as plt
import cmath

class real :
    def __init__(self):
        self.nmodes = 4
        self.L_ch = 1
        self.w = 2

    def minim(self,eps):
        self.T=np.array([[0.0,0.0],[0.00645-0.0012364j,0.0]])
        self.Id=np.array([[1,0],[0,1]])
        self.disp=np.linalg.det(self.T-self.Id)
        return self.disp
以下是我的主要节目:

import sys,os
import numpy as np
import random, math, cmath
from math import exp
import scipy
from scipy.optimize import fmin

from Carlo import *
#################################
# Call the Class and the function
#################################
A=real()
eps=0.003+0.0042j
C=A.minim(eps)
#################################
# Declare some parameters and list
#################################
Cp=0
track=2
variable=np.arange(track,6,1)
Save=[]
Tau=4.1
Freal=12
Fimag=14j
#################################
# Loop for minimize
#################################
for track in variable:
    Cp+=1
    print Cp
    if Cp==1:
        part_real=0.0
        part_imag=0.0
    else:
        part_real=Save[leng-1]/2*3.14*track
        part_imag=Save[leng]/2*3.14*track
    R_0 = fmin(C,[part_real,part_imag])
    print 'La valeur de R_0',R_0
    Save.append(Tau)
    Save.append(Freal+1)
    Save.append(Fimag+1)
    leng = len(Save) -1
但我有一个错误:

Traceback (most recent call last):
  File "Main.py", line 40, in <module>
    R_0 = fmin(C,[part_real,part_imag])
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/optimize.py", line 360, in fmin
    res = _minimize_neldermead(func, x0, args, callback=callback, **opts)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/optimize.py", line 424, in _minimize_neldermead
    fsim[0] = func(x0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/optimize.py", line 268, in function_wrapper
    return function(x, *args)
TypeError: 'numpy.complex128' object is not callable
回溯(最近一次呼叫最后一次):
文件“Main.py”,第40行,在
R_0=fmin(C,[部分真实,部分图像])
fmin中的第360行文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/scipy/optimize/optimize.py”
res=\u最小化\u neldermead(func,x0,args,callback=callback,**选项)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/scipy/optimize/optimize.py”,第424行,在neldermead中
fsim[0]=func(x0)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/scipy/optimize/optimize.py”,第268行,在函数包装器中
返回函数(x,*args)
TypeError:“numpy.complex128”对象不可调用
有人知道到底发生了什么吗?
谢谢。

在调用中:
R\u 0=fmin(C,[part\u real,part\u imag])
您应该发送一个函数作为第一个参数,而
C
似乎不是一个函数(这就是为什么出现错误“object is not callable”):
scipy.linalg.det
返回矩阵的浮点或复数行列式,请参见: