File: [local] / OpenXM / src / asir-contrib / packages / src / tk_matrix.rr (download)
Revision 1.1, Thu Oct 7 02:11:34 2021 UTC (2 years, 7 months ago) by takayama
Branch: MAIN
CVS Tags: HEAD
matrix_kronecker_product(A,B) returns the Kronecker product of A and B.
matrix_stack(A,B) returns [A,B].
matrix_row_matrix(a |size=n) return [[a,a,...,a]]
|
/* $OpenXM: OpenXM/src/asir-contrib/packages/src/tk_matrix.rr,v 1.1 2021/10/07 02:11:34 takayama Exp $
*/
module tk_matrix;
localf kronecker_product;
localf test_kronecker_product;
localf row_matrix;
localf stack;
def kronecker_product(A,B) {
A=matrix_list_to_matrix(A);
B=matrix_list_to_matrix(B);
Ma=size(A)[0]; Na=size(A)[1];
Mb=size(B)[0]; Nb=size(B)[1];
C=newmat(Ma*Mb,Na*Nb);
for (I=0; I<Ma*Mb; I++) {
Ia = idiv(I,Mb); Ib = I % Mb;
for (J=0; J<Na*Nb; J++) {
Ja = idiv(J,Nb); Jb = J % Nb;
C[I][J] = A[Ia][Ja]*B[Ib][Jb];
}
}
return C;
}
def test_kronecker_product() {
A=[[a11,a12],[a21,a22]];
B=[[b11,b12],[b21,b22]];
print(kronecker_product(A,B));
print("----");
A=[[a11,a12],[a21,a22]];
B=[[b11,b12,b13],[b21,b22,b23]];
print(kronecker_product(A,B));
}
/*
test_kronecker_product()$
*/
def row_matrix(L) {
if (type(getopt(size))>0) {
N=getopt(size);
}else{
return matrix_list_to_matrix([matrix_matrix_to_list(L)]);
}
C=newmat(1,N);
for (I=0; I<N; I++) C[0][I]=L;
return C;
}
/*
matrix_row_matrix(1 | size=5);
matrix_row_matrix([1,2,3]);
print("--------")$
*/
def stack(A,B) {
C=append(matrix_matrix_to_list(A),
matrix_matrix_to_list(B));
return matrix_list_to_matrix(C);
}
endmodule;
/*
tk_matrix.stack(tk_matrix.kronecker_product(matrix_identity_matrix(2),tk_matrix.row_matrix(1 |size=3)),
tk_matrix.kronecker_product(tk_matrix.row_matrix(1 | size=2),matrix_identity_matrix(3)));
*/
end$