43 lines
1.1 KiB
Plaintext
43 lines
1.1 KiB
Plaintext
import "./fmt" for Fmt
|
|
import "./math" for Int
|
|
import "./matrix" for Matrix
|
|
|
|
var binomial = Fn.new { |n, k|
|
|
if (n == k) return 1
|
|
var prod = 1
|
|
var i = n - k + 1
|
|
while (i <= n) {
|
|
prod = prod * i
|
|
i = i + 1
|
|
}
|
|
return prod / Int.factorial(k)
|
|
}
|
|
|
|
var pascalUpperTriangular = Fn.new { |n|
|
|
var m = List.filled(n, null)
|
|
for (i in 0...n) {
|
|
m[i] = List.filled(n, 0)
|
|
for (j in 0...n) m[i][j] = binomial.call(j, i)
|
|
}
|
|
return Matrix.new(m)
|
|
}
|
|
|
|
var pascalSymmetric = Fn.new { |n|
|
|
var m = List.filled(n, null)
|
|
for (i in 0...n) {
|
|
m[i] = List.filled(n, 0)
|
|
for (j in 0...n) m[i][j] = binomial.call(i+j, i)
|
|
}
|
|
return Matrix.new(m)
|
|
}
|
|
|
|
var pascalLowerTriangular = Fn.new { |n| pascalSymmetric.call(n).cholesky() }
|
|
|
|
var n = 5
|
|
System.print("Pascal upper-triangular matrix:")
|
|
Fmt.mprint(pascalUpperTriangular.call(n), 2, 0)
|
|
System.print("\nPascal lower-triangular matrix:")
|
|
Fmt.mprint(pascalLowerTriangular.call(n), 2, 0)
|
|
System.print("\nPascal symmetric matrix:")
|
|
Fmt.mprint(pascalSymmetric.call(n), 2, 0)
|