最小化(优化)Python中的特定特征值

最小化(优化)Python中的特定特征值,python,matrix,optimization,eigenvalue,Python,Matrix,Optimization,Eigenvalue,我编写了一个简单的Python代码,可以从文件中读取数组。所有数组元素都包含基本代数运算(例如y*w+2*(w+y))。这些元素被读入,然后使用eval命令对所有数组元素进行求值(我知道使用eval的安全性问题,但是这个脚本只会被我使用,我希望不会做傻事) 然后用这些阵列求解一般特征值问题,得到特征值和特征向量。我的问题是如何通过改变矩阵中的某些参数来最小化(优化)特定特征值?以下是一个基本示例: import numpy as np from scipy.linalg import eig

我编写了一个简单的Python代码,可以从文件中读取数组。所有数组元素都包含基本代数运算(例如
y*w+2*(w+y)
)。这些元素被读入,然后使用
eval
命令对所有数组元素进行求值(我知道使用
eval
的安全性问题,但是这个脚本只会被我使用,我希望不会做傻事)

然后用这些阵列求解一般特征值问题,得到特征值和特征向量。我的问题是如何通过改变矩阵中的某些参数来最小化(优化)特定特征值?以下是一个基本示例:

import numpy as np
from scipy.linalg import eig

y=10
w=3.45

x = np.array([[y+w,-2],[-2,w-2*(w+y)]])

eigenVal,eigenVec=eig(x)

print eigenVal[0]
矩阵不是最好的例子,但只是一个极小的例子。其想法是改变两个参数y和w,以最小化特定特征值(例如,第一个特征值,
eigneval[0]
)。我以前在
C++
中写过一些基本的优化算法,但我想探索一下Python优化库。这些矩阵可能变得非常大,那么解决这个问题的最佳方法是什么

您想要使用

这个
复杂错误
令人担忧;您应该使用
bounds
参数或
constraints
参数。我不知道你的问题有什么限制,所以我跳过这部分。一个合适的约束是矩阵应该是,这保证了正的、实的特征值。但这是不可能的,因为矩阵中有一个常数
-2

您可以通过以下方式访问优化结果:

a = minimize(my_func, x0)
print(a.x)
# array([-63809761.27752077, -63997191.74550374])
看看这个:
a = minimize(my_func, x0)
print(a.x)
# array([-63809761.27752077, -63997191.74550374])