32 lines
833 B
Nim
32 lines
833 B
Nim
import strfmt
|
|
|
|
type Matrix[M,N: static[int]] = array[M, array[N, float]]
|
|
|
|
let a = [[1.0, 1.0, 1.0, 1.0],
|
|
[2.0, 4.0, 8.0, 16.0],
|
|
[3.0, 9.0, 27.0, 81.0],
|
|
[4.0, 16.0, 64.0, 256.0]]
|
|
|
|
let b = [[ 4.0 , -3.0 , 4/3.0, -1/4.0 ],
|
|
[-13/3.0, 19/4.0, -7/3.0, 11/24.0],
|
|
[ 3/2.0, -2.0 , 7/6.0, -1/4.0 ],
|
|
[ -1/6.0, 1/4.0, -1/6.0, 1/24.0]]
|
|
|
|
proc `$`(m: Matrix): string =
|
|
result = "(["
|
|
for r in m:
|
|
if result.len > 2: result.add "]\n ["
|
|
for val in r: result.add val.format("8.2f")
|
|
result.add "])"
|
|
|
|
proc `*`[M,P,N](a: Matrix[M,P]; b: Matrix[P,N]): Matrix[M,N] =
|
|
for i in result.low .. result.high:
|
|
for j in result[0].low .. result[0].high:
|
|
for k in a[0].low .. a[0].high:
|
|
result[i][j] += a[i][k] * b[k][j]
|
|
|
|
echo a
|
|
echo b
|
|
echo a * b
|
|
echo b * a
|