我正在使用MuPad,以便有一个符号工具来找到方程的解。但我正在使用矩阵。
考虑一下:
blck := A -> matrix([
[A[1..linalg::matdim(A)[1]/2,1..linalg::matdim(a)[2]/2],
A[1..linalg::matdim(A)[1]/2,linalg::matdim(A)[2]/2+1..linalg::matdim(A)[2]]],
[A[linalg::matdim(A)[1]/2+1..linalg::matdim(A)[1],1..linalg::matdim(A)[2]/2],
A[linalg::matdim(A)[1]/2+1..linalg::matdim(A)[1],linalg::matdim(A)[2]/2+1..linalg::matdim(A)[2]]]
])
这个函数使我能够有一个矩阵的块表示,它的工作原理。现在考虑这个功能
myfun := A -> matrix([[blck(A)[1,1]*blck(A)[2,2]*blck(A)[2,1],blck(A)[1,1]],
[blck(A)[1,1],blck(A)[1,1]]])
这将操纵一个矩阵并返回其组件以某种方式组合的矩阵。问题是,考虑到我不能告诉MuPad矩阵A及其组件是矩阵而不是实数,MuPad会以不同的顺序向我展示矩阵产品
例如。考虑
myfun(matrix([[A11,A12],[A21,A22]]))
返回矩阵的第一个分量,元素(1,1),是A11 * A21 * A22,不正确的是A11,A12,A21,A22矩阵!
我如何告诉MuPad A11,A12,A21和A22是矩阵,以便MuPad能正确扩展产品?
答案 0 :(得分:1)
只要您明确地将它们放在那里,您就可以在MuPAD中使用矩阵中的矩阵。只是告诉系统将A1 * A2视为非交换性更难以得到很好的支持。您可以全面发展,创建自己的数据类型并相应地实现算法,但如果您仍希望进行简化,那么这并不一定容易。