Matrix multiplication: Difference between revisions

m (Moved to Matrix cat)
Line 356:
 
=={{header|D}}==
<pre>module mxmul ;
import std.stdio: writefln;
import std.string: format, join;
 
boolT[][] isRectangularmatrixMul(T)(T[][] am1, T[][] m2) {
bool isRectangular(T[][] matrix) {
if(a.length < 1 || a[0].length < 1)
if (!matrix.length)
return false ;
for(int i = 1 ; i < a.length; i++) return true;
foreach (row; matrix)
if(a[i].length != a[i-1].length)
if (arow.length <!= 1 || amatrix[0].length < 1)
return false ;
return true ;
}
 
T[][] mmul(T=real)(T[][] lhs, T[][] rhs) {result;
if (isRectangular(m1) && isRectangular(m2) && m1[0].length == m2.length) {
T[][] res ;
if(isRectangular(lhs) && isRectangular(rhs) && lhs result = new T[0][](m1.length, == rhsm2[0].length){;
 
res = new T[][](lhs.length, rhs[0].length) ;
for(int i = 0 ;foreach (i, < lhs.length m1_row_i; i++m1)
for (int j = 0 ; j < rhsm2[0].length ; j++) {
res[i][j] T aux = 0 ;
for(int k = 0 ; k < rhs.length foreach (k, m2_row_k; k++m2)
res[i][j] aux += lhs[i]m1_row_i[k] * rhs[k]m2_row_k[j] ;
result[i][j] = aux;
}
} else }
} else
throw new Exception("Mul.matrix_mul Error") ;
return res ;
return false result;
}
 
string toStringprettyPrint(T=real)(T[][] amatrix) { // for pretty print
string[] sresult;
foreach(e (row; amatrix)
s result ~= format("%8s", erow)[1..$-1] ;
return "\n<[" ~ result.join(s","\n ") ~ ">]" ;
}
 
void main() {
float[][] ma = [[0.51,0,0,1 2], [0.03,0.5,0,0 4], [0.03,0,0.5,-1 6]] ;
float[][] nb = [[0.5-3,0 -8,0] 3,[0.0,0.5,0], [0.0-2,0,0.5],[ 1.0,0,-1 4]] ;
 
writefln(" mA = \n", m.toStringprettyPrint(a)) ;
writefln(" n (m's transpose)\nB = \n", n.toStringprettyPrint(b)) ;
writefln(" m\nA * nB = \n", m.mmulprettyPrint(n).toStringmatrixMul(a, b))) ;
writefln(" n * m = ", n.mmul(m).toString()) ;
}</pre>
writefln("(n * m) * n = ", n.mmul(m).mmul(n).toString()) ;
}</pre>
 
=={{header|Fortran}}==
Anonymous user