Re: How to print on paper big matrixes ?
- To: mathgroup at smc.vnet.net
- Subject: [mg62499] Re: How to print on paper big matrixes ?
- From: carlos at colorado.edu
- Date: Sat, 26 Nov 2005 02:46:55 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
> So, there's a way to print on paper a 74x74 matrix in matrix form ?
Yes. I faced that problem in 1964 with line printers having then
a limit width of 128 characters, and wrote a fortran code used since in
hundreds of programs. The same idea works in Mathematica using
Table and TextForm. See below.
(* Module MatrixPrint is the verbatim conversion of the f77 code
subroutine matrixprint8 (a, m, n)
integer m, n, i, j, jref
double precision a(m,n)
do 2000 jref = 0,n-1,8
print '("* ",8I9)',(j,j=jref+1,min(jref+8,n))
do 1500 i = 1,m
print '("*",I4,8F9.5)', i,(a(i,j),j=jref+1,min(jref+8,n))
1500 continue
2000 continue
return
end
with two additional arguments: number of columns and precision.
Useful for floating-point entries; does not work well for symbolic
or integer entries. Those would require a different module.
Could be speeded up by using Map etc to replace loops. *)
MatrixPrint[a_,m_,n_,mm_,pr_]:=Module[{
i,j,jref=0,t={},trow,aij},
For [jref=0,jref<=n-1,jref+=mm, trow={" "};
For [j=jref+1,j<=Min[jref+mm,n],j++,
AppendTo[trow,ToString[j]] ];
AppendTo[t,trow];
For [i=1,i<=m,i++, trow={ToString[i]};
For [j=jref+1,j<=Min[jref+mm,n],j++,
aij=SetPrecision[a[[i,j]],pr];
AppendTo[trow,ToString[aij]] ];
AppendTo[t,trow] ];
];
Print[TextForm[TableForm[t,TableAlignments->{Right},
TableDirections->{Column,Row},TableSpacing->{0,2}]]];
ClearAll[t];
];
(* test statements *)
A=Table[1/N[i+j],{i,1,10},{j,1,24}];
MatrixPrint[A,10,24,4,16]; (*full matrix *)
MatrixPrint[A,4,24,8,5]; (*first four rows*)
MatrixPrint[A,10,5,8,6]; (*first five columns*)