annotate lib/Matrix.pm @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: Matrix.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:17 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.16 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use Vector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37 @ISA = qw(Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 @EXPORT = qw(IsMatrix IdentityMatrix NewFromRows NewFromColumns NewFromDiagonal UnitMatrix ZeroMatrix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 @EXPORT_OK = qw(SetValuePrintFormat);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41 %EXPORT_TAGS = (
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 all => [@EXPORT, @EXPORT_OK]
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43 );
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 my($ClassName, $ValueFormat, $MatrixPrintStyle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50 # Using the following explicity overloaded operators, Perl automatically generates methods
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51 # for operations with no explicitly defined methods. Autogenerated methods are possible for
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 # these operators:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54 # o Arithmetic operators: += -= *= /= **= %= ++ -- x= .=
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 # o Increment and decrement: ++ --
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 # 'fallback' is set to 'false' to raise exception for all other operators.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59 use overload '""' => 'StringifyMatrix',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61 '@{}' => '_MatrixToArrayOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 '+' => '_MatrixAdditionOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64 '-' => '_MatrixSubtractionOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65 '*' => '_MatrixMultiplicationOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 '/' => '_MatrixDivisionOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 '**' => '_MatrixExponentiationOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68 '%' => '_MatrixModulusOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 'bool' => '_MatrixBooleanOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71 '!' => '_MatrixNotBooleanOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 '==' => '_MatrixEqualOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74 '!=' => '_MatrixNotEqualOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75 '<' => '_MatrixLessThanOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 '<=' => '_MatrixLessThanEqualOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 '>' => '_MatrixGreatarThanOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78 '>=' => '_MatrixGreatarThanEqualOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80 'neg' => '_MatrixNegativeValueOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 'abs' => '_MatrixAbsoluteValueOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 'exp' => '_MatrixExpNaturalBaseOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 'log' => '_MatrixLogNaturalBaseOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 'sqrt' => '_MatrixSquareRootOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 'cos' => '_MatrixCosineOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 'sin' => '_MatrixSineOperator',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 'fallback' => undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 my($Class, $NumOfRows, $NumOfCols) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 my $This = {};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 $This->_InitializeMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 # Initialize object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 sub _InitializeMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106 my($This, $NumOfRows, $NumOfCols) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 if (!(defined($NumOfRows) && defined($NumOfCols))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 croak "Error: ${ClassName}->_InitializeMatrix: NumOfRows and NumOfCols must be specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 if (!(($NumOfRows > 0) && ($NumOfRows > 0))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112 croak "Error: ${ClassName}->_InitializeMatrix: NumOfRows and NumOfCols must be a positive number...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 # Initialize matrix elements to zero...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 @{$This->{Values}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 my($RowIndex, @EmptyRow);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 @EmptyRow = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 @EmptyRow = ('0') x $NumOfCols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 @{$This->{Values}[$RowIndex]} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 @{$This->{Values}[$RowIndex]} = @EmptyRow;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 # Print style for matrix rows during StringifyMatrix operation.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 # Possible values: AllRowsInOneLine, OneRowPerLine
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 $MatrixPrintStyle = "AllRowsInOneLine";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 # Print format for matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 $ValueFormat = "%g";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 # Get matrix size...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 sub GetSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 return ($This->GetNumOfRows(), $This->GetNumOfColumns());
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 # Get matrix dimensions...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 sub GetDimension {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 return $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 # Get number of rows in matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 sub GetNumOfRows {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 my($NumOfRows);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 # Size of row array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 $NumOfRows = $#{$This->{Values}} + 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 return $NumOfRows;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 # Get number of columns in matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 sub GetNumOfColumns {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 my($NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 # Size of column array for first row assuming sizes of columns are same...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 $NumOfCols = $#{$This->{Values}[0]} + 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 return $NumOfCols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 # Get reference to array holding matrix values in order to directly manipulate these values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 sub GetMatrixValuesReference {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 return \@{$This->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 # Copy matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 sub Copy {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $Matrix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 # Create a new matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 # Set matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 for $RowIndex (0 .. ($NumOfRows -1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 for $ColIndex (0 .. ($NumOfCols -1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 # Create a new matrix using rows specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210 # o List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 # o References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 # o List of strings containing row values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 # Each row must contain the same number of values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 # This functionality can be either invoked as a class function or an
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 # object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 sub NewFromRows {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 my($FirstParameter, @OtherParamaters) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 if (IsMatrix($FirstParameter)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 return _NewFromRowsOrColumns('FromRows', @OtherParamaters);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 return _NewFromRowsOrColumns('FromRows', @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 # Create a new matrix using columns specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231 # o List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 # o References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 # o List of strings containing columns values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 # Each columns must contain the same number of values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 # This functionality can be either invoked as a class function or an
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 # object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 sub NewFromColumns {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 my($FirstParameter, @OtherParamaters) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 if (IsMatrix($FirstParameter)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 return _NewFromRowsOrColumns('FromColumns', @OtherParamaters);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 return _NewFromRowsOrColumns('FromColumns', @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 # Create a new matrix using diagonal values specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 # o A vector object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 # o Reference to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 # o Strings containing diagonal values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256 # This functionality can be either invoked as a class function or an
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 # object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259 sub NewFromDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 my($FirstParameter, @OtherParamaters) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262 if (IsMatrix($FirstParameter)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 return _NewFromDiagonal(@OtherParamaters);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 return _NewFromDiagonal(@_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 # Create a new matrix using diagonal values specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 # o A vector object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 # o Reference to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 # o Strings containing diagonal values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 sub _NewFromDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 my(@SpecifiedDiagonalValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 my($ErrorMsgPrefix, $CheckSizes, $CombineValues, $ValuesRefs, $DiagonalValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 $ErrorMsgPrefix = "Error: ${ClassName}::_NewFromDiagonal";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 if (!@SpecifiedDiagonalValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 croak "$ErrorMsgPrefix: No diagonal values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 # Collect specified diagonal values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 $CheckSizes = 0; $CombineValues = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 $ValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedDiagonalValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287 $DiagonalValuesRef = $ValuesRefs->[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 # Create a new matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292 $NumOfRows = @{$DiagonalValuesRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 $NumOfCols = $NumOfRows;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 # Set diagonal values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 $Matrix->{Values}[$RowIndex][$RowIndex] = $DiagonalValuesRef->[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 # Create a new matrix using rows or columns specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 # o List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 # o References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 # o List of strings containing row values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 # Each row or column must contain the same number of values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 sub _NewFromRowsOrColumns {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 my($Mode, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 if ($Mode !~ /^(FromRows|FromColumns)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 croak "Error: ${ClassName}::_NewFromRowsOrColumns: Unknown mode: $Mode...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 my($ErrorMsgPrefix, $CheckSizes, $CombineValues, $ValuesRefs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 # Retrieve information about specified values and make sure similar number of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 # are specified for each row or column...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322 if ($Mode =~ /^FromRows$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 $ErrorMsgPrefix = "Error: ${ClassName}::_NewFromRows";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 $ErrorMsgPrefix = "Error: ${ClassName}::_NewFromColumns";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328 $CheckSizes = 1; $CombineValues = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 $ValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 # Create a new matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $RowMode, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 if ($Mode =~ /^FromRows$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 $NumOfRows = scalar @{$ValuesRefs};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 $NumOfCols = scalar @{$ValuesRefs->[0]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 $RowMode = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 elsif ($Mode =~ /^FromColumns$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 $NumOfRows = scalar @{$ValuesRefs->[0]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 $NumOfCols = scalar @{$ValuesRefs};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 $RowMode = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 # Setup matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 $Value = $RowMode ? $ValuesRefs->[$RowIndex]->[$ColIndex]: $ValuesRefs->[$ColIndex]->[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 $Matrix->{Values}[$RowIndex][$ColIndex] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 # Process specified matrix values in any of the following supported formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 # o List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 # o References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 # o List of strings containing row values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 # And return a reference to an array containing references to arrays with specified values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365 # Value of CombineValuesStatus determines whether all the values specified are combined
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 # into one array and return its reference as the only entry in the array being returned.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 sub _ProcessSpecifiedMatrixValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 my($ErrorMsgPrefix, $CheckSizesStatus, $CombineValuesStatus, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 my($Value, $TypeOfValue, @ValuesRefs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 @ValuesRefs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 if (!@SpecifiedValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 croak "$ErrorMsgPrefix: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 # Collect values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 for $Value (@SpecifiedValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 $TypeOfValue = ref $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 if (Vector::IsVector($Value)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 # Feference to vector object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 my($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384 $ValuesRef = $Value->GetValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 if (!@{$ValuesRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386 croak "$ErrorMsgPrefix: Specified vector object must contain some values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 push @ValuesRefs, $ValuesRef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 elsif ($TypeOfValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 # Refernece to an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 if (!@{$Value}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 croak "$ErrorMsgPrefix: Specified array reference must contain some values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 push @ValuesRefs, $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 elsif ($TypeOfValue eq '') {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 # String value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 my(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 @Values = split(' ', $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 croak "$ErrorMsgPrefix: Specified string must contain some values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 push @ValuesRefs, \@Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 croak "$ErrorMsgPrefix: Value format, $TypeOfValue, of a specified value to be added to matrix object is not supported...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 # Combine all specified values into one array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412 if ($CombineValuesStatus) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 my($ValuesRef, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416 for $ValuesRef (@ValuesRefs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 push @Values, @{$ValuesRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 @ValuesRefs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 push @ValuesRefs, \@Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423 # Make sure reference to all specified value arrays contain the same number of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 if ($CheckSizesStatus) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 my($Index, $FirstValueSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426 $FirstValueSize = $#{$ValuesRefs[0]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 for $Index (1 .. $#ValuesRefs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 if ($FirstValueSize != $#{$ValuesRefs[$Index]}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 croak "$ErrorMsgPrefix: Number of values in each specified value type to be added to matrix object must be same...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 return \@ValuesRefs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 # Create a new zero matrix of specified size or default size of 3 x 3.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 # This functionality can be either invoked as a class function or an
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 # object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 sub ZeroMatrix (;$$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 my($This, $NumOfRows, $NumOfCols, $Matrix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446 $This = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 if (defined($FirstParameter) && IsMatrix($FirstParameter)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448 ($This, $NumOfRows, $NumOfCols) = ($FirstParameter, $SecondParameter, $ThirdParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 ($This, $NumOfRows, $NumOfCols) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 ($NumOfRows, $NumOfCols) = (defined($NumOfRows) && defined($NumOfCols)) ? ($NumOfRows, $NumOfCols) : (3, 3);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 # Set up a new zero matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 # Create a new unit matrix of specified size or default size of 3 x 3.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 # This functionality can be either invoked as a class function or an
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 # object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 sub UnitMatrix (;$$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 my($This, $NumOfRows, $NumOfCols, $Matrix, $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 $This = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 if (defined($FirstParameter) && IsMatrix($FirstParameter)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 ($This, $NumOfRows, $NumOfCols) = ($FirstParameter, $SecondParameter, $ThirdParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 ($This, $NumOfRows, $NumOfCols) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 ($NumOfRows, $NumOfCols) = (defined($NumOfRows) && defined($NumOfCols)) ? ($NumOfRows, $NumOfCols) : (3, 3);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 # Set up a new zero matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 if ($NumOfRows != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483 carp "Warning: ${ClassName}::UnitMatrix: Specified matrix, $NumOfRows x $NumOfCols, is not a square matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 # Initialize diagonal elements to 1...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 $Matrix->{Values}[$RowIndex][$RowIndex] = 1.0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 # Identity matrix of specified size or size 3 x 3...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 sub IdentityMatrix (;$$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 return UnitMatrix($FirstParameter, $SecondParameter, $ThirdParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502 # Set all matrix values to 0s...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 sub Zero {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 return $This->SetAllValues(0.0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 # Set all matrix values to 1s...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 sub One {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515 return $This->SetAllValues(1.0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 # Get a matrix value with row and column indicies starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 sub GetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521 my($This, $RowIndex, $ColIndex, $SkipIndexCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 if ($SkipIndexCheck) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 $This->_GetValue($RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 $This->_ValidateRowAndColumnIndicies("Error: ${ClassName}::GetValue", $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 return $This->_GetValue($RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 # Get a matrix value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 sub _GetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 my($This, $RowIndex, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537 return $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 # Set a matrix value with row and column indicies starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 sub SetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 my($This, $RowIndex, $ColIndex, $Value, $SkipIndexCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 if ($SkipIndexCheck) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 $This->_SetValue($RowIndex, $ColIndex, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 $This->_ValidateRowAndColumnIndicies("Error: ${ClassName}::SetValue", $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551 return $This->_SetValue($RowIndex, $ColIndex, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 # Set a matrix value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 sub _SetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 my($This, $RowIndex, $ColIndex, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 $This->{Values}[$RowIndex][$ColIndex] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 # Set all matrix values to a specified value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 sub SetAllValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 $This->{Values}[$RowIndex][$ColIndex] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 # Set values of a row in a matrix value with row index starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 sub SetRowValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 my($This, $RowIndex, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 my($NumOfRows, $NumOfCols, $ColIndex, $ErrorMsgPrefix, $CheckSizes, $CombineValues, $ValuesRefs, $RowValuesRef, $NumOfRowValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 $ErrorMsgPrefix = "Error: ${ClassName}->SetRowValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 $This->_ValidateRowIndex($ErrorMsgPrefix, $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 # Collect specified row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 $CheckSizes = 0; $CombineValues = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 $ValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 $RowValuesRef = $ValuesRefs->[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 # Check number of specified row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 $NumOfRowValues = @{$RowValuesRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 if ($NumOfRowValues != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 croak "$ErrorMsgPrefix: Number of specified row values, $NumOfRowValues, must be equal to number of row values, $NumOfCols, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 # Set row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 for $ColIndex (0 .. ($NumOfRowValues - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 $This->{Values}[$RowIndex][$ColIndex] = $RowValuesRef->[$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 # Add new row values to a matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610 sub AddRowValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 my($This, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 my($NumOfRows, $NumOfCols, $RowIndex, $ErrorMsgPrefix, $CheckSizes, $CombineValues, $RowValueRef, $RowValuesRefs, $NumOfNewRows, $NumOfNewCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 $ErrorMsgPrefix = "Error: ${ClassName}->AddRowValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 # Collect specified row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 $CheckSizes = 1; $CombineValues = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 $RowValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622 # Check number of specified row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 $NumOfNewRows = scalar @{$RowValuesRefs};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 $NumOfNewCols = scalar @{$RowValuesRefs->[0]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 if ($NumOfNewCols != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 croak "$ErrorMsgPrefix: Number of values in each specified row, $NumOfNewCols, must be equal to number of row values, $NumOfCols, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 # Add each row to the matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 $RowIndex = $NumOfRows - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 for $RowValueRef (@{$RowValuesRefs}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 $RowIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 @{$This->{Values}[$RowIndex]} = @{$RowValueRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640 # Get values of a row in matrix as an array. In scalar context, number of row
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 # values is returned...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643 sub GetRowValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 my($This, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 return $This->_GetRowOrColumnValues('AsArray', 'FromRow', $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 # Get values of a row in matrix as a vector object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 sub GetRowValuesAsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652 my($This, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654 return $This->_GetRowOrColumnValues('AsVector', 'FromRow', $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657 # Get values of a row as row matrix object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 sub GetRowValuesAsRowMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 my($This, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 return $This->_GetRowOrColumnValues('AsRowMatrix', 'FromRow', $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 # Get values of a row as column matrix object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 sub GetRowValuesAsColumnMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668 my($This, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 return $This->_GetRowOrColumnValues('AsColumnMatrix', 'FromRow', $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 # Get values of a row in matrix as a space delimited string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675 sub GetRowValuesAsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 my($This, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678 return $This->_GetRowOrColumnValues('AsString', 'FromRow', $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 # Set values of a column in a matrix value with row index starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 sub SetColumnValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 my($This, $ColIndex, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 my($NumOfRows, $NumOfCols, $RowIndex, $ErrorMsgPrefix, $CheckSizes, $CombineValues, $ValuesRefs, $ColValuesRef, $NumOfColValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 $ErrorMsgPrefix = "Error: ${ClassName}->SetColumnValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 $This->_ValidateColumnIndex($ErrorMsgPrefix, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692 # Collect specified row values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 $CheckSizes = 0; $CombineValues = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 $ValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 $ColValuesRef = $ValuesRefs->[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 # Check number of specified col values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698 $NumOfColValues = @{$ColValuesRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 if ($NumOfColValues != $NumOfRows) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700 croak "$ErrorMsgPrefix: Number of specified col values, $NumOfColValues, must be equal to number of column values, $NumOfRows, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 # Set col values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 for $RowIndex (0 .. ($NumOfColValues - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 $This->{Values}[$RowIndex][$ColIndex] = $ColValuesRef->[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 # Add new column values to a matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712 sub AddColumnValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 my($This, @SpecifiedValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $ErrorMsgPrefix, $CheckSizes, $CombineValues, $ColValueRef, $ColValuesRefs, $NumOfNewRows, $NumOfNewCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 $ErrorMsgPrefix = "Error: ${ClassName}->AddColumnValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720 # Collect specified column values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 $CheckSizes = 1; $CombineValues = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 $ColValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 # Check number of specified column values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 $NumOfNewCols = scalar @{$ColValuesRefs};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726 $NumOfNewRows = scalar @{$ColValuesRefs->[0]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 if ($NumOfNewRows != $NumOfRows) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 croak "$ErrorMsgPrefix: Number of values in each specified column, $NumOfNewRows, must be equal to number of column values, $NumOfRows, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 # Add each column to the matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 $ColIndex = $NumOfCols - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 for $ColValueRef (@{$ColValuesRefs}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735 $ColIndex++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736 for $RowIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 $This->{Values}[$RowIndex][$ColIndex] = $ColValueRef->[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 # Get values of a column in matrix as an array. In scalar context, number of column
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 # values is returned...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 sub GetColumnValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 my($This, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 return $This->_GetRowOrColumnValues('AsArray', 'FromColumn', $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 # Get values of a column in matrix as a vector object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755 sub GetColumnValuesAsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 my($This, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 return $This->_GetRowOrColumnValues('AsVector', 'FromColumn', $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 # Get values of a column as row matrix object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763 sub GetColumnValuesAsRowMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 my($This, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766 return $This->_GetRowOrColumnValues('AsRowMatrix', 'FromColumn', $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769 # Get values of a column as column matrix object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 sub GetColumnValuesAsColumnMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 my($This, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 return $This->_GetRowOrColumnValues('AsColumnMatrix', 'FromColumn', $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # Get values of a column in matrix as a space delimited string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779 sub GetColumnValuesAsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 my($This, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782 return $This->_GetRowOrColumnValues('AsString', 'FromColumn', $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785 # Get row or column values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 sub _GetRowOrColumnValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 my($This, $Mode, $ValueMode, $ValueModeIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 if ($Mode !~ /^(AsArray|AsVector|AsRowMatrix|AsColumnMatrix|AsString)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 croak "Error: ${ClassName}->_GetRowOrColumnValues: Unknown mode, $Mode, specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 if ($ValueMode !~ /^(FromRow|FromColumn)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794 croak "Error: ${ClassName}->_GetRowOrColumnValues: Unknown value mode, $ValueMode, specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797 # Setup error message prefix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 my($ErrorMsgPrefix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 $ErrorMsgPrefix = "${ClassName}->_GetRowOrColumnValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801 if ($ValueMode =~ /^FromRow$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 $ErrorMsgPrefix = "Error: ${ClassName}->GetRowValues${Mode}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804 elsif ($ValueMode =~ /^FromColumn$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 $ErrorMsgPrefix = "Error: ${ClassName}->GetColumnValues${Mode}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 # Validate specified index and collect values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 if ($ValueMode =~ /^FromRow$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815 $RowIndex = $ValueModeIndex;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 $This->_ValidateRowIndex($ErrorMsgPrefix, $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 push @Values, $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822 elsif ($ValueMode =~ /^FromColumn$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 $ColIndex = $ValueModeIndex;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824 $This->_ValidateColumnIndex($ErrorMsgPrefix, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 push @Values, $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 # Return values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 if ($Mode =~ /^AsRowMatrix$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 return NewFromRows(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 elsif ($Mode =~ /^AsColumnMatrix$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836 return NewFromColumns(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 elsif ($Mode =~ /^AsVector$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839 return new Vector(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 elsif ($Mode =~ /^AsString$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 return join(' ', @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 return wantarray ? @Values : scalar @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849 # Set values of the diagonal in a square matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 sub SetDiagonalValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 my($This, @SpecifiedDiagonalValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 my($ErrorMsgPrefix, $NumOfRows, $NumOfCols, $RowIndex, $CheckSizes, $CombineValues, $ValuesRefs, $NumOfDiagonalValues, $DiagonalValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855 $ErrorMsgPrefix = "Error: ${ClassName}->SetDiagonalValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 if (!@SpecifiedDiagonalValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857 croak "$ErrorMsgPrefix: No diagonal values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 if ($NumOfRows != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 croak "Error: $ErrorMsgPrefix: Specified matrix, $NumOfRows x $NumOfCols, is not a square matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865 # Collect specified diagonal values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 $CheckSizes = 0; $CombineValues = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867 $ValuesRefs = _ProcessSpecifiedMatrixValues($ErrorMsgPrefix, $CheckSizes, $CombineValues, @SpecifiedDiagonalValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 $DiagonalValuesRef = $ValuesRefs->[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869 $NumOfDiagonalValues = @{$DiagonalValuesRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871 if ($NumOfDiagonalValues != $NumOfRows) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 croak "Error: $ErrorMsgPrefix: Number of specified diagonal values, $NumOfDiagonalValues, must be equal to number of rows, $NumOfRows, in square matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 # Set diagonal values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877 $This->{Values}[$RowIndex][$RowIndex] = $DiagonalValuesRef->[$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 # Get values of the diagonal in a square matrix as an array. In scalar context, number of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 # diagonal values is returned...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 sub GetDiagonalValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889 return $This->_GetDiagonalValues('AsArray');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 # Get values of the diagonal in a square matrix as vector object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 sub GetDiagonalValuesAsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 return $This->_GetDiagonalValues('AsVector');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900 # Get values of the diagonal in a square matrix as row matrix object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 sub GetDiagonalValuesAsRowMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 return $This->_GetDiagonalValues('AsRowMatrix');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 # Get values of the diagonal in a square matrix as column matrix object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 sub GetDiagonalValuesAsColumnMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913 return $This->_GetDiagonalValues('AsColumnMatrix');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916 # Get values of the diagonal in a square matrix as a space delimited string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 sub GetDiagonalValuesAsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921 return $This->_GetDiagonalValues('AsString');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924 # Get diagonal values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 sub _GetDiagonalValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 my($This, $Mode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 if ($Mode !~ /^(AsArray|AsVector|AsRowMatrix|AsColumnMatrix|AsString)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929 croak "Error: ${ClassName}->_GetDiagonalValues: Unknown mode, $Mode, specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 # Make sure it's a square matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933 my($NumOfRows, $NumOfCols, $ErrorMsgPrefix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935 $ErrorMsgPrefix = "${ClassName}->_GetDiagonalValues${Mode}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937 if ($NumOfRows != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 croak "Error: $ErrorMsgPrefix: Specified matrix, $NumOfRows x $NumOfCols, is not a square matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941 # Collect values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942 my($RowIndex, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 push @Values, $This->{Values}[$RowIndex][$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 # Return values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950 if ($Mode =~ /^AsRowMatrix$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951 return NewFromRows(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953 elsif ($Mode =~ /^AsColumnMatrix$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954 return NewFromColumns(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 elsif ($Mode =~ /^AsVector$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957 return new Vector(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959 elsif ($Mode =~ /^AsString$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960 return join(' ', @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963 return wantarray ? @Values : scalar @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967 # Is it a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 sub IsSquare {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 my($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 return ($NumOfRows == $NumOfCols) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976 # Is it a unit matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978 # A matrix is a unit matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 # o All its diagonal elements are ones and its off-diagonal elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982 sub IsUnit {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $ExpectedValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 $ExpectedValue = ($RowIndex == $ColIndex) ? 1.0 : 0.0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 if ($This->{Values}[$RowIndex][$ColIndex] != $ExpectedValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005 # Is it an identity matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007 sub IsIdentity {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 return $This->IsUnit();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 # Is it a diagonal matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015 # A matrix is a diagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 # o All its off-diagonal elements are zeros and its diagonal elements may or may not
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018 # be zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021 sub IsDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 # Check off-diagonal matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034 COLINDEX: for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035 if ($RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 next COLINDEX;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 if ($This->{Values}[$RowIndex][$ColIndex] != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046 # Is it a lower bidiagonal matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048 # A matrix is a lower bidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050 # o All its main diagonal and lower diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051 # other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 sub IsLowerBiDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 $Value = $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 if ($RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 # Main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074 elsif ($RowIndex == ($ColIndex + 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075 # Lower diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081 # Other elements...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 if ($Value != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091 # Is it an upper bidiagonal matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093 # A matrix is an upper bidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 # o All its main diagonal and upper diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096 # other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098 sub IsUpperBiDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111 $Value = $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112 if ($RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113 # Main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118 elsif ($RowIndex == ($ColIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119 # Upper diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125 # Other elements...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126 if ($Value != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135 # Is it a bidiagonal matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137 # A matrix is a bidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 sub IsBiDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142 return ($This->IsUpperBiDiagonal() || $This->IsLowerBiDiagonal()) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145 # Is it a tridiagonal matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147 # A matrix is a tribidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149 # o All its main diagonal, upper diagonal, and lower diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 # other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153 sub IsTriDiagonal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167 $Value = $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168 if ($RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169 # Main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174 elsif ($RowIndex == ($ColIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175 # Upper diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180 elsif ($RowIndex == ($ColIndex + 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181 # Lower diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182 if ($Value == 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187 # Other elements...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188 if ($Value != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197 # Is it a lower triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199 # A matrix is a lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201 # o All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 sub IsLowerTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206 return $This->_IsLowerTriangularMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209 # Is it a left triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211 # A matrix is a left triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213 # o All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 sub IsLeftTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218 return $This->IsLowerTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221 # Is it a strictly lower triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223 # A matrix is a strictly lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225 # o All its entries on and above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227 sub IsStrictlyLowerTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229 my($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231 $DiagonalValue = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233 return $This->_IsLowerTriangularMatrix($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236 # Is it an unit lower triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238 # A matrix is an unit lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240 # o All its entries main diagonal are one
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241 # o All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243 sub IsUnitLowerTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245 my($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247 $DiagonalValue = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249 return $This->_IsLowerTriangularMatrix($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252 # Is it a lower unitriangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254 sub IsLowerUniTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 return $This->IsUnitLowerTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260 # Is it a lower triangular, strictly lower triangular, or unit lower triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262 sub _IsLowerTriangularMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263 my($This, $DiagonalValue) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $CheckDiagonalValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272 $CheckDiagonalValues = defined($DiagonalValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277 if ($CheckDiagonalValues && $RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278 # Main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279 if ($This->{Values}[$RowIndex][$ColIndex] != $DiagonalValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283 elsif ($RowIndex < $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 # Elemens above the main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285 if ($This->{Values}[$RowIndex][$ColIndex] != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 # Is it an upper triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 # A matrix is an upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 # o All its entries below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 sub IsUpperTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303 return $This->_IsUpperTriangularMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 # Is it a right triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308 # A matrix is a right triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 # o All its entries below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312 sub IsRightTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315 return $This->IsUpperTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 # Is it a strictly upper triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1319 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320 # A matrix is a strictly upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322 # o All its entries on and below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 sub IsStrictlyUpperTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326 my($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328 $DiagonalValue = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330 return $This->_IsUpperTriangularMatrix($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333 # Is it a unit upper triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335 # A matrix is an unit upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337 # o All its entries main diagonal are one
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338 # o All its entries below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 sub IsUnitUpperTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342 my($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344 $DiagonalValue = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346 return $This->_IsUpperTriangularMatrix($DiagonalValue);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349 # Is it a upper unitriangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351 sub IsUpperUniTriangular {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354 return $This->IsUnitUpperTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357 # Is it an upper triangular, strictly upper triangular, or unit upper triangular matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 sub _IsUpperTriangularMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360 my($This, $DiagonalValue) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex, $CheckDiagonalValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369 $CheckDiagonalValues = defined($DiagonalValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 if ($CheckDiagonalValues && $RowIndex == $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375 # Main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 if ($This->{Values}[$RowIndex][$ColIndex] != $DiagonalValue) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380 elsif ($RowIndex > $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381 # Elemens below the main diagonal...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 if ($This->{Values}[$RowIndex][$ColIndex] != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391 # Is it a symmetrix matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393 # A matrix is a symmetric matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395 # o Its elements are symmetric with respect to main diagonal. In other words,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396 # elements below the main diagonal are equal to the elements above the main
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397 # diagonal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 # Transpose of a symmetric matrix equals the matrix itself.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 sub IsSymmetric {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413 for $ColIndex (0 .. ($RowIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414 if ($This->{Values}[$RowIndex][$ColIndex] != $This->{Values}[$ColIndex][$RowIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422 # Is it a anti symmetrix matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424 # A matrix is an anti symmetric matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 # o It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426 # o Its elements are asymmetric with respect to main diagonal. In other words,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427 # elements below the main diagonal are equal to the negative of elements above
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 # the main diagonal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1429 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1430 # Transpose of a anti symmetric matrix equals the negative of the matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1431 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1432 sub IsAntiSymmetric {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1433 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1434
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1435 # Is is a square matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1436 if (!$This->IsSquare()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1437 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1438 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1439
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1440 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1441 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1442
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1443 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1444 for $ColIndex (0 .. ($RowIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1445 if ($This->{Values}[$RowIndex][$ColIndex] != -$This->{Values}[$ColIndex][$RowIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1446 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1447 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1448 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1450 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1451 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1452
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1453 # Is it a skew symmetrix matrix?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1454 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1455 # It's another name for AnitSymmetricMatrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1456 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1457 sub IsSkewSymmetric {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1458 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1460 return $This->IsAntiSymmetric();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1461 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1463 # Is it a positive matrix with all its values >= zero?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1464 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1465 sub IsPositive {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1466 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1467
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1468 # Check matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1469 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1470 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1472 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1473 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1474 if ($This->{Values}[$RowIndex][$ColIndex] < 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1475 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1476 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1477 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1478 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1479 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1480 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1482 # Is it a positive matrix with all its values <= zero?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1483 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1484 sub IsNegative {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1485 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1487 return $This->IsPositive() ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1488 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1489
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1490 # Transpose the matrix by swaping rows with columns...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1491 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1492 sub Transpose {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1493 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1494 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1496 # Create the transpose matrix of size $NumOfCols x $NumOfRows
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1497 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1498 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1499 $Matrix = new Matrix($NumOfCols, $NumOfRows);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1500
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1501 # Swap rows and columns...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1502 for $RowIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1503 for $ColIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1504 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$ColIndex][$RowIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1505 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1506 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1507 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1508 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1510 # Is it a matrix object?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1511 sub IsMatrix ($) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1512 my($Object) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1513
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1514 return _IsMatrix($Object);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1515 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1516
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1517 # Set value print format for an individual object or the whole class during StringifyMatrix operation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1518 sub SetValuePrintFormat ($;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1519 my($FirstParameter, $SecondParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1521 if ((@_ == 2) && (_IsMatrix($FirstParameter))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1522 # Set value print format for the specific object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1523 my($This, $ValuePrintFormat) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1525 $This->{ValueFormat} = $ValuePrintFormat;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1526 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1527 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1528 # Set value print format for the class...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1529 my($ValuePrintFormat) = ($FirstParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1531 $ValueFormat = $ValuePrintFormat;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1532 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1533 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1534
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1535 # Set print style for matrix rows for an individual object or the whole class during StringifyMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1536 # operation.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1537 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1538 # Possible values: AllRowsInOneLine, OneRowPerLine. Default: AllRowsInOneLine
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1539 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1540 sub SetMatrixPrintStyle ($;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1541 my($FirstParameter, $SecondParameter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1542
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1543 if ((@_ == 2) && (_IsMatrix($FirstParameter))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1544 # Set value print format for the specific object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1545 my($This, $MatrixPrintStyleValue) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1546
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1547 if ($MatrixPrintStyleValue !~ /^(AllRowsInOneLine|OneRowPerLine)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1548 croak "Error: ${ClassName}->SetMatrixPrintStyle: Specified MatrixPrintStyle, $MatrixPrintStyleValue, is not valid. Supported values: AllRowsInOneLine, OneRowPerLine...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1549 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1550
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1551 $This->{MatrixPrintStyle} = $MatrixPrintStyleValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1552 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1553 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1554 # Set value print format for the class...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1555 my($MatrixPrintStyleValue) = ($FirstParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1556
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1557 if ($MatrixPrintStyleValue !~ /^(AllRowsInOneLine|OneRowPerLine)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1558 croak "Error: ${ClassName}::SetMatrixPrintStyle: Specified MatrixPrintStyle, $MatrixPrintStyleValue, is not valid. Supported values: AllRowsInOneLine, OneRowPerLine...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1559 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1560
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1561 $MatrixPrintStyle = $MatrixPrintStyleValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1562 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1563 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1564
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1565 # Is it a matrix object?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1566 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1567 sub _IsMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1568 my($Object) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1570 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1571 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1572
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1573 # Make sure it's a matrix reference...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1574 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1575 sub _ValidateMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1576 my($ErrorMsg, $Matrix) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1577
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1578 if (!_IsMatrix($Matrix)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1579 croak "Error: ${ClassName}->${ErrorMsg}: Object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1580 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1581 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1582
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1583 # Make sure both row and column indicies are valid...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1584 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1585 sub _ValidateRowAndColumnIndicies {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1586 my($This, $ErrorMsgPrefix, $RowIndex, $ColumnIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1587
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1588 $This->_ValidateRowIndex($ErrorMsgPrefix, $RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1589 $This->_ValidateColumnIndex($ErrorMsgPrefix, $ColumnIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1590
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1591 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1592 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1593
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1594 # Make sure it's a valid row index...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1595 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1596 sub _ValidateRowIndex {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1597 my($This, $ErrorMsgPrefix, $RowIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1598 my($NumOfRows);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1599
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1600 if (!defined $RowIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1601 croak "$ErrorMsgPrefix: RowIndex must be defined...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1602 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1603 $NumOfRows = $This->GetNumOfRows();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1604 if ($RowIndex < 0 || $RowIndex >= $NumOfRows) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1605 croak "$ErrorMsgPrefix: RowIndex value $RowIndex must be >= 0 and < $NumOfRows, NumOfRows, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1606 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1607 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1608 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1610 # Make sure it's a valid column index...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1611 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1612 sub _ValidateColumnIndex {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1613 my($This, $ErrorMsgPrefix, $ColIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1614 my($NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1615
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1616 if (!defined $ColIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1617 croak "$ErrorMsgPrefix: ColIndex must be defined...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1618 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1619 $NumOfCols = $This->GetNumOfColumns();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1620 if ($ColIndex < 0 || $ColIndex >= $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1621 croak "$ErrorMsgPrefix: ColIndex value $ColIndex must be >= 0 and < $NumOfCols, NumOfCols, in matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1622 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1623 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1624 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1626 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1627 # Matrix addition operator supports two addition modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1628 # . Addition of two matrices by adding corresponding matrix values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1629 # . Addition of a scalar value to matrix values ($Matrix + 1)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1630 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1631 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1632 # . Addition of a matrix to scalar is not allowed (1 + $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1633 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1634 sub _MatrixAdditionOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1635 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1637 $ErrorMsg = "_MatrixAdditionOperator: Matrix addition failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1638 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1639
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1640 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1641
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1642 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1643 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1644
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1645 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1646 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1647 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1648 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1649 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] + $Other->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1650 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1651 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1652 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1653 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1654 # Scalar addition...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1655 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1656 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1657 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1658 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1659 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1660 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] + $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1661 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1662 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1664 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1665 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1666
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1667 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1668 # Matrix subtraction operator supports two subtraction modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1669 # . Subtraction of two matrices by subtracting corresponding matrix values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1670 # . Subtraction of a scalar value from matrix values ($Matrix - 1)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1671 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1672 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1673 # . Subtraction of a matrix from scalar is not allowed (1 - $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1674 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1675 sub _MatrixSubtractionOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1676 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1677
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1678 $ErrorMsg = "_MatrixSubtractionOperator: Matrix subtraction failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1679 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1681 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1683 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1684 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1685
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1686 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1687 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1688 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1689 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1690 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] - $Other->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1691 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1692 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1693 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1694 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1695 # Scalar subtraction...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1696 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1697 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1698 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1699 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1700 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1701 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] - $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1702 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1703 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1704 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1705 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1706 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1707
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1708 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1709 # Matrix multiplication operator supports two multiplication modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1710 # . Multiplication of two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1711 # . Multiplication of matrix values by a scalar ($Matrix * 1)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1712 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1713 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1714 # . Multiplication of a scalar by a is not allowed (1 * $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1715 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1716 sub _MatrixMultiplicationOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1717 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg, $CheckSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1718
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1719 $ErrorMsg = "_MatrixMultiplicationOperator: Matrix multiplication failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1720 $CheckSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1721 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1722
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1723 my($Matrix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1724
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1725 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1726 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1727 my($NumOfRows1, $NumOfCols1, $RowIndex1, $ColIndex1, $NumOfRows2, $NumOfCols2, $ColIndex2, $Value, $RowColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1728
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1729 ($NumOfRows1, $NumOfCols1) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1730 ($NumOfRows2, $NumOfCols2) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1731
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1732 if ($NumOfCols1 != $NumOfRows2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1733 croak "Error: ${ClassName}->${ErrorMsg}: NumOfCols in first matrix of size $NumOfRows1 x $NumOfCols1 must be equal to NumOfRows in second matrix of size $NumOfRows2 x $NumOfCols2...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1734 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1735
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1736 $Matrix = new Matrix($NumOfRows1, $NumOfCols2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1737
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1738 for $RowIndex1 (0 .. ($NumOfRows1 - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1739 for $ColIndex2 (0 .. ($NumOfCols2 - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1740 $Value = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1741 for $RowColIndex (0 .. ($NumOfCols1 - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1742 $Value += $This->{Values}[$RowIndex1][$RowColIndex] * $Other->[$RowColIndex][$ColIndex2];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1743 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1744 $Matrix->{Values}[$RowIndex1][$ColIndex2] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1745 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1746 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1747 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1748 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1749 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1750
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1751 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1752 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1753 # Scalar subtraction...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1754 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1755 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1756 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1757 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1758 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1759 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] * $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1760 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1761 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1762 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1763 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1764 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1766 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1767 # Matrix division operator supports two division modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1768 # . Division of two matrices by dividing corresponding matrix values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1769 # . Division matrix values by a scalar($Matrix/2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1770 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1771 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1772 # . Division of scalar value by a matrix is not allowed (2/$Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1773 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1774 sub _MatrixDivisionOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1775 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1777 $ErrorMsg = "_MatrixDivisionOperator: Matrix division failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1778 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1780 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1781
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1782 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1783 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1784
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1785 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1786 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1787 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1788 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1789 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] / $Other->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1790 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1791 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1792 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1793 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1794 # Scalar subtraction...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1795 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1796 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1797 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1798 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1799 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1800 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] / $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1801 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1802 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1803 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1804 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1805 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1806
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1807 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1808 # Matrix exponentiation operator supports two division modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1809 # . Exponent of two matrices by exponentiation of corresponding matrix values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1810 # . Exponentiation matrix values by a scalar ($Matrix ** 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1811 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1812 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1813 # . Exponentiation of scalar value by a matrix is not allowed (2 ** $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1814 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1815 sub _MatrixExponentiationOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1816 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1817
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1818 $ErrorMsg = "_MatrixExponentiationOperator: Matrix exponentiation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1819 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1821 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1823 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1824 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1826 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1827 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1828 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1829 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1830 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] ** $Other->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1831 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1832 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1833 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1834 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1835 # Scalar subtraction...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1836 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1837 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1838 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1839 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1840 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1841 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] ** $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1842 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1843 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1844 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1845 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1846 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1847
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1848 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1849 # Matrix modulus operator supports two division modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1850 # . Modulus of two matrices by taking modulus between corresponding matrix values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1851 # . Modulus of matrix values by a scalar ($Matrix % 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1852 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1853 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1854 # . Modulus of scalar value by a matrix is not allowed (2 % $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1855 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1856 sub _MatrixModulusOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1857 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1858
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1859 $ErrorMsg = "_MatrixModulusOperator: Matrix modulus failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1860 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1861
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1862 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1863
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1864 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1865 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1866
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1867 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1868 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1869 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1870 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1871 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] % $Other->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1872 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1873 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1874 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1875 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1876 # Scalar subtraction...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1877 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1878 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1879 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1880 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1881 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1882 $Matrix->{Values}[$RowIndex][$ColIndex] = $This->{Values}[$RowIndex][$ColIndex] % $Other;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1883 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1884 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1885 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1886 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1887 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1888
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1889 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1890 # Matrix booelan operator checks whether a matrix contains at least one non-zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1891 # value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1892 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1893 sub _MatrixBooleanOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1894 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1895
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1896 $ErrorMsg = "_MatrixBooleanOperator: Matrix boolean operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1897 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1898
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1899 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1901 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1902 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1903 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1904 if ($This->{Values}[$RowIndex][$ColIndex] != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1905 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1906 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1907 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1908 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1909 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1910 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1911
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1912 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1913 # Matrix not booelan operator checks whether a matrix contains only zero values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1914 # value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1915 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1916 sub _MatrixNotBooleanOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1917 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1918
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1919 $ErrorMsg = "_MatrixNotBooleanOperator: Matrix not boolean operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1920 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1921
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1922 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1923
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1924 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1925 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1926 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1927 if ($This->{Values}[$RowIndex][$ColIndex] != 0.0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1928 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1929 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1930 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1931 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1932 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1933 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1934
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1935 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1936 # Matrix equal operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1937 # . Comparison of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1938 # . Comparing matrix values to a scalar ($Matrix == 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1939 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1940 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1941 # . Comparison of a scalar to matrix values is not allowed (2 == $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1942 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1943 sub _MatrixEqualOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1944 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1945
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1946 $ErrorMsg = "_MatrixEqualOperator: Matrix equal failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1947 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1948 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1949
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1950 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1951
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1952 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1953
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1954 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1955 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1956 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1958 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1959 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1960 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1961 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1962 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1963
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1964 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1965 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1966 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1967 if ($This->{Values}[$RowIndex][$ColIndex] != $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1968 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1969 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1970 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1971 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1972 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1973 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1974 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1975 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1976 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1977 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1978 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1979 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1980 if ($This->{Values}[$RowIndex][$ColIndex] != $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1981 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1982 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1983 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1984 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1985 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1986 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1987 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1988
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1989 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1990 # Matrix not equal operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1991 # . Comparison of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1992 # . Comparing matrix values to a scalar ($Matrix != 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1993 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1994 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1995 # . Comparison of a scalar to matrix values is not allowed (2 != $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1996 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1997 sub _MatrixNotEqualOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1998 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1999
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2000 $ErrorMsg = "_MatrixNotEqualOperator: Matrix not equal failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2001 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2002 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2003
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2004 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2005
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2006 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2007
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2008 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2009 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2010 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2011
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2012 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2013 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2014 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2015 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2016 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2017
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2018 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2019 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2020 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2021 if ($This->{Values}[$RowIndex][$ColIndex] == $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2022 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2023 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2024 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2025 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2026 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2027 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2028 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2029 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2030 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2031 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2032 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2033 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2034 if ($This->{Values}[$RowIndex][$ColIndex] == $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2035 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2036 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2037 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2038 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2040 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2041 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2042
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2043 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2044 # Matrix less than operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2045 # . Comparison of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2046 # . Comparing matrix values to a scalar ($Matrix < 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2047 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2048 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2049 # . Comparison of a scalar to matrix values is not allowed (2 < $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2050 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2051 sub _MatrixLessThanOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2052 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2053
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2054 $ErrorMsg = "_MatrixLessThanOperator: Matrix less than failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2055 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2056 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2057
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2058 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2059
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2060 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2061
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2062 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2063 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2064 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2065
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2066 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2067 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2068 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2069 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2070 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2071
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2072 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2073 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2074 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2075 if ($This->{Values}[$RowIndex][$ColIndex] >= $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2076 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2077 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2078 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2079 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2080 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2081 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2082 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2083 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2084 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2085 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2086 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2087 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2088 if ($This->{Values}[$RowIndex][$ColIndex] >= $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2089 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2090 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2091 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2092 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2093 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2094 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2095 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2096
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2097 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2098 # Matrix less than equal operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2099 # . Comparion of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2100 # . Comparing matrix values to a scalar ($Matrix <= 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2101 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2102 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2103 # . Comparison of a scalar to matrix values is not allowed (2 <= $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2104 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2105 sub _MatrixLessThanEqualOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2106 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2108 $ErrorMsg = "_MatrixLessThanEqualOperator: Matrix less than equal failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2109 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2110 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2111
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2112 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2113
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2114 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2115
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2116 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2117 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2118 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2119
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2120 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2121 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2122 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2123 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2124 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2126 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2127 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2128 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2129 if ($This->{Values}[$RowIndex][$ColIndex] > $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2130 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2131 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2132 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2133 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2134 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2135 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2136 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2137 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2138 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2139 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2140 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2141 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2142 if ($This->{Values}[$RowIndex][$ColIndex] > $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2143 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2144 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2145 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2146 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2147 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2148 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2149 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2150
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2152 # Matrix greatar than operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2153 # . Comparison of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2154 # . Comparing matrix values to a scalar ($Matrix > 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2155 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2156 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2157 # . Comparison of a scalar to matrix values is not allowed (2 > $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2158 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2159 sub _MatrixGreatarThanOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2160 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2161
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2162 $ErrorMsg = "_MatrixGreatarThanOperator: Matrix greatar than failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2163 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2164 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2165
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2166 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2168 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2170 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2171 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2172 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2173
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2174 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2175 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2176 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2177 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2178 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2179
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2180 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2181 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2182 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2183 if ($This->{Values}[$RowIndex][$ColIndex] <= $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2184 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2185 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2186 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2187 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2188 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2189 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2190 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2191 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2192 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2193 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2194 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2195 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2196 if ($This->{Values}[$RowIndex][$ColIndex] <= $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2197 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2198 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2199 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2200 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2201 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2202 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2203 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2204
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2205 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2206 # Matrix greatar than equal operator supports two modes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2207 # . Comparison of corresponding values in two matrices
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2208 # . Comparing matrix values to a scalar ($Matrix >= 2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2209 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2210 # Caveats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2211 # . Comparison of a scalar to matrix values is not allowed (2 >= $Matrix)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2212 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2213 sub _MatrixGreatarThanEqualOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2214 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2215
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2216 $ErrorMsg = "_MatrixGreatarThanEqualOperator: Matrix greatar than equal failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2217 $CheckMatrixSizes = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2218 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2219
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2220 my($NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2222 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2223
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2224 if ($OtherIsMatrix) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2225 # $OrderFlipped is set to false for two matrices...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2226 my($OtherNumOfRows, $OtherNumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2228 # Check sizes...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2229 ($OtherNumOfRows, $OtherNumOfCols) = $Other->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2230 if (!($NumOfRows == $OtherNumOfRows && $NumOfCols == $OtherNumOfCols)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2231 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2232 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2233
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2234 # Check values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2235 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2236 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2237 if ($This->{Values}[$RowIndex][$ColIndex] < $Other->{Values}[$RowIndex][$ColIndex]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2238 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2239 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2240 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2241 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2242 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2243 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2244 # Scalar comparison...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2245 if ($OrderFlipped) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2246 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a matrix...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2247 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2248 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2249 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2250 if ($This->{Values}[$RowIndex][$ColIndex] < $Other) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2251 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2252 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2253 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2254 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2255 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2256 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2257 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2258
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2259 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2260 # Matrix negative value operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2261 # negative values of a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2262 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2263 sub _MatrixNegativeValueOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2264 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2265
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2266 $ErrorMsg = "_MatrixNegativeValueOperator: Matrix negative value operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2267 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2268
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2269 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2270
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2271 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2272 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2274 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2275 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2276 $Matrix->{Values}[$RowIndex][$ColIndex] = - $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2277 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2278 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2279 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2280 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2282 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2283 # Matrix absolute value operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2284 # absolute values of a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2285 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2286 sub _MatrixAbsoluteValueOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2287 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2288
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2289 $ErrorMsg = "_MatrixAbsoluteValueOperator: Matrix absolute value operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2290 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2292 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2293
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2294 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2295 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2296
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2297 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2298 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2299 $Matrix->{Values}[$RowIndex][$ColIndex] = abs $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2300 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2301 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2302 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2305 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2306 # Matrix exp natural base operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2307 # e raised to the power of values in a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2308 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2309 sub _MatrixExpNaturalBaseOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2310 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2312 $ErrorMsg = "_MatrixExpNaturalBaseOperator: Matrix exp operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2313 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2314
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2315 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2316
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2317 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2318 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2320 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2321 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2322 $Matrix->{Values}[$RowIndex][$ColIndex] = exp $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2323 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2324 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2325 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2326 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2327
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2328 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2329 # Matrix log natural base operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2330 # log of values in a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2331 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2332 sub _MatrixLogNaturalBaseOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2333 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2334
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2335 $ErrorMsg = "_MatrixLogNaturalBaseOperator: Matrix log operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2336 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2338 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2339
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2340 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2341 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2342
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2343 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2344 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2345 $Matrix->{Values}[$RowIndex][$ColIndex] = log $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2346 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2347 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2348 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2349 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2350
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2351 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2352 # Matrix square root operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2353 # sqrt of values in a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2354 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2355 sub _MatrixSquareRootOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2356 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2358 $ErrorMsg = "_MatrixSquareRootOperator: Matrix sqrt operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2359 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2360
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2361 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2362
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2363 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2364 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2366 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2367 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2368 $Matrix->{Values}[$RowIndex][$ColIndex] = sqrt $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2369 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2370 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2371 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2372 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2373
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2374 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2375 # Matrix sine root operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2376 # sin of values in a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2377 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2378 sub _MatrixSineOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2379 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2381 $ErrorMsg = "_MatrixSineOperator: Matrix sin operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2382 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2383
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2384 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2385
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2386 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2387 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2388
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2389 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2390 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2391 $Matrix->{Values}[$RowIndex][$ColIndex] = sin $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2392 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2393 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2394 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2395 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2396
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2397 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2398 # Matrix cosine root operator returns a matrix with values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2399 # cos of values in a matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2400 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2401 sub _MatrixCosineOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2402 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $ErrorMsg);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2404 $ErrorMsg = "_MatrixCosineOperator: Matrix cos operation failed";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2405 ($This, $Other, $OrderFlipped, $OtherIsMatrix) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2407 my($Matrix, $NumOfRows, $NumOfCols, $RowIndex, $ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2409 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2410 $Matrix = new Matrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2411
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2412 for $RowIndex (0 .. ($NumOfRows - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2413 for $ColIndex (0 .. ($NumOfCols - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2414 $Matrix->{Values}[$RowIndex][$ColIndex] = cos $This->{Values}[$RowIndex][$ColIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2415 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2416 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2417 return $Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2418 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2420 # Turn matrix into array for @{$Matrix} operation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2421 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2422 sub _MatrixToArrayOperator {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2423 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2425 return \@{$This->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2426 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2427
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2428 # Always return true in boolean context...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2429 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2430 sub _BoolifyMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2431 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2432
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2433 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2434 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2436 # Process parameters passed to overloaded operators...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2437 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2438 # For uninary operators, $SecondParameter is not defined.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2439 sub _ProcessOverloadedOperatorParameters {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2440 my($ErrorMsg, $FirstParameter, $SecondParameter, $ParametersOrderStatus, $CheckMatrixSizesStatus) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2441 my($This, $Other, $OrderFlipped, $OtherIsMatrix, $CheckMatrixSizes);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2442
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2443 ($This, $Other) = ($FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2444 $OrderFlipped = (defined($ParametersOrderStatus) && $ParametersOrderStatus) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2445 $CheckMatrixSizes = (defined $CheckMatrixSizesStatus) ? $CheckMatrixSizesStatus : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2446
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2447 _ValidateMatrix($ErrorMsg, $This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2448
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2449 $OtherIsMatrix = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2450 if (defined($Other) && (ref $Other)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2451 # Make sure $Other is a matrix...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2452 _ValidateMatrix($ErrorMsg, $Other);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2453 if ($CheckMatrixSizes) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2454 _ValidateMatrixSizesAreEqual($ErrorMsg, $This, $Other);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2455 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2456 $OtherIsMatrix = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2457 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2458 return ($This, $Other, $OrderFlipped, $OtherIsMatrix);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2459 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2460
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2461 # Make sure size of the two matrices contain the same number of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2462 sub _ValidateMatrixSizesAreEqual {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2463 my($ErrorMsg, $Matrix1, $Matrix2) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2464 my($NumOfRows1, $NumOfCols1, $NumOfRows2, $NumOfCols2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2465
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2466 ($NumOfRows1, $NumOfCols1) = $Matrix1->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2467 ($NumOfRows2, $NumOfCols2) = $Matrix2->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2468
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2469 if (!($NumOfRows1 == $NumOfRows2 && $NumOfCols1 == $NumOfCols2)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2470 croak "Error: ${ClassName}->${ErrorMsg}: Size of the matrices must be same...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2471 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2472 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2473
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2474 # Return a string containing matrix values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2475 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2476 sub StringifyMatrix {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2477 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2478 my($MatrixString, $MatrixPrintStyleValue, $PrintFormat, $AllRowsInOneLine, $FormatString, $NumOfRows, $NumOfCols, $RowIndex, $RowNum, $RowString, @ValuesFormat);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2479
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2480 ($NumOfRows, $NumOfCols) = $This->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2482 $MatrixPrintStyleValue = (exists $This->{MatrixPrintStyle}) ? $This->{MatrixPrintStyle} : $MatrixPrintStyle;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2483 $AllRowsInOneLine = ($MatrixPrintStyleValue =~ /^AllRowsInOneLine$/i) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2484
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2485 $PrintFormat = (exists $This->{ValueFormat}) ? $This->{ValueFormat} : $ValueFormat;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2487 @ValuesFormat = ($PrintFormat) x $NumOfCols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2488 $FormatString = join ' ', @ValuesFormat;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2489
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2490 $MatrixString = sprintf "<Size: $NumOfRows x $NumOfCols;";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2491 if ($AllRowsInOneLine) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2492 $MatrixString .= sprintf " Values:";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2493 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2494 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2495 $MatrixString .= sprintf " Values:\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2496 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2498 $RowNum = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2499 for $RowIndex (0 .. ($NumOfRows -1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2500 $RowNum++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2501 $RowString = sprintf "Row${RowNum}:[$FormatString]", @{$This->{Values}[$RowIndex]};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2502 if ($AllRowsInOneLine) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2503 $MatrixString .= " $RowString";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2504 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2505 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2506 $MatrixString .= "$RowString\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2507 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2508 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2509 $MatrixString .= ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2510 return $MatrixString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2511 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2512
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2513 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2514
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2515 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2516
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2517 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2518
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2519 Matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2521 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2522
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2523 use Matrix;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2525 use Matrix qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2526
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2527 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2528
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2529 B<Matrix> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2531 new, AddColumnValues, AddRowValues, Copy, GetColumnValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2532 GetColumnValuesAsColumnMatrix, GetColumnValuesAsRowMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2533 GetColumnValuesAsString, GetColumnValuesAsVector, GetDiagonalValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2534 GetDiagonalValuesAsColumnMatrix, GetDiagonalValuesAsRowMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2535 GetDiagonalValuesAsString, GetDiagonalValuesAsVector, GetDimension,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2536 GetMatrixValuesReference, GetNumOfColumns, GetNumOfRows, GetRowValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2537 GetRowValuesAsColumnMatrix, GetRowValuesAsRowMatrix, GetRowValuesAsString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2538 GetRowValuesAsVector, GetSize, GetValue, IdentityMatrix, IsAntiSymmetric,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2539 IsBiDiagonal, IsDiagonal, IsIdentity, IsLeftTriangular, IsLowerBiDiagonal,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2540 IsLowerTriangular, IsLowerUniTriangular, IsMatrix, IsNegative, IsPositive,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2541 IsRightTriangular, IsSkewSymmetric, IsSquare, IsStrictlyLowerTriangular,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2542 IsStrictlyUpperTriangular, IsSymmetric, IsTriDiagonal, IsUnit,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2543 IsUnitLowerTriangular, IsUnitUpperTriangular, IsUpperBiDiagonal,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2544 IsUpperTriangular, IsUpperUniTriangular, NewFromColumns, NewFromDiagonal,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2545 NewFromRows, One, SetAllValues, SetColumnValues, SetDiagonalValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2546 SetMatrixPrintStyle, SetRowValues, SetValue, SetValuePrintFormat, StringifyMatrix,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2547 Transpose, UnitMatrix, Zero, ZeroMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2549 The following functions are available:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2550
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2551 IsMatrix, IdentityMatrix, NewFromRows, NewFromColumns, NewFromDiagonal,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2552 UnitMatrix, ZeroMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2554 The following operators are overloaded:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2555
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2556 "" bool !
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2557 @{}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2558 + - * / ** %
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2559 == != < <= > >=
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2560 neg
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2561 abs exp log sqrt cos sin
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2562
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2563 The matrix row and column indicies start from zero.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2564
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2565 =head2 FUNCTIONS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2566
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2567 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2569 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2571 $NewMatrix = $Matrix->new($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2572
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2573 Creates a new B<Matrix> of size I<NumOfRows x NumOfCol> and returns B<NewMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2574 object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2576 =item B<AddColumnValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2577
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2578 $Matrix->AddColumnValues(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2579 $Matrix->AddColumnValues(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2580 $Matrix->AddColumnValues($VectorObject);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2581 $Matrix->AddColumnValues("Value1 Value2 Value3 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2582
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2583 Adds column values to I<Matrix> using an array, reference to an array, another vector, or space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2584 delimited value string and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2585
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2586 =item B<AddRowValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2587
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2588 $Matrix->AddRowValues(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2589 $Matrix->AddRowValues(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2590 $Matrix->AddRowValues($VectorObject);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2591 $Matrix->AddRowValues("Value1 Value2 Value3 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2592
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2593 Adds row values to I<Matrix> using an array, reference to an array, another vector, or space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2594 delimited value string and returns B<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2596 =item B<Copy>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2598 $NewMatrix = $Matrix->Copy();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2599
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2600 Creates a copy of I<Matrix> and returns B<NewMatrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2601
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2602 =item B<GetColumnValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2603
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2604 @Values = $Matrix->GetColumnValues($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2605 $ValueCount = $Matrix->GetColumnValues($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2606
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2607 Returns an array containing column value specified using I<ColIndex> with column index
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2608 starting at 0. In scalar context, number of column values is returned.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2610 =item B<GetColumnValuesAsColumnMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2611
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2612 $ColumnMatrix = $Matrix->GetColumnValuesAsColumnMatrix($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2613
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2614 Returns a new B<ColumnMatrix> containing column values specified using I<ColIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2615 column index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2617 =item B<GetColumnValuesAsRowMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2618
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2619 $RowMatrix = $Matrix->GetColumnValuesAsRowMatrix($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2620
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2621 Returns a new B<RowMatrix> containing column values specified using I<ColIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2622 column index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2623
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2624 =item B<GetColumnValuesAsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2626 $ColumnValuesString = $Matrix->GetColumnValuesAsString($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2627
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2628 Returns a space delimited B<ColumnValuesString> column values specified using I<ColIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2629 column index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2630
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2631 =item B<GetColumnValuesAsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2632
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2633 $ColumnVector = $Matrix->GetColumnValuesAsVector($ColIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2634
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2635 Returns a new B<ColumnVector> column values specified using I<RowIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2636 column index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2637
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2638 =item B<GetDiagonalValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2639
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2640 @Values = $Matrix->GetDiagonalValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2641 $ValueCount = $Matrix->GetDiagonalValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2642
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2643 Returns an array containing diagonal values. In scalar context, number of diagonal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2644 values is returned.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2646 =item B<GetDiagonalValuesAsColumnMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2647
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2648 $ColumnMatrix = $Matrix->GetDiagonalValuesAsColumnMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2649
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2650 Returns a new B<ColumnMatrix> containing diagonal values corresponding to I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2651
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2652 =item B<GetDiagonalValuesAsRowMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2653
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2654 $RowMatrix = $Matrix->GetDiagonalValuesAsRowMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2655
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2656 Returns a new B<RowMatrix> containing diagonal values corresponding to I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2657
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2658 =item B<GetDiagonalValuesAsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2659
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2660 $DiagonalValuesString = $Matrix->GetDiagonalValuesAsString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2661
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2662 Returns a space delimited B<DiagonalValuesString> containing diagonal values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2663 I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2664
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2665 =item B<GetDiagonalValuesAsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2666
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2667 $DiagonalVector = $Matrix->GetDiagonalValuesAsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2669 Returns a new B<DiagonalVector> containing diagonal values corresponding to I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2670
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2671 =item B<GetDimension>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2673 ($NumOfRows, $NumOfCols) = $Matrix->GetDimension();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2674
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2675 Returns size of I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2676
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2677 =item B<GetMatrixValuesReference>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2679 $ValuesRef = $Matrix->GetMatrixValuesReference();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2681 Returns a reference to array containing rows and column values corresponding to I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2683 =item B<GetNumOfColumns>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2684
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2685 $NumOfCols = $Matrix->GetNumOfColumns();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2687 Returns B<NumOfCols> in I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2689 =item B<GetNumOfRows>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2690
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2691 $NumOfRows = $Matrix->GetNumOfRows();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2692
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2693 Returns B<NumOfRows> in I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2695 =item B<GetRowValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2696
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2697 @Values = $Matrix->GetRowValues($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2698 $ValueCount = $Matrix->GetRowValues($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2699
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2700 Returns an array containing row value specified using I<RowIndex> with row index
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2701 starting at 0. In scalar context, number of row values is returned.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2702
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2703 =item B<GetRowValuesAsColumnMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2704
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2705 $ColumnMatrix = $Matrix->GetRowValuesAsColumnMatrix($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2706
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2707 Returns a new B<ColumnMatrix> containing row values specified using I<RowIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2708 column index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2709
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2710 =item B<GetRowValuesAsRowMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2711
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2712 $RowMatrix = $Matrix->GetRowValuesAsRowMatrix($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2713
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2714 Returns a new B<RowMatrix> containing row values specified using I<RowIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2715 row index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2716
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2717 =item B<GetRowValuesAsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2718
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2719 $RowValuesString = $Matrix->GetRowValuesAsString($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2720
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2721 Returns a space delimited B<RowValuesString> row values specified using I<RowIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2722 row index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2724 =item B<GetRowValuesAsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2725
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2726 $RowVector = $Matrix->GetColumnValuesAsVector($RowIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2727
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2728 Returns a new B<RowVector> row values specified using I<RowIndex> with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2729 row index starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2730
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2731 =item B<GetSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2732
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2733 ($NumOfRows, $NumOfCols) = $Matrix->GetSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2734
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2735 Returns size of I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2737 =item B<GetValue>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2739 $Value = $Matrix->GetValue($RowIndex, $ColIndex, [$SkipIndexCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2741 Returns B<Value> of I<Matrix> element specified using I<RowIndex> and I<ColIndex> with indicies
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2742 starting at 0 with optional validation of specified index values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2743
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2744 =item B<IdentityMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2745
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2746 $NewIdentityMatrix = $Matrix->IdentityMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2747 $NewIdentityMatrix = Matrix::IdentityMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2748 $NewIdentityMatrix = Matrix::IdentityMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2749
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2750 Creates a new B<IdentityMatrix> of specified size I<NumOfRows x NumOfCol> or of size 3 x 3 and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2751 returns B<NewIdentityMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2753 =item B<IsAntiSymmetric>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2754
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2755 $Status = $Matrix->IsAntiSymmetric();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2756
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2757 Returns 1 or 0 based on whether I<Matrix> is an anti symmetric matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2758
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2759 A matrix is an anti symmetric matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2761 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2762 . Its elements are asymmetric with respect to main diagonal. In other words,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2763 elements below the main diagonal are equal to the negative of elements above
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2764 the main diagonal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2766 Transpose of an anti symmetric matrix equals the negative of the matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2767
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2768 =item B<IsBiDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2769
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2770 $Status = $Matrix->IsBiDiagonal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2772 Returns 1 or 0 based on whether I<Matrix> is upper or lower bidiagonal matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2773
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2774 =item B<IsDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2775
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2776 $Status = $Matrix->IsDiagonal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2777
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2778 Returns 1 or 0 based on whether I<Matrix> is a diagonal matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2780 A matrix is a diagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2781
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2782 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2783 . All its off-diagonal elements are zeros and its diagonal elements may or may not
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2784 be zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2785
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2786 =item B<IsIdentity>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2788 $Status = $Matrix->IsIdentity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2790 Returns 1 or 0 based on whether I<Matrix> is an identity matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2791
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2792 =item B<IsLeftTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2793
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2794 $Status = $Matrix->IsLeftTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2795
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2796 Returns 1 or 0 based on whether I<Matrix> is a left or lower matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2797
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2798 A matrix is a left triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2800 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2801 . All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2802
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2803 =item B<IsLowerBiDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2804
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2805 $Status = $Matrix->IsLowerBiDiagonal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2806
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2807 Returns 1 or 0 based on whether I<Matrix> is a lower bidiagonal matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2808
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2809 A matrix is a lower bidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2810
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2811 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2812 . All its main diagonal and lower diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2813 other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2814
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2815 =item B<IsLowerTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2816
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2817 $Status = $Matrix->IsLowerTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2818
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2819 Returns 1 or 0 based on whether I<Matrix> is a left or lower triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2821 A matrix is a lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2823 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2824 . All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2826 =item B<IsLowerUniTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2827
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2828 $Status = $Matrix->IsLowerUniTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2830 Returns 1 or 0 based on whether I<Matrix> is a lower triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2831
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2832 =item B<IsMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2833
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2834 $Status = Matrix::IsMatrix($Object);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2835
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2836 Returns 1 or 0 based on whether I<Object> is a B<Matrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2837
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2838 =item B<IsNegative>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2839
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2840 $Status = $Matrix->IsNegative();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2841
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2842 Returns 1 or 0 based on whether I<Matrix> is a negative matrix containing only values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2843 less than or equal to zero.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2844
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2845 =item B<IsPositive>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2846
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2847 $Status = $Matrix->IsPositive();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2849 Returns 1 or 0 based on whether I<Matrix> is a negative matrix containing only values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2850 greater than or equal to zero.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2851
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2852 =item B<IsRightTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2853
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2854 $Status = $Matrix->IsRightTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2856 Returns 1 or 0 based on whether I<Matrix> is a right or upper triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2857
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2858 =item B<IsSkewSymmetric>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2859
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2860 $Status = $Matrix->IsSkewSymmetric();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2861
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2862 Returns 1 or 0 based on whether I<Matrix> is a skew or anti symmetric matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2863
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2864 =item B<IsSquare>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2866 $Status = $Matrix->IsSquare();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2868 Returns 1 or 0 based on whether I<Matrix> is a square matrix containing equal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2869 number of rows and columns.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2870
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2871 =item B<IsStrictlyLowerTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2872
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2873 $Status = $Matrix->IsStrictlyLowerTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2874
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2875 Returns 1 or 0 based on whether I<Matrix> is a strictly lower triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2876
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2877 A matrix is a strictly lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2878
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2879 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2880 . All its entries on and above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2882 =item B<IsStrictlyUpperTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2883
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2884 $Status = $Matrix->IsStrictlyUpperTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2886 Returns 1 or 0 based on whether I<Matrix> is a strictly upper triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2888 A matrix is a strictly upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2889
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2890 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2891 . All its entries on and below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2892
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2893 =item B<IsSymmetric>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2894
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2895 $Status = $Matrix->IsSymmetric();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2897 Returns 1 or 0 based on whether I<Matrix> is a symmetric matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2898
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2899 A matrix is a symmetric matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2901 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2902 . Its elements are symmetric with respect to main diagonal. In other words,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2903 elements below the main diagonal are equal to the elements above the main
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2904 diagonal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2905
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2906 Transpose of a symmetric matrix equals the matrix itself.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2908 =item B<IsTriDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2909
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2910 $Status = $Matrix->IsTriDiagonal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2911
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2912 Returns 1 or 0 based on whether I<Matrix> is a tridiagonal matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2913
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2914 A matrix is a tribidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2915
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2916 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2917 . All its main diagonal, upper diagonal, and lower diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2918 other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2919
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2920 =item B<IsUnit>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2921
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2922 $Status = $Matrix->IsUnit();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2923
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2924 Returns 1 or 0 based on whether I<Matrix> is a unit matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2925
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2926 A matrix is a unit matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2927
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2928 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2929 . All its diagonal elements are ones and its off-diagonal elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2931 =item B<IsUnitLowerTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2932
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2933 $Status = $Matrix->IsUnitLowerTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2934
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2935 Returns 1 or 0 based on whether I<Matrix> is an unit lower triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2936
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2937 A matrix is an unit lower triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2938
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2939 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2940 . All its entries main diagonal are one
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2941 . All its entries above the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2942
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2943 =item B<IsUnitUpperTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2945 $Status = $Matrix->IsUnitUpperTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2946
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2947 Returns 1 or 0 based on whether I<Matrix> is an unit upper triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2949 A matrix is an unit upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2950
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2951 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2952 . All its entries main diagonal are one
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2953 . All its entries below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2954
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2955 =item B<IsUpperBiDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2956
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2957 $Status = $Matrix->IsUpperBiDiagonal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2958
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2959 Returns 1 or 0 based on whether I<Matrix> is an upper bidiagonal matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2960
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2961 A matrix is an upper bidiagonal matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2962
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2963 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2964 . All its main diagonal and upper diagonal elements are non-zeros and all its
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2965 other elements are zeros
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2966
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2967 =item B<IsUpperTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2968
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2969 $Status = $Matrix->IsUpperTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2970
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2971 Returns 1 or 0 based on whether I<Matrix> is a right or upper triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2972
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2973 A matrix is an upper triangular matrix:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2974
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2975 . It's a square matrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2976 . All its entries below the main diagonal are zero
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2977
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2978 =item B<IsUpperUniTriangular>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2979
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2980 $Status = $Matrix->IsUpperUniTriangular();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2981
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2982 Returns 1 or 0 based on whether I<Matrix> is a right or upper triangular matrix.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2983
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2984 =item B<NewFromColumns>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2985
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2986 $NewMatrix = Matrix::NewFromColumns($Col1Vector, $Col2Vector, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2987 $NewMatrix = Matrix::NewFromColumns($Col1ValuesRef, $Col2ValuesRef, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2988 $NewMatrix = Matrix::NewFromColumns("Val1 Val2 ...", "Val1 Val2", ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2990 $NewMatrix = $Matrix->NewFromColumns($Col1Vector, $Col2Vector, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2991 $NewMatrix = $Matrix->NewFromColumns($Col1ValuesRef, $Col2ValuesRef, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2992 $NewMatrix = $Matrix->NewFromColumns("Val1 Val2 ...", "Val1 Val2", ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2993
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2994 Creates a new B<Matrix> using specified column values and returns B<NewMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2995
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2996 The column values can be specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2997
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2998 . List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2999 . References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3000 . List of strings containing columns values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3001
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3002 Each column must contain the same number of values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3003
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3004 =item B<NewFromDiagonal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3005
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3006 $NewMatrix = Matrix::NewFromDiagonal($DiagonalVector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3007 $NewMatrix = Matrix::NewFromDiagonal($DiagonalValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3008 $NewMatrix = Matrix::NewFromDiagonal("Val1 Val2 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3009
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3010 $NewMatrix = Matrix->NewFromDiagonal($DiagonalVector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3011 $NewMatrix = Matrix->NewFromDiagonal($DiagonalValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3012 $NewMatrix = Matrix->NewFromDiagonal("Val1 Val2 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3013
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3014 Creates a new B<Matrix> using specified diagonal values and returns B<NewMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3015
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3016 The column values can be specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3017
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3018 . A vector object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3019 . Reference to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3020 . Strings containing diagonal values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3021
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3022 =item B<NewFromRows>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3023
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3024 $NewMatrix = Matrix::NewFromRows($Row1Vector, $RowVector, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3025 $NewMatrix = Matrix::NewFromRows($Row1ValuesRef, $Row2ValuesRef, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3026 $NewMatrix = Matrix::NewFromRows("Val1 Val2 ...", "Val1 Val2", ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3027
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3028 $NewMatrix = $Matrix->NewFromRows($Row1Vector, $Row2Vector, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3029 $NewMatrix = $Matrix->NewFromRows($Row1ValuesRef, $Row2ValuesRef, ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3030 $NewMatrix = $Matrix->NewFromRows("Val1 Val2 ...", "Val1 Val2", ...);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3031
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3032 Creates a new B<Matrix> using specified row values and returns B<NewMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3033
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3034 The row values can be specified in one of the following formats:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3035
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3036 . List of vector objects
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3037 . References to list of values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3038 . List of strings containing columns values delimited by space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3039
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3040 Each row must contain the same number of values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3041
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3042 =item B<One>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3043
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3044 $Matrix->One();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3045
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3046 Sets values of all I<Matrix> elements to 1 and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3047
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3048 =item B<SetAllValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3049
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3050 $Matrix->SetAllValues($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3051
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3052 Sets values of all I<Matrix> elements to specified I<Value> and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3053
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3054 =item B<SetColumnValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3055
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3056 $Matrix->SetColumnValues($ColIndex, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3057 $Matrix->SetColumnValues($ColIndex, \@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3058 $Matrix->SetColumnValues($ColIndex, $VectorObject);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3059 $Matrix->SetColumnValues($ColIndex, "Value1 Value2 Value3 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3060
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3061 Sets column values of a specified I<ColIndex> of I<Matrix> using an array, reference to an array,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3062 another vector, or space delimited value string and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3063
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3064 =item B<SetDiagonalValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3065
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3066 $Matrix->SetDiagonalValues(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3067 $Matrix->SetDiagonalValues(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3068 $Matrix->SetDiagonalValues($VectorObject);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3069 $Matrix->SetDiagonalValues("Value1 Value2 Value3 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3070
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3071 Sets values of the diagonal in square I<Matrix> and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3072
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3073 =item B<SetMatrixPrintStyle>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3074
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3075 $Matrix->SetMatrixPrintStyle($MatrixStyle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3076 $Matrix::SetMatrixPrintStyle($MatrixStyle);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3077
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3078 Sets print style for matrix rows for an individual object or the whole class during StringifyMatrix
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3079 operation. Possible I<MatrixStyle> values: I<AllRowsInOneLine, OneRowPerLine>. Default:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3080 I<AllRowsInOneLine>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3081
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3082 =item B<SetRowValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3083
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3084 $Matrix->SetRowValues($ColIndex, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3085 $Matrix->SetRowValues($ColIndex, \@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3086 $Matrix->SetRowValues($ColIndex, $VectorObjext);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3087 $Matrix->SetRowValues($ColIndex, "Value1 Value2 Value3 ...");
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3088
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3089 Sets row values of a specified I<RowIndex> of I<Matrix> using an array, reference to an array,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3090 another vector, or space delimited value string and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3091
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3092 =item B<SetValue>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3093
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3094 $Matrix->SetValue($RowIndex, $ColIndex, $Value, [$SkipIndexCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3095
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3096 Sets B<Value> of I<Matrix> element specified using I<RowIndex> and I<ColIndex> with indicies
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3097 starting at 0 with optional validation of specified index values and return I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3098
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3099 =item B<SetValuePrintFormat>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3101 $Matrix->SetValuePrintFormat($ValueFormat);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3102 $Matrix::SetValuePrintFormat($ValueFormat);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3104 Sets value print format for an individual object or the whole class during StringifyMatrix operation
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3105 and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3107 =item B<StringifyMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3108
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3109 $String = $Matrix->StringifyMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3111 Returns a string containing information about I<Matrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3113 =item B<Transpose>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3114
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3115 $Matrix->Transpose();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3117 Transposes I<Matrix> by swaping rows with columns and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3118
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3119 =item B<UnitMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3120
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3121 $NewUnitMatrix = $Matrix::UnitMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3122 $NewUnitMatrix = $Matrix::UnitMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3123 $NewUnitMatrix = $Matrix->UnitMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3124
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3125 Creates a new B<UnitMatrix> of specified size I<NumOfRows x NumOfCol> or of size 3 x 3 and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3126 returns B<NewUnitMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3128 =item B<Zero>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3130 $Matrix->Zero();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3131
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3132 Sets values of all I<Matrix> elements to 0 and returns I<Matrix>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3133
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3134 =item B<ZeroMatrix>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3136 $NewZeroMatrix = $Matrix::ZeroMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3137 $NewZeroMatrix = $Matrix::ZeroMatrix();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3138 $NewZeroMatrix = $Matrix->ZeroMatrix($NumOfRows, $NumOfCols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3139
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3140 Creates a new B<ZeroMatrix> of specified size I<NumOfRows x NumOfCol> or of size 3 x 3 and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3141 returns B<NewZeroMatrix> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3142
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3143 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3144
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3145 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3146
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3147 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3148
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3149 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3150
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3151 Vector.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3152
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3153 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3154
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3155 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3156
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3157 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3158
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3159 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3160 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3161 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3162 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3164 =cut