UNPKG

771 Btext/coffeescriptView Raw
1#-----------------------------------------------------------------------------
2#
3# Create a Hilbert matrix
4#
5# Input: Dimension on stack
6#
7# Output: Hilbert matrix on stack
8#
9# Example:
10#
11# > hilbert(5)
12# ((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))
13#
14#-----------------------------------------------------------------------------
15
16
17
18#define A p1
19#define N p2
20
21#define AELEM(i, j) A->u.tensor->elem[i * n + j]
22
23hilbert = ->
24 i = 0
25 j = 0
26 n = 0
27 save()
28 p2 = pop()
29 push(p2)
30 n = pop_integer()
31 if (n < 2)
32 push_symbol(HILBERT)
33 push(p2)
34 list(2)
35 restore()
36 return
37 push_zero_matrix(n, n)
38 p1 = pop()
39 for i in [0...n]
40 for j in [0...n]
41 push_integer(i + j + 1)
42 inverse()
43 p1.tensor.elem[i * n + j] = pop()
44 push(p1)
45 restore()