Recently I was working on a problem where I expected to

decompose a matrix into components in such a way that I

need not depend on multiplication of these components to

get the original matrix, as multiplication is the operator

used by all decomposition techniques to revert.

I came up with slighly improvised echleon form method

that I have kept here "

"

I have also coded a small function to calculate it

available at "

"

It returns correct result. But the point to note here

is that just for 4-x-4 it takes 1 minute, 5-x-5 matrix takes

about 18 minutes to solve the equations constructed. In case

of 6-x-6 its just plain Maxima out of space. Its behaviour is somewhat same as exponential growth of subgroups problem.

Interesting thing to note is that on Mathematica 9, it took 3000

sec to complete the answer and return wrong results while maxima took 60 seconds for correct response !!

On sage it took 3 seconds. Sage solves it like magic for bigger matrices too.

The equations constructed are too long and intricate and lot

in number. The advantage I see is that there is no need to pre-fed

equations in test cases and on the fly equation can be developed

of any order using a baby small piece of code.Moreover it works

for square as well as rectangular matrix.

There is no other test needed other than comparing the input and

output matrix to check the validity of computing system.

This can also be used to test simplification, reduction of

equations. I think it can put quite a challenge to very efficient systems.

Using the code on git,

%in:: ii:map(parse_string,create_list(concat("a",i),i,1,9));

%out:: [a1,a2,a3,a4,a5,a6,a7,a8,a9]

%in:: iii:listpartition(ii,3,3);

%out:: [[a1,a2,a3],[a4,a5,a6],[a7,a8,a9]]

%in:: mk:apply(matrix,iii);

%out:: matrix([a1,a2,a3],[a4,a5,a6],[a7,a8,a9])

%in:: aaq:ech(mk);

%out:: [matrix([1,a2/a1,a3/a1],[0,1,(a6-(a3*a4)/a1)/(a5-(a2*a4)/a1)],[0,0,a9-((a6-(a3*a4)/a1)*(a8-(a2*a7)/a1))/(a5-(a2*a4)/a1)-(a3*a7)/a1]),[a4,a7,a8-(a2*a7)/a1],[a1,a5-(a2*a4)/a1]]

%in:: revech(aaq);

%out:: [[a11=a1,a12=a2,a13=a3,a14=a4,a21=a5,a22=a6,a23=a7,

a24=a8,a31=a9,a32=a10,a33=a1,a34=a2,a41=a3,a42=a4,a43=a15,a44=a16]]

Can it be used as a bench mark in maxima ?

Regards,

Pankaj Sejwal

_______________________________________________

"The more I read, the more I acquire, the more certain I am that I know nothing.” - Voltaire