From 89a2aba0839d28e031e319d0b0e910826c0a2427 Mon Sep 17 00:00:00 2001 From: yashwanthyash225 <54032221+yashwanthyash225@users.noreply.github.com> Date: Sat, 19 Dec 2020 18:45:36 +0530 Subject: [PATCH 1/3] Started doing Matrix operations --- dsalglib/dsalglib.h | 1 + dsalglib/include/matrix.h | 154 +++++++++++++++++++++++++++++++++++++- 2 files changed, 154 insertions(+), 1 deletion(-) diff --git a/dsalglib/dsalglib.h b/dsalglib/dsalglib.h index dffb23a..bb632de 100644 --- a/dsalglib/dsalglib.h +++ b/dsalglib/dsalglib.h @@ -16,5 +16,6 @@ #include "include/tree.h" #include "include/heap.h" #include "include/graph.h" +#include "include/matrix.h" #endif //DSALGLIB_DSALGLIB_H diff --git a/dsalglib/include/matrix.h b/dsalglib/include/matrix.h index 2c4c34d..027246c 100644 --- a/dsalglib/include/matrix.h +++ b/dsalglib/include/matrix.h @@ -4,9 +4,161 @@ #ifndef DSALGLIB_MATRIX_H #define DSALGLIB_MATRIX_H +#include "array.h" namespace dsa { + template + array< array > matrix_add(array< array > arr1,array< array > arr2) + { + long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_mul(array< array > arr1,array< array > arr2) + { + long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); + array a(m2); + array< array > re(n1); + for(int i=0;i + array< array > matrix_sub(array< array > arr1,array< array > arr2) + { + long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_cons_add(array< array > arr1, type par) + { + long long int n1 = arr1.size(), m1 = arr1[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_cons_sub(array< array > arr1, type par) + { + long long int n1 = arr1.size(), m1 = arr1[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_cons_mul(array< array > arr1, type par) + { + long long int n1 = arr1.size(), m1 = arr1[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_cons_div(array< array > arr1, type par) + { + long long int n1 = arr1.size(), m1 = arr1[0].size(); + array a(m1); + array< array > re(n1); + for(int i=0;i + array< array > matrix_transpose(array< array > arr1) + { + long long int n1 = arr1.size(), m1 = arr1[0].size(); + array a(n1); + array< array > re(m1); + for(int i=0;i Date: Sun, 20 Dec 2020 01:03:54 +0530 Subject: [PATCH 2/3] Added matrix operations --- dsalglib/include/matrix.h | 280 +++++++++++++++++++++++++++++++------- 1 file changed, 228 insertions(+), 52 deletions(-) diff --git a/dsalglib/include/matrix.h b/dsalglib/include/matrix.h index 027246c..b0f24ad 100644 --- a/dsalglib/include/matrix.h +++ b/dsalglib/include/matrix.h @@ -1,7 +1,3 @@ -// -// Created by moghya_s on 12/26/2016. -// - #ifndef DSALGLIB_MATRIX_H #define DSALGLIB_MATRIX_H #include "array.h" @@ -9,17 +5,48 @@ namespace dsa { template array< array > matrix_add(array< array > arr1,array< array > arr2) + { + long long int n1 = arr1.size(), n2 = arr2.size(); + long long int m1 = arr1[0].size(), m2=arr2[0].size(); + array< array > re(n1); + for(int i=0;i(m1); + for(int j=0;j + array< array > matrix_sub(array< array > arr1,array< array > arr2) { long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); - array a(m1); array< array > re(n1); for(int i=0;i(m1); + for(int j=0;j + array< array > matrix_multwo(array< array > arr1,array< array > arr2) + { + long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); + array< array > re(n1); for(int i=0;i(m1); for(int j=0;j > matrix_mul(array< array > arr1,array< array > arr2) { long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); - array a(m2); array< array > re(n1); for(int i=0;i(m2); for(int i=0;i - array< array > matrix_sub(array< array > arr1,array< array > arr2) + array< array > matrix_cons_add(array< array > arr, type par) { - long long int n1 = arr1.size(), n2 = arr2.size(), m1 = arr1[0].size(), m2=arr2[0].size(); - array a(m1); + long long int n1 = arr.size(), m1 = arr[0].size(); array< array > re(n1); for(int i=0;i(m1); for(int j=0;j - array< array > matrix_cons_add(array< array > arr1, type par) + array< array > matrix_cons_sub(array< array > arr, type par) { - long long int n1 = arr1.size(), m1 = arr1[0].size(); - array a(m1); + long long int n1 = arr.size(), m1 = arr[0].size(); array< array > re(n1); for(int i=0;i(m1); for(int j=0;j - array< array > matrix_cons_sub(array< array > arr1, type par) + array< array > matrix_cons_mul(array< array > arr, type par) { - long long int n1 = arr1.size(), m1 = arr1[0].size(); - array a(m1); + long long int n1 = arr.size(), m1 = arr[0].size(); array< array > re(n1); for(int i=0;i(m1); for(int j=0;j - array< array > matrix_cons_mul(array< array > arr1, type par) + array< array > matrix_cons_div(array< array > arr, float par) { - long long int n1 = arr1.size(), m1 = arr1[0].size(); - array a(m1); - array< array > re(n1); - for(int i=0;i > re(n1); for(int i=0;i(m1); for(int j=0;j - array< array > matrix_cons_div(array< array > arr1, type par) + array< array > matrix_oneby(array< array > arr) { - long long int n1 = arr1.size(), m1 = arr1[0].size(); - array a(m1); - array< array > re(n1); - for(int i=0;i > re(n1); + float temp=1; for(int i=0;i(m1); for(int j=0;j - array< array > matrix_transpose(array< array > arr1) + array< array > matrix_transpose(array< array > arr) { - long long int n1 = arr1.size(), m1 = arr1[0].size(); - array a(n1); + long long int n1 = arr.size(), m1 = arr[0].size(); array< array > re(m1); - for(int i=0;i(n1); for(int j=0;j + array< array > submatrix(array< array > arr, long long int i1, long long int j1, long long int i2, long long int j2) + { + long long int n = i2-i1+1, m = j2-j1+1; + array< array > re(n); + int k1=0,k2=0; + for(int i=i1;i<=i2;i++) + { + re[k1]=array(m); + for(int j=j1;j<=j2;j++) + { + re[k1][k2]=arr[i][j]; + k2++; + } + k1++; + k2=0; + } + return re; + } + + array< array > matrix_zeros(long long int n, long long int m) + { + array< array > re(n); + for(int i=0;i(m); + return re; + } + + array< array > matrix_ones(long long int n, long long int m) + { + arraya(m); + for(int i=0;i > re(n); + for(int i=0;i + array< array > matrix_powerby(array< array > arr, int par) + { + long long int n1 = arr.size(), m1 = arr[0].size(); + array< array > re = matrix_ones(n1,m1); + for(int i=1;i<=par;i++) + { + re = matrix_multwo(re,arr); + } + return re; + } + + array< array > matrix_identity(long long int m) + { + array< array > re(m); + for(int i=0;i(m); + for(int j=0;j + void getCofactor(array< array > arr, array< array > cotemp, int p, int q, long long int n) + { + int i = 0, j = 0; + for (int row = 0; row < n; row++) + { + for (int col = 0; col < n; col++) + { + if (row != p && col != q) + { + cotemp[i][j++] = arr[row][col]; + if (j == n - 1) + { + j = 0; + i++; + } + } + } + } + } + + template + long long int matrix_det(array< array > arr, long long int n) + { + int D = 0; + if (n == 1) + return arr[0][0]; + arraya(n); + array< array > cotemp(n); + for(int i=0;i + array< array > matrix_adjoint(array< array >arr) + { + long long int N = arr.size(); + array< array > adj(N); + arraya(N); + for(int i=0;i > cotemp(N); + for(int i=0;i + array< array > matrix_inverse(array< array > arr) + { + int N = arr.size(); + array< array > re(N); + arraya(N); + for(int i=0;i > adj=matrix_adjoint(arr); + for (int i=0; i Date: Sun, 20 Dec 2020 15:43:09 +0530 Subject: [PATCH 3/3] Added Matrix operations --- dsalglib/include/matrix.h | 69 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/dsalglib/include/matrix.h b/dsalglib/include/matrix.h index b0f24ad..c17137e 100644 --- a/dsalglib/include/matrix.h +++ b/dsalglib/include/matrix.h @@ -3,6 +3,7 @@ #include "array.h" namespace dsa { + // Addition of Matrices template array< array > matrix_add(array< array > arr1,array< array > arr2) { @@ -20,6 +21,7 @@ namespace dsa return re; } + // Subtraction of Matrices template array< array > matrix_sub(array< array > arr1,array< array > arr2) { @@ -36,6 +38,7 @@ namespace dsa return re; } + // Muliplying Matrices of same size template array< array > matrix_multwo(array< array > arr1,array< array > arr2) { @@ -52,6 +55,7 @@ namespace dsa return re; } + // Matrix Multiplication template array< array > matrix_mul(array< array > arr1,array< array > arr2) { @@ -72,6 +76,7 @@ namespace dsa return re; } + // Adding a constant to every element in Matrix template array< array > matrix_cons_add(array< array > arr, type par) { @@ -89,6 +94,7 @@ namespace dsa return re; } + // Subtracting constant from every element of Matrix template array< array > matrix_cons_sub(array< array > arr, type par) { @@ -105,6 +111,7 @@ namespace dsa return re; } + // Multiplying constant to every element of Matrix template array< array > matrix_cons_mul(array< array > arr, type par) { @@ -121,6 +128,7 @@ namespace dsa return re; } + // Dividing every element of Matrix by constant template array< array > matrix_cons_div(array< array > arr, float par) { @@ -137,6 +145,7 @@ namespace dsa return re; } + // reciprocal of every element in the matrix template array< array > matrix_oneby(array< array > arr) { @@ -154,6 +163,7 @@ namespace dsa return re; } + // get the transpose of Matrix template array< array > matrix_transpose(array< array > arr) { @@ -170,6 +180,7 @@ namespace dsa return re; } + // get the submatrix by giving top-left and bottom-right indices template array< array > submatrix(array< array > arr, long long int i1, long long int j1, long long int i2, long long int j2) { @@ -190,6 +201,7 @@ namespace dsa return re; } + // get the Matrix initialised with 0's array< array > matrix_zeros(long long int n, long long int m) { array< array > re(n); @@ -198,6 +210,7 @@ namespace dsa return re; } + // get the Matrix initialised with 1's array< array > matrix_ones(long long int n, long long int m) { arraya(m); @@ -209,6 +222,7 @@ namespace dsa return re; } + // get the Matrix where every element is raised to power template array< array > matrix_powerby(array< array > arr, int par) { @@ -221,6 +235,7 @@ namespace dsa return re; } + // get the Identity Matrix initialised with size array< array > matrix_identity(long long int m) { array< array > re(m); @@ -241,6 +256,7 @@ namespace dsa return re; } + // calculating Co-factors where this is used to find determinant and adjoint of Matrix template void getCofactor(array< array > arr, array< array > cotemp, int p, int q, long long int n) { @@ -262,10 +278,11 @@ namespace dsa } } + // Calculates the determinant of matrix template long long int matrix_det(array< array > arr, long long int n) { - int D = 0; + long long int D = 0; if (n == 1) return arr[0][0]; arraya(n); @@ -282,6 +299,7 @@ namespace dsa return D; } + // gets the Adjoint Matrix template array< array > matrix_adjoint(array< array >arr) { @@ -314,6 +332,7 @@ namespace dsa return adj; } + // get the Inverse of a Matrix template array< array > matrix_inverse(array< array > arr) { @@ -336,5 +355,53 @@ namespace dsa return re; } + // convert to upper triangular Matrix + template + array< array > matrix_upper(array< array > arr) + { + long long int n = arr.size(), m = arr[0].size(); + array< array >re(n); + for(int i=0;i(m); + for(int j=0;jj) + { + re[i][j]=0; + } + else + { + re[i][j]=arr[i][j]; + } + } + } + return re; + } + + // convert to lower triangular matrix + template + array< array > matrix_lower(array< array > arr) + { + long long int n = arr.size(), m = arr[0].size(); + array< array >re(n); + for(int i=0;i(m); + for(int j=0;ji) + { + re[i][j]=0; + } + else + { + re[i][j]=arr[i][j]; + } + } + } + return re; + } + } #endif //DSALGLIB_MATRIX_H