MuPad: не может работать с символьным расширением при обработке матричных выражений.

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


person Andry    schedule 13.07.2012    source источник


Ответы (1)


Вы можете иметь матрицы в матрицах в MuPAD, если вы явно помещаете их туда. Просто сказать системе рассматривать A1 * A2 как некоммутативное более сложно и плохо поддерживается. Вы можете пойти полным ходом, создать свой собственный тип данных и соответствующим образом реализовать арифметику, но это не обязательно легко, если вы все еще хотите, чтобы упрощения происходили.

person Christopher Creutzig    schedule 17.03.2013