4
matlab中的A/B提供了一个特殊的解决方案,而numpy.linalg.lstsq则不提供。Numpy vs mldivide,“”matlab运算符
A = [1 2 0; 0 4 3];
b = [8; 18];
c_mldivide = A \ b
c_mldivide =
0
4
0.66666666666667
c_lstsq = np.linalg.lstsq([[1 ,2, 0],[0, 4, 3]],[[8],[18]])
print c_lstsq
c_lstsq = (array([[ 0.91803279],
[ 3.54098361],
[ 1.27868852]]), array([], dtype=float64), 2, array([ 5.27316304,1.48113184]))
- 如何mldivide在MATLAB A \ B给出了特殊的解决方案?
- 此解决方案是否有用于实现计算精度?
- 为什么是这个解决方案的特殊以及如何实现它在numpy的
你是什么意思的“特殊解决方案”? python的解决方案('[0.918 3.541 1.279]')也是一个正确的解决方案。你有3个无知的2个方程,所以没有独特的解决方案。对于任何实数's',解都是'[-1 9/2 0] + s * [3/2 -3/4 1]'。 Matlab解决方案设置s = 2/3,Python解决方案设置s = 1.27868852。 – David
它不只是提供任何正确的解决方案。 mldivide总是给出一个包含n个非零元素的解向量,其中n是矩阵的秩,而numpy不会这样做。我正在寻找像mldivide一样的numpy完全相同的解决方案。 – Schrodinger
Octave'A \ b'解决方案与'numpy'相同。 MATLAB doc建议'pinv(A)* B'作为一种计算上更昂贵的方法。在八度产生同样的事情。 'numpy'也有'pinv',结果相同。 – hpaulj