Bürgi’s Matrix of his Artificium used to calculate the sine tables in his Fundamentum Astronomiæ 1586-1587.
Bürgi’s Matrix of his Artificium used to calculate the sine tables in his Fundamentum Astronomiæ 1586-1587.
Out[]=
References:
https://en.wikipedia.org/wiki/Jost_B%C3%BCrgi
https://locomat.loria.fr/locomat/reconstructed.html then scroll to 1620 Bürgi
https://locomat.loria.fr/buergi/fundamentum.html
https://www.bibliotekacyfrowa.pl/dlibra/show-content/publication/edition/45624?id=45624
Menso Folkerts, Dieter Launert, Andreas Thom
https://arxiv.org/pdf/1510.03180v2.pdf
Christian Riedweg
https://arxiv.org/pdf/1602.08142.pdf
Joerg Waldvogel
https://people.math.ethz.ch/~waldvoge/Projects/lugano.pdf
https://people.math.ethz.ch/~waldvoge/Projects/lichtenpaper.pdf
https://en.wikipedia.org/wiki/Jost_B%C3%BCrgi
https://locomat.loria.fr/locomat/reconstructed.html then scroll to 1620 Bürgi
https://locomat.loria.fr/buergi/fundamentum.html
https://www.bibliotekacyfrowa.pl/dlibra/show-content/publication/edition/45624?id=45624
Menso Folkerts, Dieter Launert, Andreas Thom
https://arxiv.org/pdf/1510.03180v2.pdf
Christian Riedweg
https://arxiv.org/pdf/1602.08142.pdf
Joerg Waldvogel
https://people.math.ethz.ch/~waldvoge/Projects/lugano.pdf
https://people.math.ethz.ch/~waldvoge/Projects/lichtenpaper.pdf
Bürgi handed his script to the Emperor Rudolph II in Prague in 1592. And was rediscovered 400 years later in 1992 by Menso Folkerts in Wrocław.
The matrix formulation is of course a modern point of view. I follow the path given in the references. Some parts may be new:)
BuergiRow[n][m] is the -th row of BuergiMatrix[n]:
m
In[]:=
BuergiRow[n_Integer?Positive][m_Integer]/;1≤m≤n:=Join[Table[Min[i,m],{i,1,n-1}],{m/2}]
The 5th row of a 7x7 Bürgi Matrix:
In[]:=
BuergiRow[7][5]
Out[]=
1,2,3,4,5,5,
5
2
BuergiMatrix[n] is a SquareMatrix to compute the sine tables by matrix multiplicative iteration with a non zero starting vector:
In[]:=
BuergiMatrix[n_Integer?Positive]:=Table[BuergiRow[n][m],{m,1,n}]
In[]:=
With[{n=7},MatrixForm[BuergiMatrix[n]]]
Out[]//MatrixForm=
1 | 1 | 1 | 1 | 1 | 1 | 1 2 |
1 | 2 | 2 | 2 | 2 | 2 | 1 |
1 | 2 | 3 | 3 | 3 | 3 | 3 2 |
1 | 2 | 3 | 4 | 4 | 4 | 2 |
1 | 2 | 3 | 4 | 5 | 5 | 5 2 |
1 | 2 | 3 | 4 | 5 | 6 | 3 |
1 | 2 | 3 | 4 | 5 | 6 | 7 2 |
BuergiMatrixL[n] is the component of the LU decomposition:
L
In[]:=
BuergiMatrixL[n_Integer?Positive]:=Normal[SparseArray[{i_,j_}/;j≤i1,{n,n}]]
In[]:=
With[{n=7},MatrixForm[BuergiMatrixL[n]]]
Out[]//MatrixForm=
1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
BuergiMatrixU[n] is the component of the LU decomposition:
U
In[]:=
BuergiMatrixU[n_Integer?Positive]:=Normal[SparseArray[{{i_,j_}/;n>j≥i1,{i_,n}1/2},{n,n}]]
In[]:=
With[{n=7},MatrixForm[BuergiMatrixU[n]]]
Out[]//MatrixForm=
1 | 1 | 1 | 1 | 1 | 1 | 1 2 |
0 | 1 | 1 | 1 | 1 | 1 | 1 2 |
0 | 0 | 1 | 1 | 1 | 1 | 1 2 |
0 | 0 | 0 | 1 | 1 | 1 | 1 2 |
0 | 0 | 0 | 0 | 1 | 1 | 1 2 |
0 | 0 | 0 | 0 | 0 | 1 | 1 2 |
0 | 0 | 0 | 0 | 0 | 0 | 1 2 |
Check that :
BuergiMatrixL[n].BuergiMatrixU[n]=BuergiMatrix[n]
In[]:=
With[{n=7},MatrixForm[BuergiMatrixL[n].BuergiMatrixU[n]]==MatrixForm[BuergiMatrix[n]]]
Out[]=
True
InverseBuergiMatrix[n] is the inverse of BuergiMatrix[n] and it is tridiagonal.
In[]:=
InverseBuergiMatrix[n_Integer?Positive]:=Normal[SparseArray[{{n,n-1}-2,{i_,i_}2,{i_,j_}/;Abs[i-j]==1-1},{n,n}]]
In[]:=
With[{n=7},MatrixForm[InverseBuergiMatrix[n]]]
Out[]//MatrixForm=
2 | -1 | 0 | 0 | 0 | 0 | 0 |
-1 | 2 | -1 | 0 | 0 | 0 | 0 |
0 | -1 | 2 | -1 | 0 | 0 | 0 |
0 | 0 | -1 | 2 | -1 | 0 | 0 |
0 | 0 | 0 | -1 | 2 | -1 | 0 |
0 | 0 | 0 | 0 | -1 | 2 | -1 |
0 | 0 | 0 | 0 | 0 | -2 | 2 |
Check that is indeed tridiagonal:
-1
BuergiMatrix[n]
In[]:=
With[{n=7},Inverse[BuergiMatrix[n]]InverseBuergiMatrix[n]]
Out[]=
True
Check that is indeed BuergiMatrix[n]:
-1
InverseBuergiMatrix[n]
In[]:=
With[{n=7},Inverse[InverseBuergiMatrix[n]]BuergiMatrix[n]]
Out[]=
True
BuergiMatrix[n] has n different eigenvectors. BuergiEigenvector[n][j] gives the -th eigenvector of BuergiMatrix[n] ():
j
1≤j≤n
BuergiEigenvector[n_Integer?Positive][j_Integer]/;1≤j≤n:=TableInactive[Sin]i(2j-1),{i,1,n}(*Inactiveisusedhere,topreventtoearlysimplifications*)
π
2n
j-1
(-1)
In[]:=
BuergiEigenvector[7][1]
Out[]=
Sin,Sin,Sin,Sin,Sin,Sin,Sin
π
14
π
7
3π
14
2π
7
5π
14
3π
7
π
2
In[]:=
Activate[%]
Out[]=
Sin,Sin,Sin,Cos,Cos,Cos,1
π
14
π
7
3π
14
3π
14
π
7
π
14
In[]:=
With[{n=7},TraditionalForm[MatrixForm[Table[BuergiEigenvector[n][j],{j,1,n}]]]]
Out[]//TraditionalForm=
sin π 14 | sin π 7 | sin 3π 14 | sin 2π 7 | sin 5π 14 | sin 3π 7 | sin π 2 |
sin- 3π 14 | sin- 3π 7 | sin- 9π 14 | sin- 6π 7 | sin- 15π 14 | sin- 9π 7 | sin- 3π 2 |
sin 5π 14 | sin 5π 7 | sin 15π 14 | sin 10π 7 | sin 25π 14 | sin 15π 7 | sin 5π 2 |
sin- π 2 | sin(-π) | sin- 3π 2 | sin(-2π) | sin- 5π 2 | sin(-3π) | sin- 7π 2 |
sin 9π 14 | sin 9π 7 | sin 27π 14 | sin 18π 7 | sin 45π 14 | sin 27π 7 | sin 9π 2 |
sin- 11π 14 | sin- 11π 7 | sin- 33π 14 | sin- 22π 7 | sin- 55π 14 | sin- 33π 7 | sin- 11π 2 |
sin 13π 14 | sin 13π 7 | sin 39π 14 | sin 26π 7 | sin 65π 14 | sin 39π 7 | sin 13π 2 |
In[]:=
TraditionalForm[MatrixForm[Activate[%]]]
Check the formula of eigenvectors numerically:
BuergiMatrix[n] has n different eigenvalues:
Check BuergiEigenvalue numerically:
This is the largest eigenvalue (PerronFrobenius eigenvalue):
And the corresponding eigenvector:
Here is Bürgi’s original example (with four iterations) to show how his algorithm works:
The same table with decimal values:
... and sexagesimal values:
Normalize the sine table and compare to direct computation:
Here’s the same example (with 7 iterations) from Bürgi with additional differences in red:
Black numbers (unnormalized sinus) and red numbers (differences)
Formal Jordan Decomposition of BuergiMatrix
Formal Jordan Decomposition of BuergiMatrix
Example. Compute Bürgi’s sin table with power of BuergiJordan:
Compute Bürgi’s sin table with iteration of BuergiMatrix: