Syntax:
Mat2System ($A, @variable_list, $b) displays a system of linear equations, where$A is a Matrix$b is a Matrix or a Vector (or a ColumnVector)@variable_list is a (Perl) list of strings (variable names)Example usage:
Mat2System (Matrix ([[1,2],[3,4]], "x", "y", Vector([5,6]))Mat2System (Matrix ([[1,2,3],[4,5,6]], qw ("x_1 x_2 x_3 "), Matrix([[1],[2]]))Code: (Free to use, as long as you credit me and Thomas Hagedorn (who wrote the original version))
sub Mat2System{ # Mat2System (A, qw(x y z w), b) my $coeffs = shift; my @vec = @_; my $vname = pop @vec; my ($srow, $scol) = $coeffs->dimensions; my $vnamerow = scalar @vec; my $vrow; if ($vname -> class eq "Matrix") { $vrow = ($vname->dimensions)[0] } if ($vname -> class eq "Vector") { $vrow = $vname -> length; } die "Wrong number of rows or columns2" if ($vrow != $srow); die "Wrong number of rows or columns4" if ($scol != $vnamerow); my $outstr="\begin{array}"; my $s; $outstr .= '{' . ('r' x (2 * $scol + 2)) . '}'; for (my $j = 0; $j < $srow; $j ++) { $s = 0; for (my $i = 0; $i < $scol; $i++) { my $varname = $vec [$i]; my $a = $coeffs->element ($j + 1, $i + 1); if ($a == 0) { if (($s > 0) || ($i < $scol - 1)) { $outstr .= '&&'; } else { $outstr .= '&0'; } } elsif ($a > 0) { if ($a == 1) { $a = ""; } if ($s==0) {$outstr .= "& $a \,$varname"; $s = 1; } else {$outstr .= "&+& $a \, $varname"; } } else { if ($s == 1) { $a = -$a; if ($a == 1) { $a = ""; } $outstr .= "&- &$a \,$varname"; } else { if ($a == -1) { $a = "-"; } $outstr = $outstr . "& $a \, $varname"; $s = 1; } } } if ($vname -> class eq "Matrix") { $outstr .= "&=&" . $vname->element($j+1, 1). "\\"; } if ($vname -> class eq "Vector") { $outstr .= "&=&" . $vname->extract ($j+1). "\\"; } } $outstr . ' \end{array}'; }