python - 使用带有对称系数矩阵的 scipy.linalg.solve (assume_a='sym')
问题描述
我正在尝试使用 scipy 的linalg.solve函数求解未知 x 的线性方程组 A * x = b。这是一个运行良好的示例:
import numpy as np
import scipy.linalg as linalg
A = np.array([[ 0.18666667, 0.06222222, -0.01777778],
[ 0.01777778, 0.18666667, 0.01777778],
[-0.01777778, 0.06222222, 0.18666667]])
b = np.array([0.26666667, -0.26666667, -0.4])
x = linalg.solve(A, b, assume_a='gen')
结果是x = [1.77194417, -1.4555256, -1.48892533]
,这是一个正确的解决方案。这可以通过计算得到验证A.dot(x)
,结果为[0.26666667, -0.26666667, -0.4]
。由于这与 相同b
,因此解决方案是正确的。
然而,系数矩阵A
是对称的,即主对角线上方和下方的值相同。如果我正确理解文档,为了更有效地解决此类问题,该solve
函数允许设置参数assume_a='sym'
。不幸的是,使用以下代码(给定相同的A
and b
)会导致找到不正确的解决方案:
x = linalg.solve(A, b, assume_a='sym')
结果是x = [1.88811181, -1.88811181, -1.78321672]
,这与上面的解决方案不同。计算A.dot(x)
结果为[0.26666667, -0.35058274, -0.48391607]
。由于这与 不同b
,因此该解决方案似乎不正确。
我想知道我的代码是否有任何问题,或者我对对称矩阵或预期结果的理解是否完全错误!?也许矩阵必须满足与 一起使用的附加约束assume_a='sym'
?
我很感激你的回答。提前致谢!
解决方案
认为它不会发生。我提供了一个简短的回答。
非对称A
import numpy as np
import scipy.linalg as linalg
A = np.array([[ 0.18666667, 0.06222222, -0.01777778],
[ 0.01777778, 0.18666667, 0.01777778],
[-0.01777778, 0.06222222, 0.18666667]])
b = np.array([0.26666667, -0.26666667, -0.4])
x = linalg.solve(A, b, assume_a='gen')
np.allclose(A @ x,b)
出去:
真的
这表明求解器运行良好。
对称 A
# use you upper triangular A to get a symmetric matrix
A_symm = (np.triu(A) + np.triu(A).T -np.diag(A.diagonal()))
# solve the equations
x = linalg.solve(A_symm, b, assume_a='sym')
np.allclose(A_symm @ x,b)
出去:
真的
它仍然有效。
如果将非对称矩阵A
传递给求解器,然后指定assume_a = 'sym'
,求解器将仅使用 的上三角矩阵,A
见下文:
x = linalg.solve(A, b, assume_a='sym')
np.allclose(A @ x,b),x
出去:
(假,数组([1.88811181,-1.88811181,-1.78321672]))
结果表明求解器工作“错误”,但结果x
与结果相同linalg.solve(A_symm, b, assume_a='sym')
推荐阅读
- azure - 使用 Play 框架时使用 Application Insights 启用 Web 请求日志记录
- python - 如何使用 python 从内联样式标签中删除特定的值对?
- python-sphinx - 狮身人面像超链接:打开反引号之前的非空格
- jetbrains-ide - 有没有办法从 Rider 中的 C# Interactive 访问当前的解决方案源?
- javascript - 如何在 Next js 上将数据从快递服务器发送到客户端?
- javascript - Deck.gl,如何根据列中的值定义不同颜色的散点图
- c - 在 c 中写一个 2 位整数,仅包括
- php - Wordpress:图像不显示用于每个循环
- android - accessService 中的 onKeyEvent() 未按预期工作
- python-3.x - pip install dlib,Cmake错误编译器未找到