5 #ifndef _MATRIXOPERATION_H_
6 #define _MATRIXOPERATION_H_
8 template <
class T,
int N>
18 for (
int i=0; i<
NSQR; i++){
24 for (
int i=0; i<N; i++){
25 for (
int j=0; j<N; j++){
38 for(
int i=0; i<N; i++)
39 for(
int j=0; j<N; j++)
40 (*
this)(i,j) = (i==j) ? s : T(0.);
46 for(
int i=0;i<
NSQR;i++)
52 for(
int i=0; i<N; i++){
53 for (
int j=0; j<N; j++)
54 cout << (*
this)(i,j) <<
" ";
68 T d = a(0,0)*a(1,1)-a(0,1)*a(1,0);
74 T d = a(0,0)*(a(1,1)*a(2,2)-a(1,2)*a(2,1))
75 -a(0,1)*(a(1,0)*a(2,2) - a(1,2)*a(2,0))
76 +a(0,2)*(a(1,0)*a(2,1) - a(1,1)*a(2,0));
80 template<
class T,
int N>
93 for(
int k=0; k<size; k++){
96 for(
int i=0; i<size; i++){
97 for(
int j=0; j<size; j++){
122 inv(0,0) = a(1,1) / d;
123 inv(0,1) = -a(0,1) / d;
124 inv(1,0) = -a(1,0) / d;
125 inv(1,1) = a(0,0) / d;
137 inv(0,0) = (a(1,1)*a(2,2) - a(1,2)*a(2,1)) / d;
138 inv(0,1) = (a(0,2)*a(2,1) - a(0,1)*a(2,2)) / d;
139 inv(0,2) = (a(0,1)*a(1,2) - a(0,2)*a(1,1)) / d;
140 inv(1,0) = (a(1,2)*a(2,0) - a(1,0)*a(2,2)) / d;
141 inv(1,1) = (a(0,0)*a(2,2) - a(0,2)*a(2,0)) / d;
142 inv(1,2) = (a(0,2)*a(1,0) - a(0,0)*a(1,2)) / d;
143 inv(2,0) = (a(1,0)*a(2,1) - a(1,1)*a(2,0)) / d;
144 inv(2,1) = (a(0,1)*a(2,0) - a(0,0)*a(2,1)) / d;
145 inv(2,2) = (a(0,0)*a(1,1) - a(0,1)*a(1,0)) / d;
150 template<
class T,
int N>
160 int p, q, m, n, i, j;
162 for(q=0; q<size; q++){
163 for(p=0; p<size; p++){
166 for(i=0; i<size; i++){
167 for(j=0; j<size; j++){
184 for(i=0; i<size; i++) {
185 for(j=0; j<size; j++){
190 for(i=0; i<size; i++) {
191 for(j=0; j<size; j++){
200 template<
class T,
int N>
216 for (
int i = 0; i < size; i++){indx[i] = i;}
219 for (
int i = 0; i < size; i++)
222 for (
int j = 0; j < size; j++)
224 if (
fabs(a(i,j)) > c1)
232 for (
int j = 0; j < size-1; j++)
238 for (
int i = j; i < size; i++)
240 pi =
fabs(a(indx[i],j))/c[indx[i]];
251 for (
int i = j+1; i < size; i++)
254 pj = a(indx[i],j)/a(indx[j],j);
258 for (
int k = j+1; k < size; k++)
260 a(indx[i],k) = a(indx[i],k)-pj*a(indx[j],k);
272 for (
int i = 0; i < size-1; i++)
274 for (
int j = i+1; j < size; j++)
276 for (
int k = 0; k < size; k++)
278 b(indx[j],k) = b(indx[j],k)-a(indx[j],i)*b(indx[i],k);
283 for (
int col = 0; col < size; col++)
285 x(size-1,col) = b(indx[size-1],col)/a(indx[size-1],size-1);
286 for (
int j = size-2; j >= 0; j = j-1)
288 x(j,col) = b(indx[j],col);
289 for (
int k = j+1; k < size; k++)
291 x(j,col) = x(j,col)-a(indx[j],k)*x(k,col);
293 x(j,col) = x(j,col)/a(indx[j],j);
SquareMatrix(const SquareMatrix &o)
SquareMatrix & operator=(const SquareMatrix &o)
SquareMatrix< T, N > inverseGauss(SquareMatrix< T, N > &a, int size)
T & operator()(int i, int j)
SquareMatrix< T, 2 > inverse(SquareMatrix< T, 2 > &a)
Tangent fabs(const Tangent &a)
SquareMatrix & operator=(const T &s)
T determinant(SquareMatrix< T, 2 > &a)