ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/math/tnt_array1d_utils.hpp
Revision: 3495
Committed: Tue Apr 7 20:16:26 2009 UTC (16 years ago) by gezelter
File size: 3082 byte(s)
Log Message:
adding jama and tnt libraries for various linear algebra routines

File Contents

# Content
1 /*
2 *
3 * Template Numerical Toolkit (TNT)
4 *
5 * Mathematical and Computational Sciences Division
6 * National Institute of Technology,
7 * Gaithersburg, MD USA
8 *
9 *
10 * This software was developed at the National Institute of Standards and
11 * Technology (NIST) by employees of the Federal Government in the course
12 * of their official duties. Pursuant to title 17 Section 105 of the
13 * United States Code, this software is not subject to copyright protection
14 * and is in the public domain. NIST assumes no responsibility whatsoever for
15 * its use by other parties, and makes no guarantees, expressed or implied,
16 * about its quality, reliability, or any other characteristic.
17 *
18 */
19
20 #ifndef TNT_ARRAY1D_UTILS_H
21 #define TNT_ARRAY1D_UTILS_H
22
23 #include <cstdlib>
24 #include <cassert>
25
26 namespace TNT
27 {
28
29
30 template <class T>
31 std::ostream& operator<<(std::ostream &s, const Array1D<T> &A)
32 {
33 int N=A.dim1();
34
35 #ifdef TNT_DEBUG
36 s << "addr: " << (void *) &A[0] << "\n";
37 #endif
38 s << N << "\n";
39 for (int j=0; j<N; j++)
40 {
41 s << A[j] << "\n";
42 }
43 s << "\n";
44
45 return s;
46 }
47
48 template <class T>
49 std::istream& operator>>(std::istream &s, Array1D<T> &A)
50 {
51 int N;
52 s >> N;
53
54 Array1D<T> B(N);
55 for (int i=0; i<N; i++)
56 s >> B[i];
57 A = B;
58 return s;
59 }
60
61
62
63 template <class T>
64 Array1D<T> operator+(const Array1D<T> &A, const Array1D<T> &B)
65 {
66 int n = A.dim1();
67
68 if (B.dim1() != n )
69 return Array1D<T>();
70
71 else
72 {
73 Array1D<T> C(n);
74
75 for (int i=0; i<n; i++)
76 {
77 C[i] = A[i] + B[i];
78 }
79 return C;
80 }
81 }
82
83
84
85 template <class T>
86 Array1D<T> operator-(const Array1D<T> &A, const Array1D<T> &B)
87 {
88 int n = A.dim1();
89
90 if (B.dim1() != n )
91 return Array1D<T>();
92
93 else
94 {
95 Array1D<T> C(n);
96
97 for (int i=0; i<n; i++)
98 {
99 C[i] = A[i] - B[i];
100 }
101 return C;
102 }
103 }
104
105
106 template <class T>
107 Array1D<T> operator*(const Array1D<T> &A, const Array1D<T> &B)
108 {
109 int n = A.dim1();
110
111 if (B.dim1() != n )
112 return Array1D<T>();
113
114 else
115 {
116 Array1D<T> C(n);
117
118 for (int i=0; i<n; i++)
119 {
120 C[i] = A[i] * B[i];
121 }
122 return C;
123 }
124 }
125
126
127 template <class T>
128 Array1D<T> operator/(const Array1D<T> &A, const Array1D<T> &B)
129 {
130 int n = A.dim1();
131
132 if (B.dim1() != n )
133 return Array1D<T>();
134
135 else
136 {
137 Array1D<T> C(n);
138
139 for (int i=0; i<n; i++)
140 {
141 C[i] = A[i] / B[i];
142 }
143 return C;
144 }
145 }
146
147
148
149
150
151
152
153
154
155 template <class T>
156 Array1D<T>& operator+=(Array1D<T> &A, const Array1D<T> &B)
157 {
158 int n = A.dim1();
159
160 if (B.dim1() == n)
161 {
162 for (int i=0; i<n; i++)
163 {
164 A[i] += B[i];
165 }
166 }
167 return A;
168 }
169
170
171
172
173 template <class T>
174 Array1D<T>& operator-=(Array1D<T> &A, const Array1D<T> &B)
175 {
176 int n = A.dim1();
177
178 if (B.dim1() == n)
179 {
180 for (int i=0; i<n; i++)
181 {
182 A[i] -= B[i];
183 }
184 }
185 return A;
186 }
187
188
189
190 template <class T>
191 Array1D<T>& operator*=(Array1D<T> &A, const Array1D<T> &B)
192 {
193 int n = A.dim1();
194
195 if (B.dim1() == n)
196 {
197 for (int i=0; i<n; i++)
198 {
199 A[i] *= B[i];
200 }
201 }
202 return A;
203 }
204
205
206
207
208 template <class T>
209 Array1D<T>& operator/=(Array1D<T> &A, const Array1D<T> &B)
210 {
211 int n = A.dim1();
212
213 if (B.dim1() == n)
214 {
215 for (int i=0; i<n; i++)
216 {
217 A[i] /= B[i];
218 }
219 }
220 return A;
221 }
222
223
224
225
226
227
228 } // namespace TNT
229
230 #endif