sdf

Dependencies:   mbed arrc_mbed BNO055 SDFileSystem NK_mbed

Committer:
hamohamo
Date:
Sun Aug 22 13:07:29 2021 +0000
Revision:
1:32030d9ba873
Parent:
0:e32543d6e1e4
asd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hamohamo 0:e32543d6e1e4 1 /** @file
hamohamo 0:e32543d6e1e4 2 *
hamohamo 0:e32543d6e1e4 3 * My program.
hamohamo 0:e32543d6e1e4 4 */
hamohamo 0:e32543d6e1e4 5
hamohamo 0:e32543d6e1e4 6 #ifndef MATRIX2_LIB
hamohamo 0:e32543d6e1e4 7 #define MATRIX2_LIB
hamohamo 0:e32543d6e1e4 8
hamohamo 0:e32543d6e1e4 9 #include<vector>
hamohamo 0:e32543d6e1e4 10 #include<stdarg.h>
hamohamo 0:e32543d6e1e4 11 #include<mbed.h>
hamohamo 0:e32543d6e1e4 12
hamohamo 0:e32543d6e1e4 13 using namespace std;
hamohamo 0:e32543d6e1e4 14
hamohamo 0:e32543d6e1e4 15
hamohamo 0:e32543d6e1e4 16 /** Matrix class
hamohamo 0:e32543d6e1e4 17 *
hamohamo 0:e32543d6e1e4 18 * This is the simple matrix class.
hamohamo 0:e32543d6e1e4 19 * You can use some basic culculation(add, subtract, multiple).
hamohamo 0:e32543d6e1e4 20 */
hamohamo 0:e32543d6e1e4 21 Serial pc(USBTX, USBRX);
hamohamo 0:e32543d6e1e4 22
hamohamo 0:e32543d6e1e4 23 template <class T>
hamohamo 0:e32543d6e1e4 24 class Matrix{
hamohamo 0:e32543d6e1e4 25 private:
hamohamo 0:e32543d6e1e4 26 int row;
hamohamo 0:e32543d6e1e4 27 int col;
hamohamo 0:e32543d6e1e4 28 vector< vector<T> > matrix;
hamohamo 0:e32543d6e1e4 29 public:
hamohamo 0:e32543d6e1e4 30 //Serial pc(USBTX, USBRX);
hamohamo 0:e32543d6e1e4 31
hamohamo 0:e32543d6e1e4 32 /** Constructor Matrix
hamohamo 0:e32543d6e1e4 33 * This is constructor.
hamohamo 0:e32543d6e1e4 34 * @param n number of matrix's row
hamohamo 0:e32543d6e1e4 35 * @param m number of matrix's col
hamohamo 0:e32543d6e1e4 36 * @param initNum digit you want fill in the matrix first
hamohamo 0:e32543d6e1e4 37 */
hamohamo 0:e32543d6e1e4 38 Matrix(int n, int m, T initNum):row(n), col(m), matrix( vector< vector<T> >(n, vector<T>(m))){
hamohamo 0:e32543d6e1e4 39 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 40 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 41 matrix[i][j] = initNum;
hamohamo 0:e32543d6e1e4 42 }
hamohamo 0:e32543d6e1e4 43 }
hamohamo 0:e32543d6e1e4 44 }
hamohamo 0:e32543d6e1e4 45
hamohamo 0:e32543d6e1e4 46 Matrix(int n, int m):row(n), col(m), matrix( vector< vector<T> >(n, vector<T>(m))){}
hamohamo 0:e32543d6e1e4 47
hamohamo 0:e32543d6e1e4 48 ~Matrix(){}
hamohamo 0:e32543d6e1e4 49
hamohamo 0:e32543d6e1e4 50 void show(){
hamohamo 0:e32543d6e1e4 51 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 52 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 53 pc.printf("%lf", matrix[i][j]);
hamohamo 0:e32543d6e1e4 54 }
hamohamo 0:e32543d6e1e4 55 pc.printf("\n");
hamohamo 0:e32543d6e1e4 56 }
hamohamo 0:e32543d6e1e4 57 pc.printf("\n");
hamohamo 0:e32543d6e1e4 58 }
hamohamo 0:e32543d6e1e4 59
hamohamo 0:e32543d6e1e4 60 /** Row
hamohamo 0:e32543d6e1e4 61 * Use when you want to refer number of matrix's row
hamohamo 0:e32543d6e1e4 62 * @retval this will return number of matrix's row
hamohamo 0:e32543d6e1e4 63 */
hamohamo 0:e32543d6e1e4 64 int Row(){ return row; }
hamohamo 0:e32543d6e1e4 65 int Col(){ return col; }
hamohamo 0:e32543d6e1e4 66
hamohamo 0:e32543d6e1e4 67
hamohamo 0:e32543d6e1e4 68 vector<T> operator[](const int i) const{return matrix[i];}
hamohamo 0:e32543d6e1e4 69 vector<T>& operator[](const int i){return matrix[i];}
hamohamo 0:e32543d6e1e4 70
hamohamo 0:e32543d6e1e4 71 void set(int num, ...){
hamohamo 0:e32543d6e1e4 72 va_list ap;
hamohamo 0:e32543d6e1e4 73 va_start(ap, num);
hamohamo 0:e32543d6e1e4 74 for(int i=0; i<row; i++){
hamohamo 0:e32543d6e1e4 75 for(int j=0; j<col; j++){
hamohamo 0:e32543d6e1e4 76 matrix[i][j] = va_arg(ap, T);
hamohamo 0:e32543d6e1e4 77 //pc.printf("%lf\n", va_arg(ap, T));
hamohamo 0:e32543d6e1e4 78 }
hamohamo 0:e32543d6e1e4 79 }
hamohamo 0:e32543d6e1e4 80 va_end(ap);
hamohamo 0:e32543d6e1e4 81 }
hamohamo 0:e32543d6e1e4 82
hamohamo 0:e32543d6e1e4 83
hamohamo 0:e32543d6e1e4 84 Matrix& operator=(const Matrix& a){
hamohamo 0:e32543d6e1e4 85 if((row == a.row) && (col == a.col)){
hamohamo 0:e32543d6e1e4 86 row = a.row;
hamohamo 0:e32543d6e1e4 87 col = a.col;
hamohamo 0:e32543d6e1e4 88 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 89 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 90 matrix[i][j] = a[i][j];
hamohamo 0:e32543d6e1e4 91 }
hamohamo 0:e32543d6e1e4 92 }
hamohamo 0:e32543d6e1e4 93 }else{
hamohamo 0:e32543d6e1e4 94
hamohamo 0:e32543d6e1e4 95 }
hamohamo 0:e32543d6e1e4 96 return *this;
hamohamo 0:e32543d6e1e4 97 }
hamohamo 0:e32543d6e1e4 98
hamohamo 0:e32543d6e1e4 99 Matrix& operator+=(const Matrix& a){
hamohamo 0:e32543d6e1e4 100 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 101 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 102 matrix[i][j] += a[i][j];
hamohamo 0:e32543d6e1e4 103 }
hamohamo 0:e32543d6e1e4 104 }
hamohamo 0:e32543d6e1e4 105 return *this;
hamohamo 0:e32543d6e1e4 106 }
hamohamo 0:e32543d6e1e4 107
hamohamo 0:e32543d6e1e4 108 Matrix operator+(const Matrix& a) const {
hamohamo 0:e32543d6e1e4 109 return Matrix(*this) += a;
hamohamo 0:e32543d6e1e4 110 }
hamohamo 0:e32543d6e1e4 111
hamohamo 0:e32543d6e1e4 112 Matrix& operator-=(const Matrix& a){
hamohamo 0:e32543d6e1e4 113 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 114 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 115 matrix[i][j] -= a[i][j];
hamohamo 0:e32543d6e1e4 116 }
hamohamo 0:e32543d6e1e4 117 }
hamohamo 0:e32543d6e1e4 118 return *this;
hamohamo 0:e32543d6e1e4 119 }
hamohamo 0:e32543d6e1e4 120
hamohamo 0:e32543d6e1e4 121 Matrix operator-(const Matrix& a) const {
hamohamo 0:e32543d6e1e4 122 return Matrix(*this) -= a;
hamohamo 0:e32543d6e1e4 123 }
hamohamo 0:e32543d6e1e4 124
hamohamo 0:e32543d6e1e4 125 Matrix& operator*=(const Matrix& a){
hamohamo 0:e32543d6e1e4 126 Matrix<T> tmp(row, a.col);
hamohamo 0:e32543d6e1e4 127 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 128 for(int j=0;j<a.col;j++){
hamohamo 0:e32543d6e1e4 129 for(int k=0;k<col;k++){
hamohamo 0:e32543d6e1e4 130 tmp[i][j] += matrix[i][k] * a[k][j];
hamohamo 0:e32543d6e1e4 131 }
hamohamo 0:e32543d6e1e4 132 }
hamohamo 0:e32543d6e1e4 133 }
hamohamo 0:e32543d6e1e4 134 col = a.col;
hamohamo 0:e32543d6e1e4 135 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 136 matrix[i].resize(col);
hamohamo 0:e32543d6e1e4 137 }
hamohamo 0:e32543d6e1e4 138 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 139 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 140 matrix[i][j] = tmp[i][j];
hamohamo 0:e32543d6e1e4 141 }
hamohamo 0:e32543d6e1e4 142 }
hamohamo 0:e32543d6e1e4 143
hamohamo 0:e32543d6e1e4 144 return *this;
hamohamo 0:e32543d6e1e4 145 }
hamohamo 0:e32543d6e1e4 146
hamohamo 0:e32543d6e1e4 147 Matrix operator*(const Matrix& a) const {
hamohamo 0:e32543d6e1e4 148 return Matrix(*this) *= a;
hamohamo 0:e32543d6e1e4 149 }
hamohamo 0:e32543d6e1e4 150 Matrix& operator*=(const T& a){
hamohamo 0:e32543d6e1e4 151 for(int i=0;i<row;i++){
hamohamo 0:e32543d6e1e4 152 for(int j=0;j<col;j++){
hamohamo 0:e32543d6e1e4 153 matrix[i][j] *= a;
hamohamo 0:e32543d6e1e4 154 }
hamohamo 0:e32543d6e1e4 155 }
hamohamo 0:e32543d6e1e4 156 return *this;
hamohamo 0:e32543d6e1e4 157 }
hamohamo 0:e32543d6e1e4 158
hamohamo 0:e32543d6e1e4 159 Matrix operator*(const T& a) const {
hamohamo 0:e32543d6e1e4 160 return Matrix(*this) *= a;
hamohamo 0:e32543d6e1e4 161 }
hamohamo 0:e32543d6e1e4 162 };
hamohamo 0:e32543d6e1e4 163
hamohamo 0:e32543d6e1e4 164
hamohamo 0:e32543d6e1e4 165 #endif