gpt4 book ai didi

python - 如何用 numpy 求解形式为 (A'A - yBB')x = 0 的方程

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:39 25 4
gpt4 key购买 nike

如果我有一个方程组,则使用 numpy:

3x + 2y = 5
1x + 4y = 10

我可以用 numpy.linalg.solve 解决它们:

a = [[3,2],[1,4]]
b = [5,10]
solution = numpy.linalg.solve(a,b)

现在,如果我有两个矩阵,A 和 B,每个矩阵的形状都是 (100,100),我想求解以下形式的方程:(A'A - yBB')x = 0

我不确定如何使用 numpy.linalg.solve

进行设置

最佳答案

这看起来您正在尝试解决 generalized eigenvalue problem ,其中 y 是未知的广义特征值 λ,x 是相应的广义特征向量。如果那是你想要的,你可以使用 scipy.linalg.eig .这是一个例子。

为了保持输出的可读性,我将使用形状为 (2, 2) 的数组。

In [91]: from scipy.linalg import eig

In [92]: A
Out[92]:
array([[2, 3],
[1, 1]])

In [93]: B
Out[93]:
array([[0, 1],
[3, 0]])

这些是等式中的矩阵。

In [94]: a = A.T.dot(A)

In [95]: b = B.dot(B.T)

求解广义特征值问题:

In [96]: lam, v = eig(a, b)

这些是广义特征值(您的y):

In [97]: lam
Out[97]: array([ 6.09287487+0.j, 0.01823624+0.j])

v 的列是广义特征向量(您的x):

In [98]: v
Out[98]:
array([[ 0.98803087, -0.81473616],
[ 0.1542563 , 0.57983187]])

验证解决方案。请注意,结果大约为 1e-16,即数值接近于 0。

In [99]: (a - lam[0]*b).dot(v[:,0])
Out[99]: array([ 2.22044605e-16+0.j, -8.88178420e-16+0.j])

In [100]: (a - lam[1]*b).dot(v[:,1])
Out[100]: array([ 0.+0.j, 0.+0.j])

关于python - 如何用 numpy 求解形式为 (A'A - yBB')x = 0 的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com