dot product proc
This commit is contained in:
parent
77eadc54f8
commit
71a2b4a057
22
src/main.nim
22
src/main.nim
|
@ -32,31 +32,21 @@ var m2 = newSeqWith(r2, newSeq[float](c2))
|
||||||
|
|
||||||
procedures.fillMatrix(m2, r2, c2)
|
procedures.fillMatrix(m2, r2, c2)
|
||||||
|
|
||||||
var r, c: int
|
|
||||||
|
|
||||||
# TODO: calculate dot product (in procedures)
|
# calculate dot product (in procedures)
|
||||||
if c1 == r2:
|
|
||||||
c = c2
|
|
||||||
r = r1
|
|
||||||
else:
|
|
||||||
quit "Matrix dimensions mismatched, operation invalid!", QuitFailure
|
|
||||||
|
|
||||||
var m = newSeqWith(r, newSeq[float](c))
|
var m = newSeqWith(0, newSeq[float](0))
|
||||||
|
m = dot(m1, m2)
|
||||||
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]
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: calculate cross product (in procedures)
|
# TODO: calculate cross product (in procedures)
|
||||||
|
|
||||||
|
|
||||||
echo "\nFirst matrix is:"
|
echo "\nFirst matrix is:"
|
||||||
procedures.printMatrix(m1, r1)
|
procedures.printMatrix(m1)
|
||||||
|
|
||||||
echo "\nSecond matrix is:"
|
echo "\nSecond matrix is:"
|
||||||
procedures.printMatrix(m2, r2)
|
procedures.printMatrix(m2)
|
||||||
|
|
||||||
echo "\nResult matrix is:"
|
echo "\nResult matrix is:"
|
||||||
procedures.printMatrix(m, r)
|
procedures.printMatrix(m)
|
|
@ -1,7 +1,8 @@
|
||||||
import strutils
|
import strutils, sequtils
|
||||||
|
|
||||||
## prints a matrix to the standard output
|
## 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):
|
for i in countup(1, row):
|
||||||
echo matrix[i-1]
|
echo matrix[i-1]
|
||||||
|
|
||||||
|
@ -13,4 +14,26 @@ proc fillMatrix*(matrix: var seq[seq[float]], row, col: int) =
|
||||||
var entry: float = parseFloat(readLine(stdin))
|
var entry: float = parseFloat(readLine(stdin))
|
||||||
matrix[i-1].add(entry)
|
matrix[i-1].add(entry)
|
||||||
matrix[i-1].delete(0)
|
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
|
Loading…
Reference in a new issue