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

标签 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

哪里Tformulated获取方式如下:

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

Tw是先前计算的具有复值元素的列表。 我真正想做的是针对 w 的每个值(用于“error x,y,w ....”)我想针对 x 的值最小化函数“error” & y . w范围从 1 到 2048。因此,它基本上是一个二维最小化问题。我已经尝试过自己编程(尽管我对使用什么方法以及如何使用它感到困惑);我的代码如下:

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])

[输出]:

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

这里可能遇到的问题是最小化例程需要一个列表作为参数。参见 the docs对于所有血腥的细节。不确定是否可以直接最小化复值函数,您可能需要分别考虑实部和虚部。

关于python - Python 中的二维优化(最小化)(使用 scipy.optimize),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12200114/

相关文章:

vb.net - 是否将方法代码放在VB.Net数据存储类中,还是将其放在单独的类中?

installation - 在 ubuntu 12.04 的 virtualenv 中使用 pip 安装 scipy

python - future 警告 : Using a non-tuple sequence for multidimensional indexing is deprecated use `arr[tuple(seq)]`

python - 如何添加到从另一个类继承的 python 类的初始定义?

python - 如何计算python中每行具有值的列数?

python - 带/不带参数的 Django 管理命令

python - 如何在我的代码中添加显示列数的新行

c++ - 奇怪的 C++ 性能差异?

c++ - 小 N 的 std::map 与 unordered_map 内存占用

python - 有效计算信号的 50Hz 内容