最小化(优化)Python中的特定特征值
我编写了一个简单的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
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])