00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __MATH_MATRIX_FLOAT_H__
00013 #define __MATH_MATRIX_FLOAT_H__
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #pragma systemFile
00036
00037 #define NR_END 1
00038
00039 #define MATRIX_MAX_SIZE 10
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 void matrixPrintF(float* matrix, int numRows, int numCols, char* label){
00052
00053 int i,j;
00054 writeDebugStreamLine(label);
00055 for (i=0; i<numRows; i++){
00056 for (j=0;j<numCols;j++){
00057 writeDebugStream("%f", matrix[numCols*i+j]);
00058 writeDebugStream("\t");
00059 }
00060 writeDebugStreamLine("");
00061 }
00062 }
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 void matrixPrintL(long* matrix, int numRows, int numCols, char* label){
00075
00076 int i,j;
00077 writeDebugStreamLine(label);
00078 for (i=0; i<numRows; i++){
00079 for (j=0;j<numCols;j++){
00080 writeDebugStream("%d", matrix[numCols*i+j]);
00081 writeDebugStream("\t");
00082 }
00083 writeDebugStreamLine("");
00084 }
00085 }
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 void matrixCopyF(float* source, int numRows, int numCols, float* destination)
00098 {
00099 memcpy(destination, source, numRows * numCols * sizeof(float));
00100 }
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 void matrixCopyL(long* source, int numRows, int numCols, long* destination)
00113 {
00114 memcpy(destination, source, numRows * numCols * sizeof(long));
00115 }
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 void matrixMultF(float* matrixA, float* matrixB, int numRowsA, int numColsA, int numColsB, float* matrixC)
00130 {
00131 int i, j, k;
00132 for (i = 0; i < numRowsA; i++)
00133 for(j = 0; j < numColsB; j++)
00134 {
00135 matrixC[numColsB * i + j] = 0;
00136 for (k = 0; k < numColsA; k++)
00137 matrixC[numColsB*i+j]= matrixC[numColsB*i+j]+matrixA[numColsA*i+k]*matrixB[numColsB*k+j];
00138 }
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 void matrixMultL(long* matrixA, long* matrixB, int numRowsA, int numColsA, int numColsB, long* matrixC)
00154 {
00155 int i, j, k;
00156 for (i = 0; i < numRowsA; i++)
00157 for(j = 0; j < numColsB; j++)
00158 {
00159 matrixC[numColsB * i + j] = 0;
00160 for (k = 0; k < numColsA; k++)
00161 matrixC[numColsB*i+j]= matrixC[numColsB*i+j]+matrixA[numColsA*i+k]*matrixB[numColsB*k+j];
00162 }
00163 }
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 void matrixAddF(float* matrixA, float* matrixB, int numRowsA, int numColsA, float* matrixC)
00177 {
00178 int i, j;
00179 for (i = 0; i < numRowsA; i++)
00180 for(j = 0; j < numColsA; j++)
00181 matrixC[numColsA * i + j] = matrixA[numColsA * i + j] + matrixB[numColsA * i + j];
00182 }
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195 void matrixAddL(long* matrixA, long* matrixB, int numRowsA, int numColsA, long* matrixC)
00196 {
00197 int i, j;
00198 for (i = 0; i < numRowsA; i++)
00199 for(j = 0; j < numColsA; j++)
00200 matrixC[numColsA * i + j] = matrixA[numColsA * i + j] + matrixB[numColsA * i + j];
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 void matrixSubtractF(float* matrixA, float* matrixB, int numRowsA, int numColsA, float* matrixC)
00215 {
00216 int i, j;
00217 for (i = 0; i < numRowsA; i++)
00218 for(j = 0; j < numColsA; j++)
00219 matrixC[numColsA * i + j] = matrixA[numColsA * i +j ] - matrixB[numColsA * i + j];
00220 }
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 void matrixSubtractL(long* matrixA, long* matrixB, int numRowsA, int numColsA, long* matrixC)
00234 {
00235 int i, j;
00236 for (i = 0; i < numRowsA; i++)
00237 for(j = 0; j < numColsA; j++)
00238 matrixC[numColsA * i + j] = matrixA[numColsA * i +j ] - matrixB[numColsA * i + j];
00239 }
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251 void matrixTransposeF(float* matrixA, int numRowsA, int numColsA, float* matrixC)
00252 {
00253 int i, j;
00254 for (i = 0;i < numRowsA; i++)
00255 for(j = 0; j < numColsA; j++)
00256 matrixC[numRowsA * j + i] = matrixA[numColsA * i + j];
00257 }
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 void matrixTransposeL(long* matrixA, int numRowsA, int numColsA, long* matrixC)
00270 {
00271 int i, j;
00272 for (i = 0;i < numRowsA; i++)
00273 for(j = 0; j < numColsA; j++)
00274 matrixC[numRowsA * j + i] = matrixA[numColsA * i + j];
00275 }
00276
00277
00278 #endif // __MATH_MATRIX_FLOAT_H__
00279
00280
00281
00282
00283