---
jupytext:
  formats: ipynb,md:myst
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
    jupytext_version: 1.16.0
kernelspec:
  display_name: Python 3
  language: python
  name: python3
---

# Eksempler på matrixalgebra i SymPy

Denne notebook viser klassiske matrixoperationer med **SymPy** (symbolsk matematik).

```{code-cell}
import sympy as sp
sp.init_printing()

# Definér to 2x2-matricer
A = sp.Matrix([[1, 2],
               [3, 4]])

B = sp.Matrix([[5, 6],
               [7, 8]])

A, B
```

## 1) Matrixaddition og -subtraktion

```{code-cell}
C = A + B
D = A - B
C, D
```

## 2) Skalarmultiplikation

```{code-cell}
E = 3 * A
E
```

## 3) Matrixmultiplikation

```{code-cell}
F = A * B          # eller A @ B i nyere Python, men SymPy bruger '*'
F
```

## 4) Transponering

```{code-cell}
A_T = A.T
A_T
```

## 5) Invers matrix

```{code-cell}
A_inv = A.inv()
A_inv
```

## 6) Determinant

```{code-cell}
det_A = A.det()
det_A
```

## 7) Rang

```{code-cell}
rank_A = A.rank()
rank_A
```

## 8) Egenværdier og egenvektorer

```{code-cell}
eigenvals = A.eigenvals()     # dict: {egenværdi: algebraisk multiplicitet}
eigenvects = A.eigenvects()   # liste af (egenværdi, geom. multiplicitet, [egenvectors])
eigenvals, eigenvects
```

## 9) Løsning af lineære ligningssystemer $Ax=b$

```{code-cell}
b = sp.Matrix([1, 2])
x = sp.linsolve((A,b))   # numerisk stabil i SymPy; finder eksakt løsning som rationale tal
x
```

## 10) Karakteristisk polynomium

```{code-cell}
lambda_symbol = sp.symbols('λ')  # bare til visning
charpoly = A.charpoly(lambda_symbol)
charpoly.as_expr()
```

## 11) Diagonalisering (hvis mulig)

```{code-cell}
P, D = A.diagonalize()  # giver fejl hvis den ikke er diagonaliserbar
P, D
```
