# Vektoren und Matrizen
Erstellen Sie zwei Vektoren $a$ und $b$, die die Zahlen {0,2,4,6,8} enthalten, auf zwei Arten: einmal mit arange und einmal mit linspace. Setzen Sie dann den ersten Eintrag in $b$ auf 1 und geben Sie beide Vektoren aus. Berechnen Sie nun $\langle a,b \rangle$ und $M = a*b^T$ und geben Sie das Resultat und jeweils die resultierende Dimension aus (Achtung: zur Erstellung von $M$ müssen Sie die Vektoren $a$ und $b$ als Matrizen auffassen, z.B. mit np.asmatrix()).  Ersetzen Sie die Diagonale von $M$ nun so, dass die Determinante nicht 0 ist und lösen Sie dann das Gleichungssystem $Mx=b$.


```python
import numpy as np
a = np.arange(0, 9, 2)
b = np.linspace(0, 8, 5)
b[0] = 1
x = a.dot(b)
# alternatively also with a.reshape(-1, 1).dot(b.reshape(1, -1))
M = np.outer(a, b)
print(x, f'dims = {x.shape}')
print(M, f'dims = {M.shape}')
```

    120.0 dims = ()
    [[ 0.  0.  0.  0.  0.]
     [ 2.  4.  8. 12. 16.]
     [ 4.  8. 16. 24. 32.]
     [ 6. 12. 24. 36. 48.]
     [ 8. 16. 32. 48. 64.]] dims = (5, 5)



```python
M[np.diag_indices_from(M)] = 2
np.linalg.det(M)
```




    -499808.0




```python
np.linalg.solve(M, b)
```




    array([0.5       , 0.11809335, 0.03374096, 0.02084   , 0.01523785])



# Matrix powers
a) Definieren Sie zunächst eine Funktion, die die Matrix
$$
  A_x = 
  \begin{pmatrix}
  1 - \cos(x)&\sin(x) \\
  \sin(x)&1+\cos(x) \\
  \end{pmatrix}
$$

für beliebige $x$ erstellt und zurückgibt. Schreiben Sie eine weitere Funktion `potenzen`, die $A^{n}_{x}$ numerisch für beliebige $n$ berechnet, einmal mithilfe von `matrix_power(A, power)` aus dem Untermodul `linalg` und einmal durch wiederholtes Anwenden von dot. Die Funktion soll beide Matrizen zurückgeben. Verwenden Sie nun den Befehl `np.finfo(np.float64).eps` um sich die Maschinengenauigkeit anzusehen mit welcher die Einträge abgespeichert sind.


```python
import numpy as np
from IPython.display import display, Math
from decimal import Decimal
np.set_printoptions(precision=16)
def generate_A(x):
    A = np.array(
        [
            [1 - np.cos(x), np.sin(x)],
            [np.sin(x), 1 + np.cos(x)]
        ],
        dtype = Decimal
    )
    return A

def potenzen(M, n):
    M_pow_linalg = np.linalg.matrix_power(M, n)
    M_pow_dot = M.copy()
    for i in range(n - 1):
        M_pow_dot = M_pow_dot.dot(M.T)
    
    return M_pow_linalg, M_pow_dot

np.finfo(np.float64).eps
```




    2.220446049250313e-16



`np.finfo(np.float64).eps` gibt die Differenz zwischen 1 und der nächstkleinsten repräsentierbaren Floatzahl zurück. Das bedeutet mit einem eps-Wert von 2.220446049250313e-16 ist die nächste repräsentierbare float von 1, 1.0000000000000002220446... was umgekehrt auch bedeutet, dass alle Differenzen zwischen floats die kleiner als dieser eps-Wert sind nicht mehr informativ ist und damit die verglichenen Zahlen für diese Präzision gleich sind. 

Vergleichen Sie dann für $x=6$ und $n=2,\ldots,30$ auf wieviele Nachkommastellen die beiden Berechnungen gleich sind (vergleichen Sie hierfür bis zur Maschinengenauigkeit).


```python
def equal_decimal_places(a, b, precision = np.finfo(np.float64).eps):
    prec_lim_decimal_place = int(np.ceil(np.abs(np.log10(precision))))
    format_string = f'%.{prec_lim_decimal_place + 1}f'
    diff = np.abs(a - b)
    if  diff < precision:
        return prec_lim_decimal_place

    else:
        a_dec = (format_string % a).split('.')[-1][:-1]
        b_dec = (format_string % b).split('.')[-1][:-1]
        for i, (d1, d2) in enumerate(zip(a_dec, b_dec)):
            if d1 == d2:
                continue
            
            else:
                return i
            
def get_equal_decimal_places(m1, m2):
    decimal_places = []
    reshape_dim = m1.shape[0] * m1.shape[1]
    return [equal_decimal_places(val1, val2) for val1, val2 in zip(m1.reshape(reshape_dim), m2.reshape(reshape_dim))]

def format_latex(mat, matvar, x = '', n = '', label = ''):
    if label:
        latex_string = r'''
            %s^{%s}_{%s, %s} =
            \begin{pmatrix}
                %.16f & %.16f \\
                %.16f & %.16f \\
            \end{pmatrix}
        ''' % (matvar, n, x, label, *mat.reshape(4))
    
    else:
        latex_string = r'''
            %s^{%s}_{%s} =
            \begin{pmatrix}
                %.16f & %.16f \\
                %.16f & %.16f \\
            \end{pmatrix}
        ''' % (matvar, n, x, *mat.reshape(4))
    return latex_string

A = generate_A(6)
for n in np.arange(2, 31):
    for label, A_pow in zip(['matp', 'dotp'], potenzen(A, n)):
        display(
            Math(
                format_latex(A_pow, 'A', str(6), str(n), label)
            )
        )
    print(
        'equal decimal places for all values', 
        get_equal_decimal_places(
            *potenzen(A, n)
        ),
        '\n'
    )
```


$\displaystyle 
            A^{2}_{6, matp} =
            \begin{pmatrix}
                0.0796594266992680 & -0.5588309963978517 \\
                -0.5588309963978517 & 3.9203405733007326 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{2}_{6, dotp} =
            \begin{pmatrix}
                0.0796594266992680 & -0.5588309963978517 \\
                -0.5588309963978517 & 3.9203405733007326 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 16, 16, 16] 
    



$\displaystyle 
            A^{3}_{6, matp} =
            \begin{pmatrix}
                0.1593188533985359 & -1.1176619927957034 \\
                -1.1176619927957034 & 7.8406811466014661 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{3}_{6, dotp} =
            \begin{pmatrix}
                0.1593188533985359 & -1.1176619927957034 \\
                -1.1176619927957034 & 7.8406811466014661 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 16, 16, 16] 
    



$\displaystyle 
            A^{4}_{6, matp} =
            \begin{pmatrix}
                0.3186377067970718 & -2.2353239855914069 \\
                -2.2353239855914069 & 15.6813622932029340 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{4}_{6, dotp} =
            \begin{pmatrix}
                0.3186377067970718 & -2.2353239855914069 \\
                -2.2353239855914073 & 15.6813622932029340 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 16, 14, 16] 
    



$\displaystyle 
            A^{5}_{6, matp} =
            \begin{pmatrix}
                0.6372754135941436 & -4.4706479711828147 \\
                -4.4706479711828138 & 31.3627245864058715 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{5}_{6, dotp} =
            \begin{pmatrix}
                0.6372754135941436 & -4.4706479711828138 \\
                -4.4706479711828147 & 31.3627245864058715 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 14, 14, 16] 
    



$\displaystyle 
            A^{6}_{6, matp} =
            \begin{pmatrix}
                1.2745508271882873 & -8.9412959423656293 \\
                -8.9412959423656275 & 62.7254491728117500 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{6}_{6, dotp} =
            \begin{pmatrix}
                1.2745508271882873 & -8.9412959423656275 \\
                -8.9412959423656311 & 62.7254491728117500 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 14, 13, 16] 
    



$\displaystyle 
            A^{7}_{6, matp} =
            \begin{pmatrix}
                2.5491016543765745 & -17.8825918847312586 \\
                -17.8825918847312586 & 125.4508983456235001 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{7}_{6, dotp} =
            \begin{pmatrix}
                2.5491016543765745 & -17.8825918847312550 \\
                -17.8825918847312622 & 125.4508983456235001 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 14, 13, 16] 
    



$\displaystyle 
            A^{8}_{6, matp} =
            \begin{pmatrix}
                5.0982033087531491 & -35.7651837694625172 \\
                -35.7651837694625172 & 250.9017966912470285 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{8}_{6, dotp} =
            \begin{pmatrix}
                5.0982033087531491 & -35.7651837694625101 \\
                -35.7651837694625243 & 250.9017966912470001 \\
            \end{pmatrix}
        $


    equal decimal places for all values [16, 14, 13, 13] 
    



$\displaystyle 
            A^{9}_{6, matp} =
            \begin{pmatrix}
                10.1964066175063000 & -71.5303675389250628 \\
                -71.5303675389250344 & 501.8035933824940571 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{9}_{6, dotp} =
            \begin{pmatrix}
                10.1964066175062982 & -71.5303675389250202 \\
                -71.5303675389250486 & 501.8035933824940003 \\
            \end{pmatrix}
        $


    equal decimal places for all values [14, 13, 13, 13] 
    



$\displaystyle 
            A^{10}_{6, matp} =
            \begin{pmatrix}
                20.3928132350125999 & -143.0607350778501257 \\
                -143.0607350778500688 & 1003.6071867649882279 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{10}_{6, dotp} =
            \begin{pmatrix}
                20.3928132350125964 & -143.0607350778500404 \\
                -143.0607350778500972 & 1003.6071867649880005 \\
            \end{pmatrix}
        $


    equal decimal places for all values [14, 12, 13, 12] 
    



$\displaystyle 
            A^{11}_{6, matp} =
            \begin{pmatrix}
                40.7856264700251998 & -286.1214701557002513 \\
                -286.1214701557001945 & 2007.2143735299766831 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{11}_{6, dotp} =
            \begin{pmatrix}
                40.7856264700251927 & -286.1214701557000808 \\
                -286.1214701557001945 & 2007.2143735299760010 \\
            \end{pmatrix}
        $


    equal decimal places for all values [14, 12, 16, 12] 
    



$\displaystyle 
            A^{12}_{6, matp} =
            \begin{pmatrix}
                81.5712529400503996 & -572.2429403114005027 \\
                -572.2429403114003890 & 4014.4287470599538210 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{12}_{6, dotp} =
            \begin{pmatrix}
                81.5712529400503854 & -572.2429403114001616 \\
                -572.2429403114003890 & 4014.4287470599520020 \\
            \end{pmatrix}
        $


    equal decimal places for all values [13, 12, 16, 11] 
    



$\displaystyle 
            A^{13}_{6, matp} =
            \begin{pmatrix}
                163.1425058801008277 & -1144.4858806228012327 \\
                -1144.4858806228010053 & 8028.8574941199085515 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{13}_{6, dotp} =
            \begin{pmatrix}
                163.1425058801007708 & -1144.4858806228003232 \\
                -1144.4858806228007779 & 8028.8574941199040040 \\
            \end{pmatrix}
        $


    equal decimal places for all values [12, 11, 11, 11] 
    



$\displaystyle 
            A^{14}_{6, matp} =
            \begin{pmatrix}
                326.2850117602016553 & -2288.9717612456024654 \\
                -2288.9717612456020106 & 16057.7149882398189220 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{14}_{6, dotp} =
            \begin{pmatrix}
                326.2850117602015416 & -2288.9717612456006464 \\
                -2288.9717612456015559 & 16057.7149882398080081 \\
            \end{pmatrix}
        $


    equal decimal places for all values [12, 11, 11, 10] 
    



$\displaystyle 
            A^{15}_{6, matp} =
            \begin{pmatrix}
                652.5700235204033106 & -4577.9435224912049307 \\
                -4577.9435224912040212 & 32115.4299764796378440 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{15}_{6, dotp} =
            \begin{pmatrix}
                652.5700235204030832 & -4577.9435224912012927 \\
                -4577.9435224912031117 & 32115.4299764796160161 \\
            \end{pmatrix}
        $


    equal decimal places for all values [12, 11, 11, 10] 
    



$\displaystyle 
            A^{16}_{6, matp} =
            \begin{pmatrix}
                1305.1400470408066212 & -9155.8870449824098614 \\
                -9155.8870449824098614 & 64230.8599529592829640 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{16}_{6, dotp} =
            \begin{pmatrix}
                1305.1400470408061665 & -9155.8870449824025854 \\
                -9155.8870449824062234 & 64230.8599529592320323 \\
            \end{pmatrix}
        $


    equal decimal places for all values [12, 11, 11, 10] 
    



$\displaystyle 
            A^{17}_{6, matp} =
            \begin{pmatrix}
                2610.2800940816141519 & -18311.7740899648269988 \\
                -18311.7740899648197228 & 128461.7199059185659280 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{17}_{6, dotp} =
            \begin{pmatrix}
                2610.2800940816123330 & -18311.7740899648051709 \\
                -18311.7740899648124469 & 128461.7199059184640646 \\
            \end{pmatrix}
        $


    equal decimal places for all values [11, 10, 11, 9] 
    



$\displaystyle 
            A^{18}_{6, matp} =
            \begin{pmatrix}
                5220.5601881632283039 & -36623.5481799296612735 \\
                -36623.5481799296394456 & 256923.4398118371609598 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{18}_{6, dotp} =
            \begin{pmatrix}
                5220.5601881632246659 & -36623.5481799296103418 \\
                -36623.5481799296248937 & 256923.4398118369281292 \\
            \end{pmatrix}
        $


    equal decimal places for all values [11, 10, 10, 8] 
    



$\displaystyle 
            A^{19}_{6, matp} =
            \begin{pmatrix}
                10441.1203763264566078 & -73247.0963598593225470 \\
                -73247.0963598593079951 & 513846.8796236743801273 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{19}_{6, dotp} =
            \begin{pmatrix}
                10441.1203763264493318 & -73247.0963598592206836 \\
                -73247.0963598592497874 & 513846.8796236738562584 \\
            \end{pmatrix}
        $


    equal decimal places for all values [10, 9, 9, 8] 
    



$\displaystyle 
            A^{20}_{6, matp} =
            \begin{pmatrix}
                20882.2407526529132156 & -146494.1927197186450940 \\
                -146494.1927197186159901 & 1027693.7592473488766700 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{20}_{6, dotp} =
            \begin{pmatrix}
                20882.2407526528986637 & -146494.1927197184413671 \\
                -146494.1927197184995748 & 1027693.7592473477125168 \\
            \end{pmatrix}
        $


    equal decimal places for all values [9, 9, 9, 8] 
    



$\displaystyle 
            A^{21}_{6, matp} =
            \begin{pmatrix}
                41764.4815053058337071 & -292988.3854394373483956 \\
                -292988.3854394372319803 & 2055387.5184946979861706 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{21}_{6, dotp} =
            \begin{pmatrix}
                41764.4815053057973273 & -292988.3854394368827343 \\
                -292988.3854394369991496 & 2055387.5184946954250336 \\
            \end{pmatrix}
        $


    equal decimal places for all values [9, 8, 8, 8] 
    



$\displaystyle 
            A^{22}_{6, matp} =
            \begin{pmatrix}
                83528.9630106116674142 & -585976.7708788746967912 \\
                -585976.7708788744639605 & 4110775.0369893964380026 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{22}_{6, dotp} =
            \begin{pmatrix}
                83528.9630106115946546 & -585976.7708788737654686 \\
                -585976.7708788739982992 & 4110775.0369893908500671 \\
            \end{pmatrix}
        $


    equal decimal places for all values [9, 8, 8, 8] 
    



$\displaystyle 
            A^{23}_{6, matp} =
            \begin{pmatrix}
                167057.9260212233348284 & -1171953.5417577493935823 \\
                -1171953.5417577491607517 & 8221550.0739787928760052 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{23}_{6, dotp} =
            \begin{pmatrix}
                167057.9260212231893092 & -1171953.5417577475309372 \\
                -1171953.5417577479965985 & 8221550.0739787817001343 \\
            \end{pmatrix}
        $


    equal decimal places for all values [9, 8, 8, 7] 
    



$\displaystyle 
            A^{24}_{6, matp} =
            \begin{pmatrix}
                334115.8520424466696568 & -2343907.0835154987871647 \\
                -2343907.0835154987871647 & 16443100.1479575876146555 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{24}_{6, dotp} =
            \begin{pmatrix}
                334115.8520424463786185 & -2343907.0835154950618744 \\
                -2343907.0835154959931970 & 16443100.1479575634002686 \\
            \end{pmatrix}
        $


    equal decimal places for all values [9, 8, 8, 7] 
    



$\displaystyle 
            A^{25}_{6, matp} =
            \begin{pmatrix}
                668231.7040848936885595 & -4687814.1670309994369745 \\
                -4687814.1670309975743294 & 32886200.2959151752293110 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{25}_{6, dotp} =
            \begin{pmatrix}
                668231.7040848927572370 & -4687814.1670309901237488 \\
                -4687814.1670309919863939 & 32886200.2959151268005371 \\
            \end{pmatrix}
        $


    equal decimal places for all values [8, 8, 8, 7] 
    



$\displaystyle 
            A^{26}_{6, matp} =
            \begin{pmatrix}
                1336463.4081697873771191 & -9375628.3340619988739491 \\
                -9375628.3340619970113039 & 65772400.5918303579092026 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{26}_{6, dotp} =
            \begin{pmatrix}
                1336463.4081697855144739 & -9375628.3340619802474976 \\
                -9375628.3340619839727879 & 65772400.5918302536010742 \\
            \end{pmatrix}
        $


    equal decimal places for all values [8, 7, 7, 6] 
    



$\displaystyle 
            A^{27}_{6, matp} =
            \begin{pmatrix}
                2672926.8163395747542381 & -18751256.6681239977478981 \\
                -18751256.6681239940226078 & 131544801.1836607307195663 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{27}_{6, dotp} =
            \begin{pmatrix}
                2672926.8163395710289478 & -18751256.6681239604949951 \\
                -18751256.6681239679455757 & 131544801.1836605072021484 \\
            \end{pmatrix}
        $


    equal decimal places for all values [8, 7, 7, 6] 
    



$\displaystyle 
            A^{28}_{6, matp} =
            \begin{pmatrix}
                5345853.6326791495084763 & -37502513.3362479954957962 \\
                -37502513.3362479954957962 & 263089602.3673214912414551 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{28}_{6, dotp} =
            \begin{pmatrix}
                5345853.6326791420578957 & -37502513.3362479209899902 \\
                -37502513.3362479358911514 & 263089602.3673210144042969 \\
            \end{pmatrix}
        $


    equal decimal places for all values [8, 7, 7, 6] 
    



$\displaystyle 
            A^{29}_{6, matp} =
            \begin{pmatrix}
                10691707.2653583008795977 & -75005026.6724960058927536 \\
                -75005026.6724959909915924 & 526179204.7346430420875549 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{29}_{6, dotp} =
            \begin{pmatrix}
                10691707.2653582841157913 & -75005026.6724958419799805 \\
                -75005026.6724958717823029 & 526179204.7346420288085938 \\
            \end{pmatrix}
        $


    equal decimal places for all values [6, 5, 6, 5] 
    



$\displaystyle 
            A^{30}_{6, matp} =
            \begin{pmatrix}
                21383414.5307166017591953 & -150010053.3449920117855072 \\
                -150010053.3449920117855072 & 1052358409.4692862033843994 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{30}_{6, dotp} =
            \begin{pmatrix}
                21383414.5307165682315826 & -150010053.3449916839599609 \\
                -150010053.3449917435646057 & 1052358409.4692840576171875 \\
            \end{pmatrix}
        $


    equal decimal places for all values [6, 5, 5, 5] 
    


Vergleichen Sie auch für weitere Werte von $x$.

b) Berechnen Sie $A^{n}_{6}$ für $n=1,\ldots,4$. Untersuchen sie nun genauso die Matrix $B_x=\frac{1}{2}A_x$, was fällt Ihnen dabei auf?


```python
for n in np.arange(1, 5):
    for label, A_pow in zip(['matp', 'dotp'], potenzen(A, n)):
        display(
            Math(
                format_latex(A_pow, 'A', str(6), str(n), label)
            )
        )
    
    print()

B = 0.5*A
for n in np.arange(1, 5):
    for label, B_pow in zip(['matp', 'dotp'], potenzen(B, n)):
        display(
            Math(
                format_latex(B_pow, 'B', str(6), str(n), label)
            )
        )
```


$\displaystyle 
            A^{1}_{6, matp} =
            \begin{pmatrix}
                0.0398297133496339 & -0.2794154981989259 \\
                -0.2794154981989259 & 1.9601702866503661 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{1}_{6, dotp} =
            \begin{pmatrix}
                0.0398297133496339 & -0.2794154981989259 \\
                -0.2794154981989259 & 1.9601702866503661 \\
            \end{pmatrix}
        $


    



$\displaystyle 
            A^{2}_{6, matp} =
            \begin{pmatrix}
                0.0796594266992680 & -0.5588309963978517 \\
                -0.5588309963978517 & 3.9203405733007326 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{2}_{6, dotp} =
            \begin{pmatrix}
                0.0796594266992680 & -0.5588309963978517 \\
                -0.5588309963978517 & 3.9203405733007326 \\
            \end{pmatrix}
        $


    



$\displaystyle 
            A^{3}_{6, matp} =
            \begin{pmatrix}
                0.1593188533985359 & -1.1176619927957034 \\
                -1.1176619927957034 & 7.8406811466014661 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{3}_{6, dotp} =
            \begin{pmatrix}
                0.1593188533985359 & -1.1176619927957034 \\
                -1.1176619927957034 & 7.8406811466014661 \\
            \end{pmatrix}
        $


    



$\displaystyle 
            A^{4}_{6, matp} =
            \begin{pmatrix}
                0.3186377067970718 & -2.2353239855914069 \\
                -2.2353239855914069 & 15.6813622932029340 \\
            \end{pmatrix}
        $



$\displaystyle 
            A^{4}_{6, dotp} =
            \begin{pmatrix}
                0.3186377067970718 & -2.2353239855914069 \\
                -2.2353239855914073 & 15.6813622932029340 \\
            \end{pmatrix}
        $


    



$\displaystyle 
            B^{1}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251830 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{1}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251830 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251832 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251832 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{3}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251833 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{3}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251833 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{4}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251834 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{4}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994630 & 0.9800851433251834 \\
            \end{pmatrix}
        $


Belegen Sie Ihre Vermutung indem Sie $B^{2}_{x}$ für beliebige $x$ berechnen (verwenden Sie hierfür sympy Routinen).


```python
from sympy import Matrix
from sympy.abc import a, b, c, d
B = Matrix(
    [
        [a, b],
        [c, d]
    ]
)

for x in range(1, 11):
    latex_string_base = format_latex(
        np.asarray(
            B.evalf(subs = {k: v for k, v in zip('abcd', 0.5 * generate_A(x).reshape(4))})
        ),
        'B',
        str(x)
    )
    latex_string_pow = format_latex(
        np.asarray(
            (B*B).evalf(subs = {k: v for k, v in zip('abcd', 0.5 * generate_A(x).reshape(4))}), 
            dtype = np.float64
        ),
        'B',
        str(x),
        str(2)
    )
    
    for latex_string in [latex_string_base, latex_string_pow]:
        display(
            Math(
                latex_string
            )
        )
```


$\displaystyle 
            B^{}_{1} =
            \begin{pmatrix}
                0.2298488470659301 & 0.4207354924039483 \\
                0.4207354924039483 & 0.7701511529340699 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{1} =
            \begin{pmatrix}
                0.2298488470659301 & 0.4207354924039483 \\
                0.4207354924039483 & 0.7701511529340699 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{2} =
            \begin{pmatrix}
                0.7080734182735712 & 0.4546487134128409 \\
                0.4546487134128409 & 0.2919265817264288 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{2} =
            \begin{pmatrix}
                0.7080734182735712 & 0.4546487134128409 \\
                0.4546487134128409 & 0.2919265817264288 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{3} =
            \begin{pmatrix}
                0.9949962483002227 & 0.0705600040299336 \\
                0.0705600040299336 & 0.0050037516997773 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{3} =
            \begin{pmatrix}
                0.9949962483002227 & 0.0705600040299336 \\
                0.0705600040299336 & 0.0050037516997773 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{4} =
            \begin{pmatrix}
                0.8268218104318059 & -0.3784012476539641 \\
                -0.3784012476539641 & 0.1731781895681940 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{4} =
            \begin{pmatrix}
                0.8268218104318059 & -0.3784012476539641 \\
                -0.3784012476539641 & 0.1731781895681940 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{5} =
            \begin{pmatrix}
                0.3581689072683868 & -0.4794621373315692 \\
                -0.4794621373315692 & 0.6418310927316131 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{5} =
            \begin{pmatrix}
                0.3581689072683868 & -0.4794621373315692 \\
                -0.4794621373315692 & 0.6418310927316131 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{6} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251830 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{6} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251830 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{7} =
            \begin{pmatrix}
                0.1230488728283477 & 0.3284932993593945 \\
                0.3284932993593945 & 0.8769511271716524 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{7} =
            \begin{pmatrix}
                0.1230488728283477 & 0.3284932993593945 \\
                0.3284932993593945 & 0.8769511271716524 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{8} =
            \begin{pmatrix}
                0.5727500169043067 & 0.4946791233116909 \\
                0.4946791233116909 & 0.4272499830956932 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{8} =
            \begin{pmatrix}
                0.5727500169043067 & 0.4946791233116908 \\
                0.4946791233116908 & 0.4272499830956932 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{9} =
            \begin{pmatrix}
                0.9555651309423385 & 0.2060592426208783 \\
                0.2060592426208783 & 0.0444348690576615 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{9} =
            \begin{pmatrix}
                0.9555651309423385 & 0.2060592426208783 \\
                0.2060592426208783 & 0.0444348690576615 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{}_{10} =
            \begin{pmatrix}
                0.9195357645382263 & -0.2720105554446849 \\
                -0.2720105554446849 & 0.0804642354617738 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{2}_{10} =
            \begin{pmatrix}
                0.9195357645382264 & -0.2720105554446849 \\
                -0.2720105554446849 & 0.0804642354617738 \\
            \end{pmatrix}
        $


c) Die besondere Struktur von $B_x$ können wir zur Evaluation der Methoden `dot` und `np.matrix_power` verwenden.  Rufen Sie Ihre Funktion `potenzen` für $B^{20}_{6}$ auf und vergleichen Sie die beiden Berechnungen mit $B$. Wählen Sie dafür die Ausgabegenauigkeit hoch genug (zB mit `np.set_printoptions(precision=16)`).


```python
B = 0.5*generate_A(6)
np.set_printoptions(precision=16)
display(
    Math(
        format_latex(B, 'B', str(6))
    )
)

for label, B_pow in zip(['matp', 'dotp'], potenzen(B, 20)):
    display(
        Math(
            format_latex(B_pow, 'B', str(6), str(20), label)
        )
    )
```


$\displaystyle 
            B^{}_{6} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994629 & 0.9800851433251830 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994631 \\
                -0.1397077490994631 & 0.9800851433251847 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994630 & 0.9800851433251836 \\
            \end{pmatrix}
        $


Wiederholen Sie dies für mehrere Werte $x$ und stellen Sie eine Vermutung auf, welche der beiden Methoden exakter rechnet.


```python
for x in np.arange(1, 16):
    B = 0.5*generate_A(x)
    for label, B_pow in zip(['matp', 'dotp'], potenzen(B, 20)):
        display(
            Math(
                format_latex(B_pow, 'B', str(x), str(20), label)
            )
        )
```


$\displaystyle 
            B^{20}_{1, matp} =
            \begin{pmatrix}
                0.2298488470659301 & 0.4207354924039483 \\
                0.4207354924039483 & 0.7701511529340699 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{1, dotp} =
            \begin{pmatrix}
                0.2298488470659301 & 0.4207354924039483 \\
                0.4207354924039483 & 0.7701511529340699 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{2, matp} =
            \begin{pmatrix}
                0.7080734182735712 & 0.4546487134128409 \\
                0.4546487134128409 & 0.2919265817264288 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{2, dotp} =
            \begin{pmatrix}
                0.7080734182735712 & 0.4546487134128409 \\
                0.4546487134128409 & 0.2919265817264288 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{3, matp} =
            \begin{pmatrix}
                0.9949962483002216 & 0.0705600040299336 \\
                0.0705600040299336 & 0.0050037516997773 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{3, dotp} =
            \begin{pmatrix}
                0.9949962483002226 & 0.0705600040299336 \\
                0.0705600040299336 & 0.0050037516997773 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{4, matp} =
            \begin{pmatrix}
                0.8268218104318050 & -0.3784012476539637 \\
                -0.3784012476539636 & 0.1731781895681938 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{4, dotp} =
            \begin{pmatrix}
                0.8268218104318056 & -0.3784012476539639 \\
                -0.3784012476539640 & 0.1731781895681940 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{5, matp} =
            \begin{pmatrix}
                0.3581689072683868 & -0.4794621373315692 \\
                -0.4794621373315692 & 0.6418310927316131 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{5, dotp} =
            \begin{pmatrix}
                0.3581689072683868 & -0.4794621373315692 \\
                -0.4794621373315692 & 0.6418310927316131 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{6, matp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994631 \\
                -0.1397077490994631 & 0.9800851433251847 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{6, dotp} =
            \begin{pmatrix}
                0.0199148566748170 & -0.1397077490994629 \\
                -0.1397077490994630 & 0.9800851433251836 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{7, matp} =
            \begin{pmatrix}
                0.1230488728283477 & 0.3284932993593945 \\
                0.3284932993593945 & 0.8769511271716524 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{7, dotp} =
            \begin{pmatrix}
                0.1230488728283477 & 0.3284932993593945 \\
                0.3284932993593945 & 0.8769511271716524 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{8, matp} =
            \begin{pmatrix}
                0.5727500169043064 & 0.4946791233116904 \\
                0.4946791233116905 & 0.4272499830956928 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{8, dotp} =
            \begin{pmatrix}
                0.5727500169043067 & 0.4946791233116908 \\
                0.4946791233116908 & 0.4272499830956932 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{9, matp} =
            \begin{pmatrix}
                0.9555651309423385 & 0.2060592426208783 \\
                0.2060592426208783 & 0.0444348690576615 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{9, dotp} =
            \begin{pmatrix}
                0.9555651309423385 & 0.2060592426208783 \\
                0.2060592426208783 & 0.0444348690576615 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{10, matp} =
            \begin{pmatrix}
                0.9195357645382263 & -0.2720105554446849 \\
                -0.2720105554446849 & 0.0804642354617738 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{10, dotp} =
            \begin{pmatrix}
                0.9195357645382263 & -0.2720105554446849 \\
                -0.2720105554446849 & 0.0804642354617738 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{11, matp} =
            \begin{pmatrix}
                0.4977871510059748 & -0.4999951032753518 \\
                -0.4999951032753519 & 0.5022128489940254 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{11, dotp} =
            \begin{pmatrix}
                0.4977871510059746 & -0.4999951032753518 \\
                -0.4999951032753518 & 0.5022128489940254 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{12, matp} =
            \begin{pmatrix}
                0.0780730206337539 & -0.2682864590002175 \\
                -0.2682864590002175 & 0.9219269793662461 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{12, dotp} =
            \begin{pmatrix}
                0.0780730206337539 & -0.2682864590002175 \\
                -0.2682864590002175 & 0.9219269793662461 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{13, matp} =
            \begin{pmatrix}
                0.0462766092749019 & 0.2100835184133205 \\
                0.2100835184133205 & 0.9537233907250982 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{13, dotp} =
            \begin{pmatrix}
                0.0462766092749019 & 0.2100835184133205 \\
                0.2100835184133205 & 0.9537233907250982 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{14, matp} =
            \begin{pmatrix}
                0.4316313908960838 & 0.4953036778474358 \\
                0.4953036778474359 & 0.5683686091039175 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{14, dotp} =
            \begin{pmatrix}
                0.4316313908960833 & 0.4953036778474352 \\
                0.4953036778474352 & 0.5683686091039168 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{15, matp} =
            \begin{pmatrix}
                0.8798439564294106 & 0.3251439200785585 \\
                0.3251439200785585 & 0.1201560435705894 \\
            \end{pmatrix}
        $



$\displaystyle 
            B^{20}_{15, dotp} =
            \begin{pmatrix}
                0.8798439564294106 & 0.3251439200785585 \\
                0.3251439200785585 & 0.1201560435705894 \\
            \end{pmatrix}
        $


Evaluieren Sie dies nun, indem Sie für $n=2,\ldots,25$ die Norm von $(B_x−B^{n}_{x})$ für beide Methoden berechnen (im `numpy` Untermodul `linalg` gibt es die Funktion `norm`). Wie verhalten sich die beiden Methoden?


```python
B = 0.5*generate_A(6)
for n in np.arange(2, 26):
    for label, B_pow in zip(['matp', 'dotp'], potenzen(B, n)):
        display(
            Math(
                r'||(B_{%i} - B^{%i}_{%i, %s})|| = {%.16f}' %
                (6, n, 6, label, np.linalg.norm(B - B_pow))
            )
        )
```


$\displaystyle ||(B_{6} - B^{2}_{6, matp})|| = {0.0000000000000001}$



$\displaystyle ||(B_{6} - B^{2}_{6, dotp})|| = {0.0000000000000001}$



$\displaystyle ||(B_{6} - B^{3}_{6, matp})|| = {0.0000000000000002}$



$\displaystyle ||(B_{6} - B^{3}_{6, dotp})|| = {0.0000000000000002}$



$\displaystyle ||(B_{6} - B^{4}_{6, matp})|| = {0.0000000000000003}$



$\displaystyle ||(B_{6} - B^{4}_{6, dotp})|| = {0.0000000000000003}$



$\displaystyle ||(B_{6} - B^{5}_{6, matp})|| = {0.0000000000000004}$



$\displaystyle ||(B_{6} - B^{5}_{6, dotp})|| = {0.0000000000000004}$



$\displaystyle ||(B_{6} - B^{6}_{6, matp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{6}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{7}_{6, matp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{7}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{8}_{6, matp})|| = {0.0000000000000007}$



$\displaystyle ||(B_{6} - B^{8}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{9}_{6, matp})|| = {0.0000000000000007}$



$\displaystyle ||(B_{6} - B^{9}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{10}_{6, matp})|| = {0.0000000000000008}$



$\displaystyle ||(B_{6} - B^{10}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{11}_{6, matp})|| = {0.0000000000000009}$



$\displaystyle ||(B_{6} - B^{11}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{12}_{6, matp})|| = {0.0000000000000010}$



$\displaystyle ||(B_{6} - B^{12}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{13}_{6, matp})|| = {0.0000000000000011}$



$\displaystyle ||(B_{6} - B^{13}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{14}_{6, matp})|| = {0.0000000000000012}$



$\displaystyle ||(B_{6} - B^{14}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{15}_{6, matp})|| = {0.0000000000000012}$



$\displaystyle ||(B_{6} - B^{15}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{16}_{6, matp})|| = {0.0000000000000013}$



$\displaystyle ||(B_{6} - B^{16}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{17}_{6, matp})|| = {0.0000000000000013}$



$\displaystyle ||(B_{6} - B^{17}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{18}_{6, matp})|| = {0.0000000000000015}$



$\displaystyle ||(B_{6} - B^{18}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{19}_{6, matp})|| = {0.0000000000000016}$



$\displaystyle ||(B_{6} - B^{19}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{20}_{6, matp})|| = {0.0000000000000017}$



$\displaystyle ||(B_{6} - B^{20}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{21}_{6, matp})|| = {0.0000000000000018}$



$\displaystyle ||(B_{6} - B^{21}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{22}_{6, matp})|| = {0.0000000000000019}$



$\displaystyle ||(B_{6} - B^{22}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{23}_{6, matp})|| = {0.0000000000000019}$



$\displaystyle ||(B_{6} - B^{23}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{24}_{6, matp})|| = {0.0000000000000020}$



$\displaystyle ||(B_{6} - B^{24}_{6, dotp})|| = {0.0000000000000006}$



$\displaystyle ||(B_{6} - B^{25}_{6, matp})|| = {0.0000000000000020}$



$\displaystyle ||(B_{6} - B^{25}_{6, dotp})|| = {0.0000000000000006}$


d) Mit den Untermodulen `Display` und `Latex` aus dem Modul `IPython.display` ist es möglich die Ausgaben mit LaTex-Quellcode zu formatieren. So können auch Laufvariablen integriert werden z.B.
```
for n in range(8, 15):
    display(
        Latex(f'$B^{ {n}}$:', B)
    )
```
Formatieren Sie dahingehend die Ausgabe Ihrer Lösungen in a) - c) übersichtlich. (Zusatzaufgabe: Vergleichen Sie was passiert, wenn in $A$ die Werte als Decimal anstatt float gespeichert werden.)

Die obigen Lösungen zeigen keinerlei Abweichung zwischen den Methoden für den default Datentyp `np.float64` allerdings sieht man einen deutlichen Unterschied zwischen der Matrixbasis und der Matrixpotenz im Falle des Typs `Decimal`, wobei sich hier zeigt dass die naive Implementierung über `dot` genauer zu sein scheint als `np.linalg.matrix_power`

# Function timing
Schreiben Sie ein Programm, das die Ausführungszeit der Methoden zur Eigenwertberechnung in sympy und numpy vergleicht. Erstellen Sie hierfür 2 Random-Matrizen von beliebiger Größe $n \times n$ mit Werten zwischen 0 und 1: benutzen Sie dafür `np.random` und die SymPy-Routine `randMatrix(size)`. Schreiben Sie dann zwei Funktionen `fnum` und `fsym`, welche die Eigenwerte der Matrizen mithilfe von `numpy` und `sympy` Methoden berechnen und zurückgeben. Die Eigenwerte sollen in beiden Fällen als numerische Werte dargestellt werden. Verwenden Sie jetzt die Methode `timeit(f,number=n)` aus dem gleichnamigen Modul `timeit` um die Zeit zu messen, die zur Ausführung benötigt wird (number gibt an wieviele Runden gemessen werden). Wie verhalten sich die Berechnungszeiten zueinander? Was passiert bei größeren Dimensionen der Matrizen?


```python
import numpy as np
from sympy import randMatrix
from timeit import timeit

def time_numpy_eigvals(size, repeats = 1000):
    stmt = 'fnum(mat)'
    setup = \
    'import numpy as np\n' + \
    'def fnum(mat):\n' + \
    '\treturn np.linalg.eigvals(mat)\n' + \
    f'mat = np.random.random(size = ({size}, {size}))'
    return timeit(stmt, setup, number = repeats)

def time_sympy_eigvals(size, repeats = 1000):
    stmt = 'fsym(mat)'
    setup = \
    'from sympy import randMatrix\n' + \
    'def fsym(mat):\n' + \
    '\treturn [k.evalf() for k in mat.eigenvals().keys()]\n' + \
    f'mat = randMatrix({size}, min = 0, max = 100)/100'
    return timeit(stmt, setup, number = repeats)
```


```python
time_numpy_eigvals(5, 100)
```




    0.0031546480000006483




```python
time_sympy_eigvals(5, 100)
```




    1.1592778250000002




```python
for n in range(2, 10):
    print(f'matrix size is {n} x {n}')
    print('numpy takes %.10f seconds to execute 100 times' % time_numpy_eigvals(n, 100))
    print('sympy takes %.10f seconds to execute 100 times' % time_sympy_eigvals(n, 100))
```

    matrix size is 2 x 2
    numpy takes 0.0017448840 seconds to execute 100 times
    sympy takes 0.2302692460 seconds to execute 100 times
    matrix size is 3 x 3
    numpy takes 0.0020699650 seconds to execute 100 times
    sympy takes 0.6163522760 seconds to execute 100 times
    matrix size is 4 x 4
    numpy takes 0.0025905310 seconds to execute 100 times
    sympy takes 4.3695153690 seconds to execute 100 times
    matrix size is 5 x 5
    numpy takes 0.0028196620 seconds to execute 100 times
    sympy takes 3.6831416880 seconds to execute 100 times
    matrix size is 6 x 6
    numpy takes 0.0029417590 seconds to execute 100 times
    sympy takes 6.9899539850 seconds to execute 100 times
    matrix size is 7 x 7
    numpy takes 0.0030177500 seconds to execute 100 times
    sympy takes 7.0813784480 seconds to execute 100 times
    matrix size is 8 x 8
    numpy takes 0.0031526520 seconds to execute 100 times
    sympy takes 11.2024311650 seconds to execute 100 times
    matrix size is 9 x 9
    numpy takes 0.0030967980 seconds to execute 100 times
    sympy takes 18.0902586360 seconds to execute 100 times


Die Berechnungzeiten verhalten sich sehr stabil wobei es auch oft darauf ankommt was sonst noch so auf dem Rechner läuft. Sonderbar ist jedoch, das für große Matrizen das Timing für `sympy` doch länger dauert als jenes für `numpy` was sich jedoch nicht auf die Berechnungszeiten auswirkt.

6c9a7f8c6d63e31f78be4a670e37601275cb750a
ipynb
Jupyter Notebook
termin3.ipynb
dmalzl/mathcode
6a22ad0b2f193e0b7fa3926a65a6a0791f2e2366
MIT
termin3.ipynb
dmalzl/mathcode
6a22ad0b2f193e0b7fa3926a65a6a0791f2e2366
MIT
termin3.ipynb
dmalzl/mathcode
6a22ad0b2f193e0b7fa3926a65a6a0791f2e2366
MIT
Qwen/Qwen-72B
1. YES
2. YES