Python中的二维优化(最小化)(使用scipy.optimize)

Python中的二维优化(最小化)(使用scipy.optimize),python,optimization,scipy,minimization,Python,Optimization,Scipy,Minimization,我试图优化(最小化)二维函数E(n,k)定义如下: error=lambda x,y,w: (math.log(abs(Tformulated(x,y,w))) - math.log(abs(Tw[w])))**2 + (math.atan2(Tformulated(x,y,w).imag,Tformulated(x,y,w).real) - math.atan2(Tw[w].imag,Tw[w].real))**2 其中,t公式如下所示: def Tformulated(n,k,w):

我试图优化(最小化)二维函数
E(n,k)
定义如下:

error=lambda x,y,w: (math.log(abs(Tformulated(x,y,w))) - math.log(abs(Tw[w])))**2 + (math.atan2(Tformulated(x,y,w).imag,Tformulated(x,y,w).real) - math.atan2(Tw[w].imag,Tw[w].real))**2
其中,
t公式
如下所示:

def Tformulated(n,k,w):
    z=1j
    L=1
    C=0.1
    RC=(w*L)/C
    n1=complex(1,0)
    n3=complex(1,0)
    n2=complex(n,k)
    FP=1/(1-(((n2-n1)/(n2+n1))*((n2-n3)/(n2+n3))*math.exp(-2*z*n2*RC)))
    Tform=((2*n2*(n1+n3))/((n2+n1)*(n2+n3)))*(math.exp(-z*(n2-n1)*RC))*FP
    return Tform
temp=[]
i=range(5)
retval = fmin_powell(error , x ,y, args=(i) , maxiter=100 ,maxfun=100)
temp.append(retval)
Tw
是以前计算过的具有复数值元素的列表。 我正试图做的是针对
w
的每个值(在“error x,y,w…”中使用),我想最小化
x
y
值的函数“error”<代码>w范围从1到2048。所以,这基本上是一个二维极小化问题。我曾经尝试过编程(尽管我一直在纠结于使用什么方法以及如何使用它);我的代码如下:

def Tformulated(n,k,w):
    z=1j
    L=1
    C=0.1
    RC=(w*L)/C
    n1=complex(1,0)
    n3=complex(1,0)
    n2=complex(n,k)
    FP=1/(1-(((n2-n1)/(n2+n1))*((n2-n3)/(n2+n3))*math.exp(-2*z*n2*RC)))
    Tform=((2*n2*(n1+n3))/((n2+n1)*(n2+n3)))*(math.exp(-z*(n2-n1)*RC))*FP
    return Tform
temp=[]
i=range(5)
retval = fmin_powell(error , x ,y, args=(i) , maxiter=100 ,maxfun=100)
temp.append(retval)

我不确定即使是
fmin_powell
是否正确。这里有一个最简单的例子:

from scipy.optimize import fmin

def minf(x):
  return x[0]**2 + (x[1]-1.)**2

print fmin(minf,[1,2])
[out]:

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 44
         Function evaluations: 82
[ -1.61979362e-05   9.99980073e-01]

这里一个可能的问题是最小化例程需要一个列表作为参数。查看所有血淋淋的细节。不确定如果你可以直接最小化复值函数,你可能需要分别考虑实部和虚部。 看起来您正在尝试最小化3D功能
错误
?哦,谢谢。不过我还是想知道一个答案-2D最小化使用什么方法?@user1636363这是2D(
x
是一个长度为2的数组),令人困惑的是,你的函数(error)是3D的,你还没有定义
E(n,k)
。E(n,k)是写为“error x,y,w:…”的函数。在这里,“w”的值在每次调用函数之前固定为整数值。(实际上,每次开始最小化时,我都会将一个整数值传递给“w”的函数)。这是一个二维极小化问题;对不起,这是我的错confusion@user1636363:使用哪种方法取决于问题。在你的情况下,哪一个是最好的,我说不出来。我要做的是,我会从最简单的(
fmin
)开始,如果还不够,那么尝试更复杂的方法;我不知道哪些是2D最小化的