2012-07-13 35 views
0

我正在使用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能正確擴展產品?

回答

1

只要您明確地將它們放在那裏,就可以在MuPAD中的矩陣中使用矩陣。僅僅告訴系統將A1 * A2視爲非交換性就比較困難,並且不能得到很好的支持。您可以全力以赴,創建自己的數據類型並相應地實現算術,但如果您仍然希望簡化發生,這不一定容易。