[system] / trunk / pg / macros / PGmorematrixmacros.pl Repository:
ViewVC logotype

View of /trunk/pg/macros/PGmorematrixmacros.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1064 - (download) (as text) (annotate)
Mon Jun 9 00:34:51 2003 UTC (16 years, 8 months ago) by gage
File size: 2228 byte(s)
Adding recent macro files to the pg collection
--Mike

    1 #!/usr/local/bin/webwork-perl
    2 
    3 BEGIN{
    4   be_strict();
    5 }
    6 
    7 sub _PGmorematrixmacros_init{}
    8 
    9 sub random_inv_matrix { ## Builds and returns a random invertible \$row by \$col matrix.
   10 
   11     warn "Usage: \$new_matrix = random_inv_matrix(\$rows,\$cols)"
   12       if (@_ != 2);
   13     my $A = new Matrix($_[0],$_[1]);
   14     my $A_lr = new Matrix($_[0],$_[1]);
   15     my $det = 0;
   16     my $safety=0;
   17     while ($det == 0 and $safety < 6) {
   18         foreach my $i (1..$_[0]) {
   19             foreach my $j (1..$_[1]) {
   20                 $A->assign($i,$j,random(-9,9,1) );
   21                 }
   22             }
   23             $A_lr = $A->decompose_LR();
   24             $det = $A_lr->det_LR();
   25         }
   26     return $A;
   27 }
   28 
   29 sub swap_rows{
   30 
   31     warn "Usage: \$new_matrix = swap_rows(\$matrix,\$row1,\$row2);"
   32       if (@_ != 3);
   33     my $matrix = $_[0];
   34     my ($i,$j) = ($_[1],$_[2]);
   35     warn "Error:  Rows to be swapped must exist!"
   36       if ($i>@$matrix or $j >@$matrix);
   37     warn "Warning:  Swapping the same row is pointless"
   38       if ($i==$j);
   39     my $cols = @{$matrix->[0]};
   40     my $B = new Matrix(@$matrix,$cols);
   41     foreach my $k (1..$cols){
   42         $B->assign($i,$k,element $matrix($j,$k));
   43         $B->assign($j,$k,element $matrix($i,$k));
   44     }
   45     return $B;
   46 }
   47 
   48 sub row_mult{
   49 
   50     warn "Usage: \$new_matrix = row_mult(\$matrix,\$scalar,\$row);"
   51       if (@_ != 3);
   52     my $matrix = $_[0];
   53     my ($scalar,$row) = ($_[1],$_[2]);
   54     warn "Undefined row multiplication"
   55       if ($row > @$matrix);
   56     my $B = new Matrix(@$matrix,@{$matrix->[0]});
   57     foreach my $j (1..@{$matrix->[0]}) {
   58         $B->assign($row,$j,$scalar*element $matrix($row,$j));
   59     }
   60     return $B;
   61 }
   62 
   63 sub linear_combo{
   64 
   65     warn "Usage: \$new_matrix = linear_combo(\$matrix,\$scalar,\$row1,\$row2);"
   66       if (@_ != 4);
   67     my $matrix = $_[0];
   68     my ($scalar,$row1,$row2) = ($_[1],$_[2],$_[3]);
   69     warn "Undefined row in multiplication"
   70       if ($row1>@$matrix or $row2>@$matrix);
   71     warn "Warning:  Using the same row"
   72       if ($row1==$row2);
   73     my $B = new Matrix(@$matrix,@{$matrix->[0]});
   74     foreach my $j (1..@$matrix) {
   75         my ($t1,$t2) = (element $matrix($row1,$j),element $matrix($row2,$j));
   76         $B->assign($row2,$j,$scalar*$t1+$t2);
   77     }
   78     return $B;
   79 }
   80 
   81 
   82 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9