Python 如何最小化复杂函数
当我试图使用scipy.optimize fmin或scipy.optimize minimize最小化我的复杂函数时,我遇到了一个问题。事实上,最小化似乎不想考虑到我有一个复杂函数这一事实 我把我的代码分为两部分,第一部分是一个类,第二部分是我的主程序,它调用这个类并解决最小化问题 这是我的班级: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
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
返回矩阵的浮点或复数行列式,请参见: