option nolet print "-------------------------------------------------------------------------" print " general code :reduced row echelon form matrix=A0 :rref(A0),version 1.0 " print " peter.vlasschaert@gmail.com,19/10/2019 " print "-------------------------------------------------------------------------" ! ref : code : maple : 'Prof Dr Denis Constales ( UGent)',website. '*.png' ! file name = TRUEBASICRREFDATAVERSION1final print !************************************ ! matrix input : read -data statement !************************************ dim A0(1,1),A(1,1) ! init matrix print "***********************************************" print " example = 1 , example = 2 ,input 'matrix' = 3 " print "***********************************************" print input prompt " input integer : from '1 to 3' => ":s print print !******************* ! first example = 1 !******************* if s=1 then m0 = 2 ! number of rows n0 = 4 ! number of columns mat redim A0(m0,n0),A(m0,n0) for i = 1 to m0 for j = 1 to n0 read A0(i,j) next j next i end if !******************* ! second example = 2 !******************* if s=2 then m0 = 3 ! number of rows n0 = 4 ! number of columns mat redim A0(m0,n0),A(m0,n0) for i = 1 to m0 for j = 1 to n0 read A0(i,j) next j next i end if !********************** ! thrid 'input matrix' !********************** if s=3 then print "--------------" print "data 1,2,3,8 " print "data 4,8,12,16" print "--------------" print input prompt " number of rows (m) = ":m0 input prompt " number of columns (n) = ":n0 print mat redim A0(m0,n0),A(m0,n0) for i = 1 to m0 for j = 1 to n0 print "A0(";i;",";j;") = "; input A0(i,j) next j next i end if print print "******************************" print " input matrix 'A0':rref(A0)=> " print "******************************" print mat print A0 print print "******************************" print " ouput matrix 'A':rref(A0)=> " print "******************************" print !********************************* ! algo : rref(A0), 'sub' & 'call' !********************************* !******************************************************************** ! rem mat A = A0 => ! copy : maple,maxima code ! number rows : size(A0,1) => 'load(linearalgebra)=> matrix_size ' ! number columns : size(A0,2) => 'load(linearalgebra)=> matrix_size ' !******************************************************************** call rref(A0(,),A(,)) mat print A !******************* ! input : rref(data) !******************* data 1,2,3,8 data 4,8,12,16 !******************** ! output : rref(data) !******************** ! example !******************** !matrix( ! [1, 2, 3, 0], ! [0, 0, 0, 1] ! ) data 2,5,9,7 end sub rref(A0(,),A(,)) !***************************************** ! input = A0 => matrix ! output = A => matrix !***************************************** ! second argument rref : maxima : return(A) ! : maple : A !***************************************** mat A = A0 ! copy matrix 'A0' m = size(A,1) ! matrix_size n = size(A,2) ! matrix_size i0 = 1 j0 = 1 do while i0 <= m and j0 <= n i1 = 0 for i = i0 to m if A(i, j0) <> 0 then i1 = i next i if i1 = 0 then j0 = j0 + 1 else if i1 <> i0 then for j = j0 to n t = A(i0, j) A(i0, j) = A(i1,j) A (i1, j) = t next j end if p = a(i0,j0) for j = j0 to n a(i0, j)=10*(a(i0, j)/p)/10! notation correction next j for i = 1 to m if i <> i0 then p = A(i, j0) for j = j0 to n A(i, j)= A(i, j) - p*A(i0, j) next j end if next i i0 = i0 + 1 j0 = j0 + 1 end if loop end sub