comparison libs/commons-math-2.1/docs/apidocs/src-html/org/apache/commons/math/linear/AbstractRealMatrix.html @ 13:cbf34dd4d7e6

commons-math-2.1 added
author dwinter
date Tue, 04 Jan 2011 10:02:07 +0100
parents
children
comparison
equal deleted inserted replaced
12:970d26a94fb7 13:cbf34dd4d7e6
1 <HTML>
2 <BODY BGCOLOR="white">
3 <PRE>
4 <FONT color="green">001</FONT> /*<a name="line.1"></a>
5 <FONT color="green">002</FONT> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
6 <FONT color="green">003</FONT> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
7 <FONT color="green">004</FONT> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
8 <FONT color="green">005</FONT> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
9 <FONT color="green">006</FONT> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
10 <FONT color="green">007</FONT> * the License. You may obtain a copy of the License at<a name="line.7"></a>
11 <FONT color="green">008</FONT> *<a name="line.8"></a>
12 <FONT color="green">009</FONT> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
13 <FONT color="green">010</FONT> *<a name="line.10"></a>
14 <FONT color="green">011</FONT> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
15 <FONT color="green">012</FONT> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
16 <FONT color="green">013</FONT> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
17 <FONT color="green">014</FONT> * See the License for the specific language governing permissions and<a name="line.14"></a>
18 <FONT color="green">015</FONT> * limitations under the License.<a name="line.15"></a>
19 <FONT color="green">016</FONT> */<a name="line.16"></a>
20 <FONT color="green">017</FONT> <a name="line.17"></a>
21 <FONT color="green">018</FONT> package org.apache.commons.math.linear;<a name="line.18"></a>
22 <FONT color="green">019</FONT> <a name="line.19"></a>
23 <FONT color="green">020</FONT> import org.apache.commons.math.MathRuntimeException;<a name="line.20"></a>
24 <FONT color="green">021</FONT> import org.apache.commons.math.util.MathUtils;<a name="line.21"></a>
25 <FONT color="green">022</FONT> <a name="line.22"></a>
26 <FONT color="green">023</FONT> /**<a name="line.23"></a>
27 <FONT color="green">024</FONT> * Basic implementation of RealMatrix methods regardless of the underlying storage.<a name="line.24"></a>
28 <FONT color="green">025</FONT> * &lt;p&gt;All the methods implemented here use {@link #getEntry(int, int)} to access<a name="line.25"></a>
29 <FONT color="green">026</FONT> * matrix elements. Derived class can provide faster implementations. &lt;/p&gt;<a name="line.26"></a>
30 <FONT color="green">027</FONT> *<a name="line.27"></a>
31 <FONT color="green">028</FONT> * @version $Revision: 811833 $ $Date: 2009-09-06 12:27:50 -0400 (Sun, 06 Sep 2009) $<a name="line.28"></a>
32 <FONT color="green">029</FONT> * @since 2.0<a name="line.29"></a>
33 <FONT color="green">030</FONT> */<a name="line.30"></a>
34 <FONT color="green">031</FONT> public abstract class AbstractRealMatrix implements RealMatrix {<a name="line.31"></a>
35 <FONT color="green">032</FONT> <a name="line.32"></a>
36 <FONT color="green">033</FONT> <a name="line.33"></a>
37 <FONT color="green">034</FONT> /** Cached LU solver.<a name="line.34"></a>
38 <FONT color="green">035</FONT> * @deprecated as of release 2.0, since all methods using this are deprecated<a name="line.35"></a>
39 <FONT color="green">036</FONT> */<a name="line.36"></a>
40 <FONT color="green">037</FONT> @Deprecated<a name="line.37"></a>
41 <FONT color="green">038</FONT> private DecompositionSolver lu;<a name="line.38"></a>
42 <FONT color="green">039</FONT> <a name="line.39"></a>
43 <FONT color="green">040</FONT> /**<a name="line.40"></a>
44 <FONT color="green">041</FONT> * Creates a matrix with no data<a name="line.41"></a>
45 <FONT color="green">042</FONT> */<a name="line.42"></a>
46 <FONT color="green">043</FONT> protected AbstractRealMatrix() {<a name="line.43"></a>
47 <FONT color="green">044</FONT> lu = null;<a name="line.44"></a>
48 <FONT color="green">045</FONT> }<a name="line.45"></a>
49 <FONT color="green">046</FONT> <a name="line.46"></a>
50 <FONT color="green">047</FONT> /**<a name="line.47"></a>
51 <FONT color="green">048</FONT> * Create a new RealMatrix with the supplied row and column dimensions.<a name="line.48"></a>
52 <FONT color="green">049</FONT> *<a name="line.49"></a>
53 <FONT color="green">050</FONT> * @param rowDimension the number of rows in the new matrix<a name="line.50"></a>
54 <FONT color="green">051</FONT> * @param columnDimension the number of columns in the new matrix<a name="line.51"></a>
55 <FONT color="green">052</FONT> * @throws IllegalArgumentException if row or column dimension is not positive<a name="line.52"></a>
56 <FONT color="green">053</FONT> */<a name="line.53"></a>
57 <FONT color="green">054</FONT> protected AbstractRealMatrix(final int rowDimension, final int columnDimension)<a name="line.54"></a>
58 <FONT color="green">055</FONT> throws IllegalArgumentException {<a name="line.55"></a>
59 <FONT color="green">056</FONT> if (rowDimension &lt;= 0 ) {<a name="line.56"></a>
60 <FONT color="green">057</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.57"></a>
61 <FONT color="green">058</FONT> "invalid row dimension {0} (must be positive)",<a name="line.58"></a>
62 <FONT color="green">059</FONT> rowDimension);<a name="line.59"></a>
63 <FONT color="green">060</FONT> }<a name="line.60"></a>
64 <FONT color="green">061</FONT> if (columnDimension &lt;= 0) {<a name="line.61"></a>
65 <FONT color="green">062</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.62"></a>
66 <FONT color="green">063</FONT> "invalid column dimension {0} (must be positive)",<a name="line.63"></a>
67 <FONT color="green">064</FONT> columnDimension);<a name="line.64"></a>
68 <FONT color="green">065</FONT> }<a name="line.65"></a>
69 <FONT color="green">066</FONT> lu = null;<a name="line.66"></a>
70 <FONT color="green">067</FONT> }<a name="line.67"></a>
71 <FONT color="green">068</FONT> <a name="line.68"></a>
72 <FONT color="green">069</FONT> /** {@inheritDoc} */<a name="line.69"></a>
73 <FONT color="green">070</FONT> public abstract RealMatrix createMatrix(final int rowDimension, final int columnDimension)<a name="line.70"></a>
74 <FONT color="green">071</FONT> throws IllegalArgumentException;<a name="line.71"></a>
75 <FONT color="green">072</FONT> <a name="line.72"></a>
76 <FONT color="green">073</FONT> /** {@inheritDoc} */<a name="line.73"></a>
77 <FONT color="green">074</FONT> public abstract RealMatrix copy();<a name="line.74"></a>
78 <FONT color="green">075</FONT> <a name="line.75"></a>
79 <FONT color="green">076</FONT> /** {@inheritDoc} */<a name="line.76"></a>
80 <FONT color="green">077</FONT> public RealMatrix add(RealMatrix m) throws IllegalArgumentException {<a name="line.77"></a>
81 <FONT color="green">078</FONT> <a name="line.78"></a>
82 <FONT color="green">079</FONT> // safety check<a name="line.79"></a>
83 <FONT color="green">080</FONT> MatrixUtils.checkAdditionCompatible(this, m);<a name="line.80"></a>
84 <FONT color="green">081</FONT> <a name="line.81"></a>
85 <FONT color="green">082</FONT> final int rowCount = getRowDimension();<a name="line.82"></a>
86 <FONT color="green">083</FONT> final int columnCount = getColumnDimension();<a name="line.83"></a>
87 <FONT color="green">084</FONT> final RealMatrix out = createMatrix(rowCount, columnCount);<a name="line.84"></a>
88 <FONT color="green">085</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.85"></a>
89 <FONT color="green">086</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.86"></a>
90 <FONT color="green">087</FONT> out.setEntry(row, col, getEntry(row, col) + m.getEntry(row, col));<a name="line.87"></a>
91 <FONT color="green">088</FONT> }<a name="line.88"></a>
92 <FONT color="green">089</FONT> }<a name="line.89"></a>
93 <FONT color="green">090</FONT> <a name="line.90"></a>
94 <FONT color="green">091</FONT> return out;<a name="line.91"></a>
95 <FONT color="green">092</FONT> <a name="line.92"></a>
96 <FONT color="green">093</FONT> }<a name="line.93"></a>
97 <FONT color="green">094</FONT> <a name="line.94"></a>
98 <FONT color="green">095</FONT> /** {@inheritDoc} */<a name="line.95"></a>
99 <FONT color="green">096</FONT> public RealMatrix subtract(final RealMatrix m) throws IllegalArgumentException {<a name="line.96"></a>
100 <FONT color="green">097</FONT> <a name="line.97"></a>
101 <FONT color="green">098</FONT> // safety check<a name="line.98"></a>
102 <FONT color="green">099</FONT> MatrixUtils.checkSubtractionCompatible(this, m);<a name="line.99"></a>
103 <FONT color="green">100</FONT> <a name="line.100"></a>
104 <FONT color="green">101</FONT> final int rowCount = getRowDimension();<a name="line.101"></a>
105 <FONT color="green">102</FONT> final int columnCount = getColumnDimension();<a name="line.102"></a>
106 <FONT color="green">103</FONT> final RealMatrix out = createMatrix(rowCount, columnCount);<a name="line.103"></a>
107 <FONT color="green">104</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.104"></a>
108 <FONT color="green">105</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.105"></a>
109 <FONT color="green">106</FONT> out.setEntry(row, col, getEntry(row, col) - m.getEntry(row, col));<a name="line.106"></a>
110 <FONT color="green">107</FONT> }<a name="line.107"></a>
111 <FONT color="green">108</FONT> }<a name="line.108"></a>
112 <FONT color="green">109</FONT> <a name="line.109"></a>
113 <FONT color="green">110</FONT> return out;<a name="line.110"></a>
114 <FONT color="green">111</FONT> <a name="line.111"></a>
115 <FONT color="green">112</FONT> }<a name="line.112"></a>
116 <FONT color="green">113</FONT> <a name="line.113"></a>
117 <FONT color="green">114</FONT> /** {@inheritDoc} */<a name="line.114"></a>
118 <FONT color="green">115</FONT> public RealMatrix scalarAdd(final double d) {<a name="line.115"></a>
119 <FONT color="green">116</FONT> <a name="line.116"></a>
120 <FONT color="green">117</FONT> final int rowCount = getRowDimension();<a name="line.117"></a>
121 <FONT color="green">118</FONT> final int columnCount = getColumnDimension();<a name="line.118"></a>
122 <FONT color="green">119</FONT> final RealMatrix out = createMatrix(rowCount, columnCount);<a name="line.119"></a>
123 <FONT color="green">120</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.120"></a>
124 <FONT color="green">121</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.121"></a>
125 <FONT color="green">122</FONT> out.setEntry(row, col, getEntry(row, col) + d);<a name="line.122"></a>
126 <FONT color="green">123</FONT> }<a name="line.123"></a>
127 <FONT color="green">124</FONT> }<a name="line.124"></a>
128 <FONT color="green">125</FONT> <a name="line.125"></a>
129 <FONT color="green">126</FONT> return out;<a name="line.126"></a>
130 <FONT color="green">127</FONT> <a name="line.127"></a>
131 <FONT color="green">128</FONT> }<a name="line.128"></a>
132 <FONT color="green">129</FONT> <a name="line.129"></a>
133 <FONT color="green">130</FONT> /** {@inheritDoc} */<a name="line.130"></a>
134 <FONT color="green">131</FONT> public RealMatrix scalarMultiply(final double d) {<a name="line.131"></a>
135 <FONT color="green">132</FONT> <a name="line.132"></a>
136 <FONT color="green">133</FONT> final int rowCount = getRowDimension();<a name="line.133"></a>
137 <FONT color="green">134</FONT> final int columnCount = getColumnDimension();<a name="line.134"></a>
138 <FONT color="green">135</FONT> final RealMatrix out = createMatrix(rowCount, columnCount);<a name="line.135"></a>
139 <FONT color="green">136</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.136"></a>
140 <FONT color="green">137</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.137"></a>
141 <FONT color="green">138</FONT> out.setEntry(row, col, getEntry(row, col) * d);<a name="line.138"></a>
142 <FONT color="green">139</FONT> }<a name="line.139"></a>
143 <FONT color="green">140</FONT> }<a name="line.140"></a>
144 <FONT color="green">141</FONT> <a name="line.141"></a>
145 <FONT color="green">142</FONT> return out;<a name="line.142"></a>
146 <FONT color="green">143</FONT> <a name="line.143"></a>
147 <FONT color="green">144</FONT> }<a name="line.144"></a>
148 <FONT color="green">145</FONT> <a name="line.145"></a>
149 <FONT color="green">146</FONT> /** {@inheritDoc} */<a name="line.146"></a>
150 <FONT color="green">147</FONT> public RealMatrix multiply(final RealMatrix m)<a name="line.147"></a>
151 <FONT color="green">148</FONT> throws IllegalArgumentException {<a name="line.148"></a>
152 <FONT color="green">149</FONT> <a name="line.149"></a>
153 <FONT color="green">150</FONT> // safety check<a name="line.150"></a>
154 <FONT color="green">151</FONT> MatrixUtils.checkMultiplicationCompatible(this, m);<a name="line.151"></a>
155 <FONT color="green">152</FONT> <a name="line.152"></a>
156 <FONT color="green">153</FONT> final int nRows = getRowDimension();<a name="line.153"></a>
157 <FONT color="green">154</FONT> final int nCols = m.getColumnDimension();<a name="line.154"></a>
158 <FONT color="green">155</FONT> final int nSum = getColumnDimension();<a name="line.155"></a>
159 <FONT color="green">156</FONT> final RealMatrix out = createMatrix(nRows, nCols);<a name="line.156"></a>
160 <FONT color="green">157</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.157"></a>
161 <FONT color="green">158</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.158"></a>
162 <FONT color="green">159</FONT> double sum = 0;<a name="line.159"></a>
163 <FONT color="green">160</FONT> for (int i = 0; i &lt; nSum; ++i) {<a name="line.160"></a>
164 <FONT color="green">161</FONT> sum += getEntry(row, i) * m.getEntry(i, col);<a name="line.161"></a>
165 <FONT color="green">162</FONT> }<a name="line.162"></a>
166 <FONT color="green">163</FONT> out.setEntry(row, col, sum);<a name="line.163"></a>
167 <FONT color="green">164</FONT> }<a name="line.164"></a>
168 <FONT color="green">165</FONT> }<a name="line.165"></a>
169 <FONT color="green">166</FONT> <a name="line.166"></a>
170 <FONT color="green">167</FONT> return out;<a name="line.167"></a>
171 <FONT color="green">168</FONT> <a name="line.168"></a>
172 <FONT color="green">169</FONT> }<a name="line.169"></a>
173 <FONT color="green">170</FONT> <a name="line.170"></a>
174 <FONT color="green">171</FONT> /** {@inheritDoc} */<a name="line.171"></a>
175 <FONT color="green">172</FONT> public RealMatrix preMultiply(final RealMatrix m)<a name="line.172"></a>
176 <FONT color="green">173</FONT> throws IllegalArgumentException {<a name="line.173"></a>
177 <FONT color="green">174</FONT> return m.multiply(this);<a name="line.174"></a>
178 <FONT color="green">175</FONT> }<a name="line.175"></a>
179 <FONT color="green">176</FONT> <a name="line.176"></a>
180 <FONT color="green">177</FONT> /** {@inheritDoc} */<a name="line.177"></a>
181 <FONT color="green">178</FONT> public double[][] getData() {<a name="line.178"></a>
182 <FONT color="green">179</FONT> <a name="line.179"></a>
183 <FONT color="green">180</FONT> final double[][] data = new double[getRowDimension()][getColumnDimension()];<a name="line.180"></a>
184 <FONT color="green">181</FONT> <a name="line.181"></a>
185 <FONT color="green">182</FONT> for (int i = 0; i &lt; data.length; ++i) {<a name="line.182"></a>
186 <FONT color="green">183</FONT> final double[] dataI = data[i];<a name="line.183"></a>
187 <FONT color="green">184</FONT> for (int j = 0; j &lt; dataI.length; ++j) {<a name="line.184"></a>
188 <FONT color="green">185</FONT> dataI[j] = getEntry(i, j);<a name="line.185"></a>
189 <FONT color="green">186</FONT> }<a name="line.186"></a>
190 <FONT color="green">187</FONT> }<a name="line.187"></a>
191 <FONT color="green">188</FONT> <a name="line.188"></a>
192 <FONT color="green">189</FONT> return data;<a name="line.189"></a>
193 <FONT color="green">190</FONT> <a name="line.190"></a>
194 <FONT color="green">191</FONT> }<a name="line.191"></a>
195 <FONT color="green">192</FONT> <a name="line.192"></a>
196 <FONT color="green">193</FONT> /** {@inheritDoc} */<a name="line.193"></a>
197 <FONT color="green">194</FONT> public double getNorm() {<a name="line.194"></a>
198 <FONT color="green">195</FONT> return walkInColumnOrder(new RealMatrixPreservingVisitor() {<a name="line.195"></a>
199 <FONT color="green">196</FONT> <a name="line.196"></a>
200 <FONT color="green">197</FONT> /** Last row index. */<a name="line.197"></a>
201 <FONT color="green">198</FONT> private double endRow;<a name="line.198"></a>
202 <FONT color="green">199</FONT> <a name="line.199"></a>
203 <FONT color="green">200</FONT> /** Sum of absolute values on one column. */<a name="line.200"></a>
204 <FONT color="green">201</FONT> private double columnSum;<a name="line.201"></a>
205 <FONT color="green">202</FONT> <a name="line.202"></a>
206 <FONT color="green">203</FONT> /** Maximal sum across all columns. */<a name="line.203"></a>
207 <FONT color="green">204</FONT> private double maxColSum;<a name="line.204"></a>
208 <FONT color="green">205</FONT> <a name="line.205"></a>
209 <FONT color="green">206</FONT> /** {@inheritDoc} */<a name="line.206"></a>
210 <FONT color="green">207</FONT> public void start(final int rows, final int columns,<a name="line.207"></a>
211 <FONT color="green">208</FONT> final int startRow, final int endRow,<a name="line.208"></a>
212 <FONT color="green">209</FONT> final int startColumn, final int endColumn) {<a name="line.209"></a>
213 <FONT color="green">210</FONT> this.endRow = endRow;<a name="line.210"></a>
214 <FONT color="green">211</FONT> columnSum = 0;<a name="line.211"></a>
215 <FONT color="green">212</FONT> maxColSum = 0;<a name="line.212"></a>
216 <FONT color="green">213</FONT> }<a name="line.213"></a>
217 <FONT color="green">214</FONT> <a name="line.214"></a>
218 <FONT color="green">215</FONT> /** {@inheritDoc} */<a name="line.215"></a>
219 <FONT color="green">216</FONT> public void visit(final int row, final int column, final double value) {<a name="line.216"></a>
220 <FONT color="green">217</FONT> columnSum += Math.abs(value);<a name="line.217"></a>
221 <FONT color="green">218</FONT> if (row == endRow) {<a name="line.218"></a>
222 <FONT color="green">219</FONT> maxColSum = Math.max(maxColSum, columnSum);<a name="line.219"></a>
223 <FONT color="green">220</FONT> columnSum = 0;<a name="line.220"></a>
224 <FONT color="green">221</FONT> }<a name="line.221"></a>
225 <FONT color="green">222</FONT> }<a name="line.222"></a>
226 <FONT color="green">223</FONT> <a name="line.223"></a>
227 <FONT color="green">224</FONT> /** {@inheritDoc} */<a name="line.224"></a>
228 <FONT color="green">225</FONT> public double end() {<a name="line.225"></a>
229 <FONT color="green">226</FONT> return maxColSum;<a name="line.226"></a>
230 <FONT color="green">227</FONT> }<a name="line.227"></a>
231 <FONT color="green">228</FONT> <a name="line.228"></a>
232 <FONT color="green">229</FONT> });<a name="line.229"></a>
233 <FONT color="green">230</FONT> }<a name="line.230"></a>
234 <FONT color="green">231</FONT> <a name="line.231"></a>
235 <FONT color="green">232</FONT> /** {@inheritDoc} */<a name="line.232"></a>
236 <FONT color="green">233</FONT> public double getFrobeniusNorm() {<a name="line.233"></a>
237 <FONT color="green">234</FONT> return walkInOptimizedOrder(new RealMatrixPreservingVisitor() {<a name="line.234"></a>
238 <FONT color="green">235</FONT> <a name="line.235"></a>
239 <FONT color="green">236</FONT> /** Sum of squared entries. */<a name="line.236"></a>
240 <FONT color="green">237</FONT> private double sum;<a name="line.237"></a>
241 <FONT color="green">238</FONT> <a name="line.238"></a>
242 <FONT color="green">239</FONT> /** {@inheritDoc} */<a name="line.239"></a>
243 <FONT color="green">240</FONT> public void start(final int rows, final int columns,<a name="line.240"></a>
244 <FONT color="green">241</FONT> final int startRow, final int endRow,<a name="line.241"></a>
245 <FONT color="green">242</FONT> final int startColumn, final int endColumn) {<a name="line.242"></a>
246 <FONT color="green">243</FONT> sum = 0;<a name="line.243"></a>
247 <FONT color="green">244</FONT> }<a name="line.244"></a>
248 <FONT color="green">245</FONT> <a name="line.245"></a>
249 <FONT color="green">246</FONT> /** {@inheritDoc} */<a name="line.246"></a>
250 <FONT color="green">247</FONT> public void visit(final int row, final int column, final double value) {<a name="line.247"></a>
251 <FONT color="green">248</FONT> sum += value * value;<a name="line.248"></a>
252 <FONT color="green">249</FONT> }<a name="line.249"></a>
253 <FONT color="green">250</FONT> <a name="line.250"></a>
254 <FONT color="green">251</FONT> /** {@inheritDoc} */<a name="line.251"></a>
255 <FONT color="green">252</FONT> public double end() {<a name="line.252"></a>
256 <FONT color="green">253</FONT> return Math.sqrt(sum);<a name="line.253"></a>
257 <FONT color="green">254</FONT> }<a name="line.254"></a>
258 <FONT color="green">255</FONT> <a name="line.255"></a>
259 <FONT color="green">256</FONT> });<a name="line.256"></a>
260 <FONT color="green">257</FONT> }<a name="line.257"></a>
261 <FONT color="green">258</FONT> <a name="line.258"></a>
262 <FONT color="green">259</FONT> /** {@inheritDoc} */<a name="line.259"></a>
263 <FONT color="green">260</FONT> public RealMatrix getSubMatrix(final int startRow, final int endRow,<a name="line.260"></a>
264 <FONT color="green">261</FONT> final int startColumn, final int endColumn)<a name="line.261"></a>
265 <FONT color="green">262</FONT> throws MatrixIndexException {<a name="line.262"></a>
266 <FONT color="green">263</FONT> <a name="line.263"></a>
267 <FONT color="green">264</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.264"></a>
268 <FONT color="green">265</FONT> <a name="line.265"></a>
269 <FONT color="green">266</FONT> final RealMatrix subMatrix =<a name="line.266"></a>
270 <FONT color="green">267</FONT> createMatrix(endRow - startRow + 1, endColumn - startColumn + 1);<a name="line.267"></a>
271 <FONT color="green">268</FONT> for (int i = startRow; i &lt;= endRow; ++i) {<a name="line.268"></a>
272 <FONT color="green">269</FONT> for (int j = startColumn; j &lt;= endColumn; ++j) {<a name="line.269"></a>
273 <FONT color="green">270</FONT> subMatrix.setEntry(i - startRow, j - startColumn, getEntry(i, j));<a name="line.270"></a>
274 <FONT color="green">271</FONT> }<a name="line.271"></a>
275 <FONT color="green">272</FONT> }<a name="line.272"></a>
276 <FONT color="green">273</FONT> <a name="line.273"></a>
277 <FONT color="green">274</FONT> return subMatrix;<a name="line.274"></a>
278 <FONT color="green">275</FONT> <a name="line.275"></a>
279 <FONT color="green">276</FONT> }<a name="line.276"></a>
280 <FONT color="green">277</FONT> <a name="line.277"></a>
281 <FONT color="green">278</FONT> /** {@inheritDoc} */<a name="line.278"></a>
282 <FONT color="green">279</FONT> public RealMatrix getSubMatrix(final int[] selectedRows, final int[] selectedColumns)<a name="line.279"></a>
283 <FONT color="green">280</FONT> throws MatrixIndexException {<a name="line.280"></a>
284 <FONT color="green">281</FONT> <a name="line.281"></a>
285 <FONT color="green">282</FONT> // safety checks<a name="line.282"></a>
286 <FONT color="green">283</FONT> MatrixUtils.checkSubMatrixIndex(this, selectedRows, selectedColumns);<a name="line.283"></a>
287 <FONT color="green">284</FONT> <a name="line.284"></a>
288 <FONT color="green">285</FONT> // copy entries<a name="line.285"></a>
289 <FONT color="green">286</FONT> final RealMatrix subMatrix =<a name="line.286"></a>
290 <FONT color="green">287</FONT> createMatrix(selectedRows.length, selectedColumns.length);<a name="line.287"></a>
291 <FONT color="green">288</FONT> subMatrix.walkInOptimizedOrder(new DefaultRealMatrixChangingVisitor() {<a name="line.288"></a>
292 <FONT color="green">289</FONT> <a name="line.289"></a>
293 <FONT color="green">290</FONT> /** {@inheritDoc} */<a name="line.290"></a>
294 <FONT color="green">291</FONT> @Override<a name="line.291"></a>
295 <FONT color="green">292</FONT> public double visit(final int row, final int column, final double value) {<a name="line.292"></a>
296 <FONT color="green">293</FONT> return getEntry(selectedRows[row], selectedColumns[column]);<a name="line.293"></a>
297 <FONT color="green">294</FONT> }<a name="line.294"></a>
298 <FONT color="green">295</FONT> <a name="line.295"></a>
299 <FONT color="green">296</FONT> });<a name="line.296"></a>
300 <FONT color="green">297</FONT> <a name="line.297"></a>
301 <FONT color="green">298</FONT> return subMatrix;<a name="line.298"></a>
302 <FONT color="green">299</FONT> <a name="line.299"></a>
303 <FONT color="green">300</FONT> }<a name="line.300"></a>
304 <FONT color="green">301</FONT> <a name="line.301"></a>
305 <FONT color="green">302</FONT> /** {@inheritDoc} */<a name="line.302"></a>
306 <FONT color="green">303</FONT> public void copySubMatrix(final int startRow, final int endRow,<a name="line.303"></a>
307 <FONT color="green">304</FONT> final int startColumn, final int endColumn,<a name="line.304"></a>
308 <FONT color="green">305</FONT> final double[][] destination)<a name="line.305"></a>
309 <FONT color="green">306</FONT> throws MatrixIndexException, IllegalArgumentException {<a name="line.306"></a>
310 <FONT color="green">307</FONT> <a name="line.307"></a>
311 <FONT color="green">308</FONT> // safety checks<a name="line.308"></a>
312 <FONT color="green">309</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.309"></a>
313 <FONT color="green">310</FONT> final int rowsCount = endRow + 1 - startRow;<a name="line.310"></a>
314 <FONT color="green">311</FONT> final int columnsCount = endColumn + 1 - startColumn;<a name="line.311"></a>
315 <FONT color="green">312</FONT> if ((destination.length &lt; rowsCount) || (destination[0].length &lt; columnsCount)) {<a name="line.312"></a>
316 <FONT color="green">313</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.313"></a>
317 <FONT color="green">314</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.314"></a>
318 <FONT color="green">315</FONT> destination.length, destination[0].length,<a name="line.315"></a>
319 <FONT color="green">316</FONT> rowsCount, columnsCount);<a name="line.316"></a>
320 <FONT color="green">317</FONT> }<a name="line.317"></a>
321 <FONT color="green">318</FONT> <a name="line.318"></a>
322 <FONT color="green">319</FONT> // copy entries<a name="line.319"></a>
323 <FONT color="green">320</FONT> walkInOptimizedOrder(new DefaultRealMatrixPreservingVisitor() {<a name="line.320"></a>
324 <FONT color="green">321</FONT> <a name="line.321"></a>
325 <FONT color="green">322</FONT> /** Initial row index. */<a name="line.322"></a>
326 <FONT color="green">323</FONT> private int startRow;<a name="line.323"></a>
327 <FONT color="green">324</FONT> <a name="line.324"></a>
328 <FONT color="green">325</FONT> /** Initial column index. */<a name="line.325"></a>
329 <FONT color="green">326</FONT> private int startColumn;<a name="line.326"></a>
330 <FONT color="green">327</FONT> <a name="line.327"></a>
331 <FONT color="green">328</FONT> /** {@inheritDoc} */<a name="line.328"></a>
332 <FONT color="green">329</FONT> @Override<a name="line.329"></a>
333 <FONT color="green">330</FONT> public void start(final int rows, final int columns,<a name="line.330"></a>
334 <FONT color="green">331</FONT> final int startRow, final int endRow,<a name="line.331"></a>
335 <FONT color="green">332</FONT> final int startColumn, final int endColumn) {<a name="line.332"></a>
336 <FONT color="green">333</FONT> this.startRow = startRow;<a name="line.333"></a>
337 <FONT color="green">334</FONT> this.startColumn = startColumn;<a name="line.334"></a>
338 <FONT color="green">335</FONT> }<a name="line.335"></a>
339 <FONT color="green">336</FONT> <a name="line.336"></a>
340 <FONT color="green">337</FONT> /** {@inheritDoc} */<a name="line.337"></a>
341 <FONT color="green">338</FONT> @Override<a name="line.338"></a>
342 <FONT color="green">339</FONT> public void visit(final int row, final int column, final double value) {<a name="line.339"></a>
343 <FONT color="green">340</FONT> destination[row - startRow][column - startColumn] = value;<a name="line.340"></a>
344 <FONT color="green">341</FONT> }<a name="line.341"></a>
345 <FONT color="green">342</FONT> <a name="line.342"></a>
346 <FONT color="green">343</FONT> }, startRow, endRow, startColumn, endColumn);<a name="line.343"></a>
347 <FONT color="green">344</FONT> <a name="line.344"></a>
348 <FONT color="green">345</FONT> }<a name="line.345"></a>
349 <FONT color="green">346</FONT> <a name="line.346"></a>
350 <FONT color="green">347</FONT> /** {@inheritDoc} */<a name="line.347"></a>
351 <FONT color="green">348</FONT> public void copySubMatrix(int[] selectedRows, int[] selectedColumns, double[][] destination)<a name="line.348"></a>
352 <FONT color="green">349</FONT> throws MatrixIndexException, IllegalArgumentException {<a name="line.349"></a>
353 <FONT color="green">350</FONT> <a name="line.350"></a>
354 <FONT color="green">351</FONT> // safety checks<a name="line.351"></a>
355 <FONT color="green">352</FONT> MatrixUtils.checkSubMatrixIndex(this, selectedRows, selectedColumns);<a name="line.352"></a>
356 <FONT color="green">353</FONT> if ((destination.length &lt; selectedRows.length) ||<a name="line.353"></a>
357 <FONT color="green">354</FONT> (destination[0].length &lt; selectedColumns.length)) {<a name="line.354"></a>
358 <FONT color="green">355</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.355"></a>
359 <FONT color="green">356</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.356"></a>
360 <FONT color="green">357</FONT> destination.length, destination[0].length,<a name="line.357"></a>
361 <FONT color="green">358</FONT> selectedRows.length, selectedColumns.length);<a name="line.358"></a>
362 <FONT color="green">359</FONT> }<a name="line.359"></a>
363 <FONT color="green">360</FONT> <a name="line.360"></a>
364 <FONT color="green">361</FONT> // copy entries<a name="line.361"></a>
365 <FONT color="green">362</FONT> for (int i = 0; i &lt; selectedRows.length; i++) {<a name="line.362"></a>
366 <FONT color="green">363</FONT> final double[] destinationI = destination[i];<a name="line.363"></a>
367 <FONT color="green">364</FONT> for (int j = 0; j &lt; selectedColumns.length; j++) {<a name="line.364"></a>
368 <FONT color="green">365</FONT> destinationI[j] = getEntry(selectedRows[i], selectedColumns[j]);<a name="line.365"></a>
369 <FONT color="green">366</FONT> }<a name="line.366"></a>
370 <FONT color="green">367</FONT> }<a name="line.367"></a>
371 <FONT color="green">368</FONT> <a name="line.368"></a>
372 <FONT color="green">369</FONT> }<a name="line.369"></a>
373 <FONT color="green">370</FONT> <a name="line.370"></a>
374 <FONT color="green">371</FONT> /** {@inheritDoc} */<a name="line.371"></a>
375 <FONT color="green">372</FONT> public void setSubMatrix(final double[][] subMatrix, final int row, final int column)<a name="line.372"></a>
376 <FONT color="green">373</FONT> throws MatrixIndexException {<a name="line.373"></a>
377 <FONT color="green">374</FONT> <a name="line.374"></a>
378 <FONT color="green">375</FONT> final int nRows = subMatrix.length;<a name="line.375"></a>
379 <FONT color="green">376</FONT> if (nRows == 0) {<a name="line.376"></a>
380 <FONT color="green">377</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one row");<a name="line.377"></a>
381 <FONT color="green">378</FONT> }<a name="line.378"></a>
382 <FONT color="green">379</FONT> <a name="line.379"></a>
383 <FONT color="green">380</FONT> final int nCols = subMatrix[0].length;<a name="line.380"></a>
384 <FONT color="green">381</FONT> if (nCols == 0) {<a name="line.381"></a>
385 <FONT color="green">382</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one column");<a name="line.382"></a>
386 <FONT color="green">383</FONT> }<a name="line.383"></a>
387 <FONT color="green">384</FONT> <a name="line.384"></a>
388 <FONT color="green">385</FONT> for (int r = 1; r &lt; nRows; ++r) {<a name="line.385"></a>
389 <FONT color="green">386</FONT> if (subMatrix[r].length != nCols) {<a name="line.386"></a>
390 <FONT color="green">387</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.387"></a>
391 <FONT color="green">388</FONT> "some rows have length {0} while others have length {1}",<a name="line.388"></a>
392 <FONT color="green">389</FONT> nCols, subMatrix[r].length);<a name="line.389"></a>
393 <FONT color="green">390</FONT> }<a name="line.390"></a>
394 <FONT color="green">391</FONT> }<a name="line.391"></a>
395 <FONT color="green">392</FONT> <a name="line.392"></a>
396 <FONT color="green">393</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.393"></a>
397 <FONT color="green">394</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.394"></a>
398 <FONT color="green">395</FONT> MatrixUtils.checkRowIndex(this, nRows + row - 1);<a name="line.395"></a>
399 <FONT color="green">396</FONT> MatrixUtils.checkColumnIndex(this, nCols + column - 1);<a name="line.396"></a>
400 <FONT color="green">397</FONT> <a name="line.397"></a>
401 <FONT color="green">398</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.398"></a>
402 <FONT color="green">399</FONT> for (int j = 0; j &lt; nCols; ++j) {<a name="line.399"></a>
403 <FONT color="green">400</FONT> setEntry(row + i, column + j, subMatrix[i][j]);<a name="line.400"></a>
404 <FONT color="green">401</FONT> }<a name="line.401"></a>
405 <FONT color="green">402</FONT> }<a name="line.402"></a>
406 <FONT color="green">403</FONT> <a name="line.403"></a>
407 <FONT color="green">404</FONT> lu = null;<a name="line.404"></a>
408 <FONT color="green">405</FONT> <a name="line.405"></a>
409 <FONT color="green">406</FONT> }<a name="line.406"></a>
410 <FONT color="green">407</FONT> <a name="line.407"></a>
411 <FONT color="green">408</FONT> /** {@inheritDoc} */<a name="line.408"></a>
412 <FONT color="green">409</FONT> public RealMatrix getRowMatrix(final int row)<a name="line.409"></a>
413 <FONT color="green">410</FONT> throws MatrixIndexException {<a name="line.410"></a>
414 <FONT color="green">411</FONT> <a name="line.411"></a>
415 <FONT color="green">412</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.412"></a>
416 <FONT color="green">413</FONT> final int nCols = getColumnDimension();<a name="line.413"></a>
417 <FONT color="green">414</FONT> final RealMatrix out = createMatrix(1, nCols);<a name="line.414"></a>
418 <FONT color="green">415</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.415"></a>
419 <FONT color="green">416</FONT> out.setEntry(0, i, getEntry(row, i));<a name="line.416"></a>
420 <FONT color="green">417</FONT> }<a name="line.417"></a>
421 <FONT color="green">418</FONT> <a name="line.418"></a>
422 <FONT color="green">419</FONT> return out;<a name="line.419"></a>
423 <FONT color="green">420</FONT> <a name="line.420"></a>
424 <FONT color="green">421</FONT> }<a name="line.421"></a>
425 <FONT color="green">422</FONT> <a name="line.422"></a>
426 <FONT color="green">423</FONT> /** {@inheritDoc} */<a name="line.423"></a>
427 <FONT color="green">424</FONT> public void setRowMatrix(final int row, final RealMatrix matrix)<a name="line.424"></a>
428 <FONT color="green">425</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.425"></a>
429 <FONT color="green">426</FONT> <a name="line.426"></a>
430 <FONT color="green">427</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.427"></a>
431 <FONT color="green">428</FONT> final int nCols = getColumnDimension();<a name="line.428"></a>
432 <FONT color="green">429</FONT> if ((matrix.getRowDimension() != 1) ||<a name="line.429"></a>
433 <FONT color="green">430</FONT> (matrix.getColumnDimension() != nCols)) {<a name="line.430"></a>
434 <FONT color="green">431</FONT> throw new InvalidMatrixException(<a name="line.431"></a>
435 <FONT color="green">432</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.432"></a>
436 <FONT color="green">433</FONT> matrix.getRowDimension(), matrix.getColumnDimension(), 1, nCols);<a name="line.433"></a>
437 <FONT color="green">434</FONT> }<a name="line.434"></a>
438 <FONT color="green">435</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.435"></a>
439 <FONT color="green">436</FONT> setEntry(row, i, matrix.getEntry(0, i));<a name="line.436"></a>
440 <FONT color="green">437</FONT> }<a name="line.437"></a>
441 <FONT color="green">438</FONT> <a name="line.438"></a>
442 <FONT color="green">439</FONT> }<a name="line.439"></a>
443 <FONT color="green">440</FONT> <a name="line.440"></a>
444 <FONT color="green">441</FONT> /** {@inheritDoc} */<a name="line.441"></a>
445 <FONT color="green">442</FONT> public RealMatrix getColumnMatrix(final int column)<a name="line.442"></a>
446 <FONT color="green">443</FONT> throws MatrixIndexException {<a name="line.443"></a>
447 <FONT color="green">444</FONT> <a name="line.444"></a>
448 <FONT color="green">445</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.445"></a>
449 <FONT color="green">446</FONT> final int nRows = getRowDimension();<a name="line.446"></a>
450 <FONT color="green">447</FONT> final RealMatrix out = createMatrix(nRows, 1);<a name="line.447"></a>
451 <FONT color="green">448</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.448"></a>
452 <FONT color="green">449</FONT> out.setEntry(i, 0, getEntry(i, column));<a name="line.449"></a>
453 <FONT color="green">450</FONT> }<a name="line.450"></a>
454 <FONT color="green">451</FONT> <a name="line.451"></a>
455 <FONT color="green">452</FONT> return out;<a name="line.452"></a>
456 <FONT color="green">453</FONT> <a name="line.453"></a>
457 <FONT color="green">454</FONT> }<a name="line.454"></a>
458 <FONT color="green">455</FONT> <a name="line.455"></a>
459 <FONT color="green">456</FONT> /** {@inheritDoc} */<a name="line.456"></a>
460 <FONT color="green">457</FONT> public void setColumnMatrix(final int column, final RealMatrix matrix)<a name="line.457"></a>
461 <FONT color="green">458</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.458"></a>
462 <FONT color="green">459</FONT> <a name="line.459"></a>
463 <FONT color="green">460</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.460"></a>
464 <FONT color="green">461</FONT> final int nRows = getRowDimension();<a name="line.461"></a>
465 <FONT color="green">462</FONT> if ((matrix.getRowDimension() != nRows) ||<a name="line.462"></a>
466 <FONT color="green">463</FONT> (matrix.getColumnDimension() != 1)) {<a name="line.463"></a>
467 <FONT color="green">464</FONT> throw new InvalidMatrixException(<a name="line.464"></a>
468 <FONT color="green">465</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.465"></a>
469 <FONT color="green">466</FONT> matrix.getRowDimension(), matrix.getColumnDimension(), nRows, 1);<a name="line.466"></a>
470 <FONT color="green">467</FONT> }<a name="line.467"></a>
471 <FONT color="green">468</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.468"></a>
472 <FONT color="green">469</FONT> setEntry(i, column, matrix.getEntry(i, 0));<a name="line.469"></a>
473 <FONT color="green">470</FONT> }<a name="line.470"></a>
474 <FONT color="green">471</FONT> <a name="line.471"></a>
475 <FONT color="green">472</FONT> }<a name="line.472"></a>
476 <FONT color="green">473</FONT> <a name="line.473"></a>
477 <FONT color="green">474</FONT> /** {@inheritDoc} */<a name="line.474"></a>
478 <FONT color="green">475</FONT> public RealVector getRowVector(final int row)<a name="line.475"></a>
479 <FONT color="green">476</FONT> throws MatrixIndexException {<a name="line.476"></a>
480 <FONT color="green">477</FONT> return new ArrayRealVector(getRow(row), false);<a name="line.477"></a>
481 <FONT color="green">478</FONT> }<a name="line.478"></a>
482 <FONT color="green">479</FONT> <a name="line.479"></a>
483 <FONT color="green">480</FONT> /** {@inheritDoc} */<a name="line.480"></a>
484 <FONT color="green">481</FONT> public void setRowVector(final int row, final RealVector vector)<a name="line.481"></a>
485 <FONT color="green">482</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.482"></a>
486 <FONT color="green">483</FONT> <a name="line.483"></a>
487 <FONT color="green">484</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.484"></a>
488 <FONT color="green">485</FONT> final int nCols = getColumnDimension();<a name="line.485"></a>
489 <FONT color="green">486</FONT> if (vector.getDimension() != nCols) {<a name="line.486"></a>
490 <FONT color="green">487</FONT> throw new InvalidMatrixException(<a name="line.487"></a>
491 <FONT color="green">488</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.488"></a>
492 <FONT color="green">489</FONT> 1, vector.getDimension(), 1, nCols);<a name="line.489"></a>
493 <FONT color="green">490</FONT> }<a name="line.490"></a>
494 <FONT color="green">491</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.491"></a>
495 <FONT color="green">492</FONT> setEntry(row, i, vector.getEntry(i));<a name="line.492"></a>
496 <FONT color="green">493</FONT> }<a name="line.493"></a>
497 <FONT color="green">494</FONT> <a name="line.494"></a>
498 <FONT color="green">495</FONT> }<a name="line.495"></a>
499 <FONT color="green">496</FONT> <a name="line.496"></a>
500 <FONT color="green">497</FONT> /** {@inheritDoc} */<a name="line.497"></a>
501 <FONT color="green">498</FONT> public RealVector getColumnVector(final int column)<a name="line.498"></a>
502 <FONT color="green">499</FONT> throws MatrixIndexException {<a name="line.499"></a>
503 <FONT color="green">500</FONT> return new ArrayRealVector(getColumn(column), false);<a name="line.500"></a>
504 <FONT color="green">501</FONT> }<a name="line.501"></a>
505 <FONT color="green">502</FONT> <a name="line.502"></a>
506 <FONT color="green">503</FONT> /** {@inheritDoc} */<a name="line.503"></a>
507 <FONT color="green">504</FONT> public void setColumnVector(final int column, final RealVector vector)<a name="line.504"></a>
508 <FONT color="green">505</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.505"></a>
509 <FONT color="green">506</FONT> <a name="line.506"></a>
510 <FONT color="green">507</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.507"></a>
511 <FONT color="green">508</FONT> final int nRows = getRowDimension();<a name="line.508"></a>
512 <FONT color="green">509</FONT> if (vector.getDimension() != nRows) {<a name="line.509"></a>
513 <FONT color="green">510</FONT> throw new InvalidMatrixException(<a name="line.510"></a>
514 <FONT color="green">511</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.511"></a>
515 <FONT color="green">512</FONT> vector.getDimension(), 1, nRows, 1);<a name="line.512"></a>
516 <FONT color="green">513</FONT> }<a name="line.513"></a>
517 <FONT color="green">514</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.514"></a>
518 <FONT color="green">515</FONT> setEntry(i, column, vector.getEntry(i));<a name="line.515"></a>
519 <FONT color="green">516</FONT> }<a name="line.516"></a>
520 <FONT color="green">517</FONT> <a name="line.517"></a>
521 <FONT color="green">518</FONT> }<a name="line.518"></a>
522 <FONT color="green">519</FONT> <a name="line.519"></a>
523 <FONT color="green">520</FONT> /** {@inheritDoc} */<a name="line.520"></a>
524 <FONT color="green">521</FONT> public double[] getRow(final int row)<a name="line.521"></a>
525 <FONT color="green">522</FONT> throws MatrixIndexException {<a name="line.522"></a>
526 <FONT color="green">523</FONT> <a name="line.523"></a>
527 <FONT color="green">524</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.524"></a>
528 <FONT color="green">525</FONT> final int nCols = getColumnDimension();<a name="line.525"></a>
529 <FONT color="green">526</FONT> final double[] out = new double[nCols];<a name="line.526"></a>
530 <FONT color="green">527</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.527"></a>
531 <FONT color="green">528</FONT> out[i] = getEntry(row, i);<a name="line.528"></a>
532 <FONT color="green">529</FONT> }<a name="line.529"></a>
533 <FONT color="green">530</FONT> <a name="line.530"></a>
534 <FONT color="green">531</FONT> return out;<a name="line.531"></a>
535 <FONT color="green">532</FONT> <a name="line.532"></a>
536 <FONT color="green">533</FONT> }<a name="line.533"></a>
537 <FONT color="green">534</FONT> <a name="line.534"></a>
538 <FONT color="green">535</FONT> /** {@inheritDoc} */<a name="line.535"></a>
539 <FONT color="green">536</FONT> public void setRow(final int row, final double[] array)<a name="line.536"></a>
540 <FONT color="green">537</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.537"></a>
541 <FONT color="green">538</FONT> <a name="line.538"></a>
542 <FONT color="green">539</FONT> MatrixUtils.checkRowIndex(this, row);<a name="line.539"></a>
543 <FONT color="green">540</FONT> final int nCols = getColumnDimension();<a name="line.540"></a>
544 <FONT color="green">541</FONT> if (array.length != nCols) {<a name="line.541"></a>
545 <FONT color="green">542</FONT> throw new InvalidMatrixException(<a name="line.542"></a>
546 <FONT color="green">543</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.543"></a>
547 <FONT color="green">544</FONT> 1, array.length, 1, nCols);<a name="line.544"></a>
548 <FONT color="green">545</FONT> }<a name="line.545"></a>
549 <FONT color="green">546</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.546"></a>
550 <FONT color="green">547</FONT> setEntry(row, i, array[i]);<a name="line.547"></a>
551 <FONT color="green">548</FONT> }<a name="line.548"></a>
552 <FONT color="green">549</FONT> <a name="line.549"></a>
553 <FONT color="green">550</FONT> }<a name="line.550"></a>
554 <FONT color="green">551</FONT> <a name="line.551"></a>
555 <FONT color="green">552</FONT> /** {@inheritDoc} */<a name="line.552"></a>
556 <FONT color="green">553</FONT> public double[] getColumn(final int column)<a name="line.553"></a>
557 <FONT color="green">554</FONT> throws MatrixIndexException {<a name="line.554"></a>
558 <FONT color="green">555</FONT> <a name="line.555"></a>
559 <FONT color="green">556</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.556"></a>
560 <FONT color="green">557</FONT> final int nRows = getRowDimension();<a name="line.557"></a>
561 <FONT color="green">558</FONT> final double[] out = new double[nRows];<a name="line.558"></a>
562 <FONT color="green">559</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.559"></a>
563 <FONT color="green">560</FONT> out[i] = getEntry(i, column);<a name="line.560"></a>
564 <FONT color="green">561</FONT> }<a name="line.561"></a>
565 <FONT color="green">562</FONT> <a name="line.562"></a>
566 <FONT color="green">563</FONT> return out;<a name="line.563"></a>
567 <FONT color="green">564</FONT> <a name="line.564"></a>
568 <FONT color="green">565</FONT> }<a name="line.565"></a>
569 <FONT color="green">566</FONT> <a name="line.566"></a>
570 <FONT color="green">567</FONT> /** {@inheritDoc} */<a name="line.567"></a>
571 <FONT color="green">568</FONT> public void setColumn(final int column, final double[] array)<a name="line.568"></a>
572 <FONT color="green">569</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.569"></a>
573 <FONT color="green">570</FONT> <a name="line.570"></a>
574 <FONT color="green">571</FONT> MatrixUtils.checkColumnIndex(this, column);<a name="line.571"></a>
575 <FONT color="green">572</FONT> final int nRows = getRowDimension();<a name="line.572"></a>
576 <FONT color="green">573</FONT> if (array.length != nRows) {<a name="line.573"></a>
577 <FONT color="green">574</FONT> throw new InvalidMatrixException(<a name="line.574"></a>
578 <FONT color="green">575</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.575"></a>
579 <FONT color="green">576</FONT> array.length, 1, nRows, 1);<a name="line.576"></a>
580 <FONT color="green">577</FONT> }<a name="line.577"></a>
581 <FONT color="green">578</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.578"></a>
582 <FONT color="green">579</FONT> setEntry(i, column, array[i]);<a name="line.579"></a>
583 <FONT color="green">580</FONT> }<a name="line.580"></a>
584 <FONT color="green">581</FONT> <a name="line.581"></a>
585 <FONT color="green">582</FONT> }<a name="line.582"></a>
586 <FONT color="green">583</FONT> <a name="line.583"></a>
587 <FONT color="green">584</FONT> /** {@inheritDoc} */<a name="line.584"></a>
588 <FONT color="green">585</FONT> public abstract double getEntry(int row, int column)<a name="line.585"></a>
589 <FONT color="green">586</FONT> throws MatrixIndexException;<a name="line.586"></a>
590 <FONT color="green">587</FONT> <a name="line.587"></a>
591 <FONT color="green">588</FONT> /** {@inheritDoc} */<a name="line.588"></a>
592 <FONT color="green">589</FONT> public abstract void setEntry(int row, int column, double value)<a name="line.589"></a>
593 <FONT color="green">590</FONT> throws MatrixIndexException;<a name="line.590"></a>
594 <FONT color="green">591</FONT> <a name="line.591"></a>
595 <FONT color="green">592</FONT> /** {@inheritDoc} */<a name="line.592"></a>
596 <FONT color="green">593</FONT> public abstract void addToEntry(int row, int column, double increment)<a name="line.593"></a>
597 <FONT color="green">594</FONT> throws MatrixIndexException;<a name="line.594"></a>
598 <FONT color="green">595</FONT> <a name="line.595"></a>
599 <FONT color="green">596</FONT> /** {@inheritDoc} */<a name="line.596"></a>
600 <FONT color="green">597</FONT> public abstract void multiplyEntry(int row, int column, double factor)<a name="line.597"></a>
601 <FONT color="green">598</FONT> throws MatrixIndexException;<a name="line.598"></a>
602 <FONT color="green">599</FONT> <a name="line.599"></a>
603 <FONT color="green">600</FONT> /** {@inheritDoc} */<a name="line.600"></a>
604 <FONT color="green">601</FONT> public RealMatrix transpose() {<a name="line.601"></a>
605 <FONT color="green">602</FONT> <a name="line.602"></a>
606 <FONT color="green">603</FONT> final int nRows = getRowDimension();<a name="line.603"></a>
607 <FONT color="green">604</FONT> final int nCols = getColumnDimension();<a name="line.604"></a>
608 <FONT color="green">605</FONT> final RealMatrix out = createMatrix(nCols, nRows);<a name="line.605"></a>
609 <FONT color="green">606</FONT> walkInOptimizedOrder(new DefaultRealMatrixPreservingVisitor() {<a name="line.606"></a>
610 <FONT color="green">607</FONT> <a name="line.607"></a>
611 <FONT color="green">608</FONT> /** {@inheritDoc} */<a name="line.608"></a>
612 <FONT color="green">609</FONT> @Override<a name="line.609"></a>
613 <FONT color="green">610</FONT> public void visit(final int row, final int column, final double value) {<a name="line.610"></a>
614 <FONT color="green">611</FONT> out.setEntry(column, row, value);<a name="line.611"></a>
615 <FONT color="green">612</FONT> }<a name="line.612"></a>
616 <FONT color="green">613</FONT> <a name="line.613"></a>
617 <FONT color="green">614</FONT> });<a name="line.614"></a>
618 <FONT color="green">615</FONT> <a name="line.615"></a>
619 <FONT color="green">616</FONT> return out;<a name="line.616"></a>
620 <FONT color="green">617</FONT> <a name="line.617"></a>
621 <FONT color="green">618</FONT> }<a name="line.618"></a>
622 <FONT color="green">619</FONT> <a name="line.619"></a>
623 <FONT color="green">620</FONT> /** {@inheritDoc} */<a name="line.620"></a>
624 <FONT color="green">621</FONT> @Deprecated<a name="line.621"></a>
625 <FONT color="green">622</FONT> public RealMatrix inverse()<a name="line.622"></a>
626 <FONT color="green">623</FONT> throws InvalidMatrixException {<a name="line.623"></a>
627 <FONT color="green">624</FONT> if (lu == null) {<a name="line.624"></a>
628 <FONT color="green">625</FONT> lu = new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getSolver();<a name="line.625"></a>
629 <FONT color="green">626</FONT> }<a name="line.626"></a>
630 <FONT color="green">627</FONT> return lu.getInverse();<a name="line.627"></a>
631 <FONT color="green">628</FONT> }<a name="line.628"></a>
632 <FONT color="green">629</FONT> <a name="line.629"></a>
633 <FONT color="green">630</FONT> /** {@inheritDoc} */<a name="line.630"></a>
634 <FONT color="green">631</FONT> @Deprecated<a name="line.631"></a>
635 <FONT color="green">632</FONT> public double getDeterminant()<a name="line.632"></a>
636 <FONT color="green">633</FONT> throws InvalidMatrixException {<a name="line.633"></a>
637 <FONT color="green">634</FONT> return new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getDeterminant();<a name="line.634"></a>
638 <FONT color="green">635</FONT> }<a name="line.635"></a>
639 <FONT color="green">636</FONT> <a name="line.636"></a>
640 <FONT color="green">637</FONT> /** {@inheritDoc} */<a name="line.637"></a>
641 <FONT color="green">638</FONT> public boolean isSquare() {<a name="line.638"></a>
642 <FONT color="green">639</FONT> return getColumnDimension() == getRowDimension();<a name="line.639"></a>
643 <FONT color="green">640</FONT> }<a name="line.640"></a>
644 <FONT color="green">641</FONT> <a name="line.641"></a>
645 <FONT color="green">642</FONT> /** {@inheritDoc} */<a name="line.642"></a>
646 <FONT color="green">643</FONT> @Deprecated<a name="line.643"></a>
647 <FONT color="green">644</FONT> public boolean isSingular() {<a name="line.644"></a>
648 <FONT color="green">645</FONT> if (lu == null) {<a name="line.645"></a>
649 <FONT color="green">646</FONT> lu = new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getSolver();<a name="line.646"></a>
650 <FONT color="green">647</FONT> }<a name="line.647"></a>
651 <FONT color="green">648</FONT> return !lu.isNonSingular();<a name="line.648"></a>
652 <FONT color="green">649</FONT> }<a name="line.649"></a>
653 <FONT color="green">650</FONT> <a name="line.650"></a>
654 <FONT color="green">651</FONT> /** {@inheritDoc} */<a name="line.651"></a>
655 <FONT color="green">652</FONT> public abstract int getRowDimension();<a name="line.652"></a>
656 <FONT color="green">653</FONT> <a name="line.653"></a>
657 <FONT color="green">654</FONT> /** {@inheritDoc} */<a name="line.654"></a>
658 <FONT color="green">655</FONT> public abstract int getColumnDimension();<a name="line.655"></a>
659 <FONT color="green">656</FONT> <a name="line.656"></a>
660 <FONT color="green">657</FONT> /** {@inheritDoc} */<a name="line.657"></a>
661 <FONT color="green">658</FONT> public double getTrace()<a name="line.658"></a>
662 <FONT color="green">659</FONT> throws NonSquareMatrixException {<a name="line.659"></a>
663 <FONT color="green">660</FONT> final int nRows = getRowDimension();<a name="line.660"></a>
664 <FONT color="green">661</FONT> final int nCols = getColumnDimension();<a name="line.661"></a>
665 <FONT color="green">662</FONT> if (nRows != nCols) {<a name="line.662"></a>
666 <FONT color="green">663</FONT> throw new NonSquareMatrixException(nRows, nCols);<a name="line.663"></a>
667 <FONT color="green">664</FONT> }<a name="line.664"></a>
668 <FONT color="green">665</FONT> double trace = 0;<a name="line.665"></a>
669 <FONT color="green">666</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.666"></a>
670 <FONT color="green">667</FONT> trace += getEntry(i, i);<a name="line.667"></a>
671 <FONT color="green">668</FONT> }<a name="line.668"></a>
672 <FONT color="green">669</FONT> return trace;<a name="line.669"></a>
673 <FONT color="green">670</FONT> }<a name="line.670"></a>
674 <FONT color="green">671</FONT> <a name="line.671"></a>
675 <FONT color="green">672</FONT> /** {@inheritDoc} */<a name="line.672"></a>
676 <FONT color="green">673</FONT> public double[] operate(final double[] v)<a name="line.673"></a>
677 <FONT color="green">674</FONT> throws IllegalArgumentException {<a name="line.674"></a>
678 <FONT color="green">675</FONT> <a name="line.675"></a>
679 <FONT color="green">676</FONT> final int nRows = getRowDimension();<a name="line.676"></a>
680 <FONT color="green">677</FONT> final int nCols = getColumnDimension();<a name="line.677"></a>
681 <FONT color="green">678</FONT> if (v.length != nCols) {<a name="line.678"></a>
682 <FONT color="green">679</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.679"></a>
683 <FONT color="green">680</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.680"></a>
684 <FONT color="green">681</FONT> v.length, nCols);<a name="line.681"></a>
685 <FONT color="green">682</FONT> }<a name="line.682"></a>
686 <FONT color="green">683</FONT> <a name="line.683"></a>
687 <FONT color="green">684</FONT> final double[] out = new double[nRows];<a name="line.684"></a>
688 <FONT color="green">685</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.685"></a>
689 <FONT color="green">686</FONT> double sum = 0;<a name="line.686"></a>
690 <FONT color="green">687</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.687"></a>
691 <FONT color="green">688</FONT> sum += getEntry(row, i) * v[i];<a name="line.688"></a>
692 <FONT color="green">689</FONT> }<a name="line.689"></a>
693 <FONT color="green">690</FONT> out[row] = sum;<a name="line.690"></a>
694 <FONT color="green">691</FONT> }<a name="line.691"></a>
695 <FONT color="green">692</FONT> <a name="line.692"></a>
696 <FONT color="green">693</FONT> return out;<a name="line.693"></a>
697 <FONT color="green">694</FONT> <a name="line.694"></a>
698 <FONT color="green">695</FONT> }<a name="line.695"></a>
699 <FONT color="green">696</FONT> <a name="line.696"></a>
700 <FONT color="green">697</FONT> /** {@inheritDoc} */<a name="line.697"></a>
701 <FONT color="green">698</FONT> public RealVector operate(final RealVector v)<a name="line.698"></a>
702 <FONT color="green">699</FONT> throws IllegalArgumentException {<a name="line.699"></a>
703 <FONT color="green">700</FONT> try {<a name="line.700"></a>
704 <FONT color="green">701</FONT> return new ArrayRealVector(operate(((ArrayRealVector) v).getDataRef()), false);<a name="line.701"></a>
705 <FONT color="green">702</FONT> } catch (ClassCastException cce) {<a name="line.702"></a>
706 <FONT color="green">703</FONT> final int nRows = getRowDimension();<a name="line.703"></a>
707 <FONT color="green">704</FONT> final int nCols = getColumnDimension();<a name="line.704"></a>
708 <FONT color="green">705</FONT> if (v.getDimension() != nCols) {<a name="line.705"></a>
709 <FONT color="green">706</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.706"></a>
710 <FONT color="green">707</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.707"></a>
711 <FONT color="green">708</FONT> v.getDimension(), nCols);<a name="line.708"></a>
712 <FONT color="green">709</FONT> }<a name="line.709"></a>
713 <FONT color="green">710</FONT> <a name="line.710"></a>
714 <FONT color="green">711</FONT> final double[] out = new double[nRows];<a name="line.711"></a>
715 <FONT color="green">712</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.712"></a>
716 <FONT color="green">713</FONT> double sum = 0;<a name="line.713"></a>
717 <FONT color="green">714</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.714"></a>
718 <FONT color="green">715</FONT> sum += getEntry(row, i) * v.getEntry(i);<a name="line.715"></a>
719 <FONT color="green">716</FONT> }<a name="line.716"></a>
720 <FONT color="green">717</FONT> out[row] = sum;<a name="line.717"></a>
721 <FONT color="green">718</FONT> }<a name="line.718"></a>
722 <FONT color="green">719</FONT> <a name="line.719"></a>
723 <FONT color="green">720</FONT> return new ArrayRealVector(out, false);<a name="line.720"></a>
724 <FONT color="green">721</FONT> }<a name="line.721"></a>
725 <FONT color="green">722</FONT> }<a name="line.722"></a>
726 <FONT color="green">723</FONT> <a name="line.723"></a>
727 <FONT color="green">724</FONT> /** {@inheritDoc} */<a name="line.724"></a>
728 <FONT color="green">725</FONT> public double[] preMultiply(final double[] v)<a name="line.725"></a>
729 <FONT color="green">726</FONT> throws IllegalArgumentException {<a name="line.726"></a>
730 <FONT color="green">727</FONT> <a name="line.727"></a>
731 <FONT color="green">728</FONT> final int nRows = getRowDimension();<a name="line.728"></a>
732 <FONT color="green">729</FONT> final int nCols = getColumnDimension();<a name="line.729"></a>
733 <FONT color="green">730</FONT> if (v.length != nRows) {<a name="line.730"></a>
734 <FONT color="green">731</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.731"></a>
735 <FONT color="green">732</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.732"></a>
736 <FONT color="green">733</FONT> v.length, nRows);<a name="line.733"></a>
737 <FONT color="green">734</FONT> }<a name="line.734"></a>
738 <FONT color="green">735</FONT> <a name="line.735"></a>
739 <FONT color="green">736</FONT> final double[] out = new double[nCols];<a name="line.736"></a>
740 <FONT color="green">737</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.737"></a>
741 <FONT color="green">738</FONT> double sum = 0;<a name="line.738"></a>
742 <FONT color="green">739</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.739"></a>
743 <FONT color="green">740</FONT> sum += getEntry(i, col) * v[i];<a name="line.740"></a>
744 <FONT color="green">741</FONT> }<a name="line.741"></a>
745 <FONT color="green">742</FONT> out[col] = sum;<a name="line.742"></a>
746 <FONT color="green">743</FONT> }<a name="line.743"></a>
747 <FONT color="green">744</FONT> <a name="line.744"></a>
748 <FONT color="green">745</FONT> return out;<a name="line.745"></a>
749 <FONT color="green">746</FONT> <a name="line.746"></a>
750 <FONT color="green">747</FONT> }<a name="line.747"></a>
751 <FONT color="green">748</FONT> <a name="line.748"></a>
752 <FONT color="green">749</FONT> /** {@inheritDoc} */<a name="line.749"></a>
753 <FONT color="green">750</FONT> public RealVector preMultiply(final RealVector v)<a name="line.750"></a>
754 <FONT color="green">751</FONT> throws IllegalArgumentException {<a name="line.751"></a>
755 <FONT color="green">752</FONT> try {<a name="line.752"></a>
756 <FONT color="green">753</FONT> return new ArrayRealVector(preMultiply(((ArrayRealVector) v).getDataRef()), false);<a name="line.753"></a>
757 <FONT color="green">754</FONT> } catch (ClassCastException cce) {<a name="line.754"></a>
758 <FONT color="green">755</FONT> <a name="line.755"></a>
759 <FONT color="green">756</FONT> final int nRows = getRowDimension();<a name="line.756"></a>
760 <FONT color="green">757</FONT> final int nCols = getColumnDimension();<a name="line.757"></a>
761 <FONT color="green">758</FONT> if (v.getDimension() != nRows) {<a name="line.758"></a>
762 <FONT color="green">759</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.759"></a>
763 <FONT color="green">760</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.760"></a>
764 <FONT color="green">761</FONT> v.getDimension(), nRows);<a name="line.761"></a>
765 <FONT color="green">762</FONT> }<a name="line.762"></a>
766 <FONT color="green">763</FONT> <a name="line.763"></a>
767 <FONT color="green">764</FONT> final double[] out = new double[nCols];<a name="line.764"></a>
768 <FONT color="green">765</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.765"></a>
769 <FONT color="green">766</FONT> double sum = 0;<a name="line.766"></a>
770 <FONT color="green">767</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.767"></a>
771 <FONT color="green">768</FONT> sum += getEntry(i, col) * v.getEntry(i);<a name="line.768"></a>
772 <FONT color="green">769</FONT> }<a name="line.769"></a>
773 <FONT color="green">770</FONT> out[col] = sum;<a name="line.770"></a>
774 <FONT color="green">771</FONT> }<a name="line.771"></a>
775 <FONT color="green">772</FONT> <a name="line.772"></a>
776 <FONT color="green">773</FONT> return new ArrayRealVector(out);<a name="line.773"></a>
777 <FONT color="green">774</FONT> <a name="line.774"></a>
778 <FONT color="green">775</FONT> }<a name="line.775"></a>
779 <FONT color="green">776</FONT> }<a name="line.776"></a>
780 <FONT color="green">777</FONT> <a name="line.777"></a>
781 <FONT color="green">778</FONT> /** {@inheritDoc} */<a name="line.778"></a>
782 <FONT color="green">779</FONT> public double walkInRowOrder(final RealMatrixChangingVisitor visitor)<a name="line.779"></a>
783 <FONT color="green">780</FONT> throws MatrixVisitorException {<a name="line.780"></a>
784 <FONT color="green">781</FONT> final int rows = getRowDimension();<a name="line.781"></a>
785 <FONT color="green">782</FONT> final int columns = getColumnDimension();<a name="line.782"></a>
786 <FONT color="green">783</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.783"></a>
787 <FONT color="green">784</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.784"></a>
788 <FONT color="green">785</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.785"></a>
789 <FONT color="green">786</FONT> final double oldValue = getEntry(row, column);<a name="line.786"></a>
790 <FONT color="green">787</FONT> final double newValue = visitor.visit(row, column, oldValue);<a name="line.787"></a>
791 <FONT color="green">788</FONT> setEntry(row, column, newValue);<a name="line.788"></a>
792 <FONT color="green">789</FONT> }<a name="line.789"></a>
793 <FONT color="green">790</FONT> }<a name="line.790"></a>
794 <FONT color="green">791</FONT> lu = null;<a name="line.791"></a>
795 <FONT color="green">792</FONT> return visitor.end();<a name="line.792"></a>
796 <FONT color="green">793</FONT> }<a name="line.793"></a>
797 <FONT color="green">794</FONT> <a name="line.794"></a>
798 <FONT color="green">795</FONT> /** {@inheritDoc} */<a name="line.795"></a>
799 <FONT color="green">796</FONT> public double walkInRowOrder(final RealMatrixPreservingVisitor visitor)<a name="line.796"></a>
800 <FONT color="green">797</FONT> throws MatrixVisitorException {<a name="line.797"></a>
801 <FONT color="green">798</FONT> final int rows = getRowDimension();<a name="line.798"></a>
802 <FONT color="green">799</FONT> final int columns = getColumnDimension();<a name="line.799"></a>
803 <FONT color="green">800</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.800"></a>
804 <FONT color="green">801</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.801"></a>
805 <FONT color="green">802</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.802"></a>
806 <FONT color="green">803</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.803"></a>
807 <FONT color="green">804</FONT> }<a name="line.804"></a>
808 <FONT color="green">805</FONT> }<a name="line.805"></a>
809 <FONT color="green">806</FONT> return visitor.end();<a name="line.806"></a>
810 <FONT color="green">807</FONT> }<a name="line.807"></a>
811 <FONT color="green">808</FONT> <a name="line.808"></a>
812 <FONT color="green">809</FONT> /** {@inheritDoc} */<a name="line.809"></a>
813 <FONT color="green">810</FONT> public double walkInRowOrder(final RealMatrixChangingVisitor visitor,<a name="line.810"></a>
814 <FONT color="green">811</FONT> final int startRow, final int endRow,<a name="line.811"></a>
815 <FONT color="green">812</FONT> final int startColumn, final int endColumn)<a name="line.812"></a>
816 <FONT color="green">813</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.813"></a>
817 <FONT color="green">814</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.814"></a>
818 <FONT color="green">815</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.815"></a>
819 <FONT color="green">816</FONT> startRow, endRow, startColumn, endColumn);<a name="line.816"></a>
820 <FONT color="green">817</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.817"></a>
821 <FONT color="green">818</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.818"></a>
822 <FONT color="green">819</FONT> final double oldValue = getEntry(row, column);<a name="line.819"></a>
823 <FONT color="green">820</FONT> final double newValue = visitor.visit(row, column, oldValue);<a name="line.820"></a>
824 <FONT color="green">821</FONT> setEntry(row, column, newValue);<a name="line.821"></a>
825 <FONT color="green">822</FONT> }<a name="line.822"></a>
826 <FONT color="green">823</FONT> }<a name="line.823"></a>
827 <FONT color="green">824</FONT> lu = null;<a name="line.824"></a>
828 <FONT color="green">825</FONT> return visitor.end();<a name="line.825"></a>
829 <FONT color="green">826</FONT> }<a name="line.826"></a>
830 <FONT color="green">827</FONT> <a name="line.827"></a>
831 <FONT color="green">828</FONT> /** {@inheritDoc} */<a name="line.828"></a>
832 <FONT color="green">829</FONT> public double walkInRowOrder(final RealMatrixPreservingVisitor visitor,<a name="line.829"></a>
833 <FONT color="green">830</FONT> final int startRow, final int endRow,<a name="line.830"></a>
834 <FONT color="green">831</FONT> final int startColumn, final int endColumn)<a name="line.831"></a>
835 <FONT color="green">832</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.832"></a>
836 <FONT color="green">833</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.833"></a>
837 <FONT color="green">834</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.834"></a>
838 <FONT color="green">835</FONT> startRow, endRow, startColumn, endColumn);<a name="line.835"></a>
839 <FONT color="green">836</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.836"></a>
840 <FONT color="green">837</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.837"></a>
841 <FONT color="green">838</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.838"></a>
842 <FONT color="green">839</FONT> }<a name="line.839"></a>
843 <FONT color="green">840</FONT> }<a name="line.840"></a>
844 <FONT color="green">841</FONT> return visitor.end();<a name="line.841"></a>
845 <FONT color="green">842</FONT> }<a name="line.842"></a>
846 <FONT color="green">843</FONT> <a name="line.843"></a>
847 <FONT color="green">844</FONT> /** {@inheritDoc} */<a name="line.844"></a>
848 <FONT color="green">845</FONT> public double walkInColumnOrder(final RealMatrixChangingVisitor visitor)<a name="line.845"></a>
849 <FONT color="green">846</FONT> throws MatrixVisitorException {<a name="line.846"></a>
850 <FONT color="green">847</FONT> final int rows = getRowDimension();<a name="line.847"></a>
851 <FONT color="green">848</FONT> final int columns = getColumnDimension();<a name="line.848"></a>
852 <FONT color="green">849</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.849"></a>
853 <FONT color="green">850</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.850"></a>
854 <FONT color="green">851</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.851"></a>
855 <FONT color="green">852</FONT> final double oldValue = getEntry(row, column);<a name="line.852"></a>
856 <FONT color="green">853</FONT> final double newValue = visitor.visit(row, column, oldValue);<a name="line.853"></a>
857 <FONT color="green">854</FONT> setEntry(row, column, newValue);<a name="line.854"></a>
858 <FONT color="green">855</FONT> }<a name="line.855"></a>
859 <FONT color="green">856</FONT> }<a name="line.856"></a>
860 <FONT color="green">857</FONT> lu = null;<a name="line.857"></a>
861 <FONT color="green">858</FONT> return visitor.end();<a name="line.858"></a>
862 <FONT color="green">859</FONT> }<a name="line.859"></a>
863 <FONT color="green">860</FONT> <a name="line.860"></a>
864 <FONT color="green">861</FONT> /** {@inheritDoc} */<a name="line.861"></a>
865 <FONT color="green">862</FONT> public double walkInColumnOrder(final RealMatrixPreservingVisitor visitor)<a name="line.862"></a>
866 <FONT color="green">863</FONT> throws MatrixVisitorException {<a name="line.863"></a>
867 <FONT color="green">864</FONT> final int rows = getRowDimension();<a name="line.864"></a>
868 <FONT color="green">865</FONT> final int columns = getColumnDimension();<a name="line.865"></a>
869 <FONT color="green">866</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.866"></a>
870 <FONT color="green">867</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.867"></a>
871 <FONT color="green">868</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.868"></a>
872 <FONT color="green">869</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.869"></a>
873 <FONT color="green">870</FONT> }<a name="line.870"></a>
874 <FONT color="green">871</FONT> }<a name="line.871"></a>
875 <FONT color="green">872</FONT> return visitor.end();<a name="line.872"></a>
876 <FONT color="green">873</FONT> }<a name="line.873"></a>
877 <FONT color="green">874</FONT> <a name="line.874"></a>
878 <FONT color="green">875</FONT> /** {@inheritDoc} */<a name="line.875"></a>
879 <FONT color="green">876</FONT> public double walkInColumnOrder(final RealMatrixChangingVisitor visitor,<a name="line.876"></a>
880 <FONT color="green">877</FONT> final int startRow, final int endRow,<a name="line.877"></a>
881 <FONT color="green">878</FONT> final int startColumn, final int endColumn)<a name="line.878"></a>
882 <FONT color="green">879</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.879"></a>
883 <FONT color="green">880</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.880"></a>
884 <FONT color="green">881</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.881"></a>
885 <FONT color="green">882</FONT> startRow, endRow, startColumn, endColumn);<a name="line.882"></a>
886 <FONT color="green">883</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.883"></a>
887 <FONT color="green">884</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.884"></a>
888 <FONT color="green">885</FONT> final double oldValue = getEntry(row, column);<a name="line.885"></a>
889 <FONT color="green">886</FONT> final double newValue = visitor.visit(row, column, oldValue);<a name="line.886"></a>
890 <FONT color="green">887</FONT> setEntry(row, column, newValue);<a name="line.887"></a>
891 <FONT color="green">888</FONT> }<a name="line.888"></a>
892 <FONT color="green">889</FONT> }<a name="line.889"></a>
893 <FONT color="green">890</FONT> lu = null;<a name="line.890"></a>
894 <FONT color="green">891</FONT> return visitor.end();<a name="line.891"></a>
895 <FONT color="green">892</FONT> }<a name="line.892"></a>
896 <FONT color="green">893</FONT> <a name="line.893"></a>
897 <FONT color="green">894</FONT> /** {@inheritDoc} */<a name="line.894"></a>
898 <FONT color="green">895</FONT> public double walkInColumnOrder(final RealMatrixPreservingVisitor visitor,<a name="line.895"></a>
899 <FONT color="green">896</FONT> final int startRow, final int endRow,<a name="line.896"></a>
900 <FONT color="green">897</FONT> final int startColumn, final int endColumn)<a name="line.897"></a>
901 <FONT color="green">898</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.898"></a>
902 <FONT color="green">899</FONT> MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);<a name="line.899"></a>
903 <FONT color="green">900</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.900"></a>
904 <FONT color="green">901</FONT> startRow, endRow, startColumn, endColumn);<a name="line.901"></a>
905 <FONT color="green">902</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.902"></a>
906 <FONT color="green">903</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.903"></a>
907 <FONT color="green">904</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.904"></a>
908 <FONT color="green">905</FONT> }<a name="line.905"></a>
909 <FONT color="green">906</FONT> }<a name="line.906"></a>
910 <FONT color="green">907</FONT> return visitor.end();<a name="line.907"></a>
911 <FONT color="green">908</FONT> }<a name="line.908"></a>
912 <FONT color="green">909</FONT> <a name="line.909"></a>
913 <FONT color="green">910</FONT> /** {@inheritDoc} */<a name="line.910"></a>
914 <FONT color="green">911</FONT> public double walkInOptimizedOrder(final RealMatrixChangingVisitor visitor)<a name="line.911"></a>
915 <FONT color="green">912</FONT> throws MatrixVisitorException {<a name="line.912"></a>
916 <FONT color="green">913</FONT> return walkInRowOrder(visitor);<a name="line.913"></a>
917 <FONT color="green">914</FONT> }<a name="line.914"></a>
918 <FONT color="green">915</FONT> <a name="line.915"></a>
919 <FONT color="green">916</FONT> /** {@inheritDoc} */<a name="line.916"></a>
920 <FONT color="green">917</FONT> public double walkInOptimizedOrder(final RealMatrixPreservingVisitor visitor)<a name="line.917"></a>
921 <FONT color="green">918</FONT> throws MatrixVisitorException {<a name="line.918"></a>
922 <FONT color="green">919</FONT> return walkInRowOrder(visitor);<a name="line.919"></a>
923 <FONT color="green">920</FONT> }<a name="line.920"></a>
924 <FONT color="green">921</FONT> <a name="line.921"></a>
925 <FONT color="green">922</FONT> /** {@inheritDoc} */<a name="line.922"></a>
926 <FONT color="green">923</FONT> public double walkInOptimizedOrder(final RealMatrixChangingVisitor visitor,<a name="line.923"></a>
927 <FONT color="green">924</FONT> final int startRow, final int endRow,<a name="line.924"></a>
928 <FONT color="green">925</FONT> final int startColumn, final int endColumn)<a name="line.925"></a>
929 <FONT color="green">926</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.926"></a>
930 <FONT color="green">927</FONT> return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);<a name="line.927"></a>
931 <FONT color="green">928</FONT> }<a name="line.928"></a>
932 <FONT color="green">929</FONT> <a name="line.929"></a>
933 <FONT color="green">930</FONT> /** {@inheritDoc} */<a name="line.930"></a>
934 <FONT color="green">931</FONT> public double walkInOptimizedOrder(final RealMatrixPreservingVisitor visitor,<a name="line.931"></a>
935 <FONT color="green">932</FONT> final int startRow, final int endRow,<a name="line.932"></a>
936 <FONT color="green">933</FONT> final int startColumn, final int endColumn)<a name="line.933"></a>
937 <FONT color="green">934</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.934"></a>
938 <FONT color="green">935</FONT> return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);<a name="line.935"></a>
939 <FONT color="green">936</FONT> }<a name="line.936"></a>
940 <FONT color="green">937</FONT> <a name="line.937"></a>
941 <FONT color="green">938</FONT> /** {@inheritDoc} */<a name="line.938"></a>
942 <FONT color="green">939</FONT> @Deprecated<a name="line.939"></a>
943 <FONT color="green">940</FONT> public double[] solve(final double[] b)<a name="line.940"></a>
944 <FONT color="green">941</FONT> throws IllegalArgumentException, InvalidMatrixException {<a name="line.941"></a>
945 <FONT color="green">942</FONT> if (lu == null) {<a name="line.942"></a>
946 <FONT color="green">943</FONT> lu = new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getSolver();<a name="line.943"></a>
947 <FONT color="green">944</FONT> }<a name="line.944"></a>
948 <FONT color="green">945</FONT> return lu.solve(b);<a name="line.945"></a>
949 <FONT color="green">946</FONT> }<a name="line.946"></a>
950 <FONT color="green">947</FONT> <a name="line.947"></a>
951 <FONT color="green">948</FONT> /** {@inheritDoc} */<a name="line.948"></a>
952 <FONT color="green">949</FONT> @Deprecated<a name="line.949"></a>
953 <FONT color="green">950</FONT> public RealMatrix solve(final RealMatrix b)<a name="line.950"></a>
954 <FONT color="green">951</FONT> throws IllegalArgumentException, InvalidMatrixException {<a name="line.951"></a>
955 <FONT color="green">952</FONT> if (lu == null) {<a name="line.952"></a>
956 <FONT color="green">953</FONT> lu = new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getSolver();<a name="line.953"></a>
957 <FONT color="green">954</FONT> }<a name="line.954"></a>
958 <FONT color="green">955</FONT> return lu.solve(b);<a name="line.955"></a>
959 <FONT color="green">956</FONT> }<a name="line.956"></a>
960 <FONT color="green">957</FONT> <a name="line.957"></a>
961 <FONT color="green">958</FONT> /**<a name="line.958"></a>
962 <FONT color="green">959</FONT> * Computes a new<a name="line.959"></a>
963 <FONT color="green">960</FONT> * &lt;a href="http://www.math.gatech.edu/~bourbaki/math2601/Web-notes/2num.pdf"&gt;<a name="line.960"></a>
964 <FONT color="green">961</FONT> * LU decomposition&lt;/a&gt; for this matrix, storing the result for use by other methods.<a name="line.961"></a>
965 <FONT color="green">962</FONT> * &lt;p&gt;<a name="line.962"></a>
966 <FONT color="green">963</FONT> * &lt;strong&gt;Implementation Note&lt;/strong&gt;:&lt;br&gt;<a name="line.963"></a>
967 <FONT color="green">964</FONT> * Uses &lt;a href="http://www.damtp.cam.ac.uk/user/fdl/people/sd/lectures/nummeth98/linear.htm"&gt;<a name="line.964"></a>
968 <FONT color="green">965</FONT> * Crout's algorithm&lt;/a&gt;, with partial pivoting.&lt;/p&gt;<a name="line.965"></a>
969 <FONT color="green">966</FONT> * &lt;p&gt;<a name="line.966"></a>
970 <FONT color="green">967</FONT> * &lt;strong&gt;Usage Note&lt;/strong&gt;:&lt;br&gt;<a name="line.967"></a>
971 <FONT color="green">968</FONT> * This method should rarely be invoked directly. Its only use is<a name="line.968"></a>
972 <FONT color="green">969</FONT> * to force recomputation of the LU decomposition when changes have been<a name="line.969"></a>
973 <FONT color="green">970</FONT> * made to the underlying data using direct array references. Changes<a name="line.970"></a>
974 <FONT color="green">971</FONT> * made using setXxx methods will trigger recomputation when needed<a name="line.971"></a>
975 <FONT color="green">972</FONT> * automatically.&lt;/p&gt;<a name="line.972"></a>
976 <FONT color="green">973</FONT> *<a name="line.973"></a>
977 <FONT color="green">974</FONT> * @throws InvalidMatrixException if the matrix is non-square or singular.<a name="line.974"></a>
978 <FONT color="green">975</FONT> * @deprecated as of release 2.0, replaced by {@link LUDecomposition}<a name="line.975"></a>
979 <FONT color="green">976</FONT> */<a name="line.976"></a>
980 <FONT color="green">977</FONT> @Deprecated<a name="line.977"></a>
981 <FONT color="green">978</FONT> public void luDecompose()<a name="line.978"></a>
982 <FONT color="green">979</FONT> throws InvalidMatrixException {<a name="line.979"></a>
983 <FONT color="green">980</FONT> if (lu == null) {<a name="line.980"></a>
984 <FONT color="green">981</FONT> lu = new LUDecompositionImpl(this, MathUtils.SAFE_MIN).getSolver();<a name="line.981"></a>
985 <FONT color="green">982</FONT> }<a name="line.982"></a>
986 <FONT color="green">983</FONT> }<a name="line.983"></a>
987 <FONT color="green">984</FONT> <a name="line.984"></a>
988 <FONT color="green">985</FONT> /**<a name="line.985"></a>
989 <FONT color="green">986</FONT> * Get a string representation for this matrix.<a name="line.986"></a>
990 <FONT color="green">987</FONT> * @return a string representation for this matrix<a name="line.987"></a>
991 <FONT color="green">988</FONT> */<a name="line.988"></a>
992 <FONT color="green">989</FONT> @Override<a name="line.989"></a>
993 <FONT color="green">990</FONT> public String toString() {<a name="line.990"></a>
994 <FONT color="green">991</FONT> final int nRows = getRowDimension();<a name="line.991"></a>
995 <FONT color="green">992</FONT> final int nCols = getColumnDimension();<a name="line.992"></a>
996 <FONT color="green">993</FONT> final StringBuffer res = new StringBuffer();<a name="line.993"></a>
997 <FONT color="green">994</FONT> String fullClassName = getClass().getName();<a name="line.994"></a>
998 <FONT color="green">995</FONT> String shortClassName = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);<a name="line.995"></a>
999 <FONT color="green">996</FONT> res.append(shortClassName).append("{");<a name="line.996"></a>
1000 <FONT color="green">997</FONT> <a name="line.997"></a>
1001 <FONT color="green">998</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.998"></a>
1002 <FONT color="green">999</FONT> if (i &gt; 0) {<a name="line.999"></a>
1003 <FONT color="green">1000</FONT> res.append(",");<a name="line.1000"></a>
1004 <FONT color="green">1001</FONT> }<a name="line.1001"></a>
1005 <FONT color="green">1002</FONT> res.append("{");<a name="line.1002"></a>
1006 <FONT color="green">1003</FONT> for (int j = 0; j &lt; nCols; ++j) {<a name="line.1003"></a>
1007 <FONT color="green">1004</FONT> if (j &gt; 0) {<a name="line.1004"></a>
1008 <FONT color="green">1005</FONT> res.append(",");<a name="line.1005"></a>
1009 <FONT color="green">1006</FONT> }<a name="line.1006"></a>
1010 <FONT color="green">1007</FONT> res.append(getEntry(i, j));<a name="line.1007"></a>
1011 <FONT color="green">1008</FONT> }<a name="line.1008"></a>
1012 <FONT color="green">1009</FONT> res.append("}");<a name="line.1009"></a>
1013 <FONT color="green">1010</FONT> }<a name="line.1010"></a>
1014 <FONT color="green">1011</FONT> <a name="line.1011"></a>
1015 <FONT color="green">1012</FONT> res.append("}");<a name="line.1012"></a>
1016 <FONT color="green">1013</FONT> return res.toString();<a name="line.1013"></a>
1017 <FONT color="green">1014</FONT> <a name="line.1014"></a>
1018 <FONT color="green">1015</FONT> }<a name="line.1015"></a>
1019 <FONT color="green">1016</FONT> <a name="line.1016"></a>
1020 <FONT color="green">1017</FONT> /**<a name="line.1017"></a>
1021 <FONT color="green">1018</FONT> * Returns true iff &lt;code&gt;object&lt;/code&gt; is a<a name="line.1018"></a>
1022 <FONT color="green">1019</FONT> * &lt;code&gt;RealMatrix&lt;/code&gt; instance with the same dimensions as this<a name="line.1019"></a>
1023 <FONT color="green">1020</FONT> * and all corresponding matrix entries are equal.<a name="line.1020"></a>
1024 <FONT color="green">1021</FONT> *<a name="line.1021"></a>
1025 <FONT color="green">1022</FONT> * @param object the object to test equality against.<a name="line.1022"></a>
1026 <FONT color="green">1023</FONT> * @return true if object equals this<a name="line.1023"></a>
1027 <FONT color="green">1024</FONT> */<a name="line.1024"></a>
1028 <FONT color="green">1025</FONT> @Override<a name="line.1025"></a>
1029 <FONT color="green">1026</FONT> public boolean equals(final Object object) {<a name="line.1026"></a>
1030 <FONT color="green">1027</FONT> if (object == this ) {<a name="line.1027"></a>
1031 <FONT color="green">1028</FONT> return true;<a name="line.1028"></a>
1032 <FONT color="green">1029</FONT> }<a name="line.1029"></a>
1033 <FONT color="green">1030</FONT> if (object instanceof RealMatrix == false) {<a name="line.1030"></a>
1034 <FONT color="green">1031</FONT> return false;<a name="line.1031"></a>
1035 <FONT color="green">1032</FONT> }<a name="line.1032"></a>
1036 <FONT color="green">1033</FONT> RealMatrix m = (RealMatrix) object;<a name="line.1033"></a>
1037 <FONT color="green">1034</FONT> final int nRows = getRowDimension();<a name="line.1034"></a>
1038 <FONT color="green">1035</FONT> final int nCols = getColumnDimension();<a name="line.1035"></a>
1039 <FONT color="green">1036</FONT> if (m.getColumnDimension() != nCols || m.getRowDimension() != nRows) {<a name="line.1036"></a>
1040 <FONT color="green">1037</FONT> return false;<a name="line.1037"></a>
1041 <FONT color="green">1038</FONT> }<a name="line.1038"></a>
1042 <FONT color="green">1039</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.1039"></a>
1043 <FONT color="green">1040</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.1040"></a>
1044 <FONT color="green">1041</FONT> if (getEntry(row, col) != m.getEntry(row, col)) {<a name="line.1041"></a>
1045 <FONT color="green">1042</FONT> return false;<a name="line.1042"></a>
1046 <FONT color="green">1043</FONT> }<a name="line.1043"></a>
1047 <FONT color="green">1044</FONT> }<a name="line.1044"></a>
1048 <FONT color="green">1045</FONT> }<a name="line.1045"></a>
1049 <FONT color="green">1046</FONT> return true;<a name="line.1046"></a>
1050 <FONT color="green">1047</FONT> }<a name="line.1047"></a>
1051 <FONT color="green">1048</FONT> <a name="line.1048"></a>
1052 <FONT color="green">1049</FONT> /**<a name="line.1049"></a>
1053 <FONT color="green">1050</FONT> * Computes a hashcode for the matrix.<a name="line.1050"></a>
1054 <FONT color="green">1051</FONT> *<a name="line.1051"></a>
1055 <FONT color="green">1052</FONT> * @return hashcode for matrix<a name="line.1052"></a>
1056 <FONT color="green">1053</FONT> */<a name="line.1053"></a>
1057 <FONT color="green">1054</FONT> @Override<a name="line.1054"></a>
1058 <FONT color="green">1055</FONT> public int hashCode() {<a name="line.1055"></a>
1059 <FONT color="green">1056</FONT> int ret = 7;<a name="line.1056"></a>
1060 <FONT color="green">1057</FONT> final int nRows = getRowDimension();<a name="line.1057"></a>
1061 <FONT color="green">1058</FONT> final int nCols = getColumnDimension();<a name="line.1058"></a>
1062 <FONT color="green">1059</FONT> ret = ret * 31 + nRows;<a name="line.1059"></a>
1063 <FONT color="green">1060</FONT> ret = ret * 31 + nCols;<a name="line.1060"></a>
1064 <FONT color="green">1061</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.1061"></a>
1065 <FONT color="green">1062</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.1062"></a>
1066 <FONT color="green">1063</FONT> ret = ret * 31 + (11 * (row+1) + 17 * (col+1)) *<a name="line.1063"></a>
1067 <FONT color="green">1064</FONT> MathUtils.hash(getEntry(row, col));<a name="line.1064"></a>
1068 <FONT color="green">1065</FONT> }<a name="line.1065"></a>
1069 <FONT color="green">1066</FONT> }<a name="line.1066"></a>
1070 <FONT color="green">1067</FONT> return ret;<a name="line.1067"></a>
1071 <FONT color="green">1068</FONT> }<a name="line.1068"></a>
1072 <FONT color="green">1069</FONT> <a name="line.1069"></a>
1073 <FONT color="green">1070</FONT> }<a name="line.1070"></a>
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134 </PRE>
1135 </BODY>
1136 </HTML>