在千里马,我们有matrix_element_add
,matrix_element_mult
和matrix_element_transpose
。
是否有matrix_element_inv
,如果没有,我该怎么做?
答案 0 :(得分:0)
如果要反转矩阵,首先要记住并非所有矩阵都可以反转,所以首先要确保矩阵可以反转。
对于使用矩阵的最大值,乘法运算符是。
所以用A。 A = A ^ 2
如果我们想得到这个值是A ^^ 2
通常,运算符应用于矩阵的每个元素,因此如果要反转所有元素:
(%i1) A: matrix ([17, 3], [-8, 11]);
[ 17 3 ]
(%o1) [ ]
[ - 8 11 ]
(%i9) A^-1;
[ 1 1 ]
[ -- - ]
[ 17 3 ]
(%o9) [ ]
[ 1 1 ]
[ - - -- ]
[ 8 11 ]
然后得到矩阵的逆矩阵:
(%i2) B: A^^-1;
[ 11 3 ]
[ --- - --- ]
[ 211 211 ]
(%o2) [ ]
[ 8 17 ]
[ --- --- ]
[ 211 211 ]
(%i4) B.A;
[ 1 0 ]
(%o4) [ ]
[ 0 1 ]
(%i5) A.B;
[ 1 0 ]
(%o5) [ ]
[ 0 1 ]
确保你的矩阵是可逆的:
(%i6) Bad: matrix ([2, 3], [4, 6]);
[ 2 3 ]
(%o6) [ ]
[ 4 6 ]
(%i7) Bad^^-1;
expt: undefined: 0 to a negative exponent.
-- an error. To debug this try: debugmode(true);
(%i8) newdet(Bad);
(%o8)/R/ 0
现在你应该仔细阅读这一节: http://maxima.sourceforge.net/docs/manual/maxima_23.html
特别是在讲述
时matrix_element_add
所以真的只有这个操作者所以不存在matrix_element_inv
所以你可以使用lambda函数编写自己的函数,例如获取所有倒置元素的转置:
(%i10) matrix_element_transpose: lambda ([x], x^-1)$
(%i11) transpose(A);
[ 1 1 ]
[ -- - - ]
[ 17 8 ]
(%o11) [ ]
[ 1 1 ]
[ - -- ]
[ 3 11 ]
希望这会有所帮助