K J*_*son 8 python numpy linear-algebra
我需要为x 解决一组形式为A x = B的联立方程.我使用了numpy.linalg.solve函数,输入A和B,但是我得到错误'LinAlgError:数组的最后2个维必须是正方形'.我该如何解决?
这是我的代码:
A = matrix([[v1x, v2x], [v1y, v2y], [v1z, v2z]])
print A
B = [(p2x-p1x-nmag[0]), (p2y-p1y-nmag[1]), (p2z-p1z-nmag[2])]
print B
x = numpy.linalg.solve(A, B)
Run Code Online (Sandbox Code Playgroud)
矩阵/向量的值在代码中先前计算,这很好,但值是:
A =
(-0.56666301, -0.52472909)
(0.44034147, 0.46768087)
(0.69641397, 0.71129036)
Run Code Online (Sandbox Code Playgroud)
B =
(-0.38038602567630364, -24.092279373295057, 0.0)
Run Code Online (Sandbox Code Playgroud)
x应该具有形式(x1,x2,0)
Kei*_*van 15
如果你还没有找到答案,或者以后有人有这个问题.
要解决Ax = b:
numpy.linalg.solve使用LAPACK gesv.如LAPACK文档中所述,gesv要求A为正方形:
LA_GESV计算实数或复数线性方程组A X = B的解,其中A是方阵,X和B是矩形矩阵或向量.使用行交换的高斯消元将因子A用作A = P L*U,其中P是置换矩阵,L是单位下三角形,U是上三角形.然后使用A的因式形式来解决上述系统.
如果A矩阵不是方形,则意味着您要么拥有比方程更多的变量,要么反过来.在这些情况下,您可以处理无解决方案或无限数量的解决方案.决定解空间的是矩阵与列数相比的等级.因此,您首先必须检查矩阵的等级.
话虽这么说,你可以使用另一种方法来解决你的线性方程组.我建议看看LU或QR甚至SVD等因子分解方法.在LAPACK中,您可以使用getrsPython中的不同内容:
scipy.linalg.solve_triangularnumpy.linalg.lstsq 还可以看看这里制定并解决了一个简单的例子.
| 归档时间: |
|
| 查看次数: |
18655 次 |
| 最近记录: |