annotate mayachemtools/lib/Matrix.pm @ 0:73ae111cf86f draft

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