algebrite
Version:
Computer Algebra System in Coffeescript
46 lines (40 loc) • 771 B
text/coffeescript
#-----------------------------------------------------------------------------
#
# Create a Hilbert matrix
#
# Input: Dimension on stack
#
# Output: Hilbert matrix on stack
#
# Example:
#
# > hilbert(5)
# ((1,1/2,1/3,1/4),(1/2,1/3,1/4,1/5),(1/3,1/4,1/5,1/6),(1/4,1/5,1/6,1/7))
#
#-----------------------------------------------------------------------------
#define A p1
#define N p2
#define AELEM(i, j) A->u.tensor->elem[i * n + j]
hilbert = ->
i = 0
j = 0
n = 0
save()
p2 = pop()
push(p2)
n = pop_integer()
if (n < 2)
push_symbol(HILBERT)
push(p2)
list(2)
restore()
return
push_zero_matrix(n, n)
p1 = pop()
for i in [0...n]
for j in [0...n]
push_integer(i + j + 1)
inverse()
p1.tensor.elem[i * n + j] = pop()
push(p1)
restore()