summaryrefslogtreecommitdiff
path: root/LA/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'LA/Lib')
-rw-r--r--LA/Lib/Matrix.swift73
1 files changed, 73 insertions, 0 deletions
diff --git a/LA/Lib/Matrix.swift b/LA/Lib/Matrix.swift
new file mode 100644
index 0000000..8b3f538
--- /dev/null
+++ b/LA/Lib/Matrix.swift
@@ -0,0 +1,73 @@
+//
+// Matrix.swift
+// PrySDR
+//
+// Created by Jacky Jack on 20/10/2024.
+//
+
+enum MatrixOperationError:Error {
+ case columnValue
+ case rowValue
+}
+
+/// Matrix Data Type
+class Matrix {
+ /// matrix row number
+ let rows: Int
+ /// matrix column number
+ let columns: Int
+ /// array where matrix is stored
+ var data: [Float]
+
+ /// Create NxM matrix
+ /// - Parameters:
+ /// - rows: number of rows in matrix
+ /// - columns: number of columns in matrix
+ /// - val: default value of matrix elements
+ init(rows: Int, columns: Int, val: Float) throws {
+ if (rows < 1) {
+ throw MatrixOperationError.columnValue
+ }
+ if (columns < 1) {
+ throw MatrixOperationError.rowValue
+ }
+ self.rows = rows
+ self.columns = columns
+ self.data = Array(repeating: 0.0, count: rows*columns)
+ //print(self.data)
+ }
+
+ /// Set elements to value
+ /// - Parameters:
+ /// - val: value to set
+ func set(_ val: Float) {
+ for idx in 0..<self.data.count {
+ self.data[idx] = val
+ }
+ }
+ /// Set all elements to 0
+ func zero() {
+ self.set(0.0)
+ }
+
+ /// Set all elements to 1
+ func one() {
+ self.set(1.0)
+ }
+}
+
+/// Return 0 matrix
+/// - Parameters:
+/// - rows: number of rows in matrix
+/// - columns: number of columns in matrix
+func zero(_ rows: Int, _ columns: Int) -> Matrix {
+ return try! Matrix.init(rows: rows, columns: columns, val: 0.0)
+}
+
+/// Return identity matrix
+/// - Parameters:
+/// - rows: number of rows in matrix
+/// - columns: number of columns in matrix
+func one(_ rows: Int, _ columns: Int) -> Matrix {
+ return try! Matrix.init(rows: rows, columns: columns, val: 1.0)
+}