KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Copyright 2003-2005 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 /**
20  * Interface defining a real-valued matrix with basic algebraic operations.
21  * <p>
22  * Matrix element indexing is 0-based -- e.g., <code>getEntry(0, 0)</code>
23  * returns the element in the first row, first column of the matrix.
24  *
25  * @version $Revision$ $Date: 2005-07-02 15:38:00 -0700 (Sat, 02 Jul 2005) $
26  */

27 public interface RealMatrix {
28     /**
29      * Returns a (deep) copy of this.
30      *
31      * @return matrix copy
32      */

33     RealMatrix copy();
34
35     /**
36      * Compute the sum of this and m.
37      *
38      * @param m matrix to be added
39      * @return this + m
40      * @throws IllegalArgumentException if m is not the same size as this
41      */

42     RealMatrix add(RealMatrix m) throws IllegalArgumentException JavaDoc;
43
44     /**
45      * Compute this minus m.
46      *
47      * @param m matrix to be subtracted
48      * @return this + m
49      * @throws IllegalArgumentException if m is not the same size as this
50      */

51     RealMatrix subtract(RealMatrix m) throws IllegalArgumentException JavaDoc;
52
53      /**
54      * Returns the result of adding d to each entry of this.
55      *
56      * @param d value to be added to each entry
57      * @return d + this
58      */

59     RealMatrix scalarAdd(double d);
60
61     /**
62      * Returns the result multiplying each entry of this by d.
63      *
64      * @param d value to multiply all entries by
65      * @return d * this
66      */

67     RealMatrix scalarMultiply(double d);
68
69     /**
70      * Returns the result of postmultiplying this by m.
71      *
72      * @param m matrix to postmultiply by
73      * @return this * m
74      * @throws IllegalArgumentException
75      * if columnDimension(this) != rowDimension(m)
76      */

77     RealMatrix multiply(RealMatrix m) throws IllegalArgumentException JavaDoc;
78
79     /**
80      * Returns the result premultiplying this by <code>m</code>.
81      * @param m matrix to premultiply by
82      * @return m * this
83      * @throws IllegalArgumentException
84      * if rowDimension(this) != columnDimension(m)
85      */

86     public RealMatrix preMultiply(RealMatrix m) throws IllegalArgumentException JavaDoc;
87
88     /**
89      * Returns matrix entries as a two-dimensional array.
90      *
91      * @return 2-dimensional array of entries
92      */

93     double[][] getData();
94
95     /**
96      * Returns the <a HREF="http://mathworld.wolfram.com/MaximumAbsoluteRowSumNorm.html">
97      * maximum absolute row sum norm</a> of the matrix.
98      *
99      * @return norm
100      */

101     double getNorm();
102     
103     /**
104      * Gets a submatrix. Rows and columns are indicated
105      * counting from 0 to n-1.
106      *
107      * @param startRow Initial row index
108      * @param endRow Final row index
109      * @param startColumn Initial column index
110      * @param endColumn Final column index
111      * @return The subMatrix containing the data of the
112      * specified rows and columns
113      * @exception MatrixIndexException if the indices are not valid
114      */

115    RealMatrix getSubMatrix(int startRow, int endRow, int startColumn,
116             int endColumn) throws MatrixIndexException;
117    
118    /**
119     * Gets a submatrix. Rows and columns are indicated
120     * counting from 0 to n-1.
121     *
122     * @param selectedRows Array of row indices.
123     * @param selectedColumns Array of column indices.
124     * @return The subMatrix containing the data in the
125     * specified rows and columns
126     * @exception MatrixIndexException if row or column selections are not valid
127     */

128    RealMatrix getSubMatrix(int[] selectedRows, int[] selectedColumns)
129    throws MatrixIndexException;
130    
131    /**
132     * Returns the entries in row number <code>row</code>
133     * as a row matrix. Row indices start at 0.
134     *
135     * @param row the row to be fetched
136     * @return row matrix
137     * @throws MatrixIndexException if the specified row index is invalid
138     */

139    RealMatrix getRowMatrix(int row) throws MatrixIndexException;
140    
141    /**
142     * Returns the entries in column number <code>column</code>
143     * as a column matrix. Column indices start at 0.
144     *
145     * @param column the column to be fetched
146     * @return column matrix
147     * @throws MatrixIndexException if the specified column index is invalid
148     */

149    RealMatrix getColumnMatrix(int column) throws MatrixIndexException;
150     
151     /**
152      * Returns the entries in row number <code>row</code> as an array.
153      * <p>
154      * Row indices start at 0. A <code>MatrixIndexException</code> is thrown
155      * unless <code>0 <= row < rowDimension.</code>
156      *
157      * @param row the row to be fetched
158      * @return array of entries in the row
159      * @throws MatrixIndexException if the specified row index is not valid
160      */

161     double[] getRow(int row) throws MatrixIndexException;
162
163     /**
164      * Returns the entries in column number <code>col</code> as an array.
165      * <p>
166      * Column indices start at 0. A <code>MatrixIndexException</code> is thrown
167      * unless <code>0 <= column < columnDimension.</code>
168      *
169      * @param col the column to be fetched
170      * @return array of entries in the column
171      * @throws MatrixIndexException if the specified column index is not valid
172      */

173     double[] getColumn(int col) throws MatrixIndexException;
174
175     /**
176      * Returns the entry in the specified row and column.
177      * <p>
178      * Row and column indices start at 0 and must satisfy
179      * <ul>
180      * <li><code>0 <= row < rowDimension</code></li>
181      * <li><code> 0 <= column < columnDimension</code></li>
182      * </ul>
183      * otherwise a <code>MatrixIndexException</code> is thrown.
184      *
185      * @param row row location of entry to be fetched
186      * @param column column location of entry to be fetched
187      * @return matrix entry in row,column
188      * @throws MatrixIndexException if the row or column index is not valid
189      */

190     double getEntry(int row, int column) throws MatrixIndexException;
191
192     /**
193      * Returns the transpose of this matrix.
194      *
195      * @return transpose matrix
196      */

197     RealMatrix transpose();
198
199     /**
200      * Returns the inverse of this matrix.
201      *
202      * @return inverse matrix
203      * @throws InvalidMatrixException if this is not invertible
204      */

205     RealMatrix inverse() throws InvalidMatrixException;
206
207     /**
208      * Returns the determinant of this matrix.
209      *
210      * @return determinant
211      */

212     double getDeterminant();
213
214     /**
215      * Is this a square matrix?
216      * @return true if the matrix is square (rowDimension = columnDimension)
217      */

218     boolean isSquare();
219
220     /**
221      * Is this a singular matrix?
222      * @return true if the matrix is singular
223      */

224     boolean isSingular();
225
226     /**
227      * Returns the number of rows in the matrix.
228      *
229      * @return rowDimension
230      */

231     int getRowDimension();
232
233     /**
234      * Returns the number of columns in the matrix.
235      *
236      * @return columnDimension
237      */

238     int getColumnDimension();
239
240     /**
241      * Returns the <a HREF="http://mathworld.wolfram.com/MatrixTrace.html">
242      * trace</a> of the matrix (the sum of the elements on the main diagonal).
243      *
244      * @return trace
245      */

246     double getTrace();
247
248     /**
249      * Returns the result of multiplying this by the vector <code>v</code>.
250      *
251      * @param v the vector to operate on
252      * @return this*v
253      * @throws IllegalArgumentException if columnDimension != v.size()
254      */

255     double[] operate(double[] v) throws IllegalArgumentException JavaDoc;
256
257     /**
258      * Returns the (row) vector result of premultiplying this by the vector <code>v</code>.
259      *
260      * @param v the row vector to premultiply by
261      * @return v*this
262      * @throws IllegalArgumentException if rowDimension != v.size()
263      */

264     double[] preMultiply(double[] v) throws IllegalArgumentException JavaDoc;
265
266     /**
267      * Returns the solution vector for a linear system with coefficient
268      * matrix = this and constant vector = <code>b</code>.
269      *
270      * @param b constant vector
271      * @return vector of solution values to AX = b, where A is *this
272      * @throws IllegalArgumentException if this.rowDimension != b.length
273      * @throws InvalidMatrixException if this matrix is not square or is singular
274      */

275     double[] solve(double[] b) throws IllegalArgumentException JavaDoc, InvalidMatrixException;
276
277     /**
278      * Returns a matrix of (column) solution vectors for linear systems with
279      * coefficient matrix = this and constant vectors = columns of
280      * <code>b</code>.
281      *
282      * @param b matrix of constant vectors forming RHS of linear systems to
283      * to solve
284      * @return matrix of solution vectors
285      * @throws IllegalArgumentException if this.rowDimension != row dimension
286      * @throws InvalidMatrixException if this matrix is not square or is singular
287      */

288     RealMatrix solve(RealMatrix b) throws IllegalArgumentException JavaDoc, InvalidMatrixException;
289 }
290
291
Popular Tags