Pascal matrix generation: Difference between revisions

Added Wren
m (→‎{{header|Phix}}: pp_StrFmt tweaks)
(Added Wren)
Line 4,095:
1 4 10 20 35
1 5 15 35 70
</pre>
 
=={{header|Wren}}==
{{libheader|Wren-fmt}}
{{libheader|Wren-math}}
{{libheader|Wren-matrix}}
<lang ecmascript>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)</lang>
 
{{out}}
<pre>
Pascal upper-triangular matrix:
| 1 1 1 1 1|
| 0 1 2 3 4|
| 0 0 1 3 6|
| 0 0 0 1 4|
| 0 0 0 0 1|
 
Pascal lower-triangular matrix:
| 1 0 0 0 0|
| 1 1 0 0 0|
| 1 2 1 0 0|
| 1 3 3 1 0|
| 1 4 6 4 1|
 
Pascal symmetric matrix:
| 1 1 1 1 1|
| 1 2 3 4 5|
| 1 3 6 10 15|
| 1 4 10 20 35|
| 1 5 15 35 70|
</pre>
 
9,485

edits