Я работаю с 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 правильно расширял продукты?