comparison libs/commons-math-2.1/docs/apidocs/src-html/org/apache/commons/math/linear/AbstractFieldMatrix.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 java.lang.reflect.Array;<a name="line.20"></a>
24 <FONT color="green">021</FONT> import java.util.Arrays;<a name="line.21"></a>
25 <FONT color="green">022</FONT> <a name="line.22"></a>
26 <FONT color="green">023</FONT> import org.apache.commons.math.Field;<a name="line.23"></a>
27 <FONT color="green">024</FONT> import org.apache.commons.math.FieldElement;<a name="line.24"></a>
28 <FONT color="green">025</FONT> import org.apache.commons.math.MathRuntimeException;<a name="line.25"></a>
29 <FONT color="green">026</FONT> <a name="line.26"></a>
30 <FONT color="green">027</FONT> /**<a name="line.27"></a>
31 <FONT color="green">028</FONT> * Basic implementation of {@link FieldMatrix} methods regardless of the underlying storage.<a name="line.28"></a>
32 <FONT color="green">029</FONT> * &lt;p&gt;All the methods implemented here use {@link #getEntry(int, int)} to access<a name="line.29"></a>
33 <FONT color="green">030</FONT> * matrix elements. Derived class can provide faster implementations. &lt;/p&gt;<a name="line.30"></a>
34 <FONT color="green">031</FONT> *<a name="line.31"></a>
35 <FONT color="green">032</FONT> * @param &lt;T&gt; the type of the field elements<a name="line.32"></a>
36 <FONT color="green">033</FONT> * @version $Revision: 903046 $ $Date: 2010-01-25 21:07:26 -0500 (Mon, 25 Jan 2010) $<a name="line.33"></a>
37 <FONT color="green">034</FONT> * @since 2.0<a name="line.34"></a>
38 <FONT color="green">035</FONT> */<a name="line.35"></a>
39 <FONT color="green">036</FONT> public abstract class AbstractFieldMatrix&lt;T extends FieldElement&lt;T&gt;&gt; implements FieldMatrix&lt;T&gt; {<a name="line.36"></a>
40 <FONT color="green">037</FONT> <a name="line.37"></a>
41 <FONT color="green">038</FONT> /** Field to which the elements belong. */<a name="line.38"></a>
42 <FONT color="green">039</FONT> private final Field&lt;T&gt; field;<a name="line.39"></a>
43 <FONT color="green">040</FONT> <a name="line.40"></a>
44 <FONT color="green">041</FONT> /**<a name="line.41"></a>
45 <FONT color="green">042</FONT> * Constructor for use with Serializable<a name="line.42"></a>
46 <FONT color="green">043</FONT> */<a name="line.43"></a>
47 <FONT color="green">044</FONT> protected AbstractFieldMatrix() {<a name="line.44"></a>
48 <FONT color="green">045</FONT> field = null;<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> /**<a name="line.48"></a>
52 <FONT color="green">049</FONT> * Creates a matrix with no data<a name="line.49"></a>
53 <FONT color="green">050</FONT> * @param field field to which the elements belong<a name="line.50"></a>
54 <FONT color="green">051</FONT> */<a name="line.51"></a>
55 <FONT color="green">052</FONT> protected AbstractFieldMatrix(final Field&lt;T&gt; field) {<a name="line.52"></a>
56 <FONT color="green">053</FONT> this.field = field;<a name="line.53"></a>
57 <FONT color="green">054</FONT> }<a name="line.54"></a>
58 <FONT color="green">055</FONT> <a name="line.55"></a>
59 <FONT color="green">056</FONT> /**<a name="line.56"></a>
60 <FONT color="green">057</FONT> * Create a new FieldMatrix&lt;T&gt; with the supplied row and column dimensions.<a name="line.57"></a>
61 <FONT color="green">058</FONT> *<a name="line.58"></a>
62 <FONT color="green">059</FONT> * @param field field to which the elements belong<a name="line.59"></a>
63 <FONT color="green">060</FONT> * @param rowDimension the number of rows in the new matrix<a name="line.60"></a>
64 <FONT color="green">061</FONT> * @param columnDimension the number of columns in the new matrix<a name="line.61"></a>
65 <FONT color="green">062</FONT> * @throws IllegalArgumentException if row or column dimension is not positive<a name="line.62"></a>
66 <FONT color="green">063</FONT> */<a name="line.63"></a>
67 <FONT color="green">064</FONT> protected AbstractFieldMatrix(final Field&lt;T&gt; field,<a name="line.64"></a>
68 <FONT color="green">065</FONT> final int rowDimension, final int columnDimension)<a name="line.65"></a>
69 <FONT color="green">066</FONT> throws IllegalArgumentException {<a name="line.66"></a>
70 <FONT color="green">067</FONT> if (rowDimension &lt;= 0 ) {<a name="line.67"></a>
71 <FONT color="green">068</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.68"></a>
72 <FONT color="green">069</FONT> "invalid row dimension {0} (must be positive)",<a name="line.69"></a>
73 <FONT color="green">070</FONT> rowDimension);<a name="line.70"></a>
74 <FONT color="green">071</FONT> }<a name="line.71"></a>
75 <FONT color="green">072</FONT> if (columnDimension &lt;= 0) {<a name="line.72"></a>
76 <FONT color="green">073</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.73"></a>
77 <FONT color="green">074</FONT> "invalid column dimension {0} (must be positive)",<a name="line.74"></a>
78 <FONT color="green">075</FONT> columnDimension);<a name="line.75"></a>
79 <FONT color="green">076</FONT> }<a name="line.76"></a>
80 <FONT color="green">077</FONT> this.field = field;<a name="line.77"></a>
81 <FONT color="green">078</FONT> }<a name="line.78"></a>
82 <FONT color="green">079</FONT> <a name="line.79"></a>
83 <FONT color="green">080</FONT> /**<a name="line.80"></a>
84 <FONT color="green">081</FONT> * Get the elements type from an array.<a name="line.81"></a>
85 <FONT color="green">082</FONT> * @param &lt;T&gt; the type of the field elements<a name="line.82"></a>
86 <FONT color="green">083</FONT> * @param d data array<a name="line.83"></a>
87 <FONT color="green">084</FONT> * @return field to which array elements belong<a name="line.84"></a>
88 <FONT color="green">085</FONT> * @exception IllegalArgumentException if array is empty<a name="line.85"></a>
89 <FONT color="green">086</FONT> */<a name="line.86"></a>
90 <FONT color="green">087</FONT> protected static &lt;T extends FieldElement&lt;T&gt;&gt; Field&lt;T&gt; extractField(final T[][] d)<a name="line.87"></a>
91 <FONT color="green">088</FONT> throws IllegalArgumentException {<a name="line.88"></a>
92 <FONT color="green">089</FONT> if (d.length == 0) {<a name="line.89"></a>
93 <FONT color="green">090</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one row");<a name="line.90"></a>
94 <FONT color="green">091</FONT> }<a name="line.91"></a>
95 <FONT color="green">092</FONT> if (d[0].length == 0) {<a name="line.92"></a>
96 <FONT color="green">093</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one column");<a name="line.93"></a>
97 <FONT color="green">094</FONT> }<a name="line.94"></a>
98 <FONT color="green">095</FONT> return d[0][0].getField();<a name="line.95"></a>
99 <FONT color="green">096</FONT> }<a name="line.96"></a>
100 <FONT color="green">097</FONT> <a name="line.97"></a>
101 <FONT color="green">098</FONT> /**<a name="line.98"></a>
102 <FONT color="green">099</FONT> * Get the elements type from an array.<a name="line.99"></a>
103 <FONT color="green">100</FONT> * @param &lt;T&gt; the type of the field elements<a name="line.100"></a>
104 <FONT color="green">101</FONT> * @param d data array<a name="line.101"></a>
105 <FONT color="green">102</FONT> * @return field to which array elements belong<a name="line.102"></a>
106 <FONT color="green">103</FONT> * @exception IllegalArgumentException if array is empty<a name="line.103"></a>
107 <FONT color="green">104</FONT> */<a name="line.104"></a>
108 <FONT color="green">105</FONT> protected static &lt;T extends FieldElement&lt;T&gt;&gt; Field&lt;T&gt; extractField(final T[] d)<a name="line.105"></a>
109 <FONT color="green">106</FONT> throws IllegalArgumentException {<a name="line.106"></a>
110 <FONT color="green">107</FONT> if (d.length == 0) {<a name="line.107"></a>
111 <FONT color="green">108</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one row");<a name="line.108"></a>
112 <FONT color="green">109</FONT> }<a name="line.109"></a>
113 <FONT color="green">110</FONT> return d[0].getField();<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> /** Build an array of elements.<a name="line.113"></a>
117 <FONT color="green">114</FONT> * &lt;p&gt;<a name="line.114"></a>
118 <FONT color="green">115</FONT> * Complete arrays are filled with field.getZero()<a name="line.115"></a>
119 <FONT color="green">116</FONT> * &lt;/p&gt;<a name="line.116"></a>
120 <FONT color="green">117</FONT> * @param &lt;T&gt; the type of the field elements<a name="line.117"></a>
121 <FONT color="green">118</FONT> * @param field field to which array elements belong<a name="line.118"></a>
122 <FONT color="green">119</FONT> * @param rows number of rows<a name="line.119"></a>
123 <FONT color="green">120</FONT> * @param columns number of columns (may be negative to build partial<a name="line.120"></a>
124 <FONT color="green">121</FONT> * arrays in the same way &lt;code&gt;new Field[rows][]&lt;/code&gt; works)<a name="line.121"></a>
125 <FONT color="green">122</FONT> * @return a new array<a name="line.122"></a>
126 <FONT color="green">123</FONT> */<a name="line.123"></a>
127 <FONT color="green">124</FONT> @SuppressWarnings("unchecked")<a name="line.124"></a>
128 <FONT color="green">125</FONT> protected static &lt;T extends FieldElement&lt;T&gt;&gt; T[][] buildArray(final Field&lt;T&gt; field,<a name="line.125"></a>
129 <FONT color="green">126</FONT> final int rows,<a name="line.126"></a>
130 <FONT color="green">127</FONT> final int columns) {<a name="line.127"></a>
131 <FONT color="green">128</FONT> if (columns &lt; 0) {<a name="line.128"></a>
132 <FONT color="green">129</FONT> T[] dummyRow = (T[]) Array.newInstance(field.getZero().getClass(), 0);<a name="line.129"></a>
133 <FONT color="green">130</FONT> return (T[][]) Array.newInstance(dummyRow.getClass(), rows);<a name="line.130"></a>
134 <FONT color="green">131</FONT> }<a name="line.131"></a>
135 <FONT color="green">132</FONT> T[][] array =<a name="line.132"></a>
136 <FONT color="green">133</FONT> (T[][]) Array.newInstance(field.getZero().getClass(), new int[] { rows, columns });<a name="line.133"></a>
137 <FONT color="green">134</FONT> for (int i = 0; i &lt; array.length; ++i) {<a name="line.134"></a>
138 <FONT color="green">135</FONT> Arrays.fill(array[i], field.getZero());<a name="line.135"></a>
139 <FONT color="green">136</FONT> }<a name="line.136"></a>
140 <FONT color="green">137</FONT> return array;<a name="line.137"></a>
141 <FONT color="green">138</FONT> }<a name="line.138"></a>
142 <FONT color="green">139</FONT> <a name="line.139"></a>
143 <FONT color="green">140</FONT> /** Build an array of elements.<a name="line.140"></a>
144 <FONT color="green">141</FONT> * &lt;p&gt;<a name="line.141"></a>
145 <FONT color="green">142</FONT> * Arrays are filled with field.getZero()<a name="line.142"></a>
146 <FONT color="green">143</FONT> * &lt;/p&gt;<a name="line.143"></a>
147 <FONT color="green">144</FONT> * @param &lt;T&gt; the type of the field elements<a name="line.144"></a>
148 <FONT color="green">145</FONT> * @param field field to which array elements belong<a name="line.145"></a>
149 <FONT color="green">146</FONT> * @param length of the array<a name="line.146"></a>
150 <FONT color="green">147</FONT> * @return a new array<a name="line.147"></a>
151 <FONT color="green">148</FONT> */<a name="line.148"></a>
152 <FONT color="green">149</FONT> protected static &lt;T extends FieldElement&lt;T&gt;&gt; T[] buildArray(final Field&lt;T&gt; field,<a name="line.149"></a>
153 <FONT color="green">150</FONT> final int length) {<a name="line.150"></a>
154 <FONT color="green">151</FONT> @SuppressWarnings("unchecked") // OK because field must be correct class<a name="line.151"></a>
155 <FONT color="green">152</FONT> T[] array = (T[]) Array.newInstance(field.getZero().getClass(), length);<a name="line.152"></a>
156 <FONT color="green">153</FONT> Arrays.fill(array, field.getZero());<a name="line.153"></a>
157 <FONT color="green">154</FONT> return array;<a name="line.154"></a>
158 <FONT color="green">155</FONT> }<a name="line.155"></a>
159 <FONT color="green">156</FONT> <a name="line.156"></a>
160 <FONT color="green">157</FONT> /** {@inheritDoc} */<a name="line.157"></a>
161 <FONT color="green">158</FONT> public Field&lt;T&gt; getField() {<a name="line.158"></a>
162 <FONT color="green">159</FONT> return field;<a name="line.159"></a>
163 <FONT color="green">160</FONT> }<a name="line.160"></a>
164 <FONT color="green">161</FONT> <a name="line.161"></a>
165 <FONT color="green">162</FONT> /** {@inheritDoc} */<a name="line.162"></a>
166 <FONT color="green">163</FONT> public abstract FieldMatrix&lt;T&gt; createMatrix(final int rowDimension, final int columnDimension)<a name="line.163"></a>
167 <FONT color="green">164</FONT> throws IllegalArgumentException;<a name="line.164"></a>
168 <FONT color="green">165</FONT> <a name="line.165"></a>
169 <FONT color="green">166</FONT> /** {@inheritDoc} */<a name="line.166"></a>
170 <FONT color="green">167</FONT> public abstract FieldMatrix&lt;T&gt; copy();<a name="line.167"></a>
171 <FONT color="green">168</FONT> <a name="line.168"></a>
172 <FONT color="green">169</FONT> /** {@inheritDoc} */<a name="line.169"></a>
173 <FONT color="green">170</FONT> public FieldMatrix&lt;T&gt; add(FieldMatrix&lt;T&gt; m) throws IllegalArgumentException {<a name="line.170"></a>
174 <FONT color="green">171</FONT> <a name="line.171"></a>
175 <FONT color="green">172</FONT> // safety check<a name="line.172"></a>
176 <FONT color="green">173</FONT> checkAdditionCompatible(m);<a name="line.173"></a>
177 <FONT color="green">174</FONT> <a name="line.174"></a>
178 <FONT color="green">175</FONT> final int rowCount = getRowDimension();<a name="line.175"></a>
179 <FONT color="green">176</FONT> final int columnCount = getColumnDimension();<a name="line.176"></a>
180 <FONT color="green">177</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(rowCount, columnCount);<a name="line.177"></a>
181 <FONT color="green">178</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.178"></a>
182 <FONT color="green">179</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.179"></a>
183 <FONT color="green">180</FONT> out.setEntry(row, col, getEntry(row, col).add(m.getEntry(row, col)));<a name="line.180"></a>
184 <FONT color="green">181</FONT> }<a name="line.181"></a>
185 <FONT color="green">182</FONT> }<a name="line.182"></a>
186 <FONT color="green">183</FONT> <a name="line.183"></a>
187 <FONT color="green">184</FONT> return out;<a name="line.184"></a>
188 <FONT color="green">185</FONT> <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> /** {@inheritDoc} */<a name="line.188"></a>
192 <FONT color="green">189</FONT> public FieldMatrix&lt;T&gt; subtract(final FieldMatrix&lt;T&gt; m) throws IllegalArgumentException {<a name="line.189"></a>
193 <FONT color="green">190</FONT> <a name="line.190"></a>
194 <FONT color="green">191</FONT> // safety check<a name="line.191"></a>
195 <FONT color="green">192</FONT> checkSubtractionCompatible(m);<a name="line.192"></a>
196 <FONT color="green">193</FONT> <a name="line.193"></a>
197 <FONT color="green">194</FONT> final int rowCount = getRowDimension();<a name="line.194"></a>
198 <FONT color="green">195</FONT> final int columnCount = getColumnDimension();<a name="line.195"></a>
199 <FONT color="green">196</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(rowCount, columnCount);<a name="line.196"></a>
200 <FONT color="green">197</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.197"></a>
201 <FONT color="green">198</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.198"></a>
202 <FONT color="green">199</FONT> out.setEntry(row, col, getEntry(row, col).subtract(m.getEntry(row, col)));<a name="line.199"></a>
203 <FONT color="green">200</FONT> }<a name="line.200"></a>
204 <FONT color="green">201</FONT> }<a name="line.201"></a>
205 <FONT color="green">202</FONT> <a name="line.202"></a>
206 <FONT color="green">203</FONT> return out;<a name="line.203"></a>
207 <FONT color="green">204</FONT> <a name="line.204"></a>
208 <FONT color="green">205</FONT> }<a name="line.205"></a>
209 <FONT color="green">206</FONT> <a name="line.206"></a>
210 <FONT color="green">207</FONT> /** {@inheritDoc} */<a name="line.207"></a>
211 <FONT color="green">208</FONT> public FieldMatrix&lt;T&gt; scalarAdd(final T d) {<a name="line.208"></a>
212 <FONT color="green">209</FONT> <a name="line.209"></a>
213 <FONT color="green">210</FONT> final int rowCount = getRowDimension();<a name="line.210"></a>
214 <FONT color="green">211</FONT> final int columnCount = getColumnDimension();<a name="line.211"></a>
215 <FONT color="green">212</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(rowCount, columnCount);<a name="line.212"></a>
216 <FONT color="green">213</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.213"></a>
217 <FONT color="green">214</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.214"></a>
218 <FONT color="green">215</FONT> out.setEntry(row, col, getEntry(row, col).add(d));<a name="line.215"></a>
219 <FONT color="green">216</FONT> }<a name="line.216"></a>
220 <FONT color="green">217</FONT> }<a name="line.217"></a>
221 <FONT color="green">218</FONT> <a name="line.218"></a>
222 <FONT color="green">219</FONT> return out;<a name="line.219"></a>
223 <FONT color="green">220</FONT> <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> /** {@inheritDoc} */<a name="line.223"></a>
227 <FONT color="green">224</FONT> public FieldMatrix&lt;T&gt; scalarMultiply(final T d) {<a name="line.224"></a>
228 <FONT color="green">225</FONT> <a name="line.225"></a>
229 <FONT color="green">226</FONT> final int rowCount = getRowDimension();<a name="line.226"></a>
230 <FONT color="green">227</FONT> final int columnCount = getColumnDimension();<a name="line.227"></a>
231 <FONT color="green">228</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(rowCount, columnCount);<a name="line.228"></a>
232 <FONT color="green">229</FONT> for (int row = 0; row &lt; rowCount; ++row) {<a name="line.229"></a>
233 <FONT color="green">230</FONT> for (int col = 0; col &lt; columnCount; ++col) {<a name="line.230"></a>
234 <FONT color="green">231</FONT> out.setEntry(row, col, getEntry(row, col).multiply(d));<a name="line.231"></a>
235 <FONT color="green">232</FONT> }<a name="line.232"></a>
236 <FONT color="green">233</FONT> }<a name="line.233"></a>
237 <FONT color="green">234</FONT> <a name="line.234"></a>
238 <FONT color="green">235</FONT> return out;<a name="line.235"></a>
239 <FONT color="green">236</FONT> <a name="line.236"></a>
240 <FONT color="green">237</FONT> }<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 FieldMatrix&lt;T&gt; multiply(final FieldMatrix&lt;T&gt; m)<a name="line.240"></a>
244 <FONT color="green">241</FONT> throws IllegalArgumentException {<a name="line.241"></a>
245 <FONT color="green">242</FONT> <a name="line.242"></a>
246 <FONT color="green">243</FONT> // safety check<a name="line.243"></a>
247 <FONT color="green">244</FONT> checkMultiplicationCompatible(m);<a name="line.244"></a>
248 <FONT color="green">245</FONT> <a name="line.245"></a>
249 <FONT color="green">246</FONT> final int nRows = getRowDimension();<a name="line.246"></a>
250 <FONT color="green">247</FONT> final int nCols = m.getColumnDimension();<a name="line.247"></a>
251 <FONT color="green">248</FONT> final int nSum = getColumnDimension();<a name="line.248"></a>
252 <FONT color="green">249</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(nRows, nCols);<a name="line.249"></a>
253 <FONT color="green">250</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.250"></a>
254 <FONT color="green">251</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.251"></a>
255 <FONT color="green">252</FONT> T sum = field.getZero();<a name="line.252"></a>
256 <FONT color="green">253</FONT> for (int i = 0; i &lt; nSum; ++i) {<a name="line.253"></a>
257 <FONT color="green">254</FONT> sum = sum.add(getEntry(row, i).multiply(m.getEntry(i, col)));<a name="line.254"></a>
258 <FONT color="green">255</FONT> }<a name="line.255"></a>
259 <FONT color="green">256</FONT> out.setEntry(row, col, sum);<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> <a name="line.259"></a>
263 <FONT color="green">260</FONT> return out;<a name="line.260"></a>
264 <FONT color="green">261</FONT> <a name="line.261"></a>
265 <FONT color="green">262</FONT> }<a name="line.262"></a>
266 <FONT color="green">263</FONT> <a name="line.263"></a>
267 <FONT color="green">264</FONT> /** {@inheritDoc} */<a name="line.264"></a>
268 <FONT color="green">265</FONT> public FieldMatrix&lt;T&gt; preMultiply(final FieldMatrix&lt;T&gt; m)<a name="line.265"></a>
269 <FONT color="green">266</FONT> throws IllegalArgumentException {<a name="line.266"></a>
270 <FONT color="green">267</FONT> return m.multiply(this);<a name="line.267"></a>
271 <FONT color="green">268</FONT> }<a name="line.268"></a>
272 <FONT color="green">269</FONT> <a name="line.269"></a>
273 <FONT color="green">270</FONT> /** {@inheritDoc} */<a name="line.270"></a>
274 <FONT color="green">271</FONT> public T[][] getData() {<a name="line.271"></a>
275 <FONT color="green">272</FONT> <a name="line.272"></a>
276 <FONT color="green">273</FONT> final T[][] data = buildArray(field, getRowDimension(), getColumnDimension());<a name="line.273"></a>
277 <FONT color="green">274</FONT> <a name="line.274"></a>
278 <FONT color="green">275</FONT> for (int i = 0; i &lt; data.length; ++i) {<a name="line.275"></a>
279 <FONT color="green">276</FONT> final T[] dataI = data[i];<a name="line.276"></a>
280 <FONT color="green">277</FONT> for (int j = 0; j &lt; dataI.length; ++j) {<a name="line.277"></a>
281 <FONT color="green">278</FONT> dataI[j] = getEntry(i, j);<a name="line.278"></a>
282 <FONT color="green">279</FONT> }<a name="line.279"></a>
283 <FONT color="green">280</FONT> }<a name="line.280"></a>
284 <FONT color="green">281</FONT> <a name="line.281"></a>
285 <FONT color="green">282</FONT> return data;<a name="line.282"></a>
286 <FONT color="green">283</FONT> <a name="line.283"></a>
287 <FONT color="green">284</FONT> }<a name="line.284"></a>
288 <FONT color="green">285</FONT> <a name="line.285"></a>
289 <FONT color="green">286</FONT> /** {@inheritDoc} */<a name="line.286"></a>
290 <FONT color="green">287</FONT> public FieldMatrix&lt;T&gt; getSubMatrix(final int startRow, final int endRow,<a name="line.287"></a>
291 <FONT color="green">288</FONT> final int startColumn, final int endColumn)<a name="line.288"></a>
292 <FONT color="green">289</FONT> throws MatrixIndexException {<a name="line.289"></a>
293 <FONT color="green">290</FONT> <a name="line.290"></a>
294 <FONT color="green">291</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.291"></a>
295 <FONT color="green">292</FONT> <a name="line.292"></a>
296 <FONT color="green">293</FONT> final FieldMatrix&lt;T&gt; subMatrix =<a name="line.293"></a>
297 <FONT color="green">294</FONT> createMatrix(endRow - startRow + 1, endColumn - startColumn + 1);<a name="line.294"></a>
298 <FONT color="green">295</FONT> for (int i = startRow; i &lt;= endRow; ++i) {<a name="line.295"></a>
299 <FONT color="green">296</FONT> for (int j = startColumn; j &lt;= endColumn; ++j) {<a name="line.296"></a>
300 <FONT color="green">297</FONT> subMatrix.setEntry(i - startRow, j - startColumn, getEntry(i, j));<a name="line.297"></a>
301 <FONT color="green">298</FONT> }<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> return subMatrix;<a name="line.301"></a>
305 <FONT color="green">302</FONT> <a name="line.302"></a>
306 <FONT color="green">303</FONT> }<a name="line.303"></a>
307 <FONT color="green">304</FONT> <a name="line.304"></a>
308 <FONT color="green">305</FONT> /** {@inheritDoc} */<a name="line.305"></a>
309 <FONT color="green">306</FONT> public FieldMatrix&lt;T&gt; getSubMatrix(final int[] selectedRows, final int[] selectedColumns)<a name="line.306"></a>
310 <FONT color="green">307</FONT> throws MatrixIndexException {<a name="line.307"></a>
311 <FONT color="green">308</FONT> <a name="line.308"></a>
312 <FONT color="green">309</FONT> // safety checks<a name="line.309"></a>
313 <FONT color="green">310</FONT> checkSubMatrixIndex(selectedRows, selectedColumns);<a name="line.310"></a>
314 <FONT color="green">311</FONT> <a name="line.311"></a>
315 <FONT color="green">312</FONT> // copy entries<a name="line.312"></a>
316 <FONT color="green">313</FONT> final FieldMatrix&lt;T&gt; subMatrix =<a name="line.313"></a>
317 <FONT color="green">314</FONT> createMatrix(selectedRows.length, selectedColumns.length);<a name="line.314"></a>
318 <FONT color="green">315</FONT> subMatrix.walkInOptimizedOrder(new DefaultFieldMatrixChangingVisitor&lt;T&gt;(field.getZero()) {<a name="line.315"></a>
319 <FONT color="green">316</FONT> <a name="line.316"></a>
320 <FONT color="green">317</FONT> /** {@inheritDoc} */<a name="line.317"></a>
321 <FONT color="green">318</FONT> @Override<a name="line.318"></a>
322 <FONT color="green">319</FONT> public T visit(final int row, final int column, final T value) {<a name="line.319"></a>
323 <FONT color="green">320</FONT> return getEntry(selectedRows[row], selectedColumns[column]);<a name="line.320"></a>
324 <FONT color="green">321</FONT> }<a name="line.321"></a>
325 <FONT color="green">322</FONT> <a name="line.322"></a>
326 <FONT color="green">323</FONT> });<a name="line.323"></a>
327 <FONT color="green">324</FONT> <a name="line.324"></a>
328 <FONT color="green">325</FONT> return subMatrix;<a name="line.325"></a>
329 <FONT color="green">326</FONT> <a name="line.326"></a>
330 <FONT color="green">327</FONT> }<a name="line.327"></a>
331 <FONT color="green">328</FONT> <a name="line.328"></a>
332 <FONT color="green">329</FONT> /** {@inheritDoc} */<a name="line.329"></a>
333 <FONT color="green">330</FONT> public void copySubMatrix(final int startRow, final int endRow,<a name="line.330"></a>
334 <FONT color="green">331</FONT> final int startColumn, final int endColumn,<a name="line.331"></a>
335 <FONT color="green">332</FONT> final T[][] destination)<a name="line.332"></a>
336 <FONT color="green">333</FONT> throws MatrixIndexException, IllegalArgumentException {<a name="line.333"></a>
337 <FONT color="green">334</FONT> <a name="line.334"></a>
338 <FONT color="green">335</FONT> // safety checks<a name="line.335"></a>
339 <FONT color="green">336</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.336"></a>
340 <FONT color="green">337</FONT> final int rowsCount = endRow + 1 - startRow;<a name="line.337"></a>
341 <FONT color="green">338</FONT> final int columnsCount = endColumn + 1 - startColumn;<a name="line.338"></a>
342 <FONT color="green">339</FONT> if ((destination.length &lt; rowsCount) || (destination[0].length &lt; columnsCount)) {<a name="line.339"></a>
343 <FONT color="green">340</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.340"></a>
344 <FONT color="green">341</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.341"></a>
345 <FONT color="green">342</FONT> destination.length, destination[0].length,<a name="line.342"></a>
346 <FONT color="green">343</FONT> rowsCount, columnsCount);<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> // copy entries<a name="line.346"></a>
350 <FONT color="green">347</FONT> walkInOptimizedOrder(new DefaultFieldMatrixPreservingVisitor&lt;T&gt;(field.getZero()) {<a name="line.347"></a>
351 <FONT color="green">348</FONT> <a name="line.348"></a>
352 <FONT color="green">349</FONT> /** Initial row index. */<a name="line.349"></a>
353 <FONT color="green">350</FONT> private int startRow;<a name="line.350"></a>
354 <FONT color="green">351</FONT> <a name="line.351"></a>
355 <FONT color="green">352</FONT> /** Initial column index. */<a name="line.352"></a>
356 <FONT color="green">353</FONT> private int startColumn;<a name="line.353"></a>
357 <FONT color="green">354</FONT> <a name="line.354"></a>
358 <FONT color="green">355</FONT> /** {@inheritDoc} */<a name="line.355"></a>
359 <FONT color="green">356</FONT> @Override<a name="line.356"></a>
360 <FONT color="green">357</FONT> public void start(final int rows, final int columns,<a name="line.357"></a>
361 <FONT color="green">358</FONT> final int startRow, final int endRow,<a name="line.358"></a>
362 <FONT color="green">359</FONT> final int startColumn, final int endColumn) {<a name="line.359"></a>
363 <FONT color="green">360</FONT> this.startRow = startRow;<a name="line.360"></a>
364 <FONT color="green">361</FONT> this.startColumn = startColumn;<a name="line.361"></a>
365 <FONT color="green">362</FONT> }<a name="line.362"></a>
366 <FONT color="green">363</FONT> <a name="line.363"></a>
367 <FONT color="green">364</FONT> /** {@inheritDoc} */<a name="line.364"></a>
368 <FONT color="green">365</FONT> @Override<a name="line.365"></a>
369 <FONT color="green">366</FONT> public void visit(final int row, final int column, final T value) {<a name="line.366"></a>
370 <FONT color="green">367</FONT> destination[row - startRow][column - startColumn] = value;<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> }, startRow, endRow, startColumn, endColumn);<a name="line.370"></a>
374 <FONT color="green">371</FONT> <a name="line.371"></a>
375 <FONT color="green">372</FONT> }<a name="line.372"></a>
376 <FONT color="green">373</FONT> <a name="line.373"></a>
377 <FONT color="green">374</FONT> /** {@inheritDoc} */<a name="line.374"></a>
378 <FONT color="green">375</FONT> public void copySubMatrix(int[] selectedRows, int[] selectedColumns, T[][] destination)<a name="line.375"></a>
379 <FONT color="green">376</FONT> throws MatrixIndexException, IllegalArgumentException {<a name="line.376"></a>
380 <FONT color="green">377</FONT> <a name="line.377"></a>
381 <FONT color="green">378</FONT> // safety checks<a name="line.378"></a>
382 <FONT color="green">379</FONT> checkSubMatrixIndex(selectedRows, selectedColumns);<a name="line.379"></a>
383 <FONT color="green">380</FONT> if ((destination.length &lt; selectedRows.length) ||<a name="line.380"></a>
384 <FONT color="green">381</FONT> (destination[0].length &lt; selectedColumns.length)) {<a name="line.381"></a>
385 <FONT color="green">382</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.382"></a>
386 <FONT color="green">383</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.383"></a>
387 <FONT color="green">384</FONT> destination.length, destination[0].length,<a name="line.384"></a>
388 <FONT color="green">385</FONT> selectedRows.length, selectedColumns.length);<a name="line.385"></a>
389 <FONT color="green">386</FONT> }<a name="line.386"></a>
390 <FONT color="green">387</FONT> <a name="line.387"></a>
391 <FONT color="green">388</FONT> // copy entries<a name="line.388"></a>
392 <FONT color="green">389</FONT> for (int i = 0; i &lt; selectedRows.length; i++) {<a name="line.389"></a>
393 <FONT color="green">390</FONT> final T[] destinationI = destination[i];<a name="line.390"></a>
394 <FONT color="green">391</FONT> for (int j = 0; j &lt; selectedColumns.length; j++) {<a name="line.391"></a>
395 <FONT color="green">392</FONT> destinationI[j] = getEntry(selectedRows[i], selectedColumns[j]);<a name="line.392"></a>
396 <FONT color="green">393</FONT> }<a name="line.393"></a>
397 <FONT color="green">394</FONT> }<a name="line.394"></a>
398 <FONT color="green">395</FONT> <a name="line.395"></a>
399 <FONT color="green">396</FONT> }<a name="line.396"></a>
400 <FONT color="green">397</FONT> <a name="line.397"></a>
401 <FONT color="green">398</FONT> /** {@inheritDoc} */<a name="line.398"></a>
402 <FONT color="green">399</FONT> public void setSubMatrix(final T[][] subMatrix, final int row, final int column)<a name="line.399"></a>
403 <FONT color="green">400</FONT> throws MatrixIndexException {<a name="line.400"></a>
404 <FONT color="green">401</FONT> <a name="line.401"></a>
405 <FONT color="green">402</FONT> final int nRows = subMatrix.length;<a name="line.402"></a>
406 <FONT color="green">403</FONT> if (nRows == 0) {<a name="line.403"></a>
407 <FONT color="green">404</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one row");<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> final int nCols = subMatrix[0].length;<a name="line.407"></a>
411 <FONT color="green">408</FONT> if (nCols == 0) {<a name="line.408"></a>
412 <FONT color="green">409</FONT> throw MathRuntimeException.createIllegalArgumentException("matrix must have at least one column");<a name="line.409"></a>
413 <FONT color="green">410</FONT> }<a name="line.410"></a>
414 <FONT color="green">411</FONT> <a name="line.411"></a>
415 <FONT color="green">412</FONT> for (int r = 1; r &lt; nRows; ++r) {<a name="line.412"></a>
416 <FONT color="green">413</FONT> if (subMatrix[r].length != nCols) {<a name="line.413"></a>
417 <FONT color="green">414</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.414"></a>
418 <FONT color="green">415</FONT> "some rows have length {0} while others have length {1}",<a name="line.415"></a>
419 <FONT color="green">416</FONT> nCols, subMatrix[r].length);<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> <a name="line.419"></a>
423 <FONT color="green">420</FONT> checkRowIndex(row);<a name="line.420"></a>
424 <FONT color="green">421</FONT> checkColumnIndex(column);<a name="line.421"></a>
425 <FONT color="green">422</FONT> checkRowIndex(nRows + row - 1);<a name="line.422"></a>
426 <FONT color="green">423</FONT> checkColumnIndex(nCols + column - 1);<a name="line.423"></a>
427 <FONT color="green">424</FONT> <a name="line.424"></a>
428 <FONT color="green">425</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.425"></a>
429 <FONT color="green">426</FONT> for (int j = 0; j &lt; nCols; ++j) {<a name="line.426"></a>
430 <FONT color="green">427</FONT> setEntry(row + i, column + j, subMatrix[i][j]);<a name="line.427"></a>
431 <FONT color="green">428</FONT> }<a name="line.428"></a>
432 <FONT color="green">429</FONT> }<a name="line.429"></a>
433 <FONT color="green">430</FONT> <a name="line.430"></a>
434 <FONT color="green">431</FONT> }<a name="line.431"></a>
435 <FONT color="green">432</FONT> <a name="line.432"></a>
436 <FONT color="green">433</FONT> /** {@inheritDoc} */<a name="line.433"></a>
437 <FONT color="green">434</FONT> public FieldMatrix&lt;T&gt; getRowMatrix(final int row)<a name="line.434"></a>
438 <FONT color="green">435</FONT> throws MatrixIndexException {<a name="line.435"></a>
439 <FONT color="green">436</FONT> <a name="line.436"></a>
440 <FONT color="green">437</FONT> checkRowIndex(row);<a name="line.437"></a>
441 <FONT color="green">438</FONT> final int nCols = getColumnDimension();<a name="line.438"></a>
442 <FONT color="green">439</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(1, nCols);<a name="line.439"></a>
443 <FONT color="green">440</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.440"></a>
444 <FONT color="green">441</FONT> out.setEntry(0, i, getEntry(row, i));<a name="line.441"></a>
445 <FONT color="green">442</FONT> }<a name="line.442"></a>
446 <FONT color="green">443</FONT> <a name="line.443"></a>
447 <FONT color="green">444</FONT> return out;<a name="line.444"></a>
448 <FONT color="green">445</FONT> <a name="line.445"></a>
449 <FONT color="green">446</FONT> }<a name="line.446"></a>
450 <FONT color="green">447</FONT> <a name="line.447"></a>
451 <FONT color="green">448</FONT> /** {@inheritDoc} */<a name="line.448"></a>
452 <FONT color="green">449</FONT> public void setRowMatrix(final int row, final FieldMatrix&lt;T&gt; matrix)<a name="line.449"></a>
453 <FONT color="green">450</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.450"></a>
454 <FONT color="green">451</FONT> <a name="line.451"></a>
455 <FONT color="green">452</FONT> checkRowIndex(row);<a name="line.452"></a>
456 <FONT color="green">453</FONT> final int nCols = getColumnDimension();<a name="line.453"></a>
457 <FONT color="green">454</FONT> if ((matrix.getRowDimension() != 1) ||<a name="line.454"></a>
458 <FONT color="green">455</FONT> (matrix.getColumnDimension() != nCols)) {<a name="line.455"></a>
459 <FONT color="green">456</FONT> throw new InvalidMatrixException(<a name="line.456"></a>
460 <FONT color="green">457</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.457"></a>
461 <FONT color="green">458</FONT> matrix.getRowDimension(), matrix.getColumnDimension(), 1, nCols);<a name="line.458"></a>
462 <FONT color="green">459</FONT> }<a name="line.459"></a>
463 <FONT color="green">460</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.460"></a>
464 <FONT color="green">461</FONT> setEntry(row, i, matrix.getEntry(0, i));<a name="line.461"></a>
465 <FONT color="green">462</FONT> }<a name="line.462"></a>
466 <FONT color="green">463</FONT> <a name="line.463"></a>
467 <FONT color="green">464</FONT> }<a name="line.464"></a>
468 <FONT color="green">465</FONT> <a name="line.465"></a>
469 <FONT color="green">466</FONT> /** {@inheritDoc} */<a name="line.466"></a>
470 <FONT color="green">467</FONT> public FieldMatrix&lt;T&gt; getColumnMatrix(final int column)<a name="line.467"></a>
471 <FONT color="green">468</FONT> throws MatrixIndexException {<a name="line.468"></a>
472 <FONT color="green">469</FONT> <a name="line.469"></a>
473 <FONT color="green">470</FONT> checkColumnIndex(column);<a name="line.470"></a>
474 <FONT color="green">471</FONT> final int nRows = getRowDimension();<a name="line.471"></a>
475 <FONT color="green">472</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(nRows, 1);<a name="line.472"></a>
476 <FONT color="green">473</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.473"></a>
477 <FONT color="green">474</FONT> out.setEntry(i, 0, getEntry(i, column));<a name="line.474"></a>
478 <FONT color="green">475</FONT> }<a name="line.475"></a>
479 <FONT color="green">476</FONT> <a name="line.476"></a>
480 <FONT color="green">477</FONT> return out;<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> <a name="line.480"></a>
484 <FONT color="green">481</FONT> /** {@inheritDoc} */<a name="line.481"></a>
485 <FONT color="green">482</FONT> public void setColumnMatrix(final int column, final FieldMatrix&lt;T&gt; matrix)<a name="line.482"></a>
486 <FONT color="green">483</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.483"></a>
487 <FONT color="green">484</FONT> <a name="line.484"></a>
488 <FONT color="green">485</FONT> checkColumnIndex(column);<a name="line.485"></a>
489 <FONT color="green">486</FONT> final int nRows = getRowDimension();<a name="line.486"></a>
490 <FONT color="green">487</FONT> if ((matrix.getRowDimension() != nRows) ||<a name="line.487"></a>
491 <FONT color="green">488</FONT> (matrix.getColumnDimension() != 1)) {<a name="line.488"></a>
492 <FONT color="green">489</FONT> throw new InvalidMatrixException(<a name="line.489"></a>
493 <FONT color="green">490</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.490"></a>
494 <FONT color="green">491</FONT> matrix.getRowDimension(), matrix.getColumnDimension(), nRows, 1);<a name="line.491"></a>
495 <FONT color="green">492</FONT> }<a name="line.492"></a>
496 <FONT color="green">493</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.493"></a>
497 <FONT color="green">494</FONT> setEntry(i, column, matrix.getEntry(i, 0));<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> }<a name="line.497"></a>
501 <FONT color="green">498</FONT> <a name="line.498"></a>
502 <FONT color="green">499</FONT> /** {@inheritDoc} */<a name="line.499"></a>
503 <FONT color="green">500</FONT> public FieldVector&lt;T&gt; getRowVector(final int row)<a name="line.500"></a>
504 <FONT color="green">501</FONT> throws MatrixIndexException {<a name="line.501"></a>
505 <FONT color="green">502</FONT> return new ArrayFieldVector&lt;T&gt;(getRow(row), false);<a name="line.502"></a>
506 <FONT color="green">503</FONT> }<a name="line.503"></a>
507 <FONT color="green">504</FONT> <a name="line.504"></a>
508 <FONT color="green">505</FONT> /** {@inheritDoc} */<a name="line.505"></a>
509 <FONT color="green">506</FONT> public void setRowVector(final int row, final FieldVector&lt;T&gt; vector)<a name="line.506"></a>
510 <FONT color="green">507</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.507"></a>
511 <FONT color="green">508</FONT> <a name="line.508"></a>
512 <FONT color="green">509</FONT> checkRowIndex(row);<a name="line.509"></a>
513 <FONT color="green">510</FONT> final int nCols = getColumnDimension();<a name="line.510"></a>
514 <FONT color="green">511</FONT> if (vector.getDimension() != nCols) {<a name="line.511"></a>
515 <FONT color="green">512</FONT> throw new InvalidMatrixException(<a name="line.512"></a>
516 <FONT color="green">513</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.513"></a>
517 <FONT color="green">514</FONT> 1, vector.getDimension(), 1, nCols);<a name="line.514"></a>
518 <FONT color="green">515</FONT> }<a name="line.515"></a>
519 <FONT color="green">516</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.516"></a>
520 <FONT color="green">517</FONT> setEntry(row, i, vector.getEntry(i));<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> }<a name="line.520"></a>
524 <FONT color="green">521</FONT> <a name="line.521"></a>
525 <FONT color="green">522</FONT> /** {@inheritDoc} */<a name="line.522"></a>
526 <FONT color="green">523</FONT> public FieldVector&lt;T&gt; getColumnVector(final int column)<a name="line.523"></a>
527 <FONT color="green">524</FONT> throws MatrixIndexException {<a name="line.524"></a>
528 <FONT color="green">525</FONT> return new ArrayFieldVector&lt;T&gt;(getColumn(column), false);<a name="line.525"></a>
529 <FONT color="green">526</FONT> }<a name="line.526"></a>
530 <FONT color="green">527</FONT> <a name="line.527"></a>
531 <FONT color="green">528</FONT> /** {@inheritDoc} */<a name="line.528"></a>
532 <FONT color="green">529</FONT> public void setColumnVector(final int column, final FieldVector&lt;T&gt; vector)<a name="line.529"></a>
533 <FONT color="green">530</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.530"></a>
534 <FONT color="green">531</FONT> <a name="line.531"></a>
535 <FONT color="green">532</FONT> checkColumnIndex(column);<a name="line.532"></a>
536 <FONT color="green">533</FONT> final int nRows = getRowDimension();<a name="line.533"></a>
537 <FONT color="green">534</FONT> if (vector.getDimension() != nRows) {<a name="line.534"></a>
538 <FONT color="green">535</FONT> throw new InvalidMatrixException(<a name="line.535"></a>
539 <FONT color="green">536</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.536"></a>
540 <FONT color="green">537</FONT> vector.getDimension(), 1, nRows, 1);<a name="line.537"></a>
541 <FONT color="green">538</FONT> }<a name="line.538"></a>
542 <FONT color="green">539</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.539"></a>
543 <FONT color="green">540</FONT> setEntry(i, column, vector.getEntry(i));<a name="line.540"></a>
544 <FONT color="green">541</FONT> }<a name="line.541"></a>
545 <FONT color="green">542</FONT> <a name="line.542"></a>
546 <FONT color="green">543</FONT> }<a name="line.543"></a>
547 <FONT color="green">544</FONT> <a name="line.544"></a>
548 <FONT color="green">545</FONT> /** {@inheritDoc} */<a name="line.545"></a>
549 <FONT color="green">546</FONT> public T[] getRow(final int row)<a name="line.546"></a>
550 <FONT color="green">547</FONT> throws MatrixIndexException {<a name="line.547"></a>
551 <FONT color="green">548</FONT> <a name="line.548"></a>
552 <FONT color="green">549</FONT> checkRowIndex(row);<a name="line.549"></a>
553 <FONT color="green">550</FONT> final int nCols = getColumnDimension();<a name="line.550"></a>
554 <FONT color="green">551</FONT> final T[] out = buildArray(field, nCols);<a name="line.551"></a>
555 <FONT color="green">552</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.552"></a>
556 <FONT color="green">553</FONT> out[i] = getEntry(row, i);<a name="line.553"></a>
557 <FONT color="green">554</FONT> }<a name="line.554"></a>
558 <FONT color="green">555</FONT> <a name="line.555"></a>
559 <FONT color="green">556</FONT> return out;<a name="line.556"></a>
560 <FONT color="green">557</FONT> <a name="line.557"></a>
561 <FONT color="green">558</FONT> }<a name="line.558"></a>
562 <FONT color="green">559</FONT> <a name="line.559"></a>
563 <FONT color="green">560</FONT> /** {@inheritDoc} */<a name="line.560"></a>
564 <FONT color="green">561</FONT> public void setRow(final int row, final T[] array)<a name="line.561"></a>
565 <FONT color="green">562</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.562"></a>
566 <FONT color="green">563</FONT> <a name="line.563"></a>
567 <FONT color="green">564</FONT> checkRowIndex(row);<a name="line.564"></a>
568 <FONT color="green">565</FONT> final int nCols = getColumnDimension();<a name="line.565"></a>
569 <FONT color="green">566</FONT> if (array.length != nCols) {<a name="line.566"></a>
570 <FONT color="green">567</FONT> throw new InvalidMatrixException(<a name="line.567"></a>
571 <FONT color="green">568</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.568"></a>
572 <FONT color="green">569</FONT> 1, array.length, 1, nCols);<a name="line.569"></a>
573 <FONT color="green">570</FONT> }<a name="line.570"></a>
574 <FONT color="green">571</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.571"></a>
575 <FONT color="green">572</FONT> setEntry(row, i, array[i]);<a name="line.572"></a>
576 <FONT color="green">573</FONT> }<a name="line.573"></a>
577 <FONT color="green">574</FONT> <a name="line.574"></a>
578 <FONT color="green">575</FONT> }<a name="line.575"></a>
579 <FONT color="green">576</FONT> <a name="line.576"></a>
580 <FONT color="green">577</FONT> /** {@inheritDoc} */<a name="line.577"></a>
581 <FONT color="green">578</FONT> public T[] getColumn(final int column)<a name="line.578"></a>
582 <FONT color="green">579</FONT> throws MatrixIndexException {<a name="line.579"></a>
583 <FONT color="green">580</FONT> <a name="line.580"></a>
584 <FONT color="green">581</FONT> checkColumnIndex(column);<a name="line.581"></a>
585 <FONT color="green">582</FONT> final int nRows = getRowDimension();<a name="line.582"></a>
586 <FONT color="green">583</FONT> final T[] out = buildArray(field, nRows);<a name="line.583"></a>
587 <FONT color="green">584</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.584"></a>
588 <FONT color="green">585</FONT> out[i] = getEntry(i, column);<a name="line.585"></a>
589 <FONT color="green">586</FONT> }<a name="line.586"></a>
590 <FONT color="green">587</FONT> <a name="line.587"></a>
591 <FONT color="green">588</FONT> return out;<a name="line.588"></a>
592 <FONT color="green">589</FONT> <a name="line.589"></a>
593 <FONT color="green">590</FONT> }<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 void setColumn(final int column, final T[] array)<a name="line.593"></a>
597 <FONT color="green">594</FONT> throws MatrixIndexException, InvalidMatrixException {<a name="line.594"></a>
598 <FONT color="green">595</FONT> <a name="line.595"></a>
599 <FONT color="green">596</FONT> checkColumnIndex(column);<a name="line.596"></a>
600 <FONT color="green">597</FONT> final int nRows = getRowDimension();<a name="line.597"></a>
601 <FONT color="green">598</FONT> if (array.length != nRows) {<a name="line.598"></a>
602 <FONT color="green">599</FONT> throw new InvalidMatrixException(<a name="line.599"></a>
603 <FONT color="green">600</FONT> "dimensions mismatch: got {0}x{1} but expected {2}x{3}",<a name="line.600"></a>
604 <FONT color="green">601</FONT> array.length, 1, nRows, 1);<a name="line.601"></a>
605 <FONT color="green">602</FONT> }<a name="line.602"></a>
606 <FONT color="green">603</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.603"></a>
607 <FONT color="green">604</FONT> setEntry(i, column, array[i]);<a name="line.604"></a>
608 <FONT color="green">605</FONT> }<a name="line.605"></a>
609 <FONT color="green">606</FONT> <a name="line.606"></a>
610 <FONT color="green">607</FONT> }<a name="line.607"></a>
611 <FONT color="green">608</FONT> <a name="line.608"></a>
612 <FONT color="green">609</FONT> /** {@inheritDoc} */<a name="line.609"></a>
613 <FONT color="green">610</FONT> public abstract T getEntry(int row, int column)<a name="line.610"></a>
614 <FONT color="green">611</FONT> throws MatrixIndexException;<a name="line.611"></a>
615 <FONT color="green">612</FONT> <a name="line.612"></a>
616 <FONT color="green">613</FONT> /** {@inheritDoc} */<a name="line.613"></a>
617 <FONT color="green">614</FONT> public abstract void setEntry(int row, int column, T value)<a name="line.614"></a>
618 <FONT color="green">615</FONT> throws MatrixIndexException;<a name="line.615"></a>
619 <FONT color="green">616</FONT> <a name="line.616"></a>
620 <FONT color="green">617</FONT> /** {@inheritDoc} */<a name="line.617"></a>
621 <FONT color="green">618</FONT> public abstract void addToEntry(int row, int column, T increment)<a name="line.618"></a>
622 <FONT color="green">619</FONT> throws MatrixIndexException;<a name="line.619"></a>
623 <FONT color="green">620</FONT> <a name="line.620"></a>
624 <FONT color="green">621</FONT> /** {@inheritDoc} */<a name="line.621"></a>
625 <FONT color="green">622</FONT> public abstract void multiplyEntry(int row, int column, T factor)<a name="line.622"></a>
626 <FONT color="green">623</FONT> throws MatrixIndexException;<a name="line.623"></a>
627 <FONT color="green">624</FONT> <a name="line.624"></a>
628 <FONT color="green">625</FONT> /** {@inheritDoc} */<a name="line.625"></a>
629 <FONT color="green">626</FONT> public FieldMatrix&lt;T&gt; transpose() {<a name="line.626"></a>
630 <FONT color="green">627</FONT> <a name="line.627"></a>
631 <FONT color="green">628</FONT> final int nRows = getRowDimension();<a name="line.628"></a>
632 <FONT color="green">629</FONT> final int nCols = getColumnDimension();<a name="line.629"></a>
633 <FONT color="green">630</FONT> final FieldMatrix&lt;T&gt; out = createMatrix(nCols, nRows);<a name="line.630"></a>
634 <FONT color="green">631</FONT> walkInOptimizedOrder(new DefaultFieldMatrixPreservingVisitor&lt;T&gt;(field.getZero()) {<a name="line.631"></a>
635 <FONT color="green">632</FONT> <a name="line.632"></a>
636 <FONT color="green">633</FONT> /** {@inheritDoc} */<a name="line.633"></a>
637 <FONT color="green">634</FONT> @Override<a name="line.634"></a>
638 <FONT color="green">635</FONT> public void visit(final int row, final int column, final T value) {<a name="line.635"></a>
639 <FONT color="green">636</FONT> out.setEntry(column, row, value);<a name="line.636"></a>
640 <FONT color="green">637</FONT> }<a name="line.637"></a>
641 <FONT color="green">638</FONT> <a name="line.638"></a>
642 <FONT color="green">639</FONT> });<a name="line.639"></a>
643 <FONT color="green">640</FONT> <a name="line.640"></a>
644 <FONT color="green">641</FONT> return out;<a name="line.641"></a>
645 <FONT color="green">642</FONT> <a name="line.642"></a>
646 <FONT color="green">643</FONT> }<a name="line.643"></a>
647 <FONT color="green">644</FONT> <a name="line.644"></a>
648 <FONT color="green">645</FONT> /** {@inheritDoc} */<a name="line.645"></a>
649 <FONT color="green">646</FONT> public boolean isSquare() {<a name="line.646"></a>
650 <FONT color="green">647</FONT> return getColumnDimension() == getRowDimension();<a name="line.647"></a>
651 <FONT color="green">648</FONT> }<a name="line.648"></a>
652 <FONT color="green">649</FONT> <a name="line.649"></a>
653 <FONT color="green">650</FONT> /** {@inheritDoc} */<a name="line.650"></a>
654 <FONT color="green">651</FONT> public abstract int getRowDimension();<a name="line.651"></a>
655 <FONT color="green">652</FONT> <a name="line.652"></a>
656 <FONT color="green">653</FONT> /** {@inheritDoc} */<a name="line.653"></a>
657 <FONT color="green">654</FONT> public abstract int getColumnDimension();<a name="line.654"></a>
658 <FONT color="green">655</FONT> <a name="line.655"></a>
659 <FONT color="green">656</FONT> /** {@inheritDoc} */<a name="line.656"></a>
660 <FONT color="green">657</FONT> public T getTrace()<a name="line.657"></a>
661 <FONT color="green">658</FONT> throws NonSquareMatrixException {<a name="line.658"></a>
662 <FONT color="green">659</FONT> final int nRows = getRowDimension();<a name="line.659"></a>
663 <FONT color="green">660</FONT> final int nCols = getColumnDimension();<a name="line.660"></a>
664 <FONT color="green">661</FONT> if (nRows != nCols) {<a name="line.661"></a>
665 <FONT color="green">662</FONT> throw new NonSquareMatrixException(nRows, nCols);<a name="line.662"></a>
666 <FONT color="green">663</FONT> }<a name="line.663"></a>
667 <FONT color="green">664</FONT> T trace = field.getZero();<a name="line.664"></a>
668 <FONT color="green">665</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.665"></a>
669 <FONT color="green">666</FONT> trace = trace.add(getEntry(i, i));<a name="line.666"></a>
670 <FONT color="green">667</FONT> }<a name="line.667"></a>
671 <FONT color="green">668</FONT> return trace;<a name="line.668"></a>
672 <FONT color="green">669</FONT> }<a name="line.669"></a>
673 <FONT color="green">670</FONT> <a name="line.670"></a>
674 <FONT color="green">671</FONT> /** {@inheritDoc} */<a name="line.671"></a>
675 <FONT color="green">672</FONT> public T[] operate(final T[] v)<a name="line.672"></a>
676 <FONT color="green">673</FONT> throws IllegalArgumentException {<a name="line.673"></a>
677 <FONT color="green">674</FONT> <a name="line.674"></a>
678 <FONT color="green">675</FONT> final int nRows = getRowDimension();<a name="line.675"></a>
679 <FONT color="green">676</FONT> final int nCols = getColumnDimension();<a name="line.676"></a>
680 <FONT color="green">677</FONT> if (v.length != nCols) {<a name="line.677"></a>
681 <FONT color="green">678</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.678"></a>
682 <FONT color="green">679</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.679"></a>
683 <FONT color="green">680</FONT> v.length, nCols);<a name="line.680"></a>
684 <FONT color="green">681</FONT> }<a name="line.681"></a>
685 <FONT color="green">682</FONT> <a name="line.682"></a>
686 <FONT color="green">683</FONT> final T[] out = buildArray(field, nRows);<a name="line.683"></a>
687 <FONT color="green">684</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.684"></a>
688 <FONT color="green">685</FONT> T sum = field.getZero();<a name="line.685"></a>
689 <FONT color="green">686</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.686"></a>
690 <FONT color="green">687</FONT> sum = sum.add(getEntry(row, i).multiply(v[i]));<a name="line.687"></a>
691 <FONT color="green">688</FONT> }<a name="line.688"></a>
692 <FONT color="green">689</FONT> out[row] = sum;<a name="line.689"></a>
693 <FONT color="green">690</FONT> }<a name="line.690"></a>
694 <FONT color="green">691</FONT> <a name="line.691"></a>
695 <FONT color="green">692</FONT> return out;<a name="line.692"></a>
696 <FONT color="green">693</FONT> <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> /** {@inheritDoc} */<a name="line.696"></a>
700 <FONT color="green">697</FONT> public FieldVector&lt;T&gt; operate(final FieldVector&lt;T&gt; v)<a name="line.697"></a>
701 <FONT color="green">698</FONT> throws IllegalArgumentException {<a name="line.698"></a>
702 <FONT color="green">699</FONT> try {<a name="line.699"></a>
703 <FONT color="green">700</FONT> return new ArrayFieldVector&lt;T&gt;(operate(((ArrayFieldVector&lt;T&gt;) v).getDataRef()), false);<a name="line.700"></a>
704 <FONT color="green">701</FONT> } catch (ClassCastException cce) {<a name="line.701"></a>
705 <FONT color="green">702</FONT> final int nRows = getRowDimension();<a name="line.702"></a>
706 <FONT color="green">703</FONT> final int nCols = getColumnDimension();<a name="line.703"></a>
707 <FONT color="green">704</FONT> if (v.getDimension() != nCols) {<a name="line.704"></a>
708 <FONT color="green">705</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.705"></a>
709 <FONT color="green">706</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.706"></a>
710 <FONT color="green">707</FONT> v.getDimension(), nCols);<a name="line.707"></a>
711 <FONT color="green">708</FONT> }<a name="line.708"></a>
712 <FONT color="green">709</FONT> <a name="line.709"></a>
713 <FONT color="green">710</FONT> final T[] out = buildArray(field, nRows);<a name="line.710"></a>
714 <FONT color="green">711</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.711"></a>
715 <FONT color="green">712</FONT> T sum = field.getZero();<a name="line.712"></a>
716 <FONT color="green">713</FONT> for (int i = 0; i &lt; nCols; ++i) {<a name="line.713"></a>
717 <FONT color="green">714</FONT> sum = sum.add(getEntry(row, i).multiply(v.getEntry(i)));<a name="line.714"></a>
718 <FONT color="green">715</FONT> }<a name="line.715"></a>
719 <FONT color="green">716</FONT> out[row] = sum;<a name="line.716"></a>
720 <FONT color="green">717</FONT> }<a name="line.717"></a>
721 <FONT color="green">718</FONT> <a name="line.718"></a>
722 <FONT color="green">719</FONT> return new ArrayFieldVector&lt;T&gt;(out, false);<a name="line.719"></a>
723 <FONT color="green">720</FONT> }<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> /** {@inheritDoc} */<a name="line.723"></a>
727 <FONT color="green">724</FONT> public T[] preMultiply(final T[] v)<a name="line.724"></a>
728 <FONT color="green">725</FONT> throws IllegalArgumentException {<a name="line.725"></a>
729 <FONT color="green">726</FONT> <a name="line.726"></a>
730 <FONT color="green">727</FONT> final int nRows = getRowDimension();<a name="line.727"></a>
731 <FONT color="green">728</FONT> final int nCols = getColumnDimension();<a name="line.728"></a>
732 <FONT color="green">729</FONT> if (v.length != nRows) {<a name="line.729"></a>
733 <FONT color="green">730</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.730"></a>
734 <FONT color="green">731</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.731"></a>
735 <FONT color="green">732</FONT> v.length, nRows);<a name="line.732"></a>
736 <FONT color="green">733</FONT> }<a name="line.733"></a>
737 <FONT color="green">734</FONT> <a name="line.734"></a>
738 <FONT color="green">735</FONT> final T[] out = buildArray(field, nCols);<a name="line.735"></a>
739 <FONT color="green">736</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.736"></a>
740 <FONT color="green">737</FONT> T sum = field.getZero();<a name="line.737"></a>
741 <FONT color="green">738</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.738"></a>
742 <FONT color="green">739</FONT> sum = sum.add(getEntry(i, col).multiply(v[i]));<a name="line.739"></a>
743 <FONT color="green">740</FONT> }<a name="line.740"></a>
744 <FONT color="green">741</FONT> out[col] = sum;<a name="line.741"></a>
745 <FONT color="green">742</FONT> }<a name="line.742"></a>
746 <FONT color="green">743</FONT> <a name="line.743"></a>
747 <FONT color="green">744</FONT> return out;<a name="line.744"></a>
748 <FONT color="green">745</FONT> <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> /** {@inheritDoc} */<a name="line.748"></a>
752 <FONT color="green">749</FONT> public FieldVector&lt;T&gt; preMultiply(final FieldVector&lt;T&gt; v)<a name="line.749"></a>
753 <FONT color="green">750</FONT> throws IllegalArgumentException {<a name="line.750"></a>
754 <FONT color="green">751</FONT> try {<a name="line.751"></a>
755 <FONT color="green">752</FONT> return new ArrayFieldVector&lt;T&gt;(preMultiply(((ArrayFieldVector&lt;T&gt;) v).getDataRef()), false);<a name="line.752"></a>
756 <FONT color="green">753</FONT> } catch (ClassCastException cce) {<a name="line.753"></a>
757 <FONT color="green">754</FONT> <a name="line.754"></a>
758 <FONT color="green">755</FONT> final int nRows = getRowDimension();<a name="line.755"></a>
759 <FONT color="green">756</FONT> final int nCols = getColumnDimension();<a name="line.756"></a>
760 <FONT color="green">757</FONT> if (v.getDimension() != nRows) {<a name="line.757"></a>
761 <FONT color="green">758</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.758"></a>
762 <FONT color="green">759</FONT> "vector length mismatch: got {0} but expected {1}",<a name="line.759"></a>
763 <FONT color="green">760</FONT> v.getDimension(), nRows);<a name="line.760"></a>
764 <FONT color="green">761</FONT> }<a name="line.761"></a>
765 <FONT color="green">762</FONT> <a name="line.762"></a>
766 <FONT color="green">763</FONT> final T[] out = buildArray(field, nCols);<a name="line.763"></a>
767 <FONT color="green">764</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.764"></a>
768 <FONT color="green">765</FONT> T sum = field.getZero();<a name="line.765"></a>
769 <FONT color="green">766</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.766"></a>
770 <FONT color="green">767</FONT> sum = sum.add(getEntry(i, col).multiply(v.getEntry(i)));<a name="line.767"></a>
771 <FONT color="green">768</FONT> }<a name="line.768"></a>
772 <FONT color="green">769</FONT> out[col] = sum;<a name="line.769"></a>
773 <FONT color="green">770</FONT> }<a name="line.770"></a>
774 <FONT color="green">771</FONT> <a name="line.771"></a>
775 <FONT color="green">772</FONT> return new ArrayFieldVector&lt;T&gt;(out);<a name="line.772"></a>
776 <FONT color="green">773</FONT> <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> /** {@inheritDoc} */<a name="line.777"></a>
781 <FONT color="green">778</FONT> public T walkInRowOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor)<a name="line.778"></a>
782 <FONT color="green">779</FONT> throws MatrixVisitorException {<a name="line.779"></a>
783 <FONT color="green">780</FONT> final int rows = getRowDimension();<a name="line.780"></a>
784 <FONT color="green">781</FONT> final int columns = getColumnDimension();<a name="line.781"></a>
785 <FONT color="green">782</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.782"></a>
786 <FONT color="green">783</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.783"></a>
787 <FONT color="green">784</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.784"></a>
788 <FONT color="green">785</FONT> final T oldValue = getEntry(row, column);<a name="line.785"></a>
789 <FONT color="green">786</FONT> final T newValue = visitor.visit(row, column, oldValue);<a name="line.786"></a>
790 <FONT color="green">787</FONT> setEntry(row, column, newValue);<a name="line.787"></a>
791 <FONT color="green">788</FONT> }<a name="line.788"></a>
792 <FONT color="green">789</FONT> }<a name="line.789"></a>
793 <FONT color="green">790</FONT> return visitor.end();<a name="line.790"></a>
794 <FONT color="green">791</FONT> }<a name="line.791"></a>
795 <FONT color="green">792</FONT> <a name="line.792"></a>
796 <FONT color="green">793</FONT> /** {@inheritDoc} */<a name="line.793"></a>
797 <FONT color="green">794</FONT> public T walkInRowOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor)<a name="line.794"></a>
798 <FONT color="green">795</FONT> throws MatrixVisitorException {<a name="line.795"></a>
799 <FONT color="green">796</FONT> final int rows = getRowDimension();<a name="line.796"></a>
800 <FONT color="green">797</FONT> final int columns = getColumnDimension();<a name="line.797"></a>
801 <FONT color="green">798</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.798"></a>
802 <FONT color="green">799</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.799"></a>
803 <FONT color="green">800</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.800"></a>
804 <FONT color="green">801</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.801"></a>
805 <FONT color="green">802</FONT> }<a name="line.802"></a>
806 <FONT color="green">803</FONT> }<a name="line.803"></a>
807 <FONT color="green">804</FONT> return visitor.end();<a name="line.804"></a>
808 <FONT color="green">805</FONT> }<a name="line.805"></a>
809 <FONT color="green">806</FONT> <a name="line.806"></a>
810 <FONT color="green">807</FONT> /** {@inheritDoc} */<a name="line.807"></a>
811 <FONT color="green">808</FONT> public T walkInRowOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor,<a name="line.808"></a>
812 <FONT color="green">809</FONT> final int startRow, final int endRow,<a name="line.809"></a>
813 <FONT color="green">810</FONT> final int startColumn, final int endColumn)<a name="line.810"></a>
814 <FONT color="green">811</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.811"></a>
815 <FONT color="green">812</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.812"></a>
816 <FONT color="green">813</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.813"></a>
817 <FONT color="green">814</FONT> startRow, endRow, startColumn, endColumn);<a name="line.814"></a>
818 <FONT color="green">815</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.815"></a>
819 <FONT color="green">816</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.816"></a>
820 <FONT color="green">817</FONT> final T oldValue = getEntry(row, column);<a name="line.817"></a>
821 <FONT color="green">818</FONT> final T newValue = visitor.visit(row, column, oldValue);<a name="line.818"></a>
822 <FONT color="green">819</FONT> setEntry(row, column, newValue);<a name="line.819"></a>
823 <FONT color="green">820</FONT> }<a name="line.820"></a>
824 <FONT color="green">821</FONT> }<a name="line.821"></a>
825 <FONT color="green">822</FONT> return visitor.end();<a name="line.822"></a>
826 <FONT color="green">823</FONT> }<a name="line.823"></a>
827 <FONT color="green">824</FONT> <a name="line.824"></a>
828 <FONT color="green">825</FONT> /** {@inheritDoc} */<a name="line.825"></a>
829 <FONT color="green">826</FONT> public T walkInRowOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor,<a name="line.826"></a>
830 <FONT color="green">827</FONT> final int startRow, final int endRow,<a name="line.827"></a>
831 <FONT color="green">828</FONT> final int startColumn, final int endColumn)<a name="line.828"></a>
832 <FONT color="green">829</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.829"></a>
833 <FONT color="green">830</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.830"></a>
834 <FONT color="green">831</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.831"></a>
835 <FONT color="green">832</FONT> startRow, endRow, startColumn, endColumn);<a name="line.832"></a>
836 <FONT color="green">833</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.833"></a>
837 <FONT color="green">834</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.834"></a>
838 <FONT color="green">835</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.835"></a>
839 <FONT color="green">836</FONT> }<a name="line.836"></a>
840 <FONT color="green">837</FONT> }<a name="line.837"></a>
841 <FONT color="green">838</FONT> return visitor.end();<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> /** {@inheritDoc} */<a name="line.841"></a>
845 <FONT color="green">842</FONT> public T walkInColumnOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor)<a name="line.842"></a>
846 <FONT color="green">843</FONT> throws MatrixVisitorException {<a name="line.843"></a>
847 <FONT color="green">844</FONT> final int rows = getRowDimension();<a name="line.844"></a>
848 <FONT color="green">845</FONT> final int columns = getColumnDimension();<a name="line.845"></a>
849 <FONT color="green">846</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.846"></a>
850 <FONT color="green">847</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.847"></a>
851 <FONT color="green">848</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.848"></a>
852 <FONT color="green">849</FONT> final T oldValue = getEntry(row, column);<a name="line.849"></a>
853 <FONT color="green">850</FONT> final T newValue = visitor.visit(row, column, oldValue);<a name="line.850"></a>
854 <FONT color="green">851</FONT> setEntry(row, column, newValue);<a name="line.851"></a>
855 <FONT color="green">852</FONT> }<a name="line.852"></a>
856 <FONT color="green">853</FONT> }<a name="line.853"></a>
857 <FONT color="green">854</FONT> return visitor.end();<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> /** {@inheritDoc} */<a name="line.857"></a>
861 <FONT color="green">858</FONT> public T walkInColumnOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor)<a name="line.858"></a>
862 <FONT color="green">859</FONT> throws MatrixVisitorException {<a name="line.859"></a>
863 <FONT color="green">860</FONT> final int rows = getRowDimension();<a name="line.860"></a>
864 <FONT color="green">861</FONT> final int columns = getColumnDimension();<a name="line.861"></a>
865 <FONT color="green">862</FONT> visitor.start(rows, columns, 0, rows - 1, 0, columns - 1);<a name="line.862"></a>
866 <FONT color="green">863</FONT> for (int column = 0; column &lt; columns; ++column) {<a name="line.863"></a>
867 <FONT color="green">864</FONT> for (int row = 0; row &lt; rows; ++row) {<a name="line.864"></a>
868 <FONT color="green">865</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.865"></a>
869 <FONT color="green">866</FONT> }<a name="line.866"></a>
870 <FONT color="green">867</FONT> }<a name="line.867"></a>
871 <FONT color="green">868</FONT> return visitor.end();<a name="line.868"></a>
872 <FONT color="green">869</FONT> }<a name="line.869"></a>
873 <FONT color="green">870</FONT> <a name="line.870"></a>
874 <FONT color="green">871</FONT> /** {@inheritDoc} */<a name="line.871"></a>
875 <FONT color="green">872</FONT> public T walkInColumnOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor,<a name="line.872"></a>
876 <FONT color="green">873</FONT> final int startRow, final int endRow,<a name="line.873"></a>
877 <FONT color="green">874</FONT> final int startColumn, final int endColumn)<a name="line.874"></a>
878 <FONT color="green">875</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.875"></a>
879 <FONT color="green">876</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.876"></a>
880 <FONT color="green">877</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.877"></a>
881 <FONT color="green">878</FONT> startRow, endRow, startColumn, endColumn);<a name="line.878"></a>
882 <FONT color="green">879</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.879"></a>
883 <FONT color="green">880</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.880"></a>
884 <FONT color="green">881</FONT> final T oldValue = getEntry(row, column);<a name="line.881"></a>
885 <FONT color="green">882</FONT> final T newValue = visitor.visit(row, column, oldValue);<a name="line.882"></a>
886 <FONT color="green">883</FONT> setEntry(row, column, newValue);<a name="line.883"></a>
887 <FONT color="green">884</FONT> }<a name="line.884"></a>
888 <FONT color="green">885</FONT> }<a name="line.885"></a>
889 <FONT color="green">886</FONT> return visitor.end();<a name="line.886"></a>
890 <FONT color="green">887</FONT> }<a name="line.887"></a>
891 <FONT color="green">888</FONT> <a name="line.888"></a>
892 <FONT color="green">889</FONT> /** {@inheritDoc} */<a name="line.889"></a>
893 <FONT color="green">890</FONT> public T walkInColumnOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor,<a name="line.890"></a>
894 <FONT color="green">891</FONT> final int startRow, final int endRow,<a name="line.891"></a>
895 <FONT color="green">892</FONT> final int startColumn, final int endColumn)<a name="line.892"></a>
896 <FONT color="green">893</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.893"></a>
897 <FONT color="green">894</FONT> checkSubMatrixIndex(startRow, endRow, startColumn, endColumn);<a name="line.894"></a>
898 <FONT color="green">895</FONT> visitor.start(getRowDimension(), getColumnDimension(),<a name="line.895"></a>
899 <FONT color="green">896</FONT> startRow, endRow, startColumn, endColumn);<a name="line.896"></a>
900 <FONT color="green">897</FONT> for (int column = startColumn; column &lt;= endColumn; ++column) {<a name="line.897"></a>
901 <FONT color="green">898</FONT> for (int row = startRow; row &lt;= endRow; ++row) {<a name="line.898"></a>
902 <FONT color="green">899</FONT> visitor.visit(row, column, getEntry(row, column));<a name="line.899"></a>
903 <FONT color="green">900</FONT> }<a name="line.900"></a>
904 <FONT color="green">901</FONT> }<a name="line.901"></a>
905 <FONT color="green">902</FONT> return visitor.end();<a name="line.902"></a>
906 <FONT color="green">903</FONT> }<a name="line.903"></a>
907 <FONT color="green">904</FONT> <a name="line.904"></a>
908 <FONT color="green">905</FONT> /** {@inheritDoc} */<a name="line.905"></a>
909 <FONT color="green">906</FONT> public T walkInOptimizedOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor)<a name="line.906"></a>
910 <FONT color="green">907</FONT> throws MatrixVisitorException {<a name="line.907"></a>
911 <FONT color="green">908</FONT> return walkInRowOrder(visitor);<a name="line.908"></a>
912 <FONT color="green">909</FONT> }<a name="line.909"></a>
913 <FONT color="green">910</FONT> <a name="line.910"></a>
914 <FONT color="green">911</FONT> /** {@inheritDoc} */<a name="line.911"></a>
915 <FONT color="green">912</FONT> public T walkInOptimizedOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor)<a name="line.912"></a>
916 <FONT color="green">913</FONT> throws MatrixVisitorException {<a name="line.913"></a>
917 <FONT color="green">914</FONT> return walkInRowOrder(visitor);<a name="line.914"></a>
918 <FONT color="green">915</FONT> }<a name="line.915"></a>
919 <FONT color="green">916</FONT> <a name="line.916"></a>
920 <FONT color="green">917</FONT> /** {@inheritDoc} */<a name="line.917"></a>
921 <FONT color="green">918</FONT> public T walkInOptimizedOrder(final FieldMatrixChangingVisitor&lt;T&gt; visitor,<a name="line.918"></a>
922 <FONT color="green">919</FONT> final int startRow, final int endRow,<a name="line.919"></a>
923 <FONT color="green">920</FONT> final int startColumn, final int endColumn)<a name="line.920"></a>
924 <FONT color="green">921</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.921"></a>
925 <FONT color="green">922</FONT> return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);<a name="line.922"></a>
926 <FONT color="green">923</FONT> }<a name="line.923"></a>
927 <FONT color="green">924</FONT> <a name="line.924"></a>
928 <FONT color="green">925</FONT> /** {@inheritDoc} */<a name="line.925"></a>
929 <FONT color="green">926</FONT> public T walkInOptimizedOrder(final FieldMatrixPreservingVisitor&lt;T&gt; visitor,<a name="line.926"></a>
930 <FONT color="green">927</FONT> final int startRow, final int endRow,<a name="line.927"></a>
931 <FONT color="green">928</FONT> final int startColumn, final int endColumn)<a name="line.928"></a>
932 <FONT color="green">929</FONT> throws MatrixIndexException, MatrixVisitorException {<a name="line.929"></a>
933 <FONT color="green">930</FONT> return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);<a name="line.930"></a>
934 <FONT color="green">931</FONT> }<a name="line.931"></a>
935 <FONT color="green">932</FONT> <a name="line.932"></a>
936 <FONT color="green">933</FONT> /**<a name="line.933"></a>
937 <FONT color="green">934</FONT> * Get a string representation for this matrix.<a name="line.934"></a>
938 <FONT color="green">935</FONT> * @return a string representation for this matrix<a name="line.935"></a>
939 <FONT color="green">936</FONT> */<a name="line.936"></a>
940 <FONT color="green">937</FONT> @Override<a name="line.937"></a>
941 <FONT color="green">938</FONT> public String toString() {<a name="line.938"></a>
942 <FONT color="green">939</FONT> final int nRows = getRowDimension();<a name="line.939"></a>
943 <FONT color="green">940</FONT> final int nCols = getColumnDimension();<a name="line.940"></a>
944 <FONT color="green">941</FONT> final StringBuffer res = new StringBuffer();<a name="line.941"></a>
945 <FONT color="green">942</FONT> String fullClassName = getClass().getName();<a name="line.942"></a>
946 <FONT color="green">943</FONT> String shortClassName = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);<a name="line.943"></a>
947 <FONT color="green">944</FONT> res.append(shortClassName).append("{");<a name="line.944"></a>
948 <FONT color="green">945</FONT> <a name="line.945"></a>
949 <FONT color="green">946</FONT> for (int i = 0; i &lt; nRows; ++i) {<a name="line.946"></a>
950 <FONT color="green">947</FONT> if (i &gt; 0) {<a name="line.947"></a>
951 <FONT color="green">948</FONT> res.append(",");<a name="line.948"></a>
952 <FONT color="green">949</FONT> }<a name="line.949"></a>
953 <FONT color="green">950</FONT> res.append("{");<a name="line.950"></a>
954 <FONT color="green">951</FONT> for (int j = 0; j &lt; nCols; ++j) {<a name="line.951"></a>
955 <FONT color="green">952</FONT> if (j &gt; 0) {<a name="line.952"></a>
956 <FONT color="green">953</FONT> res.append(",");<a name="line.953"></a>
957 <FONT color="green">954</FONT> }<a name="line.954"></a>
958 <FONT color="green">955</FONT> res.append(getEntry(i, j));<a name="line.955"></a>
959 <FONT color="green">956</FONT> }<a name="line.956"></a>
960 <FONT color="green">957</FONT> res.append("}");<a name="line.957"></a>
961 <FONT color="green">958</FONT> }<a name="line.958"></a>
962 <FONT color="green">959</FONT> <a name="line.959"></a>
963 <FONT color="green">960</FONT> res.append("}");<a name="line.960"></a>
964 <FONT color="green">961</FONT> return res.toString();<a name="line.961"></a>
965 <FONT color="green">962</FONT> <a name="line.962"></a>
966 <FONT color="green">963</FONT> }<a name="line.963"></a>
967 <FONT color="green">964</FONT> <a name="line.964"></a>
968 <FONT color="green">965</FONT> /**<a name="line.965"></a>
969 <FONT color="green">966</FONT> * Returns true iff &lt;code&gt;object&lt;/code&gt; is a<a name="line.966"></a>
970 <FONT color="green">967</FONT> * &lt;code&gt;FieldMatrix&lt;/code&gt; instance with the same dimensions as this<a name="line.967"></a>
971 <FONT color="green">968</FONT> * and all corresponding matrix entries are equal.<a name="line.968"></a>
972 <FONT color="green">969</FONT> *<a name="line.969"></a>
973 <FONT color="green">970</FONT> * @param object the object to test equality against.<a name="line.970"></a>
974 <FONT color="green">971</FONT> * @return true if object equals this<a name="line.971"></a>
975 <FONT color="green">972</FONT> */<a name="line.972"></a>
976 <FONT color="green">973</FONT> @Override<a name="line.973"></a>
977 <FONT color="green">974</FONT> public boolean equals(final Object object) {<a name="line.974"></a>
978 <FONT color="green">975</FONT> if (object == this ) {<a name="line.975"></a>
979 <FONT color="green">976</FONT> return true;<a name="line.976"></a>
980 <FONT color="green">977</FONT> }<a name="line.977"></a>
981 <FONT color="green">978</FONT> if (object instanceof FieldMatrix&lt;?&gt; == false) {<a name="line.978"></a>
982 <FONT color="green">979</FONT> return false;<a name="line.979"></a>
983 <FONT color="green">980</FONT> }<a name="line.980"></a>
984 <FONT color="green">981</FONT> FieldMatrix&lt;?&gt; m = (FieldMatrix&lt;?&gt;) object;<a name="line.981"></a>
985 <FONT color="green">982</FONT> final int nRows = getRowDimension();<a name="line.982"></a>
986 <FONT color="green">983</FONT> final int nCols = getColumnDimension();<a name="line.983"></a>
987 <FONT color="green">984</FONT> if (m.getColumnDimension() != nCols || m.getRowDimension() != nRows) {<a name="line.984"></a>
988 <FONT color="green">985</FONT> return false;<a name="line.985"></a>
989 <FONT color="green">986</FONT> }<a name="line.986"></a>
990 <FONT color="green">987</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.987"></a>
991 <FONT color="green">988</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.988"></a>
992 <FONT color="green">989</FONT> if (!getEntry(row, col).equals(m.getEntry(row, col))) {<a name="line.989"></a>
993 <FONT color="green">990</FONT> return false;<a name="line.990"></a>
994 <FONT color="green">991</FONT> }<a name="line.991"></a>
995 <FONT color="green">992</FONT> }<a name="line.992"></a>
996 <FONT color="green">993</FONT> }<a name="line.993"></a>
997 <FONT color="green">994</FONT> return true;<a name="line.994"></a>
998 <FONT color="green">995</FONT> }<a name="line.995"></a>
999 <FONT color="green">996</FONT> <a name="line.996"></a>
1000 <FONT color="green">997</FONT> /**<a name="line.997"></a>
1001 <FONT color="green">998</FONT> * Computes a hashcode for the matrix.<a name="line.998"></a>
1002 <FONT color="green">999</FONT> *<a name="line.999"></a>
1003 <FONT color="green">1000</FONT> * @return hashcode for matrix<a name="line.1000"></a>
1004 <FONT color="green">1001</FONT> */<a name="line.1001"></a>
1005 <FONT color="green">1002</FONT> @Override<a name="line.1002"></a>
1006 <FONT color="green">1003</FONT> public int hashCode() {<a name="line.1003"></a>
1007 <FONT color="green">1004</FONT> int ret = 322562;<a name="line.1004"></a>
1008 <FONT color="green">1005</FONT> final int nRows = getRowDimension();<a name="line.1005"></a>
1009 <FONT color="green">1006</FONT> final int nCols = getColumnDimension();<a name="line.1006"></a>
1010 <FONT color="green">1007</FONT> ret = ret * 31 + nRows;<a name="line.1007"></a>
1011 <FONT color="green">1008</FONT> ret = ret * 31 + nCols;<a name="line.1008"></a>
1012 <FONT color="green">1009</FONT> for (int row = 0; row &lt; nRows; ++row) {<a name="line.1009"></a>
1013 <FONT color="green">1010</FONT> for (int col = 0; col &lt; nCols; ++col) {<a name="line.1010"></a>
1014 <FONT color="green">1011</FONT> ret = ret * 31 + (11 * (row+1) + 17 * (col+1)) * getEntry(row, col).hashCode();<a name="line.1011"></a>
1015 <FONT color="green">1012</FONT> }<a name="line.1012"></a>
1016 <FONT color="green">1013</FONT> }<a name="line.1013"></a>
1017 <FONT color="green">1014</FONT> return ret;<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> * Check if a row index is valid.<a name="line.1018"></a>
1022 <FONT color="green">1019</FONT> * @param row row index to check<a name="line.1019"></a>
1023 <FONT color="green">1020</FONT> * @exception MatrixIndexException if index is not valid<a name="line.1020"></a>
1024 <FONT color="green">1021</FONT> */<a name="line.1021"></a>
1025 <FONT color="green">1022</FONT> protected void checkRowIndex(final int row) {<a name="line.1022"></a>
1026 <FONT color="green">1023</FONT> if (row &lt; 0 || row &gt;= getRowDimension()) {<a name="line.1023"></a>
1027 <FONT color="green">1024</FONT> throw new MatrixIndexException("row index {0} out of allowed range [{1}, {2}]",<a name="line.1024"></a>
1028 <FONT color="green">1025</FONT> row, 0, getRowDimension() - 1);<a name="line.1025"></a>
1029 <FONT color="green">1026</FONT> }<a name="line.1026"></a>
1030 <FONT color="green">1027</FONT> }<a name="line.1027"></a>
1031 <FONT color="green">1028</FONT> <a name="line.1028"></a>
1032 <FONT color="green">1029</FONT> /**<a name="line.1029"></a>
1033 <FONT color="green">1030</FONT> * Check if a column index is valid.<a name="line.1030"></a>
1034 <FONT color="green">1031</FONT> * @param column column index to check<a name="line.1031"></a>
1035 <FONT color="green">1032</FONT> * @exception MatrixIndexException if index is not valid<a name="line.1032"></a>
1036 <FONT color="green">1033</FONT> */<a name="line.1033"></a>
1037 <FONT color="green">1034</FONT> protected void checkColumnIndex(final int column)<a name="line.1034"></a>
1038 <FONT color="green">1035</FONT> throws MatrixIndexException {<a name="line.1035"></a>
1039 <FONT color="green">1036</FONT> if (column &lt; 0 || column &gt;= getColumnDimension()) {<a name="line.1036"></a>
1040 <FONT color="green">1037</FONT> throw new MatrixIndexException("column index {0} out of allowed range [{1}, {2}]",<a name="line.1037"></a>
1041 <FONT color="green">1038</FONT> column, 0, getColumnDimension() - 1);<a name="line.1038"></a>
1042 <FONT color="green">1039</FONT> }<a name="line.1039"></a>
1043 <FONT color="green">1040</FONT> }<a name="line.1040"></a>
1044 <FONT color="green">1041</FONT> <a name="line.1041"></a>
1045 <FONT color="green">1042</FONT> /**<a name="line.1042"></a>
1046 <FONT color="green">1043</FONT> * Check if submatrix ranges indices are valid.<a name="line.1043"></a>
1047 <FONT color="green">1044</FONT> * Rows and columns are indicated counting from 0 to n-1.<a name="line.1044"></a>
1048 <FONT color="green">1045</FONT> *<a name="line.1045"></a>
1049 <FONT color="green">1046</FONT> * @param startRow Initial row index<a name="line.1046"></a>
1050 <FONT color="green">1047</FONT> * @param endRow Final row index<a name="line.1047"></a>
1051 <FONT color="green">1048</FONT> * @param startColumn Initial column index<a name="line.1048"></a>
1052 <FONT color="green">1049</FONT> * @param endColumn Final column index<a name="line.1049"></a>
1053 <FONT color="green">1050</FONT> * @exception MatrixIndexException if the indices are not valid<a name="line.1050"></a>
1054 <FONT color="green">1051</FONT> */<a name="line.1051"></a>
1055 <FONT color="green">1052</FONT> protected void checkSubMatrixIndex(final int startRow, final int endRow,<a name="line.1052"></a>
1056 <FONT color="green">1053</FONT> final int startColumn, final int endColumn) {<a name="line.1053"></a>
1057 <FONT color="green">1054</FONT> checkRowIndex(startRow);<a name="line.1054"></a>
1058 <FONT color="green">1055</FONT> checkRowIndex(endRow);<a name="line.1055"></a>
1059 <FONT color="green">1056</FONT> if (startRow &gt; endRow) {<a name="line.1056"></a>
1060 <FONT color="green">1057</FONT> throw new MatrixIndexException("initial row {0} after final row {1}",<a name="line.1057"></a>
1061 <FONT color="green">1058</FONT> startRow, endRow);<a name="line.1058"></a>
1062 <FONT color="green">1059</FONT> }<a name="line.1059"></a>
1063 <FONT color="green">1060</FONT> <a name="line.1060"></a>
1064 <FONT color="green">1061</FONT> checkColumnIndex(startColumn);<a name="line.1061"></a>
1065 <FONT color="green">1062</FONT> checkColumnIndex(endColumn);<a name="line.1062"></a>
1066 <FONT color="green">1063</FONT> if (startColumn &gt; endColumn) {<a name="line.1063"></a>
1067 <FONT color="green">1064</FONT> throw new MatrixIndexException("initial column {0} after final column {1}",<a name="line.1064"></a>
1068 <FONT color="green">1065</FONT> startColumn, endColumn);<a name="line.1065"></a>
1069 <FONT color="green">1066</FONT> }<a name="line.1066"></a>
1070 <FONT color="green">1067</FONT> <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 <FONT color="green">1071</FONT> /**<a name="line.1071"></a>
1075 <FONT color="green">1072</FONT> * Check if submatrix ranges indices are valid.<a name="line.1072"></a>
1076 <FONT color="green">1073</FONT> * Rows and columns are indicated counting from 0 to n-1.<a name="line.1073"></a>
1077 <FONT color="green">1074</FONT> *<a name="line.1074"></a>
1078 <FONT color="green">1075</FONT> * @param selectedRows Array of row indices.<a name="line.1075"></a>
1079 <FONT color="green">1076</FONT> * @param selectedColumns Array of column indices.<a name="line.1076"></a>
1080 <FONT color="green">1077</FONT> * @exception MatrixIndexException if row or column selections are not valid<a name="line.1077"></a>
1081 <FONT color="green">1078</FONT> */<a name="line.1078"></a>
1082 <FONT color="green">1079</FONT> protected void checkSubMatrixIndex(final int[] selectedRows, final int[] selectedColumns) {<a name="line.1079"></a>
1083 <FONT color="green">1080</FONT> if (selectedRows.length * selectedColumns.length == 0) {<a name="line.1080"></a>
1084 <FONT color="green">1081</FONT> if (selectedRows.length == 0) {<a name="line.1081"></a>
1085 <FONT color="green">1082</FONT> throw new MatrixIndexException("empty selected row index array");<a name="line.1082"></a>
1086 <FONT color="green">1083</FONT> }<a name="line.1083"></a>
1087 <FONT color="green">1084</FONT> throw new MatrixIndexException("empty selected column index array");<a name="line.1084"></a>
1088 <FONT color="green">1085</FONT> }<a name="line.1085"></a>
1089 <FONT color="green">1086</FONT> <a name="line.1086"></a>
1090 <FONT color="green">1087</FONT> for (final int row : selectedRows) {<a name="line.1087"></a>
1091 <FONT color="green">1088</FONT> checkRowIndex(row);<a name="line.1088"></a>
1092 <FONT color="green">1089</FONT> }<a name="line.1089"></a>
1093 <FONT color="green">1090</FONT> for (final int column : selectedColumns) {<a name="line.1090"></a>
1094 <FONT color="green">1091</FONT> checkColumnIndex(column);<a name="line.1091"></a>
1095 <FONT color="green">1092</FONT> }<a name="line.1092"></a>
1096 <FONT color="green">1093</FONT> }<a name="line.1093"></a>
1097 <FONT color="green">1094</FONT> <a name="line.1094"></a>
1098 <FONT color="green">1095</FONT> /**<a name="line.1095"></a>
1099 <FONT color="green">1096</FONT> * Check if a matrix is addition compatible with the instance<a name="line.1096"></a>
1100 <FONT color="green">1097</FONT> * @param m matrix to check<a name="line.1097"></a>
1101 <FONT color="green">1098</FONT> * @exception IllegalArgumentException if matrix is not addition compatible with instance<a name="line.1098"></a>
1102 <FONT color="green">1099</FONT> */<a name="line.1099"></a>
1103 <FONT color="green">1100</FONT> protected void checkAdditionCompatible(final FieldMatrix&lt;T&gt; m) {<a name="line.1100"></a>
1104 <FONT color="green">1101</FONT> if ((getRowDimension() != m.getRowDimension()) ||<a name="line.1101"></a>
1105 <FONT color="green">1102</FONT> (getColumnDimension() != m.getColumnDimension())) {<a name="line.1102"></a>
1106 <FONT color="green">1103</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.1103"></a>
1107 <FONT color="green">1104</FONT> "{0}x{1} and {2}x{3} matrices are not addition compatible",<a name="line.1104"></a>
1108 <FONT color="green">1105</FONT> getRowDimension(), getColumnDimension(),<a name="line.1105"></a>
1109 <FONT color="green">1106</FONT> m.getRowDimension(), m.getColumnDimension());<a name="line.1106"></a>
1110 <FONT color="green">1107</FONT> }<a name="line.1107"></a>
1111 <FONT color="green">1108</FONT> }<a name="line.1108"></a>
1112 <FONT color="green">1109</FONT> <a name="line.1109"></a>
1113 <FONT color="green">1110</FONT> /**<a name="line.1110"></a>
1114 <FONT color="green">1111</FONT> * Check if a matrix is subtraction compatible with the instance<a name="line.1111"></a>
1115 <FONT color="green">1112</FONT> * @param m matrix to check<a name="line.1112"></a>
1116 <FONT color="green">1113</FONT> * @exception IllegalArgumentException if matrix is not subtraction compatible with instance<a name="line.1113"></a>
1117 <FONT color="green">1114</FONT> */<a name="line.1114"></a>
1118 <FONT color="green">1115</FONT> protected void checkSubtractionCompatible(final FieldMatrix&lt;T&gt; m) {<a name="line.1115"></a>
1119 <FONT color="green">1116</FONT> if ((getRowDimension() != m.getRowDimension()) ||<a name="line.1116"></a>
1120 <FONT color="green">1117</FONT> (getColumnDimension() != m.getColumnDimension())) {<a name="line.1117"></a>
1121 <FONT color="green">1118</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.1118"></a>
1122 <FONT color="green">1119</FONT> "{0}x{1} and {2}x{3} matrices are not subtraction compatible",<a name="line.1119"></a>
1123 <FONT color="green">1120</FONT> getRowDimension(), getColumnDimension(),<a name="line.1120"></a>
1124 <FONT color="green">1121</FONT> m.getRowDimension(), m.getColumnDimension());<a name="line.1121"></a>
1125 <FONT color="green">1122</FONT> }<a name="line.1122"></a>
1126 <FONT color="green">1123</FONT> }<a name="line.1123"></a>
1127 <FONT color="green">1124</FONT> <a name="line.1124"></a>
1128 <FONT color="green">1125</FONT> /**<a name="line.1125"></a>
1129 <FONT color="green">1126</FONT> * Check if a matrix is multiplication compatible with the instance<a name="line.1126"></a>
1130 <FONT color="green">1127</FONT> * @param m matrix to check<a name="line.1127"></a>
1131 <FONT color="green">1128</FONT> * @exception IllegalArgumentException if matrix is not multiplication compatible with instance<a name="line.1128"></a>
1132 <FONT color="green">1129</FONT> */<a name="line.1129"></a>
1133 <FONT color="green">1130</FONT> protected void checkMultiplicationCompatible(final FieldMatrix&lt;T&gt; m) {<a name="line.1130"></a>
1134 <FONT color="green">1131</FONT> if (getColumnDimension() != m.getRowDimension()) {<a name="line.1131"></a>
1135 <FONT color="green">1132</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.1132"></a>
1136 <FONT color="green">1133</FONT> "{0}x{1} and {2}x{3} matrices are not multiplication compatible",<a name="line.1133"></a>
1137 <FONT color="green">1134</FONT> getRowDimension(), getColumnDimension(),<a name="line.1134"></a>
1138 <FONT color="green">1135</FONT> m.getRowDimension(), m.getColumnDimension());<a name="line.1135"></a>
1139 <FONT color="green">1136</FONT> }<a name="line.1136"></a>
1140 <FONT color="green">1137</FONT> }<a name="line.1137"></a>
1141 <FONT color="green">1138</FONT> <a name="line.1138"></a>
1142 <FONT color="green">1139</FONT> }<a name="line.1139"></a>
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203 </PRE>
1204 </BODY>
1205 </HTML>