KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > math > linear > BigMatrix


1 /*
2  * Copyright 2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.commons.math.linear;
18
19 import java.math.BigDecimal JavaDoc;
20
21 /**
22  * Interface defining a real-valued matrix with basic algebraic operations, using
23  * BigDecimal representations for the entries.
24  * <p>
25  * Matrix element indexing is 0-based -- e.g., <code>getEntry(0, 0)</code>
26  * returns the element in the first row, first column of the matrix.
27  *
28  * @version $Revision$ $Date: 2005-07-02 15:38:00 -0700 (Sat, 02 Jul 2005) $
29  */

30 public interface BigMatrix {
31
32     /**
33      * Returns a (deep) copy of this.
34      *
35      * @return matrix copy
36      */

37     BigMatrix copy();
38     
39     /**
40      * Compute the sum of this and m.
41      *
42      * @param m matrix to be added
43      * @return this + m
44      * @exception IllegalArgumentException if m is not the same size as this
45      */

46     BigMatrix add(BigMatrix m) throws IllegalArgumentException JavaDoc;
47     
48     /**
49      * Compute this minus m.
50      *
51      * @param m matrix to be subtracted
52      * @return this + m
53      * @exception IllegalArgumentException if m is not the same size as this
54      */

55     BigMatrix subtract(BigMatrix m) throws IllegalArgumentException JavaDoc;
56     
57      /**
58      * Returns the result of adding d to each entry of this.
59      *
60      * @param d value to be added to each entry
61      * @return d + this
62      */

63     BigMatrix scalarAdd(BigDecimal JavaDoc d);
64     
65     /**
66      * Returns the result multiplying each entry of this by d.
67      *
68      * @param d value to multiply all entries by
69      * @return d * this
70      */

71     BigMatrix scalarMultiply(BigDecimal JavaDoc d);
72     
73     /**
74      * Returns the result of postmultiplying this by m.
75      *
76      * @param m matrix to postmultiply by
77      * @return this * m
78      * @throws IllegalArgumentException
79      * if columnDimension(this) != rowDimension(m)
80      */

81     BigMatrix multiply(BigMatrix m) throws IllegalArgumentException JavaDoc;
82     
83     /**
84      * Returns the result premultiplying this by <code>m</code>.
85      * @param m matrix to premultiply by
86      * @return m * this
87      * @throws IllegalArgumentException
88      * if rowDimension(this) != columnDimension(m)
89      */

90     public BigMatrix preMultiply(BigMatrix m) throws IllegalArgumentException JavaDoc;
91     
92     /**
93      * Returns matrix entries as a two-dimensional array.
94      *
95      * @return 2-dimensional array of entries
96      */

97     BigDecimal JavaDoc[][] getData();
98
99     /**
100      * Returns matrix entries as a two-dimensional array.
101      *
102      * @return 2-dimensional array of entries
103      */

104     double [][] getDataAsDoubleArray();
105
106     /***
107      * Gets the rounding mode
108      * @return the rounding mode
109      */

110     int getRoundingMode();
111
112     /**
113      * Returns the <a HREF="http://mathworld.wolfram.com/MaximumAbsoluteRowSumNorm.html">
114      * maximum absolute row sum norm</a> of the matrix.
115      *
116      * @return norm
117      */

118     BigDecimal JavaDoc getNorm();
119     
120     /**
121      * Gets a submatrix. Rows and columns are indicated
122      * counting from 0 to n-1.
123      *
124      * @param startRow Initial row index
125      * @param endRow Final row index
126      * @param startColumn Initial column index
127      * @param endColumn Final column index
128      * @return The subMatrix containing the data of the
129      * specified rows and columns
130      * @exception MatrixIndexException if the indices are not valid
131      */

132     BigMatrix getSubMatrix(int startRow, int endRow, int startColumn,
133             int endColumn) throws MatrixIndexException;
134     
135     /**
136      * Gets a submatrix. Rows and columns are indicated
137      * counting from 0 to n-1.
138      *
139      * @param selectedRows Array of row indices.
140      * @param selectedColumns Array of column indices.
141      * @return The subMatrix containing the data in the
142      * specified rows and columns
143      * @exception MatrixIndexException if row or column selections are not valid
144      */

145     BigMatrix getSubMatrix(int[] selectedRows, int[] selectedColumns)
146     throws MatrixIndexException;
147     
148     /**
149      * Returns the entries in row number <code>row</code>
150      * as a row matrix. Row indices start at 0.
151      *
152      * @param row the row to be fetched
153      * @return row matrix
154      * @throws MatrixIndexException if the specified row index is invalid
155      */

156     BigMatrix getRowMatrix(int row) throws MatrixIndexException;
157     
158     /**
159      * Returns the entries in column number <code>column</code>
160      * as a column matrix. Column indices start at 0.
161      *
162      * @param column the column to be fetched
163      * @return column matrix
164      * @throws MatrixIndexException if the specified column index is invalid
165      */

166     BigMatrix getColumnMatrix(int column) throws MatrixIndexException;
167     
168     /**
169      * Returns the entries in row number <code>row</code> as an array.
170      * <p>
171      * Row indices start at 0. A <code>MatrixIndexException</code> is thrown
172      * unless <code>0 <= row < rowDimension.</code>
173      *
174      * @param row the row to be fetched
175      * @return array of entries in the row
176      * @throws MatrixIndexException if the specified row index is not valid
177      */

178     BigDecimal JavaDoc[] getRow(int row) throws MatrixIndexException;
179
180     /**
181      * Returns the entries in row number <code>row</code> as an array
182      * of double values.
183      * <p>
184      * Row indices start at 0. A <code>MatrixIndexException</code> is thrown
185      * unless <code>0 <= row < rowDimension.</code>
186      *
187      * @param row the row to be fetched
188      * @return array of entries in the row
189      * @throws MatrixIndexException if the specified row index is not valid
190      */

191     double [] getRowAsDoubleArray(int row) throws MatrixIndexException;
192
193     /**
194      * Returns the entries in column number <code>col</code> as an array.
195      * <p>
196      * Column indices start at 0. A <code>MatrixIndexException</code> is thrown
197      * unless <code>0 <= column < columnDimension.</code>
198      *
199      * @param col the column to be fetched
200      * @return array of entries in the column
201      * @throws MatrixIndexException if the specified column index is not valid
202      */

203     BigDecimal JavaDoc[] getColumn(int col) throws MatrixIndexException;
204
205     /**
206      * Returns the entries in column number <code>col</code> as an array
207      * of double values.
208      * <p>
209      * Column indices start at 0. A <code>MatrixIndexException</code> is thrown
210      * unless <code>0 <= column < columnDimension.</code>
211      *
212      * @param col the column to be fetched
213      * @return array of entries in the column
214      * @throws MatrixIndexException if the specified column index is not valid
215      */

216     double [] getColumnAsDoubleArray(int col) throws MatrixIndexException;
217
218     /**
219      * Returns the entry in the specified row and column.
220      * <p>
221      * Row and column indices start at 0 and must satisfy
222      * <ul>
223      * <li><code>0 <= row < rowDimension</code></li>
224      * <li><code> 0 <= column < columnDimension</code></li>
225      * </ul>
226      * otherwise a <code>MatrixIndexException</code> is thrown.
227      *
228      * @param row row location of entry to be fetched
229      * @param column column location of entry to be fetched
230      * @return matrix entry in row,column
231      * @throws MatrixIndexException if the row or column index is not valid
232      */

233     BigDecimal JavaDoc getEntry(int row, int column) throws MatrixIndexException;
234     
235     /**
236      * Returns the entry in the specified row and column as a double.
237      * <p>
238      * Row and column indices start at 0 and must satisfy
239      * <ul>
240      * <li><code>0 <= row < rowDimension</code></li>
241      * <li><code> 0 <= column < columnDimension</code></li>
242      * </ul>
243      * otherwise a <code>MatrixIndexException</code> is thrown.
244      *
245      * @param row row location of entry to be fetched
246      * @param column column location of entry to be fetched
247      * @return matrix entry in row,column
248      * @throws MatrixIndexException if the row or column index is not valid
249      */

250     double getEntryAsDouble(int row, int column) throws MatrixIndexException;
251
252     /**
253      * Returns the transpose of this matrix.
254      *
255      * @return transpose matrix
256      */

257     BigMatrix transpose();
258     
259     /**
260      * Returns the inverse of this matrix.
261      *
262      * @return inverse matrix
263      * @throws org.apache.commons.math.linear.InvalidMatrixException if
264      * this is not invertible
265      */

266     BigMatrix inverse() throws InvalidMatrixException;
267     
268     /**
269      * Returns the determinant of this matrix.
270      *
271      * @return determinant
272       *@throws org.apache.commons.math.linear.InvalidMatrixException if
273       * matrix is not square
274      */

275     BigDecimal JavaDoc getDeterminant() throws InvalidMatrixException;
276     
277     /**
278      * Is this a square matrix?
279      * @return true if the matrix is square (rowDimension = columnDimension)
280      */

281     boolean isSquare();
282     
283     /**
284      * Is this a singular matrix?
285      * @return true if the matrix is singular
286      */

287     boolean isSingular();
288     
289     /**
290      * Returns the number of rows in the matrix.
291      *
292      * @return rowDimension
293      */

294     int getRowDimension();
295     
296     /**
297      * Returns the number of columns in the matrix.
298      *
299      * @return columnDimension
300      */

301     int getColumnDimension();
302     
303     /**
304      * Returns the <a HREF="http://mathworld.wolfram.com/MatrixTrace.html">
305      * trace</a> of the matrix (the sum of the elements on the main diagonal).
306      *
307      * @return trace
308      */

309     BigDecimal JavaDoc getTrace();
310     
311     /**
312      * Returns the result of multiplying this by the vector <code>v</code>.
313      *
314      * @param v the vector to operate on
315      * @return this*v
316      * @throws IllegalArgumentException if columnDimension != v.size()
317      */

318     BigDecimal JavaDoc[] operate(BigDecimal JavaDoc[] v) throws IllegalArgumentException JavaDoc;
319
320     /**
321      * Returns the (row) vector result of premultiplying this by the vector <code>v</code>.
322      *
323      * @param v the row vector to premultiply by
324      * @return v*this
325      * @throws IllegalArgumentException if rowDimension != v.size()
326      */

327     BigDecimal JavaDoc[] preMultiply(BigDecimal JavaDoc[] v) throws IllegalArgumentException JavaDoc;
328     
329     /**
330      * Returns the solution vector for a linear system with coefficient
331      * matrix = this and constant vector = <code>b</code>.
332      *
333      * @param b constant vector
334      * @return vector of solution values to AX = b, where A is *this
335      * @throws IllegalArgumentException if this.rowDimension != b.length
336      * @throws org.apache.commons.math.linear.InvalidMatrixException if this matrix is not square or is singular
337      */

338     BigDecimal JavaDoc[] solve(BigDecimal JavaDoc[] b) throws IllegalArgumentException JavaDoc, InvalidMatrixException;
339
340     /**
341      * Returns a matrix of (column) solution vectors for linear systems with
342      * coefficient matrix = this and constant vectors = columns of
343      * <code>b</code>.
344      *
345      * @param b matrix of constant vectors forming RHS of linear systems to
346      * to solve
347      * @return matrix of solution vectors
348      * @throws IllegalArgumentException if this.rowDimension != row dimension
349      * @throws org.apache.commons.math.linear.InvalidMatrixException if this matrix is not square or is singular
350      */

351     BigMatrix solve(BigMatrix b) throws IllegalArgumentException JavaDoc, InvalidMatrixException;
352 }
353
354
Popular Tags