【问题标题】:Solving A*x=x with numpy用 numpy 求解 A*x=x
【发布时间】:2020-08-24 07:06:02
【问题描述】:

我是 numpy 新手,我想解方程 A * x = x,其中 A 是矩阵,x 是向量。

搜索向量 x,如果它存在的话。

我找到了 np.linalg.solve()-function ,但没有按预期工作。

【问题讨论】:

  • 您可能想检查一下,因为 NumPy 有几种不同的方法,具体取决于您要执行的乘法类型:educba.com/matrix-multiplication-in-numpy。如果不了解您要达到的目标的更多细节,就很难说更多。
  • 你知道A吗?如果是这样,为什么不只计算特征值和特征向量?
  • 显示您尝试过的内容。 “我没有让它按预期工作”不是一个有效的问题陈述。
  • 请点击旁边的复选标记接受提供的答案,以将您的问题从未回答队列中删除

标签: python numpy math matrix calculation


【解决方案1】:

这里的问题与其说是 numpy 的问题,不如说是您对所涉及的线性代数的理解。你问的问题可以改写为:

A @ x = x
A @ x = I @ x
(A - I) @ x = 0

这是一般eigenvector问题的具体表述,规定eigenvalue为1。

Numpy 用函数np.linalg.eig 解决了这个问题:

w, v = np.linalg.eig(A)

您需要检查任何值是否为 1(可能不止一个):

mask = np.isclose(w, 1)
if mask.any():
    for vec in v[:, mask].T:
        print(vec)
else:
    print('Nope!')

v 的元素是单位向量。请记住,此类向量的任何标量倍数也是一种解决方案。

对于不可逆矩阵的问题,您可能希望改用scipy.linalg.svd

v, w, _ = svd(A)

其余的过程将是相同的。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多