dot product proc

This commit is contained in:
array-in-a-matrix 2022-11-22 20:09:25 -05:00
parent 77eadc54f8
commit 71a2b4a057
2 changed files with 32 additions and 19 deletions

View file

@ -32,31 +32,21 @@ var m2 = newSeqWith(r2, newSeq[float](c2))
procedures.fillMatrix(m2, r2, c2)
var r, c: int
# TODO: calculate dot product (in procedures)
if c1 == r2:
c = c2
r = r1
else:
quit "Matrix dimensions mismatched, operation invalid!", QuitFailure
# calculate dot product (in procedures)
var m = newSeqWith(r, newSeq[float](c))
for i in countup(0, r1-1):
for j in countup(0, c2-1):
for k in countup(0, c1-1):
m[i][j] = m[i][j] + m1[i][k] * m2[k][j]
var m = newSeqWith(0, newSeq[float](0))
m = dot(m1, m2)
# TODO: calculate cross product (in procedures)
echo "\nFirst matrix is:"
procedures.printMatrix(m1, r1)
procedures.printMatrix(m1)
echo "\nSecond matrix is:"
procedures.printMatrix(m2, r2)
procedures.printMatrix(m2)
echo "\nResult matrix is:"
procedures.printMatrix(m, r)
procedures.printMatrix(m)

View file

@ -1,7 +1,8 @@
import strutils
import strutils, sequtils
## prints a matrix to the standard output
proc printMatrix*(matrix: seq[seq[float]], row: int) =
proc printMatrix*(matrix: seq[seq[float]]) =
let row: int = matrix.len
for i in countup(1, row):
echo matrix[i-1]
@ -13,4 +14,26 @@ proc fillMatrix*(matrix: var seq[seq[float]], row, col: int) =
var entry: float = parseFloat(readLine(stdin))
matrix[i-1].add(entry)
matrix[i-1].delete(0)
echo matrix[i-1]
echo matrix[i-1]
## calculate dot product
proc dot*(matrix1: seq[seq[float]], matrix2: seq[seq[float]]): seq[seq[float]] =
let col1: int = matrix1.len
let row1: int = matrix1[0].len
let col2: int = matrix2.len
let row2: int = matrix2[0].len
var col, row: int
if col1 == row2:
col = col2
row = row1
else:
quit "Matrix dimensions mismatched, operation invalid!", QuitFailure
var matrix = newSeqWith(row, newSeq[float](col))
for i in countup(0, row1-1):
for j in countup(0, col2-1):
for k in countup(0, col1-1):
matrix[i][j] = matrix[i][j] + matrix1[i][k] * matrix2[k][j]
return matrix