wa4*_*557 21 python optimization scipy
我知道这个问题应该在scipy.optimize手册中处理,但我不太了解它.也许你可以帮忙
我有一个函数(这只是一个例子,不是真正的函数,但我需要在这个级别理解它):
编辑(更好的例子):
我们假设我有一个矩阵
arr = array([[0.8, 0.2],[-0.1, 0.14]])
Run Code Online (Sandbox Code Playgroud)
具有目标功能
def matr_t(t):
return array([[t[0], 0],[t[2]+complex(0,1)*t[3], t[1]]]
def target(t):
arr2 = matr_t(t)
ret = 0
for i, v1 in enumerate(arr):
for j, v2 in enumerate(v1):
ret += abs(arr[i][j]-arr2[i][j])**2
return ret
Run Code Online (Sandbox Code Playgroud)
现在我想在假设t [i]是实数的情况下最小化这个目标函数,等等 t[0]+t[1]=1
ask*_*han 29
这个约束
t[0] + t[1] = 1
Run Code Online (Sandbox Code Playgroud)
将是一个equality(type='eq')约束,您可以在其中创建一个必须等于零的函数:
def con(t):
return t[0] + t[1] - 1
Run Code Online (Sandbox Code Playgroud)
然后你制定一个dict约束(如果不止一个,则为dicts列表):
cons = {'type':'eq', 'fun': con}
Run Code Online (Sandbox Code Playgroud)
我从来没有尝试过,但我相信为了保持t真实,你可以使用:
con_real(t):
return np.sum(np.iscomplex(t))
Run Code Online (Sandbox Code Playgroud)
并使你的cons两个约束:
cons = [{'type':'eq', 'fun': con},
{'type':'eq', 'fun': con_real}]
Run Code Online (Sandbox Code Playgroud)
然后你cons输入minimize:
scipy.optimize.minimize(func, x0, constraints=cons)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31602 次 |
| 最近记录: |